-#! /bin/csh -f
-##################################################################################################
-# Name : build.csh
-# Description: Build and install SALOME modules from sources
-# Author : Vadim SANDLER (VSR), Open CASCADE S.A.
-# Created : 27.01.2005
-##################################################################################################
+#!/bin/csh -f
+
+####################################################################################
+# File : build.csh
+# Created : Thu Jan 27 09:50:55 2005
+# Author : Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)
+# Project : SALOME
+# Module : Installation Wizard
+# Copyright : 2002-2008 CEA
+#
+# This script is the part of the SALOME installation procedure.
+#
+# This script can be used to build and install SALOME modules from sources.
+# Try build.csh -h for more details about usage.
+#
+####################################################################################
set is_build_configure=0
set is_configure=0
+set inst_with_gui=1
set is_delete=0
set verbose_level=2
set params=""
-set b_params=""
-set modules=(KERNEL GUI GEOM MED SMESH VISU SUPERV NETGENPLUGIN GHS3DPLUGIN COMPONENT PYCALCULATOR CALCULATOR HELLO PYHELLO LIGHT)
+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)
set optim=""
-set is_install=0
+set is_install=1
set is_help=0
+set is_tui=0
set prefix=""
+set def_install_dir="/INSTALL"
+set b_params=""
#########################################################
# parse parameters
set is_configure=1
else if ( "$1" == "-c" ) then
set is_configure=1
+ else if ( "$1" == "-w" ) then
+ set inst_with_gui=0
else if ( "$1" == "-d" ) then
set is_delete=1
else if ( "$1" == "-o" ) then
set optim="--enable-production=yes --disable-debug"
- else if ( "$1" == "-i" ) then
- set is_install=1
else if ( "$1" == "-v" ) then
shift
set verbose_level=$1
set prefix=$1
else if ( "$1" == "-h" ) then
set is_help=1
+ else if ( "$1" == "-t" ) then
+ set is_tui=1
else
- set ckt=`echo ${modules} | grep $1`
+ set ckt=`echo ${modules} | grep -E "\<$1\>"`
if ( "$ckt" != "" ) then
set params="$params $1"
else
set b_params="$b_params $1"
- echo "Warning: Unknown module: $1. Skipping."
+ echo "\!\!\! Warning \!\!\! Unknown module: $1."
endif
endif
shift
echo ""
echo ""
echo "Description:"
-echo " Builds given SALOME2 modules by performing make and (optionally) make install commands"
+echo " Builds given SALOME modules by performing make and make install commands"
echo ""
echo "Usage:"
echo " build.csh [ <option> ] ... [ <module> [ <module> ... ] ]"
echo ""
echo "<module> Modules to build, separated by space(s)."
-echo " If no modules are given - all SALOME2 modules are assumed."
+echo " If no modules are given - all SALOME modules are assumed."
echo " Note, that modules given in command lines are automatically sorted in such order"
echo " to support correct modules dependencies."
echo ""
echo ""
echo "-c Perform configure command for all given modules. Default is off."
echo ""
-echo "-d Delete build directories before calling configure, to enforce full rebuild"
-echo " (and reinstall if -i or -p option is used) of module."
+echo "-w Add --without-gui key to build_configure and configure commands"
+echo " to build SALOME module sources without GUI."
+echo " By default sources are built with GUI."
+echo ""
+echo "-d Delete build directories before calling configure, to force full rebuild"
+echo " and reinstall of the module."
echo " Use this option carefully."
echo ""
echo "-o Build sources in optimized mode. Default is off that means debug mode."
echo " This option can require -d option to be set (to ensure that previously"
echo " created build directories are removed to enforce rebuild in optimized mode)."
echo ""
-echo "-i Performs make install step. Default is off that means only make step."
+echo "-t Performs make dev_docs step to build TUI documentation for those modules"
+echo " which support this. Default is off."
echo ""
echo "-p <prefix> Define the directory where to install modules after compilation."
echo " By default the directory where compilation is performed is used."
echo "Note: If no keys are given script just performs make step."
echo ""
echo "Example:"
-echo " ./build.csh -o -i -b KERNEL MED GEOM"
+echo " ./build.csh -o -p /home/user/salome -b KERNEL MED GEOM"
echo ""
echo " This will make KERNEL, GEOM and MED modules: build_configure, configure, make"
echo " and install procedures will be performed for all specified modules."
if ( "${params}" != "" ) then
set xparams=""
foreach module (${modules})
- set ckt=`echo ${params} | grep ${module}`
+ set ckt=`echo ${params} | grep -E "\<${module}\>"`
if ( "$ckt" != "" ) then
set xparams="$xparams $module"
endif
end
- set modules=($xparams)
-else
- if ( "${b_params}" != "" ) then
- echo "Nothing to be built. Exiting."
- exit
- endif
+ set modules=($xparams $b_params)
+else if ( "${b_params}" != "" ) then
+ set modules=($b_params)
endif
-echo "The following SALOME packages will be built:"
+echo ">>> The following modules will be built:"
echo $modules
#########################################################
if ( ! -e $env_script ) then
set env_script=`dirname $0`/env_products.csh
endif
+if ( ! -e $env_script ) then
+ set env_script=`dirname $0`/env.sh
+endif
if ( -e $env_script ) then
- echo "Setting environment"
+ echo ">>> Setting environment"
source $env_script
else
- echo "Warning! Environment is not set: file env_products.csh is not found."
+ echo "\!\!\! Warning \!\!\! Environment is not set."
+ echo "No environment file (env_build.sh, env_products.sh, env.sh) is found."
+ echo "Proceed with the current environment."
endif
set BUILD_DIR=${PWD}
set LOG_DIR=${BUILD_DIR}/LOGS
+#########################################################
+# define installation prefix
+#########################################################
+if ( "$prefix" == "" ) then
+ echo "\!\!\! Warning \!\!\! Installation directory is not set."
+ echo "All the modules will be installed to the ${BUILD_DIR}${def_install_dir}"
+else
+ set is_absolute=`echo $prefix | grep -e "^/"`
+ if ( "$is_absolute" == "" ) then
+ set prefix=${BUILD_DIR}/$prefix
+ echo "\!\!\! Warning \!\!\! Relative prefix is used."
+ echo "All the modules will be installed to the $prefix"
+ endif
+endif
+
#########################################################
# create log directory
#########################################################
echo "==========================================================================="
echo "Starting SALOME build at `date`"
+echo "==========================================================================="
#########################################################
# loop for all given modules
#########################################################
foreach module (${modules})
- echo "==========================================================================="
- echo "Processing ${module} module"
+ echo ">>> Processing ${module} module"
set module_src=`printenv ${module}_SRC_DIR`
set module_build=${BUILD_DIR}/${module}_BUILD
if ( ${module_src} != "" ) then
- set add_keys=""
cd ${BUILD_DIR}
#########################################################
# check if sources directory exists
#########################################################
if ( ! -e ${module_src} ) then
- echo "Error! Can't find sources directory: ${module_src} does not exist."
+ echo "\!\!\! Error \!\!\! Can't find sources directory: ${module_src} does not exist."
continue
endif
#########################################################
# configure script does not exist (first compilation?)
#########################################################
if ( $is_build_configure == 1 || $cfg_exist == 0 ) then
- echo "------- Build configure ---------"
+ echo "... Performing build_configure"
#########################################################
- # if build_configure script is not found, omit the module
+ # check if build_configure script exists
#########################################################
- if ( ! -e ${module_src}/build_configure ) then
- echo "Error! Nothing to build in ${module_src}. Skipping module."
- continue
+ if ( ! -e ${module_src}/build_configure && "${module}" != "PARAVIS" ) then
+ echo "\!\!\! Warning \!\!\! Can not find build_configure script in ${module_src}."
+ else
+ if ( "${module}" == "PARAVIS" ) then
+ echo "\!\!\! Warning \!\!\! build_configure step is not executed for ${module}."
+ else
+ #########################################################
+ # call build_configure
+ #########################################################
+ if (! ($?BUILDCONF_OPTS) ) then
+ set mybuildconf_keys=""
+ else
+ set mybuildconf_keys="${BUILDCONF_OPTS}"
+ endif
+ if ( $inst_with_gui == 0 ) then
+ set mybuildconf_keys="${mybuildconf_keys} --without-gui"
+ endif
+ cd ${module_src}
+ ./build_configure ${mybuildconf_keys} >& ${LOG_DIR}/build_configure_${module}.log
+ #########################################################
+ # echo possible errors
+ #########################################################
+ if ( $verbose_level > 0 ) then
+ cat ${LOG_DIR}/build_configure_${module}.log | grep -E "(failed|: error:)" >/dev/stderr
+ endif
endif
- #########################################################
- # call build_configure
- #########################################################
- cd ${module_src}
- ./build_configure >& ${LOG_DIR}/build_configure_${module}.log
- #########################################################
- # echo possible errors
- #########################################################
- if ( $verbose_level > 0 ) then
- cat ${LOG_DIR}/build_configure_${module}.log | grep ": error:"
endif
endif
#########################################################
# deleting build directory if -d flag is given
#########################################################
if ( -e ${module_build} && $is_delete == 1 ) then
- echo "Deleting ${module_build}"
- rm -rf ${module_build}
+ echo "... Removing ${module_build}"
+ chmod -R +w ${module_build} && rm -rf ${module_build} >& /dev/null
+ if ( "$?" != "0" ) then
+ echo "\!\!\! Warning \!\!\! Cannot remove build directory ${module_build}. Permission denied."
+ endif
endif
#########################################################
# creating build directory if it does not exist
#########################################################
if ( ! -e ${module_build} ) then
- mkdir -p ${module_build}
+ mkdir -p ${module_build} >& /dev/null
+ if ( "$?" != "0" ) then
+ echo "\!\!\! Error \!\!\! Cannot create build directory ${module_build}. Permission denied."
+ continue
+ endif
endif
cd ${module_build}
#########################################################
if ( -e ${module_build}/Makefile ) then
set mkfile_exist=1
endif
+ #########################################################
+ # check if configure options are changed from the
+ # previous launch
+ #########################################################
+ set opts_changed=0
+## if ( -f ${module_build}/config.log ) then
+## set old_prefix=`grep -e '^prefix=' ${module_build}/config.log | sed -e "s%^prefix='\(.*\)'%\1%"`
+## if ( "$old_prefix" != "$prefix" ) then
+## set opts_changed=1
+## endif
+## endif
#########################################################
# define installation directory (by using module's version
# number); default is a build directory
#########################################################
set vx=""
- if ( -e ${module_src}/bin/VERSION ) then
- set vx=`awk -F: '{ if (NF > 1) print $NF; }' ${module_src}/bin/VERSION | tr -d '[:space:]'`
- endif
- set px=${BUILD_DIR}/${module}
- if ( "$prefix" != "" ) then
- set px=$prefix/${module}
+ if ( -e ${module_src}/configure.ac ) then
+ set vx=`grep -e "^AC_INIT" ${module_src}/configure.ac | sed -e "s%.*\[\([[:digit:].]*\)\].*%\1%g"`
+ else if ( -e ${module_src}/configure.in.base ) then
+ set vx=`grep -e "^VERSION=" ${module_src}/configure.in.base | awk -F= '{ if (NF>1) print $NF; }' | tr -d '[:space:]'`
+ if ( "$vx" == "" ) then
+ set vx=`grep -e "^AC_INIT" ${module_src}/configure.in.base | sed -e "s%.*\[\([[:digit:].]*\)\].*%\1%g"`
+ endif
+ else if ( -e ${module_src}/CMakeLists.txt ) then
+ set ver_maj=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MAJOR | sed -e "s%[A-Z_() ]%%g"`
+ set ver_min=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MINOR | sed -e "s%[A-Z_() ]%%g"`
+ set ver_maintenance=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MAINTENANCE | sed -e "s%[A-Z_() ]%%g"`
+ set vx="${ver_maj}.${ver_min}.${ver_maintenance}"
endif
if ( "$vx" != "" ) then
- set px="$px"_"$vx"
+ set vx="_$vx"
+ endif
+ if ( "$prefix" == "" ) then
+ #set module_root_dir=`printenv ${module}_ROOT_DIR`
+ #if ( "$module_root_dir" != "" ) then
+ # set px=$module_root_dir
+ #else
+ set px=${BUILD_DIR}${def_install_dir}/${module}${vx}
+ #endif
+ else
+ set px=${prefix}/${module}${vx}
endif
#########################################################
# perform configure if -c flag is given or if
# Makefile does not exist (first compilation?)
#########################################################
- if ( $is_configure == 1 || $mkfile_exist == 0) then
- echo "------- Configure ---------------"
- if ( "${module}" == "NETGENPLUGIN" && ($?NETGENHOME) ) then
- set add_keys="--with-netgen=${NETGENHOME}"
- endif
- ${module_src}/configure --prefix=$px ${optim} ${add_keys} >& ${LOG_DIR}/configure_${module}.log
+ if ( $is_configure == 1 || $mkfile_exist == 0 || $opts_changed == 1 ) then
+ echo "... Performing configure"
#########################################################
- # echo possible errors
+ # check if configure script exists
#########################################################
- if ( $verbose_level > 0 ) then
- cat ${LOG_DIR}/configure_${module}.log | grep ": error:"
- endif
- if ( $verbose_level > 1 ) then
- cat ${LOG_DIR}/configure_${module}.log | grep ": WARNING:"
+ if ( ! -e ${module_src}/configure && "${module}" != "PARAVIS" ) then
+ echo "\!\!\! Warning \!\!\! Can not find configure script in ${module_src}."
+ else
+ if (! ($?BUILDCONF_OPTS) ) then
+ set myconf_keys=""
+ else
+ set myconf_keys="${CONF_OPTS}"
+ endif
+ if ( $inst_with_gui == 0 ) then
+ set myconf_keys="${myconf_keys} --without-gui"
+ endif
+ if ( "${module}" == "MED" && ($?METISDIR) && ($?SCOTCHDIR) ) then
+ set myconf_keys="${myconf_keys} --enable-splitter=yes --with-metis=${METISDIR} --with-scotch=${SCOTCHDIR}"
+ endif
+ if ( "${module}" == "NETGENPLUGIN" && ($?NETGENHOME) ) then
+ set myconf_keys="${myconf_keys} --with-netgen=${NETGENHOME}"
+ endif
+ if ( "${module}" == "PARAVIS" ) then
+ cd ${module_build}; cmake ${module_src} -DCMAKE_INSTALL_PREFIX=$px >& ${LOG_DIR}/configure_${module}.log
+ else
+ ${module_src}/configure --prefix=$px ${optim} ${myconf_keys} >& ${LOG_DIR}/configure_${module}.log
+ endif
+ #########################################################
+ # echo possible errors
+ #########################################################
+ if ( $verbose_level > 0 ) then
+ cat ${LOG_DIR}/configure_${module}.log | grep ": error:" >/dev/stderr
+ endif
+ if ( $verbose_level > 1 ) then
+ cat ${LOG_DIR}/configure_${module}.log | grep ": WARNING:" >/dev/stderr
+ endif
endif
endif
#########################################################
# perform make
#########################################################
- echo "------- Make --------------------"
+ echo "... Performing make"
#########################################################
# first clear dependencies
#########################################################
- find . -name ".dep*" -exec rm -rf {} \; >& /dev/null
+ find . -name ".dep*" -type f -exec rm -f {} \; >& /dev/null
make >& ${LOG_DIR}/make_${module}.log
set sts=$status
#########################################################
# if make step is successful set the ${module}_ROOT_DIR
# environment variable
#########################################################
- if ( $sts == 0 ) then
- setenv ${module}_ROOT_DIR ${module_build}
- endif
+ #if ( $sts == 0 ) then
+ # setenv ${module}_ROOT_DIR ${module_build}
+ #endif
#########################################################
# print make errors
#########################################################
- cat ${LOG_DIR}/make_${module}.log | grep '[*][*][*]'
+ cat ${LOG_DIR}/make_${module}.log | grep -Ei '[*][*][*].*error' >/dev/stderr
#########################################################
# print compiler errors and warnings
# Note: here awk is used to concatenate together several lines of single
#########################################################
if ( $verbose_level > 0 ) then
###cat ${LOG_DIR}/make_${module}.log | grep ": error"
- cat ${LOG_DIR}/make_${module}.log | awk 'substr($0,0,1)!=" " {print ""} {printf $0} END {print ""}' | grep "${module_src}/[A-Za-z_0-9./]*:" | sed s@"^${module_src}/src/"@@
+ 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
endif
if ( $verbose_level > 1 ) then
- cat ${LOG_DIR}/make_${module}.log | awk 'substr($0,0,1)!=" " {print ""} {printf $0} END {print ""}' | grep ": warning" | sed s@"^${module_src}/src/"@@
+ 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
endif
#########################################################
+ # perform make dev_docs step if -t flag is given
+ #########################################################
+ if ( $is_tui == 1 && $sts == 0 && -d ${module_build}/doc ) then
+ cd ${module_build}/doc
+ set dd=`cat Makefile | grep -E "dev_docs[[:space:]]*:"`
+ if ( "$dd" != "" ) then
+ echo "... Performing make dev_docs"
+ make dev_docs >& ${LOG_DIR}/make_dev_docs_${module}.log
+ cat ${LOG_DIR}/make_dev_docs_${module}.log | grep '[*][*][*]' >/dev/stderr
+ endif
+ endif
+ cd ${module_build}
+ #########################################################
# perform make if -i or -p flags are given
#########################################################
- if ( $is_install == 1 && $sts == 0 ) then
- echo "------- Make install ------------"
+ if ( $is_install == 1 && $sts == 0 || "${module}" == "KERNEL" ) then
#########################################################
# deleting build directory if -d flag is given
#########################################################
if ( -e $px && $is_delete == 1 ) then
- echo "Deleting $px"
- rm -rf $px
+ echo "... Removing $px"
+ rm -rf $px >& /dev/null
+ if ( "$?" != "0" ) then
+ echo "\!\!\! Warning \!\!\! Cannot remove install directory ${px}. Permission denied."
+ endif
endif
+ echo "... Performing make install"
make install >& ${LOG_DIR}/make_install_${module}.log
set sts=$status
#########################################################
setenv ${module}_ROOT_DIR $px
endif
endif
- echo ""
+ echo ">>> Finished ${module} module"
else
- echo "Error! Can't find module sources. ${module}_SRC_DIR environment variable is not set."
+ echo "\!\!\! Error \!\!\! Can't find module sources. ${module}_SRC_DIR environment variable is not set."
endif
end
#########################################################