#!/bin/bash option=$1 case "$option" in "-h" | "--help") cat <<\_ACEOF ############################################################### ############## configures and compiles CLASS V4.1 ############# ############################################################### Usage: install.sh [VAR=VALUE] [OPTION] Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit Optional Features: --disable-OMP do not compile with OpenMP support for evolution [default: enable for gcc version >= 4.1] --InstallLib-path=path Install location of CLASS's libraries [default= $PWD/lib] --InstallGui-path=path Install location of the GUI binary [default= $PWD/gui/bin] Some influential environment variables: CXX C++ compiler command [default=g++] CXXFLAGS C++ compiler flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPPFLAGS C++ preprocessor flags, e.g. -D<special flag> Report bugs to <leniau@subatech.in2p3.fr>. (special thanks to PTO) _ACEOF exit ;; esac ####### set default IsGCCSupportOMP="no" IsOMPEnable="yes" OMPFLAGS= ROOTCFLAGS= ROOTGLIBS= ROOTLIBS= LIBDIR=${PWD}/lib Gui_bin_PATH=${PWD}/gui/bin CXX="g++" CXXFLAGS="" CPPFLAGS="" ####### evaluate options for option do case $option in *=?*) ac_optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # echo $ac_optarg case $option in --InstallLib-path=*) LIBDIR="$ac_optarg" ;; --InstallGui-path=*) Gui_bin_PATH="$ac_optarg" ;; --disable-OMP) IsOMPEnable="disable" ;; *) echo "Unrecognized option $option" exit ;; esac done ####### ROOT Support if [ -f $ROOTSYS/bin/root-config ] then echo "Checking for ROOT cern lib... yes" ROOTCFLAGS='$(shell ${ROOTSYS}/bin/root-config --cflags)' ROOTGLIBS='$(shell ${ROOTSYS}/bin/root-config --glibs)' ROOTLIBS='$(shell ${ROOTSYS}/bin/root-config --libs)' if [ "$ROOTSYS/bin/root-config --features-tmva" = "no" ] then echo "TMVA is not activated : consider rebuild ROOT activating this feature" exit 0 fi else echo "Checking for ROOT cern lib... no" echo "********************* ERROR *********************" echo "** CLASS need ROOT (cern) to work" echo "** Either set the ROOTSYS env variable or intall" echo "** the ROOT library FROM SOURCES with the same C++" echo "** compiler you will use for comipling CLASS" echo "***************************************************" exit 0 fi ####### OMP support ### write a testconf prog echo "#include <omp.h>" > testconf.cxx echo "int main(){ return 0;}" >> testconf.cxx if [ "$IsOMPEnable" = "yes" ] then ${CXX} -o testconf -fopenmp testconf.cxx -lgomp > script.errors 2>&1 ok=`cat script.errors|wc -l` if [ $ok = 0 ] then IsGCCSupportOMP="yes" else IsOMPEnable="no" IsGCCSupportOMP="no" fi rm -f script.errors fi if [ "$IsOMPEnable" = "yes" ] then echo "Checking for omp.h... yes" echo " You can disable the use of this library with \"--disable-OMP\" option" OMPFLAGS="-fopenmp -DOpenMP" OMPLIB=-lgomp else if [ "$IsOMPEnable" = "no" ] then echo "Checking for omp.h... no" echo " OpenMP support not found." echo " Either gcc is to old either install libgomp.so" else if [ "$IsOMPEnable" = "disable" ] then echo "Checking for omp.h... disable" fi fi fi rm -f script.errors testconf testconf.cxx ####################################################### ### Preprocessor flags & Makefile variables ####################################################### mkdir -p config MAKEFILE_INC="config/Makefile.config" rm config/Makefile.config echo "#####################">> $MAKEFILE_INC echo "###### OPEN MP ######">> $MAKEFILE_INC echo "#####################">> $MAKEFILE_INC echo "OMPFLAGS=$OMPFLAGS" >> $MAKEFILE_INC echo "OMPLIB=$OMPLIB" >> $MAKEFILE_INC echo >> $MAKEFILE_INC echo "#####################">> $MAKEFILE_INC echo "####### ROOT ########">> $MAKEFILE_INC echo "#####################">> $MAKEFILE_INC echo "ROOTCFLAGS:=$ROOTCFLAGS" >> $MAKEFILE_INC echo "ROOTGLIBS:=$ROOTGLIBS" >> $MAKEFILE_INC echo "ROOTLIBS:=$ROOTLIBS" >> $MAKEFILE_INC echo >> $MAKEFILE_INC echo "#####################">> $MAKEFILE_INC echo "##### COMPILER ######">> $MAKEFILE_INC echo "#####################">> $MAKEFILE_INC if [ "$CXX" = "" ] then echo "CXX= g++" >> $MAKEFILE_INC else echo "CXX=$CXX" >> $MAKEFILE_INC fi if [ "$CXXFLAGS" = "" ] then echo "CXXFLAGS=-O2 -g -fPIC -Wall -Wno-unused">> $MAKEFILE_INC else echo "CXXFLAGS=$CXXFLAGS" >> $MAKEFILE_INC fi if [ "$CPPFLAGS" = "" ] then echo "CPPFLAGS= \$(OMPFLAGS) " >> $MAKEFILE_INC else echo "CPPFLAGS=$CPPFLAGS" >> $MAKEFILE_INC fi echo "####Installation folder of librairies##" >>$MAKEFILE_INC echo "LIBDIR=$LIBDIR" >> $MAKEFILE_INC echo "Building Librairies Folder @ $LIBDIR" mkdir -p $LIBDIR echo "####Installation folder of Gui##" >>$MAKEFILE_INC echo "Gui_bin_PATH=$Gui_bin_PATH" >> $MAKEFILE_INC echo "Building Gui Folder @ $Gui_bin_PATH" mkdir -p $Gui_bin_PATH ####################################################### ### Include flags ####################################################### INCLUDE_INC="config/config.hxx" if [ "$IsOMPEnable" = "yes" ] then echo "#include <omp.h>" > $INCLUDE_INC else echo "#define omp_get_thread_num() 0" > $INCLUDE_INC fi ####################################################### ### compile libraries ####################################################### echo "####################################################" echo "######### Compilation of CLASS libraries ###########" echo "####################################################" cd source/src ; make clean ; make -j 4 ; make install ; cd ../.. echo "####################################################" echo "########## Compilation Done #######################" echo "####################################################" echo "MURE libraries installed in" echo "----> $LIBDIR" echo "####################################################" echo "######### Compilation of CLASSGUI binary ###########" echo "####################################################" cd gui ; make clean ; make -j 4 ; cd ../ echo "####################################################" echo "########## Compilation Done #######################" echo "####################################################" echo ####################################################### ### set the pathes of DECAY data base ####################################################### echo echo echo "####################################################" echo "########## SET DECAY DATA BASES PATHES #############" echo "####################################################" cd DATA_BASES/DECAY/ALL/ sed -e "s%PATHTOBASE%`pwd`%" .Decay.tmp > Decay.idx echo "-> Done" cd - ####################################################### ### set the environement variables ####################################################### echo echo echo "####################################################" echo "########## ENVIRONEMENT VARIABLES ##################" echo "####################################################" MYDefaultSHELL=$(env | grep SHELL | awk -F "=" '{ print $2 }') SHELLPreference=".$(echo "$MYDefaultSHELL" | awk -F "/bin/" '{print $2}')rc" echo "-> Your default shell is : $MYDefaultSHELL" echo "-> Your $SHELLPreference will be edited if CLASS_PATH CLASS_include" echo " and CLASS_lib aren't defined yet " echo echo "CHECKING LOADED ENVIRONEMENT VARIABLES " echo CLASS_PATH_To_Set="" CLASS_include_To_Set="" CLASS_lib_To_Set="" SetEnvSucceed=false if [ -z "$CLASS_PATH" ]; then echo "Not found in your loaded $SHELLPreference." echo "Setting variables ..." echo "PRESS ENTER IF DEFAULT IS CORRECT" read -p "====>ENTER THE PATH TO THE CLASS root folder (defalut ${PWD}) " CLASS_PATH_To_Set [ -z "${CLASS_PATH_To_Set}" ] && CLASS_PATH_To_Set="${PWD}" echo "Path of the CLASS include folder is $CLASS_PATH_To_Set" echo read -p "====>ENTER THE PATH TO THE CLASS INCLUDE (default: $CLASS_PATH_To_Set/source/include/): " CLASS_include_To_Set [ -z "${CLASS_include_To_Set}" ] && CLASS_include_To_Set="${CLASS_PATH_To_Set}/source/include/" echo "Path of the CLASS include folder is $CLASS_include_To_Set" echo read -p "====>ENTER THE PATH WHERE CLASS LIB ARE INSTALLED (default: $LIBDIR): " CLASS_lib_To_Set [ -z "${CLASS_lib_To_Set}" ] && CLASS_lib_To_Set="$LIBDIR" echo "Path of the CLASS lib folder is $CLASS_lib_To_Set" echo read -p "====>ENTER THE PATH WHERE CLASSGui is INSTALLED (default: $Gui_bin_PATH): " CLASS_Gui_path_to_set [ -z "${CLASS_Gui_path_to_set}" ] && CLASS_Gui_path_to_set="$Gui_bin_PATH" echo "Path of the CLASS lib folder is $CLASS_Gui_path_to_set" echo EXPORT= EQUAL= if [ "$MYDefaultSHELL" = "/bin/tcsh" ] || [ "$MYDefaultSHELL" = "/bin/csh" ] ; then EXPORT="setenv " EQUAL=" " else EXPORT="export " EQUAL="=" fi if [ -f $HOME/$SHELLPreference ] ; then SetEnvSucceed=true echo "" >>$HOME/$SHELLPreference echo "##################" >> $HOME/$SHELLPreference echo "####CLASSV4.1#####" >> $HOME/$SHELLPreference echo "##################" >> $HOME/$SHELLPreference echo "$EXPORT CLASS_PATH$EQUAL$CLASS_PATH_To_Set" >> $HOME/$SHELLPreference echo "$EXPORT CLASS_include$EQUAL$CLASS_include_To_Set" >> $HOME/$SHELLPreference echo "$EXPORT CLASS_lib$EQUAL$CLASS_lib_To_Set" >> $HOME/$SHELLPreference echo "#### CLASS Gui ####" >> $HOME/$SHELLPreference echo "$EXPORT PATH$EQUAL\${PATH}:$CLASS_Gui_path_to_set" >> $HOME/$SHELLPreference echo "Environnment variables added in $HOME/$SHELLPreference" else echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "!!!!!! WARNING $HOME/$SHELLPreference NOT FOUND !!!!!!!!!!" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" fi else SetEnvSucceed=true echo "A CLASS_PATH is already defined in your $SHELLPreference: $CLASS_PATH" if [ -z "$CLASS_lib" ]; then echo "Path to CLASS libraries is not set " echo "delete the CLASS_PATH set in your $SHELLPreference, source $SHELLPreference, and rerun this script" SetEnvSucceed=false else echo "CLASS_lib is: $CLASS_lib" fi if [ -z "$CLASS_include" ]; then echo "Path to CLASS includes is not set " echo "delete the CLASS_PATH set in your $SHELLPreference, source $SHELLPreference, and rerun this script" SetEnvSucceed=false else echo "CLASS_include is : $CLASS_include" fi fi if [ "$SetEnvSucceed" = true ] ; then echo "LOADING $HOME/$SHELLPreference ... done" echo echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " Congratulations you are now able to compile your first " echo " CLASS .cxx input. " echo " Please read $CLASS_PATH_To_Set/documentation/Manual/USEGUIDE.pdf" echo " (Check if echo \$CLASS_PATH gives you the correct path) " echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" $MYDefaultSHELL #LOAD THE DEFAULT SHELL WITH THE NEW ENV VAR else echo " I CAN'T MANAGE TO SET THE CLASS ENVIRONEMENT VARIABLE " echo " ADD THE FOLLOWING IN YOUR SHELL PREFERENCE FILE (RC FILE) :" echo echo "$EXPORT CLASS_PATH$EQUAL$CLASS_PATH_To_Set " echo "$EXPORT CLASS_include$EQUAL$CLASS_include_To_Set" echo "$EXPORT CLASS_lib$EQUAL$CLASS_lib_To_Set " echo "$EXPORT PATH$EQUAL\${PATH}:$CLASS_Gui_path_to_set" echo fi