#! /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
#
# Chet Ramey
# chet@po.cwru.edu

# Copyright (C) 1996-2002 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.

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 $ROOTNAME 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 ;;
	s)	ln -s $mode $newdir/$fname ; mode= ;;		# symlink
	l)	ln $mode $newdir/$fname ; mode= ;;		# hard link
	*)	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
