3 ####################################################################################
5 # Created : Thu Jan 27 09:50:55 2005
6 # Author : Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)
8 # Module : Installation Wizard
9 # Copyright : 2002-2013 CEA
11 # This script is the part of the SALOME installation procedure.
13 # This script can be used to build and install SALOME modules from sources.
14 # Try build.csh -h for more details about usage.
16 ####################################################################################
18 set is_build_configure=0
24 set modules=(KERNEL GUI GEOM MED SMESH VISU PARAVIS YACS NETGENPLUGIN GHS3DPLUGIN BLSURFPLUGIN HexoticPLUGIN GHS3DPRLPLUGIN COMPONENT CALCULATOR HELLO PYHELLO LIGHT PYLIGHT SIERPINSKY RANDOMIZER HEXABLOCK HEXABLOCKPLUGIN ATOMIC ATOMGEN ATOMSOLV HOMARD JOBMANAGER)
30 set def_install_dir="/INSTALL"
33 #########################################################
35 #########################################################
37 if ( "$1" == "-b" ) then
38 set is_build_configure=1
40 else if ( "$1" == "-c" ) then
42 else if ( "$1" == "-w" ) then
44 else if ( "$1" == "-d" ) then
46 else if ( "$1" == "-o" ) then
47 set optim="--enable-production=yes --disable-debug"
48 else if ( "$1" == "-v" ) then
51 else if ( "$1" == "-p" ) then
55 else if ( "$1" == "-h" ) then
57 else if ( "$1" == "-t" ) then
60 set ckt=`echo ${modules} | grep -E "\<$1\>"`
61 if ( "$ckt" != "" ) then
62 set params="$params $1"
64 set b_params="$b_params $1"
65 echo "\!\!\! Warning \!\!\! Unknown module: $1."
71 #########################################################
72 # if -h option is given - print help info and exit
73 #########################################################
74 if ( $is_help == 1 ) then
78 echo " Builds given SALOME modules by performing make and make install commands"
81 echo " build.csh [ <option> ] ... [ <module> [ <module> ... ] ]"
83 echo "<module> Modules to build, separated by space(s)."
84 echo " If no modules are given - all SALOME modules are assumed."
85 echo " Note, that modules given in command lines are automatically sorted in such order"
86 echo " to support correct modules dependencies."
89 echo "-b Perform build_configure command for all given modules."
90 echo " This option forces configure (-c) key to be set. Default is off."
92 echo "-c Perform configure command for all given modules. Default is off."
94 echo "-w Add --without-gui key to build_configure and configure commands"
95 echo " to build SALOME module sources without GUI."
96 echo " By default sources are built with GUI."
98 echo "-d Delete build directories before calling configure, to force full rebuild"
99 echo " and reinstall of the module."
100 echo " Use this option carefully."
102 echo "-o Build sources in optimized mode. Default is off that means debug mode."
103 echo " Use this option together with -c or -b."
104 echo " This option can require -d option to be set (to ensure that previously"
105 echo " created build directories are removed to enforce rebuild in optimized mode)."
107 echo "-t Performs make dev_docs step to build TUI documentation for those modules"
108 echo " which support this. Default is off."
110 echo "-p <prefix> Define the directory where to install modules after compilation."
111 echo " By default the directory where compilation is performed is used."
113 echo "-v <level> Verbose level (0-2, default 2): print information on build status:"
114 echo " 0: only 'make' errors"
115 echo " 1: 0 + compiler and other errors (including build_configure, configure)"
116 echo " 2: 1 + compiler and other warnings "
118 echo "-h Prints this help information."
120 echo "Note: If no keys are given script just performs make step."
123 echo " ./build.csh -o -p /home/user/salome -b KERNEL MED GEOM"
125 echo " This will make KERNEL, GEOM and MED modules: build_configure, configure, make"
126 echo " and install procedures will be performed for all specified modules."
127 echo " The modules will be built in the optimized mode"
132 #########################################################
133 # sort modules in proper order according to the dependancies
134 #########################################################
135 if ( "${params}" != "" ) then
137 foreach module (${modules})
138 set ckt=`echo ${params} | grep -E "\<${module}\>"`
139 if ( "$ckt" != "" ) then
140 set xparams="$xparams $module"
143 set modules=($xparams $b_params)
144 else if ( "${b_params}" != "" ) then
145 set modules=($b_params)
148 echo ">>> The following modules will be built:"
151 #########################################################
153 #########################################################
154 set env_script=`dirname $0`/env_build.csh
155 if ( ! -e $env_script ) then
156 set env_script=`dirname $0`/env_products.csh
158 if ( ! -e $env_script ) then
159 set env_script=`dirname $0`/env.sh
161 if ( -e $env_script ) then
162 echo ">>> Setting environment"
165 echo "\!\!\! Warning \!\!\! Environment is not set."
166 echo "No environment file (env_build.sh, env_products.sh, env.sh) is found."
167 echo "Proceed with the current environment."
171 set LOG_DIR=${BUILD_DIR}/LOGS
173 #########################################################
174 # define installation prefix
175 #########################################################
176 if ( "$prefix" == "" ) then
177 echo "\!\!\! Warning \!\!\! Installation directory is not set."
178 echo "All the modules will be installed to the ${BUILD_DIR}${def_install_dir}"
180 set is_absolute=`echo $prefix | grep -e "^/"`
181 if ( "$is_absolute" == "" ) then
182 set prefix=${BUILD_DIR}/$prefix
183 echo "\!\!\! Warning \!\!\! Relative prefix is used."
184 echo "All the modules will be installed to the $prefix"
188 #########################################################
189 # create log directory
190 #########################################################
191 if ( ! -e ${LOG_DIR} ) then
195 echo "==========================================================================="
196 echo "Starting SALOME build at `date`"
197 echo "==========================================================================="
199 #########################################################
200 # loop for all given modules
201 #########################################################
202 foreach module (${modules})
203 echo ">>> Processing ${module} module"
205 set module_src=`printenv ${module}_SRC_DIR`
206 set module_build=${BUILD_DIR}/${module}_BUILD
208 if ( ${module_src} != "" ) then
210 #########################################################
211 # check if sources directory exists
212 #########################################################
213 if ( ! -e ${module_src} ) then
214 echo "\!\!\! Error \!\!\! Can't find sources directory: ${module_src} does not exist."
217 #########################################################
218 # check if configure script exists
219 #########################################################
221 if ( -e ${module_src}/configure ) then
224 #########################################################
225 # perform build_configure if -b flag is given or if
226 # configure script does not exist (first compilation?)
227 #########################################################
228 if ( $is_build_configure == 1 || $cfg_exist == 0 ) then
229 echo "... Performing build_configure"
230 #########################################################
231 # check if build_configure script exists
232 #########################################################
233 if ( ! -e ${module_src}/build_configure && "${module}" != "PARAVIS" ) then
234 echo "\!\!\! Warning \!\!\! Can not find build_configure script in ${module_src}."
236 if ( "${module}" == "PARAVIS" ) then
237 echo "\!\!\! Warning \!\!\! build_configure step is not executed for ${module}."
239 #########################################################
240 # call build_configure
241 #########################################################
242 if (! ($?BUILDCONF_OPTS) ) then
243 set mybuildconf_keys=""
245 set mybuildconf_keys="${BUILDCONF_OPTS}"
247 if ( $inst_with_gui == 0 ) then
248 set mybuildconf_keys="${mybuildconf_keys} --without-gui"
251 ./build_configure ${mybuildconf_keys} >& ${LOG_DIR}/build_configure_${module}.log
252 #########################################################
253 # echo possible errors
254 #########################################################
255 if ( $verbose_level > 0 ) then
256 cat ${LOG_DIR}/build_configure_${module}.log | grep -E "(failed|: error:)"
261 #########################################################
262 # deleting build directory if -d flag is given
263 #########################################################
264 if ( -e ${module_build} && $is_delete == 1 ) then
265 echo "... Removing ${module_build}"
266 chmod -R +w ${module_build} && rm -rf ${module_build} >& /dev/null
267 if ( "$?" != "0" ) then
268 echo "\!\!\! Warning \!\!\! Cannot remove build directory ${module_build}. Permission denied."
271 #########################################################
272 # creating build directory if it does not exist
273 #########################################################
274 if ( ! -e ${module_build} ) then
275 mkdir -p ${module_build} >& /dev/null
276 if ( "$?" != "0" ) then
277 echo "\!\!\! Error \!\!\! Cannot create build directory ${module_build}. Permission denied."
282 #########################################################
283 # check if top Makefile exists in build directory, i.e.
284 # is it necessary to run configure script
285 #########################################################
287 if ( -e ${module_build}/Makefile ) then
290 #########################################################
291 # check if configure options are changed from the
293 #########################################################
295 #########################################################
296 # define installation directory (by using module's version
297 # number); default is a build directory
298 #########################################################
300 if ( -e ${module_src}/configure.ac ) then
301 set vx=`grep -e "^AC_INIT" ${module_src}/configure.ac | sed -e "s%.*\[\([[:digit:].]*\)\].*%\1%g"`
302 else if ( -e ${module_src}/configure.in.base ) then
303 set vx=`grep -e "^VERSION=" ${module_src}/configure.in.base | awk -F= '{ if (NF>1) print $NF; }' | tr -d '[:space:]'`
304 if ( "$vx" == "" ) then
305 set vx=`grep -e "^AC_INIT" ${module_src}/configure.in.base | sed -e "s%.*\[\([[:digit:].]*\)\].*%\1%g"`
307 else if ( -e ${module_src}/CMakeLists.txt ) then
308 set ver_maj=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MAJOR | sed -e "s%[A-Z_() ]%%g"`
309 set ver_min=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MINOR | sed -e "s%[A-Z_() ]%%g"`
310 set ver_maintenance=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MAINTENANCE | sed -e "s%[A-Z_() ]%%g"`
311 set vx="${ver_maj}.${ver_min}.${ver_maintenance}"
313 if ( "$vx" != "" ) then
316 if ( "$prefix" == "" ) then
317 set px=${BUILD_DIR}${def_install_dir}/${module}${vx}
319 set px=${prefix}/${module}${vx}
321 #########################################################
322 # perform configure if -c flag is given or if
323 # Makefile does not exist (first compilation?)
324 #########################################################
325 if ( $is_configure == 1 || $mkfile_exist == 0 || $opts_changed == 1 ) then
326 echo "... Performing configure"
327 #########################################################
328 # check if configure script exists
329 #########################################################
330 if ( ! -e ${module_src}/configure && "${module}" != "PARAVIS" ) then
331 echo "\!\!\! Warning \!\!\! Can not find configure script in ${module_src}."
333 if (! ($?BUILDCONF_OPTS) ) then
336 set myconf_keys="${CONF_OPTS}"
338 if ( $inst_with_gui == 0 ) then
339 set myconf_keys="${myconf_keys} --without-gui"
341 if ( "${module}" == "MED" && ($?METISDIR) && ($?SCOTCHDIR) ) then
342 set myconf_keys="${myconf_keys} --enable-splitter=yes --with-metis=${METISDIR} --with-scotch=${SCOTCHDIR}"
344 if ( "${module}" == "NETGENPLUGIN" && ($?NETGENHOME) ) then
345 set myconf_keys="${myconf_keys} --with-netgen=${NETGENHOME}"
348 if ( "${module}" == "PARAVIS" ) then
349 cd ${module_build}; cmake ${module_src} -DCMAKE_INSTALL_PREFIX=$px >& ${LOG_DIR}/configure_${module}.log
351 ${module_src}/configure --prefix=$px ${optim} ${myconf_keys} >& ${LOG_DIR}/configure_${module}.log
354 #########################################################
355 # echo possible errors
356 #########################################################
357 if ( $verbose_level > 0 ) then
358 cat ${LOG_DIR}/configure_${module}.log | grep ": error:"
360 if ( $verbose_level > 1 ) then
361 cat ${LOG_DIR}/configure_${module}.log | grep ": WARNING:"
365 #########################################################
367 #########################################################
368 echo "... Performing make"
369 #########################################################
370 # first clear dependencies
371 #########################################################
372 find . -name ".dep*" -type f -exec rm -f {} \; >& /dev/null
373 #########################################################
375 #########################################################
376 if ( "${module}" == "PARAVIS" ) then
377 if ( ($?VTK_AUTOLOAD_PATH) ) then
378 setenv VTK_AUTOLOAD_PATH_BACKUP ${VTK_AUTOLOAD_PATH}
379 unsetenv VTK_AUTOLOAD_PATH
382 make >& ${LOG_DIR}/make_${module}.log
384 if ( "${module}" == "PARAVIS" ) then
385 if ( ($?VTK_AUTOLOAD_PATH_BACKUP) ) then
386 setenv VTK_AUTOLOAD_PATH ${VTK_AUTOLOAD_PATH_BACKUP}
389 #########################################################
390 # if make step is successful set the ${module}_ROOT_DIR
391 # environment variable
392 #########################################################
393 #if ( $sts == 0 ) then
394 # setenv ${module}_ROOT_DIR ${module_build}
396 #########################################################
398 #########################################################
399 cat ${LOG_DIR}/make_${module}.log | grep -Ei '[*][*][*].*error'
400 #########################################################
401 # print compiler errors and warnings
402 # Note: here awk is used to concatenate together several lines of single
403 # error or warning message produced by stupid gnu compiler
404 # Actually, instead of that we could use 'fmessage length=n' option of g++...
405 #########################################################
406 if ( $verbose_level > 0 ) then
407 ###cat ${LOG_DIR}/make_${module}.log | grep ": error"
408 cat ${LOG_DIR}/make_${module}.log | awk 'substr($0,0,1)!=" " {print ""} {print $0} END {print ""}' | grep "${module_src}/[A-Za-z_0-9./]*:" | sed s@"^${module_src}/src/"@@
410 if ( $verbose_level > 1 ) then
411 cat ${LOG_DIR}/make_${module}.log | awk 'substr($0,0,1)!=" " {print ""} {print $0} END {print ""}' | grep -E ": warning|* Warning" | sed s@"^${module_src}/src/"@@
413 #########################################################
414 # perform make dev_docs step if -t flag is given
415 #########################################################
416 if ( $is_tui == 1 && $sts == 0 && -d ${module_build}/doc ) then
417 cd ${module_build}/doc
418 set dd=`cat Makefile | grep -E "dev_docs[[:space:]]*:"`
419 if ( "$dd" != "" ) then
420 echo "... Performing make dev_docs"
421 make dev_docs >& ${LOG_DIR}/make_dev_docs_${module}.log
422 cat ${LOG_DIR}/make_dev_docs_${module}.log | grep '[*][*][*]'
426 #########################################################
427 # perform make if -i or -p flags are given
428 #########################################################
429 if ( $is_install == 1 && $sts == 0 || "${module}" == "KERNEL" ) then
430 #########################################################
431 # deleting build directory if -d flag is given
432 #########################################################
433 if ( -e $px && $is_delete == 1 ) then
434 echo "... Removing $px"
435 rm -rf $px >& /dev/null
436 if ( "$?" != "0" ) then
437 echo "\!\!\! Warning \!\!\! Cannot remove install directory ${px}. Permission denied."
440 echo "... Performing make install"
441 make install >& ${LOG_DIR}/make_install_${module}.log
443 #########################################################
444 # if make install step is successful set the
445 # ${module}_ROOT_DIR environment variable
446 #########################################################
447 if ( $sts == 0 ) then
448 setenv ${module}_ROOT_DIR $px
451 echo ">>> Finished ${module} module"
453 echo "\!\!\! Error \!\!\! Can't find module sources. ${module}_SRC_DIR environment variable is not set."
456 #########################################################
458 #########################################################
461 echo "==========================================================================="
462 echo "SALOME build finished at `date`"
463 echo "==========================================================================="