darwin.sourceRelease: 14.4/15.4/15.6 -> 26.3 (#511211)
This commit is contained in:
@@ -11,23 +11,11 @@
|
||||
docbook_xml_dtd_45,
|
||||
docbook_xsl,
|
||||
libxslt,
|
||||
pkgs,
|
||||
darwin,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
xnu = darwin.sourceRelease "xnu";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "lsyncd";
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
lib,
|
||||
bison,
|
||||
fetchpatch2,
|
||||
flex,
|
||||
libxo,
|
||||
mkAppleDerivation,
|
||||
@@ -38,7 +39,20 @@ mkAppleDerivation {
|
||||
"man"
|
||||
];
|
||||
|
||||
xcodeHash = "sha256-QhkylTnnCy4qG8fpUMlKqDGKz58jysL0YF4lFGJzPzE=";
|
||||
patches = [
|
||||
# We need `colldef` and `mklocale` due to building old locale data. Revert their removal.
|
||||
(fetchpatch2 {
|
||||
url = "https://github.com/apple-oss-distributions/adv_cmds/commit/6bed8737a34dbb54782a18f47dccf933a9967a12.patch?full_index=1";
|
||||
includes = [
|
||||
"colldef/*"
|
||||
"mklocale/*"
|
||||
];
|
||||
revert = true;
|
||||
hash = "sha256-zDXYuYRak9t9ZnAacl3h5i36g7Law/fLdTKf+YDeRUk=";
|
||||
})
|
||||
];
|
||||
|
||||
xcodeHash = "sha256-L27TYv2zdKx0WKTBgHSv9Q0FCwrW4o83EmtDyqFM1fs=";
|
||||
|
||||
postPatch = ''
|
||||
# Meson generators require using @BASENAME@ in the output.
|
||||
|
||||
@@ -3,25 +3,13 @@
|
||||
bashNonInteractive,
|
||||
buildPackages,
|
||||
mkAppleDerivation,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
unifdef,
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (buildPackages) gnused python3;
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
xnu = sourceRelease "xnu";
|
||||
in
|
||||
mkAppleDerivation (finalAttrs: {
|
||||
releaseName = "AvailabilityVersions";
|
||||
@@ -35,18 +23,6 @@ mkAppleDerivation (finalAttrs: {
|
||||
buildInputs = [ bashNonInteractive ];
|
||||
nativeBuildInputs = [ unifdef ];
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
declare -a unifdef_sources=(
|
||||
os_availability.modulemap
|
||||
os_availability_private.modulemap
|
||||
)
|
||||
unifdef -x2 -UBUILD_FOR_DRIVERKIT -m $(for x in "''${unifdef_sources[@]}"; do echo templates/$x; done)
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
@@ -113,7 +89,6 @@ mkAppleDerivation (finalAttrs: {
|
||||
done
|
||||
fi
|
||||
|
||||
cp "$out/share/availability/templates/os_availability.modulemap" "\$dest/include/"
|
||||
SCRIPT
|
||||
chmod a+x "$out/bin/gen-headers"
|
||||
|
||||
|
||||
+51
-36
@@ -1,19 +1,19 @@
|
||||
From dd3a2378cca465ec783fd792158b2fc11f83722c Mon Sep 17 00:00:00 2001
|
||||
From 27627399e0792608bf5249d79c6490e8c77864e1 Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Tue, 2 Jul 2024 20:04:56 -0400
|
||||
Subject: [PATCH] Support setting an upper bound on versions
|
||||
Date: Thu, 9 Apr 2026 21:12:36 -0400
|
||||
Subject: [PATCH] Support-setting-an-upper-bound-on-versions
|
||||
|
||||
---
|
||||
availability | 94 ++++++++++++++++++++++++++++++++++------------------
|
||||
1 file changed, 61 insertions(+), 33 deletions(-)
|
||||
availability | 103 ++++++++++++++++++++++++++++++++-------------------
|
||||
1 file changed, 65 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/availability b/availability
|
||||
index 8ebd250..5bb9edb 100755
|
||||
index 1abd711..bbe9a77 100755
|
||||
--- a/availability
|
||||
+++ b/availability
|
||||
@@ -17,12 +17,34 @@ MIN_PYTHON = (3, 7) #Required for ordered dictionaries as default
|
||||
if sys.version_info < MIN_PYTHON:
|
||||
sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON)
|
||||
@@ -20,12 +20,34 @@ if sys.version_info < MIN_PYTHON:
|
||||
|
||||
avVersion = "Local"
|
||||
|
||||
+
|
||||
+def parse_version(ver):
|
||||
@@ -47,12 +47,16 @@ index 8ebd250..5bb9edb 100755
|
||||
def sets(self): return self.parsedDSL.version_sets
|
||||
def platforms(self): return self.parsedDSL.platforms
|
||||
|
||||
@@ -104,12 +126,15 @@ class VersionSetDSL:
|
||||
@@ -111,16 +133,18 @@ class VersionSetDSL:
|
||||
self.availability_deprecation_define_name = optionals["availability_deprecation_define_name"]
|
||||
if "version_define_name" in optionals:
|
||||
self.availability_define_prefix = f"__{optionals['version_define_name']}_"
|
||||
- def add_version(self, version): return self.versions.append(version);
|
||||
- def add_version(self, version):
|
||||
+ def add_version(self, version, threshold):
|
||||
if (len(self.versions) > 0) and (self.versions[-1] > version):
|
||||
print(f"Out of order version {version} for platform {self.name}")
|
||||
exit(-1)
|
||||
- self.versions.append(version)
|
||||
+ if version_older_or_equal(version, threshold):
|
||||
+ self.versions.append(version)
|
||||
def add_variant(self, variant): return self.variants.append(variant);
|
||||
@@ -65,25 +69,35 @@ index 8ebd250..5bb9edb 100755
|
||||
for line in data.splitlines():
|
||||
line = line.strip().split('#',1)[0]
|
||||
if not line:
|
||||
@@ -129,7 +154,7 @@ class VersionSetDSL:
|
||||
@@ -140,7 +164,7 @@ class VersionSetDSL:
|
||||
def set(self, name, version, uversion):
|
||||
platforms = {}
|
||||
for (platformName, platform) in self.platforms.items():
|
||||
- if platform.versioned:
|
||||
+ if platform.versioned and platform.versions:
|
||||
platforms[platformName] = platform.versions[-1]
|
||||
version_set = {}
|
||||
version_set["name"] = name
|
||||
@@ -138,7 +163,7 @@ class VersionSetDSL:
|
||||
self.version_sets.append(version_set)
|
||||
# TODO add error checking for version decrease
|
||||
def version(self, platform, version):
|
||||
- if platform in self.platforms: self.platforms[platform].add_version(VersionSetDSL.Version(version))
|
||||
+ if platform in self.platforms: self.platforms[platform].add_version(VersionSetDSL.Version(version), self.threshold)
|
||||
if platform.midVersionAlias:
|
||||
platforms[platformName] = platform.versions[-2]
|
||||
else:
|
||||
@@ -159,13 +183,13 @@ class VersionSetDSL:
|
||||
self.platforms[platform].midVersionAlias = True
|
||||
aliasVersion = VersionSetDSL.Version(optionals["alias_version"])
|
||||
if aliasVersion > version:
|
||||
- self.platforms[platform].add_version(version)
|
||||
- self.platforms[platform].add_version(aliasVersion)
|
||||
+ self.platforms[platform].add_version(version, self.threshold)
|
||||
+ self.platforms[platform].add_version(aliasVersion, self.threshold)
|
||||
else:
|
||||
- self.platforms[platform].add_version(aliasVersion)
|
||||
- self.platforms[platform].add_version(version)
|
||||
+ self.platforms[platform].add_version(aliasVersion, self.threshold)
|
||||
+ self.platforms[platform].add_version(version, self.threshold)
|
||||
else:
|
||||
- self.platforms[platform].add_version(version)
|
||||
+ self.platforms[platform].add_version(version, self.threshold)
|
||||
else:
|
||||
print(f"Unknown platform \"{platform}\"")
|
||||
exit(-1)
|
||||
@@ -165,9 +190,8 @@ if not dslContent:
|
||||
@@ -192,9 +216,8 @@ if not dslContent:
|
||||
parts = line.split()
|
||||
if uversion and parts and parts[0] == "set" and parts[3] == uversion:
|
||||
break
|
||||
@@ -94,7 +108,7 @@ index 8ebd250..5bb9edb 100755
|
||||
print("---")
|
||||
for set in versions.sets():
|
||||
print(f'{set["name"]}:')
|
||||
@@ -178,7 +202,8 @@ def print_versions(platform):
|
||||
@@ -205,7 +228,8 @@ def print_versions(platform):
|
||||
print(" ".join([version.string() for version in versions.platforms()[platform].versions]))
|
||||
|
||||
class Preprocessor:
|
||||
@@ -104,7 +118,7 @@ index 8ebd250..5bb9edb 100755
|
||||
bufferedOutput = ""
|
||||
with tempfile.NamedTemporaryFile('w') as tmp:
|
||||
with open(inputFile, 'r') as input:
|
||||
@@ -207,10 +232,10 @@ class Preprocessor:
|
||||
@@ -234,10 +258,10 @@ class Preprocessor:
|
||||
output.write("\"\"\"\n")
|
||||
def VERSION_MAP(self, output):
|
||||
sets = []
|
||||
@@ -117,7 +131,7 @@ index 8ebd250..5bb9edb 100755
|
||||
output.write("""
|
||||
#include <set>
|
||||
#include <array>
|
||||
@@ -229,16 +254,16 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
@@ -256,16 +280,16 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
}};
|
||||
""".format(platform_string, len(sets), ",\n".join(sets)))
|
||||
def DYLD_HEADER_VERSIONS(self, output):
|
||||
@@ -137,7 +151,7 @@ index 8ebd250..5bb9edb 100755
|
||||
for version in platform.versions:
|
||||
output.write("#define dyld_platform_version_{}_{}".format(platform.stylized_name, version.symbol()).ljust(56, ' '))
|
||||
output.write("({{ (dyld_build_version_t){{{}, {}{}}}; }})\n".format(platform.platform_define, platform.dyld_version_define_name, version.symbol()))
|
||||
@@ -247,14 +272,14 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
@@ -274,14 +298,14 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
def ALIAS_VERSION_MACROS(self, output, platformString, newName, oldName, **optionals):
|
||||
minVersion = literal_eval(optionals.get("minVersion", "0x00000000"))
|
||||
maxVersion = literal_eval(optionals.get("maxVersion", "0xFFFFFFFF"))
|
||||
@@ -155,7 +169,7 @@ index 8ebd250..5bb9edb 100755
|
||||
if platform.bleached:
|
||||
output.write(f"#ifndef __APPLE_BLEACH_SDK__\n")
|
||||
output.write(f"#ifndef __API_TO_BE_DEPRECATED_{platform.availability_deprecation_define_name}\n")
|
||||
@@ -268,16 +293,16 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
@@ -295,16 +319,16 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
output.write(f"#endif /* __APPLE_BLEACH_SDK__ */\n")
|
||||
output.write(f"\n");
|
||||
def AVAILABILITY_VERSION_DEFINES(self, output):
|
||||
@@ -178,7 +192,7 @@ index 8ebd250..5bb9edb 100755
|
||||
continue
|
||||
if platform.bleached:
|
||||
output.write(f"#ifndef __APPLE_BLEACH_SDK__\n")
|
||||
@@ -310,8 +335,8 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
@@ -340,8 +364,8 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
output.write(f" #define __API_UNAVAILABLE_PLATFORM_{displayName} {realName},unavailable\n")
|
||||
output.write(f"#if defined(__has_feature) && defined(__has_attribute)\n")
|
||||
output.write(f" #if __has_attribute(availability)\n")
|
||||
@@ -189,7 +203,7 @@ index 8ebd250..5bb9edb 100755
|
||||
if platform.bleached:
|
||||
output.write(f"#ifndef __APPLE_BLEACH_SDK__\n")
|
||||
writeDefines(platformString, platformString, platform.versioned)
|
||||
@@ -327,9 +352,9 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
@@ -357,9 +381,9 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
output.write(f"#endif /* defined(__has_feature) && defined(__has_attribute) */\n")
|
||||
def AVAILABILITY_MACRO_IMPL(self, output, prefix, dispatcher, **optionals):
|
||||
av_version_hash = zlib.adler32(avVersion.encode()) # This does not need to cryptographically secure as it is meant to detect accidental failures
|
||||
@@ -202,7 +216,7 @@ index 8ebd250..5bb9edb 100755
|
||||
count = count + len(platform.variants)
|
||||
platformList = []
|
||||
argList = []
|
||||
@@ -344,9 +369,9 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
@@ -376,9 +400,9 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
scoped_availablity = False
|
||||
if "scoped_availablity" in optionals and optionals["scoped_availablity"] == "TRUE":
|
||||
scoped_availablity=True
|
||||
@@ -215,8 +229,8 @@ index 8ebd250..5bb9edb 100755
|
||||
count = count + len(platform.variants)
|
||||
argList = ','.join([f'{macroName}{x}' for x in reversed(range(0, count))])
|
||||
if "argCount" in optionals:
|
||||
@@ -358,8 +383,9 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
output.write(f" #define {name}(...) {macroName}_GET_MACRO(__VA_ARGS__,{argList},0)(__VA_ARGS__)\n")
|
||||
@@ -400,8 +424,9 @@ static const std::array<VersionSetEntry, {}> sVersionMap = {{{{
|
||||
output.write(f"#endif /* __AVAILABILITY_VERSIONS_VERSION_HASH */\n")
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
+parser.add_argument("--threshold", default=False, help='Specifies the maximum version (inclusive) included in pre-processed headers')
|
||||
@@ -226,9 +240,9 @@ index 8ebd250..5bb9edb 100755
|
||||
group.add_argument("--{}".format(name), default=False, action='store_true', help="Prints all SDK versions defined for {}".format(name))
|
||||
for alias in platform.cmd_aliases:
|
||||
group.add_argument("--{}".format(alias), dest=name, default=False, action='store_true', help="Alias for --{}".format(name))
|
||||
@@ -367,8 +393,10 @@ group.add_argument("--sets", default=False, actio
|
||||
group.add_argument("--preprocess", nargs=2, help=argparse.SUPPRESS)
|
||||
args = parser.parse_args()
|
||||
@@ -414,8 +439,10 @@ if args.av_version:
|
||||
avVersion = args.av_version
|
||||
|
||||
|
||||
-if args.sets: print_sets();
|
||||
-elif args.preprocess: Preprocessor(args.preprocess[0], args.preprocess[1]);
|
||||
@@ -240,4 +254,5 @@ index 8ebd250..5bb9edb 100755
|
||||
for platform in versions.platforms().keys():
|
||||
if getattr(args, platform, None):
|
||||
--
|
||||
2.45.2
|
||||
2.51.2
|
||||
|
||||
|
||||
@@ -5,27 +5,15 @@
|
||||
flex,
|
||||
meson,
|
||||
mkAppleDerivation,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
replaceVars,
|
||||
stdenv,
|
||||
stdenvNoCC,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
Libc = bootstrapSourceRelease "Libc";
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
Libc = sourceRelease "Libc";
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "adv_cmds-deps-private-headers";
|
||||
|
||||
@@ -14,7 +14,7 @@ mkAppleDerivation {
|
||||
"man"
|
||||
];
|
||||
|
||||
xcodeHash = "sha256-NurkF9AnPuaQ7Ev36PCknuTNV6z622yFi2bXZsow+xA=";
|
||||
xcodeHash = "sha256-25SDn9+SzEZJPQQJaDxsxWKeUetNHhzliLfzD9BtyyI=";
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace rpcgen/rpc_main.c \
|
||||
|
||||
@@ -3,30 +3,20 @@
|
||||
libutil,
|
||||
mkAppleDerivation,
|
||||
removefile,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
stdenvNoCC,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
Libc = bootstrapSourceRelease "Libc";
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
Libc = sourceRelease "Libc";
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "diskdev_cmds-deps-private-headers";
|
||||
|
||||
buildCommand = ''
|
||||
install -D -t "$out/include" \
|
||||
'${Libc}/include/_bounds.h'
|
||||
for dir in arm i386 machine sys; do
|
||||
install -D -t "$out/include/$dir" '${xnu}'"/bsd/$dir/disklabel.h"
|
||||
done
|
||||
@@ -58,7 +48,7 @@ mkAppleDerivation {
|
||||
"man"
|
||||
];
|
||||
|
||||
xcodeHash = "sha256-P2dg3B5pU2ayasMHIM5nI0iG+YDdYQNcEpnJzZxm1kw=";
|
||||
xcodeHash = "sha256-qyQM+48PKKWUmdoBprpDf4DXIVAtd3EKCU+ZD/EhNXQ=";
|
||||
|
||||
postPatch =
|
||||
# Fix incompatible pointer to integer conversion. The last parameter is size_t not a pointer.
|
||||
|
||||
@@ -3,25 +3,13 @@
|
||||
mkAppleDerivation,
|
||||
pkg-config,
|
||||
shell_cmds,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
stdenvNoCC,
|
||||
zlib,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "doc_cmds-deps-private-headers";
|
||||
|
||||
@@ -71,7 +71,6 @@ lsl = static_library(
|
||||
],
|
||||
include_directories : [
|
||||
common_inc,
|
||||
'cache-builder',
|
||||
'cache_builder',
|
||||
'libdyld',
|
||||
'lsl',
|
||||
@@ -174,7 +173,6 @@ libminidyld = static_library(
|
||||
dependencies : [ corecrypto_dep, lsl_dep ],
|
||||
include_directories : [
|
||||
common_inc,
|
||||
'cache-builder',
|
||||
'cache_builder',
|
||||
'libdyld',
|
||||
'libdyld_introspection',
|
||||
@@ -197,8 +195,8 @@ libdsc_extractor = shared_library(
|
||||
],
|
||||
include_directories : [
|
||||
common_inc,
|
||||
'cache-builder',
|
||||
'cache_builder',
|
||||
'other-tools',
|
||||
],
|
||||
install : true,
|
||||
link_args : [ '-Wl,-exported_symbol,_dyld_shared_cache_extract_dylibs_progress' ],
|
||||
@@ -239,14 +237,13 @@ executable(
|
||||
],
|
||||
include_directories : [
|
||||
common_inc,
|
||||
'cache-builder',
|
||||
'cache_builder',
|
||||
'other-tools',
|
||||
],
|
||||
install : true,
|
||||
link_args : [ '-Wl,-weak-lLTO' ],
|
||||
link_with : [ libminidyld ],
|
||||
sources : [
|
||||
'cache-builder/FileUtils.cpp',
|
||||
'common/Diagnostics.cpp',
|
||||
'common/DyldSharedCache.cpp',
|
||||
'common/MachOAnalyzer.cpp',
|
||||
@@ -255,6 +252,7 @@ executable(
|
||||
'common/SwiftVisitor.cpp',
|
||||
'common/TargetPolicy.cpp',
|
||||
'other-tools/dyld_info.cpp',
|
||||
'other-tools/FileUtils.cpp',
|
||||
'other-tools/MiscFileUtils.cpp',
|
||||
'other-tools/SymbolicatedImage.cpp',
|
||||
],
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
openssl,
|
||||
pkg-config,
|
||||
pkgsBuildHost,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
stdenvNoCC,
|
||||
}:
|
||||
|
||||
@@ -20,28 +20,19 @@ let
|
||||
hash = "sha256-0ybVcwHuGEdThv0PPjYQc3SW0YVOyrM3/L9zG/l1Vtk=";
|
||||
};
|
||||
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
launchd = bootstrapSourceRelease "launchd";
|
||||
Libc = bootstrapSourceRelease "Libc";
|
||||
libplatform = bootstrapSourceRelease "libplatform";
|
||||
libpthread = bootstrapSourceRelease "libpthread";
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
launchd = sourceRelease "launchd";
|
||||
Libc = sourceRelease "Libc";
|
||||
libplatform = sourceRelease "libplatform";
|
||||
libpthread = sourceRelease "libpthread";
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "dyld-deps-private-headers";
|
||||
|
||||
buildCommand = ''
|
||||
install -D -t "$out/include" \
|
||||
'${Libc}/include/_bounds.h'
|
||||
|
||||
mkdir -p "$out/include/System"
|
||||
for dir in arm i386 machine; do
|
||||
mkdir -p "$out/include/$dir"
|
||||
@@ -57,11 +48,11 @@ let
|
||||
'${Libc}/stdlib/FreeBSD/atexit.h'
|
||||
|
||||
install -D -m644 -t "$out/include/System/sys" \
|
||||
'${xnu}/bsd/sys/csr.h'
|
||||
substitute '${xnu}/bsd/sys/fsgetpath.h' "$out/include/System/sys/fsgetpath.h" \
|
||||
--replace-fail '#ifdef __APPLE_API_PRIVATE' '#if 1'
|
||||
'${xnu}/bsd/sys/csr.h' \
|
||||
'${xnu}/bsd/sys/fsgetpath.h'
|
||||
|
||||
install -D -m644 -t "$out/include" \
|
||||
'${Libc}/include/_bounds.h' \
|
||||
'${libplatform}/private/_simple.h' \
|
||||
'${Libc}/darwin/libc_private.h' \
|
||||
'${Libc}/darwin/subsystem.h' \
|
||||
@@ -88,6 +79,10 @@ let
|
||||
substituteInPlace "$out/include/os/lock_private.h" \
|
||||
--replace-fail ', bridgeos(4.0)' ""
|
||||
|
||||
install -D -m644 -t "$out/include/sys" \
|
||||
'${xnu}/bsd/sys/kern_memorystatus.h' \
|
||||
'${xnu}/bsd/sys/reason.h'
|
||||
|
||||
# This file is part of ld-prime, which is unhelpfully not included in the dyld source release.
|
||||
# Fortunately, nothing in it is actually needed to build `dyld_info` and `dsc_extractor`.
|
||||
touch "$out/include/File.h"
|
||||
@@ -105,24 +100,24 @@ mkAppleDerivation {
|
||||
|
||||
propagatedBuildOutputs = [ ];
|
||||
|
||||
xcodeHash = "sha256-4yOJouk9AjEt7W3+0cQRMUDDqBhU+J9c16ZQSzUF5go=";
|
||||
xcodeHash = "sha256-F/V1XzBP1qEDpUDTz+jyp5dbcfqdQp8s9NW2OBoU5x0=";
|
||||
|
||||
patches = [
|
||||
# Disable use of private kdebug API
|
||||
./patches/0001-Disable-kdebug-trace.patch
|
||||
# dyld_info tries to weakly link against libLTO using this macro.
|
||||
./patches/0003-Add-weaklinking_h.patch
|
||||
./patches/0002-Add-weaklinking_h.patch
|
||||
# The LLVMOpInfoCallback args comment out one of the args. Fix that for compatibility with nixpkgs LLVM.
|
||||
./patches/0004-Fix-llvm-op-info-callback-args.patch
|
||||
./patches/0003-Fix-llvm-op-info-callback-args.patch
|
||||
# Some private headers depend on corecrypto, which we can’t use.
|
||||
# Use the headers from the ld64 port, which delegates to OpenSSL.
|
||||
./patches/0005-Add-OpenSSL-based-CoreCrypto-digest-functions.patch
|
||||
./patches/0004-Add-OpenSSL-based-CoreCrypto-digest-functions.patch
|
||||
# `dsc_extractor` builds a dylib, but it includes a program that can perform cache extraction.
|
||||
# This extracts just the driver into a file to make building the actual program easier.
|
||||
./patches/0006-Add-dsc_extractor_bin_cpp.patch
|
||||
./patches/0005-Add-dsc_extractor_bin_cpp.patch
|
||||
# Fix missing symbol for `mach_o::ChainedFixups::PointerFormat::writeChainEntry`,
|
||||
# which isn’t actually needed by `dyld_info` or `dsc_extractor`.
|
||||
./patches/0007-Fix-missing-writeChainEntry.patch
|
||||
./patches/0006-Fix-missing-writeChainEntry.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
@@ -185,5 +180,10 @@ mkAppleDerivation {
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
||||
postInstall = ''
|
||||
install_name_tool "''${!outputBin}/bin/dsc_extractor" \
|
||||
-change @rpath/dsc_extractor.bundle "''${!outputLib}/lib/dsc_extractor.bundle"
|
||||
'';
|
||||
|
||||
meta.description = "Dyld-related commands for Darwin";
|
||||
}
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
From b37141e26eb2f3c5c383d7c29e8a7a7362f822ae Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Fri, 10 Apr 2026 19:45:22 -0400
|
||||
Subject: [PATCH] Disable-kdebug-trace
|
||||
|
||||
---
|
||||
dyld/Tracing.h | 79 ++++++++++++--------------------------------------
|
||||
1 file changed, 19 insertions(+), 60 deletions(-)
|
||||
|
||||
diff --git a/dyld/Tracing.h b/dyld/Tracing.h
|
||||
index 1e6e3027d9..bac62cf72d 100644
|
||||
index 9536f0b..aa8d373 100644
|
||||
--- a/dyld/Tracing.h
|
||||
+++ b/dyld/Tracing.h
|
||||
@@ -31,29 +31,25 @@
|
||||
@@ -51,7 +60,7 @@ index 1e6e3027d9..bac62cf72d 100644
|
||||
|
||||
#include "Defines.h"
|
||||
|
||||
@@ -111,24 +107,10 @@
|
||||
@@ -118,24 +114,10 @@ struct VIS_HIDDEN kt_arg {
|
||||
uint64_t value() const { return _value; }
|
||||
private:
|
||||
void prepare(uint32_t code) {
|
||||
@@ -76,7 +85,7 @@ index 1e6e3027d9..bac62cf72d 100644
|
||||
uint64_t _value;
|
||||
const char* _str;
|
||||
};
|
||||
@@ -168,29 +150,6 @@
|
||||
@@ -175,29 +157,6 @@ private:
|
||||
uint64_t current_trace_id = 0;
|
||||
};
|
||||
|
||||
@@ -106,3 +115,6 @@ index 1e6e3027d9..bac62cf72d 100644
|
||||
VIS_HIDDEN
|
||||
void syntheticBacktrace(const char *reason, bool enableExternally=false);
|
||||
|
||||
--
|
||||
2.51.2
|
||||
|
||||
|
||||
+15
-2
@@ -1,9 +1,19 @@
|
||||
From aa4ca805f1f13619056c4caf14eb863e0a37a51f Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Fri, 10 Apr 2026 19:45:22 -0400
|
||||
Subject: [PATCH] Add-weaklinking_h
|
||||
|
||||
---
|
||||
include/SoftLinking/WeakLinking.h | 28 ++++++++++++++++++++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
create mode 100644 include/SoftLinking/WeakLinking.h
|
||||
|
||||
diff --git a/include/SoftLinking/WeakLinking.h b/include/SoftLinking/WeakLinking.h
|
||||
new file mode 100644
|
||||
index 0000000000..82755e2a43
|
||||
index 0000000..99ef8c8
|
||||
--- /dev/null
|
||||
+++ b/include/SoftLinking/WeakLinking.h
|
||||
@@ -1,0 +1,28 @@
|
||||
@@ -0,0 +1,28 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
|
||||
+ *
|
||||
@@ -32,3 +42,6 @@ index 0000000000..82755e2a43
|
||||
+#pragma once
|
||||
+
|
||||
+#define WEAK_LINK_FORCE_IMPORT(sym) extern __attribute__((weak_import)) __typeof__(sym) sym
|
||||
--
|
||||
2.51.2
|
||||
|
||||
+15
-3
@@ -1,8 +1,17 @@
|
||||
diff --git a/other-tools/dyld_info.cpp b/other-tools/dyld_info.cpp
|
||||
index 2de4978ba5..2ce27257d9 100644
|
||||
From 9a7a6f039550539033e0f32929f4fb76f11f5afe Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Fri, 10 Apr 2026 19:45:22 -0400
|
||||
Subject: [PATCH] Fix-llvm-op-info-callback-args
|
||||
|
||||
---
|
||||
other-tools/SymbolicatedImage.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/other-tools/SymbolicatedImage.cpp b/other-tools/SymbolicatedImage.cpp
|
||||
index 47f1bdb..efacc94 100644
|
||||
--- a/other-tools/SymbolicatedImage.cpp
|
||||
+++ b/other-tools/SymbolicatedImage.cpp
|
||||
@@ -991,7 +991,7 @@
|
||||
@@ -968,7 +968,7 @@ static const char* printDumpSymbolCallback(void* di, uint64_t referenceValue, ui
|
||||
return ((SymbolicatedImage*)di)->lookupSymbol(referencePC, referenceValue, *referenceType, *referenceName);
|
||||
}
|
||||
|
||||
@@ -11,3 +20,6 @@ index 2de4978ba5..2ce27257d9 100644
|
||||
int tagType, void* tagBuf)
|
||||
{
|
||||
return ((SymbolicatedImage*)di)->opInfo(pc, offset, opSize, tagType, tagBuf);
|
||||
--
|
||||
2.51.2
|
||||
|
||||
+46
-84
@@ -1,21 +1,21 @@
|
||||
From 36767c7345161baf0ab125f95c8557f8e24f25db Mon Sep 17 00:00:00 2001
|
||||
From ee93858987e98c984e293cc2455adc698aeb600f Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Tue, 9 Apr 2024 19:28:17 -0400
|
||||
Subject: [PATCH 7/8] Add OpenSSL-based CoreCrypto digest functions
|
||||
Date: Fri, 10 Apr 2026 19:45:22 -0400
|
||||
Subject: [PATCH] Add-OpenSSL-based-CoreCrypto-digest-functions
|
||||
|
||||
---
|
||||
compat/CommonCrypto/CommonDigest.h | 6 +++
|
||||
compat/CommonCrypto/CommonDigestSPI.c | 21 +++++++++++
|
||||
compat/CommonCrypto/CommonDigestSPI.h | 14 +++++++
|
||||
compat/CommonCrypto/CommonDigest.h | 5 +++
|
||||
compat/CommonCrypto/CommonDigestSPI.c | 21 ++++++++++
|
||||
compat/CommonCrypto/CommonDigestSPI.h | 16 ++++++++
|
||||
compat/corecrypto/api_defines.h | 10 +++++
|
||||
compat/corecrypto/ccdigest.c | 53 +++++++++++++++++++++++++++
|
||||
compat/corecrypto/ccdigest.h | 27 ++++++++++++++
|
||||
compat/corecrypto/ccdigest_private.h | 19 ++++++++++
|
||||
compat/corecrypto/ccsha1.c | 22 +++++++++++
|
||||
compat/corecrypto/ccsha1.h | 9 +++++
|
||||
compat/corecrypto/ccsha2.c | 22 +++++++++++
|
||||
compat/corecrypto/ccsha2.h | 9 +++++
|
||||
11 files changed, 212 insertions(+)
|
||||
compat/corecrypto/ccdigest.c | 59 +++++++++++++++++++++++++++
|
||||
compat/corecrypto/ccdigest.h | 28 +++++++++++++
|
||||
compat/corecrypto/ccdigest_private.h | 19 +++++++++
|
||||
compat/corecrypto/ccsha1.c | 22 ++++++++++
|
||||
compat/corecrypto/ccsha1.h | 9 ++++
|
||||
compat/corecrypto/ccsha2.c | 31 ++++++++++++++
|
||||
compat/corecrypto/ccsha2.h | 13 ++++++
|
||||
11 files changed, 233 insertions(+)
|
||||
create mode 100644 compat/CommonCrypto/CommonDigest.h
|
||||
create mode 100644 compat/CommonCrypto/CommonDigestSPI.c
|
||||
create mode 100644 compat/CommonCrypto/CommonDigestSPI.h
|
||||
@@ -30,7 +30,7 @@ Subject: [PATCH 7/8] Add OpenSSL-based CoreCrypto digest functions
|
||||
|
||||
diff --git a/compat/CommonCrypto/CommonDigest.h b/compat/CommonCrypto/CommonDigest.h
|
||||
new file mode 100644
|
||||
index 0000000..a60eba7
|
||||
index 0000000..531bb05
|
||||
--- /dev/null
|
||||
+++ b/compat/CommonCrypto/CommonDigest.h
|
||||
@@ -0,0 +1,5 @@
|
||||
@@ -68,7 +68,7 @@ index 0000000..41269fc
|
||||
+}
|
||||
diff --git a/compat/CommonCrypto/CommonDigestSPI.h b/compat/CommonCrypto/CommonDigestSPI.h
|
||||
new file mode 100644
|
||||
index 0000000..172742a
|
||||
index 0000000..d6cca93
|
||||
--- /dev/null
|
||||
+++ b/compat/CommonCrypto/CommonDigestSPI.h
|
||||
@@ -0,0 +1,16 @@
|
||||
@@ -106,10 +106,10 @@ index 0000000..13d1e7a
|
||||
+#endif
|
||||
diff --git a/compat/corecrypto/ccdigest.c b/compat/corecrypto/ccdigest.c
|
||||
new file mode 100644
|
||||
index 0000000..e29dcb8
|
||||
index 0000000..81fb8a5
|
||||
--- /dev/null
|
||||
+++ b/compat/corecrypto/ccdigest.c
|
||||
@@ -0,0 +1,53 @@
|
||||
@@ -0,0 +1,59 @@
|
||||
+// SPDX-License-Identifier: APSL-2.0
|
||||
+// CoreCrypto compatibility shims written by Randy Eckenrode © 2024
|
||||
+
|
||||
@@ -135,6 +135,12 @@ index 0000000..e29dcb8
|
||||
+ return di;
|
||||
+}
|
||||
+
|
||||
+void ccdigest_di_clear(const struct ccdigest_info* di, struct ccdigest_context* ctx)
|
||||
+{
|
||||
+ EVP_MD_CTX_free(ctx->context);
|
||||
+ ctx->context = EVP_MD_CTX_new();
|
||||
+}
|
||||
+
|
||||
+void ccdigest_init(const struct ccdigest_info* di, struct ccdigest_context* ctx)
|
||||
+{
|
||||
+ if (!EVP_DigestInit_ex2(ctx->context, di->provider, NULL)) {
|
||||
@@ -165,10 +171,10 @@ index 0000000..e29dcb8
|
||||
+}
|
||||
diff --git a/compat/corecrypto/ccdigest.h b/compat/corecrypto/ccdigest.h
|
||||
new file mode 100644
|
||||
index 0000000..9af2394
|
||||
index 0000000..b204cd0
|
||||
--- /dev/null
|
||||
+++ b/compat/corecrypto/ccdigest.h
|
||||
@@ -0,0 +1,27 @@
|
||||
@@ -0,0 +1,28 @@
|
||||
+// SPDX-License-Identifier: APSL-2.0
|
||||
+// CoreCrypto compatibility shims written by Randy Eckenrode © 2024
|
||||
+
|
||||
@@ -188,6 +194,7 @@ index 0000000..9af2394
|
||||
+#define ccdigest_di_decl(_di, ctxvar) \
|
||||
+ struct ccdigest_context* (ctxvar) = _ccdigest_context_new()
|
||||
+
|
||||
+EXTERN_C void ccdigest_di_clear(const struct ccdigest_info* _di, struct ccdigest_context* ctx);
|
||||
+EXTERN_C void ccdigest_init(const struct ccdigest_info* di, struct ccdigest_context* ctx);
|
||||
+EXTERN_C void ccdigest_update(
|
||||
+ const struct ccdigest_info* _di,
|
||||
@@ -266,10 +273,10 @@ index 0000000..8e3f85f
|
||||
+EXTERN_C const struct ccdigest_info* ccsha1_di(void);
|
||||
diff --git a/compat/corecrypto/ccsha2.c b/compat/corecrypto/ccsha2.c
|
||||
new file mode 100644
|
||||
index 0000000..6504503
|
||||
index 0000000..ed4de54
|
||||
--- /dev/null
|
||||
+++ b/compat/corecrypto/ccsha2.c
|
||||
@@ -0,0 +1,22 @@
|
||||
@@ -0,0 +1,31 @@
|
||||
+// SPDX-License-Identifier: APSL-2.0
|
||||
+// CoreCrypto compatibility shims written by Randy Eckenrode © 2024
|
||||
+
|
||||
@@ -292,59 +299,6 @@ index 0000000..6504503
|
||||
+ }
|
||||
+ return di;
|
||||
+}
|
||||
diff --git a/compat/corecrypto/ccsha2.h b/compat/corecrypto/ccsha2.h
|
||||
new file mode 100644
|
||||
index 0000000..9f30e03
|
||||
--- /dev/null
|
||||
+++ b/compat/corecrypto/ccsha2.h
|
||||
@@ -0,0 +1,10 @@
|
||||
+// SPDX-License-Identifier: APSL-2.0
|
||||
+// CoreCrypto compatibility shims written by Randy Eckenrode © 2024
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <corecrypto/ccdigest.h>
|
||||
+
|
||||
+#define CCSHA256_OUTPUT_SIZE 32
|
||||
+
|
||||
+EXTERN_C const struct ccdigest_info* ccsha256_di(void);
|
||||
-diff --git a/compat/corecrypto/ccdigest.c b/compat/corecrypto/ccdigest.c
|
||||
index e29dcb8..3949861 100644
|
||||
--- a/compat/corecrypto/ccdigest.c
|
||||
+++ b/compat/corecrypto/ccdigest.c
|
||||
@@ -23,6 +23,12 @@ struct ccdigest_info* _ccdigest_newprovider(const char* name)
|
||||
return di;
|
||||
}
|
||||
|
||||
+void ccdigest_di_clear(const struct ccdigest_info* di, struct ccdigest_context* ctx)
|
||||
+{
|
||||
+ EVP_MD_CTX_free(ctx->context);
|
||||
+ ctx->context = EVP_MD_CTX_new();
|
||||
+}
|
||||
+
|
||||
void ccdigest_init(const struct ccdigest_info* di, struct ccdigest_context* ctx)
|
||||
{
|
||||
if (!EVP_DigestInit_ex2(ctx->context, di->provider, NULL)) {
|
||||
diff --git a/compat/corecrypto/ccdigest.h b/compat/corecrypto/ccdigest.h
|
||||
index 9af2394..d693fb7 100644
|
||||
--- a/compat/corecrypto/ccdigest.h
|
||||
+++ b/compat/corecrypto/ccdigest.h
|
||||
@@ -17,6 +17,7 @@ EXTERN_C struct ccdigest_context* _ccdigest_context_new(void);
|
||||
#define ccdigest_di_decl(_di, ctxvar) \
|
||||
struct ccdigest_context* (ctxvar) = _ccdigest_context_new()
|
||||
|
||||
+EXTERN_C void ccdigest_di_clear(const struct ccdigest_info* _di, struct ccdigest_context* ctx);
|
||||
EXTERN_C void ccdigest_init(const struct ccdigest_info* di, struct ccdigest_context* ctx);
|
||||
EXTERN_C void ccdigest_update(
|
||||
const struct ccdigest_info* _di,
|
||||
diff --git a/compat/corecrypto/ccsha2.c b/compat/corecrypto/ccsha2.c
|
||||
index 6504503..ed4de54 100644
|
||||
--- a/compat/corecrypto/ccsha2.c
|
||||
+++ b/compat/corecrypto/ccsha2.c
|
||||
@@ -20,3 +20,12 @@ const struct ccdigest_info* ccsha256_di(void)
|
||||
}
|
||||
return di;
|
||||
}
|
||||
+
|
||||
+const struct ccdigest_info* ccsha384_di(void)
|
||||
+{
|
||||
@@ -355,16 +309,24 @@ index 6504503..ed4de54 100644
|
||||
+ return di;
|
||||
+}
|
||||
diff --git a/compat/corecrypto/ccsha2.h b/compat/corecrypto/ccsha2.h
|
||||
index 9f30e03..bee18e8 100644
|
||||
--- a/compat/corecrypto/ccsha2.h
|
||||
new file mode 100644
|
||||
index 0000000..7c0c8de
|
||||
--- /dev/null
|
||||
+++ b/compat/corecrypto/ccsha2.h
|
||||
@@ -5,6 +5,9 @@
|
||||
|
||||
#include <corecrypto/ccdigest.h>
|
||||
|
||||
#define CCSHA256_OUTPUT_SIZE 32
|
||||
@@ -0,0 +1,13 @@
|
||||
+// SPDX-License-Identifier: APSL-2.0
|
||||
+// CoreCrypto compatibility shims written by Randy Eckenrode © 2024
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include <corecrypto/ccdigest.h>
|
||||
+
|
||||
+#define CCSHA256_OUTPUT_SIZE 32
|
||||
+#define CCSHA384_OUTPUT_SIZE 48
|
||||
+#define CS_SHA384_LEN CCSHA384_OUTPUT_SIZE
|
||||
|
||||
EXTERN_C const struct ccdigest_info* ccsha256_di(void);
|
||||
+
|
||||
+EXTERN_C const struct ccdigest_info* ccsha256_di(void);
|
||||
+EXTERN_C const struct ccdigest_info* ccsha384_di(void);
|
||||
--
|
||||
2.51.2
|
||||
|
||||
+14
-1
@@ -1,6 +1,16 @@
|
||||
From 720926afdec1b026d22b7525ea5a40b35a2c6475 Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Fri, 10 Apr 2026 19:45:23 -0400
|
||||
Subject: [PATCH] Add-dsc_extractor_bin_cpp
|
||||
|
||||
---
|
||||
other-tools/dsc_extractor_bin.cpp | 33 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 33 insertions(+)
|
||||
create mode 100644 other-tools/dsc_extractor_bin.cpp
|
||||
|
||||
diff --git a/other-tools/dsc_extractor_bin.cpp b/other-tools/dsc_extractor_bin.cpp
|
||||
new file mode 100644
|
||||
index 0000000000..2f26fbe4db
|
||||
index 0000000..5a8f3f8
|
||||
--- /dev/null
|
||||
+++ b/other-tools/dsc_extractor_bin.cpp
|
||||
@@ -0,0 +1,33 @@
|
||||
@@ -37,3 +47,6 @@ index 0000000000..2f26fbe4db
|
||||
+ fprintf(stderr, "dyld_shared_cache_extract_dylibs_progress() => %d\n", result);
|
||||
+ return 0;
|
||||
+}
|
||||
--
|
||||
2.51.2
|
||||
|
||||
+16
-4
@@ -1,13 +1,25 @@
|
||||
From e56398bce025241fc8512ea594665a94dc81d539 Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Fri, 10 Apr 2026 19:55:35 -0400
|
||||
Subject: [PATCH] Fix-missing-writeChainEntry
|
||||
|
||||
---
|
||||
mach_o/ChainedFixups.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mach_o/ChainedFixups.h b/mach_o/ChainedFixups.h
|
||||
index 10ff8847e0..336f80dd81 100644
|
||||
index 2400420..1316d90 100644
|
||||
--- a/mach_o/ChainedFixups.h
|
||||
+++ b/mach_o/ChainedFixups.h
|
||||
@@ -78,7 +78,7 @@
|
||||
@@ -78,7 +78,7 @@ public:
|
||||
std::span<const uint64_t> segOffsetTable, uint32_t pageIndex, uint32_t pageSize,
|
||||
void (^callback)(const Fixup& f, bool& stop)) const;
|
||||
virtual Fixup parseChainEntry(const void* loc, const MappedSegment* seg, uint64_t preferedLoadAddress=0, std::span<const uint64_t> segOffsetTable={}) const = 0;
|
||||
- virtual void writeChainEntry(const Fixup& fixup, const void* nextLoc, uint64_t preferedLoadAddress, std::span<const MappedSegment*>) const;
|
||||
+ virtual void writeChainEntry(const Fixup& fixup, const void* nextLoc, uint64_t preferedLoadAddress, std::span<const MappedSegment*>) const = 0;
|
||||
- virtual Error writeChainEntry(const Fixup& fixup, const void* nextLoc, uint64_t preferedLoadAddress, std::span<const MappedSegment*>) const;
|
||||
+ virtual Error writeChainEntry(const Fixup& fixup, const void* nextLoc, uint64_t preferedLoadAddress, std::span<const MappedSegment*>) const = 0;
|
||||
|
||||
protected:
|
||||
constexpr PointerFormat() { }
|
||||
--
|
||||
2.51.2
|
||||
|
||||
@@ -20,6 +20,7 @@ bzip2 = dependency('bzip2')
|
||||
xz = dependency('liblzma')
|
||||
libmd = dependency('libmd')
|
||||
libxo = dependency('libxo')
|
||||
ncurses = dependency('ncurses')
|
||||
zlib = dependency('zlib')
|
||||
|
||||
copyfile = cc.find_library('copyfile')
|
||||
@@ -218,10 +219,11 @@ install_man(f'ln/symlink.7')
|
||||
executable(
|
||||
'ls',
|
||||
c_args : [
|
||||
'-DCOLORLS',
|
||||
# https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/stat.h#L520
|
||||
'-DSF_DATALESS=0x40000000',
|
||||
],
|
||||
dependencies : [ libutil ],
|
||||
dependencies : [ libutil, ncurses ],
|
||||
install : true,
|
||||
sources: [
|
||||
'ls/cmp.c',
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
lib,
|
||||
apple-sdk_26,
|
||||
bzip2,
|
||||
copyfile,
|
||||
less,
|
||||
@@ -7,33 +8,22 @@
|
||||
libutil,
|
||||
libxo,
|
||||
mkAppleDerivation,
|
||||
ncurses,
|
||||
pkg-config,
|
||||
removefile,
|
||||
shell_cmds,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
stdenvNoCC,
|
||||
xz,
|
||||
zlib,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
Libc = bootstrapSourceRelease "Libc";
|
||||
Libinfo = bootstrapSourceRelease "Libinfo";
|
||||
CommonCrypto = bootstrapSourceRelease "CommonCrypto";
|
||||
libplatform = bootstrapSourceRelease "libplatform";
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
Libc = sourceRelease "Libc";
|
||||
Libinfo = sourceRelease "Libinfo";
|
||||
CommonCrypto = sourceRelease "CommonCrypto";
|
||||
libplatform = sourceRelease "libplatform";
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "file_cmds-deps-private-headers";
|
||||
@@ -103,13 +93,12 @@ mkAppleDerivation {
|
||||
"xattr"
|
||||
];
|
||||
|
||||
xcodeHash = "sha256-KEZYuaDxLdprF+wGiszUdTXPQBfLNj0xP9Y0uarNjSs=";
|
||||
xcodeHash = "sha256-O1eJGFrSVIZbZvBSonKkG4MeYZQ8W6izpYEcHIE+/DM=";
|
||||
|
||||
patches = [
|
||||
# Fixes build of ls
|
||||
./patches/0001-Add-missing-extern-unix2003_compat-to-ls.patch
|
||||
# Add missing conditional to avoid using private APFS APIs that we lack headers for using.
|
||||
./patches/0002-Add-missing-ifdef-for-private-APFS-APIs.patch
|
||||
# `O_RESOLVE_BENEATH` was added in macOS 26, but our default deployment target is older than that.
|
||||
# Make its usage conditional.
|
||||
./patches/0001-Conditionalize-O_RESOLVE_BENEATH-usage.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
@@ -117,11 +106,13 @@ mkAppleDerivation {
|
||||
env.NIX_CFLAGS_COMPILE = "-I${privateHeaders}/include";
|
||||
|
||||
buildInputs = [
|
||||
apple-sdk_26 # For `O_RESOLVE_BENEATH` and `AT_RESOLVE_BENEATH`
|
||||
bzip2
|
||||
copyfile
|
||||
libmd
|
||||
libutil
|
||||
libxo
|
||||
ncurses
|
||||
removefile
|
||||
xz
|
||||
zlib
|
||||
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
From 9e2185bde1320273b6465d272e1a36bff29fb9d6 Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Sat, 7 Sep 2024 09:37:31 -0400
|
||||
Subject: [PATCH 1/3] Add missing extern unix2003_compat to ls
|
||||
|
||||
---
|
||||
ls/ls.h | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/ls/ls.h b/ls/ls.h
|
||||
index 2a41c8b..ff9c3a9 100644
|
||||
--- a/ls/ls.h
|
||||
+++ b/ls/ls.h
|
||||
@@ -114,4 +114,9 @@ typedef struct {
|
||||
char data[1];
|
||||
} NAMES;
|
||||
|
||||
+#ifdef __APPLE__
|
||||
+#include <stdbool.h>
|
||||
+extern bool unix2003_compat;
|
||||
+#endif
|
||||
+
|
||||
#endif /* _LS_H_ */
|
||||
--
|
||||
2.46.0
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
From dc8df286a20aedd8295b69798346b0d893e30773 Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Fri, 10 Apr 2026 20:08:11 -0400
|
||||
Subject: [PATCH] Conditionalize-O_RESOLVE_BENEATH-usage
|
||||
|
||||
---
|
||||
cp/cp.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/cp/cp.c b/cp/cp.c
|
||||
index b1cac37..8ed535a 100644
|
||||
--- a/cp/cp.c
|
||||
+++ b/cp/cp.c
|
||||
@@ -331,6 +331,11 @@ copy(char *argv[], enum op type, int fts_options, struct stat *root_stat)
|
||||
mode_t mask, mode;
|
||||
bool beneath = Rflag && type != FILE_TO_FILE;
|
||||
|
||||
+ /* `O_RESOLVE_BENEATH` is only supported on macOS 26 or newer */
|
||||
+ if (!__builtin_available(macOS 26.0, *)) {
|
||||
+ beneath = false;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Keep an inverted copy of the umask, for use in correcting
|
||||
* permissions on created directories when not using -p.
|
||||
--
|
||||
2.51.2
|
||||
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
From c40768a7a0cd4bcc75a408880e79135ad33292b5 Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Sat, 7 Sep 2024 09:44:20 -0400
|
||||
Subject: [PATCH 2/3] Add missing #ifdef for private APFS APIs
|
||||
|
||||
---
|
||||
mtree/commoncrypto.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mtree/commoncrypto.c b/mtree/commoncrypto.c
|
||||
index 75790dd..e04d1c6 100644
|
||||
--- a/mtree/commoncrypto.c
|
||||
+++ b/mtree/commoncrypto.c
|
||||
@@ -254,6 +254,7 @@ get_xdstream_privateid(char *path, char *buf) {
|
||||
nextName += strlen(name) + 1;
|
||||
}
|
||||
|
||||
+#ifdef APFSIOC_XDSTREAM_OBJ_ID
|
||||
for (int i = 0; i < xattrIndex; i++) {
|
||||
char *name = xattrs[i];
|
||||
// System volume has stream based xattrs only in form of resource forks
|
||||
@@ -275,7 +276,7 @@ get_xdstream_privateid(char *path, char *buf) {
|
||||
}
|
||||
}
|
||||
}
|
||||
-
|
||||
+#endif
|
||||
ai->xdstream_priv_id = xd_obj_id;
|
||||
// insert a dummy value as digest is not used in presence of mflag
|
||||
ai->digest = "authapfs";
|
||||
--
|
||||
2.46.0
|
||||
|
||||
@@ -3,25 +3,13 @@
|
||||
mkAppleDerivation,
|
||||
ncurses,
|
||||
pkg-config,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
stdenvNoCC,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
iokitUser = bootstrapSourceRelease "IOKitUser";
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
iokitUser = sourceRelease "IOKitUser";
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "IOKitTools-deps-private-headers";
|
||||
|
||||
@@ -18,7 +18,7 @@ mkAppleDerivation (finalAttrs: {
|
||||
"dev"
|
||||
];
|
||||
|
||||
xcodeHash = "sha256-IiTqhEJIZ8JYjlpBS7ITwYlp8ndU6cehus9TIr+5LYM=";
|
||||
xcodeHash = "sha256-fg5N+TcpyRnAf2ZKFEL0iJRy+QGs++Jmt6M3SV3oyfU=";
|
||||
|
||||
patches = [
|
||||
# Use gperf to implement module loading statically by looking up the module functions in the static binary.
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
lib,
|
||||
bison,
|
||||
bluez,
|
||||
fetchFromGitHub,
|
||||
flex,
|
||||
mkAppleDerivation,
|
||||
sourceRelease,
|
||||
stdenv,
|
||||
stdenvNoCC,
|
||||
unifdef,
|
||||
@@ -14,13 +14,7 @@
|
||||
}:
|
||||
|
||||
let
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
xnu = fetchFromGitHub {
|
||||
owner = "apple-oss-distributions";
|
||||
repo = "xnu";
|
||||
rev = "xnu-11417.121.6";
|
||||
hash = "sha256-o4tCuCAIgAYg/Li3wTs12mVWr5C/4vbwu1zi+kJ9d6w=";
|
||||
};
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "libpcap-deps-private-headers";
|
||||
@@ -32,7 +26,9 @@ let
|
||||
unifdef -x 1 -DPRIVATE -o "$out/include/net/droptap.h" '${xnu}/bsd/net/droptap.h'
|
||||
unifdef -x 1 -DPRIVATE -o "$out/include/net/iptap.h" '${xnu}/bsd/net/iptap.h'
|
||||
unifdef -x 1 -DPRIVATE -o "$out/include/net/pktap.h" '${xnu}/bsd/net/pktap.h'
|
||||
unifdef -x 1 -DPRIVATE -o "$out/include/net/bpf.h" '${xnu}/bsd/net/bpf.h'
|
||||
unifdef -x 1 -DPRIVATE -UMODULES_SUPPORTED -o "$out/include/net/bpf.h" '${xnu}/bsd/net/bpf.h'
|
||||
install -D -t "$out/include/net" \
|
||||
'${xnu}/bsd/net/bpf_private.h'
|
||||
|
||||
cat <<EOF > "$out/include/net/if.h"
|
||||
#pragma once
|
||||
|
||||
@@ -7,18 +7,21 @@ add_project_arguments(
|
||||
'-DCOMMON_DIGEST_FOR_RFC_1321', # To enable legacy `MD5` APIs in CommonCrypto.
|
||||
# This is not defined automatically by Clang. Not having them defined causes compilation failures.
|
||||
'-DTARGET_OS_BRIDGE=0',
|
||||
'-DTARGET_OS_EXCLAVEKIT=0',
|
||||
language : 'c',
|
||||
)
|
||||
|
||||
|
||||
# Dependencies
|
||||
cc = meson.get_compiler('c')
|
||||
thread_dep = dependency('threads')
|
||||
|
||||
|
||||
# Libraries
|
||||
libresolv = library(
|
||||
'resolv',
|
||||
darwin_versions : '1',
|
||||
dependencies : [ thread_dep ],
|
||||
install : true,
|
||||
sources : [
|
||||
'base64.c',
|
||||
|
||||
@@ -8,13 +8,7 @@
|
||||
|
||||
let
|
||||
configd = sourceRelease "configd";
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
dyld = fetchFromGitHub {
|
||||
owner = "apple-oss-distributions";
|
||||
repo = "dyld";
|
||||
rev = "dyld-1160.6";
|
||||
hash = "sha256-6P/Da6xP19vmaCROoYv9pl7DaW3/U+qZBJT8PD33bn0=";
|
||||
};
|
||||
dyld = sourceRelease "dyld";
|
||||
Libinfo = sourceRelease "Libinfo";
|
||||
Libnotify = sourceRelease "Libnotify";
|
||||
|
||||
@@ -51,7 +45,7 @@ mkAppleDerivation {
|
||||
--replace-fail '<md5.h>' '<CommonCrypto/CommonDigest.h>'
|
||||
'';
|
||||
|
||||
xcodeHash = "sha256-Q5jHee9rxge6HJtf9/sFK15FsS02GQmx7L0BBDiyGIs=";
|
||||
xcodeHash = "sha256-pQ1eFMPnSy8M3pfvv+sPyale9xDlVCMif0EWO8PO7zg=";
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = "-I${privateHeaders}/include -I${configd}/dnsinfo -I${Libinfo}/lookup.subproj -I${Libnotify}";
|
||||
|
||||
|
||||
@@ -74,17 +74,6 @@ install_man(
|
||||
'arp.tproj/arp4.4',
|
||||
)
|
||||
|
||||
executable(
|
||||
'cfilutil',
|
||||
dependencies : [ corecrypto ],
|
||||
install : true,
|
||||
sources : [
|
||||
'cfilutil/cfilstat.c',
|
||||
'cfilutil/cfilutil.c',
|
||||
],
|
||||
)
|
||||
install_man('cfilutil/cfilutil.1')
|
||||
|
||||
executable(
|
||||
'dnctl',
|
||||
install : true,
|
||||
@@ -92,30 +81,6 @@ executable(
|
||||
)
|
||||
install_man('dnctl/dnctl.8')
|
||||
|
||||
executable(
|
||||
'ecnprobe',
|
||||
dependencies : [ libnetwork_cmds, libpcap ],
|
||||
install : true,
|
||||
sources : [
|
||||
'ecnprobe/capture.c',
|
||||
'ecnprobe/ecn.c',
|
||||
'ecnprobe/ecn_probe.c',
|
||||
'ecnprobe/gmt2local.c',
|
||||
'ecnprobe/history.c',
|
||||
'ecnprobe/inet.c',
|
||||
'ecnprobe/session.c',
|
||||
'ecnprobe/support.c',
|
||||
],
|
||||
)
|
||||
install_man('ecnprobe/ecnprobe.1')
|
||||
|
||||
executable(
|
||||
'frame_delay',
|
||||
install : true,
|
||||
sources : [ 'frame_delay/frame_delay.c' ],
|
||||
)
|
||||
install_man('frame_delay/frame_delay.8')
|
||||
|
||||
executable(
|
||||
'ifconfig',
|
||||
c_args : [
|
||||
@@ -139,13 +104,6 @@ executable(
|
||||
)
|
||||
install_man('ifconfig.tproj/ifconfig.8')
|
||||
|
||||
executable(
|
||||
'ip6addrctl',
|
||||
install : true,
|
||||
sources : [ 'ip6addrctl.tproj/ip6addrctl.c' ],
|
||||
)
|
||||
install_man('ip6addrctl.tproj/ip6addrctl.8')
|
||||
|
||||
executable(
|
||||
'kdumpd',
|
||||
dependencies : [ libnetwork_cmds ],
|
||||
@@ -157,34 +115,6 @@ executable(
|
||||
)
|
||||
install_man('kdumpd.tproj/kdumpd.8')
|
||||
|
||||
executable(
|
||||
'mnc',
|
||||
install : true,
|
||||
sources : [
|
||||
'mnc.tproj/mnc_main.c',
|
||||
'mnc.tproj/mnc_multicast.c',
|
||||
'mnc.tproj/mnc_opts.c',
|
||||
],
|
||||
)
|
||||
install_man('mnc.tproj/mnc.1')
|
||||
|
||||
executable(
|
||||
'mptcp_client',
|
||||
install : true,
|
||||
sources : [
|
||||
'mptcp_client/conn_lib.c',
|
||||
'mptcp_client/mptcp_client.c',
|
||||
],
|
||||
)
|
||||
install_man('mptcp_client/mptcp_client.1')
|
||||
|
||||
executable(
|
||||
'mtest',
|
||||
install : true,
|
||||
sources : [ 'mtest.tproj/mtest.c' ],
|
||||
)
|
||||
install_man('mtest.tproj/mtest.8')
|
||||
|
||||
executable(
|
||||
'ndp',
|
||||
c_args : [
|
||||
@@ -231,7 +161,7 @@ executable(
|
||||
dependencies : [ libnetwork_cmds ],
|
||||
install : true,
|
||||
sources : [
|
||||
'ecnprobe/gmt2local.c',
|
||||
'network_cmds_lib/gmt2local.c',
|
||||
'ping.tproj/ping.c'
|
||||
],
|
||||
)
|
||||
@@ -242,26 +172,13 @@ executable(
|
||||
dependencies : [ libnetwork_cmds, libresolv ],
|
||||
install : true,
|
||||
sources : [
|
||||
'ecnprobe/gmt2local.c',
|
||||
'network_cmds_lib/gmt2local.c',
|
||||
'ping6.tproj/md5.c',
|
||||
'ping6.tproj/ping6.c',
|
||||
],
|
||||
)
|
||||
install_man('ping6.tproj/ping6.8')
|
||||
|
||||
executable(
|
||||
'pktapctl',
|
||||
install : true,
|
||||
sources : [ 'pktapctl/pktapctl.c' ],
|
||||
)
|
||||
install_man('pktapctl/pktapctl.8')
|
||||
|
||||
executable(
|
||||
'pktmnglr',
|
||||
install : true,
|
||||
sources : [ 'pktmnglr/packet_mangler.c' ],
|
||||
)
|
||||
|
||||
executable(
|
||||
'rarpd',
|
||||
c_args : [ '-DTFTP_DIR="tftpboot"' ],
|
||||
@@ -282,32 +199,6 @@ executable(
|
||||
)
|
||||
install_man('route.tproj/route.8')
|
||||
|
||||
executable(
|
||||
'rtadvd',
|
||||
c_args : [
|
||||
'-DINET6',
|
||||
'-DHAVE_GETIFADDRS',
|
||||
# Required for `_COMM_PAGE_CPU_CAPABILITIES` in <machine/cpu_capabilities.h>
|
||||
'-DPRIVATE',
|
||||
],
|
||||
dependencies : libutil,
|
||||
install : true,
|
||||
sources : [
|
||||
'rtadvd.tproj/advcap.c',
|
||||
'rtadvd.tproj/config.c',
|
||||
'rtadvd.tproj/dump.c',
|
||||
'rtadvd.tproj/if.c',
|
||||
'rtadvd.tproj/rrenum.c',
|
||||
'rtadvd.tproj/rtadvd.c',
|
||||
'rtadvd.tproj/rtadvd_logging.c',
|
||||
'rtadvd.tproj/timer.c',
|
||||
],
|
||||
)
|
||||
install_man(
|
||||
'rtadvd.tproj/rtadvd.8',
|
||||
'rtadvd.tproj/rtadvd.conf.5',
|
||||
)
|
||||
|
||||
executable(
|
||||
'rtsol',
|
||||
c_args : [
|
||||
|
||||
@@ -1,23 +1,19 @@
|
||||
{
|
||||
fetchFromGitHub,
|
||||
libpcap,
|
||||
libresolv,
|
||||
libutil,
|
||||
mkAppleDerivation,
|
||||
openssl,
|
||||
pkg-config,
|
||||
file_cmds,
|
||||
sourceRelease,
|
||||
stdenvNoCC,
|
||||
unifdef,
|
||||
xnuHeaders,
|
||||
}:
|
||||
|
||||
let
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
xnu = fetchFromGitHub {
|
||||
owner = "apple-oss-distributions";
|
||||
repo = "xnu";
|
||||
rev = "xnu-11417.121.6";
|
||||
hash = "sha256-o4tCuCAIgAYg/Li3wTs12mVWr5C/4vbwu1zi+kJ9d6w=";
|
||||
};
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "network_cmds-deps-private-headers";
|
||||
@@ -26,362 +22,131 @@ let
|
||||
|
||||
buildCommand = ''
|
||||
# Different strategies are needed to make private headers available to network_cmds:
|
||||
# - If the headers can be used as-is, copy them;
|
||||
# - If the required symbols are hidden behind a 'PRIVATE' define, `unifdef` is used to expose only those symbols
|
||||
# for that header. Processing the header avoids exposing unwanted private symbols and requiring more headers;
|
||||
# - If the symbol is hidden behind a kernel-related define, grep them out of the header. Otherwise,
|
||||
# the required headers can conflict with system-related headers and require many, many more headers be copied.
|
||||
# - If the headers are available in xnuHeaders, copy them; or
|
||||
# - If the headers are not included in the private headers build, copy them from the source.
|
||||
|
||||
install -D -t "$out/include" \
|
||||
'${xnu}/osfmk/kern/cs_blobs.h'
|
||||
'${xnuHeaders}/include/kern/cs_blobs.h'
|
||||
|
||||
install -D -t "$out/include/firehose" \
|
||||
'${xnu}/libkern/firehose/firehose_types_private.h' \
|
||||
'${xnu}/libkern/firehose/tracepoint_private.h'
|
||||
|
||||
for dir in arm i386 machine; do
|
||||
for dir in arm i386 kern machine; do
|
||||
mkdir -p "$out/include/$dir"
|
||||
for file in '${xnu}/osfmk/'$dir/*; do
|
||||
for file in '${xnuHeaders}/include/'$dir/*; do
|
||||
name=$(basename "$file")
|
||||
# Skip copying `endian.h` because it conflicts with the SDK, breaking the build on x86_64-darwin.
|
||||
test "$name" != endian.h && cp -r "$file" "$out/include/$dir/$name"
|
||||
done
|
||||
done
|
||||
|
||||
unifdef -x 1 -DKERNEL_PRIVATE -o "$out/include/arm/locks.h" '${xnu}/osfmk/arm/locks.h'
|
||||
unifdef -x 1 -DKERNEL_PRIVATE -o "$out/include/i386/locks.h" '${xnu}/osfmk/i386/locks.h'
|
||||
|
||||
install -D -t "$out/include/net" \
|
||||
'${xnu}/bsd/net/droptap.h' \
|
||||
'${xnu}/bsd/net/if_bond_internal.h' \
|
||||
'${xnu}/bsd/net/if_bond_var.h' \
|
||||
'${xnu}/bsd/net/if_fake_var.h' \
|
||||
'${xnu}/bsd/net/if_mib_private.h' \
|
||||
'${xnu}/bsd/net/if_var_private.h' \
|
||||
'${xnu}/bsd/net/if_vlan_var.h' \
|
||||
'${xnu}/bsd/net/lacp.h' \
|
||||
'${xnu}/bsd/net/net_perf.h'
|
||||
mkdir -p "$out/include/net/classq" "$out/include/net/pktsched"
|
||||
'${xnuHeaders}/include/net/bpf.h' \
|
||||
'${xnuHeaders}/include/net/bpf_private.h' \
|
||||
'${xnuHeaders}/include/net/content_filter.h' \
|
||||
'${xnuHeaders}/include/net/droptap.h' \
|
||||
'${xnuHeaders}/include/net/if.h' \
|
||||
'${xnuHeaders}/include/net/if_bond_internal.h' \
|
||||
'${xnuHeaders}/include/net/if_bond_var.h' \
|
||||
'${xnuHeaders}/include/net/if_bridgevar.h' \
|
||||
'${xnuHeaders}/include/net/if_fake_var.h' \
|
||||
'${xnuHeaders}/include/net/if_llreach.h' \
|
||||
'${xnuHeaders}/include/net/if_mib.h' \
|
||||
'${xnuHeaders}/include/net/if_mib_private.h' \
|
||||
'${xnuHeaders}/include/net/if_ports_used.h' \
|
||||
'${xnuHeaders}/include/net/if_private.h' \
|
||||
'${xnuHeaders}/include/net/if_var_private.h' \
|
||||
'${xnuHeaders}/include/net/if_vlan_var.h' \
|
||||
'${xnuHeaders}/include/net/lacp.h' \
|
||||
'${xnuHeaders}/include/net/net_api_stats.h' \
|
||||
'${xnuHeaders}/include/net/net_perf.h' \
|
||||
'${xnuHeaders}/include/net/network_agent.h' \
|
||||
'${xnuHeaders}/include/net/ntstat.h' \
|
||||
'${xnuHeaders}/include/net/packet_mangler.h' \
|
||||
'${xnuHeaders}/include/net/pktap.h' \
|
||||
'${xnuHeaders}/include/net/radix.h' \
|
||||
'${xnuHeaders}/include/net/route.h' \
|
||||
'${xnuHeaders}/include/net/route_private.h'
|
||||
|
||||
cat <<EOF > "$out/include/net/bpf.h"
|
||||
#pragma once
|
||||
#include_next <net/bpf.h>
|
||||
#include <net/if.h>
|
||||
$(sed -n \
|
||||
-e '/^#define BPF_D_/p' \
|
||||
-e '/^struct xbpf_d\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/net/bpf.h')
|
||||
EOF
|
||||
install -D -t "$out/include/net/classq" \
|
||||
'${xnuHeaders}/include/net/classq/classq.h' \
|
||||
'${xnuHeaders}/include/net/classq/if_classq.h'
|
||||
|
||||
# IFNET constants are defined as enums, so they have to be pre-processed and grepped from the file.
|
||||
cat <<EOF > "$out/include/net/if.h"
|
||||
#pragma once
|
||||
#include <uuid/uuid.h>
|
||||
$(sed \
|
||||
-e 's/^\s*\(IFNET_[^=]*\)=\s*\([^,]*\),*/#define \1\2/' \
|
||||
'${xnu}/bsd/net/if_private.h' | grep '^#define IFNET_')
|
||||
#include_next <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
typedef void* ifnet_t;
|
||||
#define ifreq ifreq_private
|
||||
$(sed -n \
|
||||
-e '/^#define IFEF_TXSTART/p' \
|
||||
-e '/^#define IFLPRF/p' \
|
||||
-e '/^#define IFNAMSIZ\s/p' \
|
||||
-e '/^#define IFRLOGF/p' \
|
||||
-e '/^#define IFRTYPE/p' \
|
||||
-e '/^#define IF_DESCSIZE\s/p' \
|
||||
-e '/^#define IF_NAMESIZE\s/p' \
|
||||
-e '/^#define NAT64_MAX_NUM_PREFIXES\s/p' \
|
||||
-e '/^#define ifr_fastlane_capable\s/p' \
|
||||
-e '/^#define ifr_fastlane_enabled\s/p' \
|
||||
-e '/^#define ifr_qosmarking_enabled\s/p' \
|
||||
-e '/^#define ifr_qosmarking_mode\s/p' \
|
||||
-e '/^struct if_agentidsreq\s*{/,/^};/p' \
|
||||
-e '/^struct if_clat46req\s*{/,/^};/p' \
|
||||
-e '/^struct if_descreq\s*{/,/^};/p' \
|
||||
-e '/^struct if_ipv6_address\s*{/,/^};/p' \
|
||||
-e '/^struct if_linkparamsreq\s*{/,/^};/p' \
|
||||
-e '/^struct if_qstatsreq\s*{/,/^};/p' \
|
||||
-e '/^struct if_nat64req\s*{/,/^};/p' \
|
||||
-e '/^struct if_nexusreq\s*{/,/^};/p' \
|
||||
-e '/^struct if_throttlereq\s*{/,/^};/p' \
|
||||
-e '/^struct ipv6_prefix\s*{/,/^};/p' \
|
||||
-e '/^struct ifreq\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/net/if_private.h')
|
||||
#undef ifreq
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/net/content_filter.h"
|
||||
#pragma once
|
||||
#include <uuid/uuid.h>
|
||||
#include <net/content_filter_impl.h>
|
||||
EOF
|
||||
install -D -t "$out/include/net/pktsched" \
|
||||
'${xnuHeaders}/include/net/pktsched/pktsched.h' \
|
||||
'${xnuHeaders}/include/net/pktsched/pktsched_fq_codel.h'
|
||||
|
||||
cat <<EOF > "$out/include/net/if_var.h"
|
||||
#pragma once
|
||||
#include <net/if_var_private.h>
|
||||
/* These aren’t defined in the headers in the XNU source */
|
||||
#define IF_NETEM_MODEL_IOD 2
|
||||
#define IF_NETEM_MODEL_FPD 3
|
||||
#include_next <net/if_var.h>
|
||||
#include <${xnuHeaders}/include/net/if_var.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/net/route.h"
|
||||
#pragma once
|
||||
#include_next <net/route.h>
|
||||
$(sed -n \
|
||||
-e '/^#define RTM_/p' \
|
||||
-e '/^struct rt_msghdr_ext\s*{/,/^};/p' \
|
||||
-e '/^struct rt_reach_info\s*{/,/^};/p' \
|
||||
-e '/^struct rtstat_64\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/net/route_private.h')
|
||||
EOF
|
||||
ln -s "$out/include/net/route.h" "$out/include/net/route_private.h"
|
||||
|
||||
install -D -t "$out/include/netinet" \
|
||||
'${xnu}/bsd/netinet/icmp6.h' \
|
||||
'${xnu}/bsd/netinet/ip_flowid.h'
|
||||
|
||||
cat <<EOF > "$out/include/netinet/in.h"
|
||||
#pragma once
|
||||
#include_next <netinet/in.h>
|
||||
$(sed -n \
|
||||
-e '/^#define _DSCP/p' \
|
||||
-e '/^#define IP_NO/p' \
|
||||
-e '/^union sockaddr_in_4_6\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/netinet/in_private.h')
|
||||
#include <uuid/uuid.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/netinet/tcp.h"
|
||||
#pragma once
|
||||
$(sed -n \
|
||||
-e '/^struct tcp_info\s*{/,/^};/p' \
|
||||
-e '/^struct tcp_conn_status\s*{/,/^};/p' \
|
||||
-e '/^typedef struct conninfo_tcp\s*{/,/} conninfo_tcp_t;/p' \
|
||||
'${xnu}/bsd/netinet/tcp_private.h')
|
||||
#include_next <netinet/tcp.h>
|
||||
EOF
|
||||
'${xnuHeaders}/include/netinet/icmp6.h' \
|
||||
'${xnuHeaders}/include/netinet/igmp_var.h' \
|
||||
'${xnuHeaders}/include/netinet/in.h' \
|
||||
'${xnuHeaders}/include/netinet/in_pcb.h' \
|
||||
'${xnuHeaders}/include/netinet/in_private.h' \
|
||||
'${xnuHeaders}/include/netinet/in_stat.h' \
|
||||
'${xnuHeaders}/include/netinet/ip_dummynet.h' \
|
||||
'${xnuHeaders}/include/netinet/ip_flowid.h' \
|
||||
'${xnuHeaders}/include/netinet/mptcp_var.h' \
|
||||
'${xnuHeaders}/include/netinet/tcp.h' \
|
||||
'${xnuHeaders}/include/netinet/tcp_private.h' \
|
||||
'${xnuHeaders}/include/netinet/tcp_var.h' \
|
||||
'${xnuHeaders}/include/netinet/udp_var.h'
|
||||
|
||||
install -D -t "$out/include/netinet6" \
|
||||
'${xnu}/bsd/netinet6/in6_pcb.h' \
|
||||
'${xnu}/bsd/netinet6/ip6_var.h'
|
||||
|
||||
cat <<EOF > "$out/include/netinet6/in6.h"
|
||||
#pragma once
|
||||
$(sed -n \
|
||||
-e '/^#define IPV6_/p' \
|
||||
'${xnu}/bsd/netinet6/in6_private.h')
|
||||
#include_next <netinet6/in6.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/netinet6/in6_var.h"
|
||||
#pragma once
|
||||
$(sed -n \
|
||||
-e '/^#define IN6_CGA/p' \
|
||||
-e '/^#define SIOCSETROUTERMODE_IN6\s/p' \
|
||||
-e '/^struct in6_cga_modifier\s*{/,/^};/p' \
|
||||
-e '/^struct in6_cga_nodecfg\s*{/,/^};/p' \
|
||||
-e '/^struct in6_cga_prepare\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/netinet6/in6_var.h')
|
||||
#include_next <netinet6/in6_var.h>
|
||||
EOF
|
||||
'${xnuHeaders}/include/netinet6/in6.h' \
|
||||
'${xnuHeaders}/include/netinet6/in6_private.h' \
|
||||
'${xnuHeaders}/include/netinet6/in6_var.h' \
|
||||
'${xnuHeaders}/include/netinet6/in6_pcb.h' \
|
||||
'${xnuHeaders}/include/netinet6/ip6_var.h' \
|
||||
'${xnuHeaders}/include/netinet6/mld6_var.h'
|
||||
|
||||
mkdir -p "$out/include/netinet6"
|
||||
cat <<EOF > "$out/include/netinet6/nd6.h"
|
||||
#pragma once
|
||||
$(sed -n \
|
||||
-e '/^#define ND6_IFF/p' \
|
||||
'${xnu}/bsd/netinet6/nd6.h')
|
||||
#include_next <netinet6/nd6.h>
|
||||
#include <net/if_dl.h> /* The private nd6.h depends on sockaddr_dl but fails to include if_dl.h. */
|
||||
#include <${xnuHeaders}/include/netinet6/nd6.h>
|
||||
EOF
|
||||
|
||||
install -D -t "$out/include/os" \
|
||||
'${xnu}/libkern/os/atomic_private.h' \
|
||||
'${xnu}/libkern/os/atomic_private_arch.h' \
|
||||
'${xnu}/libkern/os/atomic_private_impl.h' \
|
||||
'${xnuHeaders}/Library/Frameworks/Kernel.framework/PrivateHeaders/os/atomic_private.h' \
|
||||
'${xnuHeaders}/Library/Frameworks/Kernel.framework/PrivateHeaders/os/atomic_private_arch.h' \
|
||||
'${xnuHeaders}/Library/Frameworks/Kernel.framework/PrivateHeaders/os/atomic_private_impl.h' \
|
||||
'${xnu}/libkern/os/log_private.h'
|
||||
|
||||
declare -a privateHeaders=(
|
||||
net/classq/classq.h
|
||||
net/classq/if_classq.h
|
||||
net/if_bridgevar.h
|
||||
net/if_llreach.h
|
||||
net/if_mib.h
|
||||
net/if_ports_used.h
|
||||
net/net_api_stats.h
|
||||
net/network_agent.h
|
||||
net/ntstat.h
|
||||
net/packet_mangler.h
|
||||
net/pktap.h
|
||||
net/pktsched/pktsched.h
|
||||
net/pktsched/pktsched_fq_codel.h
|
||||
net/radix.h
|
||||
netinet/igmp_var.h
|
||||
netinet/in_pcb.h
|
||||
netinet/in_stat.h
|
||||
netinet/ip_dummynet.h
|
||||
netinet/mptcp_var.h
|
||||
netinet/tcp_var.h
|
||||
netinet6/mld6_var.h
|
||||
sys/mbuf.h
|
||||
)
|
||||
install -D -t "$out/include/skywalk" \
|
||||
'${xnuHeaders}/include/skywalk/os_channel.h' \
|
||||
'${xnuHeaders}/include/skywalk/os_channel_event.h' \
|
||||
'${xnuHeaders}/include/skywalk/os_nexus.h' \
|
||||
'${xnuHeaders}/include/skywalk/os_packet.h'
|
||||
|
||||
mkdir -p "$out/include/sys"
|
||||
|
||||
for header in "''${privateHeaders[@]}"; do
|
||||
unifdef -x 1 -DPRIVATE -o "$out/include/$header" '${xnu}/bsd/'$header
|
||||
done
|
||||
unifdef -x 1 -DPRIVATE -o "$out/include/net/content_filter_impl.h" '${xnu}/bsd/net/content_filter.h'
|
||||
|
||||
cat <<EOF > "$out/include/sys/kern_control.h"
|
||||
#pragma once
|
||||
$(sed -n \
|
||||
-e '/^#define MAX_KCTL_NAME\s/p' \
|
||||
-e '/^struct kctlstat\s*{/,/^};/p' \
|
||||
-e '/^struct xkctl_reg\s*{/,/^};/p' \
|
||||
-e '/^struct xkctlpcb\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/sys/kern_control.h')
|
||||
#include_next <sys/kern_control.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/sys/kern_event.h"
|
||||
#pragma once
|
||||
$(sed -n \
|
||||
-e '/^struct kevtstat\s*{/,/^};/p' \
|
||||
-e '/^struct xkevtpcb\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/sys/kern_event.h')
|
||||
#include_next <sys/kern_event.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/sys/socket.h"
|
||||
#pragma once
|
||||
#include <sys/param.h>
|
||||
#include <sys/_types/_socklen_t.h>
|
||||
$(sed -n \
|
||||
-e '/^typedef.*sae_associd_t/p' \
|
||||
-e '/^typedef.*sae_connid_t/p' \
|
||||
'${xnu}/bsd/sys/socket.h')
|
||||
$(sed -n \
|
||||
-e '/^#define AF_MULTIPATH\s/p' \
|
||||
-e '/^#define CIAUX_TCP\s/p' \
|
||||
-e '/^#define NET_RT_/p' \
|
||||
-e '/^#define SO_RECV/p' \
|
||||
-e '/^#define SO_TRAFFIC_CLASS\s/,/^#define SO_TC_MAX/p' \
|
||||
-e '/^struct so_aidreq\s*{/,/^};/p' \
|
||||
-e '/^struct so_cidreq\s*{/,/^};/p' \
|
||||
-e '/^struct so_cinforeq\s*{/,/^};/p' \
|
||||
-e '/^struct so_cordreq\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/sys/socket_private.h')
|
||||
#include_next <sys/socket.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/sys/socketvar.h"
|
||||
#pragma once
|
||||
$(sed -n \
|
||||
-e '/^#define SO_STATS_/p' \
|
||||
-e '/^#define SO_TC_STATS_MAX\s/p' \
|
||||
-e '/^#define XSO_/p' \
|
||||
-e '/^struct data_stats\s*{/,/^};/p' \
|
||||
-e '/^struct soextbkidlestat\s*{/,/^};/p' \
|
||||
-e '/^struct xsocket_n\s*{/,/^};/p' \
|
||||
-e '/^struct xsockbuf_n\s*{/,/^};/p' \
|
||||
-e '/^struct xsockstat_n\s*{/,/^};/p' \
|
||||
-e '/^typedef.*so_gen_t;/p' \
|
||||
'${xnu}/bsd/sys/socketvar.h')
|
||||
#include_next <sys/socketvar.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/sys/sockio.h"
|
||||
#pragma once
|
||||
#define ifreq ifreq_private
|
||||
$(sed -n \
|
||||
-e '/^#define SIOCGASSOCIDS\s/p' \
|
||||
-e '/^#define SIOCGCONNIDS\s/p' \
|
||||
-e '/^#define SIOCGCONNINFO\s/p' \
|
||||
-e '/^#define SIOCGIFAGENTDATA\s/p' \
|
||||
-e '/^#define SIOCGIFAGENTIDS\s/p' \
|
||||
-e '/^#define SIOCGIFCLAT46ADDR\s/p' \
|
||||
-e '/^#define SIOCGIFCONSTRAINED\s/p' \
|
||||
-e '/^#define SIOCGIFDELEGATE\s/p' \
|
||||
-e '/^#define SIOCGIFDESC\s/p' \
|
||||
-e '/^#define SIOCGIFEFLAGS\s/p' \
|
||||
-e '/^#define SIOCGIFGENERATIONID\s/p' \
|
||||
-e '/^#define SIOCGIFGETRTREFCNT\s/p' \
|
||||
-e '/^#define SIOCGIFINTERFACESTATE\s/p' \
|
||||
-e '/^#define SIOCGIFLINKPARAMS\s/p' \
|
||||
-e '/^#define SIOCGIFLINKQUALITYMETRIC\s/p' \
|
||||
-e '/^#define SIOCGIFLOG\s/p' \
|
||||
-e '/^#define SIOCGIFLOWPOWER\s/p' \
|
||||
-e '/^#define SIOCGIFMPKLOG\s/p' \
|
||||
-e '/^#define SIOCGIFNAT64PREFIX\s/p' \
|
||||
-e '/^#define SIOCGIFNEXUS\s/p' \
|
||||
-e '/^#define SIOCGIFQUEUESTATS\s/p' \
|
||||
-e '/^#define SIOCGIFTHROTTLE\s/p' \
|
||||
-e '/^#define SIOCGIFTIMESTAMPENABLED\s/p' \
|
||||
-e '/^#define SIOCGIFTYPE\s/p' \
|
||||
-e '/^#define SIOCGIFXFLAGS\s/p' \
|
||||
-e '/^#define SIOCGQOSMARKINGENABLED\s/p' \
|
||||
-e '/^#define SIOCGQOSMARKINGMODE\s/p' \
|
||||
-e '/^#define SIOCGSTARTDELAY\s/p' \
|
||||
-e '/^#define SIOCSECNMODE\s/p' \
|
||||
-e '/^#define SIOCSETROUTERMODE\s/p' \
|
||||
-e '/^#define SIOCSFASTLANECAPABLE\s/p' \
|
||||
-e '/^#define SIOCSFASTLEENABLED\s/p' \
|
||||
-e '/^#define SIOCSIF2KCL\s/p' \
|
||||
-e '/^#define SIOCSIFCONSTRAINED\s/p' \
|
||||
-e '/^#define SIOCSIFDESC\s/p' \
|
||||
-e '/^#define SIOCSIFDISABLEINPUT\s/p' \
|
||||
-e '/^#define SIOCSIFDISABLEOUTPUT\s/p' \
|
||||
-e '/^#define SIOCSIFEXPENSIVE\s/p' \
|
||||
-e '/^#define SIOCSIFINTERFACESTATE\s/p' \
|
||||
-e '/^#define SIOCSIFLINKPARAMS\s/p' \
|
||||
-e '/^#define SIOCSIFLOG\s/p' \
|
||||
-e '/^#define SIOCSIFLOWPOWER\s/p' \
|
||||
-e '/^#define SIOCSIFMARKWAKEPKT\s/p' \
|
||||
-e '/^#define SIOCSIFMPKLOG\s/p' \
|
||||
-e '/^#define SIOCSIFNOACKPRIO\s/p' \
|
||||
-e '/^#define SIOCSIFNOTRAFFICSHAPING\s/p' \
|
||||
-e '/^#define SIOCSIFPROBECONNECTIVITY\s/p' \
|
||||
-e '/^#define SIOCSIFSUBFAMILY\s/p' \
|
||||
-e '/^#define SIOCSIFTHROTTLE\s/p' \
|
||||
-e '/^#define SIOCSIFTIMESTAMPDISABLE\s/p' \
|
||||
-e '/^#define SIOCSIFTIMESTAMPENABLE\s/p' \
|
||||
-e '/^#define SIOCSQOSMARKINGENABLED\s/p' \
|
||||
-e '/^#define SIOCSQOSMARKINGMODE\s/p' \
|
||||
'${xnu}/bsd/sys/sockio_private.h')
|
||||
#undef ifreq
|
||||
#include_next <sys/sockio.h>
|
||||
EOF
|
||||
ln -s "$out/include/sys/sockio.h" "$out/include/sys/sockio_private.h"
|
||||
|
||||
cat <<EOF > "$out/include/sys/sys_domain.h"
|
||||
#pragma once
|
||||
$(sed -n \
|
||||
-e '/^#define AF_SYS/p' \
|
||||
-e '/^#define SYSPROTO/p' \
|
||||
-e '/^struct xsystmgen\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/sys/sys_domain.h')
|
||||
#include_next <sys/sys_domain.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/sys/syslimits.h"
|
||||
#pragma once
|
||||
$(grep '^#define LINE_MAX\s' '${xnu}/bsd/sys/syslimits.h')
|
||||
#include_next <sys/syslimits.h>
|
||||
EOF
|
||||
|
||||
cat <<EOF > "$out/include/sys/unpcb.h"
|
||||
#pragma once
|
||||
#include_next <sys/unpcb.h>
|
||||
#define KERNEL
|
||||
#ifdef KERNEL
|
||||
$(sed -n \
|
||||
-e '/^struct unpcb_compat\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/sys/unpcb.h')
|
||||
#undef KERNEL
|
||||
$(sed -n \
|
||||
-e '/^#define xu_addr/p' \
|
||||
-e '/^struct *xunpcb\(64\|_n\)_list_entry\s*{/,/^};/p' \
|
||||
-e '/^struct *xunpcb\(64\|_n\)\s*{/,/^};/p' \
|
||||
'${xnu}/bsd/sys/unpcb.h')
|
||||
install -D -t "$out/include/sys" \
|
||||
'${xnuHeaders}/include/sys/kern_control.h' \
|
||||
'${xnuHeaders}/include/sys/kern_control_private.h' \
|
||||
'${xnuHeaders}/include/sys/kern_event.h' \
|
||||
'${xnuHeaders}/include/sys/kern_event_private.h' \
|
||||
'${xnuHeaders}/include/sys/mbuf.h' \
|
||||
'${xnuHeaders}/include/sys/socket.h' \
|
||||
'${xnuHeaders}/include/sys/socket_private.h' \
|
||||
'${xnuHeaders}/include/sys/socketvar.h' \
|
||||
'${xnuHeaders}/include/sys/sockio.h' \
|
||||
'${xnuHeaders}/include/sys/sockio_private.h' \
|
||||
'${xnuHeaders}/include/sys/sys_domain.h' \
|
||||
'${xnuHeaders}/include/sys/sys_domain_private.h' \
|
||||
'${xnuHeaders}/include/sys/syslimits.h' \
|
||||
'${xnuHeaders}/include/sys/unpcb.h' \
|
||||
'${xnuHeaders}/include/sys/vsock_private.h'
|
||||
'';
|
||||
};
|
||||
in
|
||||
@@ -393,31 +158,24 @@ mkAppleDerivation {
|
||||
"man"
|
||||
];
|
||||
|
||||
xcodeHash = "sha256-1RJ/s9vnfCGY2Vc2XH8dg8rB+0lwK2IBC7zIx4PuXWQ=";
|
||||
xcodeHash = "sha256-OIYpa71CvCOL8Ln7s8wUqWj9yD9lEeRifkj5gPvD78Y=";
|
||||
|
||||
patches = [
|
||||
# Some private headers depend on corecrypto, which we can’t use.
|
||||
# Use the headers from the ld64 port, which delegates to OpenSSL.
|
||||
./patches/0007-Add-OpenSSL-based-CoreCrypto-digest-functions.patch
|
||||
./patches/0001-Add-OpenSSL-based-CoreCrypto-digest-functions.patch
|
||||
# Fix unknown type name 'pid_t' error
|
||||
./patches/0002-Add-missing-sys-types_h.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# Fix invalid pointer conversion error from trying to pass `NULL` to a `size_t`.
|
||||
substituteInPlace ndp.tproj/ndp.c --replace-fail 'NULL, NULL);' 'NULL, 0);'
|
||||
substituteInPlace ndp.tproj/ndp.c \
|
||||
--replace-fail 'NULL, NULL);' 'NULL, 0);'
|
||||
|
||||
# Use private struct ifreq instead of the one defined in the system header.
|
||||
substituteInPlace ifconfig.tproj/ifconfig.c \
|
||||
--replace-fail $'struct\tifreq' 'struct ifreq' \
|
||||
--replace-fail 'struct ifreq' 'struct ifreq_private'
|
||||
|
||||
substituteInPlace ifconfig.tproj/ifvlan.c \
|
||||
--replace-fail 'struct ifreq' 'struct ifreq_private'
|
||||
|
||||
substituteInPlace ifconfig.tproj/ifconfig.h \
|
||||
--replace-fail 'struct ifreq' 'struct ifreq_private'
|
||||
|
||||
substituteInPlace netstat.tproj/if.c \
|
||||
--replace-fail 'struct ifreq' 'struct ifreq_private'
|
||||
# Fix invalid pointer conversion error. These parameters seem to be in the wrong order …
|
||||
substituteInPlace netstat.tproj/main.c \
|
||||
--replace-fail 'tp->pr_name, tp->pr_protocol' 'tp->pr_protocol, tp->pr_name'
|
||||
'';
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = "-I${privateHeaders}/include";
|
||||
|
||||
+8
-8
@@ -1,10 +1,10 @@
|
||||
From 36767c7345161baf0ab125f95c8557f8e24f25db Mon Sep 17 00:00:00 2001
|
||||
From dc917b5729184398268cdfdc4ac180fb0306c1cc Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Tue, 9 Apr 2024 19:28:17 -0400
|
||||
Subject: [PATCH 7/8] Add OpenSSL-based CoreCrypto digest functions
|
||||
Date: Fri, 10 Apr 2026 23:08:32 -0400
|
||||
Subject: [PATCH] Add-OpenSSL-based-CoreCrypto-digest-functions
|
||||
|
||||
---
|
||||
compat/CommonCrypto/CommonDigest.h | 6 +++
|
||||
compat/CommonCrypto/CommonDigest.h | 5 +++
|
||||
compat/CommonCrypto/CommonDigestSPI.c | 21 +++++++++++
|
||||
compat/CommonCrypto/CommonDigestSPI.h | 14 +++++++
|
||||
compat/corecrypto/api_defines.h | 10 +++++
|
||||
@@ -14,7 +14,7 @@ Subject: [PATCH 7/8] Add OpenSSL-based CoreCrypto digest functions
|
||||
compat/corecrypto/ccsha1.c | 22 +++++++++++
|
||||
compat/corecrypto/ccsha1.h | 9 +++++
|
||||
compat/corecrypto/ccsha2.c | 22 +++++++++++
|
||||
compat/corecrypto/ccsha2.h | 9 +++++
|
||||
compat/corecrypto/ccsha2.h | 10 +++++
|
||||
11 files changed, 212 insertions(+)
|
||||
create mode 100644 compat/CommonCrypto/CommonDigest.h
|
||||
create mode 100644 compat/CommonCrypto/CommonDigestSPI.c
|
||||
@@ -30,7 +30,7 @@ Subject: [PATCH 7/8] Add OpenSSL-based CoreCrypto digest functions
|
||||
|
||||
diff --git a/compat/CommonCrypto/CommonDigest.h b/compat/CommonCrypto/CommonDigest.h
|
||||
new file mode 100644
|
||||
index 0000000..a60eba7
|
||||
index 0000000..531bb05
|
||||
--- /dev/null
|
||||
+++ b/compat/CommonCrypto/CommonDigest.h
|
||||
@@ -0,0 +1,5 @@
|
||||
@@ -292,7 +292,7 @@ index 0000000..6504503
|
||||
+}
|
||||
diff --git a/compat/corecrypto/ccsha2.h b/compat/corecrypto/ccsha2.h
|
||||
new file mode 100644
|
||||
index 0000000..9f30e03
|
||||
index 0000000..7e889b7
|
||||
--- /dev/null
|
||||
+++ b/compat/corecrypto/ccsha2.h
|
||||
@@ -0,0 +1,10 @@
|
||||
@@ -307,5 +307,5 @@ index 0000000..9f30e03
|
||||
+
|
||||
+EXTERN_C const struct ccdigest_info* ccsha256_di(void);
|
||||
--
|
||||
2.44.1
|
||||
2.51.2
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
From 0135015e24a2f52e225be84f47c2c910b51774b7 Mon Sep 17 00:00:00 2001
|
||||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||||
Date: Fri, 10 Apr 2026 23:07:35 -0400
|
||||
Subject: [PATCH] Add-missing-sys-types_h
|
||||
|
||||
---
|
||||
network_cmds_lib/network_cmds_lib.h | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/network_cmds_lib/network_cmds_lib.h b/network_cmds_lib/network_cmds_lib.h
|
||||
index d04e8fd..aee4c64 100644
|
||||
--- a/network_cmds_lib/network_cmds_lib.h
|
||||
+++ b/network_cmds_lib/network_cmds_lib.h
|
||||
@@ -29,6 +29,8 @@
|
||||
#ifndef network_cmds_lib_h
|
||||
#define network_cmds_lib_h
|
||||
|
||||
+#include <sys/types.h>
|
||||
+
|
||||
/*
|
||||
* @function clean_non_printable
|
||||
* @discussion Modifies a string to replace the non-printable ASCII characters
|
||||
--
|
||||
2.51.2
|
||||
|
||||
@@ -1,23 +1,11 @@
|
||||
{
|
||||
mkAppleDerivation,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
stdenvNoCC,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
iokitUser = bootstrapSourceRelease "IOKitUser";
|
||||
iokitUser = sourceRelease "IOKitUser";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "file_cmds-deps-private-headers";
|
||||
|
||||
@@ -9,24 +9,12 @@
|
||||
libxo,
|
||||
mkAppleDerivation,
|
||||
pkg-config,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
# nohup requires vproc_priv.h from launchd
|
||||
launchd = bootstrapSourceRelease "launchd";
|
||||
launchd = sourceRelease "launchd";
|
||||
in
|
||||
mkAppleDerivation {
|
||||
releaseName = "shell_cmds";
|
||||
|
||||
@@ -186,10 +186,7 @@ executable(
|
||||
build_by_default : false,
|
||||
install : false,
|
||||
sources : [
|
||||
'gcore/convert.c',
|
||||
'gcore/corefile.c',
|
||||
'gcore/dyld.c',
|
||||
'gcore/dyld_shared_cache.c',
|
||||
'gcore/gcore_framework.m',
|
||||
'gcore/main.c',
|
||||
'gcore/notes.c',
|
||||
|
||||
@@ -2,36 +2,23 @@
|
||||
lib,
|
||||
AvailabilityVersions,
|
||||
apple-sdk,
|
||||
fetchFromGitHub,
|
||||
libutil,
|
||||
mkAppleDerivation,
|
||||
ncurses,
|
||||
openpam,
|
||||
pkg-config,
|
||||
sourceRelease,
|
||||
stdenv,
|
||||
stdenvNoCC,
|
||||
}:
|
||||
|
||||
let
|
||||
# TODO(reckenrode): Remove on after the `sourceRelease` migration has been merged.
|
||||
# system_cmds does not actually require private libdispatch APIs.
|
||||
libdispatch = sourceRelease "libdispatch"; # Has to match the version of the SDK
|
||||
|
||||
Libc = sourceRelease "Libc";
|
||||
libmalloc = sourceRelease "libmalloc";
|
||||
OpenDirectory = sourceRelease "OpenDirectory";
|
||||
|
||||
libplatform = sourceRelease "libplatform";
|
||||
|
||||
# Needed for `posix_spawn_secflag_options`
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
xnu = fetchFromGitHub {
|
||||
owner = "apple-oss-distributions";
|
||||
repo = "xnu";
|
||||
rev = "xnu-11417.121.6";
|
||||
hash = "sha256-o4tCuCAIgAYg/Li3wTs12mVWr5C/4vbwu1zi+kJ9d6w=";
|
||||
};
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "system_cmds-deps-private-headers";
|
||||
@@ -63,11 +50,6 @@ let
|
||||
'${xnu}/libsyscall/wrappers/spawn/spawn_private.h'
|
||||
touch "$out/include/btm.h"
|
||||
|
||||
cp -r '${libdispatch}/private' "$out/include/dispatch"
|
||||
# Work around availability headers compatibility issue when building with an unprocessed SDK.
|
||||
chmod -R u+w "$out/include/dispatch"
|
||||
find "$out/include/dispatch" -name '*.h' -exec sed -i {} -e 's/, bridgeos([^)]*)//g' \;
|
||||
|
||||
install -D -t "$out/include/System/i386" \
|
||||
'${xnu}/osfmk/i386/cpu_capabilities.h'
|
||||
|
||||
@@ -119,7 +101,7 @@ in
|
||||
mkAppleDerivation {
|
||||
releaseName = "system_cmds";
|
||||
|
||||
xcodeHash = "sha256-gdtn3zNIneZKy6+X0mQ51CFVLNM6JQYLbd/lotG5/Tw=";
|
||||
xcodeHash = "sha256-/JFbwYJA2sx3F+ihyxemZX/LK3y5HLZSbQFDdvctzmQ=";
|
||||
|
||||
patches = [
|
||||
# `posix_spawnattr_set_use_sec_transition_shims_np` is only available on macOS 15.2 or newer.
|
||||
@@ -139,6 +121,10 @@ mkAppleDerivation {
|
||||
substituteInPlace $src \
|
||||
--replace-fail 'printw(tbuf)' 'printw("%s", tbuf);'
|
||||
done
|
||||
|
||||
# The libdispatch APIs it uses aren’t actually private. They’re available in the public headers.
|
||||
substituteInPlace memory_pressure/memory_pressure.c \
|
||||
--replace-fail '<dispatch/private.h>' '<dispatch/dispatch.h>'
|
||||
'';
|
||||
|
||||
preConfigure = ''
|
||||
|
||||
@@ -9,30 +9,18 @@
|
||||
ncurses,
|
||||
pkg-config,
|
||||
shell_cmds,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
stdenvNoCC,
|
||||
xz,
|
||||
zlib,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
Libc = bootstrapSourceRelease "Libc";
|
||||
Libc = sourceRelease "Libc";
|
||||
|
||||
CommonCrypto = bootstrapSourceRelease "CommonCrypto";
|
||||
libplatform = bootstrapSourceRelease "libplatform";
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
CommonCrypto = sourceRelease "CommonCrypto";
|
||||
libplatform = sourceRelease "libplatform";
|
||||
xnu = sourceRelease "xnu";
|
||||
|
||||
privateHeaders = stdenvNoCC.mkDerivation {
|
||||
name = "text_cmds-deps-private-headers";
|
||||
|
||||
@@ -3,23 +3,11 @@
|
||||
mkAppleDerivation,
|
||||
ncurses,
|
||||
pkg-config,
|
||||
pkgs,
|
||||
sourceRelease,
|
||||
}:
|
||||
|
||||
let
|
||||
f =
|
||||
pkgs: prev:
|
||||
if
|
||||
!pkgs.stdenv.hostPlatform.isDarwin
|
||||
|| pkgs.stdenv.name == "bootstrap-stage0-stdenv-darwin"
|
||||
|| !(pkgs.stdenv ? __bootPackages)
|
||||
then
|
||||
prev.darwin.sourceRelease
|
||||
else
|
||||
f pkgs.stdenv.__bootPackages pkgs;
|
||||
bootstrapSourceRelease = f pkgs pkgs;
|
||||
# TODO(reckenrode): Use `sourceRelease` after migration has been merged and all releases updated to the same version.
|
||||
xnu = bootstrapSourceRelease "xnu";
|
||||
xnu = sourceRelease "xnu";
|
||||
in
|
||||
mkAppleDerivation {
|
||||
releaseName = "top";
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
{
|
||||
lib,
|
||||
AvailabilityVersions,
|
||||
apple-sdk,
|
||||
bison,
|
||||
bootstrap_cmds,
|
||||
buildPackages,
|
||||
flex,
|
||||
gnum4,
|
||||
mkAppleDerivation,
|
||||
perl,
|
||||
python3,
|
||||
stdenv,
|
||||
unifdef,
|
||||
}:
|
||||
|
||||
mkAppleDerivation {
|
||||
pname = "xnuHeaders";
|
||||
releaseName = "xnu";
|
||||
|
||||
postPatch = ''
|
||||
rm bsd/sys/make_symbol_aliasing.sh
|
||||
substitute ${buildPackages.darwin.AvailabilityVersions}/libexec/make_symbol_aliasing.sh bsd/sys/make_symbol_aliasing.sh \
|
||||
--replace-fail '--threshold $SDKROOT' ""
|
||||
chmod a+x bsd/sys/make_symbol_aliasing.sh
|
||||
|
||||
substituteInPlace Makefile \
|
||||
--replace-fail "/bin/" "" \
|
||||
--replace-fail "MAKEJOBS := " '# MAKEJOBS := '
|
||||
|
||||
substituteInPlace makedefs/MakeInc.cmd \
|
||||
--replace-fail "/usr/bin/" "" \
|
||||
--replace-fail "/bin/" ""
|
||||
|
||||
substituteInPlace makedefs/MakeInc.def \
|
||||
--replace-fail "-c -S -m" "-c -m" \
|
||||
--replace-fail '-mno-implicit-sme' ""
|
||||
|
||||
substituteInPlace makedefs/MakeInc.top \
|
||||
--replace-fail "MEMORY_SIZE := " 'MEMORY_SIZE := 1073741824 # '
|
||||
|
||||
# iig is closed-sourced, we don't have it
|
||||
# create an empty file to the header instead
|
||||
# this line becomes: echo "" > $@; echo --header ...
|
||||
substituteInPlace iokit/DriverKit/Makefile \
|
||||
--replace-fail '--def $<' '> $@; echo'
|
||||
|
||||
patchShebangs .
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
AvailabilityVersions
|
||||
bootstrap_cmds
|
||||
bison
|
||||
flex
|
||||
gnum4
|
||||
unifdef
|
||||
perl
|
||||
python3
|
||||
];
|
||||
|
||||
env = {
|
||||
ARCHS = stdenv.hostPlatform.darwinArch;
|
||||
ARCH_CONFIGS = stdenv.hostPlatform.darwinArch;
|
||||
PLATFORM = "MacOSX";
|
||||
RC_DARWIN_KERNEL_VERSION = "25.3.0";
|
||||
|
||||
DSTROOT = placeholder "out";
|
||||
|
||||
SDKROOT_RESOLVED = apple-sdk.sdkroot;
|
||||
SDKVERSION = stdenv.hostPlatform.darwinMinVersion;
|
||||
|
||||
CTFCONVERT = "echo";
|
||||
CTFINSERT = "echo";
|
||||
CTFMERGE = "echo";
|
||||
DSYMUTIL = "dsymutil";
|
||||
IIG = "echo";
|
||||
LIBTOOL = "echo";
|
||||
LIPO = "echo";
|
||||
MIG = "mig";
|
||||
MIGCOM = "${lib.getBin buildPackages.darwin.bootstrap_cmds}/libexec/migcom";
|
||||
NMEDIT = "echo";
|
||||
UNIFDEF = "unifdef";
|
||||
|
||||
HOST_SDKROOT_RESOLVED = buildPackages.apple-sdk.sdkroot;
|
||||
HOST_OS_VERSION = buildPackages.stdenv.hostPlatform.darwinMinVersion;
|
||||
|
||||
HOST_BISON = "bison";
|
||||
HOST_CC = lib.getExe' buildPackages.clangStdenv.cc "${buildPackages.clangStdenv.cc.targetPrefix}clang";
|
||||
HOST_CODESIGN = "echo";
|
||||
HOST_CODESIGN_ALLOCATE = "echo";
|
||||
HOST_FLEX = "flex";
|
||||
HOST_GM4 = "m4";
|
||||
};
|
||||
|
||||
buildFlags = [ "exporthdrs" ];
|
||||
installTargets = [ "installhdrs" ];
|
||||
|
||||
# Remove public headers. `xnuHeaders` is meant to provide private headers needed to build packages.
|
||||
# If you need public headers, use the correct SDK for the version you need.
|
||||
postInstall = ''
|
||||
mv "$out/System/Library" "$out"
|
||||
rm -rf "$out/System" "$out/usr"
|
||||
|
||||
for framework in "$out/Library/Frameworks"/*; do
|
||||
rm -rf "$framework/Versions/$ver/Headers" "$framework/Headers"
|
||||
|
||||
if [ ! -L "$framework/Versions/Current" ]; then
|
||||
ver=$(ls -r "$framework/Versions" | head -n 1)
|
||||
ln -s "$framework/Versions/$ver" "$framework/Versions/Current"
|
||||
fi
|
||||
|
||||
ln -s "$framework/Versions/Current/PrivateHeaders" "$framework/PrivateHeaders"
|
||||
done
|
||||
|
||||
# Set up the default `include` folder to include the private system headers plus availability headers.
|
||||
mkdir -p "$out/include/sys"
|
||||
gen-headers ${lib.getVersion apple-sdk} "$out"
|
||||
|
||||
for x in "$out/Library/Frameworks/System.framework/PrivateHeaders"/*; do
|
||||
name=$(basename "$x")
|
||||
if [ "$name" = "os" ] || [ "$name" = "sys" ]; then
|
||||
for y in "$x"/*; do
|
||||
dest="$out/include/$name/$(basename "$y")"
|
||||
if [ ! -e "$dest" ]; then ln -s "$y" "$out/include/$name/$(basename "$y")"; fi
|
||||
done
|
||||
else
|
||||
ln -s "$x" "$out/include/$(basename "$x")"
|
||||
fi
|
||||
done
|
||||
'';
|
||||
}
|
||||
@@ -1,131 +1,131 @@
|
||||
{
|
||||
"AvailabilityVersions": {
|
||||
"hash": "sha256-eQ46qHk4AuHA+hRZq1IG2UtvZr/X2vtlOvi6hnG+FyA=",
|
||||
"version": "151"
|
||||
"hash": "sha256-WcRJx/dt4DdEZ+lQBGgLwRYv1zlSwyNeKUTtuKH1fzE=",
|
||||
"version": "155"
|
||||
},
|
||||
"CarbonHeaders": {
|
||||
"hash": "sha256-nIPXnLr21yVnpBhx9K5q3l/nPARA6JL/dED08MeyhP8=",
|
||||
"version": "18.1"
|
||||
},
|
||||
"CommonCrypto": {
|
||||
"hash": "sha256-/VoOR9wJuKnmGE1CWGGXxX8SpmALHnEooNTa3QM+ITc=",
|
||||
"version": "600028.100.1"
|
||||
"hash": "sha256-+qAwL6+s7di9cX/qXtapLkjCFoDuZaSYltRJEG4qekM=",
|
||||
"version": "600035"
|
||||
},
|
||||
"Csu": {
|
||||
"hash": "sha256-l8RI8aiin7ovZuoDh54thDmd/b502w+dtjN5ZoISZBg=",
|
||||
"version": "88"
|
||||
},
|
||||
"ICU": {
|
||||
"hash": "sha256-dIgrTjHcQm8dy2Ku5wNIHuPjHfoV+48TM0PNDDn6ZPk=",
|
||||
"version": "76104.4"
|
||||
"hash": "sha256-qtv+IUEjdY5I87wDEIO9cWFAh1WmnIDVIzIyyL9NTd8=",
|
||||
"version": "76142.3.1.1"
|
||||
},
|
||||
"IOAudioFamily": {
|
||||
"hash": "sha256-VSk3jvsITJugtL67Qt0m4qJ879i7Fj6B/NGBFVCwpiU=",
|
||||
"version": "540.3"
|
||||
"hash": "sha256-A3iiAjjP29VdjMj40tLS5Q/ni4qeh9bBpnmNzeG2pIY=",
|
||||
"version": "700.2"
|
||||
},
|
||||
"IOBDStorageFamily": {
|
||||
"hash": "sha256-UgLMsQBe1QLzlbScmPmASBN7VH4YBmNOUX2CEDezjmE=",
|
||||
"version": "22"
|
||||
"hash": "sha256-OcQUJ3nEfrpvWX/npnedJ4PECIGWFSLiM0PKoiH911w=",
|
||||
"version": "26"
|
||||
},
|
||||
"IOCDStorageFamily": {
|
||||
"hash": "sha256-p/2qM5zjXFDRb/DISpEHxQEdvmuLlRGt/Ygc71Yu2rI=",
|
||||
"version": "61"
|
||||
"version": "62"
|
||||
},
|
||||
"IODVDStorageFamily": {
|
||||
"hash": "sha256-1Sa8aZBGNtqJBNHva+YXxET6Wcdm2PgVrTzYT/8qrN4=",
|
||||
"version": "45"
|
||||
"version": "46"
|
||||
},
|
||||
"IOFWDVComponents": {
|
||||
"hash": "sha256-WkfkWnzRupEh20U7vjsTta89clhus6GTkOpXQWXw/bM=",
|
||||
"version": "208"
|
||||
},
|
||||
"IOFireWireAVC": {
|
||||
"hash": "sha256-IUytBKhhCgg0vtI+7q8d5kxpOUgO3tQD7TMy++jrorc=",
|
||||
"version": "431"
|
||||
"hash": "sha256-qR9lSTa7PN5Z9Nis4tfuXlcZGMIU48dete/NPD0UBbE=",
|
||||
"version": "436"
|
||||
},
|
||||
"IOFireWireFamily": {
|
||||
"hash": "sha256-W0KOF4hkA7kFOnL1ThAeFU/YlhFVqoqk9uzGjcBppX8=",
|
||||
"version": "487"
|
||||
"hash": "sha256-hmErAXjLWIelqJaCrB8J4IiIxyB7S6EHFY+AY9YhmKQ=",
|
||||
"version": "492"
|
||||
},
|
||||
"IOFireWireSBP2": {
|
||||
"hash": "sha256-bItnRQIaGUxMyiU0q+4N8e5+jYiDEOUPmsrKhBFXvok=",
|
||||
"version": "445"
|
||||
"hash": "sha256-Xk+PDnUaO9q46nQwHwTKf/QXtGclfs0wTWiUbcV7e4s=",
|
||||
"version": "454"
|
||||
},
|
||||
"IOFireWireSerialBusProtocolTransport": {
|
||||
"hash": "sha256-P7egeaD9SSa+YyrIRzM44gILKbIL7vezXK3M6q3MBOI=",
|
||||
"version": "260"
|
||||
"hash": "sha256-cM/VFhVWNVwdJYk+mme0UYttQd7eJwd7Hlo7KNRyHY0=",
|
||||
"version": "262"
|
||||
},
|
||||
"IOGraphics": {
|
||||
"hash": "sha256-Ag37fd3tZJLXLVq1yzHOCWGOYYfwwTkC8hnvNaTEaWg=",
|
||||
"version": "598"
|
||||
"hash": "sha256-iysZE42mOKZbFxSZBNspaBTCRKEKK38DFGBxZWQxZxI=",
|
||||
"version": "599"
|
||||
},
|
||||
"IOHIDFamily": {
|
||||
"hash": "sha256-fmYTJsquAOBwzsgRmqPyjSJJi1hGcfnMmqLIcTe8W1s=",
|
||||
"version": "2031.100.16"
|
||||
"hash": "sha256-EJg5lL5uuFCzeOjKDeNZCRYlinwt4WDci0Lr8rJ4Q9k=",
|
||||
"version": "2222.80.22"
|
||||
},
|
||||
"IOKitTools": {
|
||||
"hash": "sha256-Oknsvzn4nv77WU7f0WPS446iwR2BM2q4iw46r/qctAE=",
|
||||
"version": "125"
|
||||
},
|
||||
"IOKitUser": {
|
||||
"hash": "sha256-1bqRiLvyr2GQfbWwhXHXXIOtIka9YDw5GbKV6bd2k4k=",
|
||||
"version": "100076.101.1"
|
||||
"hash": "sha256-bT6CIKd4/Ea17jWd74FWvz5dsmdyDRGU+D5/VydAjrA=",
|
||||
"version": "100222.80.4"
|
||||
},
|
||||
"IONetworkingFamily": {
|
||||
"hash": "sha256-J3cLeWKrQ8ypIaqgwRH9eU5JbjEDBVoezj3a2Lvwu5k=",
|
||||
"version": "177"
|
||||
"hash": "sha256-ZF5ML41Y1l1liQn32qTkcl4mMvx9Xdizb9VgvTzVTL4=",
|
||||
"version": "186"
|
||||
},
|
||||
"IOSerialFamily": {
|
||||
"hash": "sha256-wVS4QTx6MBOS0VrwyCZ3s5Usezwaf8rWzmNnfdDTXTU=",
|
||||
"version": "93"
|
||||
},
|
||||
"IOStorageFamily": {
|
||||
"hash": "sha256-cllpJX11c3CX8zEYdOT2TC63sx7NUAHh33yRHhrG2Ro=",
|
||||
"version": "315"
|
||||
"hash": "sha256-5oUSyzMxniNHG7rPkuxb31v4QcOmXNCriI3Jku2VOTY=",
|
||||
"version": "333.40.1"
|
||||
},
|
||||
"IOUSBFamily": {
|
||||
"hash": "sha256-Z0E3TfKP49toYo1Fo9kElRap8CZ+mVDHy5RIexgJTpA=",
|
||||
"version": "630.4.5"
|
||||
},
|
||||
"Libc": {
|
||||
"hash": "sha256-fxBM4KbPwQNVEJl7PCKP+1nUk9Oce/O2+0lVBxyngew=",
|
||||
"version": "1592.100.35"
|
||||
"hash": "sha256-3r3IFwONIg+4Oe99IRJ4jvyevZRmIuFmjVL+JMrfw/M=",
|
||||
"version": "1725.40.4"
|
||||
},
|
||||
"Libinfo": {
|
||||
"hash": "sha256-zZr6Mmou8Q+G6/wS+k0k7R+XirB94TNCUGS5dhi96ZE=",
|
||||
"version": "583.0.1"
|
||||
"hash": "sha256-4InBEPi0n2EMo/8mIBib1Im4iTKRcRJ4IlAcLCigVGk=",
|
||||
"version": "600"
|
||||
},
|
||||
"Libm": {
|
||||
"hash": "sha256-p4BndAag9d0XSMYWQ+c4myGv5qXbKx5E1VghudSbpTk=",
|
||||
"version": "2026"
|
||||
},
|
||||
"Libnotify": {
|
||||
"hash": "sha256-7X+6S3C7ZOTXJUeDXOOg5EmoZyLZvtE06x3Is0TGgSU=",
|
||||
"version": "317.100.2"
|
||||
"hash": "sha256-p8cJZlBYOFmI1NDHXGYjgcv8z9Ldc1amZuYlxxJfeVY=",
|
||||
"version": "344.0.1"
|
||||
},
|
||||
"Librpcsvc": {
|
||||
"hash": "sha256-UWYdCQ9QsBqwM01bWr+igINAHSdSluB/FrOclC5AjTI=",
|
||||
"version": "31"
|
||||
},
|
||||
"Libsystem": {
|
||||
"hash": "sha256-HsItciWrwyXujQ2hwqzv0JKOkkuynXYIqejLAEPJbMc=",
|
||||
"version": "1345.100.2"
|
||||
"hash": "sha256-/NlSwPaoTVx+bl9hYsfz3C5MuLdqGv4vdAh0KDbDKmY=",
|
||||
"version": "1356"
|
||||
},
|
||||
"OpenDirectory": {
|
||||
"hash": "sha256-6fSl8PasCZSBfe0ftaePcBuSEO3syb6kK+mfDI6iR7A=",
|
||||
"version": "146"
|
||||
},
|
||||
"PowerManagement": {
|
||||
"hash": "sha256-ssg655SPT7gWnJWDaxambMKCopr+vLPYERW0IMKT0T8=",
|
||||
"version": "1754.140.4"
|
||||
"hash": "sha256-KqpAUjwqENbx3qPxhkK6OFARjBGSMEpaGz5ozo9vtSY=",
|
||||
"version": "1846.81.1"
|
||||
},
|
||||
"Security": {
|
||||
"hash": "sha256-NgTGbaw5JkpboDQpt1fSgUr9NYGS+bIOrEMQX7mLAME=",
|
||||
"version": "61123.100.169"
|
||||
"hash": "sha256-+Rt3+bwj7++u8Pm5V6QgIQUpugwcY2gjqkCWZ2xqGqw=",
|
||||
"version": "61901.80.25"
|
||||
},
|
||||
"adv_cmds": {
|
||||
"hash": "sha256-O+SB8sj3yqPv7GEBQQgvq+Y7kQRZI/i/UVa17J/OhZM=",
|
||||
"version": "235"
|
||||
"hash": "sha256-QSqEchXCBSUo6kpGb1FyCcrZx1RFfUP/9hoNbQK2lF8=",
|
||||
"version": "237"
|
||||
},
|
||||
"architecture": {
|
||||
"hash": "sha256-PRNUrhzSOrwmxSPkKmV0LV7yEIik65sdkfKdBqcwFhU=",
|
||||
@@ -140,116 +140,116 @@
|
||||
"version": "138"
|
||||
},
|
||||
"configd": {
|
||||
"hash": "sha256-+3xesYxqfsNjWCW3T87OA7+Z1hBqmGEh/I8kP8Ajbso=",
|
||||
"version": "1300.100.9"
|
||||
"hash": "sha256-OJhJocVQvIaulSK65z2URATB+NTnFdOXyunjcBGr08k=",
|
||||
"version": "1385.80.4"
|
||||
},
|
||||
"copyfile": {
|
||||
"hash": "sha256-hIHlY0prIFY0j8z0Hvlv2psrwLj41jYfKBM0KutLxew=",
|
||||
"version": "224"
|
||||
"hash": "sha256-I9uDi5BDQKa7mO3XpHxv0d6PiROW2ueZ3vGfrsG0OJo=",
|
||||
"version": "230.0.1.0.1"
|
||||
},
|
||||
"developer_cmds": {
|
||||
"hash": "sha256-jgQUjN9zmqi0/7XpqzbRsJjZIYeMrxXT1Zf3qi7+o+8=",
|
||||
"version": "83"
|
||||
"hash": "sha256-4DDyWuRbxpwDLkbfJIwYp6DKcEDByDiGUmsdOmwq5fI=",
|
||||
"version": "87"
|
||||
},
|
||||
"diskdev_cmds": {
|
||||
"hash": "sha256-TD/sJkzIquTgq1zP/B7eBArxeTcp1Lqa8e8cJ1jnkHU=",
|
||||
"version": "737.140.4"
|
||||
"hash": "sha256-WDedl0pv/AReA96Gh+v2MwoX+QGrekK7YXEGw3aWB5Q=",
|
||||
"version": "751.80.2"
|
||||
},
|
||||
"doc_cmds": {
|
||||
"hash": "sha256-nnwKXKKjgJXcLCArD38Dme2L1WyR1U0rwn7zI+NCftw=",
|
||||
"version": "69"
|
||||
},
|
||||
"dtrace": {
|
||||
"hash": "sha256-04Q35rCKnM5Csv5poFJKpK0VplWq4hvy251/Cb2Kl80=",
|
||||
"version": "401.100.3"
|
||||
"hash": "sha256-5HpH6Cg8vWWzOX5ADD//izKDvqGnzV05Giju8lmGeyA=",
|
||||
"version": "413"
|
||||
},
|
||||
"dyld": {
|
||||
"hash": "sha256-pbpSD5OeSMOcMJFAd7kyLINPROjqsafsCSphVGyIPyg=",
|
||||
"version": "1286.10"
|
||||
"hash": "sha256-rvWFiQVLJKqL0hOL2nRqwRkyPc/OvGnL0GEBymq7Fio=",
|
||||
"version": "1340"
|
||||
},
|
||||
"eap8021x": {
|
||||
"hash": "sha256-Ky6KSlJhyX1NRufGhVBcp+ZFmqYrAxwC/5QvJhC2PhU=",
|
||||
"version": "354.100.3"
|
||||
"hash": "sha256-To9CIsN0oXRmtUjPojXYfUmaoOOdrNbq3AYwghxzoQs=",
|
||||
"version": "368.60.2"
|
||||
},
|
||||
"file_cmds": {
|
||||
"hash": "sha256-Rf/XA6uEaj7Wps2s8Oc/OhQVBjz8XiqJlj+cxjiQfQU=",
|
||||
"version": "457.140.3"
|
||||
"hash": "sha256-1hdTjg1Nf31gAhwjQEhRZQhaqayC8x7PGHAwZ1aEIm8=",
|
||||
"version": "475"
|
||||
},
|
||||
"hfs": {
|
||||
"hash": "sha256-+YUVOttZU7C8I14CC6t3ZH2KxAjjTA2nB0y5bPgLxZM=",
|
||||
"version": "650.0.2"
|
||||
"hash": "sha256-WqXzEVvveaOvTbVN/HzKdDxeHYmxEfLhV3WjO/S+u1E=",
|
||||
"version": "704.60.4"
|
||||
},
|
||||
"launchd": {
|
||||
"hash": "sha256-8mW9bnuHmRXCx9py8Wy28C5b2QPICW0rlAps5njYa00=",
|
||||
"version": "842.1.4"
|
||||
},
|
||||
"libclosure": {
|
||||
"hash": "sha256-M/jnIHzKYvdFCO0tJ1JXiD/UcZtJhLIoulaCQQUbn30=",
|
||||
"version": "90"
|
||||
"hash": "sha256-pvwfcbeEJmTEPdt6/lgVswiabLRG+sMN6VT5FwG7C4Q=",
|
||||
"version": "96"
|
||||
},
|
||||
"libdispatch": {
|
||||
"hash": "sha256-igqIA5DMVHjG30WMHZZpYY7LRM9hZyMWItD+UxeTehY=",
|
||||
"version": "1477.100.9"
|
||||
"hash": "sha256-L0+Ho9dAlMXVpqFEGIcIMsJc0gULckRulUImNEZe5MU=",
|
||||
"version": "1542.0.4"
|
||||
},
|
||||
"libffi": {
|
||||
"hash": "sha256-xHefZVsZg9kUXV0t/HLdjPkkD/hn/4bvdRVJ4PsQLeM=",
|
||||
"version": "40"
|
||||
},
|
||||
"libiconv": {
|
||||
"hash": "sha256-50DC6LePtvdAh9FLa/esiwCUmYDxKofN6hCiv9+dmgQ=",
|
||||
"version": "109.100.2"
|
||||
"hash": "sha256-MboAwJvpO0ix7XsAuKUUxipv8ecxD2OjDgD5bQbygr8=",
|
||||
"version": "113"
|
||||
},
|
||||
"libmalloc": {
|
||||
"hash": "sha256-Sh4/z7lGWRMldOPURkP5vLOAb5Ou6AUsVJEWz9wk9hI=",
|
||||
"version": "521.100.59"
|
||||
"hash": "sha256-FYWPf6UwDfmWtde2xW1EuBfygv43bvzGncKEMUHY3Qc=",
|
||||
"version": "792.80.2"
|
||||
},
|
||||
"libpcap": {
|
||||
"hash": "sha256-DqINoombdui5N6lNHcZ07c7LrVum4f8fFK89ymdCd0c=",
|
||||
"version": "140"
|
||||
"hash": "sha256-G7CL3pCCmxOoZ+ouA+xfOeDgvLcT9AN9zyrx+cL2Ge4=",
|
||||
"version": "144"
|
||||
},
|
||||
"libplatform": {
|
||||
"hash": "sha256-gojt3sWOr7XO2yYI/B1CmNLTPFieSfoNtlOgQahOCok=",
|
||||
"version": "316.100.10"
|
||||
"hash": "sha256-m1g1suIbEA4g7vWEKYR9x+g0aaXSjvR0IRy4jCU+y0w=",
|
||||
"version": "359.80.2"
|
||||
},
|
||||
"libpthread": {
|
||||
"hash": "sha256-phjfN8+IU8ibPsflR6LktnSi3giy89ghI+cFyrhiQNo=",
|
||||
"version": "519.101.1"
|
||||
"hash": "sha256-3Xoe0gYZ6RbMZqzsAG8ynnFb3cqypFYImPNYA5H6P9s=",
|
||||
"version": "539.80.3"
|
||||
},
|
||||
"libresolv": {
|
||||
"hash": "sha256-GtPVlL1mD58um5hOFd3HQKQ7pqutBe9jZKgQw8pOkPE=",
|
||||
"version": "91"
|
||||
"hash": "sha256-SDdF7foz8DFUXmXEznwusNMkXFHrPkdLWQM8xfxb0gc=",
|
||||
"version": "93"
|
||||
},
|
||||
"libutil": {
|
||||
"hash": "sha256-tUsl22Z0HUVSkSoohFXkhicNFCW+RARvpTS0q6yaQFk=",
|
||||
"version": "72"
|
||||
"hash": "sha256-64+1CIRpYBon7skJRKdaXcxucPh9GrhAbUERhL2PLXA=",
|
||||
"version": "73"
|
||||
},
|
||||
"mDNSResponder": {
|
||||
"hash": "sha256-0ECbWeMnIRTsi03BeBEe5boyR/84JJPbxzPQze8hHSA=",
|
||||
"version": "2200.100.94.0.2"
|
||||
"hash": "sha256-Wa6IM6qz/gjO1GwER7KkPEiknEJbkntA2Q92Bc/YMoY=",
|
||||
"version": "2881.80.4.0.1"
|
||||
},
|
||||
"mail_cmds": {
|
||||
"hash": "sha256-ET1nga9nwgBtN7fuvsPs1yqe5OhQ62PVl7LxqbsAPqU=",
|
||||
"version": "38.0.1"
|
||||
"hash": "sha256-peoaHopJaYDqyE4TGfLx7W1K2KsFZmHLWr8Er/HpA90=",
|
||||
"version": "41"
|
||||
},
|
||||
"misc_cmds": {
|
||||
"hash": "sha256-04uBS16nNrg73Fqh4Obev7nQDjTTlY4f5+pEv3i0FIU=",
|
||||
"version": "45"
|
||||
},
|
||||
"network_cmds": {
|
||||
"hash": "sha256-sfZX6aA8mspfRKARIYFXX+bmlLHDoi485HQOvbRNP1Y=",
|
||||
"version": "705.100.5"
|
||||
"hash": "sha256-WlO668xfWOJk9QkTDJBqBVfXK52yg2Ofdjcdk6pQvIo=",
|
||||
"version": "730.80.3"
|
||||
},
|
||||
"objc4": {
|
||||
"hash": "sha256-eUVSpbyTEOMEdHoxSv6lZIZwB+cW/YWIaTZTcHgGOjo=",
|
||||
"version": "912.3"
|
||||
"hash": "sha256-imgOe9mr5HnvTAupIEj1UwS7tbmk3coqNf5BQgI32lE=",
|
||||
"version": "951.1"
|
||||
},
|
||||
"patch_cmds": {
|
||||
"hash": "sha256-fDY2NOT3DnU5pm06cHSs+JJcA/EFP8Lxjg7sErUerJ0=",
|
||||
"version": "72"
|
||||
},
|
||||
"ppp": {
|
||||
"hash": "sha256-8+QUA79sHf85yvGSPE9qCmGsrZDT3NZnbgZVroJw/Hg=",
|
||||
"version": "1016"
|
||||
"hash": "sha256-N8e3BvyxTvb+mAhNHuCWVGqEyEE89G2zNQDL/mro+X0=",
|
||||
"version": "1023"
|
||||
},
|
||||
"remote_cmds": {
|
||||
"hash": "sha256-8c/NgQZ+K6jJ3aoYK78/BsEkM1gmRS+9z0437+SvcCw=",
|
||||
@@ -257,26 +257,26 @@
|
||||
},
|
||||
"removefile": {
|
||||
"hash": "sha256-Z5UD0mk/s80CQB0PZWDzSl2JWXmnVmwUvlNb28+hR3k=",
|
||||
"version": "81"
|
||||
"version": "84"
|
||||
},
|
||||
"shell_cmds": {
|
||||
"hash": "sha256-hoMssbZCrmzyJTgEAzOS4L7DhY9z/yXIcvHRhL6W5qc=",
|
||||
"version": "326"
|
||||
},
|
||||
"system_cmds": {
|
||||
"hash": "sha256-mEo+v0m+aP42XHHwibGKPkT55JFYLTOD5YT5IYQ8Hr0=",
|
||||
"version": "1026.140.2"
|
||||
"hash": "sha256-OYLCu2pPe10apZEK5kgINcEvxRFFPYquPzcRNkvtJKI=",
|
||||
"version": "1039"
|
||||
},
|
||||
"text_cmds": {
|
||||
"hash": "sha256-5BBH/v1mJpExz65VDX6oh3dFCz49E+JMqJxkO96Y/xo=",
|
||||
"version": "195"
|
||||
"hash": "sha256-SDH74Pwy/kPiApisuUFBrDVQ7swCsinMK7zkpm82rnw=",
|
||||
"version": "197"
|
||||
},
|
||||
"top": {
|
||||
"hash": "sha256-e+k/jE49BMZZ24ge9JCa2ct5f1og6ewWb6U5ZMWdIEc=",
|
||||
"version": "139.40.2"
|
||||
"hash": "sha256-F+P7yRQw4qa73JmQrMVgy3lVQRDBrFDy9kkOUJ135ys=",
|
||||
"version": "144"
|
||||
},
|
||||
"xnu": {
|
||||
"hash": "sha256-j5Ep1RX5DTJqTGszrF4d/JtzUqZ6nA6XoExqcIQ0RVQ=",
|
||||
"version": "10063.101.15"
|
||||
"hash": "sha256-ci4Rsa1nRpS9qYBUxnaQokrtBzApGF/kQXugGusb9ok=",
|
||||
"version": "12377.81.4"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user