bug-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#55464: (current-filename) is #f when guix pull'ing


From: Attila Lendvai
Subject: bug#55464: (current-filename) is #f when guix pull'ing
Date: Thu, 19 May 2022 13:32:55 +0000

> > (define-public foo
> > (let ((hashes
> > (with-input-from-file
> > (string-append (dirname (current-filename))
> > "/foo.hashes")
> > read)))
> > (package ...)))
>
>
> Not fully answering your question, but if “foo.hashes” contains hashes
> for origins and similar, you could make “foo.hashes” contain something
> like:
>
> (list (base32 …) …)
>
> and, in the .scm, write:
>
> (include "foo.hashes")
>
> The ‘include’ directive includes the file at macro-expansion time,
> similar to #include in C.


i did find guile's INCLUDE and tried to use it, but it also didn't work when 
guix pull'ing it. see the attached, now abandoned commit.

IIRC the issue is that the implementation of INCLUDE tries to load the file 
relative to the cwd, but cwd is not changed by the code that is driving the 
compilation when guix pull'ing the code. (does each thread has its own cwd at 
all...?)

it works when i build it using `./pre-inst-env guix build foo`. i briefly tried 
to analyse what's the difference between the two situations, but i ran out of 
steam.

it is the same reason i need to call READ like below in my current 
implementation:

(define (%read-module-relative-file module filename)
  (with-input-from-file
      (or (search-path
           %load-path
           (string-append (dirname (module-filename module))
                          "/" filename))
          (error "%read-module-relative-file failed for" filename))
    read))


...which is not beautiful.


> Back to the original issue, I suppose ‘current-filename’ return #f when
> this .scm is first loaded, before it’s compiled. Anyway, it’s probably
> best to load it at macro-expansion time as you suggested.


is my analysis is correct, namely that cwd is not (always?) changed at 
macroexpand time, and thus the implementation of INCLUDE is broken for relative 
paths? is this a bug to be fixed in guile? if so, shall i try to add a test 
case for this somewhere?

--
• attila lendvai
• PGP: 963F 5D5F 45C7 DFCD 0A39
--
“The saddest aspect of life right now is that science gathers knowledge faster 
than society gathers wisdom.”
        — Isaac Asimov (1920–1992)

Attachment: use-guile-include.patch
Description: Text Data


reply via email to

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