mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-04 12:53:05 +00:00
97 lines
2.7 KiB
Nix
97 lines
2.7 KiB
Nix
{
|
|
stdenvNoCC,
|
|
buildPackages,
|
|
darwin-stubs,
|
|
}:
|
|
|
|
stdenvNoCC.mkDerivation {
|
|
pname = "libSystem";
|
|
inherit (darwin-stubs) version;
|
|
|
|
nativeBuildInputs = [ buildPackages.darwin.rewrite-tbd ];
|
|
|
|
csu = [
|
|
"bundle1.o"
|
|
"crt0.o"
|
|
"crt1.10.5.o"
|
|
"crt1.10.6.o"
|
|
"crt1.o"
|
|
"dylib1.10.5.o"
|
|
"dylib1.o"
|
|
"gcrt1.o"
|
|
"lazydylib1.o"
|
|
];
|
|
|
|
buildCommand =
|
|
''
|
|
mkdir -p $out/{include,lib/swift}
|
|
''
|
|
# Copy each directory in ${darwin-stubs}/usr/include into $out/include
|
|
+ ''
|
|
for dir in $(ls -d ${darwin-stubs}/usr/include/*/); do
|
|
cp -dr $dir $out/include
|
|
done
|
|
''
|
|
# Copy each header and modulemap file in ${darwin-stubs}/usr/include into $out/include
|
|
+ ''
|
|
cp -d \
|
|
${darwin-stubs}/usr/include/*.h \
|
|
${darwin-stubs}/usr/include/*.modulemap \
|
|
$out/include
|
|
''
|
|
# Remove curses.h, ncurses.h, ncurses_dll.h, and unctrl.h which conflict with ncurses.
|
|
# Then, remove the module map for ncurses.
|
|
# NOTE: The sed expression expects the module map to use consistent indentation across
|
|
# releases. If this changes, the sed expression will need to be updated.
|
|
#
|
|
# For example, right now we assume that there is one leading space before the
|
|
# "explicit" keyword and that the closing brace is on its own line (also with one
|
|
# leading space).
|
|
+ ''
|
|
rm $out/include/{curses,ncurses,ncurses_dll,unctrl}.h
|
|
sed -i -e '/^ explicit module ncurses {/,/^ }$/d' $out/include/module.modulemap
|
|
''
|
|
+ ''
|
|
rm $out/include/tk*.h $out/include/tcl*.h
|
|
|
|
cp -dr \
|
|
${darwin-stubs}/usr/lib/libSystem.* \
|
|
${darwin-stubs}/usr/lib/system \
|
|
$out/lib
|
|
|
|
# Extra libraries
|
|
for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.1 resolv; do
|
|
cp -d \
|
|
${darwin-stubs}/usr/lib/lib$name.tbd \
|
|
${darwin-stubs}/usr/lib/lib$name.*.tbd \
|
|
$out/lib
|
|
done
|
|
|
|
for name in os Dispatch; do
|
|
cp -dr \
|
|
${darwin-stubs}/usr/lib/swift/$name.swiftmodule \
|
|
${darwin-stubs}/usr/lib/swift/libswift$name.tbd \
|
|
$out/lib/swift
|
|
done
|
|
|
|
for f in $csu; do
|
|
from=${darwin-stubs}/usr/lib/$f
|
|
if [ -e "$from" ]; then
|
|
cp -d $from $out/lib
|
|
else
|
|
echo "Csu file '$from' doesn't exist: skipping"
|
|
fi
|
|
done
|
|
|
|
chmod u+w -R $out/lib
|
|
find $out -name '*.tbd' -type f | while read tbd; do
|
|
rewrite-tbd \
|
|
-c /usr/lib/libsystem.dylib:$out/lib/libsystem.dylib \
|
|
-p /usr/lib/system/:$out/lib/system/ \
|
|
-p /usr/lib/swift/:$out/lib/swift/ \
|
|
-r ${builtins.storeDir} \
|
|
"$tbd"
|
|
done
|
|
'';
|
|
}
|