Skip to content

Commit cbc6343

Browse files
committed
FEATURE-ci-macos-make-fixture: preserve canonical make frontend identity
Use POSIX exec launchers for named fixture aliases so Apple's tool frontend retains its canonical invocation name. Preserve arguments, selected MAKE values and the deliberately unusable default.\n\nVerified actual native RED, corrected-fixture counterfactual RED against c2d5c62 (3 expected failures), current-driver GREEN (3 pass), 22 preservation checks, launcher argument/status and syntax checks. Native repaired macOS confirmation remains CI owned; production driver is unchanged.
1 parent 9b93ebe commit cbc6343

2 files changed

Lines changed: 85 additions & 2 deletions

File tree

‎scripts/test-v3-installed-consumer.py‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import json
77
import os
88
from pathlib import Path
9+
import shlex
910
import shutil
1011
import signal
1112
import socket
@@ -76,8 +77,12 @@ def exercise_selection(self, selection, *, broken_default=False, ambient_make=No
7677
bad_make = tools / 'unselected-make'
7778
bad_make.write_text('#!/bin/sh\necho unselected-make >&2\nexit 1\n')
7879
bad_make.chmod(0o755)
79-
(tools / 'make').symlink_to(bad_make if broken_default else self.gnu_make)
80-
(tools / 'gmake').symlink_to(self.gnu_make)
80+
# Apple's developer-tool frontend dispatches by its invoked name.
81+
for name, target in (('make', bad_make if broken_default else self.gnu_make),
82+
('gmake', self.gnu_make)):
83+
launcher = tools / name
84+
launcher.write_text('#!/bin/sh\nexec ' + shlex.quote(str(target)) + ' "$@"\n')
85+
launcher.chmod(0o755)
8186
args = SimpleNamespace(make=selection, compiler=shutil.which('c++'), cc=shutil.which('cc'),
8287
jobs=1, prerequisite_prefix=[], pkg_config_dir=[], provider_prefix=root,
8388
toolchain_prefix=None, optimized=False)
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# FEATURE-ci-macos-make-fixture: preserve make frontend identity in fixture aliases
2+
3+
Status: In Progress — implementation ready; caller validation/finalization pending.
4+
Base: local `v3` at `9b93ebe8eb355b6da6099f8ed7764cda8c23bb90`.
5+
6+
Native macOS package job `120582231719` and archive Darwin job `120582524154`
7+
both fail the new named `gmake` regression during real configure. Their
8+
61-test fixture suites report one failure and three skips. Canonical GNU make
9+
version detection and absolute/default selections succeed; renaming Apple's
10+
developer-tool frontend through a `gmake` symlink makes its name-sensitive
11+
dispatch fail to locate `gmake`.
12+
13+
The fixture now creates executable POSIX launchers for its `make` and `gmake`
14+
PATH entries. Each launcher execs the shell-quoted original tool path with
15+
`"$@"`, preserving the tool's invocation identity and argument boundaries.
16+
The broken default still executes the deliberately failing unselected tool.
17+
Selected MAKE values, ambient conflicts, real configure/dependency generation,
18+
compile/install/check behavior and assertions remain intact. The production
19+
driver, including both selected-MAKE environment assignments, is byte-identical
20+
to the base. No dependency, platform skip, workflow or production change.
21+
22+
Action items:
23+
24+
- [x] Read the plan, literal journal, both actual native failure logs and complete fixture before editing.
25+
- [x] Create the isolated Groundwork worktree from the exact local v3 base; preserve unrelated work.
26+
- [x] Record the actual native regression as RED before the minimal launcher repair.
27+
- [x] Replace renamed frontend symlinks with canonical-tool exec launchers.
28+
- [x] With the corrected fixture, run all three real Autoconf cases against the original pre-MAKE-fix driver as counterfactual RED.
29+
- [x] Run the same three cases against the current unchanged driver as GREEN; retain actual dependency and exact MAKE receipts.
30+
- [x] Verify relevant preservation tests, launcher syntax/argument/status behavior, Python syntax and diff checks.
31+
- [x] Retain raw evidence, executed sources, source bindings, versions and verification limits.
32+
- [ ] Caller: complete required Groundwork validation and local finalization into `v3`.
33+
- [ ] CI / v3 PR: confirm repaired fixture on native macOS package/archive jobs.
34+
35+
Verification: 22 existing installed-shell, ps and matrix contracts pass before
36+
and after the repair. The corrected fixture with the exact original driver
37+
from `c2d5c626f456f218676a6d840c8ed1442aa28438` fails all three cases in real
38+
`config.status` dependency-fragment bootstrapping (expected RED). With the
39+
current driver all three pass in 7.083s: actual configure, compile and install
40+
succeed, then the deliberate check failure reaches the required marker.
41+
`.deps/probe.Po` includes `probe.h`; build, install and check receipts retain
42+
exactly `gmake`, `/usr/bin/gmake` or `make` for their respective selections.
43+
The named case still has an unusable PATH default; the absolute/default cases
44+
still override a conflicting inherited MAKE.
45+
46+
Both real valid launchers also execute a GNU make target containing spaces
47+
through `-f -`, preserve its output and propagate GNU make's exit2 from the
48+
deliberate recipe exit17. All captured shell launchers pass `/bin/sh -n`;
49+
`python3 -m py_compile scripts/test-v3-installed-consumer.py` and
50+
`git diff --check` pass. No Python linter is configured in repository guidance.
51+
No full baseline, broad retry, unrelated repair or old runtime diagnosis was
52+
performed. Native repaired macOS proof remains incomplete and CI/v3-PR owned;
53+
local Linux proof does not claim Apple frontend execution.
54+
55+
The main repository's ignored `.debug/ci-macos-make-fixture-fdno1_wr/` retains
56+
the literal journal, native logs, before/after preservation logs, source-bound
57+
`baseline-actual-configure/` and `fixed-actual-configure/` projects/commands,
58+
launcher contract output and versions. The evidence harness reuses the prior
59+
task's actual execution setup, imports the registered test class and executes
60+
the original driver blob in its normal module with the original file binding.
61+
It does not model configure or the macOS frontend.
62+
63+
SHA256 bindings: final fixture
64+
`88ca80f1759e5784534dd458da374814dc76b47652efc851e742877fced393a3`;
65+
original driver
66+
`61ef4487227c4196fbb7fb486e90b3bba255452e678ba47e8754ed8fa0383bc8`;
67+
unchanged current driver
68+
`6c565c7a7c3af16d46edc126638384fe15d81b8d7c36c098bb2661ec593dafb4`.
69+
70+
Project notes / task-executor memory: v3 uses Autotools/C++20; this test-only
71+
repair needs no provider/full library setup. Focused checks use
72+
`python3 scripts/test-v3-installed-consumer.py InstalledMakeTest InstalledShellTest InstalledShellPSTest MatrixTest`
73+
and Python compilation. The real fixture uses `autoreconf --install --force`,
74+
Autoconf2.71, Automake1.16.5, GNU Make4.3, GCC13.3.0 and Python3.12.3 locally.
75+
Its existing script registration/distribution remains sufficient. Groundwork's
76+
identity helper resolves the worktree/branch; git metadata requires sandbox
77+
escalation. Preserve canonical frontend invocation names with exec launchers
78+
rather than renamed symlinks. No merge, push or CI cancellation by executor.

0 commit comments

Comments
 (0)