#!/bin/bash
#
# Usage: build_patches <project> <packages>+
#
# Builds set of packages/tags, taken from TC against already built project (on afs),
# installs new binaries there and builds RPMs
#
# List of build configurations (aka CMTCONFIG) is taken from?
#
# You can set the CHECKOUT_AREA and/or BUILD_AREA environment variables
# to determine where source is checked out and the where the build is done.
#

if [ $# -lt 2 ]; then
    echo "usage: $0 <project> <packages>+"
    exit 1
fi

export GITROOT=${GITROOT:=https://:@gitlab.cern.ch:8443/atlas-tdaq-software}
export CHECKOUT_AREA=${CHECKOUT_AREA:=/afs/cern.ch/atlas/project/tdaq/cmake/projects}
export BUILD_AREA=${BUILD_AREA:=/mnt/${USER}/build-patch/`date +%s`}

_cmake_tdaq=$(dirname $(dirname $(readlink -f ${BASH_SOURCE[0]-$0})))

export CMTRELEASE=$1
shift 1

case ${CMTRELEASE} in
    tdaq-common-*)
        _project_base=tdaq-common
        ;;
    dqm-common-*)
        _project_base=dqm-common
        ;;
    *)
        _project_base=tdaq
        ;;
esac

RPMS_PUSH_AREA=/afs/cern.ch/atlas/project/tdaq/cmt/RPM/yum/${_project_base}/slc6/updates

rm -rf ${BUILD_AREA} || { echo "Failed in ${BUILD_AREA}"; exit 1 ; }

mkdir -p ${BUILD_AREA} || { echo "Failed in ${BUILD_AREA}"; exit 1 ; }
mkdir -p ${RPMS_PUSH_AREA} || { echo "Failed in ${RPMS_PUSH_AREA}"; exit 1 ; }
git clone -b ${CMTRELEASE} ${GITROOT}/${_project_base}-cmake.git ${BUILD_AREA}

cd ${BUILD_AREA} || { echo "Failed in ${BUILD_AREA}"; exit 1 ; }

cat > CMakeLists.txt <<EOF
cmake_minimum_required(VERSION 3.6.0)
find_package(TDAQ)
include(CTest)

macro (tdaq_work_area)
   include(CTest)
   set(_project)
   set(_version)
   _tdaq_release_to_project(\$ENV{CMTRELEASE} _project _version)
   set(TDAQ_USED_PROJECT_VERSION "dqm-common-01-02-00" CACHE STRING "Used project" FORCE)
   tdaq_project(\${_project} \${_version} WORK USES \${_project} \${_version})

endmacro()

tdaq_work_area()
EOF

packages=$@

for p in $@; do
 echo "checking out $1 tag $(tagpkg -l -q $1 ${CMTRELEASE})"
 getpkg $1 $(tagpkg -l -q $1 ${CMTRELEASE})
 shift 1
done

#echo "Release: ${_project_base}/${CMTRELEASE}" 
#platforms=$(ls /afs/cern.ch/atlas/project/tdaq/inst/${_project_base}/${CMTRELEASE}/installed/.setup* | sed 's/^.*.setup-\(.*\)\.sh/\1/')
platforms=$(ls -d /afs/cern.ch/atlas/project/tdaq/inst/${_project_base}/${CMTRELEASE}/installed/*{opt,dbg} | sed 's#^.*installed/##g')

for p in $platforms; do
echo "building for $p"
export BINARY_TAG=$p
export CMTCONFIG=$p
source ${_cmake_tdaq}/bin/setup.sh $p
source /afs/cern.ch/atlas/project/tdaq/inst/${_project_base}/${CMTRELEASE}/installed/setup.sh
mkdir ${p}
cd ${p}
cmake ${p} .. || { echo "Failed cmake config"; exit 1 ; }
echo $LD_LIBRARY_PATH
make -j8 all install/fast || { echo "Failed in make"; exit 1 ; }
echo "Build done"
cpack -D CPACK_PACKAGE_FILE_NAME=${CMTRELEASE} || { echo "Failed cpack"; exit 1 ; }
echo "RPMs done"
for pp in $packages; do cp ${CMTRELEASE}-${pp}_*.rpm ${RPMS_PUSH_AREA}; done
cd ..
rm -rf ${p}
done
