From: dtrg Date: Fri, 24 Jun 2005 22:13:57 +0000 (+0000) Subject: Created new tool to generate distributions. X-Git-Tag: release-5-6~3 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=adb3cc5523179e936c9409a6cf1c1ca31bc6fb1d;p=ack.git Created new tool to generate distributions. --- diff --git a/distr/mkdist b/distr/mkdist new file mode 100755 index 000000000..43ea29a49 --- /dev/null +++ b/distr/mkdist @@ -0,0 +1,163 @@ +#!/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 The CVS tree to read from. (default: CWD)" + echo " -d --destdir 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 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. +#