Am Freitag, 22. Februar 2013 schrieb Andreas Enge: > Please find attached a patch for review. I tested it on a few example > files, but not yet with a real packet - I am waiting for the full > rebuild ;-)
I had test failures in coreutils, and to check whether it was related to my patch, I tried from scratch with the current core-updates branch. Any call to guix aborts with Backtrace: In ice-9/boot-9.scm: 149: 9 [catch #t #<catch-closure 286aa00> ...] 157: 8 [#<procedure 28060f0 ()>] In unknown file: ?: 7 [catch-closure] In ice-9/boot-9.scm: 63: 6 [call-with-prompt prompt0 ...] In ice-9/eval.scm: 407: 5 [eval # #] In ice-9/boot-9.scm: 2111: 4 [save-module-excursion #<procedure 280b100 at ice-9/boot-9.scm:3646:3 ()>] 3651: 3 [#<procedure 280b100 at ice-9/boot-9.scm:3646:3 ()>] In unknown file: ?: 2 [load-compiled/vm "/home/privat/.cache/guile/ccache/2.0- LE-8-2.0/usr/local/guix-git/bin/guix.go"] In /usr/local/bin/guix: 59: 1 [#<procedure 28381c0 ()>] In unknown file: ?: 0 [scm-error misc-error #f ...] ERROR: In procedure scm-error: ERROR: No variable named guix-main in #<interface (guix ui) 28a0ea0> I am also attaching the final patch-shebang patch. Andreas
From 63ac645147871eb773032da23d9f52bbd4f823eb Mon Sep 17 00:00:00 2001 From: Andreas Enge <[email protected]> Date: Fri, 22 Feb 2013 23:00:41 +0100 Subject: [PATCH] Patch-shebang: Handle "#!/usr/bin/env command" * guix/build/utils.scm (patch-shebang): Handle replacement of "#!.*/env CMD ARGS" by "#!/nix/store/path/.../to/CMD ARGS". --- guix/build/utils.scm | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/guix/build/utils.scm b/guix/build/utils.scm index 6921e31..82042e9 100644 --- a/guix/build/utils.scm +++ b/guix/build/utils.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013 Ludovic Courtès <[email protected]> +;;; Copyright © 2013 Andreas Enge <[email protected]> ;;; ;;; This file is part of GNU Guix. ;;; @@ -426,7 +427,7 @@ bytes transferred and the continuation of the transfer as a thunk." (stat:mtimensec stat))) (define patch-shebang - (let ((shebang-rx (make-regexp "^[[:blank:]]*([[:graph:]]+)(.*)$"))) + (let ((shebang-rx (make-regexp "^[[:blank:]]*([[:graph:]]+)[[:blank:]]*([[:graph:]]*)(.*)$"))) (lambda* (file #:optional (path (search-path-as-string->list (getenv "PATH"))) @@ -465,16 +466,27 @@ FILE are kept unchanged." (let ((line (false-if-exception (read-line p)))) (and=> (and line (regexp-exec shebang-rx line)) (lambda (m) - (let* ((cmd (match:substring m 1)) - (bin (search-path path (basename cmd)))) + (let* ((interp (match:substring m 1)) + (arg1 (match:substring m 2)) + (rest (match:substring m 3)) + (has-env (string-suffix? "/env" interp)) + (cmd (if has-env arg1 (basename interp))) + (bin (search-path path cmd))) (if bin - (if (string=? bin cmd) + (if (string=? bin interp) #f ; nothing to do - (begin - (format (current-error-port) - "patch-shebang: ~a: changing `~a' to `~a'~%" - file cmd bin) - (patch p bin (match:substring m 2)))) + (if has-env + (begin + (format (current-error-port) + "patch-shebang: ~a: changing `~a' to `~a'~%" + file (string-append interp " " arg1) bin) + (patch p bin rest)) + (begin + (format (current-error-port) + "patch-shebang: ~a: changing `~a' to `~a'~%" + file interp bin) + (patch p bin + (string-append " " arg1 rest))))) (begin (format (current-error-port) "patch-shebang: ~a: warning: no binary for interpreter `~a' found in $PATH~%" -- 1.7.10.4
