I thought I had understood your question, but now I see that I did not. Let me see if I have this right:
cl-alexandria
cl-alexandria-sbcl
Are you trying to do the following:
?
If that is so, maybe when a package like cl-alexandria
is installed, it should write an entry to the output translations to write fasls to the user's directory, and then when a package like cl-alexandria-sbcl
is written, the output translations should be updated to delete the original entry and add a new entry that points to the packaged fasl directory.
Note that I think this could be done by writing to files in /etc
or some similar location.
Honestly, I don't know what to do if the binary package has some but not all fasls. That would be a mess.
Hello Robert,
Thank you for your response.
We loop over the locations where compiled code is stored to build the output translations, as shown in the code below.
(defvar *freebsd-output-translations* ())
(pushnew :inherit-configuration *freebsd-output-translations*)
(dolist (path (directory "/usr/local/lib/common-lisp/*/"))
(unless (and (pathnamep path)
(search *system-registry*
(namestring path)
:start1 0 :end1 (length *system-registry*)))
(let ((source (make-pathname
:directory (append (pathname-directory path)
(list :wild-inferiors))))
(target (make-pathname
:directory (append (pathname-directory path)
(list (lisp-specific-fasl-subdir) :wild-inferiors)))))
(pushnew (list source target) *freebsd-output-translations*))))
(asdf:initialize-output-translations (cons :output-translations *freebsd-output-translations*))The files in our CL OS packages are stored under /usr/local/lib/common-lisp/<project>/. The FASL packages put compiled code in directories unique to each lisp implementation such as /usr/local/lib/common-lib/<project>/sbclfasl, /usr/local/lib/common-lisp/<package_name>/cclfasl/, and so on.
Before the call to asdf:initialize-output-translations, *freebsd-output-translations* looks correct (if I'm understanding the DSL format):
(:OUTPUT-TRANSLATIONS
(#P"/usr/local/lib/common-lisp/gpgme/**/"
#P"/usr/local/lib/common-lisp/gpgme/sbclfasl/**/")
(#P"/usr/local/lib/common-lisp/asdf/**/"
#P"/usr/local/lib/common-lisp/asdf/sbclfasl/**/")
(#P"/usr/local/lib/common-lisp/alexandria/**/"
#P"/usr/local/lib/common-lisp/alexandria/sbclfasl/**/")
:INHERIT-CONFIGURATION)The part that I'm still missing is how to add locations to the exceptions to output translations.
Kind regards,
JoeP.S. After the call to asdf:initialize-output-translations, dumping asdf::*output-translations* gives:
(((#P"/usr/local/lib/common-lisp/gpgme/sbclfasl/**/" T)
(#P"/usr/local/lib/common-lisp/asdf/sbclfasl/**/" T)
(#P"/usr/local/lib/common-lisp/alexandria/sbclfasl/**/" T)
(#P"/usr/home/jrm/.cache/common-lisp/sbcl-2.4.10-bsd-x64-s/**/*.*" T)
(#P"/usr/local/lib/common-lisp/gpgme/**/"
#P"/usr/local/lib/common-lisp/gpgme/sbclfasl/**/")
(#P"/usr/local/lib/common-lisp/asdf/**/"
#P"/usr/local/lib/common-lisp/asdf/sbclfasl/**/")
(#P"/usr/local/lib/common-lisp/alexandria/**/"
#P"/usr/local/lib/common-lisp/alexandria/sbclfasl/**/")
(#P"/home/jrm/.cache/common-lisp/my-dir/**/*.*" T)
(#P"/usr/local/lib/sbcl/**/*.*" T)
(#P"/**/*.*" #P"/home/jrm/.cache/common-lisp/my-dir/**/*.*")
(T #P"/usr/home/jrm/.cache/common-lisp/sbcl-2.4.10-bsd-x64-s/**/*.*")))
Robert P. Goldman
Research Fellow
Smart Information Flow Technologies (d/b/a SIFT, LLC)
319 N. First Ave., Suite 400
Minneapolis, MN 55401
Google Voice: (612) 326-3934
Cell: (612) 384-3454
Email: rpgoldman@SIFT.net