Salome HOME
Update some important files after binary installation
[tools/install.git] / config_files / build.sh
index c6fd4dd7825e472aa8176429e2701481b4358a8f..313cb40a17c6745ab9182925dc330a0094b7e566 100755 (executable)
@@ -6,7 +6,7 @@
 #  Author    : Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)
 #  Project   : SALOME
 #  Module    : Installation Wizard
-#  Copyright : 2002-2007 CEA
+#  Copyright : 2002-2013 CEA
 #
 #  This script is the part of the SALOME installation procedure.
 #
@@ -21,7 +21,7 @@
 usage(){
     echo ""
     echo "Description:"
-    echo "            Builds given SALOME modules by performing make and (optionally)"
+    echo "            Builds given SALOME modules by performing make and "
     echo "            make install commands"
     echo ""
     echo "Usage:"
@@ -38,12 +38,12 @@ usage(){
     echo ""
     echo "-c          Perform configure command for all given modules. Default is off."
     echo ""
-    echo "-w          Add --without-ihm key to build_configure and configure"
-    echo "            commands for MED module to build its sources without GUI."
-    echo "            By default MED sources are built with GUI."
+    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 enforce full"
-    echo "            rebuild (and reinstall if -i or -p option is used) of module."
+    echo "-d          Delete build directories before calling configure, to force full"
+    echo "            rebuild and reinstall of the module."
     echo "            Use this option carefully."
     echo ""
     echo "-o          Build sources in optimized mode. Default is off that means"
@@ -56,9 +56,6 @@ usage(){
     echo "-t          Performs make dev_docs step to build TUI documentation for those"
     echo "            modules which support this. Default is off."
     echo ""
-    echo "-i          Performs make install step. Default is off that means only make"
-    echo "            step."
-    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 ""
@@ -72,7 +69,7 @@ usage(){
     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,"
     echo "            configure, make and install procedures will be performed for all"
@@ -83,29 +80,28 @@ usage(){
 
 is_build_configure=0
 is_configure=0
-med_with_gui=1
+inst_with_gui=1
 is_delete=0
 verbose_level=2
 params=""
-b_params=""
-modules="KERNEL GUI GEOM MED SMESH VISU SUPERV NETGENPLUGIN GHS3DPLUGIN BLSURFPLUGIN HexoticPLUGIN GHS3DPRLPLUGIN COMPONENT PYCALCULATOR CALCULATOR HELLO PYHELLO LIGHT SIERPINSKY RANDOMIZER FILTER YACS MULTIPR"
+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"
 optim=""
-is_install=0
+is_install=1
 is_tui=0
 prefix=""
+def_install_dir="/INSTALL"
 
 #########################################################
 # parse parameters
 #########################################################
-while getopts ":hbcwdoitv:p:" option ; do
+while getopts ":hbcwdotv:p:" option ; do
     case $option in
         h ) usage ;;
         b ) is_build_configure=1 ; is_configure=1 ;;
         c ) is_configure=1 ;;
-        w ) med_with_gui=0 ;;
+        w ) inst_with_gui=0 ;;
         d ) is_delete=1 ;;
         o ) optim="--enable-production=yes --disable-debug" ;;
-        i ) is_install=1 ;;
        t ) is_tui=1 ;;
         v ) verbose_level=$OPTARG ;;
         p ) is_install=1 ; prefix=$OPTARG ;;
@@ -115,17 +111,19 @@ done
 # shift to have the good number of other args
 shift $((OPTIND - 1))
 
+b_params=""
+
 for arg in $@ ; do
     known=0
     for m in $modules ; do
        if [ "$m" == "$arg" ] ; then known=1 ; break ; fi
     done
-    if [ $known -eq 1 ] ; then
-       params="$params $arg"
-    else
-       b_params="$b_params $arg"
+    if [ $known -eq 0 ] ; then
        echo
-       echo '!!! Warning !!! Unknown module: '$arg'. Skipping.'
+       echo '!!! Warning !!! Unknown module: '$arg'.'
+       b_params="$b_params $arg"
+    else
+       params="$params $arg"
     fi
 done
 
@@ -139,19 +137,19 @@ if [ "${params}" != "" ] ; then
        for p in $params ; do
            if [ "$p" == "$module" ] ; then found=1 ; break ; fi
        done
