3 # This script installs a subset of products necessary for SALOME application
5 # Usage: install <target-directory> [all]
6 # install <target-directory> <product> ... <product>
8 # Type 'install --help' to get more information
11 # <target-directory> must be an absolute path
13 # The script is the part of the SALOME PRO installation procedure.
15 # Copyright : 2003 CEA/DEN, EDF R&D
16 ####################################################################################
19 export SHRC="salome.sh"
20 export CSHRC="salome.csh"
23 #this function takes several parameters
24 #first parameter contains descriptor of output file
25 #next parameters is command for execution
26 #in case of bad result of execution ask user about furher steps
27 #(user can cancel installation procedure)
32 echo -e "`pwd` -> $* >> $out"
33 if [ $DEBUG == 0 ] ; then
36 if [ $out == "1" ] ; then
42 if [ "$?" -ne "0" ] ; then
43 if [ $out != "1" ] ; then
47 echo -e "NOT DONE !!! => $*"
48 echo -n "Would you like to continue to install this product: (Y,N) [Y] : "
50 rep=`echo $rep | tr "[A-Z]" "[a-z]"`
51 if test -z $rep || [ $rep = "y" ] ; then
59 #invoke check_job function
60 #all output will be put into terminal
70 rm -rf "$1" > /dev/null
74 #create environment for sh and csh
77 install_root=$1; shift
79 for i in $SHRC $CSHRC ; do
80 if [ -e ${install_work}/$i ]; then
83 touch ${install_work}/$i
86 if [ $# -eq 3 ] ; then
88 product_env=${install_work}/env_${product_name}.sh
89 (test -e ${product_env} && rm ${product_env} )
91 ### !!! writing salome.sh file !!! -> add global functions
92 cat >> ${install_work}/$SHRC <<EOF
93 export INSTALL_ROOT=${install_root}
94 #$DELIM globals $DELIM
96 xenv=\$2:\`printenv \$1\`
97 out_var=\`echo \$xenv | awk -F: '{ n=0; r=1; s=\$1; x=0; for( i=2; i<=NF; i++ ){ v=\$i; t=1; if( v==s ) r=0; for( j=0; j<=n; j++ ){ if( keys[j]==v ){ t=0; break; } }; if( t ) keys[n++]=v; x=1; }; if( r ) printf "%s",s; if( x ) printf ":"; for( j=0; j<n; j++ ) { printf "%s",keys[j]; if( j<n-1 ) printf ":"; }; printf "\n"; }'\`
102 xenv=\$2:\`printenv \$1\`
103 out_var=\`echo \$xenv | awk -F: '{ n=0; r=1; s=\$1; x=0; for( i=2; i<=NF; i++ ){ v=\$i; t=1; if( v==s ) r=0; for( j=0; j<=n; j++ ){ if( keys[j]==v ){ t=0; break; } }; if( t ) keys[n++]=v; x=1; }; for( j=0; j<n; j++ ) { printf "%s",keys[j]; if( j<n-1 ) printf ":"; }; if( r ) { if( x ) printf ":"; printf "%s",s; }; printf "\n"; }'\`
107 ### !!! writing salome.csh file !!! -> add global aliases
108 cat >> ${install_work}/$CSHRC <<EOF
109 setenv INSTALL_ROOT ${install_root}
110 #$DELIM globals $DELIM
111 alias cleandup "echo \!:1 | awk -F: '"'{ n=0; r=1; s=\$1; x=0; for( i=2; i<=NF; i++ ){ v=\$i; t=1; if( v==s ) r=0; for( j=0; j<=n; j++ ){ if( keys[j]==v ){ t=0; break; } }; if( t ) keys[n++]=v; x=1; }; if( r ) printf "%s",s; if( x ) printf ":"; for( j=0; j<n; j++ ) { printf "%s",keys[j]; if( j<n-1 ) printf ":"; }; printf "\n"; }'"'"
112 alias cleandupr "echo \!:1 | awk -F: '"'{ n=0; r=1; s=\$1; x=0; for( i=2; i<=NF; i++ ){ v=\$i; t=1; if( v==s ) r=0; for( j=0; j<=n; j++ ){ if( keys[j]==v ){ t=0; break; } }; if( t ) keys[n++]=v; x=1; }; for( j=0; j<n; j++ ) { printf "%s",keys[j]; if( j<n-1 ) printf ":"; }; if( r ) { if( x ) printf ":"; printf "%s",s; }; printf "\n"; }'"'"
114 alias setenva 'set a="\!:1" ; set b="'\!:2'":\`printenv \$a\` ; set b=\`cleandupr \$b\` ; setenv \$a \$b ; unset a, b'
115 alias setenvp 'set a="\!:1" ; set b="'\!:2'":\`printenv \$a\` ; set b=\`cleandup \$b\` ; setenv \$a \$b ; unset a, b'
117 ### !!! writing salome.csh file !!! -> set inital variables
118 pre_vars="PATH LD_LIBRARY_PATH LD_RUN_PATH PYTHONPATH TCLLIBPATH"
119 for i in $pre_vars ; do
120 cat >> ${install_work}/$CSHRC <<EOF
121 #$DELIM $i : initial settings $DELIM
122 if (! (\$?${i}) ) then
127 ### !!! writing salome.(c)sh files !!! -> dump products environment files, changing 'export' by 'setenv(a|p)' where necessary
128 product_sequence="$2"
129 for i in $product_sequence ; do
130 sed -e 's%^export\([[:blank:]]*\)PATH=\$[{]\?PATH[}]\?:\(.*\)%setenva\1PATH \2%g' -e 's%^export\([[:blank:]]*\)PATH=\(.*\):\$[{]\?PATH[}]\?%setenvp\1PATH \2%g' ${install_work}/env_${i}.sh > ${INSTALL_WORK}/_tmp1 2>/dev/null
131 sed -e 's%^export\([[:blank:]]*\)LD_LIBRARY_PATH=\$[{]\?LD_LIBRARY_PATH[}]\?:\(.*\)%setenva\1LD_LIBRARY_PATH \2%g' -e 's%^export\([[:blank:]]*\)LD_LIBRARY_PATH=\(.*\):\$[{]\?LD_LIBRARY_PATH[}]\?%setenvp\1LD_LIBRARY_PATH \2%g' ${INSTALL_WORK}/_tmp1 > ${INSTALL_WORK}/_tmp2 2>/dev/null
132 sed -e 's%^export\([[:blank:]]*\)PYTHONPATH=\$[{]\?PYTHONPATH[}]\?:\(.*\)%setenva\1PYTHONPATH \2%g' -e 's%^export\([[:blank:]]*\)PYTHONPATH=\(.*\):\$[{]\?PYTHONPATH[}]\?%setenvp\1PYTHONPATH \2%g' ${INSTALL_WORK}/_tmp2 > ${INSTALL_WORK}/_tmp1 2>/dev/null
133 sed -e 's%^export\([[:blank:]]*\)LD_RUN_PATH=\$[{]\?LD_RUN_PATH[}]\?:\(.*\)%setenva\1LD_RUN_PATH \2%g' -e 's%^export\([[:blank:]]*\)LD_RUN_PATH=\(.*\):\$[{]\?LD_RUN_PATH[}]\?%setenvp\1LD_RUN_PATH \2%g' ${INSTALL_WORK}/_tmp1 > ${INSTALL_WORK}/_tmp2 2>/dev/null
134 cat ${INSTALL_WORK}/_tmp2 >> ${install_work}/$SHRC 2>/dev/null
136 sed -e 's%^export \([[:alnum:]_[:blank:]]*\)\=%setenv \1 %g' ${INSTALL_WORK}/_tmp2 > ${INSTALL_WORK}/_tmp1 2>/dev/null
137 cat ${INSTALL_WORK}/_tmp1 >> ${install_work}/$CSHRC 2>/dev/null
139 rm -f ${INSTALL_WORK}/_tmp1 ${INSTALL_WORK}/_tmp2
142 if [ $# -eq 4 ] ; then
144 if [ -e ${product_dir} ] ; then
145 cp -f ${install_work}/$SHRC ${install_work}/$CSHRC ${product_dir}/.
148 cp -f ${install_work}/$CSHRC ${install_root}/env_products.csh
149 cp -f ${install_work}/$SHRC ${install_root}/env_products.sh
150 ### !!! copying build.csh script
151 if [ -e ./build.csh ]; then
152 cp -f ./build.csh ${install_root}
156 #try use already existing product
159 product_dir=$1; install_root=$2; install_work=$3; product_sequence="$4"; product_type=$5
160 env_file=${product_dir}/env_${product_type}.sh
161 if [ -f ${env_file} ] ; then
162 cp -f ${env_file} ${install_work}
163 make_env ${install_root} ${install_work} "${product_sequence}"
164 source ${install_work}/$SHRC
166 if [ $? -eq 0 ] ; then
167 if [ -d ${product_dir} ] && [ -w ${product_dir} ] ; then
168 #makedir ${product_dir}
177 #check existance of lib passed as first parameter
178 #return 0 if lib exists
179 #if you pass second parameter search will be done in it
180 #otherwise search will be done in $LD_LIBRARY_PATH
181 #you should use : as dilimeter if you are going to pass second parameter
186 whereIs=$LD_LIBRARY_PATH
188 for L in `echo ${whereIs} | sed -e"s%:% %g"` ; do
189 ret=`find $L -name $1 2>/dev/null`
190 if [ -n "$ret" ] ; then
191 #echo "The $1 exists on yours system in a $L folder"
201 for i in `echo ${path} | sed -e"s%:% %g"` ; do
202 ret=`find $i -name $file 2>/dev/null`
203 if [ -n "$ret" ] ; then
204 ret=`echo $ret | sed -e"s%/\$file$%%g"`
213 arg1=$1; val1=$2; arg2=$3; val2=$4
214 tmp="^$val1$|^$val1:|:$val1$|:$val1:"
215 #echo $val2 | grep -E "$tmp" >/dev/null 2>&1
216 #if [ $? -eq 0 ] ; then
221 exclude_list="usr lib bin sbin etc"
222 for i in ${exclude_list} ; do
224 echo ${val1} | grep -E "$tmp" >/dev/null 2>&1
225 if [ $? == 0 ] ; then to_tail=0; break; fi
227 if [ $to_tail -eq 0 ] ; then