Skip to content

feat!: configure through shipyard-cmake; one locator, not three - #3

Open
schmonz wants to merge 1 commit into
mainfrom
shipyard-cmake-flagday
Open

schmonz wants to merge 1 commit into
mainfrom
shipyard-cmake-flagday

Conversation

@schmonz

@schmonz schmonz commented Sep 14, 2026

Copy link
Copy Markdown
Collaborator

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

  • msc.sh (repo root — check 17 accepts build/msc.sh or a root msc.sh, and this repo's lives at the root) replaced wholesale by shipyard's canonical template. Verified byte-identical.
  • Two more locators, which the survey did not anticipate. package.sh:26-35 and scripts/guard.sh:14-23 each carried their own four-entry fallback chain, and both named $HOME/.local/share/cmake/MavericksShipyard/scripts — the prefix a cmake --install used to produce, which the pkg does not create. Neither read ~/.cmake/packages, so neither was flagged by check 16 or by a registry sweep; both were about to resolve nothing off CI. package.sh's chain also overwrote the $SHIPYARD that msc.sh had set eleven lines earlier. Both now use $SHIPYARD.
  • scripts/guard.sh keeps its exit 4 for the case that is genuinely its own — shipyard found, assert_binary_compatible.sh missing from it — which is a different failure from msc.sh's "no shipyard at all" (exit 1). Both were proven by running them.
  • Four call sites now use shipyard-cmake: the updater configure and --build in release.yml, build.sh:143's stdlib configure, and the build it: cmake --build build/updater recipe package.sh prints when the updater is absent.
  • build.sh's prerequisites line named plain cmake; it now names the shipyard pkg. Two release.yml comments named the user package registry and ${MavericksShipyard_SCRIPTS} (a variable this PR removes); they now name the pkg and $SHIPYARD_SCRIPTS.

The one the gate cannot see

package.sh:55 prints its recipe from inside (... build it: ...). Check 18 deliberately treats a bare ( as not command position, so it was invisible to the gate. Found by sweeping every tracked file, not just the gate's subset.

Verification

  • check-family-conventions.sh (from shipyard-cmake-collapsed): 4 failures -> ok, exit 0.
  • Whole-tree sweep with check 18's own regex over git ls-files: clean, no exceptions needed. A wider sweep leaves only prose (MANIFEST's "key cmake flags", two build.sh comments about CMake build trees).
  • No registry reference, no .local/share/cmake path and no MavericksShipyard_SCRIPTS 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.
  • scripts/guard.sh run three ways: with $SHIPYARD_SCRIPTS set it reaches the shared guard; with an empty shipyard it exits 4 with its own message; with no shipyard it exits 1 from msc.sh.
  • 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.

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.

It was not the only locator. package.sh and scripts/guard.sh each carried their
own four-entry fallback chain, and both named
$HOME/.local/share/cmake/MavericksShipyard/scripts -- the prefix a `cmake
--install` used to produce, which the pkg does not create. Neither read
~/.cmake/packages, so neither looked like a registry reader; both were about to
resolve nothing off CI. package.sh's chain also OVERWROTE the $SHIPYARD msc.sh
had already set eleven lines earlier. Both now use $SHIPYARD.

guard.sh keeps its exit 4 for the case that is genuinely its own -- shipyard
found, assert_binary_compatible.sh missing from it -- which is distinct from
msc.sh's "no shipyard at all".

Four call sites move to shipyard-cmake: the updater configure and --build in
release.yml, build.sh's stdlib configure, and the `build it: cmake --build
build/updater` recipe package.sh prints when the updater is absent. That last one
sits behind a bare "(" that conventions check 18 deliberately skips, so no gate
would have reported it. build.sh's prerequisites line named plain cmake; it now
names the shipyard pkg.

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
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