#!/bin/bash

cd "$( dirname "$0" )"
ARGS=""

DIST="$(rpmdist.sh --dist)"

# CCACHE related stuff
if [ ! -d /var/cache/ccache ]; then
  [ -z "${DIST}" ] && DIST="$(rpm -E "%{dist}")"
  if [ -n "${DIST}" ]; then
    export CCACHE_DIR=~/.ccache${DIST}.$(uname -m)
  fi
fi

while [ $# -gt 0 ]; do
  case "$1" in
    "--auto"|"-a") AUTO=1;;
    "--version"|"-v") REQVERSION="$2"; shift;;
    "--"*) ARGS="${ARGS} $1";;
    *) COMP="${1%%/}";;
  esac
  shift
done

if [ -d ~/tde/tde-tarballs/${REQVERSION} ]; then
  eval TARBALLS_DIR=~/tde/tde-tarballs/${REQVERSION}
else
  eval TARBALLS_DIR=~/tde/tde-tarballs/3.5.13.2
  #eval TARBALLS_DIR=~/tde/tde-tarballs/14.0.0
fi

#clear
cat <<EOF
$(< /etc/redhat-release) [$(uname -m)]
This script generates RPM of TDE from source tarball.

EOF

# Checks RPMBUILD environment
RHEL="$( rpm -E "%{rhel}" )"
FEDORA="$( rpm -E "%{fedora}" )"
SUSE="$( rpm -E "%{suse_version}" )"
PCLINUXOS="$( rpm -E "%{pclinuxos}" )"
MGAVERSION="$( rpm -E "%{mgaversion}" )"
if [ "${RHEL}" = "%{rhel}" ] && [ "${FEDORA}" = "%{fedora}" ] && [ "${SUSE}" = "%{suse_version}" ] && [ "${PCLINUXOS}" = "%{pclinuxos}" ] && [ "${MGAVERSION}" = "%{mgaversion}" ] ; then
  cat <<EOF
Error: RPM macro %rhel or %fedora must be set to the distribution version to build !
E.g:
  %rhel 6 
or:
  %fedora 15
EOF
  exit 1
fi

# Checks TDE version to use
#if [ -z "${REQVERSION}" ]; then
#	REQVERSION="3.5.13"
#fi

if [ -z "${COMP}" ]; then
  select COMP in $( cut -f1 "components.txt" | grep -v "^#" ) ; do break; done
fi

# Gets package version from 'components.txt' file
VERSION=$( awk '{ if ($1 == "'${COMP}'") { print $2; } }' components.txt )
	
# If no version is set in text file, get version number from source tarball name
COMPNAME="${COMP##*/}"
if [ -z "${VERSION}" ]; then
  for d in "${TARBALLS_DIR}/main/${COMP%/*}" "${TARBALLS_DIR}/main/" "${PWD}/main/${COMP}/"; do
    for n in "trinity-${COMPNAME}-${REQVERSION:-*}.tar.gz" "trinity-${COMPNAME}?-${REQVERSION:-*}.tar.gz" "trinity-${COMPNAME/kde/tde}-${REQVERSION:-*}.tar.gz"  "trinity-${COMPNAME/kde/tde}-${REQVERSION:-*}*.tar.gz"; do
