--- id: "bug-1620" status: "fixed" status_updated: "2026-09-24" status_note: "" component: "build" severity: "unknown" timestamp: "2026-08-21T15:56:00Z" last_seen: "2026-09-19T09:00:00Z" occurrences: 1 files: ["src/tools/xce-build.sh (setup_build", "--incremental path)"] tags: ["meson", "reconfigure", "incremental-build", "dirty_fingerprint", "xce-build.sh", "worker", "stale-build-dir"] related: ["bug-1565"] legacy: true --- # bug-1620: ERROR: Unknown option: "dirty_fingerprint" ## Description ERROR: Unknown option: "dirty_fingerprint". ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause `xce-build.sh worker asan --incremental` runs `meson setup --reconfigure "$BUILD_DIR" -Dcommit_id=... -Dbuild_time=... -Ddirty_fingerprint=...` against a pre-existing xce.build dir that was configured before commit a860141b (feat(dirty-content-fingerprint): add dirty_fingerprint meson option). Meson 1.9.1 validates -D flags on `--reconfigure` against the OLD cached coredata BEFORE re-reading meson.options to pick up newly-added options, so any brand-new option name passed via -D on the same reconfigure invocation is rejected as unknown -- even though the option genuinely exists in the current src/meson.options (confirmed: `intro-buildoptions.json` in the stale build dir only listed commit_id/build_time, not dirty_fingerprint). Pure staleness in the incremental build dir vs. the current option surface, unrelated to any C source edit. ## Fix Ran `meson setup --reconfigure xce.build` once with NO -D overrides first -- this successfully re-reads meson.options and registers the new dirty_fingerprint option in cached coredata (confirmed via intro-buildoptions.json). A subsequent normal `xce-build.sh worker asan --incremental` (which does pass -Ddirty_fingerprint=...) then succeeded cleanly. General recipe: if `--incremental` reconfigure fails with 'Unknown option: "X"' for an option that IS defined in src/meson.options, the build dir predates that option's introduction -- do one plain `meson setup --reconfigure ` with no -D args to register it, then retry the real build. Rebuilding without --incremental (full rm -rf + fresh setup) also fixes it but wipes any other component's binaries sharing that dir (see bug-1565). ## Verification _Not recorded (migrated from buglog.json)._ ## References - Related: bug-1565