gnu: Add external-program.
[jackhill/guix/guix.git] / gnu / packages / autotools.scm
CommitLineData
233e7676
LC
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
ecbea1bc 3;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
2b00a550 4;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
c6e96280 5;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
a33391bd 6;;; Copyright © 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
6b0686fa 7;;; Copyright © 2016 David Thompson <davet@gnu.org>
47956fa0 8;;; Copyright © 2017 ng0 <ng0@n0.is>
c71bbfcc 9;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
cc355333 10;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
2b4e5568 11;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
80ffc708 12;;;
233e7676 13;;; This file is part of GNU Guix.
80ffc708 14;;;
233e7676 15;;; GNU Guix is free software; you can redistribute it and/or modify it
80ffc708
NK
16;;; under the terms of the GNU General Public License as published by
17;;; the Free Software Foundation; either version 3 of the License, or (at
18;;; your option) any later version.
19;;;
233e7676 20;;; GNU Guix is distributed in the hope that it will be useful, but
80ffc708
NK
21;;; WITHOUT ANY WARRANTY; without even the implied warranty of
22;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23;;; GNU General Public License for more details.
24;;;
25;;; You should have received a copy of the GNU General Public License
233e7676 26;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
80ffc708 27
1ffa7090 28(define-module (gnu packages autotools)
4a44e743 29 #:use-module (guix licenses)
59a43334 30 #:use-module (gnu packages)
1ffa7090 31 #:use-module (gnu packages perl)
bfe88e0c 32 #:use-module (gnu packages python)
1ffa7090 33 #:use-module (gnu packages m4)
98341757 34 #:use-module (gnu packages man)
7cd1d7bd
LC
35 #:use-module (gnu packages bash)
36 #:use-module (guix utils)
80ffc708
NK
37 #:use-module (guix packages)
38 #:use-module (guix download)
7cd1d7bd 39 #:use-module (guix build-system gnu)
c6e96280
MR
40 #:use-module (guix build-system trivial)
41 #:use-module (ice-9 match)
42 #:export (autoconf-wrapper))
80ffc708
NK
43
44(define-public autoconf
45 (package
46 (name "autoconf")
47 (version "2.69")
48 (source
49 (origin
50 (method url-fetch)
51 (uri (string-append "mirror://gnu/autoconf/autoconf-"
52 version ".tar.xz"))
53 (sha256
54 (base32
55 "113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
56 (build-system gnu-build-system)
a6abac9f 57 (native-inputs
80ffc708
NK
58 `(("perl" ,perl)
59 ("m4" ,m4)))
60 ;; XXX: testsuite: 209 and 279 failed. The latter is an impurity. It
61 ;; should use our own "cpp" instead of "/lib/cpp".
62 (arguments `(#:tests? #f))
63 (home-page
64 "http://www.gnu.org/software/autoconf/")
f50d2669 65 (synopsis "Create source code configuration scripts")
80ffc708 66 (description
a22dc0c4
LC
67 "Autoconf offers the developer a robust set of M4 macros which expand
68into shell code to test the features of Unix-like systems and to adapt
69automatically their software package to these systems. The resulting shell
70scripts are self-contained and portable, freeing the user from needing to
71know anything about Autoconf or M4.")
4a44e743 72 (license gpl3+))) ; some files are under GPLv2+
80ffc708 73
c6e96280
MR
74(define-public autoconf-2.68
75 (package (inherit autoconf)
76 (version "2.68")
77 (source
78 (origin
79 (method url-fetch)
80 (uri (string-append "mirror://gnu/autoconf/autoconf-"
81 version ".tar.xz"))
82 (sha256
83 (base32
84 "1fjm21k2na07f3vasf288a0zx66lbv0hd3l9bvv3q8p62s3pg569"))))))
85
2a7050ab
LC
86(define-public autoconf-2.64
87 ;; As of GDB 7.8, GDB is still developed using this version of Autoconf.
88 (package (inherit autoconf)
89 (version "2.64")
90 (source
91 (origin
92 (method url-fetch)
93 (uri (string-append "mirror://gnu/autoconf/autoconf-"
94 version ".tar.xz"))
95 (sha256
96 (base32
97 "0j3jdjpf5ly39dlp0bg70h72nzqr059k0x8iqxvaxf106chpgn9j"))))))
98
fe18e257
MW
99(define-public autoconf-2.13
100 ;; GNU IceCat 52.x requires autoconf-2.13 to build!
101 (package (inherit autoconf)
102 (version "2.13")
103 (source
104 (origin
105 (method url-fetch)
106 (uri (string-append "mirror://gnu/autoconf/autoconf-"
107 version ".tar.gz"))
108 (sha256
109 (base32
110 "07krzl4czczdsgzrrw9fiqx35xcf32naf751khg821g5pqv12qgh"))))
111 (arguments
112 `(#:tests? #f
113 #:phases
114 ;; The 'configure' script in autoconf-2.13 can't cope with "SHELL=" and
115 ;; "CONFIG_SHELL=" arguments, so we set them as environment variables
116 ;; and pass a simplified set of arguments.
117 (modify-phases %standard-phases
118 (replace 'configure
119 (lambda* (#:key build inputs outputs #:allow-other-keys)
120 (let ((bash (which "bash"))
121 (out (assoc-ref outputs "out")))
122 (setenv "CONFIG_SHELL" bash)
123 (setenv "SHELL" bash)
95cc40a8
MW
124 (invoke bash "./configure"
125 (string-append "--prefix=" out)
126 (string-append "--build=" build))))))))))
fe18e257 127
2a7050ab 128
464f5447
LC
129(define (make-autoconf-wrapper autoconf)
130 "Return a wrapper around AUTOCONF that generates `configure' scripts that
c6e96280
MR
131use our own Bash instead of /bin/sh in shebangs. For that reason, it should
132only be used internally---users should not end up distributing `configure'
133files with a system-specific shebang."
7cd1d7bd 134 (package (inherit autoconf)
7cd1d7bd
LC
135 (name (string-append (package-name autoconf) "-wrapper"))
136 (build-system trivial-build-system)
137 (inputs `(("guile"
168030ea
LC
138 ;; XXX: Kludge to hide the circular dependency.
139 ,(module-ref (resolve-interface '(gnu packages guile))
140 'guile-2.0))
7cd1d7bd
LC
141 ("autoconf" ,autoconf)
142 ("bash" ,bash)))
143 (arguments
144 '(#:modules ((guix build utils))
145 #:builder
146 (begin
147 (use-modules (guix build utils))
148 (let* ((out (assoc-ref %outputs "out"))
149 (bin (string-append out "/bin"))
150 (autoconf (string-append
151 (assoc-ref %build-inputs "autoconf")
152 "/bin/autoconf"))
153 (guile (string-append
154 (assoc-ref %build-inputs "guile")
155 "/bin/guile"))
156 (sh (string-append
157 (assoc-ref %build-inputs "bash")
158 "/bin/sh"))
159 (modules ((compose dirname dirname dirname)
160 (search-path %load-path
161 "guix/build/utils.scm"))))
162 (mkdir-p bin)
163
164 ;; Symlink all the binaries but `autoconf'.
165 (with-directory-excursion bin
166 (for-each (lambda (file)
167 (unless (string=? (basename file) "autoconf")
168 (symlink file (basename file))))
169 (find-files (dirname autoconf) ".*")))
170
171 ;; Add an `autoconf' binary that wraps the real one.
172 (call-with-output-file (string-append bin "/autoconf")
173 (lambda (port)
174 ;; Shamefully, Guile can be used in shebangs only if a
175 ;; single argument is passed (-ds); otherwise it gets
176 ;; them all as a single argument and fails to parse them.
177 (format port "#!~a
178export GUILE_LOAD_PATH=\"~a\"
179export GUILE_LOAD_COMPILED_PATH=\"~a\"
180exec ~a --no-auto-compile \"$0\" \"$@\"
181!#~%"
182 sh modules modules guile)
183 (write
184 `(begin
185 (use-modules (guix build utils))
186 (let ((result (apply system* ,autoconf
187 (cdr (command-line)))))
f11617d8
LC
188 (when (and (file-exists? "configure")
189 (not (file-exists? "/bin/sh")))
190 ;; Patch regardless of RESULT, because `autoconf
191 ;; -Werror' can both create a `configure' file and
192 ;; return a non-zero exit code.
193 (patch-shebang "configure"))
194 (exit (status:exit-val result))))
7cd1d7bd 195 port)))
a33391bd
MW
196 (chmod (string-append bin "/autoconf") #o555)
197 #t))))
464f5447
LC
198
199 ;; Do not show it in the UI since it's meant for internal use.
200 (properties '((hidden? . #t)))))
201
202(define-public autoconf-wrapper
203 (make-autoconf-wrapper autoconf))
7cd1d7bd 204
6b0686fa
DT
205(define-public autoconf-archive
206 (package
207 (name "autoconf-archive")
c71bbfcc 208 (version "2019.01.06")
6b0686fa
DT
209 (source
210 (origin
211 (method url-fetch)
212 (uri (string-append "mirror://gnu/autoconf-archive/autoconf-archive-"
213 version ".tar.xz"))
214 (sha256
215 (base32
c71bbfcc 216 "0gqya7nf4j5k98dkky0c3bnr0paciya91vkqazg7knlq621mq68p"))))
6b0686fa 217 (build-system gnu-build-system)
6fd52309 218 (home-page "https://www.gnu.org/software/autoconf-archive/")
6b0686fa
DT
219 (synopsis "Collection of freely reusable Autoconf macros")
220 (description
221 "Autoconf Archive is a collection of over 450 new macros for Autoconf,
222greatly expanding the domain of its functionality. These macros have been
223contributed as free software by the community.")
224 (license gpl3+)))
225
2b00a550
ML
226(define-public autobuild
227 (package
228 (name "autobuild")
229 (version "5.3")
230 (source (origin
231 (method url-fetch)
232 (uri (string-append "mirror://savannah/autobuild/autobuild-"
233 version ".tar.gz"))
234 (sha256
235 (base32
236 "0gv7g61ja9q9zg1m30k4snqwwy1kq7b4df6sb7d2qra7kbdq8af1"))))
237 (build-system gnu-build-system)
238 (inputs `(("perl" ,perl)))
239 (synopsis "Process generated build logs")
240 (description "Autobuild is a package that processes build logs generated
241when building software. Autobuild is primarily focused on packages using
242Autoconf and Automake, but can be used with other build systems too.
243Autobuild generates an HTML summary file, containing links to each build log.
244The summary includes project name, version, build hostname, host type (cross
245compile aware), date of build, and indication of success or failure. The
246output is indexed in many ways to simplify browsing.")
247 (home-page "http://josefsson.org/autobuild/")
248 (license gpl3+)))
249
80ffc708
NK
250(define-public automake
251 (package
252 (name "automake")
f74181d4 253 (version "1.16.1")
7cd1d7bd
LC
254 (source (origin
255 (method url-fetch)
256 (uri (string-append "mirror://gnu/automake/automake-"
257 version ".tar.xz"))
258 (sha256
259 (base32
f74181d4 260 "08g979ficj18i1w6w5219bgmns7czr03iadf20mk3lrzl8wbn1ax"))
01eafd38 261 (patches
01c7193e 262 (search-patches "automake-skip-amhello-tests.patch"))))
80ffc708 263 (build-system gnu-build-system)
a6abac9f 264 (native-inputs
464f5447 265 `(("autoconf" ,autoconf-wrapper)
01eafd38 266 ("perl" ,perl)))
a9db7d10
LC
267 (native-search-paths
268 (list (search-path-specification
269 (variable "ACLOCAL_PATH")
af070955 270 (files '("share/aclocal")))))
7cd1d7bd 271 (arguments
01eafd38 272 '(#:modules ((guix build gnu-build-system)
63b7c6c1
LC
273 (guix build utils)
274 (srfi srfi-1)
275 (srfi srfi-26)
276 (rnrs io ports))
759807e8
EF
277 #:phases
278 (modify-phases %standard-phases
279 (add-before 'patch-source-shebangs 'patch-tests-shebangs
280 (lambda _
281 (let ((sh (which "sh")))
282 (substitute* (find-files "t" "\\.(sh|tap)$")
283 (("#![[:blank:]]?/bin/sh")
284 (string-append "#!" sh)))
7cd1d7bd 285
759807e8
EF
286 ;; Set these variables for all the `configure' runs
287 ;; that occur during the test suite.
288 (setenv "SHELL" sh)
289 (setenv "CONFIG_SHELL" sh)
290 #t)))
9be8d7c8 291
cc355333
TGR
292 ;; Files like `install-sh', `mdate.sh', etc. must use
293 ;; #!/bin/sh, otherwise users could leak erroneous shebangs
294 ;; in the wild. See <http://bugs.gnu.org/14201> for an
295 ;; example.
296 (add-after 'install 'unpatch-shebangs
297 (lambda* (#:key outputs #:allow-other-keys)
298 (let* ((out (assoc-ref outputs "out"))
299 (dir (string-append out "/share")))
300 (define (starts-with-shebang? file)
301 (equal? (call-with-input-file file
302 (lambda (p)
303 (list (get-u8 p) (get-u8 p))))
304 (map char->integer '(#\# #\!))))
63b7c6c1 305
cc355333
TGR
306 (for-each (lambda (file)
307 (when (and (starts-with-shebang? file)
308 (executable-file? file))
309 (format #t "restoring shebang on `~a'~%"
310 file)
311 (substitute* file
312 (("^#!.*/bin/sh")
313 "#!/bin/sh")
314 (("^#!.*/bin/env(.*)$" _ args)
315 (string-append "#!/usr/bin/env"
316 args)))))
317 (find-files dir ".*"))
318 #t))))))
6fd52309 319 (home-page "https://www.gnu.org/software/automake/")
f50d2669 320 (synopsis "Making GNU standards-compliant Makefiles")
80ffc708 321 (description
79c311b8
LC
322 "Automake the part of the GNU build system for producing
323standards-compliant Makefiles. Build requirements are entered in an
324intuitive format and then Automake works with Autoconf to produce a robust
325Makefile, simplifying the entire process for the developer.")
7cd1d7bd 326 (license gpl2+))) ; some files are under GPLv3+
36d4d49e
NK
327
328(define-public libtool
329 (package
330 (name "libtool")
192c6f96 331 (version "2.4.6")
36d4d49e 332 (source (origin
c154e1ea
LC
333 (method url-fetch)
334 (uri (string-append "mirror://gnu/libtool/libtool-"
335 version ".tar.xz"))
336 (sha256
337 (base32
192c6f96 338 "0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))
fc1adab1 339 (patches (search-patches "libtool-skip-tests2.patch"))))
36d4d49e 340 (build-system gnu-build-system)
62c155c0 341 (propagated-inputs `(("m4" ,m4)))
36d4d49e 342 (native-inputs `(("m4" ,m4)
c154e1ea 343 ("perl" ,perl)
2b4e5568
RW
344 ;; XXX: this shouldn't be necessary, but without it test
345 ;; 102 fails because it cannot find ltdl/libltdl.la.
346 ("libltdl" ,libltdl)
98341757 347 ("help2man" ,help2man) ;because we modify ltmain.sh
c154e1ea 348 ("automake" ,automake) ;some tests rely on 'aclocal'
464f5447 349 ("autoconf" ,autoconf-wrapper))) ;others on 'autom4te'
2f8a123e 350
36d4d49e 351 (arguments
3246cc91
LC
352 `(;; Libltdl is provided as a separate package, so don't install it here.
353 #:configure-flags '("--disable-ltdl-install")
354
355 ;; XXX: There are test failures on mips64el-linux starting from 2.4.4:
356 ;; <http://hydra.gnu.org/build/181662>.
357 #:tests? ,(not (string-prefix? "mips64"
358 (or (%current-target-system)
359 (%current-system))))
c154e1ea 360
dc70626d 361 #:phases
362 (modify-phases %standard-phases
363 (add-before 'check 'pre-check
364 (lambda* (#:key inputs #:allow-other-keys)
365 ;; Run the test suite in parallel, if possible.
366 (setenv "TESTSUITEFLAGS"
367 (string-append
368 "-j"
369 (number->string (parallel-job-count))))
c5862bda 370 ;; Patch references to /bin/sh.
dc70626d 371 (let ((bash (assoc-ref inputs "bash")))
372 (substitute* "tests/testsuite"
373 (("/bin/sh")
78c172a5
LF
374 (string-append bash "/bin/sh")))
375 #t)))
98341757 376 (add-after 'patch-source-shebangs 'restore-ltmain-shebang
377 (lambda* (#:key inputs #:allow-other-keys)
378 (substitute* "build-aux/ltmain.in"
92e77959 379 (("^#!.*/bin/sh$") "#!/bin/sh"))
78c172a5 380 #t)))))
42ff70e2 381
f50d2669 382 (synopsis "Generic shared library support tools")
36d4d49e 383 (description
79c311b8
LC
384 "GNU Libtool helps in the creation and use of shared libraries, by
385presenting a single consistent, portable interface that hides the usual
386complexity of working with shared libraries across platforms.")
4a44e743 387 (license gpl3+)
6fd52309 388 (home-page "https://www.gnu.org/software/libtool/")))
e13f715b 389
3cbb3f9c
LC
390(define-public libltdl
391 ;; This is a libltdl package separate from the libtool package. This is
392 ;; useful because, unlike libtool, it has zero extra dependencies (making it
393 ;; readily usable during bootstrap), and it builds very quickly since
394 ;; Libtool's extensive test suite isn't run.
395 (package
396 (name "libltdl")
192c6f96 397 (version "2.4.6")
a101c891
LC
398 (source (origin
399 (method url-fetch)
400 (uri (string-append "mirror://gnu/libtool/libtool-"
401 version ".tar.xz"))
402 (sha256
403 (base32
ef593a10 404 "0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))))
3cbb3f9c
LC
405 (build-system gnu-build-system)
406 (arguments
407 '(#:configure-flags '("--enable-ltdl-install") ;really install it
8c88e0ba
EF
408 #:phases (modify-phases %standard-phases
409 (add-before 'configure 'change-directory
410 (lambda _ (chdir "libltdl") #t)))))
3cbb3f9c
LC
411
412 (synopsis "System-independent dlopen wrapper of GNU libtool")
413 (description (package-description libtool))
414 (home-page (package-home-page libtool))
415 (license lgpl2.1+)))
bfe88e0c
ML
416
417(define-public pyconfigure
418 (package
419 (name "pyconfigure")
420 (version "0.2.3")
421 (source (origin
422 (method url-fetch)
423 (uri (string-append "mirror://gnu/pyconfigure/pyconfigure-"
424 version ".tar.gz"))
425 (sha256
426 (base32
427 "0kxi9bg7l6ric39vbz9ykz4a21xlihhh2zcc3297db8amvhqwhrp"))))
428 (build-system gnu-build-system)
429 (arguments
430 `(#:phases
431 (modify-phases %standard-phases
432 (add-before 'configure 'patch-python
433 (lambda _
434 (substitute* "pyconf.in"
435 (("/usr/bin/env python") (which "python3")))
436 #t)))))
437 (inputs
438 `(("python" ,python-3)))
439 (synopsis "@command{configure} interface for Python-based packages")
440 (description
441 "GNU pyconfigure provides template files for easily implementing
442standards-compliant configure scripts and Makefiles for Python-based packages.
443It is designed to work alongside existing Python setup scripts, making it easy
444to integrate into existing projects. Powerful and flexible Autoconf macros
445are available, allowing you to easily make adjustments to the installation
446procedure based on the capabilities of the target computer.")
447 (home-page "https://www.gnu.org/software/pyconfigure/manual/")
448 (license
449 (fsf-free
450 "https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html"))))