Commit | Line | Data |
---|---|---|
0193c004 | 1 | ;;; GNU Guix --- Functional package management for GNU |
8df672aa | 2 | ;;; Copyright © 2014, 2015, 2016, 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> |
2d546858 | 3 | ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> |
0193c004 MR |
4 | ;;; |
5 | ;;; This file is part of GNU Guix. | |
6 | ;;; | |
7 | ;;; GNU Guix is free software; you can redistribute it and/or modify it | |
8 | ;;; under the terms of the GNU General Public License as published by | |
9 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
10 | ;;; your option) any later version. | |
11 | ;;; | |
12 | ;;; GNU Guix is distributed in the hope that it will be useful, but | |
13 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | ;;; GNU General Public License for more details. | |
16 | ;;; | |
17 | ;;; You should have received a copy of the GNU General Public License | |
18 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. | |
19 | ||
20 | (define-module (gnu packages hurd) | |
21 | #:use-module (guix licenses) | |
22 | #:use-module (guix download) | |
23 | #:use-module (guix packages) | |
21a8fe1b | 24 | #:use-module (gnu packages) |
e1ecd50e | 25 | #:use-module (guix utils) |
396b3c8b | 26 | #:use-module (guix build-system gnu) |
38efbcbb | 27 | #:use-module (guix build-system trivial) |
2d546858 | 28 | #:use-module (gnu packages autotools) |
396b3c8b | 29 | #:use-module (gnu packages flex) |
dc91c10f MR |
30 | #:use-module (gnu packages bison) |
31 | #:use-module (gnu packages perl) | |
21a8fe1b | 32 | #:use-module (gnu packages base) |
62596a15 | 33 | #:use-module (guix git-download) |
2d546858 LC |
34 | #:export (hurd-triplet? |
35 | hurd-target?)) | |
62596a15 MR |
36 | |
37 | (define (hurd-triplet? triplet) | |
38 | (and (string-suffix? "-gnu" triplet) | |
39 | (not (string-contains triplet "linux")))) | |
0193c004 | 40 | |
2d546858 LC |
41 | (define (hurd-target?) |
42 | "Return true if the cross-compilation target or the current system is | |
43 | GNU/Hurd." | |
44 | (or (and=> (%current-target-system) hurd-triplet?) | |
45 | (string-suffix? (%current-system) "-gnu"))) | |
46 | ||
41bfcac3 MR |
47 | (define (gnumach-source-url version) |
48 | (string-append "mirror://gnu/gnumach/gnumach-" | |
49 | version ".tar.gz")) | |
50 | ||
b005a37a MR |
51 | (define (hurd-source-url version) |
52 | (string-append "mirror://gnu/hurd/hurd-" | |
53 | version ".tar.gz")) | |
54 | ||
2d546858 LC |
55 | (define (patch-url repository commit) |
56 | (string-append "https://git.savannah.gnu.org/cgit/hurd/" repository | |
57 | ".git/patch/?id=" commit)) | |
58 | ||
0193c004 MR |
59 | (define-public gnumach-headers |
60 | (package | |
61 | (name "gnumach-headers") | |
d950f038 | 62 | (version "1.8") |
0193c004 MR |
63 | (source |
64 | (origin | |
65 | (method url-fetch) | |
41bfcac3 | 66 | (uri (gnumach-source-url version)) |
0193c004 MR |
67 | (sha256 |
68 | (base32 | |
2d546858 LC |
69 | "02hygsfpd2dljl5lg1vjjg9pizi9jyxd4aiiqzjshz6jax62jm9f")) |
70 | (patches (list (origin | |
71 | ;; This patch adds <mach/vm_wire.h>, which defines the | |
72 | ;; VM_WIRE_* constants needed by glibc 2.28. | |
73 | (method url-fetch) | |
74 | (uri (patch-url "gnumach" "2b0f19f602e08fd9d37268233b962674fd592634")) | |
75 | (sha256 | |
76 | (base32 | |
77 | "01iajnwsmka0w9hwjkxxijc4xfhwqbvlkw1w8n71hpnhfixd0y28")) | |
78 | (file-name "gnumach-vm-wire-header.patch")))) | |
79 | (modules '((guix build utils))) | |
80 | (snippet | |
81 | '(begin | |
82 | ;; Actually install vm_wire.h. | |
83 | (substitute* "Makefile.in" | |
84 | (("^include_mach_HEADERS =") | |
85 | "include_mach_HEADERS = include/mach/vm_wire.h")) | |
86 | #t)))) | |
0193c004 MR |
87 | (build-system gnu-build-system) |
88 | (arguments | |
dc1d3cde KK |
89 | `(#:phases |
90 | (modify-phases %standard-phases | |
91 | (replace 'install | |
92 | (lambda _ | |
2057ea68 | 93 | (invoke "make" "install-data"))) |
dc1d3cde | 94 | (delete 'build)) |
0193c004 MR |
95 | |
96 | ;; GNU Mach supports only IA32 currently, so cheat so that we can at | |
97 | ;; least install its headers. | |
26a28c8a MR |
98 | ,@(if (%current-target-system) |
99 | '() | |
100 | ;; See <http://lists.gnu.org/archive/html/bug-hurd/2015-06/msg00042.html> | |
101 | ;; <http://lists.gnu.org/archive/html/guix-devel/2015-06/msg00716.html> | |
102 | '(#:configure-flags '("--build=i586-pc-gnu"))) | |
0193c004 MR |
103 | |
104 | #:tests? #f)) | |
105 | (home-page "https://www.gnu.org/software/hurd/microkernel/mach/gnumach.html") | |
106 | (synopsis "GNU Mach kernel headers") | |
107 | (description | |
108 | "Headers of the GNU Mach kernel.") | |
109 | (license gpl2+))) | |
396b3c8b MR |
110 | |
111 | (define-public mig | |
112 | (package | |
113 | (name "mig") | |
9c9402be | 114 | (version "1.8") |
396b3c8b MR |
115 | (source |
116 | (origin | |
117 | (method url-fetch) | |
118 | (uri (string-append "mirror://gnu/mig/mig-" | |
119 | version ".tar.gz")) | |
120 | (sha256 | |
121 | (base32 | |
9c9402be | 122 | "1gyda8sq6b379nx01hkpbd85lz39irdvz2b9wbr63gicicx8i706")))) |
396b3c8b | 123 | (build-system gnu-build-system) |
a7ecc92d MR |
124 | ;; Flex is needed both at build and run time. |
125 | (inputs `(("gnumach-headers" ,gnumach-headers) | |
126 | ("flex" ,flex))) | |
396b3c8b MR |
127 | (native-inputs |
128 | `(("flex" ,flex) | |
129 | ("bison" ,bison))) | |
130 | (arguments `(#:tests? #f)) | |
6fd52309 | 131 | (home-page "https://www.gnu.org/software/hurd/microkernel/mach/mig/gnu_mig.html") |
396b3c8b MR |
132 | (synopsis "Mach 3.0 interface generator for the Hurd") |
133 | (description | |
134 | "GNU MIG is the GNU distribution of the Mach 3.0 interface generator | |
135 | MIG, as maintained by the GNU Hurd developers for the GNU project. | |
136 | You need this tool to compile the GNU Mach and GNU Hurd distributions, | |
35b9e423 | 137 | and to compile the GNU C library for the Hurd. Also, you will need it |
396b3c8b MR |
138 | for other software in the GNU system that uses Mach-based inter-process |
139 | communication.") | |
140 | (license gpl2+))) | |
dc91c10f MR |
141 | |
142 | (define-public hurd-headers | |
2d546858 LC |
143 | ;; Resort to a post-0.9 snapshot that provides the 'file_utimens' and |
144 | ;; 'file_exec_paths' RPCs that glibc 2.28 expects. | |
145 | (let ((revision "0") | |
146 | (commit "98b33905c89b7e5c309c74ae32302a5745901a6e")) | |
147 | (package | |
148 | (name "hurd-headers") | |
149 | (version "0.9") | |
150 | (source (origin | |
151 | (method git-fetch) | |
152 | (uri (git-reference | |
153 | (url "https://git.savannah.gnu.org/git/hurd/hurd.git") | |
154 | (commit commit))) | |
155 | (sha256 | |
156 | (base32 | |
157 | "1mj22sxgscas2675vrbxr477mwbxdj68pqcrh65lbir8qlssrgrf")) | |
158 | (file-name (git-file-name name version)))) | |
159 | (build-system gnu-build-system) | |
160 | (native-inputs | |
161 | `(("mig" ,mig) | |
162 | ("autoconf" ,autoconf) | |
163 | ("automake" ,automake))) | |
164 | (arguments | |
165 | `(#:phases | |
166 | (modify-phases %standard-phases | |
167 | (replace 'install | |
168 | (lambda _ | |
169 | (invoke "make" "install-headers" "no_deps=t"))) | |
170 | (delete 'build)) | |
dc91c10f | 171 | |
2d546858 LC |
172 | #:configure-flags '( ;; Pretend we're on GNU/Hurd; 'configure' wants |
173 | ;; that. | |
174 | ,@(if (%current-target-system) | |
175 | '() | |
176 | '("--host=i586-pc-gnu")) | |
177 | ||
178 | ;; Reduce set of dependencies. | |
179 | "--without-parted" | |
180 | "--disable-ncursesw" | |
181 | "--disable-test" | |
182 | "--without-libbz2" | |
183 | "--without-libz" | |
184 | ;; Skip the clnt_create check because it expects | |
185 | ;; a working glibc causing a circular dependency. | |
186 | "ac_cv_search_clnt_create=no" | |
187 | ||
188 | ;; Annihilate the checks for the 'file_exec_paths' | |
189 | ;; & co. libc functions to avoid "link tests are | |
190 | ;; not allowed after AC_NO_EXECUTABLES" error. | |
191 | "ac_cv_func_file_exec_paths=no" | |
192 | "ac_cv_func_exec_exec_paths=no" | |
193 | "ac_cv_func__hurd_exec_paths=no" | |
194 | "ac_cv_func_file_futimens=no") | |
195 | ||
196 | #:tests? #f)) | |
197 | (home-page "https://www.gnu.org/software/hurd/hurd.html") | |
198 | (synopsis "GNU Hurd headers") | |
199 | (description | |
200 | "This package provides C headers of the GNU Hurd, used to build the GNU C | |
dc91c10f | 201 | Library and other user programs.") |
2d546858 | 202 | (license gpl2+)))) |
21a8fe1b MR |
203 | |
204 | (define-public hurd-minimal | |
205 | (package (inherit hurd-headers) | |
206 | (name "hurd-minimal") | |
207 | (inputs `(("glibc-hurd-headers" ,glibc/hurd-headers))) | |
21a8fe1b | 208 | (arguments |
e1ecd50e MR |
209 | (substitute-keyword-arguments (package-arguments hurd-headers) |
210 | ((#:phases _) | |
dc1d3cde KK |
211 | '(modify-phases %standard-phases |
212 | (replace 'install | |
213 | (lambda* (#:key outputs #:allow-other-keys) | |
214 | (let ((out (assoc-ref outputs "out"))) | |
215 | ;; We need to copy libihash.a to the output directory manually, | |
216 | ;; since there is no target for that in the makefile. | |
217 | (mkdir-p (string-append out "/include")) | |
218 | (copy-file "libihash/ihash.h" | |
219 | (string-append out "/include/ihash.h")) | |
220 | (mkdir-p (string-append out "/lib")) | |
221 | (copy-file "libihash/libihash.a" | |
222 | (string-append out "/lib/libihash.a")) | |
223 | #t))) | |
224 | (replace 'build | |
225 | (lambda _ | |
2d546858 LC |
226 | ;; Install <assert-backtrace.h> & co. |
227 | (invoke "make" "-Clibshouldbeinlibc" | |
228 | "../include/assert-backtrace.h") | |
229 | ||
230 | ;; Build libihash. | |
a48d22d6 | 231 | (invoke "make" "-Clibihash" "libihash.a"))))))) |
6fd52309 | 232 | (home-page "https://www.gnu.org/software/hurd/hurd.html") |
21a8fe1b MR |
233 | (synopsis "GNU Hurd libraries") |
234 | (description | |
a124bbd2 | 235 | "This package provides libihash, needed to build the GNU C |
21a8fe1b MR |
236 | Library for GNU/Hurd.") |
237 | (license gpl2+))) | |
38efbcbb MR |
238 | |
239 | (define-public hurd-core-headers | |
240 | (package | |
241 | (name "hurd-core-headers") | |
242 | (version (package-version hurd-headers)) | |
243 | (source #f) | |
244 | (build-system trivial-build-system) | |
245 | (arguments | |
246 | '(#:modules ((guix build union)) | |
247 | #:builder (begin | |
248 | (use-modules (ice-9 match) | |
249 | (guix build union)) | |
250 | (match %build-inputs | |
251 | (((names . directories) ...) | |
252 | (union-build (assoc-ref %outputs "out") | |
e3cfef22 MW |
253 | directories) |
254 | #t))))) | |
38efbcbb MR |
255 | (inputs `(("gnumach-headers" ,gnumach-headers) |
256 | ("hurd-headers" ,hurd-headers) | |
257 | ("hurd-minimal" ,hurd-minimal))) | |
258 | (synopsis "Union of the Hurd headers and libraries") | |
259 | (description | |
260 | "This package contains the union of the Mach and Hurd headers and the | |
261 | Hurd-minimal package which are needed for both glibc and GCC.") | |
262 | (home-page (package-home-page hurd-headers)) | |
263 | (license (package-license hurd-headers)))) | |
8df672aa MR |
264 | |
265 | (define-public gnumach | |
266 | (package | |
267 | (name "gnumach") | |
268 | (version "1.8") | |
269 | (source (origin | |
270 | (method url-fetch) | |
271 | (uri (gnumach-source-url version)) | |
272 | (sha256 | |
273 | (base32 | |
274 | "02hygsfpd2dljl5lg1vjjg9pizi9jyxd4aiiqzjshz6jax62jm9f")))) | |
275 | (build-system gnu-build-system) | |
276 | (arguments | |
277 | `(#:phases (modify-phases %standard-phases | |
278 | (add-after 'install 'produce-image | |
279 | (lambda* (#:key outputs #:allow-other-keys) | |
280 | (let* ((out (assoc-ref outputs "out")) | |
281 | (boot (string-append out "/boot"))) | |
a53ced66 MW |
282 | (invoke "make" "gnumach.gz") |
283 | (install-file "gnumach.gz" boot) | |
284 | #t)))))) | |
8df672aa MR |
285 | (native-inputs |
286 | `(("mig" ,mig) | |
287 | ("perl" ,perl))) | |
288 | (supported-systems (cons "i686-linux" %hurd-systems)) | |
289 | (home-page | |
290 | "https://www.gnu.org/software/hurd/microkernel/mach/gnumach.html") | |
291 | (synopsis "Microkernel of the GNU system") | |
292 | (description | |
293 | "GNU Mach is the microkernel upon which a GNU Hurd system is based.") | |
294 | (license gpl2+))) | |
cc4faa35 MR |
295 | |
296 | (define-public hurd | |
297 | (package | |
298 | (name "hurd") | |
299 | (version "0.9") | |
300 | (source (origin | |
301 | (method url-fetch) | |
302 | (uri (hurd-source-url version)) | |
303 | (sha256 | |
304 | (base32 | |
305 | "1nw9gly0n7pyv3cpfm4mmxy4yccrx4g0lyrvd3vk2vil26jpbggw")) | |
306 | (patches (search-patches "hurd-fix-eth-multiplexer-dependency.patch")))) | |
307 | (arguments | |
308 | `(#:phases | |
309 | (modify-phases %standard-phases | |
310 | (add-before 'build 'pre-build | |
311 | (lambda _ | |
312 | ;; Don't change the ownership of any file at this time. | |
313 | (substitute* '("daemons/Makefile" "utils/Makefile") | |
314 | (("-o root -m 4755") "")) | |
315 | #t))) | |
316 | #:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath=" | |
317 | %output "/lib") | |
318 | "--disable-ncursesw" | |
319 | "--without-libbz2" | |
320 | "--without-libz" | |
321 | "--without-parted"))) | |
322 | (build-system gnu-build-system) | |
323 | (inputs `(("glibc-hurd-headers" ,glibc/hurd-headers))) | |
324 | (native-inputs | |
325 | `(("mig" ,mig) | |
326 | ("perl" ,perl))) | |
327 | (supported-systems %hurd-systems) | |
328 | (home-page "https://www.gnu.org/software/hurd/hurd.html") | |
329 | (synopsis "The kernel servers for the GNU operating system") | |
330 | (description | |
331 | "The Hurd is the kernel for the GNU system, a replacement and | |
332 | augmentation of standard Unix kernels. It is a collection of protocols for | |
333 | system interaction (file systems, networks, authentication), and servers | |
334 | implementing them.") | |
335 | (license gpl2+))) |