-       if [ $found -eq 1 ] ; then xparams="$xparams $module" ; fi
+       if [ $found -eq 1 ] ; then 
+           xparams="$xparams $module"
+       fi
     done
-    modules="$xparams"
+    modules="$xparams $b_params"
 elif [ "${b_params}" != "" ] ; then
-    echo
-    echo "Nothing to be built. Exiting."
-    echo
-    exit 1
+    modules="$b_params"
 fi
 
 echo
-echo ">>> The following SALOME packages will be built:"
+echo ">>> The following modules will be built:"
 echo $modules
+echo
 
 #########################################################
 # set environment
@@ -160,6 +158,9 @@ env_script=`dirname $0`/env_build.sh
 if [ ! -e $env_script ] ; then
     env_script=`dirname $0`/env_products.sh
 fi
+if [ ! -e $env_script ] ; then
+    env_script=`dirname $0`/env.sh
+fi
 if [ -e $env_script ] ; then
     echo
     echo ">>> Setting environment"
@@ -167,7 +168,7 @@ if [ -e $env_script ] ; then
 else
     echo
     echo '!!! Warning !!! Environment is not set.'
-    echo 'Neither env_build.sh nor env_products.sh file is found.'
+    echo 'No environment file (env_build.sh, env_products.sh, env.sh) is found.'
     echo 'Proceed with the current environment.'
 fi
 
@@ -178,17 +179,9 @@ LOG_DIR=${BUILD_DIR}/LOGS
 # define installation prefix
 #########################################################
 if [ "$prefix" == "" ] ; then
-    prefix=${BUILD_DIR}/INSTALL
-    if [ $is_install -eq 1 ] ; then
-       echo
-       echo '!!! Warning !!! Installation directory is not set.'
-       echo "All the modules will be installed to the $prefix"
-    elif [ "`echo ${modules} | grep KERNEL`" != "" ] ; then
-       echo
-       echo '!!! Warning !!! KERNEL module requires install step to be performed.'
-       echo "For this module -i option will be forced."
-       echo "The module(s) will be installed to the $prefix"
-    fi
+    echo
+    echo '!!! Warning !!! Installation directory is not set.'
+    echo "All the modules will be installed to the ${BUILD_DIR}${def_install_dir}"
 else
     if [ "`echo $prefix | grep -E '^/'`" == "" ] ; then
        prefix=${BUILD_DIR}/$prefix
@@ -221,7 +214,6 @@ for module in ${modules}; do
     module_build=${BUILD_DIR}/${module}_BUILD
     
     if [ "${module_src}" != "" ] ; then
-       add_keys=""
        cd ${BUILD_DIR}
         #########################################################
         # check if sources directory exists
@@ -237,7 +229,7 @@ for module in ${modules}; do
         # check if configure script exists
         #########################################################
        cfg_exist=0
-       if [ -e ${module_src}/configure ] ; then
+       if [ -e ${module_src}/configure ] || [ -e ${module_src}/CMakeLists.txt ] ; then
            cfg_exist=1
        fi
         #########################################################
@@ -249,22 +241,27 @@ for module in ${modules}; do
            #########################################################
             # check if build_configure script exists
            #########################################################
-           if [ ! -e ${module_src}/build_configure ] ; then
+           if [ ! -e ${module_src}/build_configure ] && [ "${module}" != "PARAVIS" ] ; then
                echo '!!! Warning !!! Cannot find build_configure script in '${module_src}'.'
            else
-               #########################################################
-                # call build_configure
-               #########################################################
-               if [ $med_with_gui -eq 0 ] && [ ${module} == "MED" ] ; then
-                   add_keys="--without-ihm"
-               fi
-               cd ${module_src}
-               ./build_configure ${add_keys} >& ${LOG_DIR}/build_configure_${module}.log
-               #########################################################
-               # echo possible errors
-               #########################################################
-               if [ $verbose_level -gt 0 ] ; then
-                   cat ${LOG_DIR}/build_configure_${module}.log | grep -E "(failed|: error:)" >&2
+               if [ "${module}" == "PARAVIS" ]; then
+                   echo '!!! Warning !!! build_configure step is not executed for '${module}'.'                    
+               else
+                   #########################################################
+                    # call build_configure
+                   #########################################################
+                   mybuildconf_keys="${BUILDCONF_OPTS}"
+                   if [ $inst_with_gui -eq 0 ] ; then
+                       mybuildconf_keys="${mybuildconf_keys} --without-gui"
+                   fi
+                   cd ${module_src}
+                   ./build_configure ${mybuildconf_keys} >& ${LOG_DIR}/build_configure_${module}.log
+                   #########################################################
+                   # echo possible errors
+                   #########################################################
+                   if [ $verbose_level -gt 0 ] ; then
+                       cat ${LOG_DIR}/build_configure_${module}.log | grep -E "(failed|: error:)" >&2
+                   fi
                fi
            fi
        fi
