Salome HOME
Merge V8_4_BR branch.
[modules/gui.git] / bin / runLightSalome.sh
1 #!/bin/bash -f
2
3 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
4 #
5 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
6 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
7 #
8 # This library is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU Lesser General Public
10 # License as published by the Free Software Foundation; either
11 # version 2.1 of the License, or (at your option) any later version.
12 #
13 # This library is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 # Lesser General Public License for more details.
17 #
18 # You should have received a copy of the GNU Lesser General Public
19 # License along with this library; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21 #
22 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #
24
25 # File   : runLightSalome.sh
26 # Author : Vadim SANDLER, Open CASCADE S.A.S, vadim.sandler@opencascade.com
27
28
29 ###
30 # function show_usage() : print help an exit
31 ###
32
33 show_usage() {
34     local RET=0
35     if [ $# -gt 0 ] ; then RET=$1 ; fi
36     local MOVE1="echo -en \\033[35G"
37     local MOVE2="echo -en \\033[22G"
38     echo
39     echo "Run standalone SALOME desktop".
40     echo
41     echo "Usage: $(basename $0) [options]"
42     echo
43     echo "Options:"
44     echo "-m MODULES, --modules=MODULES   List of modules, separated by comma, to be used within SALOME session."
45     echo "-r RCFILE, --resources=RCFILE   Preferences file to be used within SALOME session."
46     echo "-v, --version                   Print SALOME version and exit."
47     echo "-h, --help                      Print this help and exit."
48     echo
49     echo "Example:"
50     echo "  $(basename $0) --modules=LIGHT,PYLIGHT"
51     echo
52    exit ${RET}
53 }
54
55 ###
56 # function show_version() : print SALOME version an exit
57 ###
58
59 show_version() {
60     local RET=0
61     local DIR=$(dirname $0)
62     if [ -z "${DIR}" ] ; then DIR=. ; fi
63     if [ -f ${DIR}/VERSION ] ; then
64         cat ${DIR}/VERSION
65     else
66         echo
67         echo "Error: can't find VERSION file"  > /dev/stderr
68         echo
69         RET=1
70     fi
71     exit ${RET}
72 }
73
74 ###
75 # function option_modules() : process --modules / -m command line option
76 ###
77
78 option_modules() {
79     local MODS
80     case $1 in
81         modules\=* )
82             MODS=`echo $1 | awk -F "=" '{ if(NF>1) print $2 ; else print "" }'`
83             ;;
84         modules* )
85             echo
86             echo "Error: Invalid option format, please use --modules=MODULES" > /dev/stderr
87             echo
88             exit 1
89             ;;
90         * )
91             MODS=$1
92             ;;
93     esac
94     if [ "X${MODS}" = "X" ] ; then
95         echo
96         echo "Error: Please, specify list of modules" > /dev/stderr
97         echo
98         exit 1
99     fi
100     MODULES=`echo ${MODS} | sed -e "s%,% %g"`
101     return
102 }
103
104 ###
105 # function option_resources() : process --resources / -r command line option
106 ###
107
108 option_resources() {
109     local RCF
110     case $1 in
111         resources\=* )
112             RCF=`echo $1 | awk -F "=" '{ if(NF>1) print $2 ; else print "" }'` ;;
113         resources* )
114             echo
115             echo "Error: Invalid option format, please use --resources=RCFILE" > /dev/stderr
116             echo
117             exit 1
118             ;;
119         * ) RCF=$1
120     esac
121     if [ "X${RCF}" = "X" ] ; then
122         echo
123         echo "Error: Please, specify resource file" > /dev/stderr
124         echo
125         exit 1
126     fi
127     RCFILE="--resources=${RCF}"
128     return
129 }
130
131 ###
132 # function run_light_salome(): run SALOME
133 ###
134
135 run_light_salome(){
136
137     local MODULES
138     local RCFILE
139
140     ###
141     # process command line options
142     ###
143
144     local OPTION
145     while getopts ":-:hvm:r:" OPTION "$@" ; do
146         if [ "${OPTION}" = "-" ] ; then
147             case ${OPTARG} in
148                 help       )  show_usage                          ;;
149                 version    )  show_version                        ;;
150                 modules*   )  option_modules  "${OPTARG}"         ;;
151                 resources* )  option_resources  "${OPTARG}"       ;;
152                 *          )  echo "!!!Wrong option!!!" ; exit 1  ;;
153             esac
154         else
155             case ${OPTION} in
156                 h  )  show_usage                                 ;;
157                 v  )  show_version                               ;;
158                 m* )  option_modules "${OPTARG}"                 ;;
159                 r* )  option_resources "${OPTARG}"               ;;
160                 ?  )  echo "!!!Wrong option!!!" ; exit 1         ;;
161             esac
162         fi
163     done
164     shift $((OPTIND - 1))
165
166     ###
167     # by default try to detect all available modules
168     ###
169
170     if [ -z "${MODULES}" ] ; then
171         local ENVVAR
172         local ROOTDIR
173         for ENVVAR in `env | awk -F= '{print $1}' | grep _ROOT_DIR` ; do
174             local MOD=`echo $ENVVAR | awk -F_ '{print $1}'`
175             local LMOD=`echo ${MOD} | tr 'A-Z' 'a-z'`
176             ROOTDIR=`printenv ${ENVVAR}` 
177             if [ -f ${ROOTDIR}/share/salome/resources/${LMOD}/LightApp.xml ] || [ -f ${ROOTDIR}/share/salome/resources/LightApp.xml ] ; then
178                 MODULES="${MODULES} ${MOD}"
179             fi
180         done
181     fi
182
183     ###
184     #  initial environment
185     ###
186
187     if [ -z "${LightAppResources}" ] ; then
188         export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources/gui
189     else
190         export LightAppResources=${LightAppResources}:${GUI_ROOT_DIR}/share/salome/resources/gui
191     fi
192
193     ###
194     # exclude modules duplication
195     ###
196
197     local MODS=""
198     local MOD
199     for MOD in ${MODULES} ; do
200         case ${MOD} in
201             KERNEL | GUI )
202                 ;;
203             * ) 
204                 echo ${MODS} | grep -E "\<${MOD}\>" >/dev/null 2>&1
205                 if [ "$?" == "1" ] ; then
206                     MODS="${MODS} ${MOD}"
207                 fi
208                 ;;
209         esac
210     done
211     MODULES=${MODS}
212
213     ###
214     # set additional environment
215     ###
216
217     local PVERSION=`python -c "import sys; print sys.version[:3]" 2>/dev/null`
218     
219     local MY_PATH=""
220     local MY_LD_LIBRARY_PATH=""
221     local MY_PYTHONPATH=""
222
223     for MOD in KERNEL GUI ${MODULES} ; do
224         local ROOTDIR=`printenv ${MOD}_ROOT_DIR`
225         if [ -z "${ROOTDIR}" ] ; then continue ; fi
226         local LMOD=`echo ${MOD} | tr 'A-Z' 'a-z'`
227         if [ -d ${ROOTDIR}/bin/salome ] ; then
228             MY_PATH=${MY_PATH}:${ROOTDIR}/bin/salome
229         fi
230         if [ -d ${ROOTDIR}/lib/salome ] ; then
231             MY_LD_LIBRARY_PATH=${MY_LD_LIBRARY_PATH}:${ROOTDIR}/lib/salome
232         fi
233         if [ "${PVERSION}" != "" ] ; then
234             if [ -d ${ROOTDIR}/bin/salome ] ; then
235                 MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/bin/salome
236             fi
237             if [ -d ${ROOTDIR}/lib/salome ] ; then
238                 MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/lib/salome
239             fi
240             if [ -d ${ROOTDIR}/lib/python${PVERSION}/site-packages/salome ] ; then 
241                 MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/lib/python${PVERSION}/site-packages/salome
242             fi
243         fi
244         if [ -f ${ROOTDIR}/share/salome/resources/${LMOD}/LightApp.xml ] ; then
245             export LightAppConfig=${LightAppConfig}:${ROOTDIR}/share/salome/resources/${LMOD}
246         elif [ -f ${ROOTDIR}/share/salome/resources/LightApp.xml ] ; then
247             export LightAppConfig=${LightAppConfig}:${ROOTDIR}/share/salome/resources
248         fi
249         export SALOMEPATH=${SALOMEPATH}:${ROOTDIR}
250     done
251
252     PATH=${MY_PATH}:${PATH}
253     PATH=`echo ${PATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
254     export PATH
255     LD_LIBRARY_PATH=${MY_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}
256     LD_LIBRARY_PATH=`echo ${LD_LIBRARY_PATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
257     export LD_LIBRARY_PATH
258     PYTHONPATH=${MY_PYTHONPATH}:${PYTHONPATH}
259     PYTHONPATH=`echo ${PYTHONPATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
260     export PYTHONPATH
261     LightAppConfig=`echo ${LightAppConfig} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
262     export LightAppConfig
263     SALOMEPATH=`echo ${SALOMEPATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
264     export SALOMEPATH
265
266     ###
267     # start application
268     ###
269
270     suitexe LightApp --modules=`echo $MODULES | tr " " ","` "${RCFILE}" "$@" &
271 }
272
273 ###
274 # call wrapper function (entry point)
275 ###
276
277 run_light_salome "$@"