;; that we never explicitly refer to host object file suffixes,
;; only to the result of CL:COMPILE-FILE-PATHNAME.
#+lispworks ".ufsl" ; as per Lieven Marchand sbcl-devel 2002-02-01
+ #+openmcl ".pfsl"
;; On most xc hosts, any old extension works, so we use an
;; arbitrary one.
".lisp-obj"))
(truename stream)))
;; Try to use the compiler to generate a new temporary object file.
- (multiple-value-bind (output-truename warnings-p failure-p)
- (funcall compile-file src :output-file tmp-obj)
- (declare (ignore warnings-p))
- (cond ((not output-truename)
- (error "couldn't compile ~S" src))
- (failure-p
- (if ignore-failure-p
- (warn "ignoring FAILURE-P return value from compilation of ~S"
- src)
- (unwind-protect
- (progn
- ;; FIXME: This should have another option,
- ;; redoing compilation.
- (cerror "Continue, using possibly-bogus ~S."
- "FAILURE-P was set when creating ~S."
- obj)
- (setf failure-p nil))
- ;; Don't leave failed object files lying around.
- (when (and failure-p (probe-file tmp-obj))
- (delete-file tmp-obj)
- (format t "~&deleted ~S~%" tmp-obj)))))
- ;; Otherwise: success, just fall through.
- (t nil)))
+ (flet ((report-recompile-restart (stream)
+ (format stream "Recompile file ~S" src))
+ (report-continue-restart (stream)
+ (format stream "Continue, using possibly bogus file ~S" obj)))
+ (tagbody
+ retry-compile-file
+ (multiple-value-bind (output-truename warnings-p failure-p)
+ (funcall compile-file src :output-file tmp-obj)
+ (declare (ignore warnings-p))
+ (cond ((not output-truename)
+ (error "couldn't compile ~S" src))
+ (failure-p
+ (if ignore-failure-p
+ (warn "ignoring FAILURE-P return value from compilation of ~S"
+ src)
+ (unwind-protect
+ (restart-case
+ (error "FAILURE-P was set when creating ~S."
+ obj)
+ (recompile ()
+ :report report-recompile-restart
+ (go retry-compile-file))
+ (continue ()
+ :report report-continue-restart
+ (setf failure-p nil)))
+ ;; Don't leave failed object files lying around.
+ (when (and failure-p (probe-file tmp-obj))
+ (delete-file tmp-obj)
+ (format t "~&deleted ~S~%" tmp-obj)))))
+ ;; Otherwise: success, just fall through.
+ (t nil)))))
;; If we get to here, compilation succeeded, so it's OK to rename
;; the temporary output file to the permanent object file.
(format t
"target features *SHEBANG-FEATURES*=~@<~S~:>~%"
*shebang-features*))
+
+(defvar *shebang-backend-subfeatures*
+ (let* ((default-subfeatures nil)
+ (customizer-file-name "customize-backend-subfeatures.lisp")
+ (customizer (if (probe-file customizer-file-name)
+ (compile nil
+ (read-from-file customizer-file-name))
+ #'identity)))
+ (funcall customizer default-subfeatures)))
+(let ((*print-length* nil)
+ (*print-level* nil))
+ (format t
+ "target backend-subfeatures *SHEBANG-BACKEND-FEATURES*=~@<~S~:>~%"
+ *shebang-backend-subfeatures*))
\f
;;;; cold-init-related PACKAGE and SYMBOL tools
;;; values of special variables such as *** and +, anyway). Set up
;;; machinery to warn us when/if we change it.
;;;
-;;; FIXME: All this machinery should probably be conditional on
-;;; #!+SB-SHOW, i.e. we should be able to wrap #!+SB-SHOW around both
-;;; the LOAD and the DEFVAR here.
-(load "src/cold/snapshot.lisp")
-(defvar *cl-snapshot* (take-snapshot "COMMON-LISP"))
+;;; All code depending on this is itself dependent on #!+SB-SHOW.
+#!+sb-show
+(progn
+ (load "src/cold/snapshot.lisp")
+ (defvar *cl-snapshot* (take-snapshot "COMMON-LISP")))
\f
;;;; master list of source files and their properties