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: 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  

reply via email to

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