Skip to content

Update the macOS workflow - #28

Merged
dvandyk merged 1 commit into
masterfrom
updates
Aug 9, 2026
Merged

dvandyk merged 1 commit into
masterfrom
updates

Conversation

@dvandyk

@dvandyk dvandyk commented Aug 9, 2026

Copy link
Copy Markdown
Member

b2 install does not implement DESTDIR the way autotools/CMake do: every libboost_*.dylib ships with a bare (or, for libboost_filesystem, an @rpath) install name and bare/@rpath intra-bundle dependency references, with no LC_RPATH anywhere to resolve them -- confirmed by parsing the published tarball's Mach-O load commands directly. yaml-cpp has the same @rpath defect; GSL/gslcblas/FFTW3 already got their own install names right. None of this is loadable without DYLD_LIBRARY_PATH, which SIP strips on GitHub's runners whenever a protected binary (/bin/sh, /usr/bin/python3, ...) is exec'd -- not a usable workaround.

fix-install-names.bash normalises every dylib's install name and every intra-bundle dependency reference to its final absolute ${PREFIX}/lib/ path (applied uniformly to all four dependencies, not just Boost, since the same loop covers them), re-signing ad-hoc after each install_name_tool rewrite invalidates the signature. verify-bundle.bash then re-checks the assembled tarball end-to-end before it is pushed -- absolute install names, no bare/@rpath/DESTDIR references, no LC_RPATH, valid signatures -- so a future dependency bump can't reintroduce this silently.

b2 install does not implement DESTDIR the way autotools/CMake do: every
libboost_*.dylib ships with a bare (or, for libboost_filesystem, an
@rpath) install name and bare/@rpath intra-bundle dependency
references, with no LC_RPATH anywhere to resolve them -- confirmed by
parsing the published tarball's Mach-O load commands directly.
yaml-cpp has the same @rpath defect; GSL/gslcblas/FFTW3 already got
their own install names right. None of this is loadable without
DYLD_LIBRARY_PATH, which SIP strips on GitHub's runners whenever a
protected binary (/bin/sh, /usr/bin/python3, ...) is exec'd -- not a
usable workaround.

fix-install-names.bash normalises every dylib's install name and every
intra-bundle dependency reference to its final absolute
${PREFIX}/lib/<name> path (applied uniformly to all four dependencies,
not just Boost, since the same loop covers them), re-signing ad-hoc
after each install_name_tool rewrite invalidates the signature.
verify-bundle.bash then re-checks the assembled tarball end-to-end
before it is pushed -- absolute install names, no bare/@rpath/DESTDIR
references, no LC_RPATH, valid signatures -- so a future dependency
bump can't reintroduce this silently.

Both scripts were exercised against a harness standing in for
otool/install_name_tool/codesign (seeded from the real tarball's load
commands), not against the real tools on real macOS hardware.
@dvandyk dvandyk self-assigned this Aug 9, 2026
@dvandyk
dvandyk merged commit ed9e703 into master Aug 9, 2026
1 check passed
@dvandyk
dvandyk deleted the updates branch August 9, 2026 15:14
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