darwin.sourceRelease: 14.4/15.4/15.6 -> 26.3 (#511211)

This commit is contained in:
Randy Eckenrode
2026-04-26 12:32:29 +00:00
committed by GitHub
38 changed files with 675 additions and 1011 deletions
@@ -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"
@@ -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 cant 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 isnt 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 arent 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 cant 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";
@@ -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
@@ -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 arent actually private. Theyre 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"
}
}