#!/bin/sh

# This script makes binary and source RPMs and puts them in the current 
# directory.

name=`basename $0`

function usage() {
	echo >&2 "usage: $name [-home]"
	exit 1
}

home='no'
while [ "$#" -gt 0 ]; do
	case "$1" in
	-home)
		home='yes'
		shift
		;;
	*)
		usage
		;;
	esac
done

version=`date +%Y%m%d`
release="1"
package="mlton-$version-$release"

echo 'Cleaning up'
cd `dirname $0`'/..'
rm -rf rpms
mkdir -p rpms
cd rpms
root=`pwd`
src="$root/SOURCES/mlton-$version/src"
mkdir -p BUILD RPMS/i386 SOURCES SPECS SRPMS

echo 'Checking out sources'
cd $root/SOURCES
mkdir mlton-$version
cd mlton-$version
mkdir bin lib include
cvs -Q co -d src mlton
if [ ! -d src/basis-library ]; then
	echo >&2 'Could'\''t check out sources.'
	exit 1
fi
cvs -Q release src
find src -type d | grep CVS | xargs rm -rf
find src -type f | grep cvsignore | xargs rm -f

function doInst() {
	sed "s/\(.*\)VERSION\(.*\)/\1$version\2/" <$1 >z
	mv z $1
}
	
function instantiate() {
	echo 'Instantiating version numbers'
	for f in web/index.html web/download.html user-guide/macros.tex \
	 		ANNOUNCE CHANGES README; do
		doInst $f
	done
}
cd $src/doc
instantiate
doInst ../mlton/control/control.sml
sed "/^Version:/s;.*;Version: $version;" <mlton.spec >z
sed "/^Release:/s;.*;Release: $release;" <z >$root/SPECS/mlton.spec
rm -f z

manvers=`date '+%B %d, %Y'`
cd $src/man
for f in mlprof.1 mlton.1; do
	sed "s/\(.*\)VERSION\(.*\)/\1$manvers\2/" <$f >z
	mv z $f
done

echo 'Creating source tgz'
cd $root/SOURCES
tar.write mlton-$version | gzip >mlton-$version.tgz
rm -rf mlton-$version

echo 'Building rpms'
(
	export HOME="$root"
	echo "%_topdir $root" >$root/.rpmmacros
	time rpm -ba --quiet --clean --buildroot $root/install \
		$root/SPECS/mlton.spec
	touch $root/RPMS/i386/$package.i386.rpm $root/SRPMS/$package.src.rpm
)

echo 'Cleaning up'
cd $root
cp -p RPMS/i386/$package.i386.rpm SRPMS/$package.src.rpm .
rm -rf install BUILD RPMS SOURCES SPECS SRPMS

if [ $home = 'yes' ]; then
	echo 'Building web home'
	cd $root
	cvs -Q co -d doc mlton/doc
	cvs -Q release doc
	cd doc
	instantiate
	cd web
	cvs -Q co -d benchmarks mlton/benchmark/tests
	cvs -Q release benchmarks
	find benchmarks -type d | grep CVS | xargs rm -rf
	cp -p ../CHANGES .
	(cd ../user-guide && make)
	gzip -c ../user-guide/main.ps >user-guide.ps.gz
	(cd ../user-guide/main && tar.write .) | 
		(mkdir HTML && cd HTML && tar.read)
	cp $root/$package.i386.rpm $root/$package.src.rpm .
	find . -type d | grep CVS | xargs rm -rf
	find . -type f | grep cvsignore | xargs rm -f
	echo '  Building tgz'
	tar.write -x Makefile . | gzip >$root/mlton-home.tgz
	rm -rf $root/doc
fi

echo 'Success'
