#!/bin/sh

# XXX merge with makeworld?

usage () {
  echo "usage: mkbindist <arch> <branch> <buildid>"
  exit 1
}

cleandir() {
    dir=$1
    rm -rf ${dir} 2>/dev/null
    if [ -d ${dir} ]; then
	chflags -R noschg ${dir}
	rm -rf ${dir}
    fi
}

if [ $# -lt 3 ]; then
  usage
fi

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

pb=/var/portbuild
. ${pb}/${arch}/portbuild.conf

. ${pb}/scripts/buildenv

if ! validate_env ${arch} ${branch}; then
    echo "Invalid build environment ${arch}/${branch}"
    exit 1
fi

here=${pb}/${arch}/${branch}/builds/${buildid}
if [ ! -d ${here} ]; then
    echo "Invalid build ID ${buildid}"
    exit 1
fi

tmpdir=${here}/bindist/tmp

# Clean up ${tmpdir}
cleandir ${tmpdir}
mkdir -p ${tmpdir}

# Copy the files into the tmpdir from an existing built world
cd ${worlddir}; find -dx . | \
    grep -v -E '^./usr/(local|obj|opt|ports|src)' | \
    grep -v '^./home' | \
    grep -v '^./var/db/pkg' | \
    cpio -dump ${tmpdir}

cd ${tmpdir}

# Customize the tmpdir
if [ -s "${here}/bindist/delete" ]; then
  sed -e "s,^,${tmpdir}," ${here}/bindist/delete | xargs rm -rf
fi
if [ -s "${here}/bindist/dirlist" ]; then
  cat "${here}/bindist/dirlist" | xargs mkdir -p 
fi
cd ${here}/bindist/files; find -dx . | cpio -dump ${tmpdir}

# Post-processing of installed world
date '+%Y%m%d' > ${tmpdir}/var/db/port.mkversion

# Create the tarball
tar cfCj ${here}/.bindist.tbz ${tmpdir} .
mv -f ${here}/.bindist.tbz ${here}/bindist.tbz
md5 ${here}/bindist.tbz > ${here}/bindist.tbz.md5

# Clean up
cd ${here}
cleandir ${tmpdir}
