Salome HOME
updated copyright message
[modules/gui.git] / bin / runLightSalome.sh
index caf368e8f4ca18df9f3d3557537987d9a10cfd74..252bb9117f38bbe41268834f424442c2f90eb6d7 100755 (executable)
@@ -1,6 +1,6 @@
 #!/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 "${@}"