#!/bin/sh
# This guy builds the Highlander, who ends up being the only one.

if   [ -n "$BLD_ROOT" ]; then	 ROOT="$BLD_ROOT" ;
elif [ -d /u1/olc ]; then	 ROOT="/u1/olc" ;
elif [ -d /var/local/olc ]; then ROOT="/var/local/olc" ;
elif [ -d /tmp/olc ]; then	 ROOT="/tmp/olc" ;
else				 ROOT="/tmp/olc" ; rm -f $ROOT ; mkdir $ROOT ;
fi
echo "[root = $ROOT]"

SRC=/mit/olcdev/highlander/src
DATE="`date +'%d%h%Y' | tr '[A-Z]' '[a-z]'`"
TIME="`date +'%T %Z'  | tr '[A-Z]' '[a-z]'`"
NEW_BLD="$ROOT/olc.$DATE"
BLD_PTR="$ROOT/OLC.current"

synctree="/usr/athena/etc/synctree -q"
configure=./configure
make=make
cc=${CC-gcc}
target=all

if [ -r "$BLD_PTR" ]; then
    . $BLD_PTR
else
    BLD="$NEW_BLD"
fi

cmdln="$0 $*"

CFLAGS="-g"; export CFLAGS
while [ "$#" -gt 0 -a -z "$DONE" ]; do
    case "$1" in
	-N|-ground-up)	BLD="$NEW_BLD" ; shift ;;
	-X|-remove-old)	rm -rf "$BLD" ; BLD="$NEW_BLD" ; shift ;;
	-f|-fast)	configure=: ; shift ;;
	-t|-tags)	target="TAGS $target" ; shift ;;
	-CC)		cc="$2" ; shift ; shift ;;
	-gnu|-gnu-gcc)	cc=/mit/gnu/bin/gcc ; shift ;;
	-ath|-syspack)	cc=/usr/gcc/bin/gcc ; shift ;;
	-cc)		cc=cc ; shift ;;
	-cflags)	CFLAGS="$2" ; shift ; shift ;;
	-Wall|-D*)	CFLAGS="$CFLAGS $1" ; shift ;;
	-purify)	PURIFY=purify ; shift ;;
	--)		DONE="yes" ; shift ;;
	-*)		echo "$0: invalid flag: $1"; exit 10 ;;
	 *)		DONE="yes" ;;
    esac
done

(echo "SRC='$SRC'"; echo "BLD='$BLD'"; echo "cc='$cc'") > $BLD_PTR

attach -q x11r5 motif1.2 wcl

if [ -f "$BLD" ]; then
    echo "$BLD already exists and is not a directory."; exit 1
fi

if [ -d "$BLD" ]; then
	echo "$BLD already exists, using it."
else
	echo "$BLD does not exist, creating it."
	mkdir "$BLD"
fi

echo "Running synctree..."
$synctree -s $SRC -d $BLD | egrep -v '^processing|^Parsing'

LOG="`pwd`/BUILD.`machtype`_`machtype -N`_`machtype -E`"
cd $BLD

CC="$cc"; export CC; echo "CC=$CC"
if [ "$configure" = ":" ]; then
    echo "Skipping configuration."
else
    echo "Configuring..."
    CONFIG_SITE=/afs/dev.mit.edu/source/src-current/packs/build/config.site \
	$configure --with-krb4=/usr/athena
fi

echo "Building the only one!"
echo $make $target CC="$cc" MAKE="$make" $PURIFY "$@"; echo
message=""

(echo "% $cmdln"; echo; \
 echo "built by `whoami`@`hostname` (`machtype -c`) on $DATE at $TIME"; echo) \
    > $LOG

status=`(($make $target CC="$cc" MAKE="$make" $PURIFY "$@" 2>&1; \
	  echo $? 1>&4) | tee -a $LOG) 4>&1 1>&2` ### KLUDGE...

if [ "$status" -ne 0 ]; then	echo "Oops, decapitated again. =(";
else				echo "There can be only one source tree!";
fi
