Jelle Licht <jli...@fsfe.org> skribis: > Ludovic Courtès <l...@gnu.org> writes: >> Hello! >> >> Jelle Licht <jli...@fsfe.org> skribis: >> >>> It seems that the patch-shebang functionality does not deal gracefully >>> with symlinks: it just overwrites them! >>> >>> After struggling somewhat with getting the recently packaged node 6.0.0 >>> to behave, I found out that `patch-shebang' in (guix build >>> gnu-build-system) does not work properly on symlinks. >> >> There’s ‘patch-shebangs’ (plural) in this file, but it explicitly >> touches only regular files (see ‘list-of-files’). >> > > It seems I made a mistake when writing the bug report; I am talking > about the `patch-shebang' defined in (guix build utils). My apologies. > > Also, seeing as my experience with the stat utility and similarly styled > programming libraries was lacking, I decided to play around with the > definition of `list-of-files': It actually does include symlinks, as > (stat:type (stat "some-symlinked-file")) gives us a plain old 'regular. > Looking into this a bit more, it seems that calling `stat' gives the > exact same results on both the linked-to-file and the symlink to that > file. > > For the particular problem I ran into to be fixed, it is imperative that > `list-of-files' of `patch-shebangs' includes the symlink; it does after > all need to be patched. The way this patching currently happens just > clobbers symlinks.
My bad, indeed, ‘list-of-files’ should use ‘lstat’ instead of ‘stat’. I think a patch like attached should solve the problem. WDYT? We can apply it to core-updates-next if that’s fine with you. Thanks, Ludo’.
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm index 2abaa6e..299eb5d 100644 --- a/guix/build/gnu-build-system.scm +++ b/guix/build/gnu-build-system.scm @@ -172,9 +172,8 @@ files such as `.in' templates. Most scripts honor $SHELL and $CONFIG_SHELL, but some don't, such as `mkinstalldirs' or Automake's `missing' script." (for-each patch-shebang - (remove (lambda (file) - (or (not (file-exists? file)) ;dangling symlink - (file-is-directory? file))) + (filter (lambda (file) + (eq? 'regular (lstat file))) (find-files ".")))) (define (patch-generated-file-shebangs . rest) @@ -303,7 +302,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))))) '())))