Commit | Line | Data |
---|---|---|
233e7676 | 1 | ;;; GNU Guix --- Functional package management for GNU |
8a296947 | 2 | ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> |
722111ab | 3 | ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr> |
233e7676 | 4 | ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> |
3729ff41 | 5 | ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org> |
4c8425b7 | 6 | ;;; Copyright © 2014 Alex Kost <alezost@gmail.com> |
21a8fe1b | 7 | ;;; Copyright © 2014, 2015 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> |
665d6a59 | 8 | ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> |
7309045c | 9 | ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org> |
e162050d | 10 | ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> |
e3ce5d70 | 11 | ;;; |
233e7676 | 12 | ;;; This file is part of GNU Guix. |
e3ce5d70 | 13 | ;;; |
233e7676 | 14 | ;;; GNU Guix is free software; you can redistribute it and/or modify it |
e3ce5d70 LC |
15 | ;;; under the terms of the GNU General Public License as published by |
16 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
17 | ;;; your option) any later version. | |
18 | ;;; | |
233e7676 | 19 | ;;; GNU Guix is distributed in the hope that it will be useful, but |
e3ce5d70 LC |
20 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of |
21 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
22 | ;;; GNU General Public License for more details. | |
23 | ;;; | |
24 | ;;; You should have received a copy of the GNU General Public License | |
233e7676 | 25 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. |
e3ce5d70 | 26 | |
1ffa7090 | 27 | (define-module (gnu packages base) |
c6d7e299 | 28 | #:use-module ((guix licenses) |
7309045c | 29 | #:select (gpl3+ lgpl2.0+ lgpl3+ public-domain)) |
59a43334 | 30 | #:use-module (gnu packages) |
1ffa7090 LC |
31 | #:use-module (gnu packages acl) |
32 | #:use-module (gnu packages bash) | |
b5ef82e0 | 33 | #:use-module (gnu packages ed) |
1ffa7090 LC |
34 | #:use-module (gnu packages guile) |
35 | #:use-module (gnu packages multiprecision) | |
c9505f3f | 36 | #:use-module (gnu packages compression) |
1ffa7090 LC |
37 | #:use-module (gnu packages perl) |
38 | #:use-module (gnu packages linux) | |
8fd6487e | 39 | #:use-module (gnu packages texinfo) |
21a8fe1b | 40 | #:use-module (gnu packages hurd) |
aa6b0d6b | 41 | #:use-module (gnu packages pkg-config) |
a635ed5c | 42 | #:use-module (gnu packages gettext) |
aee6180c | 43 | #:use-module (guix utils) |
e3ce5d70 | 44 | #:use-module (guix packages) |
87f5d366 | 45 | #:use-module (guix download) |
21a8fe1b | 46 | #:use-module (guix git-download) |
c9505f3f | 47 | #:use-module (guix build-system gnu) |
b09617da MR |
48 | #:use-module (guix build-system trivial) |
49 | #:use-module (ice-9 match) | |
4dab8c59 JN |
50 | #:export (glibc |
51 | libiconv-if-needed)) | |
e3ce5d70 LC |
52 | |
53 | ;;; Commentary: | |
54 | ;;; | |
1722d680 | 55 | ;;; Base packages of the Guix-based GNU user-land software distribution. |
e3ce5d70 LC |
56 | ;;; |
57 | ;;; Code: | |
58 | ||
59 | (define-public hello | |
60 | (package | |
17d8e33f ML |
61 | (name "hello") |
62 | (version "2.10") | |
63 | (source (origin | |
64 | (method url-fetch) | |
65 | (uri (string-append "mirror://gnu/hello/hello-" version | |
66 | ".tar.gz")) | |
67 | (sha256 | |
68 | (base32 | |
69 | "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) | |
70 | (build-system gnu-build-system) | |
71 | (synopsis "Hello, GNU world: An example GNU package") | |
72 | (description | |
73 | "GNU Hello prints the message \"Hello, world!\" and then exits. It | |
a22dc0c4 LC |
74 | serves as an example of standard GNU coding practices. As such, it supports |
75 | command-line arguments, multiple languages, and so on.") | |
6fd52309 | 76 | (home-page "https://www.gnu.org/software/hello/") |
17d8e33f | 77 | (license gpl3+))) |
d7672884 | 78 | |
6794b278 LC |
79 | (define-public grep |
80 | (package | |
81 | (name "grep") | |
f3a79f88 | 82 | (version "3.0") |
6794b278 | 83 | (source (origin |
87f5d366 | 84 | (method url-fetch) |
0db342a5 | 85 | (uri (string-append "mirror://gnu/grep/grep-" |
6794b278 LC |
86 | version ".tar.xz")) |
87 | (sha256 | |
88 | (base32 | |
f3a79f88 | 89 | "1dcasjp3a578nrvzrcn38mpizb8w1q6mvfzhjmcqqgkf0nsivj72")) |
fc1adab1 | 90 | (patches (search-patches "grep-timing-sensitive-test.patch")))) |
6794b278 | 91 | (build-system gnu-build-system) |
304e4f51 | 92 | (native-inputs `(("perl" ,perl))) ;some of the tests require it |
1063d325 MW |
93 | (arguments |
94 | `(#:phases | |
95 | (modify-phases %standard-phases | |
96 | (add-after 'install 'fix-egrep-and-fgrep | |
97 | ;; Patch 'egrep' and 'fgrep' to execute 'grep' via its | |
98 | ;; absolute file name instead of searching for it in $PATH. | |
99 | (lambda* (#:key outputs #:allow-other-keys) | |
100 | (let* ((out (assoc-ref outputs "out")) | |
101 | (bin (string-append out "/bin"))) | |
102 | (substitute* (list (string-append bin "/egrep") | |
103 | (string-append bin "/fgrep")) | |
104 | (("^exec grep") | |
105 | (string-append "exec " bin "/grep"))) | |
106 | #t)))))) | |
f50d2669 | 107 | (synopsis "Print lines matching a pattern") |
d45122f5 | 108 | (description |
12bcf94a | 109 | "grep is a tool for finding text inside files. Text is found by |
a22dc0c4 | 110 | matching a pattern provided by the user in one or many files. The pattern |
79c311b8 LC |
111 | may be provided as a basic or extended regular expression, or as fixed |
112 | strings. By default, the matching text is simply printed to the screen, | |
113 | however the output can be greatly customized to include, for example, line | |
114 | numbers. GNU grep offers many extensions over the standard utility, | |
115 | including, for example, recursive directory searching.") | |
4a44e743 | 116 | (license gpl3+) |
6fd52309 | 117 | (home-page "https://www.gnu.org/software/grep/"))) |
6794b278 | 118 | |
8dcad9aa LC |
119 | (define-public sed |
120 | (package | |
121 | (name "sed") | |
d6592d84 | 122 | (version "4.4") |
8dcad9aa | 123 | (source (origin |
87f5d366 | 124 | (method url-fetch) |
0db342a5 | 125 | (uri (string-append "mirror://gnu/sed/sed-" version |
7d7ea947 | 126 | ".tar.xz")) |
8dcad9aa LC |
127 | (sha256 |
128 | (base32 | |
d6592d84 | 129 | "0fv88bcnraixc8jvpacvxshi30p5x9m7yb8ns1hfv07hmb2ypmnb")))) |
8dcad9aa | 130 | (build-system gnu-build-system) |
f50d2669 | 131 | (synopsis "Stream editor") |
52b8e5fc | 132 | (arguments |
8a296947 LC |
133 | `(#:phases |
134 | (modify-phases %standard-phases | |
c8b44fc1 LC |
135 | (add-after 'unpack 'dont-rebuild-sed.1 |
136 | (lambda _ | |
137 | ;; Make sure we do not attempt to rebuild 'doc/sed.1', which does | |
138 | ;; not work when cross-compiling because we cannot run 'sed'. | |
139 | ;; This is fixed upstream as commit a0a25e3. | |
140 | (substitute* "Makefile.in" | |
141 | (("^doc/sed\\.1:.*") | |
142 | "doc/sed.1:\n")) | |
143 | #t)) | |
8a296947 LC |
144 | (add-before 'patch-source-shebangs 'patch-test-suite |
145 | (lambda* (#:key inputs #:allow-other-keys) | |
146 | (patch-makefile-SHELL "testsuite/Makefile.tests") | |
147 | (substitute* '("testsuite/bsd.sh" | |
148 | "testsuite/bug-regex9.c") | |
149 | (("/bin/sh") | |
150 | (which "sh"))) | |
151 | #t))))) | |
d45122f5 | 152 | (description |
a22dc0c4 LC |
153 | "Sed is a non-interactive, text stream editor. It receives a text |
154 | input from a file or from standard input and it then applies a series of text | |
155 | editing commands to the stream and prints its output to standard output. It | |
79c311b8 LC |
156 | is often used for substituting text patterns in a stream. The GNU |
157 | implementation offers several extensions over the standard utility.") | |
4a44e743 | 158 | (license gpl3+) |
7d7ea947 | 159 | (home-page "https://www.gnu.org/software/sed/"))) |
8dcad9aa | 160 | |
85240322 LC |
161 | (define-public tar |
162 | (package | |
163 | (name "tar") | |
74d63739 | 164 | (version "1.29") |
85240322 | 165 | (source (origin |
87f5d366 | 166 | (method url-fetch) |
0db342a5 | 167 | (uri (string-append "mirror://gnu/tar/tar-" |
d6535cf1 | 168 | version ".tar.xz")) |
85240322 LC |
169 | (sha256 |
170 | (base32 | |
74d63739 | 171 | "097hx7sbzp8qirl4m930lw84kn0wmxhmq7v1qpra3mrg0b8cyba0")) |
20be64dc AV |
172 | (patches (search-patches "tar-CVE-2016-6321.patch" |
173 | "tar-skip-unreliable-tests.patch")))) | |
85240322 | 174 | (build-system gnu-build-system) |
74d63739 LC |
175 | ;; Note: test suite requires ~1GiB of disk space. |
176 | (arguments | |
177 | '(#:phases (modify-phases %standard-phases | |
178 | (add-before 'build 'set-shell-file-name | |
179 | (lambda* (#:key inputs #:allow-other-keys) | |
180 | ;; Do not use "/bin/sh" to run programs. | |
181 | (let ((bash (assoc-ref inputs "bash"))) | |
182 | (substitute* "src/system.c" | |
183 | (("/bin/sh") | |
184 | (string-append bash "/bin/sh"))) | |
185 | #t)))))) | |
bbe03294 LC |
186 | |
187 | ;; When cross-compiling, the 'set-shell-file-name' phase needs to be able | |
188 | ;; to refer to the target Bash. | |
189 | (inputs (if (%current-target-system) | |
190 | `(("bash" ,bash)) | |
191 | '())) | |
192 | ||
f50d2669 | 193 | (synopsis "Managing tar archives") |
d45122f5 | 194 | (description |
a22dc0c4 LC |
195 | "Tar provides the ability to create tar archives, as well as the |
196 | ability to extract, update or list files in an existing archive. It is | |
197 | useful for combining many files into one larger file, while maintaining | |
198 | directory structure and file information such as permissions and | |
79c311b8 LC |
199 | creation/modification dates. GNU tar offers many extensions over the |
200 | standard utility.") | |
4a44e743 | 201 | (license gpl3+) |
6fd52309 | 202 | (home-page "https://www.gnu.org/software/tar/"))) |
85240322 | 203 | |
fbeec3d9 LC |
204 | (define-public patch |
205 | (package | |
206 | (name "patch") | |
266d26df | 207 | (version "2.7.5") |
f6408bc5 LC |
208 | (source (origin |
209 | (method url-fetch) | |
210 | (uri (string-append "mirror://gnu/patch/patch-" | |
211 | version ".tar.xz")) | |
212 | (sha256 | |
213 | (base32 | |
16cae799 | 214 | "16d2r9kpivaak948mxzc0bai45mqfw73m113wrkmbffnalv1b5gx")) |
fc1adab1 | 215 | (patches (search-patches "patch-hurd-path-max.patch")))) |
fbeec3d9 | 216 | (build-system gnu-build-system) |
b3546174 | 217 | (native-inputs `(("ed" ,ed))) |
f50d2669 | 218 | (synopsis "Apply differences to originals, with optional backups") |
d45122f5 | 219 | (description |
a22dc0c4 | 220 | "Patch is a program that applies changes to files based on differences |
79c311b8 | 221 | laid out as by the program \"diff\". The changes may be applied to one or more |
a22dc0c4 LC |
222 | files depending on the contents of the diff file. It accepts several |
223 | different diff formats. It may also be used to revert previously applied | |
224 | differences.") | |
4a44e743 | 225 | (license gpl3+) |
6fd52309 | 226 | (home-page "https://savannah.gnu.org/projects/patch/"))) |
fbeec3d9 | 227 | |
04a32ee5 LC |
228 | (define-public diffutils |
229 | (package | |
230 | (name "diffutils") | |
1a93d094 | 231 | (version "3.5") |
04a32ee5 | 232 | (source (origin |
87f5d366 | 233 | (method url-fetch) |
0db342a5 | 234 | (uri (string-append "mirror://gnu/diffutils/diffutils-" |
04a32ee5 LC |
235 | version ".tar.xz")) |
236 | (sha256 | |
237 | (base32 | |
1a93d094 | 238 | "0csmqfz8ks23kdjsq0v2ll1acqiz8lva06dj19mwmymrsp69ilys")))) |
04a32ee5 | 239 | (build-system gnu-build-system) |
f50d2669 | 240 | (synopsis "Comparing and merging files") |
d45122f5 | 241 | (description |
79c311b8 LC |
242 | "GNU Diffutils is a package containing tools for finding the |
243 | differences between files. The \"diff\" command is used to show how two files | |
e881752c | 244 | differ, while \"cmp\" shows the offsets and line numbers where they differ. |
79c311b8 | 245 | \"diff3\" allows you to compare three files. Finally, \"sdiff\" offers an |
a22dc0c4 | 246 | interactive means to merge two files.") |
4a44e743 | 247 | (license gpl3+) |
6fd52309 | 248 | (home-page "https://www.gnu.org/software/diffutils/"))) |
04a32ee5 | 249 | |
af5521ca LC |
250 | (define-public findutils |
251 | (package | |
252 | (name "findutils") | |
e80d2555 | 253 | (version "4.6.0") |
af5521ca | 254 | (source (origin |
87f5d366 | 255 | (method url-fetch) |
0db342a5 | 256 | (uri (string-append "mirror://gnu/findutils/findutils-" |
af5521ca LC |
257 | version ".tar.gz")) |
258 | (sha256 | |
259 | (base32 | |
e80d2555 | 260 | "178nn4dl7wbcw499czikirnkniwnx36argdnqgz4ik9i6zvwkm6y")) |
fc1adab1 AK |
261 | (patches (search-patches "findutils-localstatedir.patch" |
262 | "findutils-test-xargs.patch")))) | |
af5521ca | 263 | (build-system gnu-build-system) |
af5521ca | 264 | (arguments |
67dfa198 LC |
265 | `(#:configure-flags (list |
266 | ;; Tell 'updatedb' to write to /var. | |
267 | "--localstatedir=/var" | |
268 | ||
269 | ;; Work around cross-compilation failure. See | |
270 | ;; <http://savannah.gnu.org/bugs/?27299#comment1>. | |
271 | ,@(if (%current-target-system) | |
272 | '("gl_cv_func_wcwidth_works=yes") | |
273 | '())))) | |
f50d2669 | 274 | (synopsis "Operating on files matching given criteria") |
d45122f5 | 275 | (description |
a22dc0c4 LC |
276 | "Findutils supplies the basic file directory searching utilities of the |
277 | GNU system. It consists of two primary searching utilities: \"find\" | |
278 | recursively searches for files in a directory according to given criteria and | |
279 | \"locate\" lists files in a database that match a query. Two auxiliary tools | |
79c311b8 LC |
280 | are included: \"updatedb\" updates the file name database and \"xargs\" may be |
281 | used to apply commands with arbitrarily long arguments.") | |
4a44e743 | 282 | (license gpl3+) |
6fd52309 | 283 | (home-page "https://www.gnu.org/software/findutils/"))) |
2c957cd2 LC |
284 | |
285 | (define-public coreutils | |
286 | (package | |
287 | (name "coreutils") | |
bec5022f | 288 | (version "8.26") |
2c957cd2 | 289 | (source (origin |
87f5d366 | 290 | (method url-fetch) |
0db342a5 | 291 | (uri (string-append "mirror://gnu/coreutils/coreutils-" |
2c957cd2 LC |
292 | version ".tar.xz")) |
293 | (sha256 | |
294 | (base32 | |
82a7a8c6 MR |
295 | "13lspazc7xkviy93qz7ks9jv4sldvgmwpq36ghrbrqpq93br8phm")) |
296 | (patches (search-patches "coreutils-fix-cross-compilation.patch")))) | |
2c957cd2 | 297 | (build-system gnu-build-system) |
de59af4d | 298 | (inputs `(("acl" ,acl) ; TODO: add SELinux |
09cc7729 | 299 | ("gmp" ,gmp) ;bignums in 'expr', yay! |
62ea8865 LC |
300 | |
301 | ;; Drop the dependency on libcap when cross-compiling since it's | |
302 | ;; not quite cross-compilable. | |
303 | ,@(if (%current-target-system) | |
304 | '() | |
305 | `(("libcap" ,libcap))))) ;capability support is 'ls', etc. | |
2c1dea85 LC |
306 | (native-inputs |
307 | ;; Perl is needed to run tests in native builds, and to run the bundled | |
7f31c71c LC |
308 | ;; copy of help2man. However, don't pass it when cross-compiling since |
309 | ;; that would lead it to try to run programs to get their '--help' output | |
310 | ;; for help2man. | |
d1e3f59c LC |
311 | `(,@(if (%current-target-system) |
312 | '() | |
313 | `(("perl" ,perl))) | |
314 | ||
315 | ;; Apply this patch only on ARM to avoid a full rebuild. | |
316 | ;; TODO: Move to 'patches' in the next update cycle. | |
317 | ,@(if (string-prefix? "arm" (or (%current-target-system) | |
318 | (%current-system))) | |
319 | `(("cut-test.patch" | |
320 | ,(search-patch "coreutils-cut-huge-range-test.patch"))) | |
321 | '()))) | |
9bf62d9b | 322 | (outputs '("out" "debug")) |
2c957cd2 | 323 | (arguments |
8ba8aeb7 | 324 | `(#:parallel-build? #f ; help2man may be called too early |
e7479644 | 325 | #:parallel-tests? #f ; race condition fixed after 8.26 |
8ba8aeb7 LC |
326 | #:phases (alist-cons-before |
327 | 'build 'patch-shell-references | |
328 | (lambda* (#:key inputs #:allow-other-keys) | |
329 | (let ((bash (assoc-ref inputs "bash"))) | |
b47b2b52 LC |
330 | ;; 'split' uses either $SHELL or /bin/sh. Set $SHELL so |
331 | ;; that tests pass, since /bin/sh isn't in the chroot. | |
332 | (setenv "SHELL" (which "sh")) | |
333 | ||
334 | (substitute* (find-files "gnulib-tests" "\\.c$") | |
8ba8aeb7 LC |
335 | (("/bin/sh") |
336 | (format #f "~a/bin/sh" bash))) | |
337 | (substitute* (find-files "tests" "\\.sh$") | |
338 | (("#!/bin/sh") | |
b47b2b52 | 339 | (format #f "#!~a/bin/sh" bash))))) |
d1e3f59c LC |
340 | |
341 | ,@(if (string-prefix? "arm" (or (%current-target-system) | |
342 | (%current-system))) | |
343 | '((alist-cons-before | |
344 | 'build 'patch-cut-test | |
345 | (lambda* (#:key inputs native-inputs | |
346 | #:allow-other-keys) | |
347 | (let ((patch (or (assoc-ref inputs | |
348 | "cut-test.patch") | |
349 | (assoc-ref native-inputs | |
350 | "cut-test.patch")))) | |
351 | (zero? | |
352 | (system* "patch" "-p1" "--force" | |
353 | "--input" patch)))) | |
354 | %standard-phases)) | |
355 | '(%standard-phases))))) | |
f50d2669 | 356 | (synopsis "Core GNU utilities (file, text, shell)") |
d45122f5 | 357 | (description |
79c311b8 | 358 | "GNU Coreutils includes all of the basic command-line tools that are |
a22dc0c4 LC |
359 | expected in a POSIX system. These provide the basic file, shell and text |
360 | manipulation functions of the GNU system. Most of these tools offer extended | |
361 | functionality beyond that which is outlined in the POSIX standard.") | |
4a44e743 | 362 | (license gpl3+) |
6fd52309 | 363 | (home-page "https://www.gnu.org/software/coreutils/"))) |
af5521ca | 364 | |
e162050d MB |
365 | ;; We add version 8.27 here for use in (gnu system) due to a time |
366 | ;; zone bug in `date' versions 8.25 - 8.26. | |
367 | ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=23035 | |
368 | ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26238 | |
369 | (define-public coreutils-8.27 | |
370 | (package | |
371 | (inherit coreutils) | |
372 | (version "8.27") | |
373 | (source (origin | |
374 | (method url-fetch) | |
375 | (uri (string-append "mirror://gnu/coreutils/coreutils-" | |
376 | version ".tar.xz")) | |
377 | (sha256 | |
378 | (base32 | |
fd6ec6bd LC |
379 | "0sv547572iq8ayy8klir4hnngnx92a9nsazmf1wgzfc7xr4x74c8")))) |
380 | (arguments | |
381 | (if (string-prefix? "arm" (or (%current-target-system) | |
382 | (%current-system))) | |
383 | (substitute-keyword-arguments (package-arguments coreutils) | |
384 | ((#:phases phases) | |
385 | `(alist-delete 'patch-cut-test ,phases))) | |
386 | (package-arguments coreutils))))) | |
e162050d | 387 | |
d0f74308 | 388 | (define-public coreutils-minimal |
28cbc587 LC |
389 | ;; Coreutils without its optional dependencies. |
390 | (package | |
391 | (inherit coreutils) | |
d0f74308 | 392 | (name "coreutils-minimal") |
28cbc587 LC |
393 | (outputs '("out")) |
394 | (inputs '()))) | |
395 | ||
ab776865 LC |
396 | (define-public gnu-make |
397 | (package | |
398 | (name "make") | |
6d2b94f2 | 399 | (version "4.2.1") |
ab776865 | 400 | (source (origin |
87f5d366 | 401 | (method url-fetch) |
0db342a5 | 402 | (uri (string-append "mirror://gnu/make/make-" version |
ab776865 LC |
403 | ".tar.bz2")) |
404 | (sha256 | |
405 | (base32 | |
6d2b94f2 | 406 | "12f5zzyq2w56g95nni65hc0g5p7154033y2f3qmjvd016szn5qnn")) |
fc1adab1 | 407 | (patches (search-patches "make-impure-dirs.patch")))) |
ab776865 | 408 | (build-system gnu-build-system) |
b3546174 | 409 | (native-inputs `(("pkg-config" ,pkg-config))) ; to detect Guile |
ed41d48e | 410 | (inputs `(("guile" ,guile-2.0))) |
9bf62d9b | 411 | (outputs '("out" "debug")) |
ea8fbbf2 | 412 | (arguments |
6cc83b68 EF |
413 | '(#:phases |
414 | (modify-phases %standard-phases | |
415 | (add-before 'build 'set-default-shell | |
416 | (lambda* (#:key inputs #:allow-other-keys) | |
417 | ;; Change the default shell from /bin/sh. | |
418 | (let ((bash (assoc-ref inputs "bash"))) | |
419 | (substitute* "job.c" | |
420 | (("default_shell =.*$") | |
60f3ad8c | 421 | (format #f "default_shell = \"~a/bin/sh\";\n" |
6cc83b68 | 422 | bash))))))))) |
f50d2669 | 423 | (synopsis "Remake files automatically") |
d45122f5 | 424 | (description |
a22dc0c4 LC |
425 | "Make is a program that is used to control the production of |
426 | executables or other files from their source files. The process is | |
427 | controlled from a Makefile, in which the developer specifies how each file is | |
428 | generated from its source. It has powerful dependency resolution and the | |
429 | ability to determine when files have to be regenerated after their sources | |
79c311b8 | 430 | change. GNU make offers many powerful extensions over the standard utility.") |
4a44e743 | 431 | (license gpl3+) |
6fd52309 | 432 | (home-page "https://www.gnu.org/software/make/"))) |
ab776865 | 433 | |
8f6201a3 LC |
434 | (define-public binutils |
435 | (package | |
436 | (name "binutils") | |
4148ed46 | 437 | (version "2.27") |
8f6201a3 | 438 | (source (origin |
87f5d366 | 439 | (method url-fetch) |
0db342a5 | 440 | (uri (string-append "mirror://gnu/binutils/binutils-" |
8f6201a3 LC |
441 | version ".tar.bz2")) |
442 | (sha256 | |
443 | (base32 | |
4148ed46 | 444 | "125clslv17xh1sab74343fg6v31msavpmaa1c1394zsqa773g5rn")) |
fc1adab1 | 445 | (patches (search-patches "binutils-ld-new-dtags.patch" |
789f09a0 LC |
446 | "binutils-loongson-workaround.patch" |
447 | "binutils-mips-bash-bug.patch")))) | |
8f6201a3 LC |
448 | (build-system gnu-build-system) |
449 | ||
450 | ;; TODO: Add dependency on zlib + those for Gold. | |
8f6201a3 | 451 | (arguments |
de80b504 | 452 | `(#:configure-flags '(;; Add `-static-libgcc' to not retain a dependency |
01d45404 LC |
453 | ;; on GCC when bootstrapping. |
454 | "LDFLAGS=-static-libgcc" | |
8f6201a3 | 455 | |
01d45404 | 456 | ;; Don't search under /usr/lib & co. |
444c64b0 LC |
457 | "--with-lib-path=/no-ld-lib-path" |
458 | ||
459 | ;; Glibc 2.17 has a "comparison of unsigned | |
460 | ;; expression >= 0 is always true" in wchar.h. | |
6c95f363 LC |
461 | "--disable-werror" |
462 | ||
463 | ;; Install BFD. It ends up in a hidden directory, | |
464 | ;; but it's here. | |
cc0a1282 LC |
465 | "--enable-install-libbfd" |
466 | ||
467 | ;; Make sure 'ar' and 'ranlib' produce archives in a | |
468 | ;; deterministic fashion. | |
469 | "--enable-deterministic-archives"))) | |
8f6201a3 | 470 | |
f50d2669 | 471 | (synopsis "Binary utilities: bfd gas gprof ld") |
d45122f5 | 472 | (description |
a22dc0c4 | 473 | "GNU Binutils is a collection of tools for working with binary files. |
c5779c93 LC |
474 | Perhaps the most notable are \"ld\", a linker, and \"as\", an assembler. |
475 | Other tools include programs to display binary profiling information, list | |
476 | the strings in a binary file, and utilities for working with archives. The | |
477 | \"bfd\" library for working with executable and object formats is also | |
478 | included.") | |
4a44e743 | 479 | (license gpl3+) |
6fd52309 | 480 | (home-page "https://www.gnu.org/software/binutils/"))) |
8f6201a3 | 481 | |
5bde4503 LC |
482 | (define* (make-ld-wrapper name #:key |
483 | (target (const #f)) | |
484 | binutils | |
4a740d0f | 485 | (guile (canonical-package guile-2.0)) |
5bde4503 | 486 | (bash (canonical-package bash)) |
8fdd4101 LC |
487 | (guile-for-build guile)) |
488 | "Return a package called NAME that contains a wrapper for the 'ld' program | |
5bde4503 LC |
489 | of BINUTILS, which adds '-rpath' flags to the actual 'ld' command line. The |
490 | wrapper uses GUILE and BASH. | |
491 | ||
492 | TARGET must be a one-argument procedure that, given a system type, returns a | |
493 | cross-compilation target triplet or #f. When the result is not #f, make a | |
494 | wrapper for the cross-linker for that target, called 'TARGET-ld'." | |
495 | ;; Note: #:system->target-triplet is a procedure so that the evaluation of | |
496 | ;; its result can be delayed until the 'arguments' field is evaluated, thus | |
497 | ;; in a context where '%current-system' is accurate. | |
8fdd4101 LC |
498 | (package |
499 | (name name) | |
500 | (version "0") | |
501 | (source #f) | |
502 | (build-system trivial-build-system) | |
503 | (inputs `(("binutils" ,binutils) | |
504 | ("guile" ,guile) | |
505 | ("bash" ,bash) | |
506 | ("wrapper" ,(search-path %load-path | |
c8bfa5b4 | 507 | "gnu/packages/ld-wrapper.in")))) |
8fdd4101 | 508 | (arguments |
5bde4503 LC |
509 | (let ((target (target (%current-system)))) |
510 | `(#:guile ,guile-for-build | |
511 | #:modules ((guix build utils)) | |
512 | #:builder (begin | |
513 | (use-modules (guix build utils) | |
514 | (system base compile)) | |
8fdd4101 | 515 | |
5bde4503 LC |
516 | (let* ((out (assoc-ref %outputs "out")) |
517 | (bin (string-append out "/bin")) | |
518 | (ld ,(if target | |
519 | `(string-append bin "/" ,target "-ld") | |
520 | '(string-append bin "/ld"))) | |
521 | (go (string-append ld ".go"))) | |
8fdd4101 | 522 | |
5bde4503 LC |
523 | (setvbuf (current-output-port) _IOLBF) |
524 | (format #t "building ~s/bin/ld wrapper in ~s~%" | |
525 | (assoc-ref %build-inputs "binutils") | |
526 | out) | |
8fdd4101 | 527 | |
5bde4503 LC |
528 | (mkdir-p bin) |
529 | (copy-file (assoc-ref %build-inputs "wrapper") ld) | |
530 | (substitute* ld | |
531 | (("@SELF@") | |
532 | ld) | |
533 | (("@GUILE@") | |
534 | (string-append (assoc-ref %build-inputs "guile") | |
535 | "/bin/guile")) | |
536 | (("@BASH@") | |
537 | (string-append (assoc-ref %build-inputs "bash") | |
538 | "/bin/bash")) | |
539 | (("@LD@") | |
540 | (string-append (assoc-ref %build-inputs "binutils") | |
541 | ,(if target | |
542 | (string-append "/bin/" | |
543 | target "-ld") | |
544 | "/bin/ld")))) | |
545 | (chmod ld #o555) | |
546 | (compile-file ld #:output-file go)))))) | |
8fdd4101 LC |
547 | (synopsis "The linker wrapper") |
548 | (description | |
549 | "The linker wrapper (or 'ld-wrapper') wraps the linker to add any | |
550 | missing '-rpath' flags, and to detect any misuse of libraries outside of the | |
551 | store.") | |
6fd52309 | 552 | (home-page "https://www.gnu.org/software/guix//") |
8fdd4101 LC |
553 | (license gpl3+))) |
554 | ||
555 | (export make-ld-wrapper) | |
556 | ||
b09617da | 557 | (define-public glibc/linux |
7cdeac02 LC |
558 | (package |
559 | (name "glibc") | |
242c0927 | 560 | (version "2.25") |
665d6a59 | 561 | (replacement glibc-2.25-patched) |
7cdeac02 | 562 | (source (origin |
87f5d366 | 563 | (method url-fetch) |
0db342a5 | 564 | (uri (string-append "mirror://gnu/glibc/glibc-" |
7cdeac02 LC |
565 | version ".tar.xz")) |
566 | (sha256 | |
567 | (base32 | |
242c0927 | 568 | "1813dzkgw6v8q8q1m4v96yfis7vjqc9pslqib6j9mrwh6fxxjyq6")) |
13990c73 LC |
569 | (snippet |
570 | ;; Disable 'ldconfig' and /etc/ld.so.cache. The latter is | |
571 | ;; required on LFS distros to avoid loading the distro's libc.so | |
572 | ;; instead of ours. | |
573 | '(substitute* "sysdeps/unix/sysv/linux/configure" | |
574 | (("use_ldconfig=yes") | |
575 | "use_ldconfig=no"))) | |
1faca892 | 576 | (modules '((guix build utils))) |
c3052d6b ML |
577 | (patches (search-patches "glibc-ldd-x86_64.patch" |
578 | "glibc-versioned-locpath.patch" | |
579 | "glibc-o-largefile.patch")))) | |
7cdeac02 | 580 | (build-system gnu-build-system) |
0a3da5b7 LC |
581 | |
582 | ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc | |
583 | ;; users should automatically pull Linux headers as well. | |
55de892b | 584 | (propagated-inputs `(("kernel-headers" ,linux-libre-headers))) |
0a3da5b7 | 585 | |
97e11209 | 586 | (outputs '("out" "debug")) |
7f614e49 | 587 | |
7cdeac02 | 588 | (arguments |
8197c978 | 589 | `(#:out-of-source? #t |
211db2f6 LC |
590 | |
591 | ;; In version 2.21, there a race in the 'elf' directory, see | |
592 | ;; <http://lists.gnu.org/archive/html/guix-devel/2015-02/msg00709.html>. | |
593 | #:parallel-build? #f | |
594 | ||
112da588 | 595 | ;; The libraries have an empty RUNPATH, but some, such as the versioned |
67fcf235 | 596 | ;; libraries (libdl-2.24.so, etc.) have ld.so marked as NEEDED. Since |
112da588 LC |
597 | ;; these libraries are always going to be found anyway, just skip |
598 | ;; RUNPATH checks. | |
599 | #:validate-runpath? #f | |
600 | ||
7cdeac02 LC |
601 | #:configure-flags |
602 | (list "--enable-add-ons" | |
603 | "--sysconfdir=/etc" | |
7f614e49 | 604 | |
97e11209 LC |
605 | ;; Installing a locale archive with all the locales is to |
606 | ;; expensive (~100 MiB), so we rely on users to install the | |
607 | ;; locales they really want. | |
608 | ;; | |
609 | ;; Set the default locale path. In practice, $LOCPATH may be | |
610 | ;; defined to point whatever locales users want. However, setuid | |
611 | ;; binaries don't honor $LOCPATH, so they'll instead look into | |
9f58fe3d | 612 | ;; $libc_cv_complocaledir; we choose /run/current-system/locale/X.Y, |
46bd6edd LC |
613 | ;; with the idea that it is going to be populated by the sysadmin. |
614 | ;; The "X.Y" sub-directory is because locale data formats are | |
615 | ;; incompatible across libc versions; see | |
616 | ;; <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>. | |
97e11209 | 617 | ;; |
7f614e49 LC |
618 | ;; `--localedir' is not honored, so work around it. |
619 | ;; See <http://sourceware.org/ml/libc-alpha/2013-03/msg00093.html>. | |
9f58fe3d | 620 | (string-append "libc_cv_complocaledir=/run/current-system/locale/" |
46bd6edd | 621 | ,version) |
7f614e49 | 622 | |
7cdeac02 | 623 | (string-append "--with-headers=" |
28dc10a4 LC |
624 | (assoc-ref ,(if (%current-target-system) |
625 | '%build-target-inputs | |
626 | '%build-inputs) | |
aeafff53 | 627 | "kernel-headers") |
7cdeac02 | 628 | "/include") |
5f456680 | 629 | |
fdaae613 | 630 | ;; This is the default for most architectures as of GNU libc 2.21, |
39ccbfad MW |
631 | ;; but we specify it explicitly for clarity and consistency. See |
632 | ;; "kernel-features.h" in the GNU libc for details. | |
633 | "--enable-kernel=2.6.32" | |
5f456680 | 634 | |
6e32f6c0 | 635 | ;; Use our Bash instead of /bin/sh. |
8cd8e97c | 636 | (string-append "BASH_SHELL=" |
6e32f6c0 | 637 | (assoc-ref %build-inputs "bash") |
8cd8e97c LC |
638 | "/bin/bash") |
639 | ||
640 | ;; XXX: Work around "undefined reference to `__stack_chk_guard'". | |
e37595d9 | 641 | "libc_cv_ssp=no" "libc_cv_ssp_strong=no") |
6e32f6c0 | 642 | |
7cdeac02 | 643 | #:tests? #f ; XXX |
57f65bcc LC |
644 | #:phases (modify-phases %standard-phases |
645 | (add-before | |
646 | 'configure 'pre-configure | |
647 | (lambda* (#:key inputs native-inputs outputs | |
648 | #:allow-other-keys) | |
649 | (let* ((out (assoc-ref outputs "out")) | |
650 | (bin (string-append out "/bin")) | |
651 | ;; FIXME: Normally we would look it up only in INPUTS | |
652 | ;; but cross-base uses it as a native input. | |
653 | (bash (or (assoc-ref inputs "static-bash") | |
654 | (assoc-ref native-inputs "static-bash")))) | |
57f65bcc LC |
655 | ;; Install the rpc data base file under `$out/etc/rpc'. |
656 | ;; FIXME: Use installFlags = [ "sysconfdir=$(out)/etc" ]; | |
657 | (substitute* "sunrpc/Makefile" | |
658 | (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix) | |
659 | (string-append out "/etc/rpc" suffix "\n")) | |
660 | (("^install-others =.*$") | |
661 | (string-append "install-others = " out "/etc/rpc\n"))) | |
662 | ||
663 | (substitute* "Makeconfig" | |
664 | ;; According to | |
665 | ;; <http://www.linuxfromscratch.org/lfs/view/stable/chapter05/glibc.html>, | |
666 | ;; linking against libgcc_s is not needed with GCC | |
667 | ;; 4.7.1. | |
668 | ((" -lgcc_s") "")) | |
669 | ||
b2fd8f63 RW |
670 | ;; Apply patch only on i686. |
671 | ;; TODO: Move the patch to 'patches' in the next update cycle. | |
672 | ,@(if (string-prefix? "i686" (or (%current-target-system) | |
673 | (%current-system))) | |
c2e4f14a RW |
674 | `((unless (zero? (system* "patch" "-p1" "--force" |
675 | "--input" | |
676 | (or (assoc-ref native-inputs | |
677 | "glibc-memchr-overflow-i686.patch") | |
678 | (assoc-ref inputs | |
679 | "glibc-memchr-overflow-i686.patch")))) | |
680 | (error "patch failed for glibc-memchr-overflow-i686.patch"))) | |
b2fd8f63 RW |
681 | '()) |
682 | ||
57f65bcc LC |
683 | ;; Have `system' use that Bash. |
684 | (substitute* "sysdeps/posix/system.c" | |
685 | (("#define[[:blank:]]+SHELL_PATH.*$") | |
686 | (format #f "#define SHELL_PATH \"~a/bin/bash\"\n" | |
687 | bash))) | |
688 | ||
689 | ;; Same for `popen'. | |
690 | (substitute* "libio/iopopen.c" | |
691 | (("/bin/sh") | |
11b66876 | 692 | (string-append bash "/bin/sh"))) |
57f65bcc | 693 | |
d56f8d5e LC |
694 | ;; Same for the shell used by the 'exec' functions for |
695 | ;; scripts that lack a shebang. | |
696 | (substitute* (find-files "." "^paths\\.h$") | |
697 | (("#define[[:blank:]]+_PATH_BSHELL[[:blank:]].*$") | |
698 | (string-append "#define _PATH_BSHELL \"" | |
e4831391 | 699 | bash "/bin/sh\"\n"))) |
d56f8d5e | 700 | |
c5b65f7e LC |
701 | ;; Nscd uses __DATE__ and __TIME__ to create a string to |
702 | ;; make sure the client and server come from the same | |
703 | ;; libc. Use something deterministic instead. | |
704 | (substitute* "nscd/nscd_stat.c" | |
705 | (("static const char compilation\\[21\\] =.*$") | |
706 | (string-append | |
707 | "static const char compilation[21] = \"" | |
708 | (string-take (basename out) 20) "\";\n"))) | |
709 | ||
57f65bcc LC |
710 | ;; Make sure we don't retain a reference to the |
711 | ;; bootstrap Perl. | |
712 | (substitute* "malloc/mtrace.pl" | |
713 | (("^#!.*") | |
714 | ;; The shebang can be omitted, because there's the | |
715 | ;; "bilingual" eval/exec magic at the top of the file. | |
716 | "") | |
717 | (("exec @PERL@") | |
718 | "exec perl")))))))) | |
7f614e49 | 719 | |
90d891fc | 720 | (inputs `(("static-bash" ,static-bash))) |
8fd6487e | 721 | |
6162b95d LC |
722 | ;; To build the manual, we need Texinfo and Perl. Gettext is needed to |
723 | ;; install the message catalogs, with 'msgfmt'. | |
8fd6487e | 724 | (native-inputs `(("texinfo" ,texinfo) |
6162b95d | 725 | ("perl" ,perl) |
b2fd8f63 RW |
726 | ("gettext" ,gettext-minimal) |
727 | ||
728 | ;; Apply this patch only on i686 to avoid a full rebuild. | |
729 | ;; TODO: Move to 'patches' in the next update cycle. | |
730 | ,@(if (string-prefix? "i686" (or (%current-target-system) | |
731 | (%current-system))) | |
732 | `(("glibc-memchr-overflow-i686.patch" | |
733 | ,(search-patch "glibc-memchr-overflow-i686.patch"))) | |
734 | '()))) | |
8fd6487e | 735 | |
d6718df4 LC |
736 | (native-search-paths |
737 | ;; Search path for packages that provide locale data. This is useful | |
85e57214 LC |
738 | ;; primarily in build environments. Use 'GUIX_LOCPATH' rather than |
739 | ;; 'LOCPATH' to avoid interference with the host system's libc on foreign | |
740 | ;; distros. | |
d6718df4 | 741 | (list (search-path-specification |
fbb909ac | 742 | (variable "GUIX_LOCPATH") |
f211b2af | 743 | (files '("lib/locale"))))) |
d6718df4 | 744 | |
d45122f5 LC |
745 | (synopsis "The GNU C Library") |
746 | (description | |
7cdeac02 LC |
747 | "Any Unix-like operating system needs a C library: the library which |
748 | defines the \"system calls\" and other basic facilities such as open, malloc, | |
749 | printf, exit... | |
750 | ||
751 | The GNU C library is used as the C library in the GNU system and most systems | |
752 | with the Linux kernel.") | |
4a44e743 | 753 | (license lgpl2.0+) |
6fd52309 | 754 | (home-page "https://www.gnu.org/software/libc/"))) |
7cdeac02 | 755 | |
b09617da MR |
756 | (define-public glibc/hurd |
757 | ;; The Hurd's libc variant. | |
758 | (package (inherit glibc/linux) | |
759 | (name "glibc-hurd") | |
1d9c8898 | 760 | (version "2.23") |
b09617da MR |
761 | (source (origin |
762 | (method url-fetch) | |
763 | (uri (string-append "http://alpha.gnu.org/gnu/hurd/glibc-" | |
1d9c8898 | 764 | version "-hurd+libpthread-20161218" ".tar.gz")) |
b09617da MR |
765 | (sha256 |
766 | (base32 | |
1d9c8898 | 767 | "0vpdv05j6j3ria5bw8gp468i64gij94cslxkxj9xkfgi6p615b8p")))) |
b09617da MR |
768 | |
769 | ;; Libc provides <hurd.h>, which includes a bunch of Hurd and Mach headers, | |
770 | ;; so both should be propagated. | |
771 | (propagated-inputs `(("hurd-core-headers" ,hurd-core-headers))) | |
772 | (native-inputs | |
773 | `(,@(package-native-inputs glibc/linux) | |
774 | ("mig" ,mig) | |
775 | ("perl" ,perl))) | |
776 | ||
777 | (arguments | |
778 | (substitute-keyword-arguments (package-arguments glibc/linux) | |
779 | ((#:phases original-phases) | |
780 | ;; Add libmachuser.so and libhurduser.so to libc.so's search path. | |
781 | ;; See <http://lists.gnu.org/archive/html/bug-hurd/2015-07/msg00051.html>. | |
711a0dce | 782 | `(modify-phases ,original-phases |
441e99d4 RW |
783 | ;; TODO: This is almost an exact copy of the phase of the same name |
784 | ;; in glibc/linux. The only difference is that the i686 patch is | |
785 | ;; not applied here. In the next update cycle the patch moves to | |
786 | ;; the patches field and this overwritten phase won't be needed any | |
787 | ;; more. | |
788 | (replace 'pre-configure | |
789 | (lambda* (#:key inputs native-inputs outputs | |
790 | #:allow-other-keys) | |
791 | (let* ((out (assoc-ref outputs "out")) | |
792 | (bin (string-append out "/bin")) | |
793 | ;; FIXME: Normally we would look it up only in INPUTS | |
794 | ;; but cross-base uses it as a native input. | |
795 | (bash (or (assoc-ref inputs "static-bash") | |
796 | (assoc-ref native-inputs "static-bash")))) | |
797 | ;; Install the rpc data base file under `$out/etc/rpc'. | |
798 | ;; FIXME: Use installFlags = [ "sysconfdir=$(out)/etc" ]; | |
799 | (substitute* "sunrpc/Makefile" | |
800 | (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix) | |
801 | (string-append out "/etc/rpc" suffix "\n")) | |
802 | (("^install-others =.*$") | |
803 | (string-append "install-others = " out "/etc/rpc\n"))) | |
804 | ||
805 | (substitute* "Makeconfig" | |
806 | ;; According to | |
807 | ;; <http://www.linuxfromscratch.org/lfs/view/stable/chapter05/glibc.html>, | |
808 | ;; linking against libgcc_s is not needed with GCC | |
809 | ;; 4.7.1. | |
810 | ((" -lgcc_s") "")) | |
811 | ||
812 | ;; Have `system' use that Bash. | |
813 | (substitute* "sysdeps/posix/system.c" | |
814 | (("#define[[:blank:]]+SHELL_PATH.*$") | |
815 | (format #f "#define SHELL_PATH \"~a/bin/bash\"\n" | |
816 | bash))) | |
817 | ||
818 | ;; Same for `popen'. | |
819 | (substitute* "libio/iopopen.c" | |
820 | (("/bin/sh") | |
821 | (string-append bash "/bin/sh"))) | |
822 | ||
823 | ;; Same for the shell used by the 'exec' functions for | |
824 | ;; scripts that lack a shebang. | |
825 | (substitute* (find-files "." "^paths\\.h$") | |
826 | (("#define[[:blank:]]+_PATH_BSHELL[[:blank:]].*$") | |
827 | (string-append "#define _PATH_BSHELL \"" | |
828 | bash "/bin/sh\"\n"))) | |
829 | ||
830 | ;; Nscd uses __DATE__ and __TIME__ to create a string to | |
831 | ;; make sure the client and server come from the same | |
832 | ;; libc. Use something deterministic instead. | |
833 | (substitute* "nscd/nscd_stat.c" | |
834 | (("static const char compilation\\[21\\] =.*$") | |
835 | (string-append | |
836 | "static const char compilation[21] = \"" | |
837 | (string-take (basename out) 20) "\";\n"))) | |
838 | ||
839 | ;; Make sure we don't retain a reference to the | |
840 | ;; bootstrap Perl. | |
841 | (substitute* "malloc/mtrace.pl" | |
842 | (("^#!.*") | |
843 | ;; The shebang can be omitted, because there's the | |
844 | ;; "bilingual" eval/exec magic at the top of the file. | |
845 | "") | |
846 | (("exec @PERL@") | |
847 | "exec perl"))))) | |
711a0dce RW |
848 | (add-after 'install 'augment-libc.so |
849 | (lambda* (#:key outputs #:allow-other-keys) | |
850 | (let* ((out (assoc-ref outputs "out"))) | |
851 | (substitute* (string-append out "/lib/libc.so") | |
852 | (("/[^ ]+/lib/libc.so.0.3") | |
853 | (string-append out "/lib/libc.so.0.3" " libmachuser.so" " libhurduser.so")))) | |
854 | #t)) | |
855 | (add-after 'pre-configure 'pre-configure-set-pwd | |
856 | (lambda _ | |
857 | ;; Use the right 'pwd'. | |
858 | (substitute* "configure" | |
859 | (("/bin/pwd") "pwd")) | |
860 | #t)) | |
861 | (replace 'build | |
862 | (lambda _ | |
863 | ;; Force mach/hurd/libpthread subdirs to build first in order to avoid | |
864 | ;; linking errors. | |
865 | ;; See <https://lists.gnu.org/archive/html/bug-hurd/2016-11/msg00045.html> | |
866 | (let ((-j (list "-j" (number->string (parallel-job-count))))) | |
867 | (let-syntax ((make (syntax-rules () | |
868 | ((_ target) | |
869 | (zero? (apply system* "make" target -j)))))) | |
870 | (and (make "mach/subdir_lib") | |
871 | (make "hurd/subdir_lib") | |
872 | (make "libpthread/subdir_lib") | |
873 | (zero? (apply system* "make" -j))))))))) | |
b09617da MR |
874 | ((#:configure-flags original-configure-flags) |
875 | `(append (list "--host=i586-pc-gnu" | |
876 | ||
877 | ;; We need this to get a working openpty() function. | |
878 | "--enable-pt_chown" | |
879 | ||
367f7013 MR |
880 | ;; <https://lists.gnu.org/archive/html/bug-hurd/2016-10/msg00033.html> |
881 | "--disable-werror" | |
882 | ||
b09617da MR |
883 | ;; nscd fails to build for GNU/Hurd: |
884 | ;; <https://lists.gnu.org/archive/html/bug-hurd/2014-07/msg00006.html>. | |
885 | ;; Disable it. | |
886 | "--disable-nscd") | |
887 | (filter (lambda (flag) | |
888 | (not (string-prefix? "--enable-kernel=" flag))) | |
889 | ,original-configure-flags))))) | |
890 | (synopsis "The GNU C Library (GNU Hurd variant)") | |
891 | (supported-systems %hurd-systems))) | |
892 | ||
893 | (define* (glibc-for-target #:optional | |
894 | (target (or (%current-target-system) | |
895 | (%current-system)))) | |
896 | "Return the glibc for TARGET, GLIBC/LINUX for a Linux host or | |
897 | GLIBC/HURD for a Hurd host" | |
898 | (match target | |
899 | ((or "i586-pc-gnu" "i586-gnu") glibc/hurd) | |
900 | (_ glibc/linux))) | |
901 | ||
902 | (define-syntax glibc | |
903 | (identifier-syntax (glibc-for-target))) | |
904 | ||
665d6a59 EF |
905 | (define glibc-2.25-patched |
906 | (package | |
907 | (inherit glibc) | |
908 | (replacement #f) | |
909 | (source (origin | |
910 | (inherit (package-source glibc)) | |
911 | (patches (search-patches "glibc-ldd-x86_64.patch" | |
912 | "glibc-versioned-locpath.patch" | |
913 | "glibc-o-largefile.patch" | |
ffc015be | 914 | "glibc-vectorized-strcspn-guards.patch" |
665d6a59 EF |
915 | "glibc-CVE-2017-1000366-pt1.patch" |
916 | "glibc-CVE-2017-1000366-pt2.patch" | |
917 | "glibc-CVE-2017-1000366-pt3.patch")))))) | |
918 | ||
ffc015be MW |
919 | ;; Below are old libc versions, which we use mostly to build locale data in |
920 | ;; the old format (which the new libc cannot cope with.) | |
921 | ||
7ca72ec4 EF |
922 | (define-public glibc-2.24 |
923 | (package | |
924 | (inherit glibc) | |
925 | (version "2.24") | |
665d6a59 | 926 | (replacement #f) |
7ca72ec4 EF |
927 | (source (origin |
928 | (inherit (package-source glibc)) | |
929 | (uri (string-append "mirror://gnu/glibc/glibc-" | |
930 | version ".tar.xz")) | |
931 | (sha256 | |
932 | (base32 | |
665d6a59 EF |
933 | "1lxmprg9gm73gvafxd503x70z32phwjzcy74i0adfi6ixzla7m4r")) |
934 | (patches (search-patches "glibc-ldd-x86_64.patch" | |
935 | "glibc-versioned-locpath.patch" | |
936 | "glibc-o-largefile.patch" | |
ffc015be | 937 | "glibc-vectorized-strcspn-guards.patch" |
665d6a59 EF |
938 | "glibc-CVE-2017-1000366-pt1.patch" |
939 | "glibc-CVE-2017-1000366-pt2.patch" | |
940 | "glibc-CVE-2017-1000366-pt3.patch")))))) | |
7ca72ec4 | 941 | |
19ac2ba8 LC |
942 | (define-public glibc-2.23 |
943 | (package | |
944 | (inherit glibc) | |
945 | (version "2.23") | |
665d6a59 | 946 | (replacement #f) |
19ac2ba8 LC |
947 | (source (origin |
948 | (inherit (package-source glibc)) | |
949 | (uri (string-append "mirror://gnu/glibc/glibc-" | |
950 | version ".tar.xz")) | |
951 | (sha256 | |
952 | (base32 | |
665d6a59 EF |
953 | "1s8krs3y2n6pzav7ic59dz41alqalphv7vww4138ag30wh0fpvwl")) |
954 | (patches (search-patches "glibc-ldd-x86_64.patch" | |
955 | "glibc-versioned-locpath.patch" | |
956 | "glibc-o-largefile.patch" | |
ffc015be | 957 | "glibc-vectorized-strcspn-guards.patch" |
665d6a59 EF |
958 | "glibc-CVE-2017-1000366-pt1.patch" |
959 | "glibc-CVE-2017-1000366-pt2.patch" | |
960 | "glibc-CVE-2017-1000366-pt3.patch")))))) | |
19ac2ba8 | 961 | |
c2c54ebd | 962 | (define-public glibc-2.22 |
455859a5 | 963 | (package |
0832787e | 964 | (inherit glibc) |
c2c54ebd | 965 | (version "2.22") |
665d6a59 | 966 | (replacement #f) |
137d957e LC |
967 | (source (origin |
968 | (inherit (package-source glibc)) | |
969 | (uri (string-append "mirror://gnu/glibc/glibc-" | |
970 | version ".tar.xz")) | |
971 | (sha256 | |
972 | (base32 | |
c2c54ebd | 973 | "0j49682pm2nh4qbdw35bas82p1pgfnz4d2l7iwfyzvrvj0318wzb")) |
665d6a59 | 974 | (patches (search-patches "glibc-ldd-x86_64.patch" |
ffc015be | 975 | "glibc-vectorized-strcspn-guards.patch" |
665d6a59 EF |
976 | "glibc-CVE-2017-1000366-pt1.patch" |
977 | "glibc-CVE-2017-1000366-pt2.patch" | |
978 | "glibc-CVE-2017-1000366-pt3.patch")))) | |
38e9373b EF |
979 | (arguments |
980 | (substitute-keyword-arguments (package-arguments glibc) | |
981 | ((#:phases phases) | |
982 | `(modify-phases ,phases | |
983 | (add-before 'configure 'fix-pwd | |
984 | (lambda _ | |
985 | ;; Use `pwd' instead of `/bin/pwd' for glibc-2.21 | |
986 | (substitute* "configure" | |
56ed97c8 MW |
987 | (("/bin/pwd") "pwd")) |
988 | #t)))))))) | |
137d957e | 989 | |
c2c54ebd | 990 | (define-public glibc-2.21 |
c2c54ebd LC |
991 | (package |
992 | (inherit glibc-2.22) | |
137d957e | 993 | (version "2.21") |
665d6a59 | 994 | (replacement #f) |
137d957e | 995 | (source (origin |
665d6a59 | 996 | (inherit (package-source glibc-2.22)) |
137d957e LC |
997 | (uri (string-append "mirror://gnu/glibc/glibc-" |
998 | version ".tar.xz")) | |
999 | (sha256 | |
1000 | (base32 | |
665d6a59 | 1001 | "1f135546j34s9bfkydmx2nhh9vwxlx60jldi80zmsnln6wj3dsxf")))))) |
137d957e | 1002 | |
aee6180c LC |
1003 | (define-public glibc-locales |
1004 | (package | |
1005 | (inherit glibc) | |
1006 | (name "glibc-locales") | |
665d6a59 | 1007 | (replacement #f) |
aee6180c LC |
1008 | (source (origin (inherit (package-source glibc)) |
1009 | (patches (cons (search-patch "glibc-locales.patch") | |
1010 | (origin-patches (package-source glibc)))))) | |
1011 | (synopsis "All the locales supported by the GNU C Library") | |
1012 | (description | |
1013 | "This package provides all the locales supported by the GNU C Library, | |
1014 | more than 400 in total. To use them set the 'LOCPATH' environment variable to | |
1015 | the 'share/locale' sub-directory of this package.") | |
1016 | (outputs '("out")) ;110+ MiB | |
605217be | 1017 | (native-search-paths '()) |
aee6180c LC |
1018 | (arguments |
1019 | (let ((args `(#:tests? #f #:strip-binaries? #f | |
1020 | ,@(package-arguments glibc)))) | |
1021 | (substitute-keyword-arguments args | |
1022 | ((#:phases phases) | |
1023 | `(alist-replace | |
1024 | 'build | |
1025 | (lambda* (#:key outputs #:allow-other-keys) | |
aee6180c LC |
1026 | (zero? (system* "make" "localedata/install-locales" |
1027 | "-j" (number->string (parallel-job-count))))) | |
1028 | (alist-delete 'install ,phases))) | |
1029 | ((#:configure-flags flags) | |
1030 | `(append ,flags | |
85e57214 | 1031 | ;; Use $(libdir)/locale/X.Y as is the case by default. |
85860fdf | 1032 | (list (string-append "libc_cv_complocaledir=" |
aee6180c | 1033 | (assoc-ref %outputs "out") |
f2d7bbb5 LC |
1034 | "/lib/locale/" |
1035 | ,(package-version glibc)))))))))) | |
aee6180c | 1036 | |
c9505f3f LC |
1037 | (define-public glibc-utf8-locales |
1038 | (package | |
1039 | (name "glibc-utf8-locales") | |
1040 | (version (package-version glibc)) | |
1041 | (source #f) | |
1042 | (build-system trivial-build-system) | |
1043 | (arguments | |
f2d7bbb5 | 1044 | `(#:modules ((guix build utils)) |
c9505f3f LC |
1045 | #:builder (begin |
1046 | (use-modules (srfi srfi-1) | |
1047 | (guix build utils)) | |
1048 | ||
1049 | (let* ((libc (assoc-ref %build-inputs "glibc")) | |
1050 | (gzip (assoc-ref %build-inputs "gzip")) | |
1051 | (out (assoc-ref %outputs "out")) | |
f2d7bbb5 LC |
1052 | (localedir (string-append out "/lib/locale/" |
1053 | ,version))) | |
c9505f3f LC |
1054 | ;; 'localedef' needs 'gzip'. |
1055 | (setenv "PATH" (string-append libc "/bin:" gzip "/bin")) | |
1056 | ||
1057 | (mkdir-p localedir) | |
1058 | (every (lambda (locale) | |
8a55e217 LC |
1059 | (define file |
1060 | ;; Use the "normalized codeset" by | |
1061 | ;; default--e.g., "en_US.utf8". | |
1062 | (string-append localedir "/" locale ".utf8")) | |
1063 | ||
1064 | (and (zero? (system* "localedef" "--no-archive" | |
1065 | "--prefix" localedir | |
1066 | "-i" locale | |
1067 | "-f" "UTF-8" file)) | |
1068 | (begin | |
1069 | ;; For backward compatibility with Guix | |
1070 | ;; <= 0.8.3, add "xx_YY.UTF-8". | |
1071 | (symlink (string-append locale ".utf8") | |
c9505f3f | 1072 | (string-append localedir "/" |
8a55e217 LC |
1073 | locale ".UTF-8")) |
1074 | #t))) | |
c9505f3f LC |
1075 | |
1076 | ;; These are the locales commonly used for | |
1077 | ;; tests---e.g., in Guile's i18n tests. | |
1078 | '("de_DE" "el_GR" "en_US" "fr_FR" "tr_TR")))))) | |
1079 | (inputs `(("glibc" ,glibc) | |
1080 | ("gzip" ,gzip))) | |
1081 | (synopsis "Small sample of UTF-8 locales") | |
1082 | (description | |
1083 | "This package provides a small sample of UTF-8 locales mostly useful in | |
1084 | test environments.") | |
1085 | (home-page (package-home-page glibc)) | |
1086 | (license (package-license glibc)))) | |
aee6180c | 1087 | |
ce0614dd LC |
1088 | (define-public which |
1089 | (package | |
1090 | (name "which") | |
70ca2e94 | 1091 | (version "2.21") |
ce0614dd LC |
1092 | (source (origin |
1093 | (method url-fetch) | |
1094 | (uri (string-append "mirror://gnu/which/which-" | |
1095 | version ".tar.gz")) | |
1096 | (sha256 | |
1097 | (base32 | |
70ca2e94 | 1098 | "1bgafvy3ypbhhfznwjv1lxmd6mci3x1byilnnkc7gcr486wlb8pl")))) |
ce0614dd LC |
1099 | (build-system gnu-build-system) |
1100 | (home-page "https://gnu.org/software/which/") | |
1101 | (synopsis "Find full path of shell commands") | |
1102 | (description | |
1103 | "The which program finds the location of executables in PATH, with a | |
1104 | variety of options. It is an alternative to the shell \"type\" built-in | |
1105 | command.") | |
1106 | (license gpl3+))) ; some files are under GPLv2+ | |
1107 | ||
21a8fe1b MR |
1108 | (define-public glibc/hurd-headers |
1109 | (package (inherit glibc/hurd) | |
1110 | (name "glibc-hurd-headers") | |
1111 | (outputs '("out")) | |
1112 | (propagated-inputs `(("gnumach-headers" ,gnumach-headers) | |
1113 | ("hurd-headers" ,hurd-headers))) | |
1114 | (arguments | |
1115 | (substitute-keyword-arguments (package-arguments glibc/hurd) | |
1116 | ;; We just pass the flags really needed to build the headers. | |
1117 | ((#:configure-flags _) | |
1118 | `(list "--enable-add-ons" | |
aa81eb73 | 1119 | "--host=i586-pc-gnu" |
21a8fe1b MR |
1120 | "--enable-obsolete-rpc")) |
1121 | ((#:phases _) | |
1122 | '(alist-replace | |
1123 | 'install | |
1124 | (lambda* (#:key outputs #:allow-other-keys) | |
1125 | (and (zero? (system* "make" "install-headers")) | |
1126 | ||
1127 | ;; Make an empty stubs.h to work around not being able to | |
1128 | ;; produce a valid stubs.h and causing the build to fail. See | |
1129 | ;; <http://lists.gnu.org/archive/html/guix-devel/2014-04/msg00233.html>. | |
1130 | (let ((out (assoc-ref outputs "out"))) | |
1131 | (close-port | |
1132 | (open-output-file | |
1133 | (string-append out "/include/gnu/stubs.h")))))) | |
1134 | ||
1135 | ;; Nothing to build. | |
1136 | (alist-delete | |
1137 | 'build | |
1138 | ||
1139 | (alist-cons-before | |
1140 | 'configure 'pre-configure | |
1141 | (lambda _ | |
1142 | ;; Use the right 'pwd'. | |
1143 | (substitute* "configure" | |
1144 | (("/bin/pwd") "pwd"))) | |
1145 | %standard-phases)))))))) | |
1146 | ||
e789d9a8 LC |
1147 | (define-public tzdata |
1148 | (package | |
1149 | (name "tzdata") | |
52196aea | 1150 | (version "2017b") |
e789d9a8 LC |
1151 | (source (origin |
1152 | (method url-fetch) | |
1153 | (uri (string-append | |
80b63e67 | 1154 | "https://www.iana.org/time-zones/repository/releases/tzdata" |
e789d9a8 LC |
1155 | version ".tar.gz")) |
1156 | (sha256 | |
1157 | (base32 | |
52196aea | 1158 | "11l0s43vx33dcs78p80122i8s5s9l1sjwkzzwh66njd35r92l97q")))) |
e789d9a8 LC |
1159 | (build-system gnu-build-system) |
1160 | (arguments | |
1161 | '(#:tests? #f | |
1162 | #:make-flags (let ((out (assoc-ref %outputs "out")) | |
1163 | (tmp (getenv "TMPDIR"))) | |
1164 | (list (string-append "TOPDIR=" out) | |
1165 | (string-append "TZDIR=" out "/share/zoneinfo") | |
1166 | ||
1167 | ;; Discard zic, dump, and tzselect, already | |
1168 | ;; provided by glibc. | |
1169 | (string-append "ETCDIR=" tmp "/etc") | |
1170 | ||
1171 | ;; Likewise for the C library routines. | |
1172 | (string-append "LIBDIR=" tmp "/lib") | |
1173 | (string-append "MANDIR=" tmp "/man") | |
1174 | ||
1175 | "AWK=awk" | |
1176 | "CC=gcc")) | |
1177 | #:modules ((guix build utils) | |
1178 | (guix build gnu-build-system) | |
1179 | (srfi srfi-1)) | |
1180 | #:phases | |
c8f35458 JD |
1181 | (modify-phases %standard-phases |
1182 | (replace 'unpack | |
1183 | (lambda* (#:key source inputs #:allow-other-keys) | |
1184 | (and (zero? (system* "tar" "xvf" source)) | |
1185 | (zero? (system* "tar" "xvf" (assoc-ref inputs "tzcode")))))) | |
1186 | (add-after 'install 'post-install | |
1187 | (lambda* (#:key outputs #:allow-other-keys) | |
1188 | ;; Move data in the right place. | |
1189 | (let ((out (assoc-ref outputs "out"))) | |
1190 | (symlink (string-append out "/share/zoneinfo") | |
1191 | (string-append out "/share/zoneinfo/posix")) | |
1192 | (delete-file-recursively | |
1193 | (string-append out "/share/zoneinfo-posix")) | |
1194 | (copy-recursively (string-append out "/share/zoneinfo-leaps") | |
1195 | (string-append out "/share/zoneinfo/right")) | |
1196 | (delete-file-recursively | |
1197 | (string-append out "/share/zoneinfo-leaps"))))) | |
1198 | (delete 'configure)))) | |
e789d9a8 LC |
1199 | (inputs `(("tzcode" ,(origin |
1200 | (method url-fetch) | |
1201 | (uri (string-append | |
1202 | "http://www.iana.org/time-zones/repository/releases/tzcode" | |
1203 | version ".tar.gz")) | |
1204 | (sha256 | |
1205 | (base32 | |
52196aea | 1206 | "0h1d567gn8l3iqgyadcswwdy2yh07nhz3lfl8ds8saz2ajxka5sd")))))) |
80b63e67 | 1207 | (home-page "https://www.iana.org/time-zones") |
e789d9a8 LC |
1208 | (synopsis "Database of current and historical time zones") |
1209 | (description "The Time Zone Database (often called tz or zoneinfo) | |
1210 | contains code and data that represent the history of local time for many | |
35b9e423 | 1211 | representative locations around the globe. It is updated periodically to |
e789d9a8 LC |
1212 | reflect changes made by political bodies to time zone boundaries, UTC offsets, |
1213 | and daylight-saving rules.") | |
1214 | (license public-domain))) | |
1215 | ||
3ffaec13 LF |
1216 | ;;; A "fixed" version of tzdata, which is used in the test suites of |
1217 | ;;; glib and R. We can update this whenever we are able to rebuild | |
1218 | ;;; thousands of packages (for example, in a core-updates rebuild). | |
1219 | (define-public tzdata-2017a | |
1220 | (package | |
1221 | (inherit tzdata) | |
1222 | (version "2017a") | |
1223 | (source | |
1224 | (origin | |
1225 | (method url-fetch) | |
1226 | (uri (string-append "https://www.iana.org/time-zones/repository" | |
1227 | "/releases/tzdata" version ".tar.gz")) | |
1228 | (sha256 | |
1229 | (base32 | |
1230 | "1mmv4rvcs12lrvgghw4fidczvb69yv69cmzknghcvw1c196mqfnz")))) | |
1231 | (inputs `(("tzcode" ,(origin | |
1232 | (method url-fetch) | |
1233 | (uri (string-append | |
1234 | "http://www.iana.org/time-zones/repository/releases/tzcode" | |
1235 | version ".tar.gz")) | |
1236 | (sha256 | |
1237 | (base32 | |
1238 | "1b1q7gnlsh5hjgs5065pvajd37rmbc3k9b8cgzad1vcrifswdwh2")))))))) | |
1239 | ||
1240 | ||
7309045c JN |
1241 | (define-public libiconv |
1242 | (package | |
1243 | (name "libiconv") | |
5c6b6827 | 1244 | (version "1.15") |
7309045c JN |
1245 | (source (origin |
1246 | (method url-fetch) | |
1247 | (uri (string-append "mirror://gnu/libiconv/libiconv-" | |
1248 | version ".tar.gz")) | |
1249 | (sha256 | |
1250 | (base32 | |
5c6b6827 | 1251 | "0y1ij745r4p48mxq84rax40p10ln7fc7m243p8k8sia519i3dxfc")) |
7309045c JN |
1252 | (modules '((guix build utils))) |
1253 | (snippet | |
1254 | ;; Work around "declared gets" error on glibc systems (fixed by | |
1255 | ;; Gnulib commit 66712c23388e93e5c518ebc8515140fa0c807348.) | |
1256 | '(substitute* "srclib/stdio.in.h" | |
1257 | (("^#undef gets") "") | |
1258 | (("^_GL_WARN_ON_USE \\(gets.*") ""))))) | |
1259 | (build-system gnu-build-system) | |
1260 | (synopsis "Character set conversion library") | |
1261 | (description | |
1262 | "libiconv provides an implementation of the iconv function for systems | |
1263 | that lack it. iconv is used to convert between character encodings in a | |
1264 | program. It supports a wide variety of different encodings.") | |
6fd52309 | 1265 | (home-page "https://www.gnu.org/software/libiconv/") |
7309045c JN |
1266 | (license lgpl3+))) |
1267 | ||
4dab8c59 JN |
1268 | (define* (libiconv-if-needed #:optional (target (%current-target-system))) |
1269 | "Return either a libiconv package specification to include in a dependency | |
1270 | list for platforms that have an incomplete libc, or the empty list. If a | |
1271 | package needs iconv ,@(libiconv-if-needed) should be added." | |
1272 | ;; POSIX C libraries provide iconv. Platforms with an incomplete libc | |
1273 | ;; without iconv, such as MinGW, must return the then clause. | |
1274 | (if (target-mingw? target) | |
1275 | `(("libiconv" ,libiconv)) | |
1276 | '())) | |
1277 | ||
bdb36958 LC |
1278 | (define-public (canonical-package package) |
1279 | ;; Avoid circular dependency by lazily resolving 'commencement'. | |
1280 | (let* ((iface (resolve-interface '(gnu packages commencement))) | |
1281 | (proc (module-ref iface 'canonical-package))) | |
1282 | (proc package))) | |
571aa6cd | 1283 | |
fb77c614 LC |
1284 | (define-public (%final-inputs) |
1285 | "Return the list of \"final inputs\"." | |
1286 | ;; Avoid circular dependency by lazily resolving 'commencement'. | |
1287 | (let ((iface (resolve-interface '(gnu packages commencement)))) | |
1288 | (module-ref iface '%final-inputs))) | |
1289 | ||
1722d680 | 1290 | ;;; base.scm ends here |