guile-user
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]