From mboxrd@z Thu Jan 1 00:00:00 1970 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 Message-ID: <87a8n9edir.fsf@gnu.org> References: <87egcpeono.fsf@gnu.org> <87egcmkvwr.fsf@gnu.org> <87ziv9elo2.fsf@gnu.org> <87io1xr45c.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:45692) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aTGZb-00033H-89 for guix-devel@gnu.org; Tue, 09 Feb 2016 17:15:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aTGZW-0008Oq-Hn for guix-devel@gnu.org; Tue, 09 Feb 2016 17:15:51 -0500 In-Reply-To: <87io1xr45c.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Tue, 09 Feb 2016 21:59:43 +0100") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: guix-devel@gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ludovic Court=C3=A8s 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-syst= em.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 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-build-system-gnu-Do-not-patch-symlinks-v2.patch >From 2d17c6bd7c7dd466c0aee14beaa47055af0ceb6d Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen 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 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable --=20 Jan Nieuwenhuizen | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar=C2=AE http://AvatarAcademy.nl= =20=20 --=-=-=--