#!/bin/sh

wordy=0
srcDir=/cs/x33
destDir=

while [ $# -gt 0 ]
do
    case $1 in
	-h) echo "usage: $0 [ -v ] [ -s source_dir ] -d destination_dir"
	    echo "       builds a distribution in <destination_dir> and a compressed"
	    echo "       tar file of the distribution in <destination_dir>/../xkernel.tar.Z"
	    exit 0
	    ;;
        -v) wordy=1 ;;
	-s) shift ; srcDir=$1 ;;
	-d) shift ; destDir=$1 ;;
	 *) echo "**** invalid argument ****"
	    echo "usage: $0 [ -v ] [ -s source_dir ] -d destination_dir"
	    exit 1
	    ;;
    esac
    shift
done

if [ "$destDir" = "" ]
then
    echo "**** no destination directory specified ****"
    echo "usage: $0 [ -v ] [ -s source_dir ] -d destination dir"
    exit 1
fi

if [ $wordy -ne 0 ]
then
    echo "source directory = $srcDir; destination directory = $destDir"
fi

# *** Build a mirror copy of /cs/x33. ***

if mkdir $destDir
then :
else
    echo "ERROR: mkdir failed"
    exit 1
fi

if [ $wordy -ne 0 ]
then
    cd $srcDir ; tar cf - . | ( cd $destDir ; tar xvf - )
else
    cd $srcDir ; tar cf - . | ( cd $destDir ; tar xf - )
fi

cd $destDir

# *** Trim the directory tree. ***

# Delete individual's build directories under user_level & simulator.

( cd user_level/build ; \
  mv Template .. ;      \
  rm -rf * ;            \
  mv ../Template .      )

( cd simulator/build ; \
  mv Template .. ;     \
  rm -rf * ;           \
  mv ../Template .     )

# Delete stand_alone.

( rm -rf stand_alone )

# Delete unsupported platforms

( rm -rf user_level/platforms/paragon-i860 )
( rm -rf bin/paragon-i860 )
( rm -rf bin/scout-alpha )

# Delete unsupported library routines

#( cd lib;                 \
#  rm -rf pthreads;        \
#  rm -rf scout-alpha;     \
#  rm -rf include/pthread* )  

# Delete all object files, compose files, dependency files and libraries.

find . -name OBJS     -exec rm -rf {} \; > /dev/null 2>&1
find . -name COMS     -exec rm -rf {} \; > /dev/null 2>&1 
find . -name DEPS     -exec rm -rf {} \; > /dev/null 2>&1 
find . -name \*.o     -exec rm -f  {} \;
find . -name lib\*_\* -exec rm -f  {} \;

# Delete newObjectList.* files and backup files.

find . -name newObjectList.\* -exec rm -f {} \;
find . -name \*\~ -exec rm -f {} \;

# In doc directory, keep source, .dvi and .ps files, and http directories
# (manual/manual, tutorial/tutorial, simulator/xsim).

( cd doc/begin     ; make clean > /dev/null 2>&1 )
( cd doc/idmap     ; make clean > /dev/null 2>&1 )
( cd doc/manual    ; make clean > /dev/null 2>&1 )
( cd doc/message   ; make clean > /dev/null 2>&1 )
( cd doc/simulator ; make clean > /dev/null 2>&1 )
( cd doc/tutorial  ; make clean > /dev/null 2>&1 )

# *** Check out (co) latest of everything. ***

set `find . -name RCS -print`
for dir
do
    if [ ! -d $dir ]
    then
        echo "WARNING: $dir is not a directory"
        continue
    fi
    if [ $wordy -ne 0 ]
    then
        echo "checking $dir"
    fi
    ( cd `dirname $dir`
      files=RCS/*
      if [ "$files" = "'RCS/*'" ]
      then
          echo "WARNING: no files in $dir"
          goto abort
      fi
      for f in RCS/* ; do
          if [ $wordy -ne 0 ]
          then
              echo $f
          fi
          if rcsdiff $f > /dev/null 2>&1
          then
              if [ $wordy -ne 0 ]
              then
                  echo "`dirname $dir`/$f already current"
              fi
          else
              if co $f < /dev/null > /dev/null 2>&1
              then
                  if [ $wordy -ne 0 ]
                  then
                      echo "New version of `dirname $dir`/$f checked out"
                  fi
              else
                  echo "WARNING: couldn't extract `dirname $dir`/$f"
              fi
          fi
      done )
done

# Then delete RCS directories.

find . -name RCS -exec rm -rf {} \; > /dev/null 2>&1

# Delete unnecessary executables from bin directory.

( cd bin ;                                                           \
  rm -r compileback compilehere genProtComposeFiles genrom.awk ;     \
  rm -r gethere isasymlink mothball putback rmlink ;                 \
  rm -r */pfakeether */phostnumber */pnetnum */promfile */random_int )

# *** Tar it up. ***

if [ $wordy -ne 0 ]
then
    tar cvf ../xkernel.tar *
else
    tar cf ../xkernel.tar *
fi

compress ../xkernel.tar

exit 0
