Skip to content

add self-contained Homebrew bottle packages for macOS - #98

Merged
mitchellh merged 1 commit into
mainfrom
push-yumrqkzqqxyq
Apr 21, 2026
Merged

mitchellh merged 1 commit into
mainfrom
push-yumrqkzqqxyq

Conversation

@mitchellh

Copy link
Copy Markdown
Owner

Add packages.brew.<version> exposing Zig builds from Homebrew official binary bottles. These bottles carry macOS-specific patches that the upstream ziglang.org tarballs do not include.

This includes a script to update but I'll just do this manually for new Zig releases since its infrequent and I don't fully trust the script.

Add `packages.brew.<version>` exposing Zig builds from Homebrew
official binary bottles. These bottles carry macOS-specific patches
that the upstream ziglang.org tarballs do not include.

Homebrew bottles are dynamically linked against Homebrew-provided
LLVM, LLD, and zstd. The bottles ship with @@HOMEBREW_PREFIX@@
relocation markers in their Mach-O load commands instead of real
paths, expecting Homebrew to rewrite them at install time. To make
the derivations fully self-contained without requiring a Homebrew
installation at runtime, the builder downloads the dependency
bottles too, then walks the dylib closure starting from the zig
binary using otool -L. Each referenced non-system dylib is copied
into $out/lib/brew/, its install name is rewritten to @rpath/, and
the zig binary gets an rpath of @executable_path/../lib/brew.
Bundled dylibs get @loader_path so they find each other. Every
patched Mach-O is re-signed with an ad-hoc signature since
install_name_tool invalidates the original code signature, and
macOS kills unsigned arm64 binaries.
@mitchellh
mitchellh merged commit 14fe971 into main Apr 21, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant