#!/bin/bash -f
-# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2023 CEA/DEN, EDF R&D, OPEN CASCADE
#
# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-# File : runLightSalome.sh
-# Author : Vadim SANDLER, Open CASCADE S.A.S, vadim.sandler@opencascade.com
-
-
###
# function show_usage() : print help an exit
###
-show_usage() {
- local RET=0
- if [ $# -gt 0 ] ; then RET=$1 ; fi
- local MOVE1="echo -en \\033[35G"
- local MOVE2="echo -en \\033[22G"
+show_usage()
+{
echo
echo "Run standalone SALOME desktop".
echo
- echo "Usage: $(basename $0) [options]"
+ echo "Usage: $(basename ${0}) [options]"
echo
echo "Options:"
- echo "-m MODULES, --modules=MODULES List of modules, separated by comma, to be used within SALOME session."
- echo "-r RCFILE, --resources=RCFILE Preferences file to be used within SALOME session."
- echo "-v, --version Print SALOME version and exit."
- echo "-h, --help Print this help and exit."
+ echo "-h, --help Print this information and exit."
+ echo "-v, --version Print SALOME version and exit."
+ echo "-m MODULES, --modules=MODULES Comma-separated list of modules to be used within SALOME session."
+ echo "-r RCFILE, --resources=RCFILE User preferences file to be used within SALOME session, instead of default one."
+ echo "-a LANGUAGE, --language=LANGUAGE Language to be used within SALOME session, instead of default one."
+ echo "-z, --no-splash Do not display splash screeen."
+ echo "-c, --no-exception-handler Do not install exception handler (allows debugging exceptions)."
+ echo "-l, --show-license Show license dialog at start-up."
echo
echo "Example:"
- echo " $(basename $0) --modules=LIGHT,PYLIGHT"
+ echo " $(basename ${0}) --modules=LIGHT,PYLIGHT"
echo
- exit ${RET}
+ exit 0
}
###
# function show_version() : print SALOME version an exit
###
-show_version() {
- local RET=0
- local DIR=$(dirname $0)
- if [ -z "${DIR}" ] ; then DIR=. ; fi
- if [ -f ${DIR}/VERSION ] ; then
- cat ${DIR}/VERSION
+show_version()
+{
+ local where=$(readlink -f $(dirname "${0}"))
+ if [ -f ${where}/VERSION ]
+ then
+ cat ${where}/VERSION
else
echo
- echo "Error: can't find VERSION file" > /dev/stderr
+ echo "Error: can't find VERSION file" > /dev/stderr
echo
- RET=1
+ exit 1
fi
- exit ${RET}
+ exit 0
}
###
-# function option_modules() : process --modules / -m command line option
+# function long_option() : extract value from long command line option
###
-option_modules() {
- local MODS
- case $1 in
- modules\=* )
- MODS=`echo $1 | awk -F "=" '{ if(NF>1) print $2 ; else print "" }'`
- ;;
- modules* )
- echo
- echo "Error: Invalid option format, please use --modules=MODULES" > /dev/stderr
- echo
- exit 1
- ;;
- * )
- MODS=$1
- ;;
- esac
- if [ "X${MODS}" = "X" ] ; then
- echo
- echo "Error: Please, specify list of modules" > /dev/stderr
- echo
+long_option()
+{
+ local option=${1}
+ local value=${2}
+
+ if [ $(echo ${value} | grep -e "^${option}=") ]
+ then
+ value=$(echo ${value} | sed -e "s%^${option}=%%")
+ else
+ value=
+ fi
+
+ if [ "${value}" = "" ]
+ then
+ echo "Error: please, specify value for option '--${option}'" > /dev/stderr
exit 1
fi
- MODULES=`echo ${MODS} | sed -e "s%,% %g"`
- return
+
+ echo ${value}
}
###
-# function option_resources() : process --resources / -r command line option
+# function remove_duplications() : remove duplications
###
-option_resources() {
- local RCF
- case $1 in
- resources\=* )
- RCF=`echo $1 | awk -F "=" '{ if(NF>1) print $2 ; else print "" }'` ;;
- resources* )
- echo
- echo "Error: Invalid option format, please use --resources=RCFILE" > /dev/stderr
- echo
- exit 1
- ;;
- * ) RCF=$1
- esac
- if [ "X${RCF}" = "X" ] ; then
- echo
- echo "Error: Please, specify resource file" > /dev/stderr
- echo
- exit 1
- fi
- RCFILE="--resources=${RCF}"
- return
+remove_duplications()
+{
+ local unique
+ local m
+ for m in ${@}
+ do
+ case ${m} in
+ KERNEL | GUI )
+ ;;
+ * )
+ echo ${unique} | grep -qvE "\<${m}\>" && unique+=" ${m}"
+ ;;
+ esac
+ done
+ echo ${unique}
}
+
###
# function run_light_salome(): run SALOME
###
-run_light_salome(){
-
- local MODULES
- local RCFILE
+run_light_salome()
+{
+ local modules
+ local rcfile
+ local language
+ local no_splash=0
+ local debug_exceptions=0
+ local show_license=0
###
# process command line options
###
- local OPTION
- while getopts ":-:hvm:r:" OPTION "$@" ; do
- if [ "${OPTION}" = "-" ] ; then
+ local option
+ while getopts ":-:hvzclm:r:a:" option "${@}"
+ do
+ if [ "${option}" = "-" ]
+ then
case ${OPTARG} in
- help ) show_usage ;;
- version ) show_version ;;
- modules* ) option_modules "${OPTARG}" ;;
- resources* ) option_resources "${OPTARG}" ;;
- * ) echo "!!!Wrong option!!!" ; exit 1 ;;
+ help ) show_usage ;;
+ version ) show_version ;;
+ no-splash ) no_splash=1 ;;
+ no-exception-handler ) debug_exceptions=1 ;;
+ show-license ) show_license=1 ;;
+ modules* ) modules=$(long_option modules ${OPTARG}) ;;
+ resources* ) rcfile=$(long_option resources ${OPTARG}) ;;
+ language* ) language=$(long_option language ${OPTARG}) ;;
+ * ) echo "Wrong option: --${OPTARG}" ; return 1 ;;
+ esac
+ else
+ case ${option} in
+ h ) show_usage ;;
+ v ) show_version ;;
+ z ) no_splash=1 ;;
+ c ) debug_exceptions=1 ;;
+ l ) show_license=1 ;;
+ m* ) modules=${OPTARG} ;;
+ r* ) rcfile=${OPTARG} ;;
+ a* ) language=${OPTARG} ;;
+ ? ) echo "Wrong option" ; return 1 ;;
esac
- else
- case ${OPTION} in
- h ) show_usage ;;
- v ) show_version ;;
- m* ) option_modules "${OPTARG}" ;;
- r* ) option_resources "${OPTARG}" ;;
- ? ) echo "!!!Wrong option!!!" ; exit 1 ;;
- esac
- fi
+ fi
done
shift $((OPTIND - 1))
- ###
- # by default try to detect all available modules
- ###
-
- if [ -z "${MODULES}" ] ; then
- local ENVVAR
- local ROOTDIR
- for ENVVAR in `env | awk -F= '{print $1}' | grep _ROOT_DIR` ; do
- local MOD=`echo $ENVVAR | awk -F_ '{print $1}'`
- local LMOD=`echo ${MOD} | tr 'A-Z' 'a-z'`
- ROOTDIR=`printenv ${ENVVAR}`
- if [ -f ${ROOTDIR}/share/salome/resources/${LMOD}/LightApp.xml ] || [ -f ${ROOTDIR}/share/salome/resources/LightApp.xml ] ; then
- MODULES="${MODULES} ${MOD}"
- fi
- done
- fi
+ modules=$(echo ${modules} | sed -e "s%,% %g")
###
- # initial environment
+ # if modules aren't given in command line option, try to detect all available modules
###
- if [ -z "${LightAppResources}" ] ; then
- export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources/gui
- else
- export LightAppResources=${LightAppResources}:${GUI_ROOT_DIR}/share/salome/resources/gui
+ if [ "${modules}" = "" ]
+ then
+ local envvar
+ for envvar in $(env | awk -F= '{print $1}' | grep _ROOT_DIR)
+ do
+ local mdir=${!envvar}
+ local mname=$(echo ${envvar} | awk -F_ '{print $1}')
+ local mname_lc=$(echo ${mname} | tr 'A-Z' 'a-z')
+ if [ -f ${mdir}/share/salome/resources/${mname_lc}/LightApp.xml ] || [ -f ${mdir}/share/salome/resources/LightApp.xml ]
+ then
+ modules+=" ${mname}"
+ fi
+ done
fi
###
- # exclude modules duplication
+ # remove duplications from modules list
###
- local MODS=""
- local MOD
- for MOD in ${MODULES} ; do
- case ${MOD} in
- KERNEL | GUI )
- ;;
- * )
- echo ${MODS} | grep -E "\<${MOD}\>" >/dev/null 2>&1
- if [ "$?" == "1" ] ; then
- MODS="${MODS} ${MOD}"
- fi
- ;;
- esac
- done
- MODULES=${MODS}
+ modules=$(remove_duplications ${modules})
###
- # set additional environment
+ # set-up environment
###
- local PVERSION=`python -c "import sys; print(sys.version[:3])" 2>/dev/null`
-
- local MY_PATH=""
- local MY_LD_LIBRARY_PATH=""
- local MY_PYTHONPATH=""
+ if [ "${LightAppResources}" = "" ]
+ then
+ export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources/gui
+ else
+ export LightAppResources=${LightAppResources}:${GUI_ROOT_DIR}/share/salome/resources/gui
+ fi
+
+ local pyversion=$(python3 -c "import sys; print(sys.version[:3])" 2>/dev/null)
+ local my_path
+ local my_ld_library_path
+ local my_pythonpath
- for MOD in KERNEL GUI ${MODULES} ; do
- local ROOTDIR=`printenv ${MOD}_ROOT_DIR`
- if [ -z "${ROOTDIR}" ] ; then continue ; fi
- local LMOD=`echo ${MOD} | tr 'A-Z' 'a-z'`
- if [ -d ${ROOTDIR}/bin/salome ] ; then
- MY_PATH=${MY_PATH}:${ROOTDIR}/bin/salome
- fi
- if [ -d ${ROOTDIR}/lib/salome ] ; then
- MY_LD_LIBRARY_PATH=${MY_LD_LIBRARY_PATH}:${ROOTDIR}/lib/salome
- fi
- if [ "${PVERSION}" != "" ] ; then
- if [ -d ${ROOTDIR}/bin/salome ] ; then
- MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/bin/salome
- fi
- if [ -d ${ROOTDIR}/lib/salome ] ; then
- MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/lib/salome
- fi
- if [ -d ${ROOTDIR}/lib/python${PVERSION}/site-packages/salome ] ; then
- MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/lib/python${PVERSION}/site-packages/salome
- fi
- fi
- if [ -f ${ROOTDIR}/share/salome/resources/${LMOD}/LightApp.xml ] ; then
- export LightAppConfig=${LightAppConfig}:${ROOTDIR}/share/salome/resources/${LMOD}
- elif [ -f ${ROOTDIR}/share/salome/resources/LightApp.xml ] ; then
- export LightAppConfig=${LightAppConfig}:${ROOTDIR}/share/salome/resources
- fi
- export SALOMEPATH=${SALOMEPATH}:${ROOTDIR}
+ local m
+ for m in KERNEL GUI ${modules}
+ do
+ local root=${m}_ROOT_DIR
+ root=${!root}
+ if [ "${root}" != "" ]
+ then
+ local m_lc=$(echo ${m} | tr 'A-Z' 'a-z')
+ test -d ${root}/bin/salome && my_path+=:${root}/bin/salome
+ test -d ${root}/lib/salome && my_ld_library_path+=:${root}/lib/salome
+ if [ "${pyversion}" != "" ]
+ then
+ test -d ${root}/bin/salome && my_pythonpath+=:${root}/bin/salome
+ test -d ${root}/lib/salome && my_pythonpath+=:${root}/lib/salome
+ test -d ${root}/lib/python${pyversion}/site-packages/salome && my_pythonpath+=:${root}/lib/python${pyversion}/site-packages/salome
+ fi
+ if [ -f ${root}/share/salome/resources/${m_lc}/LightApp.xml ]
+ then
+ export LightAppConfig+=:${root}/share/salome/resources/${m_lc}
+ elif [ -f ${root}/share/salome/resources/LightApp.xml ]
+ then
+ export LightAppConfig+=:${root}/share/salome/resources
+ fi
+ export SALOMEPATH+=:${root}
+ fi
done
- PATH=${MY_PATH}:${PATH}
- PATH=`echo ${PATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
+ PATH=${my_path}:${PATH}
+ PATH=$(echo ${PATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g")
export PATH
- LD_LIBRARY_PATH=${MY_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}
- LD_LIBRARY_PATH=`echo ${LD_LIBRARY_PATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
+ LD_LIBRARY_PATH=${my_ld_library_path}:${LD_LIBRARY_PATH}
+ LD_LIBRARY_PATH=$(echo ${LD_LIBRARY_PATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g")
export LD_LIBRARY_PATH
- PYTHONPATH=${MY_PYTHONPATH}:${PYTHONPATH}
- PYTHONPATH=`echo ${PYTHONPATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
+ PYTHONPATH=${my_pythonpath}:${PYTHONPATH}
+ PYTHONPATH=$(echo ${PYTHONPATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g")
export PYTHONPATH
- LightAppConfig=`echo ${LightAppConfig} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
+ LightAppConfig=$(echo ${LightAppConfig} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g")
export LightAppConfig
- SALOMEPATH=`echo ${SALOMEPATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
+ SALOMEPATH=$(echo ${SALOMEPATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g")
export SALOMEPATH
###
# start application
###
- suitexe LightApp --modules=`echo $MODULES | tr " " ","` "${RCFILE}" "$@" &
+ local options="--modules=$(echo ${modules} | tr ' ' ',')"
+ test "${rcfile}" != "" && options+=" --resources=${rcfile}"
+ test "${language}" != "" && options+=" --language=${language}"
+ test "${no_splash}" = "1" && options+=" --no-splash"
+ test "${debug_exceptions}" = "1" && options+=" --no-exception-handler"
+ test "${show_license}" = "1" && options+=" --show-license"
+ suitexe LightApp ${options} "${@}"
}
###
# call wrapper function (entry point)
###
-run_light_salome "$@"
\ No newline at end of file
+run_light_salome "${@}"