#      echo $d/$n
      set $d/$n
      if [ $# -eq 0 ]; then
        echo "No tarball found !"
        exit 1
      elif [ $# -eq 1 ] && [ -r "$1" ]; then
        TARBALL=$1
      elif [ $# -gt 1 ]; then
        select TARBALL in $*; do break; done
      fi
    done
  done

  echo "TARBALL is ${TARBALL##*/}"
fi

# Checks for version
if [ -z "${VERSION}" ] && [ -n "${REQVERSION}" ]; then
  VERSION="${REQVERSION}"
fi

# Checks for preversion (non-final)
if [ "${TARBALL}" != "${TARBALL%%~pre*}" ]; then
  PREVERSION="${TARBALL##*~}"
  PREVERSION="${PREVERSION%.tar*}"
fi
	
# Chooses a spec file (if many)
set $( cd "${COMP}"; echo *${COMP##*/}*.spec )
if [ $# -gt 1 ]; then
	if [ -n "${REQVERSION}" ]; then
		set $( cd "${COMP}"; echo *-${REQVERSION}.spec )
		SPEC="$1"
	else
		select SPEC in $*; do break; done
	fi
elif [ -r "${COMP}/$1" ]; then
	SPEC="$1"
else
	echo "Fatal: no spec file found !"
	echo $1
	exit 2
fi
	
cat <<EOF

About to build '${COMP}':
  Version: '${VERSION}'
  Preversion: '${PREVERSION}'
  Spec file: '${SPEC}'
  Tarball: '${TARBALL}'

Press ENTER to build, or CTRL+C to abort.
EOF
[ -z "${AUTO}" ] && read rep
	
# Specific prefix for installation of some components
case "${COMP##*/}" in
	"qt3") PREFIX="/usr";;
esac
	
# Determines if we are running an i386 or x86_64 distro
if [ "$(rpm -q --qf '%{arch}\n' kernel | tail -n 1)" = "i686" ]; then
	ARGS="${ARGS} --target=i686"
fi

LOGFILE=/tmp/log.${COMP##*/}

SOURCEDIR="$(mktemp -d)"
# Puts the GIT files in SOURCEDIR
#rsync -rLv "${PWD}/${COMP}/" "${SOURCEDIR}/"
while read a b; do
  case "${a}" in
    "Source"*|"Patch"*)
      b=$(rpm -E "${b##*/}")
      [ -r "${COMP}/${b}" ] && cp -fv "${COMP}/${b}" "${SOURCEDIR}"
    ;;
  esac
done < "${COMP}/${SPEC}"

# Copies the SPEC file
cp -f "${COMP}/${SPEC}" "${SOURCEDIR}"

# Puts the TARBALL in SOURCEDIR
#cp -f "${TARBALLS_DIR}/${COMP}-"*.tar* "${SOURCEDIR}"
echo "Copying TARBALL ..."
cp -fv "${TARBALL}" "${SOURCEDIR}"

BUILDDIR="/dev/shm/BUILD${DIST}.$(uname -i)"
BUILDROOTDIR="/dev/shm/BUILDROOT${DIST}.$(uname -i)"

TOPSRCRPMDIR="$(rpm -E %_srcrpmdir)"
TOPRPMDIR="$(rpm -E %_rpmdir)"
SUBDIR="${COMP%/*}"
if [ "${SUBDIR}" = "${COMP}" ]; then
	SUBDIR="main"
fi
RPMDIR="${TOPRPMDIR}/${SUBDIR}"
SRCRPMDIR="${TOPSRCRPMDIR}/${SUBDIR}"

[ -d "${BUILDDIR}" ] || mkdir "${BUILDDIR}"
[ -d "${BUILDROOTDIR}" ] || mkdir "${BUILDROOTDIR}"

set -x
(
rpmbuild -ba \
	${ARGS} \
	--define "_specdir ${SOURCEDIR}" \
	--define "_sourcedir ${SOURCEDIR}" \
	--define "_builddir ${BUILDDIR}" \
	--define "_buildrootdir ${BUILDROOTDIR}" \
	--define "tde_prefix ${PREFIX:-/opt/trinity}" \
	--define "version ${VERSION:-3.5.13.2}" \
	--define "preversion ${PREVERSION}" \
	"${SOURCEDIR}/${SPEC}"
	echo "RET=$?"
) 2>&1 | tee ${LOGFILE}
eval "$(grep ^RET= ${LOGFILE})"

# Removes temporary source directory
rm -rf "${SOURCEDIR}"

if [ "${RET}" -gt 0 ]; then
	exit ${RET}
fi
set +x

if grep -q "error: Failed build dependencies:" ${LOGFILE}; then
#	DEPS=$( sed -n -e "/.* is needed by .*/ s/^[ \t]*\([a-zA-Z2-9_-]*\) .*/\1/p" ${LOGFILE} )
	set $( grep " is needed by " ${LOGFILE} | cut -d " " -f1 )
	exit 2
fi

rm -rf "${SOURCEDIR}"

# Removes BUILDDIR if build succeeded
rm -rf "${BUILDDIR}/"*${COMP##*/}-${VERSION}*