#!/bin/sh
#
# $Schmonz: bootstrap,v 1.4 2002/07/21 02:04:53 schmonz Exp $

die()
{
	echo >&2 "$@"
	exit 1
}

assert_fs_case_sensitivity()
{
	dir="$1"
	testdir="pkgsrc-REQUIRES-case-SENSITIVE-filesystem"
	testdir_mangled="`echo $testdir | tr '[a-z]' '[A-Z]'`"
	sudo mkdir -p "$dir/$testdir" \
		|| die "can't verify filesystem case-sensitivity"
	if [ -d "$dir/$testdir_mangled" ]; then
		sudo rmdir "$dir/$testdir"
		die "\"$dir\" needs to be on a case-sensitive filesystem (see README)"
	fi
	sudo rmdir "$dir/$testdir"
}

setpaths()
{
	pkgdir=/usr/pkg; pkgdbdir=/var/db/pkg; pkgsrcdir=/pkgsrc

	while [ $# -gt 0 ]; do
		case "$1" in
		--pkgdir=*)	pkgdir="`echo $1 | sed -e 's|--pkgdir=||'`" ;;
		--pkgdbdir=*)	pkgdbdir="`echo $1 | sed -e 's|--pkgdbdir=||'`" ;;
		--pkgsrcdir=*)	pkgsrcdir="`echo $1 | sed -e 's|--pkgsrcdir=||'`" ;;
		esac
		shift
	done

	for i in "$pkgdir" "$pkgdbdir" "$pkgsrcdir"; do
		assert_fs_case_sensitivity "$i"
	done
}

bootstrap_bmake()
{
	# clean
	sudo rm -rf bmake

	# fetch
	if [ ! -f bmake-3.1.12.tar.gz ]; then
		./bin/bootstrap-fetch \
			ftp://ftp.netbsd.org/pub/incoming/sjg/bmake-3.1.12.tar.gz \
			|| die "can't fetch bmake distribution"
	fi

	# checksum
	sha1_pkgsrc=`awk '/^SHA1 \(bmake-3\.1\.12\.tar\.gz\) =/ {print $4}' \
		$pkgsrcdir/devel/bmake/distinfo`
	sha1_distfile=`./bin/bootstrap-digest sha1 bmake-3.1.12.tar.gz | \
		awk '{print $4}'`
	[ "$sha1_pkgsrc" = "$sha1_distfile" ] \
		|| die "checksums don't match!"

	# extract
	tar xzf bmake-3.1.12.tar.gz

	# build and install
	( cd bmake
		tar xzf ../mk-20011104.tar.gz )
	( cd bmake/mk
		sudo cp bsd.*.mk $pkgdir/share/mk
		sudo cp ../../Darwin.sys.mk $pkgdir/share/mk/sys.mk )
	( cd bmake
		./configure --prefix=$pkgdir --with-default-sys-path=$pkgdir/share/mk \
			|| die "can't configure bmake"
		make -f makefile.boot bootstrap \
			|| die "can't make bmake"
		sudo env BINDIR=$pkgdir/bin ./bmake -f Makefile install \
			|| die "can't install bmake" )
}

install_package()
{
	package=$1
	( cd $pkgsrcdir/*/$package
		bmake clean && bmake \
			|| die "can't make $package"
		bmake install \
			|| die "can't install $package"
		bmake clean )
}

frob_environment()
{
	PATH="$pkgdir/bin:$PATH"		; export PATH
	PKG_DBDIR="$pkgdbdir"			; export PKG_DBDIR
	LOCALBASE="$pkgdir"			; export LOCALBASE
	FETCH_CMD="`./bin/bootstrap-fetch`"	; export FETCH_CMD
}

print_config_reminder()
{
	echo "We seem to have installed everything properly. Before using pkgsrc,"
	echo ""
	echo "- prepend \"$pkgdir/bin:$pkgdir/sbin\" to your PATH environment variable"
	echo "- prepend \"$pkgdir/man\" to your MANPATH environment variable"
	echo "- set your PKG_DBDIR environment variable to \"$PKG_DBDIR\""
	echo "- set LOCALBASE=\"$LOCALBASE\" in /etc/mk.conf"
}

mkdirs()
{
	sudo mkdir -p \
		$pkgdir/lib \
		$pkgdir/man/man1 \
		$pkgdir/man/cat1 \
		$pkgdir/share/mk
}

main()
{
	setpaths $@

	if [ $# -eq 1 ]; then
		frob_environment
		$1
	else
		mkdirs
		bootstrap_bmake
		frob_environment

		# echo "PLEASE IGNORE ANY ERRORS YOU GET WHEN INSTALLING THIS PACKAGE"
		# echo "THEY HAPPEN BECAUSE THE PKG_INSTALL TOOLS ARE NOT YET BUILT"
		NO_PKG_REGISTER=true; export NO_PKG_REGISTER
		install_package digest
		unset NO_PKG_REGISTER
		sudo rm -rf $pkgdbdir/digest-* $pkgdbdir/pkgdb.byfile.db

		install_package pkg_install
		install_package digest
		install_package lukemftp

		print_config_reminder
	fi
}

main "$@"
exit $?

# TODO:
# - double-quote everything
