[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#48434] [PATCH] guile: allow pre-inst-env inject local paths
From: |
Maxime Devos |
Subject: |
[bug#48434] [PATCH] guile: allow pre-inst-env inject local paths |
Date: |
Mon, 16 Aug 2021 20:52:48 +0200 |
User-agent: |
Evolution 3.34.2 |
Sergei Trofimovich schreef op ma 16-08-2021 om 18:28 [+0100]:
> On Sat, 15 May 2021 10:52:27 +0100
> Sergei Trofimovich <slyfox@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
Description: This is a digitally signed message part
- [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths, Sergei Trofimovich, 2021/08/16
- [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths,
Maxime Devos <=
- [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths, Sergei Trofimovich, 2021/08/17
- [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths, Sergei Trofimovich, 2021/08/17
- [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths, Maxime Devos, 2021/08/17
- [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths, Sergei Trofimovich, 2021/08/17
- [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths, Maxime Devos, 2021/08/17
- [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths, Sergei Trofimovich, 2021/08/17