;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
+;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2016 David Thompson <davet@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
(define-module (gnu packages autotools)
#:use-module (guix licenses)
- #:use-module (distro)
+ #:use-module (gnu packages)
#:use-module (gnu packages perl)
#:use-module (gnu packages m4)
+ #:use-module (gnu packages bash)
+ #:use-module (guix utils)
#:use-module (guix packages)
#:use-module (guix download)
- #:use-module (guix build-system gnu))
+ #:use-module (guix build-system gnu)
+ #:use-module (guix build-system trivial)
+ #:use-module (ice-9 match)
+ #:export (autoconf-wrapper))
(define-public autoconf
(package
(base32
"113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
(build-system gnu-build-system)
- (inputs
+ (native-inputs
`(("perl" ,perl)
("m4" ,m4)))
;; XXX: testsuite: 209 and 279 failed. The latter is an impurity. It
(arguments `(#:tests? #f))
(home-page
"http://www.gnu.org/software/autoconf/")
- (synopsis
- "GNU Autoconf, a part of the GNU Build System")
+ (synopsis "Create source code configuration scripts")
(description
- "GNU Autoconf is an extensible package of M4 macros that produce
-shell scripts to automatically configure software source code
-packages. These scripts can adapt the packages to many kinds of
-UNIX-like systems without manual user intervention. Autoconf
-creates a configuration script for a package from a template
-file that lists the operating system features that the package
-can use, in the form of M4 macro calls.")
+ "Autoconf offers the developer a robust set of M4 macros which expand
+into shell code to test the features of Unix-like systems and to adapt
+automatically their software package to these systems. The resulting shell
+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+
-(define-public automake
+(define-public autoconf-2.68
+ (package (inherit autoconf)
+ (version "2.68")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/autoconf/autoconf-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "1fjm21k2na07f3vasf288a0zx66lbv0hd3l9bvv3q8p62s3pg569"))))))
+
+(define-public autoconf-2.64
+ ;; As of GDB 7.8, GDB is still developed using this version of Autoconf.
+ (package (inherit autoconf)
+ (version "2.64")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/autoconf/autoconf-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "0j3jdjpf5ly39dlp0bg70h72nzqr059k0x8iqxvaxf106chpgn9j"))))))
+
+
+(define* (autoconf-wrapper #:optional (autoconf autoconf))
+ "Return an wrapper around AUTOCONF that generates `configure' scripts that
+use our own Bash instead of /bin/sh in shebangs. For that reason, it should
+only be used internally---users should not end up distributing `configure'
+files with a system-specific shebang."
+ (package (inherit autoconf)
+ (name (string-append (package-name autoconf) "-wrapper"))
+ (build-system trivial-build-system)
+ (inputs `(("guile"
+ ;; XXX: Kludge to hide the circular dependency.
+ ,(module-ref (resolve-interface '(gnu packages guile))
+ 'guile-2.0))
+ ("autoconf" ,autoconf)
+ ("bash" ,bash)))
+ (arguments
+ '(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let* ((out (assoc-ref %outputs "out"))
+ (bin (string-append out "/bin"))
+ (autoconf (string-append
+ (assoc-ref %build-inputs "autoconf")
+ "/bin/autoconf"))
+ (guile (string-append
+ (assoc-ref %build-inputs "guile")
+ "/bin/guile"))
+ (sh (string-append
+ (assoc-ref %build-inputs "bash")
+ "/bin/sh"))
+ (modules ((compose dirname dirname dirname)
+ (search-path %load-path
+ "guix/build/utils.scm"))))
+ (mkdir-p bin)
+
+ ;; Symlink all the binaries but `autoconf'.
+ (with-directory-excursion bin
+ (for-each (lambda (file)
+ (unless (string=? (basename file) "autoconf")
+ (symlink file (basename file))))
+ (find-files (dirname autoconf) ".*")))
+
+ ;; Add an `autoconf' binary that wraps the real one.
+ (call-with-output-file (string-append bin "/autoconf")
+ (lambda (port)
+ ;; Shamefully, Guile can be used in shebangs only if a
+ ;; single argument is passed (-ds); otherwise it gets
+ ;; them all as a single argument and fails to parse them.
+ (format port "#!~a
+export GUILE_LOAD_PATH=\"~a\"
+export GUILE_LOAD_COMPILED_PATH=\"~a\"
+exec ~a --no-auto-compile \"$0\" \"$@\"
+!#~%"
+ sh modules modules guile)
+ (write
+ `(begin
+ (use-modules (guix build utils))
+ (let ((result (apply system* ,autoconf
+ (cdr (command-line)))))
+ (when (and (file-exists? "configure")
+ (not (file-exists? "/bin/sh")))
+ ;; Patch regardless of RESULT, because `autoconf
+ ;; -Werror' can both create a `configure' file and
+ ;; return a non-zero exit code.
+ (patch-shebang "configure"))
+ (exit (status:exit-val result))))
+ port)))
+ (chmod (string-append bin "/autoconf") #o555)))))))
+
+(define-public autoconf-archive
(package
- (name "automake")
- (version "1.12.6")
+ (name "autoconf-archive")
+ (version "2016.03.20")
(source
(origin
(method url-fetch)
- (uri (string-append "mirror://gnu/automake/automake-"
+ (uri (string-append "mirror://gnu/autoconf-archive/autoconf-archive-"
version ".tar.xz"))
(sha256
(base32
- "1ynvca8z4aqcwr94rf7j1bfiid2w9w250y9qhnyj9vmi8lhsnd7q"))))
+ "0dz4fnc723jqn3by22ds5fys7g31apzm1r9allldvva0yvzjxyw8"))))
(build-system gnu-build-system)
- (inputs
- `(("autoconf" ,autoconf)
- ("perl" ,perl)))
- (home-page
- "http://www.gnu.org/software/automake/")
- (synopsis
- "GNU Automake, a GNU standard-compliant makefile generator")
+ (home-page "https://www.gnu.org/software/autoconf-archive")
+ (synopsis "Collection of freely reusable Autoconf macros")
(description
- "GNU Automake is a tool for automatically generating
-`Makefile.in' files compliant with the GNU Coding
-Standards. Automake requires the use of Autoconf.")
- (license gpl2+))) ; some files are under GPLv3+
+ "Autoconf Archive is a collection of over 450 new macros for Autoconf,
+greatly expanding the domain of its functionality. These macros have been
+contributed as free software by the community.")
+ (license gpl3+)))
-(define-public libtool
+(define-public autobuild
(package
- (name "libtool")
- (version "2.4.2")
+ (name "autobuild")
+ (version "5.3")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://savannah/autobuild/autobuild-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0gv7g61ja9q9zg1m30k4snqwwy1kq7b4df6sb7d2qra7kbdq8af1"))))
+ (build-system gnu-build-system)
+ (inputs `(("perl" ,perl)))
+ (synopsis "Process generated build logs")
+ (description "Autobuild is a package that processes build logs generated
+when building software. Autobuild is primarily focused on packages using
+Autoconf and Automake, but can be used with other build systems too.
+Autobuild generates an HTML summary file, containing links to each build log.
+The summary includes project name, version, build hostname, host type (cross
+compile aware), date of build, and indication of success or failure. The
+output is indexed in many ways to simplify browsing.")
+ (home-page "http://josefsson.org/autobuild/")
+ (license gpl3+)))
+
+(define-public automake
+ (package
+ (name "automake")
+ (version "1.15")
(source (origin
(method url-fetch)
- (uri (string-append "mirror://gnu/libtool/libtool-"
- version ".tar.gz"))
+ (uri (string-append "mirror://gnu/automake/automake-"
+ version ".tar.xz"))
(sha256
(base32
- "0649qfpzkswgcj9vqkkr9rn4nlcx80faxpyqscy2k1x9c94f93dk"))))
+ "0dl6vfi2lzz8alnklwxzfz624b95hb1ipjvd3mk177flmddcf24r"))
+ (patches
+ (search-patches "automake-regexp-syntax.patch"
+ "automake-skip-amhello-tests.patch"))))
(build-system gnu-build-system)
- (native-inputs `(("m4" ,m4)
- ("perl" ,perl)))
+ (native-inputs
+ `(("autoconf" ,(autoconf-wrapper))
+ ("perl" ,perl)))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "ACLOCAL_PATH")
+ (files '("share/aclocal")))))
+ (arguments
+ '(#:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (srfi srfi-1)
+ (srfi srfi-26)
+ (rnrs io ports))
+ #:phases (alist-cons-before
+ 'patch-source-shebangs 'patch-tests-shebangs
+ (lambda _
+ (let ((sh (which "sh")))
+ (substitute* (find-files "t" "\\.(sh|tap)$")
+ (("#![[:blank:]]?/bin/sh")
+ (string-append "#!" sh)))
- ;; Separate binaries from the rest. During bootstrap, only ltdl is
- ;; used; not depending on the binaries allows us to avoid retaining
- ;; a reference to the bootstrap bash.
- (outputs '("bin" ; libtoolize, libtool, etc.
- "out")) ; libltdl.so, ltdl.h, etc.
+ ;; Set these variables for all the `configure' runs
+ ;; that occur during the test suite.
+ (setenv "SHELL" sh)
+ (setenv "CONFIG_SHELL" sh)))
+
+ ;; Files like `install-sh', `mdate.sh', etc. must use
+ ;; #!/bin/sh, otherwise users could leak erroneous shebangs
+ ;; in the wild. See <http://bugs.gnu.org/14201> for an
+ ;; example.
+ (alist-cons-after
+ 'install 'unpatch-shebangs
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (dir (string-append out "/share")))
+ (define (starts-with-shebang? file)
+ (equal? (call-with-input-file file
+ (lambda (p)
+ (list (get-u8 p) (get-u8 p))))
+ (map char->integer '(#\# #\!))))
+
+ (for-each (lambda (file)
+ (when (and (starts-with-shebang? file)
+ (executable-file? file))
+ (format #t "restoring shebang on `~a'~%"
+ file)
+ (substitute* file
+ (("^#!.*/bin/sh")
+ "#!/bin/sh")
+ (("^#!.*/bin/env(.*)$" _ args)
+ (string-append "#!/usr/bin/env"
+ args)))))
+ (find-files dir ".*"))))
+ %standard-phases))))
+ (home-page "http://www.gnu.org/software/automake/")
+ (synopsis "Making GNU standards-compliant Makefiles")
+ (description
+ "Automake the part of the GNU build system for producing
+standards-compliant Makefiles. Build requirements are entered in an
+intuitive format and then Automake works with Autoconf to produce a robust
+Makefile, simplifying the entire process for the developer.")
+ (license gpl2+))) ; some files are under GPLv3+
+
+(define-public libtool
+ (package
+ (name "libtool")
+ (version "2.4.6")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/libtool/libtool-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))
+ (patches (search-patches "libtool-skip-tests2.patch"))))
+ (build-system gnu-build-system)
+ (propagated-inputs `(("m4" ,m4)))
+ (native-inputs `(("m4" ,m4)
+ ("perl" ,perl)
+ ("automake" ,automake) ;some tests rely on 'aclocal'
+ ("autoconf" ,(autoconf-wrapper)))) ;others on 'autom4te'
(arguments
- `(#:patches (list (assoc-ref %build-inputs "patch/skip-tests"))
+ `(;; Libltdl is provided as a separate package, so don't install it here.
+ #:configure-flags '("--disable-ltdl-install")
+
+ ;; XXX: There are test failures on mips64el-linux starting from 2.4.4:
+ ;; <http://hydra.gnu.org/build/181662>.
+ #:tests? ,(not (string-prefix? "mips64"
+ (or (%current-target-system)
+ (%current-system))))
+
#:phases (alist-cons-before
'check 'pre-check
(lambda* (#:key inputs #:allow-other-keys)
;; Run the test suite in parallel, if possible.
- (let ((ncores
- (cond
- ((getenv "NIX_BUILD_CORES")
- =>
- (lambda (n)
- (if (zero? (string->number n))
- (number->string (current-processor-count))
- n)))
- (else "1"))))
- (setenv "TESTSUITEFLAGS"
- (string-append "-j" ncores)))
+ (setenv "TESTSUITEFLAGS"
+ (string-append
+ "-j"
+ (number->string (parallel-job-count))))
;; Path references to /bin/sh.
(let ((bash (assoc-ref inputs "bash")))
(("/bin/sh")
(string-append bash "/bin/bash")))))
%standard-phases)))
- (inputs `(("patch/skip-tests"
- ,(search-patch "libtool-skip-tests.patch"))))
- (synopsis "GNU Libtool, a generic library support script")
+ (synopsis "Generic shared library support tools")
(description
- "GNU libtool is a generic library support script. Libtool hides the
-complexity of using shared libraries behind a consistent, portable interface.
-
-To use libtool, add the new generic library building commands to your
-Makefile, Makefile.in, or Makefile.am. See the documentation for
-details.")
+ "GNU Libtool helps in the creation and use of shared libraries, by
+presenting a single consistent, portable interface that hides the usual
+complexity of working with shared libraries across platforms.")
(license gpl3+)
(home-page "http://www.gnu.org/software/libtool/")))
+
+(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
+ ;; readily usable during bootstrap), and it builds very quickly since
+ ;; Libtool's extensive test suite isn't run.
+ (package
+ (name "libltdl")
+ (version "2.4.6")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/libtool/libtool-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:configure-flags '("--enable-ltdl-install") ;really install it
+ #:phases (alist-cons-before
+ 'configure 'change-directory
+ (lambda _
+ (chdir "libltdl"))
+ %standard-phases)))
+
+ (synopsis "System-independent dlopen wrapper of GNU libtool")
+ (description (package-description libtool))
+ (home-page (package-home-page libtool))
+ (license lgpl2.1+)))