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