···1-{
2- stdenvNoCC,
3- buildPackages,
4- darwin-stubs,
5-}:
6-7-stdenvNoCC.mkDerivation {
8- pname = "libSystem";
9- inherit (darwin-stubs) version;
10-11- nativeBuildInputs = [ buildPackages.darwin.rewrite-tbd ];
12-13- csu = [
14- "bundle1.o"
15- "crt0.o"
16- "crt1.10.5.o"
17- "crt1.10.6.o"
18- "crt1.o"
19- "dylib1.10.5.o"
20- "dylib1.o"
21- "gcrt1.o"
22- "lazydylib1.o"
23- ];
24-25- buildCommand =
26- ''
27- mkdir -p $out/{include,lib/swift}
28- ''
29- # Copy each directory in ${darwin-stubs}/usr/include into $out/include
30- + ''
31- for dir in $(ls -d ${darwin-stubs}/usr/include/*/); do
32- cp -dr $dir $out/include
33- done
34- ''
35- # Copy each header and modulemap file in ${darwin-stubs}/usr/include into $out/include
36- + ''
37- cp -d \
38- ${darwin-stubs}/usr/include/*.h \
39- ${darwin-stubs}/usr/include/*.modulemap \
40- $out/include
41- ''
42- # Remove curses.h, ncurses.h, ncurses_dll.h, and unctrl.h which conflict with ncurses.
43- # Then, remove the module map for ncurses.
44- # NOTE: The sed expression expects the module map to use consistent indentation across
45- # releases. If this changes, the sed expression will need to be updated.
46- #
47- # For example, right now we assume that there is one leading space before the
48- # "explicit" keyword and that the closing brace is on its own line (also with one
49- # leading space).
50- + ''
51- rm $out/include/{curses,ncurses,ncurses_dll,unctrl}.h
52- sed -i -e '/^ explicit module ncurses {/,/^ }$/d' $out/include/module.modulemap
53- ''
54- + ''
55- rm $out/include/tk*.h $out/include/tcl*.h
56-57- cp -dr \
58- ${darwin-stubs}/usr/lib/libSystem.* \
59- ${darwin-stubs}/usr/lib/system \
60- $out/lib
61-62- # Extra libraries
63- for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.1 resolv; do
64- cp -d \
65- ${darwin-stubs}/usr/lib/lib$name.tbd \
66- ${darwin-stubs}/usr/lib/lib$name.*.tbd \
67- $out/lib
68- done
69-70- for name in os Dispatch; do
71- cp -dr \
72- ${darwin-stubs}/usr/lib/swift/$name.swiftmodule \
73- ${darwin-stubs}/usr/lib/swift/libswift$name.tbd \
74- $out/lib/swift
75- done
76-77- for f in $csu; do
78- from=${darwin-stubs}/usr/lib/$f
79- if [ -e "$from" ]; then
80- cp -d $from $out/lib
81- else
82- echo "Csu file '$from' doesn't exist: skipping"
83- fi
84- done
85-86- chmod u+w -R $out/lib
87- find $out -name '*.tbd' -type f | while read tbd; do
88- rewrite-tbd \
89- -c /usr/lib/libsystem.dylib:$out/lib/libsystem.dylib \
90- -p /usr/lib/system/:$out/lib/system/ \
91- -p /usr/lib/swift/:$out/lib/swift/ \
92- -r ${builtins.storeDir} \
93- "$tbd"
94- done
95- '';
96-}