./configure --allow-fetch CXX=g++-15 CC=gcc-15
Root cause. configure has a hard-coded whitelist of variable arguments (line 43) and rejects everything else that isn't a known dependency path:
allowed_arg_vars="CXXFLAGS LDFLAGS PLATFORM MSBUILD VCVARSALL NMAKE"
In read_args() the parser only accepts VAR=val when the lowercased name is a dependency (contains "$all_deps" "$(lc $option)") or is in that whitelist — otherwise it calls die "Unknown variable argument: $option" and exits 1:
*) if contains "$all_deps" "$(lc $option)"; then
$has_arg
force_paths="$force_paths|$(lc $option)=$arg|"
elif contains "$allowed_arg_vars" "$option"; then
...
else
die "Unknown variable argument: $option"
fi ;;
cxx is a dependency (bin_deps="cxx protoc python ..."), so CXX=g++-15 is legal. cc is not a dependency and not whitelisted, so CC=gcc-15 always dies. The old matrix never surfaced this because preflight (scripts/check_style.sh → xargs → cpplint) failed first with exit 123, masking the configure bug.
The fix — drop CC=; g++-15 already drives the gcc-15 backend:
# Before (fails)
./configure --allow-fetch CXX=g++-15 CC=gcc-15
# * Error: Unknown variable argument: CC
# After (works)
./configure --allow-fetch CXX=g++-15
Also fix the two other latent CI problems (boost fetch path, unittest target):
# .github/workflows/build.yml (fixed fragments)
- name: apt install
run: |
sudo apt update && sudo apt install -y \
libc6 libcurl4 git build-essential g++-15 gcc-15 \
protobuf-compiler libprotobuf-dev libcurl4-openssl-dev \
libncurses5-dev m4 g++ libssl-dev debhelper curl \
libboost-all-dev # <-- system boost; never take the 1.85.0 fetch/patch path
- name: configure
# CC= is rejected by configure's var-arg whitelist; keep CXX= (a legal dep path).
# No "--fetch boost": libboost-all-dev makes "Test boost: ok" so configure never fetches.
run: ./configure --allow-fetch CXX=g++-15
# unit-tests job: the unittest binary is NOT built by plain `make` (release default),
# it is built only by the explicit `unit` target.
- name: build unit tests
run: make unit -j $(python -c 'import multiprocessing; print(multiprocessing.cpu_count())')
Net diff for the configure step:
- run: ./configure --allow-fetch CXX=g++-15 CC=gcc-15
+ run: ./configure --allow-fetch CXX=g++-15
Verified against the real `configure` script and Makefiles (upstream `rethinkdb/rethinkdb` @ `a2cf130`): | # | Command / check | Result | |---|---|---| | 1 | `./configure --allow-fetch CXX=g++-15 CC=gcc-15` | `* Error: Unknown variable argument: CC`, **exit 1**, `config.mk` → `CONFIGURE_STATUS := started` (configure never completes) | | 2 | `./configure --allow-fetch CXX=g++-15` | **exit 0**, `C++ Compiler: GCC 15.2.0 (g++-15)`, `Test boost: ok`, `config.mk` → `CXX := g++-15` and `CONFIGURE_STATUS := success` | | 3 | `./configure --allow-fetch FOO=bar` | `* Error: Unknown variable argument: FOO`, exit 1 (whitelist + dep-name enforcement confirmed) | | 4 | `./configure --allow-fetch cc=gcc-15` | `* Error: Unknown variable argument: cc`, exit 1 (case-insensitive dep check still has no `cc` dep) | | 5 | `./configure --allow-fetch cxx=g++-15` | exit 0 (lowercase dep path accepted) | | 6 | `./configure --allow-fetch CXXFLAGS=-O2` | exit 0 (whitelisted var arg accepted) | | 7 | `make -n` (plain, release) | **0** unittest steps → `build/release/rethinkdb-unittest` is never produced | | 8 | `make -n unit` | **654** unittest steps, e.g. `g++-15 ... -c -o build/release/obj/unittest/varint_test.o src/unittest/varint_test.cc` + gtest run (`--gtest_filter=*`) | | 9 | `./scripts/check_style.sh` (preflight cpplint) | exit 0 on current main (style fixed upstream; `xargs` exit 123 was the old preflight failure mode that hid the configure bug) | | 10 | `check_boost()` / `check_lib_compile "" boost` code path | System boost (`libboost-all-dev`) → `Test boost: ok` → `empty_deps_lib boost true`, **no fetch**. Only a failed system link test falls through to `fetch_lib boost` | | 11 | `mk/support/pkg/boost.sh` + `pkg.sh pkg_patch` | Patch applied with `patch -p1` against the pinned b2 engine tree — the red CI's 1.85.0 pin hits this broken fetch/patch path; system boost sidesteps it entirely | Local environment also confirmed the dependency mechanics: the box has Boost 1.90 headers but no `libboost_system.so`, so `check_lib_compile` fails and `--allow-fetch` falls back to fetching (fetched 1.60.0 successfully here) — exactly the fallback the CI must avoid by installing `libboost-all-dev`. Edge cases tested: mixed known/unknown args, lowercase `cc`/`cxx`, whitelisted flags, missing `CC` var, plain-`make` vs `make unit` binary production, and full configure completion with `CXX=g++-15` (gcc-15 driver confirmed via `g++-15 -dumpmachine` = `x86_64-linux-gnu`).
{"model": "deepseek-v4-flash", "problem_class": "ci-workflow-configure-invalid-var-arg", "result": "passed", "tests": 11}