Subject: Re: [PATCH] meson: regenerate config-list.h when Documentation changes

From: Patrick Steinhardt <[email-masked]>
Date: Mon, 9 Feb 2026 16:25:16 +0100

On Sat, Feb 07, 2026 at 04:59:17PM -0500, D. Ben Knoble wrote:
> 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 use the output of
> generate-configlist-deps.sh as a list of dependency files, since Meson
> does not have (or want) builtin support for globbing like Make.
> 
> Signed-off-by: D. Ben Knoble <[email-masked]>
> ---
> 
> Notes (benknoble/commits):
>     I considered having generate-configlist.sh write its own dependency
>     list, which Meson also supports… idk though. Input welcome :)

I think that would actually be the better approach, also because the
list of files with `run_command()` would only be computed at setup time.
I guess it could look something like the below patch -- please feel free
to reuse it at will.

Thanks!

Patrick

diff --git a/generate-configlist.sh b/generate-configlist.sh
index 75c39ade20..2c93ffc58a 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,9 @@ EOF
 	echo
 	print_config_list
 } >"$OUTPUT"
+
+if test -n "$DEPFILE"
+then
+	printf "$OUTPUT: %s\n" "$SOURCE_DIR"/Documentation/*config.adoc \
+	    "$SOURCE_DIR"/Documentation/config/*.adoc >"$DEPFILE"
+fi
diff --git a/meson.build b/meson.build
index dd52efd1c8..03ad7a2152 100644
--- a/meson.build
+++ b/meson.build
@@ -718,11 +718,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@',
+    meson.current_build_dir() / 'config-list.h.d',
   ],
   env: script_environment,
 )