#!/bin/sh
# This gets the environment
. /etc/bashrc
#. /usr/local/etc/setups.sh


WORKINGDIR=$1;
DIRECTORY=$2;
RELEASE=$3;
CHOICE=$4;
ONLY_COPYDOOM="no";
SUBSTITUTE_LIBS="yes";


#####################################
## At first some settings
#####################################

# if the option copyD0om is used only the copyD0om executable will be in the tarball
# this is for reprocessing
if [[ ${CHOICE} == "copyD0om" ]] ; then 
    WITH_MAXOPT="maxopt";
    WITH_COPYDOOM="copyd0om_x";

    if [[ $DIRECTORY != "RTE_runjob" ]] ; then
	echo "Warning: You produce a tarball dedicated for MC Production only including the copyd0om executable!"
	echo "The tarball may not run for (Re)Processing because of a wrong basedirectory ... choosen base directory: $DIRECTORY!"
    fi
# if the option d0reco is used only the d0reco executable will be in the tarball
# this is for reprocessing
elif [[ ${CHOICE} == "d0reco" ]] ; then
    WITH_MAXOPT="maxopt";
    WITH_D0RECO="d0reco_x";

    if [[ $DIRECTORY != "RTE_runjob" ]] ; then
	echo "Warning: You produce a tarball dedicated for MC Production only including the d0reco executable!"
	echo "The tarball may not run for (Re)Processing because of a wrong basedirectory ... choosen base directory: $DIRECTORY!"
    fi
# in case recocert is used d0reco, copyD0om, tmbstream and recocert executables will be in the tarball
elif [[ ${CHOICE} == "recocert" ]] ; then
    WITH_MAXOPT="maxopt";
    WITH_D0RECO="d0reco_x";
    WITH_COPYDOOM="copyd0om_x";
    WITH_TMBSTREAM="tmbstream_x";
    WITH_RECOCERT="recocert_x";

    if [[ $DIRECTORY != "RTE_runjob" ]] ; then
	echo "Warning: You produce a tarball dedicated for MC Production only including the recocert executable!"
	echo "The tarball may not run for (Re)Processing because of a wrong basedirectory ... choosen base directory: $DIRECTORY!"
    fi
else
## If no CHOICE is set, a default tarball (recommended for MC) including all these 
## executables will be created 
WITH_MAXOPT="maxopt";
WITH_PYTHIA="pythia_x";
WITH_D0GSTAR="d0gstar_x";
WITH_D0SIM="d0sim_x";
WITH_D0RECO="d0reco_x";
WITH_COPYDOOM="copyd0om_x";
WITH_HERWIG="herwig_x";
WITH_SINGLE="single_x";
WITH_ALPGEN="alpgen_prod_x";
fi 

#####################################
## dump the settings
#####################################

if [[ $WITH_PYTHIA == "pythia_x" ]] || [[ $WITH__D0GSTAR == "d0gstar_x" ]] || [[ $WITH_D0SIM == "d0sim_x" ]] || [[ $WITH_D0RECO == "d0reco_x" ]] || [[ $WITH_HERWIG == "herwig_x" ]] || [[ $WITH_SINGLE == "single_x" ]] || [[ $WITH_ALPGEN == "alpgen_prod_x" ]] || [[ $WITH_TMBFIXER == "tmbfixer_x" ]] || [[ $WITH_RECOCERT == "recocert_x" ]] ; then
echo "***********************************************"
echo "will create tarball including:                 "
echo $WITH_PYTHIA $WITH_D0GSTAR $WITH_D0SIM $WITH_D0RECO $WITH_COPYDOOM $WITH_HERWIG $WITH_SINGLE $WITH_ALPGEN $WITH_TMBFIXER $WITH_RECOCERT $WITH_TMBSTREAM
echo "***********************************************"
else
echo "***********************************************"
echo "ONLY COPYDOOM OPTION WILL BE PUT IN THE TARBALL"
echo "***********************************************"
ONLY_COPYDOOM="yes";
fi 

