#!/bin/sh

#
# XXX lockfile and interlock with mkbindist to avoid overlapping
# builds

if [ $# -lt 3 ]; then
        echo "usage: makeworld arch branch buildid [args]"
        exit 1
fi

arch=$1
branch=$2
buildid=$3
shift 3

pb=/var/portbuild

builddir=${pb}/${arch}/${branch}/builds/${buildid}

. ${pb}/conf/server.conf
. ${pb}/conf/common.conf
. ${pb}/${arch}/portbuild.conf
# NB: we can't use buildenv because it sets ARCH and MACHINE_ARCH that
# confuses cross-builds

export TARGET_ARCH=${arch}
# Workaround needed for zfs - 20090321 erwin
export NO_FSCHG=1

client=0
nocvs=0

# optional arguments
while [ $# -gt 0 ]; do
  case "$1" in
    -client)
      client=1
      ;;
    -nocvs)
      nocvs=1
      ;;
    *)
      args="$1 ${args}"
      ;;
  esac
  shift
done

# XXX MCL I don't know what this is supposed to do.
if [ "$client" = "1" ]; then
	SRC_BASE=${pb}/${arch}/src-client
	shift 1
else
	SRC_BASE=${builddir}/src
	export __MAKE_CONF=/dev/null
fi
cd ${SRC_BASE}

if [ "$nocvs" = "0" ]; then
	echo "==> Updating source tree"
	eval tag=\$SRC_BRANCH_${branch}_TAG
  	cvs -Rq update -PdA -r ${tag} || exit $?
fi

echo "==> Starting make buildworld"
make buildworld ${args} || exit $?

echo "==> Cleaning up destdir"
destdir=${WORLDDIR}/${arch}/${branch}
rm -rf ${destdir}/
chflags -R noschg ${destdir}/
rm -rf ${destdir}/
mkdir -p ${destdir} || exit $?

echo "==> Starting make installworld"
if [ "$client" = "0" ]; then
	export NEWSPARC_TIMETYPE=__int64_t
	make installworld DESTDIR=${destdir} || exit $?

	echo "==> Starting make distribute"
	make DESTDIR=${destdir} distrib-dirs && \
	    make DESTDIR=${destdir} distribution || exit $?

else
	echo "==> Not doing installworld of client source tree"
fi
