Skip to content

feat!: configure through shipyard-cmake; one locator, not two - #5

Merged
schmonz merged 1 commit into
mainfrom
shipyard-cmake-flagday
Sep 16, 2026
Merged

schmonz merged 1 commit into
mainfrom
shipyard-cmake-flagday

Conversation

@schmonz

@schmonz schmonz commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Part of the 14-repo shipyard-cmake flag day.

Do not merge until shipyard has landed bc3082a. Until then shipyard-cmake exists 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.sh replaced wholesale by shipyard's canonical template (conventions check 17 compares it byte for byte). Verified byte-identical.
  • build/versions.sh carried a second locator the plan did not anticipate: _mav_shared_scripts(), with its own $MAVERICKS_SHARED_SCRIPTS override, its own ~/.cmake/packages read and its own sibling-checkout guess, re-resolving SHIPYARD_SCRIPTS after build/lib.sh had already sourced msc.sh. Deleted. Nothing is lost: the || true around it only looked tolerant, because lib.sh -> msc.sh already hard-failed a line earlier when shipyard was missing.
  • Ten call sites now use shipyard-cmake: 4 in release.yml (both updater configures and both --builds), 1 in build/build-cross.sh, 2 in build/build-native.sh, and the 2 build it: cmake --build ... recipes printed by build/package-{cross,native}-pkg.sh.

The two the gate cannot see

build/package-cross-pkg.sh:49 and build/package-native-pkg.sh:46 print 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 plain cmake --build build/updater --target ClangUpdater against a root that does find_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.sh bootstraps a whole toolchain from nothing on a stock 10.9 box: build_tools() compiles cmake 3.19.8 into toolchains/tools/bin (the newest the 10.9 libc++ can build) and prepends it to PATH, and stages A–C configure LLVM 3.9.1/6.0.1/14.0.6 with exactly that one. Writing shipyard-cmake there 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 in INGREDIENTS.md under Conformance deviations, with a revisit trigger.

Verification

  • check-family-conventions.sh (from shipyard-cmake-collapsed): 13 failures -> ok, exit 0.
  • Whole-tree sweep with check 18's own regex over git ls-files: only the three declared native-bootstrap lines remain.
  • No registry reference survives anywhere in the tree.
  • Also green: check-shell-portability.sh, check-comments.sh, sh -n on every tracked *.sh, all three workflows parse as YAML.
  • . build/versions.sh proven on both paths: straight through with $SHIPYARD_SCRIPTS set, and failing loudly (not silently continuing) without it.
  • No workflow step was added; install@v1's default mode already puts shipyard-cmake on PATH.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GTxFde2TJMmp5p64DhvDSK

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
@schmonz schmonz closed this Sep 16, 2026
@schmonz schmonz reopened this Sep 16, 2026
@schmonz schmonz closed this Sep 16, 2026
@schmonz schmonz reopened this Sep 16, 2026
@schmonz schmonz closed this Sep 16, 2026
@schmonz schmonz reopened this Sep 16, 2026
@schmonz
schmonz merged commit 435fa66 into main Sep 16, 2026
30 of 34 checks passed
@schmonz
schmonz deleted the shipyard-cmake-flagday branch September 16, 2026 20:17
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