Merge branch 'master' into core-updates-frozen
[jackhill/guix/guix.git] / gnu / packages / autotools.scm
index 657d4d3..16d6676 100644 (file)
@@ -1,16 +1,17 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
-;;; Copyright © 2017 ng0 <ng0@n0.is>
-;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017 Nikita <nikita@n0.is>
+;;; Copyright © 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; 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>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (ice-9 match)
   #:export (autoconf-wrapper))
 
-(define-public autoconf
+(define-public autoconf-2.69
   (package
     (name "autoconf")
     (version "2.69")
         "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))
-         '()))
+     `(("bash" ,bash-minimal)
+       ("perl" ,perl)
+       ("m4" ,m4)))
     (native-inputs
      `(("perl" ,perl)
        ("m4" ,m4)))
@@ -103,6 +102,51 @@ scripts are self-contained and portable, freeing the user from needing to
 know anything about Autoconf or M4.")
     (license gpl3+))) ; some files are under GPLv2+
 
+;; This is the renaissance version, which is not widely supported yet.
+(define-public autoconf-2.71
+  (package
+    (inherit autoconf-2.69)
+    (version "2.71")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnu/autoconf/autoconf-"
+                           version ".tar.xz"))
+       (sha256
+        (base32
+         "197sl23irn6s9pd54rxj5vcp5y8dv65jb9yfqgr2g56cxg7q6k7i"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments autoconf-2.69)
+       ((#:tests? _ #f)
+        ;; FIXME: To run the test suite, fix all the instances where scripts
+        ;; generates "#! /bin/sh" shebangs.
+        #f)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-before 'check 'prepare-tests
+             (lambda _
+               (for-each patch-shebang
+                         (append (find-files "tests"
+                                             (lambda (file stat)
+                                               (executable-file? file)))
+                                 (find-files "bin"
+                                             (lambda (file stat)
+                                               (executable-file? file)))))
+               #t))
+           (add-after 'install 'unpatch-shebangs
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Scripts that "autoconf -i" installs (config.guess,
+               ;; config.sub, and install-sh) must use a regular shebang
+               ;; rather than a reference to the store.  Restore it.
+               ;; TODO: Move this phase to 'autoconf-2.69'.
+               (let* ((out (assoc-ref outputs "out"))
+                      (build-aux (string-append
+                                  out "/share/autoconf/build-aux")))
+                 (substitute* (find-files build-aux)
+                   (("^#!.*/bin/sh") "#!/bin/sh")))))))))))
+
+(define-public autoconf autoconf-2.69)
+
 (define-public autoconf-2.68
   (package (inherit autoconf)
     (version "2.68")
@@ -169,9 +213,9 @@ files with a system-specific shebang."
     (inputs `(("guile"
                ;; XXX: Kludge to hide the circular dependency.
                ,(module-ref (resolve-interface '(gnu packages guile))
-                            'guile-2.0))
+                            'guile-3.0/fixed))
               ("autoconf" ,autoconf)
-              ("bash" ,bash)))
+              ("bash" ,bash-minimal)))
     (arguments
      '(#:modules ((guix build utils))
        #:builder
@@ -231,13 +275,15 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
     ;; Do not show it in the UI since it's meant for internal use.
     (properties '((hidden? . #t)))))
 
+;; Only use this package when autoconf is not usable,
+;; see <https://issues.guix.gnu.org/46564#1>.
 (define-public autoconf-wrapper
   (make-autoconf-wrapper autoconf))
 
 (define-public autoconf-archive
   (package
     (name "autoconf-archive")
-    (version "2019.01.06")
+    (version "2021.02.19")
     (source
      (origin
       (method url-fetch)
@@ -245,7 +291,7 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
                           version ".tar.xz"))
       (sha256
        (base32
-        "0gqya7nf4j5k98dkky0c3bnr0paciya91vkqazg7knlq621mq68p"))))
+        "1gcwqspcxiygnyk02smsk8ivzs9r69ji38izxzzsijyx52fyp9p8"))))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/autoconf-archive/")
     (synopsis "Collection of freely reusable Autoconf macros")
@@ -282,24 +328,21 @@ output is indexed in many ways to simplify browsing.")
 (define-public automake
   (package
     (name "automake")
-    (version "1.16.2")
+    (version "1.16.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/automake/automake-"
                                  version ".tar.xz"))
              (sha256
               (base32
-                "1l7dkqbsmbf94ax29jj1jf6a0r6ikc8jybg1p5m0c3ki7pg5ki6c"))
+                "0fmz2fhmzcpacnprl5msphvaflwiy0hvpgmqlgfny72ddijzfazz"))
              (patches
               (search-patches "automake-skip-amhello-tests.patch"))))
     (build-system gnu-build-system)
     (inputs
-     ;; TODO: remove `if' in the next rebuild cycle.
-     (if (%current-target-system)
-         `(("autoconf" ,autoconf-wrapper)
-           ("bash" ,bash-minimal)
-           ("perl" ,perl))
-         '()))
+     `(("autoconf" ,autoconf-wrapper)
+       ("bash" ,bash-minimal)
+       ("perl" ,perl)))
     (native-inputs
      `(("autoconf" ,autoconf-wrapper)
        ("perl" ,perl)))
@@ -444,11 +487,19 @@ Makefile, simplifying the entire process for the developer.")
                (("/bin/sh")
                 (string-append bash "/bin/sh")))
              #t)))
-         (add-after 'patch-source-shebangs 'restore-ltmain-shebang
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "build-aux/ltmain.in"
-               (("^#!.*/bin/sh$") "#!/bin/sh"))
-             #t)))))
+         ;; These files may be copied into source trees by libtoolize,
+         ;; therefore they must not point to store file names that would be
+         ;; leaked with tarballs generated by make dist.
+         (add-after 'install 'restore-build-aux-shebang
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dir (string-append out "/share/libtool/build-aux")))
+               (for-each (lambda (file)
+                           (format #t "restoring shebang on `~a'~%" file)
+                           (substitute* file
+                             (("^#!.*/bin/sh") "#!/bin/sh")))
+                         (find-files dir ".*"))
+               #t))))))
 
     (synopsis "Generic shared library support tools")
     (description
@@ -458,6 +509,53 @@ complexity of working with shared libraries across platforms.")
     (license gpl3+)
     (home-page "https://www.gnu.org/software/libtool/")))
 
+(define-public config
+  (let ((revision "1")
+        (commit "c8ddc8472f8efcadafc1ef53ca1d863415fddd5f"))
+    (package
+      (name "config")
+      (version (git-version "0.0.0" revision commit)) ;no release tag
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.savannah.gnu.org/git/config.git/")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0x6ycvkmmhhhag97wsf0pw8n5fvh12rjvrck90rz17my4ys16qwv"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    (add-after 'unpack 'patch-/bin/sh
+                      (lambda _
+                        (substitute* "testsuite/config-guess.sh"
+                          (("#!/bin/sh")
+                           (string-append "#!" (which "sh"))))
+                        #t))
+                    (replace 'build
+                      (lambda _
+                        (invoke "make" "manpages")))
+                    (delete 'configure)
+                    (replace 'install
+                      (lambda* (#:key outputs #:allow-other-keys)
+                        (let* ((out (assoc-ref outputs "out"))
+                               (bin (string-append out "/bin"))
+                               (man1 (string-append out "/share/man/man1")))
+                          (install-file "config.guess" bin)
+                          (install-file "config.sub" bin)
+                          (install-file "doc/config.guess.1" man1)
+                          (install-file "doc/config.sub.1" man1)
+                          #t))))))
+      (native-inputs
+       `(("help2man" ,help2man)))
+      (home-page "https://savannah.gnu.org/projects/config")
+      (synopsis "Ubiquitous config.guess and config.sub scripts")
+      (description "The `config.guess' script tries to guess a canonical system triple,
+and `config.sub' validates and canonicalizes.  These are used as part of
+configuration in nearly all GNU packages (and many others).")
+      (license gpl2+))))
+
 (define-public libltdl
   ;; This is a libltdl package separate from the libtool package.  This is
   ;; useful because, unlike libtool, it has zero extra dependencies (making it