Text API (TAPI) files to support a pure build environment on macOS in nixpkgs.
nix run -f scripts -c generate-all -s "$MACOS_10_12_SYSROOT" -o stubs/10.12
These are derived from nixpkgs and stored in this repository for consistency. To update:
nix run -f scripts -c update-framework-names -o scripts/framework-names.json
Some libraries frameworks contain a re-exports
section that exposes
other libraries and frameworks by their absolute path. When generating
stubs, the scripts recuse through all re-exports
entries.
In regular usage of detached tbd stubs, the linker will use the
syslibroot
option to find libraries by their absolute
names1. Nixpkgs does not have a single SDK to pass as the
syslibroot
, but passes individual frameworks as required. To support
re-exports, the absolute paths are rewritten to the corresponding nix
store paths of the stubs.
For libSystem the re-exports are trivial enough that it's sufficient
to replace /usr/lib/libsystem
with $out/lib/libsystem
, which is
part of the libSystem definition in nixpkgs.
For frameworks there are links between many frameworks. This is
handled by a two step process. In the definition of these stubs, the
framework path of re-exports is rewritten from
/System/Library/SomeFramework.framework
to
@SomeFramework@/Library/SomeFramework.framework
. When assembling the
frameworks for darwin.apple_sdk.frameworks
, nixpkgs uses
substituteInPlace --subst-var-by SomeFramework /nix/store/...
to
provide dependencies. To ensure correctness, the builder checks that
each re-exported file actually exists.