diff --git a/autoinstall_framework.sh b/autoinstall_framework.sh index 858ba06f10781b6ec74be5391cebcd4400a7f904..28187e3735aa5b0e372742fdb12f897e428ef246 100755 --- a/autoinstall_framework.sh +++ b/autoinstall_framework.sh @@ -24,32 +24,57 @@ # 13.03.2015 - initial version # by David Emschermann -exec &> >(tee -a .autoinstall_framework.log) # So the user can check up a complete log if he wishes. +main() +{ + exec &> >(tee -a .autoinstall_framework.log) # So the user can check up a complete log if he wishes. + setup_env_variables -# choose your root version -export ROOTVER=6 + parse_command_line "$@" -# put your desired variants here: -export FSOFTDEV=jun19p3 -export FROOTDEV=v18.4.0 + echo FSOFTVER: $FSOFTVER + echo FROOTVER: $FROOTVER -export FSOFTPRO=jun19p3 -export FROOTPRO=v18.2.1 + check_prerequisites -export FSOFTOLD=jun19p3 -export FROOTOLD=v18.2.0 + install_fairsoft -# set default version to pro -export FSOFTVER=$FSOFTPRO -export FROOTVER=$FROOTPRO + install_fairroot + install_cbmroot +} -SETUP_FAIRSOFT=0 && SETUP_FAIRROOT=0 && SETUP_CBMROOT=0; -[ $# -eq "0" ] && SETUP_FAIRSOFT=1 && SETUP_FAIRROOT=1 && SETUP_CBMROOT=1 : echo "Some Error has occurred" # Default behaviour with no flags, all three should be installed. +setup_env_variables() +{ + # choose your root version + export ROOTVER=6 -while test $# -gt 0; do - case "$1" in + # put your desired variants here: + export FSOFTDEV=apr21p2 + export FROOTDEV=v18.6.7 + + export FSOFTPRO=jun19p3 + export FROOTPRO=v18.2.1 + + export FSOFTOLD=jun19p3 + export FROOTOLD=v18.2.0 + + # set default version to pro + export FSOFTVER=$FSOFTPRO + export FROOTVER=$FROOTPRO + + # My experience tells me that the default could be 2, even if there is only 1 processor, as 1 processing and 1 queued job normally is optimal Will leave it at 1 though. + export NUMOFCPU=`[ -f /proc/cpuinfo ] && grep -i processor /proc/cpuinfo | wc -l || echo 1` + export CBMSRCDIR=`pwd` +} + +parse_command_line() +{ + SETUP_FAIRSOFT=0 && SETUP_FAIRROOT=0 && SETUP_CBMROOT=0; + [ $# -eq "0" ] && SETUP_FAIRSOFT=1 && SETUP_FAIRROOT=1 && SETUP_CBMROOT=1 : echo "Some Error has occurred" # Default behaviour with no flags, all three should be installed. + + while test $# -gt 0; do + case "$1" in -s|-fs|-fairsoft|--fairsoft) echo "*** FairSoft to be installed" SETUP_FAIRSOFT="1"; @@ -98,28 +123,23 @@ while test $# -gt 0; do # ./autobuild_framework dev 1 0 0 # would install FairSoft but not FairRoot nor CbmRoot. - if [ $1 -gt 0 ]; - then - SETUP_FAIRSOFT="1"; - echo "FairSoft flaged for install" + if [ $1 -gt 0 ]; then + SETUP_FAIRSOFT="1"; + echo "FairSoft flaged for install" fi - if [ ! -z $2 ]; # This combersome and longform if statement exist due to known issues regarding ampersands within bash cases. - then - if [ $2 -gt 0 ]; - then - SETUP_FAIRROOT="1"; - echo "FairRoot flaged for install" - fi + if [ ! -z $2 ]; then # This combersome and longform if statement exist due to known issues regarding ampersands within bash cases. + if [ $2 -gt 0 ]; then + SETUP_FAIRROOT="1"; + echo "FairRoot flaged for install" + fi fi - if [ ! -z $3 ]; # This combersome and longform if statement exist due to known issues regarding ampersands within bash cases. - then - if [ $3 -gt 0 ]; - then - SETUP_CBMROOT="1"; - echo "CbmRoot flaged for install" - fi + if [ ! -z $3 ]; then # This combersome and longform if statement exist due to known issues regarding ampersands within bash cases. + if [ $3 -gt 0 ]; then + SETUP_CBMROOT="1"; + echo "CbmRoot flaged for install" + fi fi # To prevent the pausing a script with maybe autoinstall_framework called the old way. @@ -143,165 +163,322 @@ while test $# -gt 0; do echo "Example case to install only FairRoot and CbmRoot (and not FairSoft)" echo "./autoinstall_framework.sh -fr -cr" exit 0;; - esac -done + esac + done +} -# My experience tells me that the default could be 2, even if there is only 1 processor, as 1 processing and 1 queued job normally is optimal Will leave it at 1 though. -export NUMOFCPU=`[ -f /proc/cpuinfo ] && grep -i processor /proc/cpuinfo | wc -l || echo 1` -export CBMSRCDIR=`pwd` +check_prerequisites() +{ -#----------------------------------------------------------------------------------------------------- + nof_missing_packages=0 + missing_packages="" -echo FSOFTVER: $FSOFTVER -echo FROOTVER: $FROOTVER + year=$(echo $FSOFTVER | cut -c4,5) -#----------------------------------------------------------------------------------------------------- -# -## FairSoft -# + # Array with binaries which are needed for the compilation + programs=(cmake curl gcc g++ gfortran make patch sed bzip2 unzip gzip tar svn git flex lsb_release wget automake autoconf libtoolize) -if [ $SETUP_FAIRSOFT -ge 1 ]; then - echo "Setting up FairSoft ..." + for executable in "${programs[@]}"; do + check_executable $executable + done - # check if sqlite3 is available - if [ -f /usr/include/sqlite3.h ] ; then - echo - echo "Sqlite3 is available" - echo - else - echo - echo "Sqlite3 is not available" - echo - echo "On Debian, please install as follows:" - echo "sudo apt install libsqlite3-dev" - echo - echo "On OpenSuSE, please install as follows:" - echo "zypper install libsqlite3-0 sqlite3-devel" - echo - echo "afterwards, restart autoinstall_framework.sh" - echo - sleep 5 - exit + check_file_exist /usr/include/sqlite3.h sqlite3-dev + check_file_exist /usr/include/X11/Xlib.h x11-dev + check_file_exist /usr/include/X11/Xft/Xft.h xft-dev + check_file_exist /usr/include/X11/extensions/Xext.h xext-dev + check_file_exist /usr/include/X11/xpm.h xpm-dev + check_file_exist /usr/include/GL/glu.h mesa-dev + check_file_exist /usr/include/curses.h ncurses-dev + check_file_exist /usr/include/bzlib.h bz2-dev + check_file_exist /usr/include/openssl/ssl.h ssl-dev + check_file_exist /usr/include/gsl/gsl_types.h gsl-dev + check_file_exist /usr/include/tbb/tbb.h tbb-dev + + check_file_exist /usr/bin/curl-config curl-dev + check_file_exist /usr/bin/xml2-config xml2-dev + + + if [ $year -lt 20 ]; then + check_file_exist /usr/bin/xmkmf xutils-dev + check_file_exist /usr/bin/krb5-config krb5-dev fi - cd .. - git clone https://github.com/FairRootGroup/FairSoft fairsoft_src_${FSOFTVER}_root${ROOTVER} - cd fairsoft_src_${FSOFTVER}_root${ROOTVER} - git tag -l - git checkout -b $FSOFTVER $FSOFTVER + tmp=$(which python2-config) + if [ $? -ne 0 ]; then + tmp=$(which python3-config) + if [ $? -ne 0 ]; then + nof_missing_packages=$((nof_missing_packages+1)) + missing_packages="python-dev, $missing_packages" + fi + fi - if [ $ROOTVER -eq 6 ]; then - sed s/build_root6=no/build_root6=yes/ automatic.conf > automatic1_root.conf - else - cp automatic.conf automatic1_root.conf + if [ $nof_missing_packages -ne 0 ]; then + echo "" + echo "The following packages are missing and need to be installed" + echo $missing_packages + echo "" + echo "For further information which packages need to be installed" + echo "check the documentation on the FairSoft GitHub page at" + if [ $year -lt 20 ]; then + echo "" + echo "https://github.com/FairRootGroup/FairSoft/tree/$FSOFTVER" + echo "" + echo "For Linux check dependencies.md" + echo "For macosx check dependencies_macosx.md" + else + echo "https://github.com/FairRootGroup/FairSoft/blob/$FSOFTVER/legacy/dependencies.md" + fi + echo "" + echo "and follow the given instructions." + echo + # check if sqlite3 is available + missing=0 + if [[ "$missing_packages" =~ .*"sqlite3".* ]]; then + missing=$((missing+1)) + fi + if [[ "$missing_packages" =~ .*"gsl".* ]]; then + missing=$((missing+1)) + fi + if [[ "$missing_packages" =~ .*"tbb".* ]]; then + missing=$((missing+1)) + fi + if [[ $missing -ne 0 ]];then + if [[ "$missing_packages" =~ .*"sqlite3".* ]]; then + echo + echo "Sqlite3 is not available which may not be part of the above installation instructions" + echo + echo "On Debian or Ubuntu, please install as follows:" + echo "sudo apt install libsqlite3-dev" + echo + echo "On OpenSuSE, please install as follows:" + echo "zypper install libsqlite3-0 sqlite3-devel" + echo + echo "On Fedora, please install as follows:" + echo "dnf install sqlite-devel" + echo + echo "afterwards, restart autoinstall_framework.sh" + echo + fi + if [[ "$missing_packages" =~ .*"tbb".* ]]; then + echo + echo "The tbb development package is not available which may not be part of the above installation instructions" + echo + echo "On Debian or Ubuntu, please install as follows:" + echo "sudo apt install libtbb-dev" + echo + echo "On OpenSuSE, please install as follows:" + echo "zypper install tbb-devel" + echo + echo "On Fedora, please install as follows:" + echo "dnf install tbb-devel" + echo + echo "afterwards, restart autoinstall_framework.sh" + echo + fi + if [[ "$missing_packages" =~ .*"gsl".* ]]; then + echo + echo "The gsl development package is not available which may not be part of the above installation instructions" + echo + echo "On Debian or Ubuntu, please install as follows:" + echo "sudo apt install libgsl-dev" + echo + echo "On OpenSuSE, please install as follows:" + echo "zypper install gsl-devel" + echo + echo "On Fedora, please install as follows:" + echo "dnf install gsl-devel" + echo + echo "afterwards, restart autoinstall_framework.sh" + echo + fi + fi + exit fi + echo + echo "All needed external software is installed" + echo +} + +check_executable() +{ + # check if executable is available + # pass result into a temporary variable to have a quite mode + tmp=$(which $1) + if [ $? -ne 0 ]; then + nof_missing_packages=$((nof_missing_packages+1)) + missing_packages="$1, $missing_packages" + fi +} - FSOFTINSTALLPATH=`pwd | sed s/fairsoft_src_/fairsoft_/` - sed /SIMPATH_INSTALL/d automatic1_root.conf > automatic2_path.conf - echo " SIMPATH_INSTALL=$FSOFTINSTALLPATH/installation" >> automatic2_path.conf +check_file_exist() +{ + file=$1 + package=$2 - sed s/compiler=/compiler=gcc/ automatic2_path.conf > automatic3_gcc.conf + if [ ! -f $file ] ; then + nof_missing_packages=$((nof_missing_packages+1)) + missing_packages="$package, $missing_packages" + fi +} - ./configure.sh automatic3_gcc.conf - cd $CBMSRCDIR - echo "done installing FairSoft" -fi +install_fairsoft() +{ + if [ $SETUP_FAIRSOFT -ge 1 ]; then + echo "Setting up FairSoft ..." -#----------------------------------------------------------------------------------------------------- -# -## FairRoot -# + cd .. + git clone https://github.com/FairRootGroup/FairSoft fairsoft_src_${FSOFTVER}_root${ROOTVER} + cd fairsoft_src_${FSOFTVER}_root${ROOTVER} + git tag -l + git checkout -b tag_$FSOFTVER $FSOFTVER -if [ $SETUP_FAIRROOT -ge 1 ]; then - echo "Setting up FairRoot ..." + year=$(echo $FSOFTVER | cut -c4,5) + if [ $year -lt 20 ]; then + install_fairsoft_before_2020 + else + install_fairsoft_since_2020 + fi - # set SIMPATH - cd .. - echo "SIMPATH before: $SIMPATH" - cd fairsoft_${FSOFTVER}_root${ROOTVER}/installation/ - export SIMPATH=`pwd` - echo "SIMPATH now : $SIMPATH" - cd $CBMSRCDIR + cd $CBMSRCDIR + echo "done installing FairSoft" + fi +} - echo PATH=$SIMPATH/bin:$PATH - export PATH=$SIMPATH/bin:$PATH - - cd .. - git clone https://github.com/FairRootGroup/FairRoot.git fairroot_src_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} - cd fairroot_src_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} - git tag -l - git checkout -b $FROOTVER $FROOTVER - mkdir build - cd build - cmake \ - -DCMAKE_CXX_COMPILER=$($SIMPATH/bin/fairsoft-config --cxx) \ - -DCMAKE_C_COMPILER=$($SIMPATH/bin/fairsoft-config --cc) \ - -DCMAKE_INSTALL_PREFIX=../../fairroot_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} \ - .. - nice make install -j$NUMOFCPU +install_fairsoft_before_2020() +{ + if [ $ROOTVER -eq 6 ]; then + sed s/build_root6=no/build_root6=yes/ automatic.conf > automatic1_root.conf + else + cp automatic.conf automatic1_root.conf + fi - cd $CBMSRCDIR - echo "done installing FairRoot" -fi + FSOFTINSTALLPATH=`pwd | sed s/fairsoft_src_/fairsoft_/` + sed /SIMPATH_INSTALL/d automatic1_root.conf > automatic2_path.conf + echo " SIMPATH_INSTALL=$FSOFTINSTALLPATH/installation" >> automatic2_path.conf -#----------------------------------------------------------------------------------------------------- -# -## CbmRoot -# + sed s/compiler=/compiler=gcc/ automatic2_path.conf > automatic3_gcc.conf -if [ ${SETUP_CBMROOT} -eq "1" ]; -then - echo "Setting up CbmRoot ..." + ./configure.sh automatic3_gcc.conf + result=$? + if [ $result -ne 0 ]; then + echo + echo "Something went wrong with the installation." + echo "Please check the output above." + exit + fi - # set SIMPATH - cd .. - echo "SIMPATH before: $SIMPATH" - cd fairsoft_${FSOFTVER}_root${ROOTVER}/installation/ - export SIMPATH=`pwd` - echo "SIMPATH now : $SIMPATH" cd $CBMSRCDIR +} - # set FAIRROOTPATH - cd .. - cd fairroot_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} - export FAIRROOTPATH=`pwd` - echo "FAIRROOTPATH: $FAIRROOTPATH" - cd $CBMSRCDIR - echo PATH=$SIMPATH/bin:$PATH - export PATH=$SIMPATH/bin:$PATH +install_fairsoft_since_2020() +{ + FSOFTINSTALLPATH=`pwd | sed s/fairsoft_src_/fairsoft_/` - cd .. + cmake -S $PWD -B $PWD/build -C $PWD/FairSoftConfig.cmake -DCMAKE_INSTALL_PREFIX=$FSOFTINSTALLPATH/installation + if [ $? -ne 0 ]; then + echo "Something went wrong with the FairSoft configuration" + exit + fi - cd $CBMSRCDIR - mkdir build - cd build - cmake \ - -DCMAKE_CXX_COMPILER=$($SIMPATH/bin/fairsoft-config --cxx) \ - -DCMAKE_C_COMPILER=$($SIMPATH/bin/fairsoft-config --cc) \ - .. - nice make -j$NUMOFCPU - cd .. - -echo "done installing CbmRoot" - -[ -z $ANSWER ] && ( -cat << EOT + cmake --build $PWD/build -j$NUMOFCPU + if [ $? -ne 0 ]; then + echo "Something went wrong with the FairSoft build" + exit + fi +} + +install_fairroot() +{ + if [ $SETUP_FAIRROOT -ge 1 ]; then + echo "Setting up FairRoot ..." + cd .. + echo "SIMPATH before: $SIMPATH" + cd fairsoft_${FSOFTVER}_root${ROOTVER}/installation/ + export SIMPATH=`pwd` + echo "SIMPATH now : $SIMPATH" + cd $CBMSRCDIR + + echo PATH=$SIMPATH/bin:$PATH + export PATH=$SIMPATH/bin:$PATH + + cd .. + git clone https://github.com/FairRootGroup/FairRoot.git fairroot_src_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} + cd fairroot_src_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} + git tag -l + git checkout -b tag_$FROOTVER $FROOTVER + mkdir -p build + cd build + cmake \ + -DCMAKE_CXX_COMPILER=$($SIMPATH/bin/fairsoft-config --cxx) \ + -DCMAKE_C_COMPILER=$($SIMPATH/bin/fairsoft-config --cc) \ + -DCMAKE_INSTALL_PREFIX=../../fairroot_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} \ + .. + nice make install -j$NUMOFCPU + + cd $CBMSRCDIR + echo "done installing FairRoot" + fi +} + +install_cbmroot() +{ + if [ ${SETUP_CBMROOT} -eq "1" ]; then + echo "Setting up CbmRoot ..." + + cd .. + echo "SIMPATH before: $SIMPATH" + cd fairsoft_${FSOFTVER}_root${ROOTVER}/installation/ + export SIMPATH=`pwd` + echo "SIMPATH now : $SIMPATH" + cd $CBMSRCDIR + + cd .. + cd fairroot_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} + export FAIRROOTPATH=`pwd` + echo "FAIRROOTPATH: $FAIRROOTPATH" + cd $CBMSRCDIR + + echo PATH=$SIMPATH/bin:$PATH + export PATH=$SIMPATH/bin:$PATH + + cd .. + + cd $CBMSRCDIR + mkdir -p build + cd build + cmake \ + -DCMAKE_CXX_COMPILER=$($SIMPATH/bin/fairsoft-config --cxx) \ + -DCMAKE_C_COMPILER=$($SIMPATH/bin/fairsoft-config --cc) \ + .. + + nice make -j$NUMOFCPU + if [ $? -ne 0 ]; then + echo "Something went wrong with the CbmRoot installation" + exit + fi + + cd .. + + echo "done installing CbmRoot" + + [ -z $ANSWER ] && ( + cat << EOT Since the system is now installed. Shall I switch to the new environment? source build/config.sh Reply Yes or Y for confirmation ???? EOT -) && read ANSWER - -if (echo "$ANSWER" | sed -n '/^\(Y\|y\)/!{q10}') -then - echo "A yes detected." - source build/config.sh; - echo "Environmental variables and paths updated" -fi + ) && read ANSWER -fi + if (echo "$ANSWER" | sed -n '/^\(Y\|y\)/!{q10}'); then + echo "A yes detected." + source build/config.sh; + echo "Environmental variables and paths updated" + fi + fi +} ##################################################################################### +main "$@"