Subject: Re: bug#32770: Packaging SLIME/SWANK as Common Lisp library

From: Andy Patterson <[email-masked]>
Date: Thu, 4 Oct 2018 01:03:08 -0400

Hi,

On Wed, 03 Oct 2018 20:34:24 +0200
Pierre Neidhardt <[email-masked]> wrote:

> Last (hopefully?) step before getting Next up and running: add
> support for CFFI.
> 
> I've re-used your CFFI package and they seem to work.  Now if I want
> to package cl-sqlite, it fails because sqlite.so cannot be found.
> Indeed, the patch to /gnu/store/...-sqlite.../lib must be added to the
> cffi:*foreign-library-directories* global variable before compiling.
> 
> If I do that from quicklisp, it works.  Now I guess we need to tweak
> asdf-build-system so that packages can specify which paths to add to
> that global variable.

I've been using a cffi consumer for a while now, and my approach for
that package was to update references to library and header files with
the full paths to their respective store items.

Adding to *foreign-library-directories* at compile time may allow a
package to compile, but I get the feeling that it may not have the
desired effect when you try to load the package later on.

I guess another approach we could take if replacement is undesirable
would be to modify the cffi package to honour some environment variable
for its default, and then add that variable to the search path for
cffi. Maybe such a variable already exists, even. I think this is the
approach that Nix takes.

I personally tend to favour replacement, but others could chime in here
as well since this problem isn't specific to lisp packaging.

> 
> Makes sense?
> 
> I've given it a quick shot (patch attached) but then every ASDF build
> fails with
> 
> --8<---------------cut here---------------start------------->8---
> ice-9/boot-9.scm:222:17: In procedure map1:
> Syntax error:
> unknown location: unexpected syntax in form ()
> --8<---------------cut here---------------end--------------->8---
> 

It's confusing, but you either need to double quote the default
argument (e.g. (cffi-foreign-library-directories ''())), or re-quote
the unquoted variable when you pass it along, depending on how you want
users to specify the argument in the package (quoted for the former,
unquoted for the latter).

Hoping that helps,

--
Andy