@@ -273,13 +270,24 @@ for module in ${modules}; do
         #########################################################
        if [ -e ${module_build} ] && [ $is_delete -eq 1 ] ; then
            echo "... Removing ${module_build}"
-           rm -rf ${module_build}
+           chmod -R +w ${module_build} && rm -rf ${module_build} >& /dev/null
+           if [ "$?" != "0" ] ; then
+               echo
+               echo '!!! Warning !!! Cannot remove build directory ${module_build}. Permission denied.'
+               echo
+           fi
        fi
         #########################################################
         # 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
+               echo '!!! Error !!! Cannot create build directory ${module_build}. Permission denied.'
+               echo
+               continue
+           fi
        fi
        cd ${module_build}
         #########################################################
@@ -295,30 +303,31 @@ for module in ${modules}; do
         # previous launch
         #########################################################
        opts_changed=0
-##      if [ -f ${module_build}/config.log ] ; then
-##         old_prefix=`grep -e '^prefix=' ${module_build}/config.log | sed -e "s%^prefix='\(.*\)'%\1%"`
-##         if [ "$old_prefix" != "$prefix" ] ; then
-##             opts_changed=1
-##         fi
-##      fi
         #########################################################
         # define installation directory (by using module's version
         # number); default is a build directory
         #########################################################
        vx=""
-       cfg_file=configure.ac
-       if [ ! -e ${module_src}/${cfg_file} ] ; then
-           cfg_file=configure.in.base
-       fi
-       if [ -e ${module_src}/${cfg_file} ] ; then
-           vx=`grep -e "^VERSION=" ${module_src}/${cfg_file} | awk -F= '{ if (NF>1) print $NF; }' | tr -d '[:space:]'`
-       fi
-       px=${BUILD_DIR}/${module}
-       if [ "$prefix" != "" ] ; then
-           px=$prefix/${module}
+       if [ -e ${module_src}/configure.ac ] ; then
+           vx=`grep -e "^AC_INIT" ${module_src}/configure.ac | sed -e "s%.*\[\([[:digit:].]*\)\].*%\1%g"`
+       elif [ -e ${module_src}/configure.in.base ] ; then
+           vx=`grep -e "^VERSION=" ${module_src}/configure.in.base | awk -F= '{ if (NF>1) print $NF; }' | tr -d '[:space:]'`
+           if [ "$vx" == "" ] ; then
+               vx=`grep -e "^AC_INIT" ${module_src}/configure.in.base | sed -e "s%.*\[\([[:digit:].]*\)\].*%\1%g"`
+           fi
+       elif [ -e ${module_src}/CMakeLists.txt ] ; then
+           ver_maj=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MAJOR | sed -e "s%[A-Z_() ]%%g"`
+           ver_min=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MINOR | sed -e "s%[A-Z_() ]%%g"`
+           ver_maintenance=`cat ${module_src}/CMakeLists.txt | grep SET\(VERSION_MAINTENANCE | sed -e "s%[A-Z_() ]%%g"`
+           vx="${ver_maj}.${ver_min}.${ver_maintenance}"
        fi
        if [ "$vx" != "" ] ; then
-           px="$px"_"$vx"
+           vx="_$vx"
+       fi
+       if [ "$prefix" == "" ] ; then
+           px=${BUILD_DIR}${def_install_dir}/${module}${vx}
+       else
+           px=$prefix/${module}${vx}
        fi
         #########################################################
         # perform configure if -c flag is given or if 
@@ -329,21 +338,28 @@ for module in ${modules}; do
            #########################################################
            # check if configure script exists
            #########################################################
