1#! /bin/bash -
2#
3# mkdist - make a distribution directory from a master manifest file
4#
5# usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-t] [-v] version
6#
7# SRCDIR defaults to src
8# MANIFEST defaults to $SRCDIR/MANIFEST
9#
10# Chet Ramey
11# chet@po.cwru.edu
12
13# Copyright (C) 1996-2002 Free Software Foundation, Inc.
14#
15#   This program is free software: you can redistribute it and/or modify
16#   it under the terms of the GNU General Public License as published by
17#   the Free Software Foundation, either version 3 of the License, or
18#   (at your option) any later version.
19#
20#   This program is distributed in the hope that it will be useful,
21#   but WITHOUT ANY WARRANTY; without even the implied warranty of
22#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23#   GNU General Public License for more details.
24#
25#   You should have received a copy of the GNU General Public License
26#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
27#
28
29SRCDIR=src
30ROOTNAME=bash
31
32usage()
33{
34	echo usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-t] [-v] version 1>&2
35	exit 2
36}
37
38vmsg()
39{
40	if [ -n "$verbose" ]; then
41		echo mkdist: "$@"
42	fi
43}
44
45while getopts m:s:r:tv name
46do
47	case $name in
48	m)	MANIFEST=$OPTARG ;;
49	s)	SRCDIR=$OPTARG ;;
50	r)	ROOTNAME=$OPTARG ;;
51	t)	maketar=yes ;;
52	v)	verbose=yes ;;
53	?)	usage ;;
54	esac
55done
56
57: ${MANIFEST:=$SRCDIR/MANIFEST}
58
59vmsg using $MANIFEST
60
61shift $(( $OPTIND - 1 ))
62
63if [ $# -lt 1 ]; then
64	usage
65fi
66
67version=$1
68newdir=${ROOTNAME}-$version
69
70tarfile=${newdir}.tar
71
72vmsg creating distribution for $ROOTNAME version $version in $newdir
73
74if [ ! -d $newdir ]; then
75	mkdir $newdir || { echo $0: cannot make directory $newdir 1>&2 ; exit 1; }
76fi
77
78dirmode=755
79filmode=644
80
81while read fname type mode
82do
83	[ -z "$fname" ] && continue
84
85	case "$fname" in
86	\#*)	continue ;;
87	esac
88
89	case "$type" in
90	d)	mkdir $newdir/$fname ;;
91	f)	cp -p $SRCDIR/$fname $newdir/$fname ;;
92	s)	ln -s $mode $newdir/$fname ; mode= ;;		# symlink
93	l)	ln $mode $newdir/$fname ; mode= ;;		# hard link
94	*)	echo "unknown file type $type" 1>&2 ;;
95	esac
96
97	if [ -n "$mode" ]; then
98		chmod $mode $newdir/$fname
99	fi
100
101done < $MANIFEST
102
103# cut off the `-alpha' in something like `2.0-alpha', leaving just the
104# numeric version
105#version=${version%%-*}
106
107#case "$version" in
108#*.*.*)	vers=${version%.*} ;;
109#*.*)	vers=${version} ;;
110#esac
111
112#echo $vers > $newdir/.distribution
113
114#case "$version" in
115#*.*.*)	plevel=${version##*.} ;;
116#*)	plevel=0 ;;
117#esac
118#[ -z "$plevel" ] && plevel=0
119#echo ${plevel} > $newdir/.patchlevel
120
121vmsg $newdir created
122
123if [ -n "$maketar" ]; then
124	tar cf ${tarfile} $newdir
125	gzip $tarfile
126	vmsg ${tarfile}.gz created
127fi
128
129exit 0
130