guix-patches
[Top][All Lists]
Advanced

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

[bug#48434] [PATCH] guile: allow pre-inst-env inject local paths


From: Sergei Trofimovich
Subject: [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths
Date: Mon, 16 Aug 2021 18:28:31 +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)
> 
> It happens because ./guile ignores GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH
> unconditionally.
> 
> 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.
> 
> Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
> ---
>  gnu/packages/aux-files/guile-launcher.c | 19 ++++++++++++-------
>  1 file changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/gnu/packages/aux-files/guile-launcher.c 
> b/gnu/packages/aux-files/guile-launcher.c
> index 47ba069de1..bed63353a9 100644
> --- a/gnu/packages/aux-files/guile-launcher.c
> +++ b/gnu/packages/aux-files/guile-launcher.c
> @@ -73,14 +73,19 @@ main (int argc, char **argv)
>         which is always preferable over the C locale.  */
>      setlocale (LC_ALL, "en_US.utf8");
>  
> -  const char *str;
> -  str = getenv ("GUILE_LOAD_PATH");
> -  load_path = str != NULL ? strdup (str) : NULL;
> -  str = getenv ("GUILE_LOAD_COMPILED_PATH");
> -  load_compiled_path = str ? strdup (str) : NULL;
> +  /* Allow ./pre-inst-env to inject local paths. That way local sources
> +     are preferred for most operations.  */
> +  if (getenv ("GUIX_UNINSTALLED") == NULL)
> +    {
> +      const char *str;
> +      str = getenv ("GUILE_LOAD_PATH");
> +      load_path = str != NULL ? strdup (str) : NULL;
> +      str = getenv ("GUILE_LOAD_COMPILED_PATH");
> +      load_compiled_path = str ? strdup (str) : NULL;
>  
> -  unsetenv ("GUILE_LOAD_PATH");
> -  unsetenv ("GUILE_LOAD_COMPILED_PATH");
> +      unsetenv ("GUILE_LOAD_PATH");
> +      unsetenv ("GUILE_LOAD_COMPILED_PATH");
> +    }
>  
>    /* XXX: Do not let GMP allocate via libgc as this can lead to memory
>       corruption in GnuTLS/Nettle since Nettle also uses GMP:

Stumbled on it again today when cloned fresh guix repo and forgot to
apply this patch. Is it a reasonable approach? Or something else is
at fault here?

Thanks!

-- 

  Sergei





reply via email to

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