[armedbear-cvs] r13041 - trunk/abcl
Mark Evenson
mevenson at common-lisp.net
Sun Nov 21 19:40:28 UTC 2010
Author: mevenson
Date: Sun Nov 21 14:40:25 2010
New Revision: 13041
Log:
Reworked Lisp-based build now works for ecl.
Based on a patch from Pascal J. Bourguignon.
Refactored elements of Lisp-based build to improve error handling and
present more of a informative view of what is occuring.
Modified:
trunk/abcl/build-abcl.lisp
trunk/abcl/build-from-lisp.sh (contents, props changed)
Modified: trunk/abcl/build-abcl.lisp
==============================================================================
--- trunk/abcl/build-abcl.lisp (original)
+++ trunk/abcl/build-abcl.lisp Sun Nov 21 14:40:25 2010
@@ -21,8 +21,7 @@
string)))
(defun safe-namestring (pathname)
- (let* ((string (namestring pathname))
- (len (length string)))
+ (let ((string (namestring pathname)))
(when (position #\space string)
(setf string (concatenate 'string "\""
(comp string #\\)
@@ -69,9 +68,9 @@
#+clisp
(cond ((member :win32 *features*)
:windows)
- ((zerop (ext:run-shell-command "uname | grep -i darwin" :output nil))
+ ((equal 0 (ext:run-shell-command "uname | grep -i darwin" :output nil))
:darwin)
- ((zerop (ext:run-shell-command "uname | grep -i linux" :output nil))
+ ((equal 0 (ext:run-shell-command "uname | grep -i linux" :output nil))
:linux)
(t
:unknown)))
@@ -94,7 +93,7 @@
"\" && "
command)))
(sb-ext:process-exit-code
- (sb-ext:run-program
+ (sb-ext:run-program
"/bin/sh"
(list "-c" command)
:input nil :output output)))
@@ -168,7 +167,28 @@
(declare (ignore status))
exitcode))
-#+(or sbcl cmu lispworks openmcl)
+#+ecl
+(defun run-shell-command (command &key directory (output *standard-output*))
+ (when directory
+ (if (member :windows *features*)
+ (error "Unimplemented.")
+ (setf command (concatenate 'string
+ "\\cd \""
+ (namestring (pathname directory))
+ "\" && "
+ command))))
+ (ext:system command))
+ ;; (multiple-value-bind (stream exit details)
+ ;; (ext:run-program
+ ;; "/bin/sh" (list "-c" command)
+ ;; :input nil :output :stream :error :output)
+ ;; (declare (ignore details))
+ ;; (loop for line = (read-line stream nil)
+ ;; while line do (format output "~A~%" line))
+ ;; exit))
+
+
+#+(or sbcl cmu lispworks openmcl ecl)
(defun probe-directory (pathspec)
(let* ((truename (probe-file pathspec)) ; TRUENAME is a pathname.
(namestring (and truename (namestring truename)))) ; NAMESTRING is a string.
@@ -285,9 +305,9 @@
(defun java-compile-file (source-file)
(let ((cmdline (build-javac-command-line source-file)))
- (zerop (run-shell-command cmdline :directory *abcl-dir*))))
+ (equal 0 (run-shell-command cmdline :directory *abcl-dir*))))
-(defun make-classes (force batch)
+(defun do-compile-classes (force batch)
(let* ((source-files
(remove-if-not
#'(lambda (name)
@@ -299,14 +319,11 @@
*build-root*)))
(or force
(file-newer name output-name))))
- (mapcan #'(lambda (default)
- (directory (merge-pathnames "*.java"
- default)))
- (list *abcl-dir*
- (merge-pathnames "util/" *abcl-dir*))))))
+ (directory (merge-pathnames "**/*.java" *source-root*)))))
(format t "~&JDK: ~A~%" *jdk*)
(format t "Java compiler: ~A~%" *java-compiler*)
(format t "Compiler options: ~A~%~%" (if *java-compiler-options* *java-compiler-options* ""))
+ (format t "~&Compiling Java sources...")
(finish-output)
(cond ((null source-files)
(format t "Classes are up to date.~%")
@@ -315,22 +332,17 @@
(t
(cond (batch
(ensure-directories-exist *build-root*)
- (let* ((dir (pathname-directory *abcl-dir*))
- (cmdline (with-output-to-string (s)
+ (let* ((cmdline (with-output-to-string (s)
(princ *java-compiler-command-line-prefix* s)
(princ " -d " s)
(princ (safe-namestring *build-root*) s)
(princ #\Space s)
(dolist (source-file source-files)
- (princ
- (safe-namestring
- (if (equal (pathname-directory source-file) dir)
- (file-namestring source-file)
- (namestring source-file)))
- s)
+ (princ (safe-namestring (namestring source-file)) s)
(princ #\space s))))
- (status (run-shell-command cmdline :directory *abcl-dir*)))
- (zerop status)))
+ (status (run-shell-command cmdline :directory *tree-root*)))
+ (format t " done.~%")
+ (equal 0 status)))
(t
(ensure-directories-exist *build-root*)
(dolist (source-file source-files t)
@@ -350,11 +362,12 @@
(copy-with-substitutions source-file target-file substitutions-alist)
(ensure-directories-exist *dist-root*)
(let ((status (run-shell-command command :directory *tree-root*)))
- (unless (zerop status)
+ (unless (equal 0 status)
(format t "~A returned ~S~%" command status))
status))))
(defun do-compile-system (&key (zip t))
+ (format t "~&Compiling Lisp sources...")
(terpri)
(finish-output)
(let* ((java-namestring (safe-namestring *java*))
@@ -379,9 +392,8 @@
(not (not zip)) ;; because that ensures T or NIL
output-path)))
(ensure-directories-exist output-path)
- (setf status
- (run-shell-command cmdline
- :directory *tree-root*))
+ (setf status (run-shell-command cmdline :directory *tree-root*))
+ (format t " done.~%")
status))
@@ -433,6 +445,7 @@
(delete-file truename)))))
(defun clean ()
+ (format t "~&Cleaning compilation results."
(dolist (f (list (list *tree-root* "abcl.jar" "abcl.bat" "make-jar.bat"
"compile-system.bat")
;; as of 0.14 'compile-system.bat' isn't created anymore
@@ -481,21 +494,21 @@
;; clean
(when clean
(clean))
- ;; classes
- (unless (make-classes force batch)
+ ;; Compile Java source into classes
+ (unless (do-compile-classes force batch)
(format t "Build failed.~%")
(return-from build-abcl nil))
;; COMPILE-SYSTEM
(when (or full compile-system)
(let* ((zip (if (or full jar) nil t))
(status (do-compile-system :zip zip)))
- (unless (zerop status)
+ (unless (equal 0 status)
(format t "Build failed.~%")
(return-from build-abcl nil))))
;; abcl.jar
(when (or full jar)
(let ((status (make-jar)))
- (unless (zerop status)
+ (unless (equal 0 status)
(format t "Build failed.~%")
(return-from build-abcl nil))))
;; abcl/abcl.bat
@@ -518,7 +531,7 @@
(princ #\space s)))
(princ "--main=org.armedbear.lisp.Main -o lisp" s)))
(result (run-shell-command cmdline :directory *abcl-dir*)))
- (zerop result)))
+ (equal 0 result)))
(defvar *copy-verbose* nil)
@@ -591,11 +604,11 @@
(namestring parent-dir)
version-string version-string))
(status (run-shell-command command :directory parent-dir)))
- (unless (zerop status)
+ (unless (equal 0 status)
(format t "~A returned ~S~%" command status)))
(let* ((command (format nil "zip -q -r ~A~A.zip ~A"
(namestring parent-dir)
version-string version-string))
(status (run-shell-command command :directory parent-dir)))
- (unless (zerop status)
+ (unless (equal 0 status)
(format t "~A returned ~S~%" command status)))))
Modified: trunk/abcl/build-from-lisp.sh
==============================================================================
--- trunk/abcl/build-from-lisp.sh (original)
+++ trunk/abcl/build-from-lisp.sh Sun Nov 21 14:40:25 2010
@@ -72,6 +72,11 @@
exec "$1" --load "$2" --eval "(progn $3 (ext:quit))"
}
+ecl()
+{
+ exec "$1" -norc -load "$2" -eval "(progn $3 (ext:quit))"
+}
+
clisp()
{
exec "$1" -ansi -q -norc -i "$2" -x "(progn $3 (ext:quit))"
@@ -120,7 +125,7 @@
gcl*)
notimplemented "$IMPL" "$FILE" "$FORM" ;;
ecl*)
- notimplemented "$IMPL" "$FILE" "$FORM" ;;
+ ecl "$IMPL" "$FILE" "$FORM" ;;
alisp*)
notimplemented "$IMPL" "$FILE" "$FORM" ;;
*)
More information about the armedbear-cvs
mailing list