#!/bin/sh # Exit if a build is already running if [ -r "${HOME}/er.pid" ] then echo " OOPS - found ${HOME}/er.pid " erpid=`cat ${HOME}/er.pid` if ps -p ${erpid} then echo " OOPS - ${erpid} is still running " echo " BAILING OUT " exit 1 else echo " OK - stale er.pid file " rm -f ${HOME}/er.pid fi fi echo $$ > ${HOME}/er.pid # Exit immediately if cdfsoft2 is setup if [ "$CDFSOFT2_DIR" != "" ] then echo CDFSOFT2_DIR="$CDFSOFT2_DIR" echo " OOPS - you already have cdfsoft2 set up . " echo " Builds must be done from a fresh login. " echo " " echo " Exiting! " exit fi if [ "`uname -n`" = "cdfpca.fnal.gov" ] then kerb_str=`/usr/krb5/bin/klist | grep "Default principal:"` if [ "${kerb_str}" = "" -o "`echo ${kerb_str} | grep cdfsoft`" != "" ] then echo "Your personal kerberos ticket was not forwarded" echo "This will prevent the proper updating of rcpdb" echo " " echo "Exiting!" exit fi fi release=${1} build_type=${2} # Currently recognizes only "clean" if [ "${build_type}" != "" -a "`echo ${build_type} | grep '='`" = "" ] then shift 2 else build_type='' shift 1 fi # Parse the keyword arguments while test "$1" != "" do if [ "`echo ${1}|grep '='`" = "" ] then echo ${1} not recognised exit 1 else var=`echo ${1}|cut -c1` val=`echo ${1}|cut -f2 -d'='` eval $var=$val fi shift 1 done S_QUAL=$Q [ "${S_QUAL}" = "" ] && S_QUAL=default [ "${b}" != '' ] && build_type=${b} [ "${c}" != '' ] && compiler=_${c} Parallel=$p Binary_parallel=${E} echo S_QUAL = $S_QUAL echo Parallel = $Parallel echo Binary_parallel = $Binary_parallel echo build_type = $build_type [ -n "${compiler}" ] && \ echo compiler = ${compiler} NODE=`uname -n | cut -f1 -d'.'` My_dir=$BFDIST/releases/development/Release/Scripts #My_dir=`$My_dir/make_my_dir $0` work_space=`${My_dir}/define_work_area` if [ -z "${release}" ]; then echo echo Usage: echo echo ' ' ${0} release echo exit fi if [ -r ${HOME}/cdf2.shrc ]; then . ${HOME}/cdf2.shrc fi # ------------------------- # Ensure that we're cdfsoft # ------------------------- cdf_test=`echo ${BFDIST} | grep $HOME` if [ -z "${cdf_test}" ]; then echo "" echo "You must become cdfsoft before attempting $0" echo "" echo "slogin ${NODE} -l cdfsoft" echo "" exit 2 fi . $HOME/cdf2.shrc #if [ "`ups list cvs`" = "" ]; then # cvs_ver=`ups list -a -KVersion cvs|tail -1|sed 's%"%%g'` # if [ "${cvs_ver}" = "" ]; then # ups setup cvs $cvs_ver # fi #else # setup cvs #fi ##CVS_RSH=$BFDIST/releases/development/Distribution/cvsrsh; export CVS_RSH #CVS_PASSFILE=$BFDIST/releases/development/Distribution/srt2/.cvspass; export CVS_PASSFILE LINK_FRONTIER=1; export LINK_FRONTIER # ---------------------------------------- # Determine if re-installation is required # Rerun Prebuild_new_release, if so. # ---------------------------------------- #cd $work_space #if [ -d Release ]; then # rm -r Release #fi #cvsroot=`${My_dir}/Find_cvs_root Release | cut -f1 -d','` #cvs -Q -d ${cvsroot} checkout Release/Releases #releases_dir=$work_space/Release/Releases Pre_build=0 #newer='' #if [ -f ${HOME}/${release}.newver.log ]; then # newer="`find $releases_dir/${release}.newrel -newer ${HOME}/${release}.newver.log`" #fi #if [ ! -d $BFDIST/releases/${release} ] #then # Pre_build=1 #elif [ ! "${newer}" = "" ]; then # echo '' # echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * * *' # echo '* ' # echo '*' There are new updates to ${release} # echo '*' # echo '* Do you wish to run Prebuild_new_release at this time? [no]' # echo '*' # read reply # s_reply=`echo ${reply} | cut -c1` # if [ "y" = "${s_reply}" -o "Y" = "${s_reply}" ]; then # Pre_build=1 # fi #fi if [ $Pre_build = 1 ]; then echo '* Proceeding with Prebuild_new_release' echo '*' echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' ${My_dir}/Prebuild_new_release ${release} if [ ! -d $BFDIST/releases/${release} ]; then echo '' echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' echo '*' echo '* Prebuild_new_release failed' echo '*' echo '* Please fix the reported problems and' echo '* run Prebuild_new_release' ${release} echo '* before attempting Build_release' echo '*' echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' exit 2 fi fi # -------------------------------------------------------- # If ups database entry does not exist, attempt to declare # -------------------------------------------------------- if [ -z "`ups list -KVersion cdfsoft2 ${release}`" ]; then ups declare -C -r '~cdfsoft'/dist/releases/$release -z $HOME/upsdb \ -2 -m cdfsoft2.table cdfsoft2 ${release} fi chmod 755 $BFDIST/releases/${release}/Distribution/cdfsoftups/products [ ! -d "${HOME}/maint/log/ups" ] && mkdir -p $HOME/maint/log/ups rm -f $HOME/maint/log/ups/${release}.log ups configure cdfsoft2 ${release} 2>&1 | tee $HOME/maint/log/ups/${release}.log # -------------------------- # Setup new release and test # -------------------------- if [ ! -z "${CDFSOFT2_DIR}" ]; then unsetup cdfsoft2 unset CDFSOFT2_DIR fi setup cdfsoft2 ${release} if [ -z "${CDFSOFT2_DIR}" ]; then echo '' echo Unable to setup cdfsoft2 ${release} echo '' echo Preceeding errors have prevented build echo '' exit 1 fi # ----------------------- # Let the build commence # ----------------------- cd ${CDFSOFT2_DIR} if [ "${build_type}" = "clean" ]; then echo '' S_DIR=${SRT_SUBDIR} if [ "${SRT_SUBDIR}" != "" ] then if [ "${S_QUAL}" != "" -a "${S_QUAL}" != "default" ] then S_DIR=${SRT_SUBDIR}-${S_QUAL} fi echo 'Touching tmp/${SRT_SUBDIR}/.refresh' echo 'This should trigger a clean rebuild' [ -d tmp/${S_DIR} ] || mkdir tmp/${S_DIR} touch tmp/${S_DIR}/.refresh else echo 'Commencing gmake clean' gmake clean fi echo '' fi if [ "${S_QUAL}" = "maxopt" ] then ups_tmp="`ups list -K version geant v3_21_14 -q GCC_3_4_3:O2 -f Linux+2.4-2.2.4`" if [ -n "${ups_tmp}" ] then setup geant v3_21_14 -q GCC_3_4_3:O2 -f Linux+2.4-2.2.4 fi fi echo '' echo rebuild with tee echo '' test_file=gmake${compiler}_${S_QUAL}.log ${CDFSOFT2_DIR}/Distribution/archive_log ${CDFSOFT2_DIR}/results/${test_file} if [ -f ${CDFSOFT2_DIR}/results/rebuild_${S_QUAL}.log ] then ${CDFSOFT2_DIR}/Distribution/archive_log \ ${CDFSOFT2_DIR}/results/rebuild_${S_QUAL}.log fi ${CDFSOFT2_DIR}/Distribution/rebuild${compiler} \ $release ${S_QUAL} ${Parallel} ${Binary_parallel} 2>&1 | \ tee ${CDFSOFT2_DIR}/results/${test_file} #gmake -k 2>&1 | tee ${CDFSOFT2_DIR}/results/gmake.log # ---------------- # Report on errors # ---------------- rm ${HOME}/er.pid echo '' echo Error messages containing gmake MUST echo be addressed. echo '' if [ -f $HOME/gmake.error.log ]; then rm $HOME/gmake.error.log fi echo gmake errors associated with build of $release on $NODE > $HOME/gmake.error.log echo at `date` >> $HOME/gmake.error.log echo '-------------------------------------------------------' >> $HOME/gmake.error.log echo '' >> $HOME/gmake.error.log #grep -i "gmake\[" ${CDFSOFT2_DIR}/results/$test_file | tee -a $HOME/gmake.error.log Berr=`grep -i "gmake\[" ${CDFSOFT2_DIR}/results/$test_file | tee $HOME/tmp_gmake.err.log | wc -l` if [ ${Berr} -eq 0 ] then if [ -d ${CDFSOFT2_DIR}/results/build-logs-default ] then cd ${CDFSOFT2_DIR}/results/build-logs-default Berr=`find . -type f -exec grep -i "gmake\[" {} \; -print -exec printf "\n\n" \; | \ tee $HOME/tmp_gmake.err.log | wc -l` fi fi cat $HOME/tmp_gmake.err.log >> $HOME/gmake.error.log rm $HOME/tmp_gmake.err.log if [ ! ${Berr} -eq 0 ] then echo '' >> $HOME/gmake.error.log echo 'Errors listed above MUST be corrected before Update_rcpdb can' echo 'be automatically run.' echo '' >> $HOME/gmake.error.log echo 'Errors have prevented the automatic update of rcpdb' >> \ $HOME/gmake.error.log else if [ "`uname -n`" = "cdfcode.fnal.gov" -a "${S_QUAL}" = "default" ] then ${HOME}/ktab $CDFSOFT2_DIR/Release/Scripts/Update_rcpdb ${release} | \ tee -a ${CDFSOFT2_DIR}/results/${test_file} # $CDFSOFT2_DIR/Validation/validate ${release} UPDATE_RCPDB | \ # tee -a ${CDFSOFT2_DIR}/results/${test_file} echo '' >> $HOME/gmake.error.log control=$HOME/dist/rcpdb/official/control.dat reltest=`echo $release | sed 's/\./\\\./g'` # escape . for grep if [ `grep " ${reltest} " ${control} | wc -l` -gt 0 ] then echo 'rcpdb automatically updated' >> $HOME/gmake.error.log else echo 'Update_rcpdb failed.' >> $HOME/gmake.error.log fi fi fi Mail -s "$release built on $NODE" cdf_code_management@fnal.gov < $HOME/gmake.error.log rm $HOME/gmake.error.log echo '' echo Done exit 2003 10 24 kreymer Escaped the . in release for final rcpdb test, and tested for precise match with lead/trail space Test only rcpdb/official/control.dat