echo "settings:"
echo "WITH_MAXOPT = $WITH_MAXOPT" 
echo "WITH_PYTHIA = $WITH_PYTHIA" 
echo "WITH_D0GSTAR = $WITH_D0GSTAR" 
echo "WITH_D0SIM = $WITH_D0SIM" 
echo "WITH_D0RECO = $WITH_D0RECO" 
echo "WITH_COPYDOOM = $WITH_COPYDOOM" 
echo "WITH_HERWIG = $WITH_HERWIG" 
echo "WITH_SINGLE = $WITH_SINGLE" 
echo "WITH_ALPGEN = $WITH_ALPGEN"
echo "WITH_TMBSTREAM= $WITH_TMBSTREAM";
echo "WITH_TMBFIXER = $WITH_TMBFIXER"
echo "WITH_RECOCERT = $WITH_RECOCERT"

#####################################
## Now the actual installation begins
#####################################

## setup the release to set all required Enviroment variables
setup D0RunII ${RELEASE}

## setup D0rte which will create the runtime enviroment and 
## the setup scripts are processed according to the specified executables
## the setup scripts are located in
## ${DIRECTORY}/releases/${RELEASE}/rundata/setup-scripts
setup d0rte -d
$D0RTE_DIR/scripts/makeD0_Production_Sandbox.sh ${RELEASE} ${DIRECTORY}/releases/${RELEASE} $WITH_MAXOPT $WITH_PYTHIA $WITH_D0GSTAR $WITH_D0SIM $WITH_D0RECO $WITH_COPYDOOM $WITH_HERWIG $WITH_SINGLE $WITH_ALPGEN $WITH_TMBFIXER $WITH_RECOCERT $WITH_TMBSTREAM

setup mc_runjob
echo ""
echo "cp $MC_RUNJOB_DIR/tar_scripts/scripts/mcc_dist_setup.* ${DIRECTORY}/"
cp $MC_RUNJOB_DIR/tar_scripts/scripts/mcc_dist_setup.* ${DIRECTORY}/
echo "... done!"

######################################
## The RTE package unfortunately 
## does not do everything
######################################

## in case of a MC tarball with base directory "mcc-dist" 
## the ups directory need to be copied
if [[ ${DIRECTORY} == "mcc-dist" ]] ; then
    echo ""
    if [[ -d ${DIRECTORY}/releases/${RELEASE}/ups ]] ; then
       echo "${DIRECTORY}/releases/${RELEASE}/ups already exists ..."
	echo "... done!"
    else
        echo "copy ups directory"
	echo "cp -rf $SRT_DIST/releases/${RELEASE}/ups/ ${DIRECTORY}/releases/${RELEASE}/."
	cp -rf $SRT_DIST/releases/${RELEASE}/ups/ ${DIRECTORY}/releases/${RELEASE}/.
	echo "... done!"
    fi
fi
    
echo " "

## in some of the rcp files some pathes point to the wrong location
## which may need to be corrected
## those files are currently: 
## ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management.rcp
## ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management_run2b.rcp
## ${DIRECTORY}/releases/${RELEASE}/smtraw/rcp/SmtRawUnp2Data_data_all.rcp
## this will/should be fixed in the future 

if [[ `grep -c "SRT_PRIVATE_CONTEXT/rundata"  ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management.rcp` -lt 1 ]] ; then
    echo "... first fix"
    sed -e "s|SRT_PRIVATE_CONTEXT|SRT_PRIVATE_CONTEXT/rundata|g" -e "s|SRT_PUBLIC_CONTEXT|SRT_PUBLIC_CONTEXT/rundata|g" ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management.rcp > ${DIRECTORY}/releases/${RELEASE}/temp.txt
    chmod 777 ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management.rcp
    cp ${DIRECTORY}/releases/${RELEASE}/temp.txt ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management.rcp
    chmod 444 ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management.rcp
    rm ${DIRECTORY}/releases/${RELEASE}/temp.txt
fi

