Skip to content
Snippets Groups Projects
Select Git revision
  • e55f8bf2d85044ffb9c555adc98f5ea44d18bedc
  • master default protected
  • nightly_master
  • online_much_readconf_cleanup protected
  • online_mvd_readconf_cleanup protected
  • jul25_patches
  • cleanup_rich_v25a
  • jul24_patches
  • nov23_patches
  • DC_2404
  • nighly_master
  • DC_Jan24
  • DC_Nov23
  • DC_Oct23
  • feb23_patches
  • L1Algo-dev9
  • dec21_patches protected
  • apr21_patches protected
  • dev_2025_45
  • dev_2025_44
  • dev_2025_43
  • dev_2025_42
  • dev_2025_41
  • dev_2025_40
  • dev_2025_39
  • dev_2025_38
  • dev_2025_37
  • dev_2025_36
  • dev_2025_35
  • dev_2025_34
  • dev_2025_33
  • dev_2025_32
  • dev_2025_31
  • dev_2025_30
  • RC_jul25
  • dev_2025_29
  • dev_2025_28
  • dev_2025_27
38 results

CbmMCDataArray.cxx

Blame
  • autoinstall_framework.sh 16.21 KiB
    #!/bin/bash
    # Copyright (C) 2015 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
    # SPDX-License-Identifier: GPL-3.0-only
    # First commited by David Emschermann
    #
    ## semi-automated script installing of FairSoft, FairRoot and CbmRoot
    #
    # usage:
    # $ ./autoinstall_framework.sh
    # for installation of all three or
    # $ ./autoinstall_framework.sh 0 0 1
    # for installation of CbmRoot or
    # $ ./autoinstall_framework.sh --help
    # to see a help file with possible user flags.
    #
    # 11.06.2020 - modification for robustness and to bring up to line with standard by Eoin Clerkin
    # 31.08.2018 - re-introduce old version
    # 24.05.2018 - switch to oct17p1 as dev version
    # 31.01.2017 - make ROOT6 the default
    # 17.12.2015 - split fairsoft directory into src and install
    # 01.12.2015 - add selection of root version
    # 17.07.2015 - introduce option to compile dev settings
    # 02.06.2015 - introduce parameters for individual package selection
    # 13.03.2015 - initial version
    # by David Emschermann
    
    main()
    {
      exec &> >(tee -a .autoinstall_framework.log) # So the user can check up a complete log if he wishes.
    
      setup_env_variables
    
      number_of_cpus
    
      parse_command_line "$@"
    
      echo "FSOFTVER: $FSOFTVER"
      echo "FROOTVER: $FROOTVER"
      echo "NUMOFCPU: $NUMOFCPU"
    
      check_prerequisites
    
      install_fairsoft
    
      install_fairroot
    
      install_cbmroot
    }
    
    setup_env_variables()
    {
      # choose your root version
      export ROOTVER=6
    
      # put your desired variants here:
      export FSOFTDEV=apr22
      export FROOTDEV=v18.6.8
    
      export FSOFTPRO=apr21p2
      export FROOTPRO=v18.6.7
    
      export FSOFTOLD=jun19p3
      export FROOTOLD=v18.2.1
    
      # set default version to pro
      export FSOFTVER=$FSOFTPRO
      export FROOTVER=$FROOTPRO
    
      export CBMSRCDIR=`pwd`
    }
    
    number_of_cpus()
    {
      arch=`uname -s | tr '[A-Z]' '[a-z]'`
      # get the number of processors
      if [ "$arch" = "linux" ]; then
        NUMOFCPU=$([ -f /proc/cpuinfo ] && grep -i processor /proc/cpuinfo | wc -l || echo 1)
      elif [ "$arch" = "darwin" ];
      then
        NUMOFCPU=$(sysctl -n hw.ncpu)
      fi
    }
    
    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";
    		shift;;
    	-r|-fr|-fairroot|--fairroot)
    		echo "*** FairRoot to be installed"
    		SETUP_FAIRROOT="1";
    		shift;;
    	-use_fairsoft|--use_fairsoft)
    	        shift
    	        export SIMPATH=$1
    		echo "*** Use FairSoft from $SIMPATH"
    		SETUP_FAIRSOFT="0";
                    USE_EXTERNAL_FAIRSOFT=1
    		shift;;
    	-use_fairroot|--use_fairroot)
    	        shift
    	        export FAIRROOTPATH=$1
    		echo "*** Use FairRoot from $FAIRROOTPATH"
    		SETUP_FAIRROOT="0";
                    USE_EXTERNAL_FAIRROOT=1
    		shift;;
    	-c|-cr|-cbmroot|--cbmroot)
    		echo "*** CbmRoot to be installed"
    		SETUP_CBMROOT="1";
    		shift;;
    	-d|dev|-dev|--dev)
    		echo "*** DEV VERSION specified"
    		export FSOFTVER=$FSOFTDEV
    		export FROOTVER=$FROOTDEV
    		shift;;
    	-p|pro|-pro|--pro)
    		echo "*** PRO VERSION specified"
    		export FSOFTVER=$FSOFTPRO
    		export FROOTVER=$FROOTPRO
    		shift;;
    	-nproc)
    		shift
    		NUMOFCPU=$1
                    re='^[0-9]+$'
    		if ! [[ $NUMOFCPU =~ $re ]]; then
    		  echo "$NUMOFCPU passed as argument of -nproc is no integer"
    		  exit 1
    		fi
    		echo "*** Building with $NUMOFCPU processes in parallel"
    		shift;;
    	-o|old|-old|--old)
    		echo "*** OLD VERSION specified"
    		export FSOFTVER=$FSOFTOLD
    		export FROOTVER=$FROOTOLD
    		shift;;
    	-y|-yes|--yes)
    		echo "Will update environment to new build after installation"
    		ANSWER="YES";
    		shift;;
    	-n|-no|--no)
    		echo "In case someone wants to put in script."
    		ANSWER="NO";
    		shift;;
    	0|1)
    	        # This unusual addition is to continue to provide back compatiability
    	        # with previous versions of autoinstall_framework.
    	        # It is important to keep this in case someone has hardcoded installation
    	        # instructions somewhere and thus this should avoid breaking his program.
    		# In particular the old behaviour accepts 1, 2 or 3 numerical arguments whereby
    		# argument 1 greater or equal to 1 would install FairSoft
    		# argument 2 greater or equal to 1 would install FairRoot
    		# argument 3 greater or equal to 1 would install CbmRoot
    		# ergo
    		# ./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"
    		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 ]; 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.
    		ANSWER="NO";
    
    		break;;
    	-h|-help|--help|*)
    		echo "Autoinstall_framework will install FairSoft, FairRoot and CbmRoot packages"
    		echo "If no flags are specified, the program will install all three"
    		echo "otherwise the user may specify one or more to by calling the corresponding flags"
                    echo
    		echo "-h, --help		Shows this brief help"
    		echo
    		echo "-fs, --fairsoft		Installation of FairSoft"
    		echo "-fr, --fairroot		Installation of FairRoot"
    		echo "-cr, --cbmroot		Installation of CbmRoot"
                    echo
                    echo "-use_fairsoft <PATH>      Take FairSoft installation from <PATH>"
                    echo "--use_fairsoft <PATH>     Take FairSoft installation from <PATH>"
                    echo "-use_fairroot <PATH>      Take FairRoot installation from <PATH>"
                    echo "--use_fairroot <PATH>     Take FairRoot installation from <PATH>"
                    echo
    		echo
                    echo "-nproc <number>		Use <number> of paralle processes for compilation"
    		echo
    		echo "-d, --dev		Runs with dev version (FairSoft: $FSOFTDEV, FairRoot: $FROOTDEV)"
    		echo "-p, --pro		Runs with pro version (FairSoft: $FSOFTPRO, FairRoot: $FROOTPRO)"
    		echo "-o, --old		Runs with old version (FairSoft: $FSOFTOLD, FairRoot: $FROOTOLD)"
    		echo
    		echo "-y, --yes		Automatically uses new envirnoment configuration post installation"
    		echo "-n, --no		Answers no to automatic environment update"
    		echo ""
    		echo "Example case to install only FairRoot and CbmRoot (and not FairSoft)"
    		echo "./autoinstall_framework.sh -fr -cr"
                    echo
                    echo "Example case to install on Debian10 only CbmRoot and use FairSoft/FairRoot from external installation"
                    echo "./autoinstall_framework.sh --use_fairsoft /cvmfs/fairsoft.gsi.de/debian10/fairsoft/apr21p2 \ "
                    echo "    --use_fairroot /cvmfs/fairsoft.gsi.de/debian10/fairroot/v18.6.7_fs_apr21p2 -cr"
                    echo
                    echo "Example case to install on Debian11 only CbmRoot and use FairSoft/FairRoot from external installation"
                    echo "./autoinstall_framework.sh --use_fairsoft /cvmfs/cbm.gsi.de/debian11/fairsoft/apr21p2 \ "
                    echo "    --use_fairroot /cvmfs/cbm.gsi.de/debian11/fairroot/v18.6.7_apr21p2 -cr"
    		exit 0;;
        esac
      done
    }
    
    check_prerequisites()
    {
    
      nof_missing_packages=0
      missing_packages=""
    
      year=$(echo $FSOFTVER | cut -c4,5)
    
      # 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)
    
      for executable in "${programs[@]}"; do
        check_executable $executable
      done
    
      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/include/xercesc/dom/DOM.hpp xecesc-dev
      check_file_exist /usr/include/yaml-cpp/binary.h yaml-cpp
    
      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
    
      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 [ $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
    }
    
    check_file_exist()
    {
      file=$1
      package=$2
    
      if [ ! -f $file ] ; then
        nof_missing_packages=$((nof_missing_packages+1))
        missing_packages="$package, $missing_packages"
      fi
    }
    
    
    install_fairsoft()
    {
      if [ $SETUP_FAIRSOFT -ge 1 ]; then
        echo "Setting up FairSoft ..."
    
        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
    
        year=$(echo $FSOFTVER | cut -c4,5)
        if [ $year -lt 20 ]; then
          install_fairsoft_before_2020
        else
          install_fairsoft_since_2020
        fi
    
        cd $CBMSRCDIR
        echo "done installing FairSoft"
      fi
    }
    
    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
    
      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
    
      sed s/compiler=/compiler=gcc/ automatic2_path.conf > automatic3_gcc.conf
    
      ./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
    
      cd $CBMSRCDIR
    }
    
    
    install_fairsoft_since_2020()
    {
      FSOFTINSTALLPATH=`pwd | sed s/fairsoft_src_/fairsoft_/`
    
      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
    
      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 ..."
    
        echo "SIMPATH	before: $SIMPATH"
        if [[ -z $USE_EXTERNAL_FAIRSOFT ]]; then
          cd ..
          cd fairsoft_${FSOFTVER}_root${ROOTVER}/installation/
          export SIMPATH=`pwd`
        fi
        echo "SIMPATH	now   : $SIMPATH"
        cd $CBMSRCDIR
    
        if [[ -z $USE_EXTERNAL_FAIRROOT ]]; then
          cd ..
          cd fairroot_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER}
          export FAIRROOTPATH=`pwd`
        fi  
        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
      fi
    }
    
    #####################################################################################
    
    main "$@"