#! /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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
#

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
