diff --git a/contrib/asdf/asdf-ecl.lisp b/contrib/asdf/asdf-ecl.lisp index 63fe91b15..fd3cdb88e 100755 --- a/contrib/asdf/asdf-ecl.lisp +++ b/contrib/asdf/asdf-ecl.lisp @@ -213,9 +213,10 @@ (defclass load-fasl-op (operation) ()) (defmethod component-depends-on ((o load-fasl-op) (c system)) - (subst 'load-fasl-op 'load-op - (subst 'fasl-op 'compile-op - (component-depends-on (make-instance 'load-op) c)))) + (unless (every #'(lambda (c) (typep c 'ecl-binary-file)) (module-components c)) + (subst 'load-fasl-op 'load-op + (subst 'fasl-op 'compile-op + (component-depends-on (make-instance 'load-op) c))))) (defmethod input-files ((o load-fasl-op) (c system)) (and (module-components c) @@ -244,6 +245,21 @@ (asdf:operate *require-asdf-operator* name) t)))) +(defclass ecl-binary-file (component) ()) +(defmethod component-pathname ((c ecl-binary-file)) + (merge-pathnames (compile-file-pathname (string (component-name c))) + "sys:")) +(defmethod output-files (o (c ecl-binary-file)) + nil) +(defmethod input-files (o (c ecl-binary-file)) + nil) +(defmethod perform ((o load-op) (c ecl-binary-file)) + (load (component-pathname c))) +(defmethod perform ((o load-fasl-op) (c ecl-binary-file)) + (load (component-pathname c))) +(defmethod perform (o (c ecl-binary-file)) + nil) + (defun register-pre-built-system (name) (register-system name (make-instance 'system :name name))) diff --git a/contrib/asdf/asdf.lisp b/contrib/asdf/asdf.lisp index cb3b9fce5..a700562b9 100644 --- a/contrib/asdf/asdf.lisp +++ b/contrib/asdf/asdf.lisp @@ -1340,7 +1340,7 @@ output to *VERBOSE-OUT*. Returns the shell's exit code." (system (asdf:find-system name nil))) (when system (asdf:operate 'asdf:load-op name) - t)))) + (provide name))))) (defun contrib-sysdef-search (system) (let ((home (sb-ext:posix-getenv "SBCL_HOME"))) diff --git a/src/Makefile.in b/src/Makefile.in index 95a4199f1..02001efac 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -167,6 +167,7 @@ install-base: $(LN_S) @SONAME3@ @SONAME1@ && \ $(LN_S) @SONAME3@ @SONAME@ ) \ fi + -for i in *.asd; do $(INSTALL_DATA) $${i} $(DESTDIR)$(ecldir); done for i in c/dpp$(EXE) ecl_min$(EXE) `cat MODULES`; do \ case $$i in \ *.fas) $(INSTALL_PROGRAM) $$i $(DESTDIR)$(ecldir);; \ diff --git a/src/bare.lsp.in b/src/bare.lsp.in index da7062558..1032ca1cb 100644 --- a/src/bare.lsp.in +++ b/src/bare.lsp.in @@ -111,6 +111,12 @@ :readably t :pretty nil))))))) output)) +(defun build-fake-asdf (name) + (with-open-file (*standard-output* (make-pathname :name name :type "asd") + :direction :output :if-exists :supersede :if-does-not-exist :create) + (print `(defsystem ,name + :components ((:ecl-binary-file ,(string name))))))) + (defun build-module (name sources &key additional-files (builtin nil) (dir "build:") ((:prefix si::*init-function-prefix*) "EXT")) @@ -118,6 +124,8 @@ (let* ((name (string-downcase name))) (when additional-files (setf *module-files* (append additional-files *module-files*))) + (unless (equalp name "asdf") + (build-fake-asdf name)) (if builtin (let* ((objects (compile-if-old dir sources :system-p t :c-file t :data-file t :h-file t)))