summaryrefslogtreecommitdiff
path: root/guix/build
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-01-09 22:35:33 +0100
committerLudovic Courtès <ludo@gnu.org>2015-01-09 23:29:20 +0100
commit4eb01e5442aa7bbaa880ae8e72bd5d27434855ef (patch)
tree2861126f25033783f548c291eb506cb536df2f30 /guix/build
parentaa1e19477b2d78884fc500fef497cd6677604d9b (diff)
build-system/gnu: Patch /usr/bin/file in all 'configure' files.
* guix/build/utils.scm (patch-/usr/bin/file): New procedure. * guix/build/gnu-build-system.scm (patch-usr-bin-file): Rewrite using it. Patch all the files returned by 'find-files' that are executable. * gnu/packages/gawk.scm (gawk)[arguments]: Remove use of 'substitute*' for 'extension/configure'.
Diffstat (limited to 'guix/build')
-rw-r--r--guix/build/gnu-build-system.scm30
-rw-r--r--guix/build/utils.scm26
2 files changed, 33 insertions, 23 deletions
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index cdfba2f9b7..2880168273 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -115,29 +115,15 @@ working directory."
(define* (patch-usr-bin-file #:key native-inputs inputs
(patch-/usr/bin/file? #t)
#:allow-other-keys)
- "Patch occurrences of /usr/bin/file in configure, if present."
+ "Patch occurrences of \"/usr/bin/file\" in all the executable 'configure'
+files found in the source tree. This works around Libtool's Autoconf macros,
+which generates invocations of \"/usr/bin/file\" that are used to determine
+things like the ABI being used."
(when patch-/usr/bin/file?
- (let ((file "configure")
- (file-command (or (and=> (assoc-ref (or native-inputs inputs) "file")
- (cut string-append <> "/bin/file"))
- (which "file"))))
- (cond ((not (file-exists? file))
- (format (current-error-port)
- "patch-usr-bin-file: warning: `~a' not found~%"
- file))
- ((not file-command)
- (format (current-error-port)
- "patch-usr-bin-file: warning: `file' not found in PATH~%"))
- (else
- (let ((st (stat file)))
- (substitute* file
- (("/usr/bin/file")
- (begin
- (format (current-error-port)
- "patch-usr-bin-file: ~a: changing `~a' to `~a'~%"
- file "/usr/bin/file" file-command)
- file-command)))
- (set-file-time file st))))))
+ (for-each (lambda (file)
+ (when (executable-file? file)
+ (patch-/usr/bin/file file)))
+ (find-files "." "^configure$")))
#t)
(define* (patch-source-shebangs #:key source #:allow-other-keys)
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 86b7ca0155..4407f9af23 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;;
@@ -61,6 +61,7 @@
set-file-time
patch-shebang
patch-makefile-SHELL
+ patch-/usr/bin/file
fold-port-matches
remove-store-references
wrap-program))
@@ -681,6 +682,29 @@ When KEEP-MTIME? is true, the atime/mtime of FILE are kept unchanged."
(when keep-mtime?
(set-file-time file st))))
+(define* (patch-/usr/bin/file file
+ #:key
+ (file-command (which "file"))
+ (keep-mtime? #t))
+ "Patch occurrences of \"/usr/bin/file\" in FILE, replacing them with
+FILE-COMMAND. When KEEP-MTIME? is true, keep FILE's modification time
+unchanged."
+ (if (not file-command)
+ (format (current-error-port)
+ "patch-/usr/bin/file: warning: \
+no replacement 'file' command, doing nothing~%")
+ (let ((st (stat file)))
+ (substitute* file
+ (("/usr/bin/file")
+ (begin
+ (format (current-error-port)
+ "patch-/usr/bin/file: ~a: changing `~a' to `~a'~%"
+ file "/usr/bin/file" file-command)
+ file-command)))
+
+ (when keep-mtime?
+ (set-file-time file st)))))
+
(define* (fold-port-matches proc init pattern port
#:optional (unmatched (lambda (_ r) r)))
"Read from PORT character-by-character; for each match against