diff --git a/tools/compile-all b/tools/compile-all
index a93ca22666d4328fb6c09874829aeb1e1b3e015c..62adf33445f600e6511366910bf7ed23c148ffa3 100755
--- a/tools/compile-all
+++ b/tools/compile-all
@@ -1,59 +1,82 @@
-#!/bin/csh -f
+#!/bin/csh -fx
 #
-#  compile-all -- script to compile everything but PCL
+#  compile-all -- script to compile everything
 #
-# $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/tools/Attic/compile-all,v 1.1 1991/10/15 15:30:52 ram Exp $
+# $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/tools/Attic/compile-all,v 1.2 1991/11/26 22:10:18 wlott Exp $
 
 if ($#argv) then
 	set subdir = $argv[1]
 else
 	set subdir = alpha
 endif
-set lisp = /afs/cs/project/clisp/@sys/$subdir
 
-lisp -noinit << EOF
-(setf (search-list "target:") '("$lisp/"))
+set dest = /afs/cs/project/clisp/build/@sys/$subdir
+set src = /afs/cs/project/clisp/src/$subdir
+
+if ($?LISP) then
+	set lisp = $LISP
+else
+	set lisp = lisp
+endif
+
+if (-e $src/FEATURES) then
+	set features = (`cat $src/FEATURES`)
+else
+	set features = ()
+endif
+
+$lisp -noinit << EOF
+(setf *features* (list* $features *features*))
+(setf (search-list "target:") '("$dest/" "$src/"))
 (load "target:tools/setup")
 (comf "target:tools/setup")
 (comf "target:tools/rcs")
 (quit)
 EOF
 
-lisp -noinit << EOF
-(setf (search-list "target:") '("$lisp/"))
+$lisp -noinit << EOF
+(setf *features* (list* $features *features*))
+(setf (search-list "target:") '("$dest/" "$src/"))
 (load "target:tools/setup")
-(push :small *features*)
 (setf *interactive* nil *gc-verbose* nil)
 (load "target:tools/worldcom")
 (quit)
 EOF
 
-lisp -noinit << EOF
-(setf (search-list "target:") '("$lisp/"))
+$lisp -noinit << EOF
+(setf *features* (list* $features *features*))
+(setf (search-list "target:") '("$dest/" "$src/"))
 (setf (search-list "clx:") '("target:clx/"))
 (load "target:tools/setup")
-(push :small *features*)
 (setf *interactive* nil *gc-verbose* nil)
 (load "target:tools/clxcom")
 (quit)
 EOF
 
-lisp -noinit << EOF
-(setf (search-list "target:") '("$lisp/"))
+$lisp -noinit << EOF
+(setf *features* (list* $features *features*))
+(setf (search-list "target:") '("$dest/" "$src/"))
 (load "target:tools/setup")
-(push :small *features*)
 (setf *interactive* nil *gc-verbose* nil)
 (load "target:tools/hemcom")
 (quit)
 EOF
 
-lisp -noinit << EOF
-(setf (search-list "target:") '("$lisp/"))
+$lisp -noinit << EOF
+(setf *features* (list* $features *features*))
+(setf (search-list "target:") '("$dest/" "$src/"))
 (load "target:tools/setup")
-(push :small *features*)
 (setf *interactive* nil *gc-verbose* nil)
 (load "target:tools/comcom")
 (quit)
 EOF
 
+$lisp -noinit << EOF
+(setf *features* (list* $features *features*))
+(setf (search-list "target:") '("$dest/" "$src/"))
+(setf *gc-verbose* nil)
+(load "target:tools/pclcom")
+(quit)
+EOF
+
 echo "Done..."