]> SALOME platform Git repositories - tools/install.git/blob - config_files/build.csh
Salome HOME
Prepare SALOME 7.3.0
[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-2013 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 PARAVIS YACS NETGENPLUGIN GHS3DPLUGIN BLSURFPLUGIN HexoticPLUGIN GHS3DPRLPLUGIN COMPONENT CALCULATOR HELLO PYHELLO LIGHT PYLIGHT 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:)"
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         #########################################################
296         # define installation directory (by using module's version
297         # number); default is a build directory
298         #########################################################
299         set vx=""
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"`
306             endif
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}"
312         endif
313         if ( "$vx" != "" ) then
314             set vx="_$vx"
315         endif
316         if ( "$prefix" == "" ) then
317             set px=${BUILD_DIR}${def_install_dir}/${module}${vx}
318         else
319             set px=${prefix}/${module}${vx}
320         endif
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}."
332             else
333                 if (! ($?BUILDCONF_OPTS) ) then
334                     set myconf_keys=""
335                 else
336                     set myconf_keys="${CONF_OPTS}"
337                 endif
338                 if ( $inst_with_gui == 0 ) then
339                     set myconf_keys="${myconf_keys} --without-gui"
340                 endif
341                 if ( "${module}" == "MED" && ($?METIS_ROOT_DIR) && ($?SCOTCH_ROOT_DIR) ) then
342                     set myconf_keys="${myconf_keys} --enable-splitter=yes --with-metis=${METIS_ROOT_DIR} --with-scotch=${SCOTCH_ROOT_DIR}"
343                 endif
344                 if ( "${module}" == "NETGENPLUGIN" && ($?NETGEN_ROOT_DIR) ) then
345                     set myconf_keys="${myconf_keys} --with-netgen=${NETGEN_ROOT_DIR}"
346                 endif
347                 if ( "${module}" == "PARAVIS" )  then
348                     cd ${module_build}; cmake ${module_src} -DCMAKE_INSTALL_PREFIX=$px >& ${LOG_DIR}/configure_${module}.log
349                 else
350                     ${module_src}/configure --prefix=$px ${optim} ${myconf_keys} >& ${LOG_DIR}/configure_${module}.log
351                 endif
352
353                 #########################################################
354                 # echo possible errors
355                 #########################################################
356                 if ( $verbose_level > 0 ) then
357                     cat ${LOG_DIR}/configure_${module}.log | grep ": error:"
358                 endif
359                 if ( $verbose_level > 1 ) then
360                     cat ${LOG_DIR}/configure_${module}.log | grep ": WARNING:"
361                 endif
362             endif
363         endif
364         #########################################################
365         # perform make
366         #########################################################
367         echo "... Performing make"
368         #########################################################
369         # first clear dependencies
370         #########################################################
371         find . -name ".dep*" -type f -exec rm -f {} \; >& /dev/null
372         #########################################################
373         # then make
374         #########################################################
375         if ( "${module}" == "PARAVIS" )  then
376             if ( ($?VTK_AUTOLOAD_PATH) ) then
377                 setenv VTK_AUTOLOAD_PATH_BACKUP ${VTK_AUTOLOAD_PATH}
378                 unsetenv VTK_AUTOLOAD_PATH
379             endif
380         endif
381         make >& ${LOG_DIR}/make_${module}.log
382         set sts=$status
383         if ( "${module}" == "PARAVIS" )  then
384             if ( ($?VTK_AUTOLOAD_PATH_BACKUP) ) then
385                 setenv VTK_AUTOLOAD_PATH ${VTK_AUTOLOAD_PATH_BACKUP}
386             endif
387         endif
388         #########################################################
389         # if make step is successful set the ${module}_ROOT_DIR
390         # environment variable
391         #########################################################
392         #if ( $sts == 0 ) then
393         #    setenv ${module}_ROOT_DIR ${module_build}
394         #endif
395         #########################################################
396         # print make errors
397         #########################################################
398         cat ${LOG_DIR}/make_${module}.log | grep -Ei '[*][*][*].*error'
399         #########################################################
400         # print compiler errors and warnings
401         # Note: here awk is used to concatenate together several lines of single
402         #       error or warning message produced by stupid gnu compiler
403         # Actually, instead of that we could use 'fmessage length=n' option of g++...
404         #########################################################
405         if ( $verbose_level > 0 ) then
406             ###cat ${LOG_DIR}/make_${module}.log | grep ": error"
407             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/"@@
408         endif
409         if ( $verbose_level > 1 ) then
410             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/"@@
411         endif
412         #########################################################
413         # perform make dev_docs step if -t flag is given
414         #########################################################
415         if ( $is_tui == 1 && $sts == 0 && -d ${module_build}/doc ) then
416             cd ${module_build}/doc
417             set dd=`cat Makefile | grep -E "dev_docs[[:space:]]*:"`
418             if ( "$dd" != "" ) then
419                 echo "... Performing make dev_docs"
420                 make dev_docs >& ${LOG_DIR}/make_dev_docs_${module}.log
421                 cat ${LOG_DIR}/make_dev_docs_${module}.log | grep '[*][*][*]'
422             endif
423         endif
424         cd ${module_build}
425         #########################################################
426         # perform make if -i or -p flags are given
427         #########################################################
428         if ( $is_install == 1 && $sts == 0 || "${module}" == "KERNEL" ) then
429             #########################################################
430             # deleting build directory if -d flag is given
431             #########################################################
432             if ( -e $px && $is_delete == 1 ) then
433                 echo "... Removing $px"
434                 rm -rf $px >& /dev/null
435                 if ( "$?" != "0" ) then
436                     echo "\!\!\! Warning \!\!\! Cannot remove install directory ${px}. Permission denied."
437                 endif
438             endif
439             echo "... Performing make install"
440             make install >& ${LOG_DIR}/make_install_${module}.log
441             set sts=$status
442             #########################################################
443             # if make install step is successful set the 
444             # ${module}_ROOT_DIR environment variable
445             #########################################################
446             if ( $sts == 0 ) then
447                 setenv ${module}_ROOT_DIR $px
448             endif
449         endif
450         echo ">>> Finished ${module} module"
451     else
452         echo "\!\!\! Error \!\!\! Can't find module sources. ${module}_SRC_DIR environment variable is not set."
453     endif
454 end
455 #########################################################
456 # finalize
457 #########################################################
458 cd ${BUILD_DIR}
459
460 echo "==========================================================================="
461 echo "SALOME build finished at `date`"
462 echo "==========================================================================="