[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: How to have an optional dependency?
From: |
Maxime Devos |
Subject: |
RE: How to have an optional dependency? |
Date: |
Mon, 24 Jun 2024 21:21:31 +0200 |
The reason (or at least, a reason) why you are seeing those warnings, is that
stuff from autoloaded modules can be macros, so they might be needed during
macro expansion (other reason is perhaps for optimization, dunno).
I think the best solution is to modify Guile to do something like adding a
#:autoload/no-macro-no-inlining (name to be bikeshed), to be able to tell Guile
more explicitly what behaviour is desired. Since #:autoload already exists, it
shouldn’t be too difficult, I think. Another option: --assume-autoload-no-macro
compilation argument.
>Is there a way to have a module as an optional dependency without any warnings?
I guess you could by adding a directory to your library source code with ‘fake’
(i.e. (define proc-name #false) + #:declarative? #false) Guix modules and add
it to GUILE_LOAD_PATH when compiling the module (in Makefile or equivalent).
> For example, is there a way to convince the Guile that those specific
> variables
will be bound? How do people commonly approach this?
They don’t (i.e. just deal with the warnings), or do something like
((module-ref (lookup-module '(guix something)) 'proc-name) arguments ...)
(that’s not the actual procedure names).
It’s a bit more work up-front, but I recommend doing something like the
#:autoload/no-macro-no-inlining thingie instead. Depending on compatibility
concerns or lack thereof, you might not be able to _use_ it directly, but
eventually Guile X.Y.E isn’t new anymore.
Best regards,
Maxime Devos