#!/bin/bash # #Script for getting the Latest & Greatest of VP1 on top of a given ATLAS release. #Author: Thomas Kittelmann, June 2006 (first version). # #This version of the script requires that you have access to the Qt4.3 #external (and the SoQt external compiled against Qt4.3). These are #not present in the 13.0.10 kit, unless you have copied them over by #hand. Thus it needs 13.0.20 or later. # # 01-Oct-2009. Vakho. # Added Qat packages, in order to have the patch working for older releases. # if [ "x$VP1PATCH_SKIPCHECKOUT" == "x" ]; then VP1PATCH_SKIPCHECKOUT=0 fi if [ "x$VP1PATCH_STOPAFTERCHECKOUT" == "x" ]; then VP1PATCH_STOPAFTERCHECKOUT=0 fi if [ "x$VP1PATCH_SLEEPBETWEENCVSCHECKOUTS" == "x" ]; then #per default we sleep three seconds between checkouts. VP1PATCH_SLEEPBETWEENCVSCHECKOUTS=3 fi if [ "x$VP1PATCH_FASTRECOMPILE" == "x" ]; then VP1PATCH_FASTRECOMPILE=0 fi if [ "x$VP1PATCH_FASTRECOMPILE" == "x1" ]; then VP1PATCH_SKIPCHECKOUT=1 fi if [ "x$VP1PATCH_IGNOREVP1ATLREL" == "x" ]; then VP1PATCH_IGNOREVP1ATLREL=0 fi #Figure out VP1ATLREL define: if [ "x$AtlasVersion" == "x" ]; then VP1ATLREL="999999" else MAJOR=`echo $AtlasVersion|tr '.' ' '|awk '{print $1}'` || MAJOR="99" MINOR=`echo $AtlasVersion|tr '.' ' '|awk '{print $2}'` || MINOR="99" PATCH=`echo $AtlasVersion|tr '.' ' '|awk '{print $3}'` || PATCH="99" #must be numeric: echo "$MAJOR" | grep -q -v "[^0-9]" || MAJOR="99" echo "$MINOR" | grep -q -v "[^0-9]" || MINOR="99" echo "$PATCH" | grep -q -v "[^0-9]" || PATCH="99" if [ "x$MAJOR" == "x" -o ${#MAJOR} -gt 2 ]; then MAJOR="99" fi if [ "x$MINOR" == "x" -o ${#MINOR} -gt 2 ]; then MINOR="99" elif [ ${#MINOR} -eq 1 ]; then MINOR="0$MINOR" fi if [ "x$PATCH" == "x" -o ${#PATCH} -gt 2 ]; then PATCH="99" elif [ ${#PATCH} -eq 1 ]; then PATCH="0$PATCH" fi VP1ATLREL="${MAJOR}${MINOR}${PATCH}" fi PACKAGES="" PACKAGES="${PACKAGES} "External/AtlasQt4 PACKAGES="${PACKAGES} "graphics/VP1/VP1Qt PACKAGES="${PACKAGES} "graphics/VP1/VP1Qwt PACKAGES="${PACKAGES} "External/AtlasCoinInventor PACKAGES="${PACKAGES} "External/AtlasSoQt PACKAGES="${PACKAGES} "graphics/VP1/VP1HEPVis PACKAGES="${PACKAGES} "graphics/VP1/VP1Base PACKAGES="${PACKAGES} "graphics/VP1/VP1Gui PACKAGES="${PACKAGES} "graphics/VP1/VP1Algs PACKAGES="${PACKAGES} "graphics/VP1/VP1Utils PACKAGES="${PACKAGES} "graphics/VP1/VP1TrkAuxAlgs #PRD sys needs Guides sys #Track sys needs Guides and PRD PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1BanksSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP1BanksPlugin PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1GuideLineSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1GeometrySystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1TestSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1PRDSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1TrackingGeometrySystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1TrackSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1FatrasSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1MissingEtSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1SimHitSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1CaloSystems #PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1TriggerLV1Systems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1JetSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1VertexSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1CaloClusterSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1CaloReadoutSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1RawDataSystems #--- Qat packages --- #PACKAGES="${PACKAGES} "graphics/Qat/QatDataAnalysis #PACKAGES="${PACKAGES} "graphics/Qat/QatPlotting #PACKAGES="${PACKAGES} "graphics/Qat/QatPlotWidgets #--- Qat packages --- PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1UtilitySystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1BPhysSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP1PlugUtils PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP1GeometryPlugin PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP1TestPlugin PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP1TrackPlugin PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP1CaloPlugin PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP13DCocktailPlugin PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1LegoSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP1LegoPlugin PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP12DGeometrySystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP12DGeometryPlugin PACKAGES="${PACKAGES} "graphics/VP1/VP1Systems/VP1TriggerDecisionSystems PACKAGES="${PACKAGES} "graphics/VP1/VP1Plugins/VP1TriggerDecisionPlugin ########################################################################################## ########################################################################################## ########################################################################################## ########################################################################################## ########################################################################################## STARTTIME=`date` if [ "x$CMTPATH" == "x" ]; then echo "Error: CMTPATH not set. Please set yourself up to work against an atlas release" exit 1 fi BASEWORKDIR=$PWD WORKDIRFROMCMTPATH=`echo $CMTPATH|tr ':' '\n'|head -1` if [ "x$BASEWORKDIR" != "x$WORKDIRFROMCMTPATH" ]; then echo "Error: It seems that you are not executing the script from your work area" exit 1 fi if [ "x$VP1PATCH_SKIPCHECKOUT" != "x1" ]; then for packinfo in $PACKAGES; do pack=`echo "$packinfo"|sed 's#:.*$##'` if [ -d $pack ]; then echo "Error: $pack already checked out!" exit 1 fi done fi ################# EXTERNALS ################################# VP1LATESTEXTERNALS= VP1LATEST_QTVERS= VP1LATEST_SOQTVERS= VP1LATEST_COINVERS= VP1LATEST_QWTVERS= if [ $VP1ATLREL -lt 140224 ]; then VP1LATEST_QTVERS=4.4.2 VP1LATEST_SOQTVERS=1.4.1 VP1LATEST_QWTVERS=5.1.1 fi if [ "x${VP1LATEST_QTVERS}${VP1LATEST_SOQTVERS}${VP1LATEST_COINVERS}${VP1LATEST_QWTVERS}" != "x" ]; then VP1LATESTEXTERNALS=vp1externals_${CMTCONFIG} if [ "x${VP1LATEST_QTVERS}" != "x" ]; then VP1LATESTEXTERNALS="${VP1LATESTEXTERNALS}_qt${VP1LATEST_QTVERS}" fi if [ "x${VP1LATEST_COINVERS}" != "x" ]; then VP1LATESTEXTERNALS="${VP1LATESTEXTERNALS}_coin${VP1LATEST_COINVERS}" fi if [ "x${VP1LATEST_SOQTVERS}" != "x" ]; then VP1LATESTEXTERNALS="${VP1LATESTEXTERNALS}_soqt${VP1LATEST_SOQTVERS}" fi if [ "x${VP1LATEST_QWTVERS}" != "x" ]; then VP1LATESTEXTERNALS="${VP1LATESTEXTERNALS}_qwt${VP1LATEST_QWTVERS}" fi fi if [ "x$VP1LATESTEXTERNALS" != "x" ]; then #See if we have the new externals directly on afs: VP1PATCHDIR=/afs/cern.ch/user/t/tkittel/vp1-group-area/ext VP1LATESTEXTERNALSDIR=$VP1PATCHDIR/$VP1LATESTEXTERNALS if [ ! -d $VP1LATESTEXTERNALSDIR ]; then VP1PATCHDIR=/tmp/$USER/vp1patches VP1LATESTEXTERNALSDIR=$VP1PATCHDIR/$VP1LATESTEXTERNALS else echo "#################################################################################################" echo "# Found latest externals:" echo "# $VP1LATESTEXTERNALSDIR" echo "#################################################################################################" fi if [ ! -d $VP1LATESTEXTERNALSDIR ]; then VP1EXTURL="http://cern.ch/atlas-vp1/vp1patches/$VP1LATESTEXTERNALS.tar.gz" echo echo "#################################################################################################" echo "# Attempting to get latest externals from:" echo "# $VP1EXTURL" echo "# To install in:" echo "# $VP1LATESTEXTERNALSDIR" echo "#################################################################################################" echo if [ -f $VP1PATCHDIR/$VP1LATESTEXTERNALS.tar.gz ]; then echo "Error: $VP1PATCHDIR/$VP1LATESTEXTERNALS.tar.gz already exists. Remove and rerun." exit 1 fi mkdir -p $VP1PATCHDIR CURRENTDIR=$PWD cd $VP1PATCHDIR if [ "x$PWD" != "x$VP1PATCHDIR" ]; then echo "Error: Could not create and step into $VP1PATCHDIR" cd $CURRENTDIR exit 1 fi wget $VP1EXTURL if [ $? != 0 -o ! -f $VP1LATESTEXTERNALS.tar.gz ]; then echo "Error: Problems downloading latest externals." cd $CURRENTDIR exit 1 fi echo "Unpacking..." tar xzf $VP1LATESTEXTERNALS.tar.gz if [ $? != 0 -o ! -d $VP1LATESTEXTERNALS ]; then echo "Error: Problems unpacking externals." cd $CURRENTDIR exit 1 fi cd $CURRENTDIR fi fi echo echo echo "##########################################################" echo "# CHECKING OUT PACKAGES #" echo "##########################################################" echo echo if [ "x$VP1PATCH_SKIPCHECKOUT" == "x1" ]; then echo echo " =================>" echo " =================> Checking out is skipped (assumed to be already done)" echo " =================>" echo fi for packinfo in $PACKAGES; do pack=`echo "$packinfo"|sed 's#:.*$##'` if [ "x$pack" == "x" ]; then echo "Error: Problems decoding package from $packinfo (1)!" exit 1 fi packtest=`echo $pack|sed 's#^\/##'` packtest=`echo $packtest|sed 's#\.##'` if [ "x$pack" != "x$packtest" ]; then echo "Error: Problems decoding package from $packinfo (2)!" exit 1 fi tag="" if [ "x$pack" != "x$packinfo" ]; then tag=`echo "$packinfo"|sed 's#^.*:##'` fi if [ "x$VP1PATCH_SKIPCHECKOUT" != "x1" ]; then echo echo " =================>" echo " =================> Checking out $pack" echo " =================>" echo TAGPART="" if [ "x$tag" != "x" ]; then TAGPART="-r $tag" fi cmt co $TAGPART $pack EC=$? if [ ! -d $pack/cmt ]; then #Check for different directory structures if [ -d $pack/$tag/cmt ]; then pack=$pack/$tag elif [ -d `dirname $pack`/$tag ]; then pack=`dirname $pack`/$tag fi fi if [ $EC != 0 -o ! -f $pack/cmt/requirements ]; then echo "Warning: Problems checking out $pack! Will retry after 20 seconds." sleep 20 rm -rf $pack cmt co $TAGPART $pack if [ $? != 0 -o ! -f $pack/cmt/requirements ]; then echo "Warning: Problems checking out $pack! Will retry after 40 seconds." sleep 40 rm -rf $pack cmt co $TAGPART $pack if [ $? != 0 -o ! -f $pack/cmt/requirements ]; then echo "Warning: Problems checking out $pack! Will retry after 4 minutes." sleep 240 rm -rf $pack cmt co $TAGPART $pack if [ $? != 0 -o ! -f $pack/cmt/requirements ]; then echo "Warning: Problems checking out $pack! Will retry after 10 minutes." sleep 600 rm -rf $pack cmt co $TAGPART $pack if [ $? != 0 -o ! -f $pack/cmt/requirements ]; then echo "Warning: Problems checking out $pack! Will retry after 20 minutes." sleep 1200 rm -rf $pack cmt co $TAGPART $pack if [ $? != 0 -o ! -f $pack/cmt/requirements ]; then echo "Warning: Problems checking out $pack! Will retry one final time after 60 minutes." sleep 3600 rm -rf $pack cmt co $TAGPART $pack if [ $? != 0 -o ! -f $pack/cmt/requirements ]; then echo "Error: Problems checking out $pack!" echo "Aborting." exit 1 fi fi fi fi fi fi fi if [ "x$VP1PATCH_SLEEPBETWEENCVSCHECKOUTS" != "x0" -a "x$VP1PATCH_SLEEPBETWEENCVSCHECKOUTS" != "x" ]; then sleep $VP1PATCH_SLEEPBETWEENCVSCHECKOUTS fi else if [ ! -f $pack/cmt/requirements ]; then echo "Error: cmt/requirements not found for $pack!" exit1 fi fi done CHECKOUTTIME=`date` if [ "x$VP1PATCH_STOPAFTERCHECKOUT" == "x1" ]; then echo "=======================================================================================================" echo echo "VP1PATCH_STOPAFTERCHECKOUT set to '1' so won't proceed with compilation." echo echo "The script was started at --> $STARTTIME" echo "It was done checking out at --> $CHECKOUTTIME" echo exit 0 fi if [ "x$VP1LATESTEXTERNALS" != "x" -a "x$VP1PATCH_FASTRECOMPILE" != "x1" ]; then echo "##########################################################" echo "# FIXING GLUE PACKAGES FOR LATEST EXTERNALS #" echo "##########################################################" echo QTREQFILE=$BASEWORKDIR/External/AtlasQt4/cmt/requirements SOQTREQFILE=$BASEWORKDIR/External/AtlasSoQt/cmt/requirements COINREQFILE=$BASEWORKDIR/External/AtlasCoinInventor/cmt/requirements QWTREQFILE=$BASEWORKDIR/graphics/VP1/VP1Qwt/cmt/requirements if [ -f $QTREQFILE ]; then if [ "x$VP1LATEST_QTVERS" != "x" ]; then echo "Fixing $QTREQFILE" sed -i.orig 's#^ *macro *Qt4_home.*$#macro Qt4_home "'"$VP1LATESTEXTERNALSDIR"'/qt/4"#' $QTREQFILE sed -i 's#^ *macro *Qt4_native_version.*$#macro Qt4_native_version "'"$VP1LATEST_QTVERS"'"#' $QTREQFILE fi fi if [ -f $COINREQFILE ]; then if [ "x$VP1LATEST_COINVERS" != "x" ]; then echo "Fixing $COINREQFILE" sed -i.orig 's#^ *macro *AtlasCoinInventor_home.*$#macro AtlasCoinInventor_home "'"$VP1LATESTEXTERNALSDIR"'/CoinInventor"#' $COINREQFILE sed -i 's#^ *macro *AtlasCoinInventor_native_version.*$#macro AtlasCoinInventor_native_version "'"$VP1LATEST_COINVERS"'"#' $COINREQFILE fi fi if [ -f $SOQTREQFILE ]; then if [ "$VP1LATEST_SOQTVERS" != "x" ]; then echo "Fixing $SOQTREQFILE" sed -i.orig 's#^ *macro *AtlasSoQt_home.*$#macro AtlasSoQt_home "'"$VP1LATESTEXTERNALSDIR"'/SoQt"#' $SOQTREQFILE sed -i 's#^ *macro *AtlasSoQt_soqt_version.*$#macro AtlasSoQt_soqt_version "'"$VP1LATEST_SOQTVERS"'"#' $SOQTREQFILE fi fi if [ -f $QWTREQFILE ]; then if [ "$VP1LATEST_QWTVERS" != "x" ]; then echo "Fixing $QWTREQFILE" sed -i.orig 's#^ *macro *VP1Qwt_home.*$#macro VP1Qwt_home "'"$VP1LATESTEXTERNALSDIR"'/Qwt"#' $QWTREQFILE sed -i 's#^ *macro *VP1Qwt_qwt_version.*$#macro VP1Qwt_qwt_version "'"$VP1LATEST_QWTVERS"'"#' $QWTREQFILE fi fi fi echo echo echo "##########################################################" echo "# COMPILING PACKAGES #" echo "##########################################################" echo echo for packinfo in $PACKAGES; do pack=`echo "$packinfo"|sed 's#:.*$##'` tag="" if [ "x$pack" != "x$packinfo" ]; then tag=`echo "$packinfo"|sed 's#^.*:##'` fi echo echo " =================>" echo " =================> Compiling $pack" echo " =================>" echo cd $BASEWORKDIR/$pack/cmt if [ "x$PWD" != "x$BASEWORKDIR/$pack/cmt" ]; then echo "Error: Problems entering cmt directory of $pack!" exit 1 fi PROBLEMS=0 if [ "x$VP1PATCH_FASTRECOMPILE" != "x1" ]; then cmt config if [ $? != 0 ]; then PROBLEMS=1 fi fi if [ $PROBLEMS != 0 ]; then echo "Error: Problems doing cmt config in $pack!" exit 1 fi PROBLEMS=0 if [ "x$VP1PATCH_FASTRECOMPILE" != "x1" ]; then source setup.sh if [ $? != 0 ]; then PROBLEMS=1 fi fi if [ $PROBLEMS != 0 ]; then echo "Error: Problems doing source setup.sh in $pack!" exit 1 fi MAKEFILEQT=${CMTCONFIG}_Makefile.qmake MAKEFILEQTABS=$BASEWORKDIR/$pack/$CMTCONFIG/$MAKEFILEQT ISQTPACKAGEFORCERTAIN=0 if [ -f $MAKEFILEQTABS ]; then ISQTPACKAGEFORCERTAIN=1 fi PROBLEMS=0 if [ "x$VP1PATCH_FASTRECOMPILE" == "x1" ]; then if [ "x$ISQTPACKAGEFORCERTAIN" == "x1" ]; then if [ $MAKEFILEQTABS -nt $BASEWORKDIR/$pack/cmt/requirements ]; then echo " => Fast recompilation." cd $BASEWORKDIR/$pack/$CMTCONFIG/ make -f $MAKEFILEQT if [ $? != 0 ]; then PROBLEMS=1 else LN=lib`basename ${pack}`.so rm -f $LN.1.0 $LN.1 $LN mv $LN.1.0.0 $LN fi cd $BASEWORKDIR/$pack/cmt else echo " => Full recompilation." make if [ $? != 0 ]; then PROBLEMS=1 fi fi else if [ $BASEWORKDIR/$pack/$CMTCONFIG/$CMTCONFIG.make -nt $BASEWORKDIR/$pack/cmt/requirements ]; then echo " => Recompilation (QUICK=1)." make QUICK=1 if [ $? != 0 ]; then PROBLEMS=1 fi else echo " => Full recompilation." make if [ $? != 0 ]; then PROBLEMS=1 fi fi fi else make if [ $? != 0 ]; then PROBLEMS=1 fi fi if [ $? != 0 -o "x$PROBLEMS" != "x0" ]; then echo "Error: Problems doing make in $pack!" exit 1 fi done #If VP1 lastest externals are needed, indicate which: if [ "x$VP1LATESTEXTERNALS" != "x" ]; then echo $VP1LATESTEXTERNALS > $BASEWORKDIR/InstallArea/$CMTCONFIG/VP1LATESTEXTERNALSNEEDED fi cd $BASEWORKDIR echo "=======================================================================================================" echo echo "Congratulations. As far as this script thinks, you should now be ready to run the latest version of VP1." echo echo "The script was started at --> $STARTTIME" if [ "x$VP1PATCH_SKIPCHECKOUT" != "x1" ]; then echo "Checking out had been done previosly, so compiling started at --> $CHECKOUTTIME" else echo "It was done checking out and started compiling at --> $CHECKOUTTIME" fi echo "And all was finished at --> "`date` echo echo "Hopefully, this left you enough time for some coffee." echo