if [[ -e ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management_run2b.rcp ]] ; then
    if [[ `grep -c "SRT_PRIVATE_CONTEXT/rundata"  ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management_run2b.rcp` -lt 1 ]] ; then
	echo "... first fix part2"
	sed -e "s|SRT_PRIVATE_CONTEXT|SRT_PRIVATE_CONTEXT/rundata|g" -e "s|SRT_PUBLIC_CONTEXT|SRT_PUBLIC_CONTEXT/rundata|g" ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management_run2b.rcp > ${DIRECTORY}/releases/${RELEASE}/temp.txt
	chmod 777 ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management_run2b.rcp
	cp ${DIRECTORY}/releases/${RELEASE}/temp.txt ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management_run2b.rcp
	chmod 444 ${DIRECTORY}/releases/${RELEASE}/geometry_management/rcp/geometry_management_run2b.rcp
	rm ${DIRECTORY}/releases/${RELEASE}/temp.txt
    fi
fi

if [[ `grep -c "SRT_PUBLIC_CONTEXT}/rundata" ${DIRECTORY}/releases/${RELEASE}/smtraw/rcp/SmtRawUnp2Data_data_all.rcp` -lt 1 ]] ; then
    echo "... second fix"
    sed "s|SRT_PUBLIC_CONTEXT}|SRT_PUBLIC_CONTEXT}/rundata|g" ${DIRECTORY}/releases/${RELEASE}/smtraw/rcp/SmtRawUnp2Data_data_all.rcp > ${DIRECTORY}/releases/${RELEASE}/temp.txt
    chmod 777 ${DIRECTORY}/releases/${RELEASE}/smtraw/rcp/SmtRawUnp2Data_data_all.rcp
    cp ${DIRECTORY}/releases/${RELEASE}/temp.txt ${DIRECTORY}/releases/${RELEASE}/smtraw/rcp/SmtRawUnp2Data_data_all.rcp
    chmod 444 ${DIRECTORY}/releases/${RELEASE}/smtraw/rcp/SmtRawUnp2Data_data_all.rcp
    rm ${DIRECTORY}/releases/${RELEASE}/temp.txt
fi

## same here ... the wrong location is specified in the rcp files
## in this case the easiest is to copy the required files into the expected directory
    if [[ -d ${DIRECTORY}/releases/${RELEASE}/smt_lpos/dat ]] ; then
       echo "${DIRECTORY}/releases/${RELEASE}/smt_lpos already exists ..."
	echo "... done!"
    else
	echo "... third fix"
	cp -r ${DIRECTORY}/releases/${RELEASE}/rundata/smt_lpos/dat ${DIRECTORY}/releases/${RELEASE}/smt_lpos
	echo "... done!"
    fi

## maybe the frozen release contains a bad generateFome.py file
## in that case this will be replaced, if the new file has the following 
## nameing schema and location:
## ${WORKINGDIR}/generateFome_${RELEASE}.py
echo ""
if [[ $WITH_ALPGEN == "alpgen_prod_x" ]] ; then
	if [[ -e ${WORKINGDIR}/generateFome_${RELEASE}.py ]] ; then
	    echo "For ${RELEASE} we need to replace generateFOME.py ..."
	    echo "Copy ${WORKINGDIR}/generateFome_${RELEASE}.py to ${DIRECTORY}/releases/${RELEASE}/lib/."
	    chmod u+w ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/generateFome.py
	    cp ${WORKINGDIR}/generateFome_${RELEASE}.py ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/generateFome.py
	    chmod u-w ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/generateFome.py
	    echo "...done!"
	fi
fi

