#! /bin/bash -
#
# mkdist - make a distribution directory from a master manifest file
#
# usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-v] version
#
# SRCDIR defaults to src
# MANIFEST defaults to $SRCDIR/MANIFEST
#

SRCDIR=src
ROOTNAME=bash

usage()
{
	echo usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-v] version 1>&2
	exit 2
}

vmsg()
{
	if [ -n "$verbose" ]; then
		echo mkdist: "$@"
	fi
}

while getopts m:s:r:v name
do
	case $name in
	m)	MANIFEST=$OPTARG ;;
	s)	SRCDIR=$OPTARG ;;
	r)	ROOTNAME=$OPTARG ;;
	v)	verbose=yes ;;
	?)	usage ;;
	esac
done

: ${MANIFEST:=$SRCDIR/MANIFEST}

vmsg using $MANIFEST

shift $(( $OPTIND - 1 ))

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

version=$1
newdir=${ROOTNAME}-$version

vmsg creating distribution for version $version in $newdir

if [ ! -d $newdir ]; then
	mkdir $newdir || { echo $0: cannot make directory $newdir 1>&2 ; exit 1; }
fi

dirmode=755
filmode=644

while read fname type mode
do
	[ -z "$fname" ] && continue

	case "$fname" in
	\#*)	continue ;;
	esac

	case "$type" in
	d)	mkdir $newdir/$fname ;;
	f)	cp -p $SRCDIR/$fname $newdir/$fname ;;
	*)	echo "unknown file type $type" 1>&2 ;;
	esac

	if [ -n "$mode" ]; then
		chmod $mode $newdir/$fname
	fi

done < $MANIFEST

# cut off the `-alpha' in something like `2.0-alpha', leaving just the
# numeric version
#version=${version%%-*}

#case "$version" in
#*.*.*)	vers=${version%.*} ;;
#*.*)	vers=${version} ;;
#esac

#echo $vers > $newdir/.distribution

#case "$version" in
#*.*.*)	plevel=${version##*.} ;;
#*)	plevel=0 ;;
#esac
#[ -z "$plevel" ] && plevel=0
#echo ${plevel} > $newdir/.patchlevel

vmsg $newdir created

exit 0
