--- /dev/null
+#!/bin/sh
+
+#
+# mkreef - build/tear down symbolic link farm for building perl
+#
+trap "echo $0: cleaning up temporary files f$$ d$$ $$...; rm -rf f$$ d$$ l$$; exit 1" 1 2 3 15
+
+# Process our arguments
+while test $# -gt 0; do
+ case "$1" in
+ -v*) verbosity=`echo "$1"|sed 's:^-v::'`
+ case "$verbosity" in
+ '') verbosity=shift ;;
+ esac
+ ;;
+ -l) mkreef=true
+ ;;
+ -R) rmreef=true
+ ;;
+ *) echo "$0: bad option '$1'"
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+# If neither symlinking nor removing those, abort.
+case "$mkreef$rmreef" in
+true) ;;
+*) echo "$0: Usage: $0 [-vverbosity] -l|-R"
+ echo "$0: -l: create symlinks, -R: remove symlinks"
+ echo "$0: verbosity"
+ echo "$0: 0 = silent (default), 1 = dots, 2 = added/removed symlinks,"
+ echo "$0: 3 = filenames, 4 = commands"
+ exit 1
+ ;;
+esac
+
+# Default verbosity.
+case "$verbosity" in
+[01234]) ;;
+*) verbosity=0 ;;
+esac
+
+# Prepare for sanity checks.
+case "$0" in
+*/*) myself=`basename $0`
+ # not all places have dirname(1)
+ dirname=`echo $0|sed 's:/'$myself'$::'`
+ ;;
+*) echo "$0: bad script $0"
+ exit 1
+ ;;
+esac
+
+case "$dirname" in
+'.'|'')
+ echo "$0: bad directory $dirname"
+ exit 1
+ ;;
+esac
+
+MANIFEST="$dirname/MANIFEST"
+
+# Sanity checks
+if test ! -f "$MANIFEST"; then
+ echo "$0: bad reef $dirname (no MANIFEST)"
+ exit 1
+fi
+
+if test ! -f "$dirname/perl.c"; then
+ echo "$0: bad reef $dirname (no perl.c)"
+ exit 1
+fi
+
+# Check whether we have symbolic links
+echo $$ > f$$
+rm -f l$$
+ln -s f$$ l$$ 2>/dev/null
+case "`cat l$$ 2>/dev/null`" in
+$$) ;;
+*) echo "$0: no symbolic links"
+ rm -f l$$ f$$
+ exit 1
+ ;;
+esac
+rm -f f$$
+
+# Check whether we can test for symbolic links
+case "$issymlink" in
+'') case "`test -L l$$ 2>/dev/null && echo L`" in
+ L) issymlink=-L ;;
+ esac
+ ;;
+esac
+case "$issymlink" in
+'') case "`test -h l$$ 2>/dev/null && echo h`" in
+ h) issymlink=-h ;;
+ esac
+ ;;
+esac
+rm -f l$$
+case "$issymlink" in
+'') echo "$0: no symbolic links testing"
+ exit 1
+ ;;
+esac
+
+# Very Basic Sanity Check
+if test ! "$issymlink" perl.c -a -f perl.c; then
+ echo "$0: this looks like the actual source directory"
+ exit 1
+fi
+
+# Check whether we can create directory hierarchies
+rm -rf d$$
+case "$mkdirhier" in
+'') mkdir -p d$$/d$$ 2>/dev/null
+ if test -d d$$/d$$; then
+ mkdirhier='mkdir -p'
+ fi
+ ;;
+esac
+case "$mkdirhier" in
+'') mkdirhier d$$/d$$ 2>/dev/null
+ if test -d d$$/d$$; then
+ mkdirhier='mkdirhier'
+ fi
+ ;;
+esac
+case "$mkdirhier" in
+'') echo "$0: no directory hierarchy creating"
+ exit 1
+ ;;
+esac
+
+# Check our echo flavour
+case `echo "ab\c"` in
+*c*) n=; c='\c' ;;
+*) n=-n; c='' ;;
+esac
+
+files=`wc -l < $MANIFEST`
+files=`echo $files`
+
+case "$verbosity" in
+[1234]) echo $n "$files files, $c"
+ case "$rmreef" in
+ true) echo $n "removing$c" ;;
+ *) echo $n "creating$c" ;;
+ esac
+ echo " symlinks and directories..."
+ ;;
+esac
+
+# Where are we?
+case "$PWD" in
+'') PWD=`pwd`
+ ;;
+esac
+case "$PWD" in
+'') echo "$0: cannot find current directory"
+ ;;
+esac
+
+# Final sanity checks
+if test $issymlink src; then
+ rm -f src 2>/dev/null
+fi
+if test -d src; then
+ echo "$0: src is a directory"
+ exit 1
+fi
+ln -s $dirname src || exit 1
+
+rm -rf d$$
+
+for i in `awk '{print $1}' $MANIFEST`
+do
+ case "$verbosity" in
+ 1) echo $n .$c ;;
+ 3) echo $i ;;
+ esac
+ case "$i" in
+ */*)
+ d=`echo $i|sed 's:/[^/]*$::'`
+ case "$rmreef" in
+ true) echo $d | awk -F/ '{for(i=$1 ne "" ? 1 : 2;i<=NF;i++){for(j=1;j<i;j++){printf("%s/", $j)}print $j}}' >> d$$
+ ;;
+ *) if test ! -d $d; then
+ test "$verbosity" = 3 && echo $mkdirhier $d
+ $mkdirhier $d
+ fi
+ ;;
+ esac
+ esac
+ case "$verbosity" in
+ 2) case "$rmreef" in
+ true) if test -f $i; then
+ echo $i
+ fi
+ ;;
+
+ *) if test ! -f $i; then
+ echo $i
+ fi
+ ;;
+ esac
+ ;;
+ 3) echo $i
+ ;;
+ esac
+ if test $issymlink $i; then
+ test "$verbosity" = 4 && echo rm -f $i
+ rm -f $i
+ fi
+ case "$rmreef" in
+ true) ;;
+ *) test "$verbosity" = 4 && echo ln -s $PWD/src/$i $i
+ ln -s $PWD/src/$i $i
+ ;;
+ esac
+done
+
+case "$verbosity" in
+1) echo ;;
+esac
+
+case "$rmreef" in
+true) for d in `sort -ur d$$`
+ do
+ if test -d $d; then
+ test "$verbosity" = 4 && echo rmdir $d
+ rmdir $d
+ fi
+ done
+ rm -f d$$
+ rm -f src
+ ;;
+esac
+
+exit 0