Salome HOME
Fix pb with Hexotic environment
[tools/install.git] / config_files / build.csh
1 #!/bin/csh -f
2
3 ####################################################################################
4 #  File      : build.csh
5 #  Created   : Thu Jan 27 09:50:55 2005
6 #  Author    : Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)
7 #  Project   : SALOME
8 #  Module    : Installation Wizard
9 #  Copyright : 2002-2008 CEA
10 #
11 #  This script is the part of the SALOME installation procedure.
12 #
13 #  This script can be used to build and install SALOME modules from sources.
14 #  Try build.csh -h for more details about usage.
15 #
16 ####################################################################################
17
18 set is_build_configure=0
19 set is_configure=0
20 set inst_with_gui=1
21 set is_delete=0
22 set verbose_level=2
23 set params=""
24 set modules=(KERNEL GUI GEOM MED SMESH VISU PARAVIS YACS NETGENPLUGIN GHS3DPLUGIN BLSURFPLUGIN HexoticPLUGIN GHS3DPRLPLUGIN COMPONENT PYCALCULATOR CALCULATOR HELLO PYHELLO LIGHT PYLIGHT SIERPINSKY RANDOMIZER HEXABLOCK HEXABLOCKPLUGIN ATOMIC ATOMGEN ATOMSOLV HOMARD JOBMANAGER)
25 set optim=""
26 set is_install=1
27 set is_help=0
28 set is_tui=0
29 set prefix=""
30 set def_install_dir="/INSTALL"
31 set b_params=""
32
33 #########################################################
34 # parse parameters
35 #########################################################
36 while ( ${%1} > 0 )
37     if ( "$1" == "-b" ) then
38         set is_build_configure=1
39         set is_configure=1
40     else if ( "$1" == "-c" ) then
41         set is_configure=1
42     else if ( "$1" == "-w" ) then
43         set inst_with_gui=0
44     else if ( "$1" == "-d" ) then
45         set is_delete=1
46     else if ( "$1" == "-o" ) then
47         set optim="--enable-production=yes --disable-debug"
48     else if ( "$1" == "-v" ) then
49         shift
50         set verbose_level=$1
51     else if ( "$1" == "-p" ) then
52         shift
53         set is_install=1
54         set prefix=$1
55     else if ( "$1" == "-h" ) then
56         set is_help=1
57     else if ( "$1" == "-t" ) then
58         set is_tui=1
59     else
60         set ckt=`echo ${modules} | grep -E "\<$1\>"`
61         if ( "$ckt" != "" ) then
62             set params="$params $1"
63         else
64             set b_params="$b_params $1"
65             echo "\!\!\! Warning \!\!\! Unknown module: $1."
66         endif
67     endif
68     shift
69 end
70
71 #########################################################
72 # if -h option is given - print help info and exit 
73 #########################################################
74 if ( $is_help == 1 ) then
75 echo ""
76 echo ""
77 echo "Description:"
78 echo "            Builds given SALOME modules by performing make and make install commands"
79 echo ""
80 echo "Usage:"
81 echo "            build.csh [ <option> ] ... [ <module> [ <module> ... ] ]"
82 echo ""
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."
87 echo ""
88 echo "Options:"
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."
91 echo ""
92 echo "-c          Perform configure command for all given modules. Default is off."
93 echo ""
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."
97 echo ""
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."
101 echo ""
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)."
106 echo ""
107 echo "-t          Performs make dev_docs step to build TUI documentation for those modules"
108 echo "            which support this. Default is off."
109 echo ""
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."
112 echo ""
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 "
117 echo ""
118 echo "-h          Prints this help information."
119 echo ""
120 echo "Note:       If no keys are given script just performs make step."
121 echo ""
122 echo "Example:"
123 echo "            ./build.csh -o -p /home/user/salome -b KERNEL MED GEOM"
124 echo ""
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"
128 echo ""
129 exit
130 endif
131
132 #########################################################
133 # sort modules in proper order according to the dependancies
134 #########################################################
135 if ( "${params}" != "" ) then
136     set xparams=""
137     foreach module (${modules})
138         set ckt=`echo ${params} | grep -E "\<${module}\>"`
139         if ( "$ckt" != "" ) then
140             set xparams="$xparams $module"
141         endif
142     end
143     set modules=($xparams $b_params)
144 else if ( "${b_params}" != "" ) then
145     set modules=($b_params)
146 endif
147
148 echo ">>> The following modules will be built:"
149 echo $modules
150
151 #########################################################
152 # set environment
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
157 endif
158 if ( ! -e $env_script ) then
159     set env_script=`dirname $0`/env.sh
160 endif
161 if ( -e $env_script ) then
162     echo ">>> Setting environment"
163     source $env_script
164 else
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."
168 endif
169
170 set BUILD_DIR=${PWD}
171 set LOG_DIR=${BUILD_DIR}/LOGS
172
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}"
179 else
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"
185     endif
186 endif
187
188 #########################################################
189 # create log directory
190 #########################################################
191 if ( ! -e ${LOG_DIR} ) then
192     mkdir -p ${LOG_DIR}
193 endif
194
195 echo "==========================================================================="
196 echo "Starting SALOME build at `date`"
197 echo "==========================================================================="
198
199 #########################################################
200 # loop for all given modules
201 #########################################################
202 foreach module (${modules})
203   echo ">>> Processing ${module} module"
204
205   set module_src=`printenv ${module}_SRC_DIR`
206   set module_build=${BUILD_DIR}/${module}_BUILD
207
208   if ( ${module_src} != "" ) then
209     cd ${BUILD_DIR}
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."
215         continue
216     endif
217     #########################################################
218     # check if configure script exists
219     #########################################################
220     set cfg_exist=0
221     if ( -e ${module_src}/configure ) then
222         set cfg_exist=1
223     endif
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}."
235             else
236             if ( "${module}" == "PARAVIS" ) then
237             echo "\!\!\! Warning \!\!\! build_configure step is not executed for ${module}."
238                 else
239             #########################################################
240             # call build_configure
241             #########################################################
242             if (! ($?BUILDCONF_OPTS) ) then
243             set mybuildconf_keys=""
244             else
245             set mybuildconf_keys="${BUILDCONF_OPTS}"
246             endif    
247             if ( $inst_with_gui == 0 ) then
248                 set mybuildconf_keys="${mybuildconf_keys} --without-gui"
249             endif
250             cd ${module_src}
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:)" >/dev/stderr
257             endif
258         endif
259         endif
260     endif
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."
269         endif
270     endif
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."
278             continue
279         endif
280     endif
281     cd ${module_build}
282     #########################################################
283     # check if top Makefile exists in build directory, i.e. 
284     # is it necessary to run configure script
285     #########################################################
286     set mkfile_exist=0
287     if ( -e ${module_build}/Makefile ) then
288         set mkfile_exist=1
289     endif
290     #########################################################
291     # check if configure options are changed from the 
292     # previous launch
293     #########################################################
294     set opts_changed=0
295 ##    if ( -f ${module_build}/config.log ) then
296 ##      set old_prefix=`grep -e '^prefix=' ${module_build}/config.log | sed -e "s%^prefix='\(.*\)'%\1%"`
297 ##      if ( "$old_prefix" != "$prefix" ) then
298 ##          set opts_changed=1
299 ##      endif
300 ##    endif
301     #########################################################
302     # define installation directory (by using module's version
303     # number); default is a build directory
304     #########################################################
305     set vx=""
306     if ( -e ${module_src}/configure.ac ) then
307         set vx=`grep -e "^AC_INIT" ${module_src}/configure.ac | sed -e "s%.*\[\([[:digit:].]*\)\].*%\1%g"`
308     else if ( -e ${module_src}/configure.in.base ) then
309         set vx=`grep -e "^VERSION=" ${module_src}/configure.in.base | awk -F= '{ if (NF>1) print $NF; }' | tr -d '[:space:]'`
310         if ( "$vx" == "" ) then
311             set vx=`grep -e "^AC_INIT" ${module_src}/configure.in.base | sed -e "s%.*\[\([[:digit:].]*\)\].*%\1%g"`
312         endif
313     else if ( -e ${module_src}/CMakeLists.txt ) then
314             set ver_maj=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MAJOR | sed -e "s%[A-Z_() ]%%g"`
315             set ver_min=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MINOR | sed -e "s%[A-Z_() ]%%g"`
316             set ver_maintenance=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MAINTENANCE | sed -e "s%[A-Z_() ]%%g"`
317             set vx="${ver_maj}.${ver_min}.${ver_maintenance}"
318     endif
319     if ( "$vx" != "" ) then
320         set vx="_$vx"
321     endif
322     if ( "$prefix" == "" ) then
323         #set module_root_dir=`printenv ${module}_ROOT_DIR`
324         #if ( "$module_root_dir" != "" ) then
325         #    set px=$module_root_dir
326         #else
327              set px=${BUILD_DIR}${def_install_dir}/${module}${vx}
328         #endif
329     else
330         set px=${prefix}/${module}${vx}
331     endif
332     #########################################################
333     # perform configure if -c flag is given or if 
334     # Makefile does not exist (first compilation?)
335     #########################################################
336     if ( $is_configure == 1 || $mkfile_exist == 0 || $opts_changed == 1 ) then
337         echo "... Performing configure"
338         #########################################################
339         # check if configure script exists
340         #########################################################
341         if ( ! -e ${module_src}/configure  && "${module}" != "PARAVIS" ) then
342             echo "\!\!\! Warning \!\!\! Can not find configure script in ${module_src}."
343         else
344             if (! ($?BUILDCONF_OPTS) ) then
345             set myconf_keys=""
346             else
347             set myconf_keys="${CONF_OPTS}"
348             endif
349             if ( $inst_with_gui == 0 ) then
350                 set myconf_keys="${myconf_keys} --without-gui"
351             endif
352             if ( "${module}" == "MED" && ($?METISDIR) && ($?SCOTCHDIR) ) then
353                 set myconf_keys="${myconf_keys} --enable-splitter=yes --with-metis=${METISDIR} --with-scotch=${SCOTCHDIR}"
354             endif
355             if ( "${module}" == "NETGENPLUGIN" && ($?NETGENHOME) ) then
356                 set myconf_keys="${myconf_keys} --with-netgen=${NETGENHOME}"
357             endif
358                 if ( "${module}" == "PARAVIS" )  then
359                     cd ${module_build}; cmake ${module_src} -DCMAKE_INSTALL_PREFIX=$px >& ${LOG_DIR}/configure_${module}.log
360                 else
361                     ${module_src}/configure --prefix=$px ${optim} ${myconf_keys} >& ${LOG_DIR}/configure_${module}.log
362                 endif
363             #########################################################
364             # echo possible errors
365             #########################################################
366             if ( $verbose_level > 0 ) then
367                 cat ${LOG_DIR}/configure_${module}.log | grep ": error:" >/dev/stderr
368             endif
369             if ( $verbose_level > 1 ) then
370                 cat ${LOG_DIR}/configure_${module}.log | grep ": WARNING:" >/dev/stderr
371             endif
372         endif
373     endif
374     #########################################################
375     # perform make
376     #########################################################
377     echo "... Performing make"
378     #########################################################
379     # first clear dependencies
380     #########################################################
381     find . -name ".dep*" -type f -exec rm -f {} \; >& /dev/null
382     make >& ${LOG_DIR}/make_${module}.log
383     set sts=$status
384     #########################################################
385     # if make step is successful set the ${module}_ROOT_DIR
386     # environment variable
387     #########################################################
388     #if ( $sts == 0 ) then
389     #    setenv ${module}_ROOT_DIR ${module_build}
390     #endif
391     #########################################################
392     # print make errors
393     #########################################################
394     cat ${LOG_DIR}/make_${module}.log | grep -Ei '[*][*][*].*error' >/dev/stderr
395     #########################################################
396     # print compiler errors and warnings
397     # Note: here awk is used to concatenate together several lines of single
398     #       error or warning message produced by stupid gnu compiler
399     # Actually, instead of that we could use 'fmessage length=n' option of g++...
400     #########################################################
401     if ( $verbose_level > 0 ) then
402         ###cat ${LOG_DIR}/make_${module}.log | grep ": error"
403         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/"@@ >/dev/stderr
404     endif
405     if ( $verbose_level > 1 ) then
406         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/"@@ >/dev/stderr
407     endif
408     #########################################################
409     # perform make dev_docs step if -t flag is given
410     #########################################################
411     if ( $is_tui == 1 && $sts == 0 && -d ${module_build}/doc ) then
412         cd ${module_build}/doc
413         set dd=`cat Makefile | grep -E "dev_docs[[:space:]]*:"`
414         if ( "$dd" != "" ) then
415             echo "... Performing make dev_docs"
416             make dev_docs >& ${LOG_DIR}/make_dev_docs_${module}.log
417             cat ${LOG_DIR}/make_dev_docs_${module}.log | grep '[*][*][*]' >/dev/stderr
418         endif
419     endif
420     cd ${module_build}
421     #########################################################
422     # perform make if -i or -p flags are given
423     #########################################################
424     if ( $is_install == 1 && $sts == 0 || "${module}" == "KERNEL" ) then
425         #########################################################
426         # deleting build directory if -d flag is given
427         #########################################################
428         if ( -e $px && $is_delete == 1 ) then
429             echo "... Removing $px"
430             rm -rf $px >& /dev/null
431             if ( "$?" != "0" ) then
432                 echo "\!\!\! Warning \!\!\! Cannot remove install directory ${px}. Permission denied."
433             endif
434         endif
435         echo "... Performing make install"
436         make install >& ${LOG_DIR}/make_install_${module}.log
437         set sts=$status
438         #########################################################
439         # if make install step is successful set the 
440         # ${module}_ROOT_DIR environment variable
441         #########################################################
442         if ( $sts == 0 ) then
443             setenv ${module}_ROOT_DIR $px
444         endif
445     endif
446     echo ">>> Finished ${module} module"
447   else
448     echo "\!\!\! Error \!\!\! Can't find module sources. ${module}_SRC_DIR environment variable is not set."
449   endif
450 end
451 #########################################################
452 # finalize
453 #########################################################
454 cd ${BUILD_DIR}
455
456 echo "==========================================================================="
457 echo "SALOME build finished at `date`"
458 echo "==========================================================================="