Created new tool to generate distributions.
authordtrg <none@none>
Fri, 24 Jun 2005 22:13:57 +0000 (22:13 +0000)
committerdtrg <none@none>
Fri, 24 Jun 2005 22:13:57 +0000 (22:13 +0000)
distr/mkdist [new file with mode: 0755]

diff --git a/distr/mkdist b/distr/mkdist
new file mode 100755 (executable)
index 0000000..43ea29a
--- /dev/null
@@ -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 <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.
+#