aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan (janneke) Nieuwenhuizen <janneke@gnu.org>2020-04-18 19:49:54 +0200
committerJan Nieuwenhuizen <janneke@gnu.org>2020-04-23 07:18:47 +0200
commitb085d43633d28b1810b7bc74f8dff25717056420 (patch)
tree69f906cf4eed95c4fdbc5a1fd46c3fdbfdcbc612
parente5109374d89713268079dff9c0c6a154e2068f8f (diff)
downloadpatches-b085d43633d28b1810b7bc74f8dff25717056420.tar
patches-b085d43633d28b1810b7bc74f8dff25717056420.tar.gz
gnu: autoconf: Support cross-build.
Autoconf does not cross-built properly: it lacks the concept of <tool>-for-build. It runs the host `autom4te' (a perl script) during build. * gnu/packages/autotools.scm (autoconf)[inputs]: Add bash-minimal, perl, and m4. To avoid triggering a rebuild, do this while cross-compiling only. [arguments]: When cross-building, add `patch-non-shebang-references' phase to substitute the host bash, m4 and perl.
-rw-r--r--gnu/packages/autotools.scm38
1 files changed, 35 insertions, 3 deletions
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 99ca52730e..26acfad95f 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -10,6 +10,7 @@
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019 Pierre-Moana Levesque <pierre.moana.levesque@gmail.com>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -55,12 +56,43 @@
(base32
"113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
(build-system gnu-build-system)
+ (inputs
+ ;; TODO: remove `if' in the next rebuild cycle.
+ (if (%current-target-system)
+ `(("bash" ,bash-minimal)
+ ("perl" ,perl)
+ ("m4" ,m4))
+ '()))
(native-inputs
`(("perl" ,perl)
("m4" ,m4)))
- ;; XXX: testsuite: 209 and 279 failed. The latter is an impurity. It
- ;; should use our own "cpp" instead of "/lib/cpp".
- (arguments `(#:tests? #f))
+ (arguments
+ `(;; XXX: testsuite: 209 and 279 failed. The latter is an impurity. It
+ ;; should use our own "cpp" instead of "/lib/cpp".
+ #:tests? #f
+ ,@(if (%current-target-system)
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'patch-non-shebang-references
+ (lambda* (#:key build inputs outputs #:allow-other-keys)
+ ;; `patch-shebangs' patches shebangs only, and the Perl
+ ;; scripts use a re-exec feature that references the
+ ;; build hosts' perl. Also, BASH and M4 store references
+ ;; hide in the scripts.
+ (let ((bash (assoc-ref inputs "bash"))
+ (m4 (assoc-ref inputs "m4"))
+ (perl (assoc-ref inputs "perl"))
+ (out (assoc-ref outputs "out"))
+ (store-directory (%store-directory)))
+ (substitute* (find-files (string-append out "/bin"))
+ (((string-append store-directory "/[^/]*-bash-[^/]*"))
+ bash)
+ (((string-append store-directory "/[^/]*-m4-[^/]*"))
+ m4)
+ (((string-append store-directory "/[^/]*-perl-[^/]*"))
+ perl))
+ #t)))))
+ '())))
(home-page "https://www.gnu.org/software/autoconf/")
(synopsis "Create source code configuration scripts")
(description