123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #!/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.2 2005-06-24 23:19:23 dtrg
- # Added new mkdist tool.
- #
- # Revision 1.1 2005/06/24 22:13:57 dtrg
- # Created new tool to generate distributions.
|