feat!: configure through shipyard-cmake; one locator, not two - #5
Merged
Merged
Conversation
The shipyard pkg no longer writes the CMake user package registry, and
MavericksShipyardConfig.cmake now refuses any cmake but shipyard-cmake. Two
things in this repo depended on the registry, and every cmake invocation had to
move.
build/msc.sh is replaced wholesale by shipyard's canonical template (conventions
check 17 compares it byte for byte): $SHIPYARD_SCRIPTS in CI, else ask
shipyard-cmake where find_package(MavericksShipyard) lands.
build/versions.sh carried a SECOND locator -- _mav_shared_scripts(), with its own
$MAVERICKS_SHARED_SCRIPTS override, its own registry read and its own sibling-
checkout guess -- which re-resolved SHIPYARD_SCRIPTS after build/lib.sh had
already sourced msc.sh. It is deleted; there is one locator now. No behaviour is
lost: the `|| true` around it only ever looked tolerant, because lib.sh -> msc.sh
had already hard-failed a line earlier if shipyard was missing.
Ten call sites move to shipyard-cmake: four in release.yml (both updater
configures and both --build calls), one in build/build-cross.sh, two in
build/build-native.sh, and the two `build it: cmake --build ...` recipes that
build/package-{cross,native}-pkg.sh print when the updater is absent. Those last
two are the ones a gate cannot see -- they sit behind a bare "(" that conventions
check 18 deliberately skips -- and they hand a user a command that the refusal
would reject, against a CMakeLists.txt that does find_package(MavericksShipyard).
native-bootstrap/ is a declared deviation rather than a conversion, with the
reason in INGREDIENTS.md: it bootstraps from nothing on a stock 10.9 box, builds
its own cmake 3.19.8 into toolchains/tools/bin and puts that first on PATH, and
its stages configure LLVM -- never this repo -- with exactly that pinned cmake.
BREAKING CHANGE: builds now require the shipyard pkg (it provides
/usr/local/bin/shipyard-cmake). Do not merge until shipyard has landed bc3082a.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTxFde2TJMmp5p64DhvDSK
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of the 14-repo shipyard-cmake flag day.
Do not merge until shipyard has landed bc3082a. Until then
shipyard-cmakeexists on no runner, so this PR's own CI is expected to fail at the first configure. That red is the merge-order hold, not a defect.What changed
build/msc.shreplaced wholesale by shipyard's canonical template (conventions check 17 compares it byte for byte). Verifiedbyte-identical.build/versions.shcarried a second locator the plan did not anticipate:_mav_shared_scripts(), with its own$MAVERICKS_SHARED_SCRIPTSoverride, its own~/.cmake/packagesread and its own sibling-checkout guess, re-resolvingSHIPYARD_SCRIPTSafterbuild/lib.shhad already sourcedmsc.sh. Deleted. Nothing is lost: the|| truearound it only looked tolerant, becauselib.sh->msc.shalready hard-failed a line earlier when shipyard was missing.shipyard-cmake: 4 inrelease.yml(both updater configures and both--builds), 1 inbuild/build-cross.sh, 2 inbuild/build-native.sh, and the 2build it: cmake --build ...recipes printed bybuild/package-{cross,native}-pkg.sh.The two the gate cannot see
build/package-cross-pkg.sh:49andbuild/package-native-pkg.sh:46print a build recipe from inside(build it: ...). Check 18 deliberately treats a bare(as not command position, so both were invisible to it — and both hand a user a plaincmake --build build/updater --target ClangUpdateragainst a root that doesfind_package(MavericksShipyard REQUIRED), which the refusal rejects. Found by sweeping every tracked file, not just the gate's subset.native-bootstrap is a deviation, not a conversion
native-bootstrap/build.shbootstraps a whole toolchain from nothing on a stock 10.9 box:build_tools()compiles cmake 3.19.8 intotoolchains/tools/bin(the newest the 10.9 libc++ can build) and prepends it toPATH, and stages A–C configure LLVM 3.9.1/6.0.1/14.0.6 with exactly that one. Writingshipyard-cmakethere would swap a different cmake for the pinned one and demand the pkg on a box that by construction has nothing. None of those configures a shipyard consumer, so the runtime refusal never fires there either. Declared inINGREDIENTS.mdunder Conformance deviations, with a revisit trigger.Verification
check-family-conventions.sh(fromshipyard-cmake-collapsed): 13 failures -> ok, exit 0.git ls-files: only the three declarednative-bootstraplines remain.check-shell-portability.sh,check-comments.sh,sh -non every tracked*.sh, all three workflows parse as YAML.. build/versions.shproven on both paths: straight through with$SHIPYARD_SCRIPTSset, and failing loudly (not silently continuing) without it.install@v1's default mode already putsshipyard-cmakeonPATH.🤖 Generated with Claude Code
https://claude.ai/code/session_01GTxFde2TJMmp5p64DhvDSK