Newer
Older
#+xcvb
(module
(:depends-on ("specials" "grain-interface")))
Francois-Rene Rideau
committed
;;; TODO: have magic grains, an override method for digesting,
;;; returning a magic NIL, meaning "this grain is not subject to digest"?
;;; Or keep treating magically? Or have some way of segregating
;;; "dependencies at our level of abstraction" vs
;;; "dependencies below our level of abstraction".
;;; Reminds me of the dependencies that do or do not "force"
;;; a module to be recompiled in ASDF.
(defun grain-pathname-mapping (env grain)
(list (fullname grain) :pathname (grain-namestring env grain)))
(defun print-pathname-mappings (env stream grains)
(let ((*print-readably* nil)
(*print-pretty* t)
(*print-case* :downcase))
(format stream "(in-package :xcvb-driver)~%~
(defparameter *pathname-mappings*~% ~
(macrolet ((f () (let ((m (make-hash-table :test 'equal)))~% ~
(loop :for (x . y) :in~% '~S~% ~
:do (setf (gethash x m) y)) m)))~% ~
(mapcar/ 'grain-pathname-mapping env
(remove-if-not 'file-grain-p grains))))))
(defun pathname-mappings-lisp-pathname ()
(subpathname *workspace* "pathname-mappings.lisp"))
(defun pathname-mappings-fasl-pathname ()
(make-pathname :type *fasl-type* :defaults (pathname-mappings-lisp-pathname)))
(with-open-file (s (pathname-mappings-lisp-pathname) :direction :output
:if-exists :rename-and-delete :if-does-not-exist :create)
(print-pathname-mappings env s (list-computation-grains))))