A much simpler solution for registering modules with ASDF without creating *.asd files

This commit is contained in:
Juan Jose Garcia Ripoll 2009-08-05 21:40:15 +02:00
parent e7369e72fd
commit 9b6de867b5
3 changed files with 32 additions and 34 deletions

View file

@ -11,6 +11,7 @@
;;;
(in-package :asdf)
(require 'cmp)
;;;
;;; COMPILE-OP / LOAD-OP
@ -217,7 +218,8 @@
(component-depends-on (make-instance 'load-op) c))))
(defmethod input-files ((o load-fasl-op) (c system))
(output-files (make-instance 'fasl-op) c))
(and (module-components c)
(output-files (make-instance 'fasl-op) c)))
(defmethod perform ((o load-fasl-op) (c t))
nil)
@ -228,4 +230,31 @@
do (setf (gethash 'load-op (component-operation-times i)) (get-universal-time))))
(export '(make-build load-fasl-op))
(push '("fasb" . si::load-binary) si::*load-hooks*)
(push '("fasb" . si::load-binary) si::*load-hooks*)
;; Hook into ECL's require/provide
(require 'cmp)
(defvar *require-asdf-operator* 'load-op)
(defun module-provide-asdf (name)
(handler-bind ((style-warning #'muffle-warning))
(let* ((*verbose-out* (make-broadcast-stream))
(system (asdf:find-system name nil)))
(when system
(asdf:operate *require-asdf-operator* name)
t))))
(defun register-pre-built-system (name)
(register-system name (make-instance 'system :name name)))
(setf si::*module-provider-functions*
(loop for f in si::*module-provider-functions*
unless (eq f 'module-provide-asdf)
collect #'(lambda (name)
(let ((l (multiple-value-list (funcall f name))))
(and (first l) (register-pre-built-system name))
(values-list l)))))
#+win32 (push '("asd" . si::load-source) si::*load-hooks*)
(pushnew 'module-provide-asdf ext:*module-provider-functions*)
(provide 'asdf)

View file

@ -362,6 +362,7 @@ and NIL NAME and TYPE components"
(defvar *central-registry*
'(*default-pathname-defaults*
"sys:"
#+nil "/home/dan/src/sourceforge/cclan/asdf/systems/"
#+nil "telent:asdf;systems;"))
@ -1368,29 +1369,3 @@ output to *VERBOSE-OUT*. Returns the shell's exit code."
(pushnew 'module-provide-asdf sb-ext:*module-provider-functions*)
(pushnew 'contrib-sysdef-search *system-definition-search-functions*))
;; Hook into ECL's require/provide
#+ecl
(progn
(require 'cmp)
(defvar *require-asdf-operator* 'load-op)
(defun module-provide-asdf (name)
(handler-bind ((style-warning #'muffle-warning))
(let* ((*verbose-out* (make-broadcast-stream))
(system (asdf:find-system name nil)))
(when system
(asdf:operate *require-asdf-operator* name)
t))))
(defun register-pre-built-system (name)
(register-system name (make-instance 'system :name name)))
(setf si::*module-provider-functions*
(loop for f in si::*module-provider-functions*
unless (eq f 'module-provide-asdf)
collect #'(lambda (name)
(let ((l (multiple-value-list (funcall f name))))
(and (first l) (register-pre-built-system name))
(values-list l)))))
#+win32 (push '("asd" . si::load-source) si::*load-hooks*)
(pushnew 'module-provide-asdf ext:*module-provider-functions*))
(provide 'asdf)

View file

@ -111,12 +111,6 @@
: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
:do-first (load ,(concatenate 'string "sys:" name))))))
(defun build-module (name sources &key additional-files
(builtin nil) (dir "build:")
((:prefix si::*init-function-prefix*) "EXT"))