1# Packages that make up the GNU/Hurd operating system (aka. GNU).
2
3args@{ fetchgit, stdenv, autoconf, automake, automake111x, libtool
4, texinfo, glibcCross, hurdPartedCross, libuuid, samba
5, gccCrossStageStatic, gccCrossStageFinal
6, forceNativeDrv, forceSystem, newScope, platform, config, crossSystem
7, overrides ? {} }:
8
9with args;
10
11let
12 callPackage = newScope gnu;
13
14 gnu = {
15 hurdCross = forceNativeDrv (callPackage ./hurd {
16 inherit fetchgit stdenv autoconf libtool texinfo
17 glibcCross hurdPartedCross;
18 inherit (gnu) machHeaders mig;
19 libuuid = libuuid.crossDrv;
20 automake = automake111x;
21 headersOnly = false;
22 cross = assert crossSystem != null; crossSystem;
23 gccCross = gccCrossStageFinal;
24 });
25
26 hurdCrossIntermediate = forceNativeDrv (callPackage ./hurd {
27 inherit fetchgit stdenv autoconf libtool texinfo glibcCross;
28 inherit (gnu) machHeaders mig;
29 hurdPartedCross = null;
30 libuuid = null;
31 automake = automake111x;
32 headersOnly = false;
33 cross = assert crossSystem != null; crossSystem;
34
35 # The "final" GCC needs glibc and the Hurd libraries (libpthread in
36 # particular) so we first need an intermediate Hurd built with the
37 # intermediate GCC.
38 gccCross = gccCrossStageStatic;
39
40 # This intermediate Hurd is only needed to build libpthread, which needs
41 # libihash, and to build Parted, which needs libstore and
42 # libshouldbeinlibc.
43 buildTarget = "libihash libstore libshouldbeinlibc";
44 installTarget = "libihash-install libstore-install libshouldbeinlibc-install";
45 });
46
47 hurdHeaders = callPackage ./hurd {
48 automake = automake111x;
49 headersOnly = true;
50 gccCross = null;
51 glibcCross = null;
52 libuuid = null;
53 hurdPartedCross = null;
54 };
55
56 libpthreadHeaders = callPackage ./libpthread {
57 headersOnly = true;
58 hurd = null;
59 };
60
61 libpthreadCross = forceNativeDrv (callPackage ./libpthread {
62 inherit fetchgit stdenv autoconf automake libtool glibcCross;
63 inherit (gnu) machHeaders hurdHeaders;
64 hurd = gnu.hurdCrossIntermediate;
65 gccCross = gccCrossStageStatic;
66 cross = assert crossSystem != null; crossSystem;
67 });
68
69 # In theory GNU Mach doesn't have to be cross-compiled. However, since it
70 # has to be built for i586 (it doesn't work on x86_64), one needs a cross
71 # compiler for that host.
72 mach = callPackage ./mach {
73 automake = automake111x;
74 };
75
76 machHeaders = callPackage ./mach {
77 automake = automake111x;
78 headersOnly = true;
79 mig = null;
80 };
81
82 mig = callPackage ./mig {
83 # Build natively, but force use of a 32-bit environment because we're
84 # targeting `i586-pc-gnu'.
85 stdenv = (forceSystem "i686-linux" "i386").stdenv;
86 };
87
88 # XXX: Use this one for its `.crossDrv'. Using the one above from
89 # `x86_64-linux' leads to building a different cross-toolchain because of
90 # the `forceSystem'.
91 mig_raw = callPackage ./mig {};
92
93 smbfs = callPackage ./smbfs {
94 hurd = gnu.hurdCross;
95 };
96
97 unionfs = callPackage ./unionfs {
98 hurd = gnu.hurdCross;
99 };
100 }
101
102 # Allow callers to override elements of this attribute set.
103 // overrides;
104
105in gnu # we trust!