depot/third_party/nixpkgs/pkgs/os-specific/darwin/apple-source-releases/AvailabilityVersions/default.nix
Default email 5ca88bfbb9 Project import generated by Copybara.
GitOrigin-RevId: 9f918d616c5321ad374ae6cb5ea89c9e04bf3e58
2024-07-31 10:19:44 +00:00

99 lines
2.9 KiB
Nix

{
lib,
stdenvNoCC,
appleDerivation',
gnused,
python3,
unifdef,
}:
appleDerivation' stdenvNoCC {
nativeBuildInputs = [ unifdef ];
patches = [ ./0001-Support-setting-an-upper-bound-on-versions.patch ];
buildPhase = ''
runHook preBuild
declare -a unifdef_sources=(
os_availability.modulemap
os_availability_private.modulemap
AvailabilityPrivate.modulemap
)
unifdef -x2 -UBUILD_FOR_DRIVERKIT -m $(for x in "''${unifdef_sources[@]}"; do echo templates/$x; done)
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out/bin" "$out/libexec" "$out/share/availability"
cp -r availability.dsl templates "$out/share/availability/"
substitute availability "$out/libexec/availability" \
--replace-fail '/usr/bin/env python3' '${lib.getBin python3}/bin/python3' \
--replace-fail 'f"{os.path.abspath(os.path.dirname(sys.argv[0]))}/' "\"$out/share/availability/"
chmod a+x "$out/libexec/availability"
cat <<SCRIPT > "$out/bin/gen-headers"
#!/usr/bin/env bash
set -eu
declare -a headers=(
Availability.h
AvailabilityInternal.h
AvailabilityInternalLegacy.h
AvailabilityMacros.h
AvailabilityVersions.h
os/availability.h
)
dest=\$2
threshold=\$1
for header in "\''${headers[@]}"; do
header_src=\''${header/\//_}
mkdir -p "\$(dirname "\$dest/include/\$header")"
"$out/libexec/availability" \\
--threshold "\$threshold" \\
--preprocess "$out/share/availability/templates/\$header_src" "\$dest/include/\$header"
done
# `__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__` is only defined by clang 17+, so define it for older versions.
${lib.getExe gnused} -E '/#ifndef __MAC_OS_X_VERSION_MIN_REQUIRED/{
i#ifndef __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__
i#define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
i#endif
}' \\
-i "\$dest/include/AvailabilityInternal.h"
# Remove macros from newer SDKs because they can confuse some programs about the SDK version.
declare -a versionParts=(\''${threshold//./ })
if [ "\''${versionParts[0]}" == "10" ]; then
sdkMajor=\''${versionParts[1]}
sdkMinor=\''${versionParts[2]:-0}
for minor in \$(seq \$(("\$sdkMinor" + 1)) 9); do
${lib.getExe gnused} \\
-E "/VERSION_10_\''${sdkMajor}_\$minor/,/#endif/c\\ */" \\
-i "\$dest/include/AvailabilityMacros.h"
done
for major in \$(seq \$(("\$sdkMajor" + 1)) 15); do
${lib.getExe gnused} \\
-E "/VERSION_10_\$major/,/#endif/c\\ */" \\
-i "\$dest/include/AvailabilityMacros.h"
done
fi
cp "$out/share/availability/templates/os_availability.modulemap" "\$dest/include/"
SCRIPT
chmod a+x "$out/bin/gen-headers"
patchShebangs "$out/bin"
runHook postInstall
'';
meta.mainProgram = "gen-headers";
}