#!/bin/sh -e

VERSION="fiasco-1.0"
CURRDIR=$(pwd)
SCRATCH="$CURRDIR/release-build"
WORKDIR="$SCRATCH/$VERSION"
KBLDDIR="$WORKDIR/l4/kernel/fiasco/build"

KERNPKG="l4/kernel/fiasco"
USERPKG="l4/Makeconf l4/mk l4/pkg/Makefile l4/pkg/l4sys l4/pkg/l4util l4/pkg/oskit_support l4/pkg/crtx l4/pkg/sigma0 l4/pkg/rmgr l4/pkg/hello l4/tool/preprocess/src/preprocess"
OSKTPKG="oskit"
CVSHOME="/home/cvs"
EXCLUDE="$SCRATCH/exclude.$$"

umask 022

trap "rm -rf $EXCLUDE && exit 1" 1 2 15
trap "rm -rf $EXCLUDE && exit 0" 0

if [ -d "$SCRATCH" ];
then
  echo "$SCRATCH exists, please remove it bevore calling $0."
  exit 1
fi

# Create a temporary working directory
mkdir -p $SCRATCH
mkdir -p $WORKDIR

# Create file blacklist
echo '*CVS*'       > $EXCLUDE
echo '.cvsignore' >> $EXCLUDE

# Check out Userland stuff
(cd $WORKDIR && cvs -d $CVSHOME co $OSKTPKG $USERPKG)

# Specify interface versions
echo "BUILD_SYSTEMS := x86_586-l4v2 x86_586-l4x0" >> $WORKDIR/l4/Makeconf.local

# Create OSKit archive
cat << EOF > $WORKDIR/oskit/README.oskit
This is TU Dresden's repackaged version of OSKit.  For more
information on the OSKit please visit
<URL:http://www.cs.utah.edu/flux/oskit/>.

This version has been derived from the 0.60 alpha version of OSKit.
It has been enhanced with some public patches posted to the
oskit-users mailing list (improved support for remote debugging, some
bug fixes).

The Fiasco Team
EOF
(cd $SCRATCH && tar -X $EXCLUDE -cvpf $VERSION-oskit.tar $VERSION/oskit)

# Create Userland archive
(cd $SCRATCH && tar -X $EXCLUDE -cvpf $VERSION.tar $VERSION/l4)

# Build OSKIT
(cd $WORKDIR/oskit && ./configure && make)

# Build Userland
make -C $WORKDIR/l4/pkg

# Add L4 binaries to archive
( cd $SCRATCH &&					\
  tar -rvpf $VERSION.tar				\
  	$VERSION/l4/bin/x86_586/*/sigma0		\
	$VERSION/l4/bin/x86_586/*/sigma0-ux		\
	$VERSION/l4/bin/x86_586/*/rmgr			\
	$VERSION/l4/bin/x86_586/*/rmgr-ux		\
	$VERSION/l4/bin/x86_586/*/hello			\
)

# Check out Kernel stuff
(cd $WORKDIR && cvs -d $CVSHOME co $KERNPKG)

# Setup Kernel build dir
mkdir -p $KBLDDIR
cp $WORKDIR/l4/kernel/fiasco/src/templates/Makefile.builddir.templ $KBLDDIR/Makefile

# mv README down to root of the archive so that users have something to read
# if they cd into fiasco-*
mv $WORKDIR/l4/kernel/fiasco/README $WORKDIR
(cd $SCRATCH && tar -rvpf $VERSION.tar $VERSION/README)

# Add kernel to archive
(cd $SCRATCH && tar -X $EXCLUDE -rvpf $VERSION.tar $VERSION/l4/kernel/fiasco)

( cd $SCRATCH
  # *zip the dang thing
  gzip  -c9 $VERSION.tar        > $VERSION.tar.gz
  gzip  -c9 $VERSION-oskit.tar  > $VERSION-oskit.tar.gz
  bzip2 -9  $VERSION.tar
  bzip2 -9  $VERSION-oskit.tar

  # Checksums for everyone
  md5sum $VERSION.tar.gz        >> $VERSION.tar.gz.md5
  md5sum $VERSION.tar.bz2       >> $VERSION.tar.bz2.md5
  md5sum $VERSION-oskit.tar.gz	>> $VERSION-oskit.tar.gz.md5
  md5sum $VERSION-oskit.tar.bz2	>> $VERSION-oskit.tar.bz2.md5
)

# Clean up
rm -rf $WORKDIR
rm -rf $KBLDDIR

echo Done!
