Przeglądaj źródła

Created new tool to generate distributions.

dtrg 19 lat temu
rodzic
commit
38b87fe902
1 zmienionych plików z 163 dodań i 0 usunięć
  1. 163 0
      distr/mkdist

+ 163 - 0
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 <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.
+#