Hello,

I'm currently working on packaging common-lisp libraries. I am facing a
design question that I can't answer.

First : Where do we want the libraries installed ? I was going for
  /usr/local/lib/common-lisp/{libfoo,libbar,libX} it looks that it's
  done this way for python

Then, once it's installed, we need to tell the _multiple_ CL
implementations where to look for those libraries. There are multiple
ways :

- write a wrapper for each implementation binary which add a
  CL_SOURCE_REGISTRY environment variable to /usr/local/lib/common-lisp/

- write for each implemtation a config file in
  /etc/common-lisp/source-registry.conf.d/{sbcl,ecl,clisp}.conf with the
  libraries path inside. We can have only one
  /etc/common-lisp/source-registry.conf file but I'm not sure it will
  play well with multiple implementations because we can't one which
  package will install the file ?

- make a patch in each CL implementation to insert the path hardcoded
  inside, which will require to keep the patchs up-to-date if there are
  changes in the sources

I am not sure which way is the better one. Maybe patching each
implementation ?


The patch for lang/sbcl just looks like this, it's very easy :

("asdf" is the library which handle libraries, that we need to
patch. It's also embedded in ecl and clisp.)

--- contrib/asdf/asdf.lisp.orig Tue Nov 22 17:53:12 2016
+++ contrib/asdf/asdf.lisp      Tue Nov 22 17:53:54 2016
@@ -3131,6 +3131,7 @@ after having found a .asd file? True by default.")
       #+scl (:tree #p"file://modules/")))
   (defun default-user-source-registry ()
     `(:source-registry
+      (:tree "/usr/local/lib/common-lisp/")
       (:tree (:home "common-lisp/"))
       #+sbcl (:directory (:home ".sbcl/systems/"))
       (:directory ,(xdg-data-home "common-lisp/systems/"))


Regards

Reply via email to