···11-{
22- stdenvNoCC,
33- buildPackages,
44- darwin-stubs,
55-}:
66-77-stdenvNoCC.mkDerivation {
88- pname = "libSystem";
99- inherit (darwin-stubs) version;
1010-1111- nativeBuildInputs = [ buildPackages.darwin.rewrite-tbd ];
1212-1313- csu = [
1414- "bundle1.o"
1515- "crt0.o"
1616- "crt1.10.5.o"
1717- "crt1.10.6.o"
1818- "crt1.o"
1919- "dylib1.10.5.o"
2020- "dylib1.o"
2121- "gcrt1.o"
2222- "lazydylib1.o"
2323- ];
2424-2525- buildCommand =
2626- ''
2727- mkdir -p $out/{include,lib/swift}
2828- ''
2929- # Copy each directory in ${darwin-stubs}/usr/include into $out/include
3030- + ''
3131- for dir in $(ls -d ${darwin-stubs}/usr/include/*/); do
3232- cp -dr $dir $out/include
3333- done
3434- ''
3535- # Copy each header and modulemap file in ${darwin-stubs}/usr/include into $out/include
3636- + ''
3737- cp -d \
3838- ${darwin-stubs}/usr/include/*.h \
3939- ${darwin-stubs}/usr/include/*.modulemap \
4040- $out/include
4141- ''
4242- # Remove curses.h, ncurses.h, ncurses_dll.h, and unctrl.h which conflict with ncurses.
4343- # Then, remove the module map for ncurses.
4444- # NOTE: The sed expression expects the module map to use consistent indentation across
4545- # releases. If this changes, the sed expression will need to be updated.
4646- #
4747- # For example, right now we assume that there is one leading space before the
4848- # "explicit" keyword and that the closing brace is on its own line (also with one
4949- # leading space).
5050- + ''
5151- rm $out/include/{curses,ncurses,ncurses_dll,unctrl}.h
5252- sed -i -e '/^ explicit module ncurses {/,/^ }$/d' $out/include/module.modulemap
5353- ''
5454- + ''
5555- rm $out/include/tk*.h $out/include/tcl*.h
5656-5757- cp -dr \
5858- ${darwin-stubs}/usr/lib/libSystem.* \
5959- ${darwin-stubs}/usr/lib/system \
6060- $out/lib
6161-6262- # Extra libraries
6363- for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.1 resolv; do
6464- cp -d \
6565- ${darwin-stubs}/usr/lib/lib$name.tbd \
6666- ${darwin-stubs}/usr/lib/lib$name.*.tbd \
6767- $out/lib
6868- done
6969-7070- for name in os Dispatch; do
7171- cp -dr \
7272- ${darwin-stubs}/usr/lib/swift/$name.swiftmodule \
7373- ${darwin-stubs}/usr/lib/swift/libswift$name.tbd \
7474- $out/lib/swift
7575- done
7676-7777- for f in $csu; do
7878- from=${darwin-stubs}/usr/lib/$f
7979- if [ -e "$from" ]; then
8080- cp -d $from $out/lib
8181- else
8282- echo "Csu file '$from' doesn't exist: skipping"
8383- fi
8484- done
8585-8686- chmod u+w -R $out/lib
8787- find $out -name '*.tbd' -type f | while read tbd; do
8888- rewrite-tbd \
8989- -c /usr/lib/libsystem.dylib:$out/lib/libsystem.dylib \
9090- -p /usr/lib/system/:$out/lib/system/ \
9191- -p /usr/lib/swift/:$out/lib/swift/ \
9292- -r ${builtins.storeDir} \
9393- "$tbd"
9494- done
9595- '';
9696-}