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".
This commit is contained in:
parent
93a6f5520c
commit
11996d85d3
|
@ -1,5 +1,6 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
|
||||||
|
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -51,7 +52,7 @@
|
||||||
fold-port-matches
|
fold-port-matches
|
||||||
remove-store-references))
|
remove-store-references))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; Directories.
|
;;; Directories.
|
||||||
;;;
|
;;;
|
||||||
|
@ -426,7 +427,7 @@ bytes transferred and the continuation of the transfer as a thunk."
|
||||||
(stat:mtimensec stat)))
|
(stat:mtimensec stat)))
|
||||||
|
|
||||||
(define patch-shebang
|
(define patch-shebang
|
||||||
(let ((shebang-rx (make-regexp "^[[:blank:]]*([[:graph:]]+)(.*)$")))
|
(let ((shebang-rx (make-regexp "^[[:blank:]]*([[:graph:]]+)[[:blank:]]*([[:graph:]]*)(.*)$")))
|
||||||
(lambda* (file
|
(lambda* (file
|
||||||
#:optional
|
#:optional
|
||||||
(path (search-path-as-string->list (getenv "PATH")))
|
(path (search-path-as-string->list (getenv "PATH")))
|
||||||
|
@ -465,16 +466,27 @@ FILE are kept unchanged."
|
||||||
(let ((line (false-if-exception (read-line p))))
|
(let ((line (false-if-exception (read-line p))))
|
||||||
(and=> (and line (regexp-exec shebang-rx line))
|
(and=> (and line (regexp-exec shebang-rx line))
|
||||||
(lambda (m)
|
(lambda (m)
|
||||||
(let* ((cmd (match:substring m 1))
|
(let* ((interp (match:substring m 1))
|
||||||
(bin (search-path path (basename cmd))))
|
(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 bin
|
||||||
(if (string=? bin cmd)
|
(if (string=? bin interp)
|
||||||
#f ; nothing to do
|
#f ; nothing to do
|
||||||
|
(if has-env
|
||||||
(begin
|
(begin
|
||||||
(format (current-error-port)
|
(format (current-error-port)
|
||||||
"patch-shebang: ~a: changing `~a' to `~a'~%"
|
"patch-shebang: ~a: changing `~a' to `~a'~%"
|
||||||
file cmd bin)
|
file (string-append interp " " arg1) bin)
|
||||||
(patch p bin (match:substring m 2))))
|
(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
|
(begin
|
||||||
(format (current-error-port)
|
(format (current-error-port)
|
||||||
"patch-shebang: ~a: warning: no binary for interpreter `~a' found in $PATH~%"
|
"patch-shebang: ~a: warning: no binary for interpreter `~a' found in $PATH~%"
|
||||||
|
|
Loading…
Reference in New Issue