[armedbear-cvs] r12046 - trunk/abcl

Mark Evenson mevenson at common-lisp.net
Tue Jul 14 09:42:14 UTC 2009


Author: mevenson
Date: Tue Jul 14 05:42:14 2009
New Revision: 12046

Log:
Shell script interface to building ABCL from within another Lisp. (Tobias Rittweiler)

Tested from SBCL, CLISP, and CCL.


Added:
   trunk/abcl/build-from-lisp.sh   (contents, props changed)
Modified:
   trunk/abcl/CHANGES
   trunk/abcl/README

Modified: trunk/abcl/CHANGES
==============================================================================
--- trunk/abcl/CHANGES	(original)
+++ trunk/abcl/CHANGES	Tue Jul 14 05:42:14 2009
@@ -2,6 +2,7 @@
   Summary of changes:
   * Implementation of Franz Allegro CL Gates MP primitive (Tobias Rittweiler).
   * improve performance of CLOS eql-specializers (Anton Vodonosov).
+  * 'build-from-lisp.sh' shell script (Tobias Rittweiler).
   
 Version 0.15.0
 (07 Jun, 2009) 

Modified: trunk/abcl/README
==============================================================================
--- trunk/abcl/README	(original)
+++ trunk/abcl/README	Tue Jul 14 05:42:14 2009
@@ -61,26 +61,26 @@
 directory containing this README file, editing to suit your situation,
 paying attention to the comments in the file.
 
-Start up one of the supported Common Lisp implementations in the
-directory containing this README file.
 
-Load build-abcl.lisp:
+Use ./build-from-lisp.sh <lisp-of-choice>, e.g.
 
-    (load "build-abcl.lisp")
-
-Then do:
-
-    (build-abcl:build-abcl :clean t :full t)
-
-Wait for the build to finish and exit the host Lisp.
+  ./build-from-lisp.sh sbcl
 
 Use abcl.bat on Windows or ./abcl on Unix to start ABCL.
 Note: abcl.bat and abcl contain absolute paths, so you'll need
 to edit them if you move things around after the build.
 
+
+If you're developing on ABCL, you may want to use
+
+  ./build-from-lisp.sh <implementation> --clean=nil
+
+to not do a full rebuild.
+
+
 In case of failure in the javac stage, you might try this:
 
-    (build-abcl:build-abcl :clean t :full t :batch nil)
+  ./build-from-lisp.sh <implementation> --full=t --clean=t --batch=nil
 
 This invokes javac separately for each .java file, which avoids running
 into limitations on command line length (but is a lot slower).

Added: trunk/abcl/build-from-lisp.sh
==============================================================================
--- (empty file)
+++ trunk/abcl/build-from-lisp.sh	Tue Jul 14 05:42:14 2009
@@ -0,0 +1,131 @@
+#!/bin/bash
+# $Id$
+#
+# Build ABCL from a supported Lisp
+
+usage()
+{
+   echo "$0 <implementation> [[ --clean=T | --full=T | --batch=NIL ]]"
+}
+
+if [ -z "$1" ]; then
+    usage
+    exit 1
+fi
+
+check_boolean()
+{
+    if [ "$1" == "t" ]   || \
+       [ "$1" == "T" ]   || \
+       [ "$1" == "nil" ] || \
+       [ "$1" == "NIL" ]
+    then
+        return
+    else
+        usage
+        echo "Error: Argument \`$1' is neither \"nil\" nor \"t\"."
+        exit 1
+    fi
+}
+
+IMPL="$1"
+TEMP=$(getopt --long clean:,full:,batch: -n "$0" -- "$@") 
+
+if [ $? != 0 ] ; then 
+    usage 
+    exit 1
+fi
+eval set -- "$TEMP"
+
+CLEAN="t"
+FULL="t"
+BATCH="t"
+
+while true ; do
+    case "$1" in
+        --clean) 
+            check_boolean "$2"
+            CLEAN="$2" 
+            shift 2 
+            ;;
+        --full)  
+            check_boolean "$2"
+            FULL="$2"
+            shift 2 
+            ;;
+        --batch) 
+            check_boolean "$2"
+            BATCH="$2" 
+            shift 2 
+            ;;
+        --) shift; break ;;
+        *)  echo "Internal error!" ; exit 1 ;;
+        esac
+done
+
+FORM="(build-abcl:build-abcl :clean $CLEAN :full $FULL :batch $BATCH)"
+FILE="build-abcl.lisp"
+
+
+abcl()
+{
+    exec "$1" --load "$2" --eval "(progn $3 (ext:quit))"
+}
+
+clisp()
+{ 
+    exec "$1" -ansi -q -norc -i "$2" -x "(progn $3 (ext:quit)"
+}
+
+sbcl()
+{
+    exec "$1" --no-userinit --load "$2" --eval "(progn $3 (sb-ext:quit))"
+}
+
+cmucl()
+{
+    exec "$1" -noinit -load "$2" -eval '(setq *load-verbose* nil)' \
+                                 -eval "(progn $3 (ext:quit))"
+}
+
+ccl()
+{
+    exec "$1" -Q --no-init --load "$2" --eval "(progn $3 (ccl:quit))"
+}
+
+notimplemented()
+{
+    usage
+    echo "Error: The build script does not currently support $1."
+    echo "It's easy to change, though. Look at $0, and send a patch!"
+    exit 1
+}
+
+
+
+# We pass along and execute "$1" so users can pass "sbcl-cvs"
+# etc. instead of "sbcl".
+
+case "$IMPL" in
+    abcl*)
+        abcl  "$IMPL" "$FILE" "$FORM"          ;;
+    clisp*)
+        clisp "$IMPL" "$FILE" "$FORM"          ;;
+    sbcl*)
+        sbcl  "$IMPL" "$FILE" "$FORM"          ;;
+    lisp)
+        cmucl "$IMPL" "$FILE" "$FORM"          ;;   
+    ccl*)
+        ccl   "$IMPL" "$FILE" "$FORM"          ;;
+    gcl*)
+        notimplemented "$IMPL" "$FILE" "$FORM" ;;
+    ecl*)
+        notimplemented "$IMPL" "$FILE" "$FORM" ;;
+    alisp*)
+        notimplemented "$IMPL" "$FILE" "$FORM" ;;
+    *)
+        usage; 
+        echo "Error: Unrecognized implementation: $IMPL"
+        exit 1 
+        ;;
+esac
\ No newline at end of file




More information about the armedbear-cvs mailing list