--- /dev/null
+#!/bin/bash
+#
+# Utility for building Salome Modules
+#
+# default directory containing sources. Look-up is performed first localy, then in this directory if present.
+SRC_ROOT_DIR=
+# default directory where you want to put build & install directories. alternative for -i option
+INSTALL_ROOT_DIR=
+# default building environment file. alternative to --environ= option
+ENVIRON_FILE=
+# Utilitaire de compilation Salome
+#
+
+usage()
+{
+ echo
+ echo Name : SA_build - build Salome modules
+ echo
+ echo "Description : Small utility that automate Salome components building."
+ echo " -> call build_configure in source directories"
+ echo " -> create build and install directories"
+ echo " -> call configure, make, make install from build directories"
+ echo " -> update environment file"
+ echo
+ echo Usage :
+ echo
+ echo " SA_build [modulename(s)] sourcename(s) [ options ]"
+ echo
+ echo " sourcename(s) are component's source directories and should end up by convention with _SRC"
+ echo " modulename(s) are module directories that contain source directories"
+ echo
+ echo " -> A look-up is done to find component's source directories - then building is done"
+ echo " - modulenames are searched localy, then in SRC_ROOT_DIR"
+ echo " - sourcename(s) are searched in modulename(s), or localy if no module name is specified"
+ echo " - if no sourcename is entered, search for modulename_SRC"
+ echo
+ echo "Options :"
+ echo
+ echo " --disable-debug : compilation without debug traces"
+ echo " --batch : compilation is done in batch mode - no prompting"
+ echo " --environ=path : set environment file to path (should be absolute)"
+ echo " --install=path : set install directory where module building is done (should be absolute)"
+ echo " --compile-only -c : no building - just compile by calling make && make install"
+ echo " --local -l : look for source directories localy - build and install localy"
+ echo " --sources=src1,src2,... : for specifying source directories that don't end up with _SRC"
+ echo
+ echo
+ echo "Examples :"
+ echo
+ echo " SA_build KERNEL"
+ echo " -> compilation of KERNEL/KERNEL_SRC"
+ echo " build is done in KERNEL/KERNEL_BUILD"
+ echo " install is done in KERNEL/KERNEL_INSTALL"
+ echo " environment should be set up correctly before (option --environ not used)"
+ echo
+ echo " SA_build MED_SRC --install=/export/home/SALOME"
+ echo " -> compilation of MED_SRC (no module name was specified)"
+ echo " build is done in /export/home/SALOME/MED_BUILD"
+ echo " install is done in /export/home/SALOME/MED_INSTALL"
+ echo
+ echo " SA_build --batch --disable-debug --environ=my_env_products.sh V_3_0_2 KERNEL_SRC GUI_SRC GEOM_SRC MED_SRC MESH_SRC VISU_SRC SUPERV_SRC"
+ echo " -> compilation without prompting (--batch option) of KERNEL_SRC, GUI_SRC, GEOM_SRC, MED_SRC, MESH_SRC, VISU_SRC and SUPERV_SRC"
+ echo " all sources are searched in V_3_0_2 directory "
+ echo " environment is setup using my_env_products.sh file"
+ echo " configure is done with --disable-debug option"
+ echo
+ exit 1
+}
+
+ask_confirmation()
+{
+ echo
+ echo $1
+ echo
+ read answer
+ case $answer in
+ y* | Y* | o* | O* ) ;;
+ *) exit 1
+ esac
+}
+
+check_dir()
+{
+ if [ -d $1 ]
+ then
+ rm -rf $1/*
+ echo "remove $1 content"
+ else
+ mkdir -p $1
+ echo "create $1"
+ fi
+}
+
+set_environ()
+{
+ if [ -f $1 ]
+ then
+ ENVIRON_FILE=$1
+ else
+ echo -e "\n\nError : environment file $1 NOT FOUND\n"
+ exit
+ fi
+}
+
+compile()
+{
+ clear
+ echo "----------------- Compile ---------------------"
+ make
+ if [ $? -eq 0 ]
+ then
+ # compilation succeeded : we make install
+ echo
+ echo "----------------- Install ---------------------"
+ make install
+ else
+ exit 1
+ fi
+}
+
+get_source_dir()
+{
+ COMPILE_DIR=
+ SOURCE_DIRS=
+ if [ -d ${LOCAL_DIR}/${module} ]
+ then
+ COMPILE_DIR=${LOCAL_DIR}/${module}
+ elif [ -d ${SRC_ROOT_DIR}/${module} ]
+ then
+ COMPILE_DIR=${SRC_ROOT_DIR}/${module}
+ else
+ echo Sorry : ${module} not found!
+ usage
+ fi
+
+ if [ -d ${COMPILE_DIR}/${module}_SRC ]
+ then
+ SOURCE_DIRS=${COMPILE_DIR}/${module}_SRC
+ fi
+
+ for src in $LISTE_SRC
+ do
+ if [ -d ${COMPILE_DIR}/${src} ]
+ then
+ SOURCE_DIRS="$SOURCE_DIRS ${COMPILE_DIR}/${src}"
+ fi
+ done
+
+}
+
+build_source_dir()
+{
+ isrc=0 # compteur
+ for SOURCE_DIR in ${SOURCE_DIRS}
+ do
+ (( isrc += 1 ))
+ echo -e "\n${isrc}) Compilation dans $SOURCE_DIR \n"
+ src=`basename $SOURCE_DIR`
+ SOURCE_NAME=${src%_SRC}
+ echo " -> Repertoire Source = ${SOURCE_DIR}"
+ echo " -> Component name = ${SOURCE_NAME}"
+ echo " -> Repertoire Build = ${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_BUILD"
+ echo " -> Repertoire Install = ${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_INSTALL"
+ echo
+ echo
+ echo
+ if [ $COMPILE_ONLY -eq 1 ]
+ then
+ if [ $BATCH_MODE -eq 0 ]
+ then
+ ask_confirmation "Compile ?"
+ fi
+ cd ${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_BUILD
+ compile
+ else
+
+ if [ $BATCH_MODE -eq 0 ]
+ then
+ ask_confirmation "build configure and configure ?"
+ fi
+ #
+ cd ${SOURCE_DIR}
+ echo
+ echo "----------------- Build configure ---------------------"
+ ./build_configure
+ echo
+ echo "----------------- Configure ---------------------"
+ echo
+ # crée ou vide les répertoires
+ check_dir ${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_BUILD
+ check_dir ${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_INSTALL
+ cd ${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_BUILD
+ ${SOURCE_DIR}/configure ${OPTIONS_CONFIGURE} --prefix=${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_INSTALL | tee ${TMP_FILE}
+ echo
+ echo "retour configure : $?"
+ echo
+ if [ $BATCH_MODE -eq 0 ]
+ then
+ ask_confirmation "Compile ?"
+ fi
+ export `echo ${SOURCE_NAME}`_ROOT_DIR=${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_INSTALL
+ compile
+ cd $LOCAL_DIR
+ if [ $ENVIRON_FILE ] && [ -f $ENVIRON_FILE ]
+ then
+ # Mise à jour du script d'environnement
+ if [ $BATCH_MODE -eq 1 ]
+ then
+ update_environ ${SOURCE_NAME}_ROOT_DIR ${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_INSTALL ${SOURCE_NAME}_SRC_DIR ${SOURCE_DIR}
+ else
+ echo "Voulez vous mettre mettre à jour le script d'environnement ${ENVIRON_FILE} ?"
+ echo " (ajouter la variable ${SOURCE_NAME}_ROOT_DIR - une copie de l'ancien script est faite dans un .old)"
+ echo
+ read answer
+ case $answer in
+ y* | Y* | o* | O* ) update_environ ${SOURCE_NAME}_ROOT_DIR ${INSTALL_ROOT_DIR}/${module}/${SOURCE_NAME}_INSTALL ${SOURCE_NAME}_SRC_DIR ${SOURCE_DIR} ;;
+ *) exit 1
+ esac
+ fi
+ fi
+ fi
+ done
+}
+
+
+# update environment scrip : add or replace ROOT_DIR and SRC_DIR variable for component
+update_environ()
+{
+ cp ${ENVIRON_FILE} ${ENVIRON_FILE}.old
+ grep " $1" ${ENVIRON_FILE}.old
+ if [ $? -eq 0 ]
+ then
+ # if variable is already set, we replace old setting by new one
+ cat ${ENVIRON_FILE}.old | awk -v var_root_dir=$1 -v path=$2 -v src_root_dir=$3 -v src_dir=$4 '
+ $1=="export" && $2 ~ var_root_dir {print "#"$0; $0="export "var_root_dir "=" path}
+ $1=="export" && $2 ~ src_root_dir {print "#"$0; $0="export "src_root_dir "=" src_dir}
+ { print $0}' > ${ENVIRON_FILE}
+ else
+ echo -e "##\n#------ ${SOURCE_NAME}-Src ------\nexport $3=$4" >> ${ENVIRON_FILE}
+ echo -e "##\n#------ ${SOURCE_NAME}-Bin ------\nexport $1=$2" >> ${ENVIRON_FILE}
+ fi
+}
+
+########### Programme Principal #############
+
+# parse arguments
+
+LISTE_SRC=""
+OPTIONS_CONFIGURE=""
+LISTE_MODULE=""
+BATCH_MODE=0
+COMPILE_ONLY=0
+
+if [ $# -eq 0 ]
+then
+ echo
+ echo "Pas d'arguments!"
+ usage
+fi
+
+for arg in $*
+do
+ case $arg in
+
+ --disable-debug ) OPTIONS_CONFIGURE="${OPTIONS_CONFIGURE} --disable-debug" ;;
+
+ --batch) BATCH_MODE=1 ;;
+
+ --environ=*) set_environ ${arg#--environ=} ;;
+
+ --install=*) INSTALL_ROOT_DIR=${arg#--install=} ;;
+
+ --sources=*) LISTE_SRC="${LISTE_SRC} ${arg#--sources=}" ;;
+
+ --local | -l ) SRC_ROOT_DIR=$PWD ; INSTALL_ROOT_DIR=$PWD ;;
+
+ --compile-only | -c ) COMPILE_ONLY=1 ;;
+
+ *_SRC ) LISTE_SRC="${LISTE_SRC} ${arg}" ;;
+
+ *) LISTE_MODULE="${LISTE_MODULE} ${arg}" ;;
+
+ esac
+done
+
+LISTE_SRC=`echo ${LISTE_SRC} | sed "s/,/ /g"` # replaces ',' by blanks
+
+if [ ! $INSTALL_ROOT_DIR ]
+then
+ echo Local installation
+ INSTALL_ROOT_DIR=$PWD
+fi
+
+clear
+echo
+echo " ------------------------------------"
+echo " | Utilitaire de Compilation Salome |"
+echo " ------------------------------------"
+echo
+echo
+echo "Liste des modules à parcourir : $LISTE_MODULE"
+echo "Liste repertoire à compiler : $LISTE_SRC"
+echo "Options configure : $OPTIONS_CONFIGURE"
+echo "Environment File : $ENVIRON_FILE"
+echo
+echo
+echo
+echo
+echo
+
+if [ $ENVIRON_FILE ] && [ -f $ENVIRON_FILE ]
+then
+ # force option for compilation - then source environment
+ cat ${ENVIRON_FILE} | sed "s/ENV_FOR_LAUNCH=1/ENV_FOR_LAUNCH=0/g" > ${ENVIRON_FILE}.tmp
+ source ${ENVIRON_FILE}.tmp
+ rm ${ENVIRON_FILE}.tmp
+fi
+
+LOCAL_DIR=`pwd`
+if [ "$LISTE_MODULE" == "" ]
+then
+ # no module specified -> lookup for sources localy
+ echo lookup for sources localy
+ SOURCE_DIRS=
+ for src in $LISTE_SRC
+ do
+ if [ -d ${LOCAL_DIR}/${src} ]
+ then
+ SOURCE_DIRS="$SOURCE_DIRS ${LOCAL_DIR}/${src}"
+ elif [ -d ${SRC_ROOT_DIR}/${src} ]
+ then
+ SOURCE_DIRS="$SOURCE_DIRS ${LOCAL_DIR}/${src}"
+ fi
+ done
+ build_source_dir
+else
+ for module in $LISTE_MODULE
+ do
+ echo "----------------- Compilation dans $module ----------------"
+ echo
+ echo
+ get_source_dir
+ build_source_dir
+ echo
+ done
+fi
+