Salome HOME
Merge from V6_main 01/04/2013
[modules/gui.git] / bin / runLightSalome.sh
1 #!/bin/bash -f
2
3 # Copyright (C) 2007-2013  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.
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 " * all options have both short and long format;"
45     echo " * some options require additional parameter (below referenced as <param>)"
46     echo "   which should be separated by = symbol from the option itself."
47     echo
48     echo -en " --help"
49     ${MOVE2} ; echo -en "(-h)"
50     ${MOVE1} ; echo "Display this information and exit."
51     echo -en " --version"
52     ${MOVE2} ; echo -en "(-v)"
53     ${MOVE1} ; echo "Print SALOME version and exit."
54     echo -en " --modules=<param>"
55     ${MOVE2} ; echo -en "(-m)"
56     ${MOVE1} ; echo "List of modules, separated by comma, to be used within SALOME session."
57     echo
58     echo "Example:"
59     echo "  $(basename $0) --modules=LIGHT,PYLIGHT"
60     echo
61    exit ${RET}
62 }
63
64 ###
65 # function show_version() : print SALOME version an exit
66 ###
67
68 show_version() {
69     local RET=0
70     local DIR=$(dirname $0)
71     if [ -z "${DIR}" ] ; then DIR=. ; fi
72     if [ -f ${DIR}/VERSION ] ; then
73         cat ${DIR}/VERSION
74     else
75         echo
76         echo "Error: can't find VERSION file"  > /dev/stderr
77         echo
78         RET=1
79     fi
80     exit ${RET}
81 }
82
83 ###
84 # function option_modules() : process --modules / -m command line option
85 ###
86
87 option_modules() {
88     local MODS=`echo $1 | awk -F "=" '{ if(NF>1) print $2 ; else print $1 }'`
89     if [ "X${MODS}" = "X" ] ; then
90         echo
91         echo "Error: Please, specify list of modules" > /dev/stderr
92         echo
93         exit 1
94     fi
95     MODULES=`echo ${MODS} | sed -e "s%,% %g"`
96     return
97 }
98
99
100 ###
101 # function run_light_salome(): run SALOME
102 ###
103
104 run_light_salome(){
105
106     local MODULES
107
108     ###
109     # process command line options
110     ###
111
112     local OPTION
113     while getopts ":-:hvm:" OPTION "$@" ; do
114         if [ "${OPTION}" = "-" ] ; then
115             case ${OPTARG} in
116                 help      )  show_usage                          ;;
117                 version   )  show_version                        ;;
118                 modules*  )  option_modules  "${OPTARG}"         ;;
119                 *         )  echo "!!!Wrong option!!!" ; exit 1  ;;
120             esac
121         else
122             case ${OPTION} in
123                 h  )  show_usage                                 ;;
124                 v  )  show_version                               ;;
125                 m* )  option_modules "${OPTARG}"                 ;;
126                 ?  )  echo "!!!Wrong option!!!" ; exit 1         ;;
127             esac
128         fi
129     done
130     shift $((OPTIND - 1))
131
132     ###
133     # by default try to detect all available modules
134     ###
135
136     if [ -z "${MODULES}" ] ; then
137         local ENVVAR
138         local ROOTDIR
139         for ENVVAR in `env | awk -F= '{print $1}' | grep _ROOT_DIR` ; do
140             local MOD=`echo $ENVVAR | awk -F_ '{print $1}'`
141             local LMOD=`echo ${MOD} | tr 'A-Z' 'a-z'`
142             ROOTDIR=`printenv ${ENVVAR}` 
143             if [ -f ${ROOTDIR}/share/salome/resources/${LMOD}/LightApp.xml ] || [ -f ${ROOTDIR}/share/salome/resources/LightApp.xml ] ; then
144                 MODULES="${MODULES} ${MOD}"
145             fi
146         done
147     fi
148
149     ###
150     #  initial environment
151     ###
152
153     if [ -z "${LightAppResources}" ] ; then
154         export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources/gui
155     else
156         export LightAppResources=${LightAppResources}:${GUI_ROOT_DIR}/share/salome/resources/gui
157     fi
158
159     MODULES="KERNEL GUI ${MODULES}"
160
161     ###
162     # exclude modules duplication
163     ###
164
165     local MODS=""
166     local MOD
167     for MOD in ${MODULES} ; do
168         echo ${MODS} | grep -E "\<${MOD}\>" >/dev/null 2>&1
169         if [ "$?" == "1" ] ; then
170             MODS="${MODS} ${MOD}"
171         fi
172     done
173     MODULES=${MODS}
174
175     ###
176     # set additional environment
177     ###
178
179     local PVERSION=`python -c "import sys; print sys.version[:3]" 2>/dev/null`
180     
181     local MY_PATH=""
182     local MY_LD_LIBRARY_PATH=""
183     local MY_PYTHONPATH=""
184
185     for MOD in ${MODULES} ; do
186         local ROOTDIR=`printenv ${MOD}_ROOT_DIR`
187         if [ -z "${ROOTDIR}" ] ; then continue ; fi
188         local LMOD=`echo ${MOD} | tr 'A-Z' 'a-z'`
189         if [ -d ${ROOTDIR}/bin/salome ] ; then
190             MY_PATH=${MY_PATH}:${ROOTDIR}/bin/salome
191         fi
192         if [ -d ${ROOTDIR}/lib/salome ] ; then
193             MY_LD_LIBRARY_PATH=${MY_LD_LIBRARY_PATH}:${ROOTDIR}/lib/salome
194         fi
195         if [ "${PVERSION}" != "" ] ; then
196             if [ -d ${ROOTDIR}/bin/salome ] ; then
197                 MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/bin/salome
198             fi
199             if [ -d ${ROOTDIR}/lib/salome ] ; then
200                 MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/lib/salome
201             fi
202             if [ -d ${ROOTDIR}/lib/python${PVERSION}/site-packages/salome ] ; then 
203                 MY_PYTHONPATH=${MY_PYTHONPATH}:${ROOTDIR}/lib/python${PVERSION}/site-packages/salome
204             fi
205         fi
206         if [ -f ${ROOTDIR}/share/salome/resources/${LMOD}/LightApp.xml ] ; then
207             export LightAppConfig=${LightAppConfig}:${ROOTDIR}/share/salome/resources/${LMOD}
208         elif [ -f ${ROOTDIR}/share/salome/resources/LightApp.xml ] ; then
209             export LightAppConfig=${LightAppConfig}:${ROOTDIR}/share/salome/resources
210         fi
211         export SALOMEPATH=${SALOMEPATH}:${ROOTDIR}
212     done
213
214     PATH=${MY_PATH}:${PATH}
215     PATH=`echo ${PATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
216     export PATH
217     LD_LIBRARY_PATH=${MY_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}
218     LD_LIBRARY_PATH=`echo ${LD_LIBRARY_PATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
219     export LD_LIBRARY_PATH
220     PYTHONPATH=${MY_PYTHONPATH}:${PYTHONPATH}
221     PYTHONPATH=`echo ${PYTHONPATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
222     export PYTHONPATH
223     LightAppConfig=`echo ${LightAppConfig} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
224     export LightAppConfig
225     SALOMEPATH=`echo ${SALOMEPATH} | sed -e "s,^:,,;s,:$,,;s,::\+,:,g"`
226     export SALOMEPATH
227
228     ###
229     # start application
230     ###
231
232     MODULES=`echo $MODULES | tr " " ","`
233     SUITApp LightApp --modules=${MODULES} "$*" &
234 }
235
236 ###
237 # call wrapper function (entry point)
238 ###
239
240 run_light_salome  "$@"