## copy some d0gstar things
## the d0gstar DB
## and copy the non-maxopt version of the d0gstar executables
## into the maxopt bin directory 
if [[ $WITH_D0GSTAR == "d0gstar_x" ]] ; then
 echo ""
 echo "Some d0gstar fixes:"	
 if [[ -d ${DIRECTORY}/releases/${RELEASE}/d0gstar/d0db ]] ; then
      echo "${DIRECTORY}/releases/${RELEASE}/d0gstar/d0db already exists ..."
	echo "... done!"
 else
     echo "Copy  ${SRT_DIST}/releases/${RELEASE}/d0gstar/d0db to ${DIRECTORY}/releases/${RELEASE}/d0gstar/. ..."
     cp -r ${SRT_DIST}/releases/${RELEASE}/d0gstar/d0db ${DIRECTORY}/releases/${RELEASE}/d0gstar/.
 fi
 echo "Copy ${SRT_DIST}/releases/${RELEASE}/bin/Linux2.4-GCC_3_4/d0gstar2.x to ${DIRECTORY}/releases/${RELEASE}/bin/Linux2.4-GCC_3_4-maxopt/. ..."
 cp -r ${SRT_DIST}/releases/${RELEASE}/bin/Linux2.4-GCC_3_4/d0gstar2.x ${DIRECTORY}/releases/${RELEASE}/bin/Linux2.4-GCC_3_4-maxopt/.
 echo "... done!"

 ## copy ALTERATIVE D0gstar Geometry
 if [[ $D0GSTAR_ALTGEOM_DIR != "" ]] ; then
     if [[ -d ${DIRECTORY}/releases/${RELEASE}/rundata/d0gstar_AltGeom ]] ; then
	 echo "${DIRECTORY}/releases/${RELEASE}/rundata/d0gstar_AltGeom already exists ..."
	 echo "...done!"
     else
	 echo "" 
	 echo "Copy $D0GSTAR_ALTGEOM_DIR/* to ${DIRECTORY}/releases/${RELEASE}/rundata/d0gstar_AltGeom ..."
	 mkdir -p ${DIRECTORY}/releases/${RELEASE}/rundata/d0gstar_AltGeom
	 cp -fr $D0GSTAR_ALTGEOM_DIR/* ${DIRECTORY}/releases/${RELEASE}/rundata/d0gstar_AltGeom
	 echo "...done!"
     fi
 fi
fi

########################################
## to be system independant at the farms
## some libraries need to be replaced
########################################

## remove all libraries which originate from /lib/* or /usr/*
## and replace them with libraries from the $LinktimeDir
## maybe this can be done in a better way, but it works!
if [[ $SUBSTITUTE_LIBS == "yes" ]] ; then
    echo ""
    echo "*********************************************************************"
    echo " will remove system dependant libraries ! "
    echo "*********************************************************************"
    for myExecutable in `ls ${DIRECTORY}/releases/${RELEASE}/bin/Linux2.4-GCC_3_4-maxopt/` ; do
	for myLibrary in `ldd ${SRT_DIST}/releases/${RELEASE}/bin/Linux2.4-GCC_3_4/${myExecutable} | grep " /lib | awk '{print $1}'"` ; do
	    if [[ -e ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/$myLibrary ]] ; then
		rm ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/$myLibrary
		for LinktimeDir in `find $LINKTIME_DIR -name lib`; do
		    if [[ -e $LinktimeDir/$myLibrary ]] ; then
                    cp $LinktimeDir/$myLibrary ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/.
		    fi
		done
	    fi
	done
	
	for myLibrary in `ldd ${SRT_DIST}/releases/${RELEASE}/bin/Linux2.4-GCC_3_4/${myExecutable} | grep " /usr" | awk '{print $1}'` ; do
	    if [[ -e ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/$myLibrary ]] ; then
		rm ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/$myLibrary
		for LinktimeDir in `find $LINKTIME_DIR -name lib`; do
		    if [[ -e $LinktimeDir/$myLibrary ]] ; then
                    cp $LinktimeDir/$myLibrary ${DIRECTORY}/releases/${RELEASE}/lib/Linux2.4-GCC_3_4-maxopt/.
		    fi
		done
	    fi
	done
    done
    echo "... done!"
fi


########################################
## in case of a copyd0om tarball the 
## tarball will be shrunk to the minimum
## size
########################################

#if [[ $ONLY_COPYDOOM == "yes" ]] ; then
if [[ $ONLY_COPYDOOM == "blubb" ]] ; then
    
    ## to leave the tarball as small as possible only the required directories, libraries
    ## and executables will be put in the tarball
    ## !!!! the buildup is copied from an existing tarball !!!!

    echo ""
    echo "start copying files to match copyd0om tarball requirements ..."
    mkdir -p ${DIRECTORY}/releases/${RELEASE}/mcpp/dat/
    cp -f ${SRT_DIST}/releases/${RELEASE}/mcpp/dat/* ${DIRECTORY}/releases/${RELEASE}/mcpp/dat/.
    mv ${DIRECTORY}/releases/${RELEASE}/GlobalEnvBootstrap.sh ${DIRECTORY}/releases/.
    mv ${DIRECTORY}/releases/${RELEASE}/mcpp ${DIRECTORY}/releases/.
    mv ${DIRECTORY}/releases/${RELEASE}/d0_mcpp_gen ${DIRECTORY}/releases/.
    mv ${DIRECTORY}/releases/${RELEASE}/bin ${DIRECTORY}/releases/.
    mv ${DIRECTORY}/releases/${RELEASE}/lib ${DIRECTORY}/releases/.
    mkdir ${DIRECTORY}/releases/rcpfiledb
    echo "copying rcpfiledb ..."
    cp -rf ${SRT_DIST}/releases/${RELEASE}/rcpfiledb/* ${DIRECTORY}/releases/rcpfiledb/.
    chmod -R 777 ${DIRECTORY}/releases/${RELEASE}/*
    rm -rf ${DIRECTORY}/releases/${RELEASE}/
    mkdir ${DIRECTORY}/releases/${RELEASE}
    mv ${DIRECTORY}/releases/GlobalEnvBootstrap.sh ${DIRECTORY}/releases/${RELEASE}/.
    mv ${DIRECTORY}/releases/mcpp ${DIRECTORY}/releases/${RELEASE}/.
    mv ${DIRECTORY}/releases/d0_mcpp_gen ${DIRECTORY}/releases/${RELEASE}/.
    mv ${DIRECTORY}/releases/bin ${DIRECTORY}/releases/${RELEASE}/.
    mv ${DIRECTORY}/releases/lib ${DIRECTORY}/releases/${RELEASE}/.
    mv ${DIRECTORY}/releases/rcpfiledb ${DIRECTORY}/releases/${RELEASE}/.
    oldDir=$PWD;
    cd ${DIRECTORY}/releases/${RELEASE}/bin
    ln -s `ls` Linux2.4-GCC_3_4
    cd $oldDir
    cd ${DIRECTORY}/releases/${RELEASE}/lib
    ln -s `ls` Linux2.4-GCC_3_4
    cd $oldDir
    touch ${DIRECTORY}/releases/${RELEASE}/SRT_SUBDIR
    echo "Linux2.4-GCC_3_4" > ${DIRECTORY}/releases/${RELEASE}/SRT_SUBDIR
    
    # now it is time to tar everything                                                                   
    echo ""
    echo "execute : gtar czhf d0_${DIRECTORY}_${RELEASE}_maxopt_copyd0om.tar.gz ${DIRECTORY}  ..."
    gtar czhf d0_${DIRECTORY}_${RELEASE}_maxopt_copyd0om.tar.gz ${DIRECTORY}
    
else
        # now it is time to tar everything
	echo ""
	if [[ ${DIRECTORY} == "mcc-dist" ]] ; then
	    echo "execute : gtar czhf d0_MC_${RELEASE}.tar.gz ${DIRECTORY}  ..."
	    gtar czhf d0_MC_${RELEASE}.tar.gz ${DIRECTORY}
	elif [[ ${CHOICE} != "" ]] ; then
	    echo "execute : gtar czhf d0_${DIRECTORY}_${RELEASE}_${CHOICE}.tar.gz ${DIRECTORY}  ..."
	    gtar czhf d0_${DIRECTORY}_${RELEASE}_${CHOICE}.tar.gz ${DIRECTORY}
	else
	    echo "execute : gtar czhf d0_${DIRECTORY}_${RELEASE}.tar.gz ${DIRECTORY}  ..."
	    gtar czhf d0_${DIRECTORY}_${RELEASE}.tar.gz ${DIRECTORY}
	fi
fi

