#!/bin/sh -e

VERSION="fiasco-1.1"
CURRDIR=$(pwd)
SCRATCH="$CURRDIR/release-build"
WORKDIR="$SCRATCH/$VERSION"
EXCLUDE="$SCRATCH/exclude.$$"
KBLDDIR="$WORKDIR/l4/kernel/fiasco/build"

CVSHOME="/home/cvs"
KERNPKG="l4/kernel/fiasco"
OSKTPKG="oskit"
USERPKG="$(echo	l4/COPYING l4/LICENSING l4/Makefile							\
		l4/mk											\
		l4/pkg/Makefile	l4/pkg/cxx								\
		l4/pkg/{crtx,l4sys,l4util,oskit_support}/{MAINTAINER,README,Makefile,include,lib}	\
		l4/pkg/rmgr/{MAINTAINER,README,Makefile,include,lib,server}				\
		l4/pkg/{sigma0,hello}/{MAINTAINER,README,Makefile,server}				\
		l4/tool/{config,gendep,preprocess/src/preprocess})"

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)

# 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)

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

# Configure and build L4 Userland
(cd $WORKDIR/l4 && cp mk/defconfig/config.arm .Makeconf.bid && make oldconfig && make)

# Add L4 binaries to archive
( cd $SCRATCH && tar -rvpf $VERSION.tar $VERSION/l4/bin )

# 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 and CHANGES down to root of the archive so that users have
# something to read when they cd into fiasco-*
mv $WORKDIR/l4/kernel/fiasco/README $WORKDIR/l4/kernel/fiasco/CHANGES $WORKDIR
(cd $SCRATCH && tar -rvpf $VERSION.tar $VERSION/README $VERSION/CHANGES )

# 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!
