guix-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] gnu-build-system: do not patch symlinks. Fixes location-awar


From: Ludovic Courtès
Subject: Re: [PATCH] gnu-build-system: do not patch symlinks. Fixes location-aware scripts.
Date: Tue, 09 Feb 2016 21:59:43 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Jan Nieuwenhuizen <address@hidden> skribis:

> Ludovic Courtès writes:
>
>> Out of curiosity, what package was this?
>
> I encountered it first in jison, a javascript parser generator.

How does the script determines its location?  Using $0 is unreliable,
and using /proc/self/exe is non portable.

>> Since this is a rebuild-the-world change, I applied to to a new
>> ‘core-updates’ branch (and adjusted the commit log.)
>
> Yes, I got bitten by that, trying to test it.  I had an interesting
> learning experience getting to know guix and getting this to work and
> reverted to using
>
>     (#phases
>      (replace 'patch-source-shebangs
>               ;;patch-source-shebangs-no-symlinks
>               (lambda* (#:key outputs #:allow-other-keys)
>                 (for-each patch-shebang
>                           (remove (lambda (file)
>                                     (or (not (file-exists? file)) ;dangling 
> symlink
>                                         ;;(file-is-symlink? file)
>                                         (and (file-exists? file)
>                                              (eq? 'symlink (stat:type (lstat 
> file))))
>                                         (file-is-directory? file)))
>                                   (find-files ".")))))
>
> in the package itself.  Rebuilding the world is no fun when you want to
> get things done.

Yeah.  In such cases it’s easier to simply delete or customize the
faulty phase like you did above.

> When I actually got to test it, it appears that something like the above
> is still necessary.  It seems that the previous patch merely avoids
> visiting any symlinked directories, while this version actually looks
> at the script to be patched.

[...]

> diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
> index 2abaa6e..34edff7 100644
> --- a/guix/build/gnu-build-system.scm
> +++ b/guix/build/gnu-build-system.scm
> @@ -303,7 +303,7 @@ makefiles."
>    (define (list-of-files dir)
>      (map (cut string-append dir "/" <>)
>           (or (scandir dir (lambda (f)
> -                            (let ((s (stat (string-append dir "/" f))))
> +                            (let ((s (lstat (string-append dir "/" f))))
>                                (eq? 'regular (stat:type s)))))
>               '())))

This is exactly what the previous patch does (applied as c13a9feb.)

Am I missing something?

Anyway, it seems clear enough that the effect of this one-liner is to
prevent symlinks from being patched.  :-)

Ludo’.



reply via email to

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