164 lines
3.2 KiB
Plaintext
164 lines
3.2 KiB
Plaintext
|
#!/bin/sh
|
||
|
# $Source$
|
||
|
# $State$
|
||
|
|
||
|
# Set up default variables.
|
||
|
|
||
|
destdir=
|
||
|
srcdir=`pwd`
|
||
|
arch=/usr/local/bin/arch
|
||
|
delete=no
|
||
|
copy=ln
|
||
|
|
||
|
# --- Options parsing -------------------------------------------------------
|
||
|
|
||
|
while [ "$1" != "" ]; do
|
||
|
case "$1" in
|
||
|
-s|--srcdir)
|
||
|
srcdir="$2"
|
||
|
shift
|
||
|
;;
|
||
|
|
||
|
-d|--destdir)
|
||
|
destdir="$2"
|
||
|
shift
|
||
|
;;
|
||
|
|
||
|
-x|--delete)
|
||
|
delete=yes
|
||
|
;;
|
||
|
|
||
|
-c|--copy)
|
||
|
copy="cp -dp"
|
||
|
;;
|
||
|
|
||
|
-a|--arch)
|
||
|
arch="$2"
|
||
|
shift
|
||
|
;;
|
||
|
|
||
|
-h|--help)
|
||
|
echo "mkdist [options]"
|
||
|
echo "Options are:"
|
||
|
echo " -s --srcdir <path> The CVS tree to read from. (default: CWD)"
|
||
|
echo " -d --destdir <path> The directory to create the distribution in."
|
||
|
echo " -x --delete Erase the destination directory first."
|
||
|
echo " -c --copy Make physical copies of the files. (default: hardlink)"
|
||
|
echo " -a --arch <path> Where the ACK 'arch' tool is."
|
||
|
echo " -h --help Display this message."
|
||
|
exit 0
|
||
|
;;
|
||
|
|
||
|
*)
|
||
|
echo "Unrecognised option. Try --help for help."
|
||
|
exit 1
|
||
|
esac
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
if [ "$destdir" == "" ]; then
|
||
|
echo "You must specify a destination directory. (Try --help for help.)"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# --- Main routines ---------------------------------------------------------
|
||
|
|
||
|
# These two routines do the work of traversing the source tree and building
|
||
|
# the distribution tree.
|
||
|
|
||
|
addfile() {
|
||
|
local f
|
||
|
f="${1##$srcdir/}"
|
||
|
mkdir -p $destdir/`dirname $f`
|
||
|
$copy "$1" "$destdir/$f"
|
||
|
}
|
||
|
|
||
|
process_dir() {
|
||
|
local path
|
||
|
local archivename
|
||
|
|
||
|
path=$1
|
||
|
cd $path
|
||
|
|
||
|
# Look for a LIST file and cache the first line.
|
||
|
|
||
|
archivename=
|
||
|
if [ -f LIST ]; then
|
||
|
archivename=`head -1 LIST`
|
||
|
fi
|
||
|
|
||
|
for i in `cat $path/.distr`; do
|
||
|
if [ -d $i ]; then
|
||
|
# This is a directory. Recurse into it.
|
||
|
|
||
|
( process_dir $path/$i )
|
||
|
elif [ -f $i ]; then
|
||
|
# This is a file.
|
||
|
|
||
|
addfile $path/$i
|
||
|
elif [ "$i" = "$archivename" ]; then
|
||
|
# Build the named archive.
|
||
|
|
||
|
$arch cDr `cat LIST`
|
||
|
addfile $path/$archivename
|
||
|
else
|
||
|
(
|
||
|
PATH=$PATH:.
|
||
|
export PATH
|
||
|
make distr || make $i || (
|
||
|
echo "Don't know what to do with $i, listed in $1/.distr."
|
||
|
exit 1
|
||
|
)
|
||
|
|
||
|
if [ ! -f "$path/$i" ]; then
|
||
|
echo "Make failed for $i, listed in $path/.distr"
|
||
|
exit 1
|
||
|
fi
|
||
|
addfile $path/$i
|
||
|
)
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
# --- Main program ----------------------------------------------------------
|
||
|
|
||
|
# Test to make sure that $arch points to the right thing.
|
||
|
|
||
|
if !(strings $arch | grep archiver > /dev/null); then
|
||
|
echo "$arch does not seem to point at the ACK archiver tool."
|
||
|
echo "(Don't confuse this with the Linux tool for displaying your"
|
||
|
echo "architecture.)"
|
||
|
echo ""
|
||
|
echo "Press RETURN to go ahead anyway, or CTRL+C to abort."
|
||
|
read
|
||
|
fi
|
||
|
|
||
|
# Actually do the work.
|
||
|
|
||
|
echo "Creating distribution from CVS tree: $srcdir"
|
||
|
echo " into destination tree: $destdir"
|
||
|
echo ""
|
||
|
|
||
|
if [ -e $destdir ]; then
|
||
|
if [ "$delete" == "yes" ]; then
|
||
|
echo "Press RETURN to erase $destdir and its contents, or CTRL+C to abort."
|
||
|
read
|
||
|
echo "Erasing..."
|
||
|
rm -rf "$destdir"
|
||
|
else
|
||
|
echo "$destdir exists. Aborting."
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
echo "Working..."
|
||
|
mkdir -p $destdir
|
||
|
process_dir $srcdir
|
||
|
echo "Done."
|
||
|
|
||
|
# Revision history
|
||
|
# $Log$
|
||
|
# Revision 1.1 2005-06-24 22:13:57 dtrg
|
||
|
# Created new tool to generate distributions.
|
||
|
#
|