#!/bin/sh

if [[ ! -f /usr/share/common-lisp/source/cmucl-defsystem/defsystem.lisp ]] ; then
  cat <<EOF
$0: cannot find the defsystem source.
This should not happen. Please report this
as a bug.
EOF
  exit 0
fi

case ${0##*/} in
 cmucl-normal.sh)
 	echo CMUCL normal script.
	IMAGE=/usr/lib/cmucl/lisp-normal.core
	DIR=cmucl-normal
	;;
 cmucl-small.sh)
 	echo CMUCL small script.
	IMAGE=/usr/lib/cmucl/lisp-small.core
	DIR=cmucl-small
	;;
 cmucl-safe.sh)
 	echo CMUCL safe script.
	IMAGE=/usr/lib/cmucl/lisp-safe.core
	DIR=cmucl-safe
	;;
 *)
 	echo unknown CMUCL script call: $0
	exit 1
	;;
esac

case $1 in
    rebuild)
	    echo $0 rebuilding...
	    shift
	    while [ ! -z "$1" ] ; do
		echo rebuilding $1
		lisp -core $IMAGE -eval "
(let ((*gc-verbose* nil)
      (*compile-print* nil)
      (*compile-progress* nil)
      (*compile-verbose*  nil)
      (*require-verbose* nil)
      (*load-verbose* nil))
  (load \"/var/lib/cmucl/site-init.lisp\"))
(let ((*gc-verbose* nil)
      (*compile-print* nil)
      (*compile-progress* nil)
      (*compile-verbose*  nil)
      (*require-verbose* nil)
      (*load-verbose* nil)
      (mk::*load-source-if-no-binary* nil)
      (mk::*bother-user-if-no-binary* nil)
      (mk::*compile-during-load* t))

  (locally (declare (optimize (inhibit-warnings 3)))
    (mk:oos :$1 :compile :verbose nil)))
(quit)" -noinit #-batch -quiet 
		shift
 	    done 
	    ;;
     remove)
	    echo $0 removing packages...
	    shift
	    while [ ! -z "$1" ] ; do
		rm -rf "/usr/lib/common-lisp/$DIR/$1"
		shift
 	    done
	    rmdir /usr/lib/common-lisp/$DIR 2> /dev/null 
	    ;;
    *)
	    echo $0 unkown command $1
	    echo known commands: rebuild and remove
	    exit 1
	    ;;
esac

exit 0