-           if [ ! -e ${module_src}/configure ] ; then
+           if [ ! -e ${module_src}/configure ] && [ "${module}" != "PARAVIS" ] ; then
                echo
                echo '!!! Warning !!! Can not find configure script in '${module_src}'.'
                echo
            else
-               if [ $med_with_gui -eq 0 ] && [ "${module}" == "MED" ] ; then
-                   add_keys="--without-ihm"
+               myconf_keys="${CONF_OPTS}"
+               if [ $inst_with_gui -eq 0 ] ; then
+                   myconf_keys="${myconf_keys} --without-gui"
                fi
-               if [  "${module}" == "MED" ] && [ "${METISDIR}" != "" ] && [ "${SCOTCHDIR}" != "" ] ; then
-                   add_keys="--enable-splitter=yes --with-metis=${METISDIR} --with-scotch=${SCOTCHDIR}"
+               if [ "${module}" == "MED" ] && [ "${METISDIR}" != "" ] && [ "${SCOTCHDIR}" != "" ] ; then
+                   myconf_keys="${myconf_keys} --enable-splitter=yes --with-metis=${METISDIR} --with-scotch=${SCOTCHDIR}"
                fi
                if [ "${module}" == "NETGENPLUGIN" ] && [ "$NETGENHOME" != "" ] ; then
-                   add_keys="--with-netgen=${NETGENHOME}"
+                   myconf_keys="${myconf_keys} --with-netgen=${NETGENHOME}"
+               fi
+
+               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
                fi
-               ${module_src}/configure --prefix=$px ${optim} ${add_keys} >& ${LOG_DIR}/configure_${module}.log
+
                #########################################################
                # echo possible errors
                #########################################################
@@ -363,19 +379,29 @@ for module in ${modules}; do
         # first clear dependencies
         #########################################################
        find . -name ".dep*" -type f -exec rm -f {} \; >& /dev/null
+        #########################################################
+        # then make
+        #########################################################
+       if [ "${module}" == "PARAVIS" ] ; then
+           VTK_AUTOLOAD_PATH_BACKUP=${VTK_AUTOLOAD_PATH}
+           test "${VTK_AUTOLOAD_PATH}" != "" && unset VTK_AUTOLOAD_PATH
+       fi
        make >& ${LOG_DIR}/make_${module}.log
        sts=$?
+       if [ "${module}" == "PARAVIS" ] ; then
+           test "${VTK_AUTOLOAD_PATH_BACKUP}" != "" && export VTK_AUTOLOAD_PATH=${VTK_AUTOLOAD_PATH_BACKUP}
+       fi
         #########################################################
         # if make step is successful set the ${module}_ROOT_DIR
         # environment variable
         #########################################################
-        if [ $sts -eq 0 ] ; then
-           export ${module}_ROOT_DIR=${module_build}
-       fi
+        #if [ $sts -eq 0 ] ; then
+       #    export ${module}_ROOT_DIR=${module_build}
+       #fi
         #########################################################
         # print make errors
         #########################################################
-       cat ${LOG_DIR}/make_${module}.log | grep '[*][*][*]' >&2
+       cat ${LOG_DIR}/make_${module}.log | grep -Ei '[*][*][*].*error' >&2
         #########################################################
         # print compiler errors and warnings
         # Note: here awk is used to concatenate together several lines of single
@@ -384,10 +410,10 @@ for module in ${modules}; do
         #########################################################
        if [ $verbose_level -gt 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/"@@ >&2
+           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/"@@ >&2
        fi
        if [ $verbose_level -gt 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/"@@ >&2
+           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/"@@ >&2
        fi
         #########################################################
         # perform make dev_docs step if -t flag is given
@@ -411,7 +437,12 @@ for module in ${modules}; do
            #########################################################
            if [ -e $px ] && [ $is_delete -eq 1 ] ; then
                echo "... Removing $px"
-               rm -rf $px
+               rm -rf $px >& /dev/null
+               if [ "$?" != "0" ] ; then
+                   echo
+                   echo '!!! Warning !!! Cannot remove install directory ${px}. Permission denied.'
+                   echo
+               fi
            fi
            echo "... Performing make install"
            make install >& ${LOG_DIR}/make_install_${module}.log