[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: |
Jan Nieuwenhuizen |
Subject: |
Re: [PATCH] gnu-build-system: do not patch symlinks. Fixes location-aware scripts. |
Date: |
Tue, 09 Feb 2016 23:15:40 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux) |
Ludovic Courtès writes:
> How does the script determines its location? Using $0 is unreliable,
> and using /proc/self/exe is non portable.
It uses node.js's __dirname. I would have to dive into node.js
internals to figure that out... I would think it does /proc/self/exe
and has fallbacks for other platforms?
>> diff --git a/guix/build/gnu-build-system.scm
>> b/guix/build/gnu-build-system.scm
>> index 2abaa6e..34edff7 100644
> This is exactly what the previous patch does (applied as c13a9feb.)
>
> Am I missing something?
Ah sorry.. Yes sent you the same patch, second patch attached now.
> Anyway, it seems clear enough that the effect of this one-liner is to
> prevent symlinks from being patched. :-)
Yes so I thought too, until I stumbled into this. Then I saw that
the first patch only considers what files to run scandir on ... any
of those files can be symlinks and those are caught here.
Greetings, Jan
>From 2d17c6bd7c7dd466c0aee14beaa47055af0ceb6d Mon Sep 17 00:00:00 2001
From: Jan Nieuwenhuizen <address@hidden>
Date: Sun, 7 Feb 2016 16:45:25 +0100
Subject: [PATCH] build-system/gnu: Do not patch symlinks, v2.
This fixes location-aware scripts.
* guix/build/gnu-build-system.scm (file-is-symlink?): new function.
(patch-source-shebangs): use it to skip symlinks.
---
guix/build/gnu-build-system.scm | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index 34edff7..427f020 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -166,6 +166,10 @@ things like the ABI being used."
(find-files "." "^configure$")))
#t)
+(define (file-is-symlink? file)
+ (and (file-exists? file)
+ (eq? 'symlink (stat:type (lstat file)))))
+
(define* (patch-source-shebangs #:key source #:allow-other-keys)
"Patch shebangs in all source files; this includes non-executable
files such as `.in' templates. Most scripts honor $SHELL and
@@ -174,6 +178,7 @@ $CONFIG_SHELL, but some don't, such as `mkinstalldirs' or
Automake's
(for-each patch-shebang
(remove (lambda (file)
(or (not (file-exists? file)) ;dangling symlink
+ (file-is-symlink? file)
(file-is-directory? file)))
(find-files "."))))
--
2.1.4
--
Jan Nieuwenhuizen <address@hidden> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.nl