GNU bug report logs -
#48434
[PATCH] guile: allow pre-inst-env inject local paths
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Sergei Trofimovich schreef op ma 16-08-2021 om 18:28 [+0100]:
> On Sat, 15 May 2021 10:52:27 +0100
> Sergei Trofimovich <slyfox <at> gentoo.org> wrote:
>
> > I observed the problem when tried to run 'guix refresh' from local git checkout:
> >
> > $ strace -f ./pre-inst-env guix refresh -u re2c |& fgrep re2c.scm
> > ...
> > [pid 3014757] openat(AT_FDCWD, "/usr/share/guile/site/3.0/gnu/packages/re2c.scm.qilB0R",
> > O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
> >
> > Attempt to /usr/share happens because local directory override is ignored:
> >
> > $ ./pre-inst-env guile -c '(display (search-path %load-path "gnu/packages/re2c.scm")) (newline) (display %load-path) (newline)'
> > /usr/share/guile/site/3.0/gnu/packages/re2c.scm
> > (/usr/share/guile/3.0 \
> > /usr/share/guile/site/3.0 \
> > /usr/share/guile/site \
> > /usr/share/guile \
> > /home/slyfox/dev/git/guix \
> > /home/slyfox/dev/git/guix)
^ here's the checkout in the load path
> >
> > It happens because ./guile ignores GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH
> > unconditionally.
The local directory isn't ignored, it's at the end (the effect is about the same though).
> > The change keeps GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH for ./pre-inst-env.
> >
> > * gnu/packages/aux-files/guile-launcher.c (main): don't ignore
> > GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH in GUIX_UNINSTALLED=1 mode.
Could you do something like
#define GUIX_UNINSTALLED 1
#if GUIX_UNINSTALLED
new behaviour
#else
OLD BEHAVIOUR
#endif
and change "Makefile.am" to compile two variants of "guile",
one with "DGUIX_UNINSTALLED=1" which goes into libexec, and another
with "DGUIX_UNINSTALLED=0" named "$CHECKOUT/guile" which isn't installed
anywhere but will be added to PATH by "pre-inst-env", or something like that?
I've a bit of an aversion towards using $..._UNINSTALLED environment variables,
as it leads to difficult situations like ‘what should happen if I /gnu/store/.../bin/guix
is run with GUIX_UNINSTALLED set to 1’:
(a): Reset "GUILE_LOAD{,_COMPILED}_PATH" because we're running directly from the store
(b): Don't reset "GUILE_LOAD_{,_COMPILED}_PATH" because GUIX_UNINSTALLED is set to 1.
As a comparison, GUIX_UNINSTALLED, the preprocessor variable, is like a ‘lexical variable’,
and GUIX_UNINSTALLED, the environment variable, is like a
‘parameter object’/‘dynamically bound variable’ (see, e.g., 6.11.12 Parameters in the Guile
manual). I tend to prefer the former, except for dynamic things like LC_ALL, $[...]_PATH
(when used by "guile", "gcc" -- applications typically shouldn't depend on $GUILE_LOAD_PATH,
if they do, they need 'wrap-program' or the like’).
Also, "guile-launcher.c" is used by 'quiet-quile" in (guix self). It should probably be
verified that "guix pull" still works well.
Greetings,
Maxime.
[signature.asc (application/pgp-signature, inline)]
This bug report was last modified 3 years and 300 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.