[PATCH v3] meson: regenerate config-list.h when Documentation changes
- From
D. Ben Knoble <ben.knoble+github@gmail.com>
- Date
- Feb 11, 2026, 23:51 UTC
- Message-ID
- <0a344f1f3ee4a5d95c6f46df030b9936db4354a1.1770853297.git.ben.knoble+github@gmail.com>
- In-Reply-To
- <c9ae171eed6bd5b0fa6671b10a5ad0da024f36d0.1770649805.git.ben.knoble+github@gmail.com>
The Meson-based build doesn't know when to rebuild config-list.h, so the header is sometimes stale.
For example, an old build directory might have config-list.h from before 4173df5187 (submodule: introduce extensions.submodulePathConfig, 2026-01-12), which added submodule.<name>.gitdir to the list. Without it, t9902-completion.sh fails. Regenerating the config-list.h artifact from sources fixes the artifact and the test.
Teach the meson build to depend on the Documentation files that generate-configlist.sh reads by having it an additional output as a list of dependency files, since Meson does not have (or want) builtin support for globbing like Make.
Helped-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com> ---
Notes (benknoble/commits):
Changes from v2 (<c9ae171eed6bd5b0fa6671b10a5ad0da024f36d0.1770649805.git.ben.knoble+github@gmail.com>):
• Pick up (and tweak) Patrick's depfile proposal
• Include the script itself as a dependency
• Escape output paths (spaces, octothorpes, and backslashes) for Ninja
I'm not 100% sure I've actually done the escaping correctly, though,
since Ninja's source says that a space preceded by 2N backslashes
represents 2N backslashes at the end of a filename, and
λ printf '%s\n' 'foo\' | sed 's/[# \\]/\\&/g' | xxd
00000000: 666f 6f5c 5c0a foo\\.
So would they interpret that as the filename 'foo\\' instead of 'foo\' ?
(Or, no because the 2N slashes aren't followed by a SP, but a NL?)generate-configlist.sh | 10 +++++++++- meson.build | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/generate-configlist.sh b/generate-configlist.sh index 75c39ade20..091efd4564 100755 --- a/generate-configlist.sh +++ b/generate-configlist.sh @@ -2,10 +2,11 @@ SOURCE_DIR="$1" OUTPUT="$2" +DEPFILE="$3" if test -z "$SOURCE_DIR" || ! test -d "$SOURCE_DIR" || test -z "$OUTPUT" then - echo >&2 "USAGE: $0 <SOURCE_DIR> <OUTPUT>" + echo >&2 "USAGE: $0 <SOURCE_DIR> <OUTPUT> [<DEPFILE>]" exit 1 fi @@ -36,3 +37,10 @@ print_config_list () { echo print_config_list } >"$OUTPUT" + +if test -n "$DEPFILE" +then + printf "$OUTPUT: %s\n" "$0" "$SOURCE_DIR"/Documentation/*config.adoc \ + "$SOURCE_DIR"/Documentation/config/*.adoc | + sed 's/[# \\]/\\&/g' >"$DEPFILE" +fi diff --git a/meson.build b/meson.build index 3a1d12caa4..fb5d7367f5 100644 --- a/meson.build +++ b/meson.build @@ -720,11 +720,13 @@ endif builtin_sources += custom_target( output: 'config-list.h', + depfile: 'config-list.h.d', command: [ shell, - meson.current_source_dir() + '/generate-configlist.sh', + meson.current_source_dir() / 'generate-configlist.sh', meson.current_source_dir(), '@OUTPUT@', + '@DEPFILE@', ], env: script_environment, ) base-commit: 19a08e0c02faf1c5b4efd1add85598cf8390ff7e prerequisite-patch-id: 364ba1899740b93be5957262d3583348d030e8fa
-- 2.52.0.rc0.1058.g68d811a4ee.dirty