Re: [PATCH v4] meson: regenerate config-list.h when Documentation changes
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Feb 17, 2026, 07:02 UTC
- Message-ID
- <aZQSf9yaNa693IFF@pks.im>
- In-Reply-To
- <9cdcc9de04f0f8fff657f0474b31c063466ed808.1771280837.git.ben.knoble+github@gmail.com>
On Mon, Feb 16, 2026 at 05:28:57PM -0500, D. Ben Knoble wrote:
Show 26 quoted lines
> 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. We assume that if a user adds a new file under > Documentation/config then they will also edit one of the existing files > to include that new file, and that will trigger a rebuild. > > Also mark the generator script as a dependency. > > Combining the following commands helps debug dependencies: > > ninja -C <builddir> -t deps config-list.h > ninja -C <builddir> -t browse config-list.h > > The former lists all the dependencies discovered from our output ".d" > file (the config documentation) and the latter shows the dependency on > the script itself, among other useful edges in the dependency graph.
Good hint, thanks for putting it here.
Show 15 quoted lines
> diff --git a/generate-configlist.sh b/generate-configlist.sh > index 75c39ade209..63a2e8b6938 100755 > --- a/generate-configlist.sh > +++ b/generate-configlist.sh > @@ -36,3 +37,12 @@ print_config_list () > echo > print_config_list > } >"$OUTPUT" > + > +if test -n "$DEPFILE" > +then > + for doc in "$SOURCE_DIR"/Documentation/*config.adoc \ > + "$SOURCE_DIR"/Documentation/config/*.adoc > + do > + printf "$OUTPUT: %s\n" "$(printf '%s\n' "$doc" | sed 's/[# ]/\\&/g')"
Tiny nit: can't we simplify this to "$(echo "$doc" | sed ...)"?
Show 20 quoted lines
> diff --git a/meson.build b/meson.build > index 3a1d12caa4b..e4b8f1e33d2 100644 > --- a/meson.build > +++ b/meson.build > @@ -720,11 +720,14 @@ endif > > builtin_sources += custom_target( > output: 'config-list.h', > + depfile: 'config-list.h.d', > + depend_files: [ 'generate-configlist.sh' ], > 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, > )
And this looks as expected now, too. I also verified locally that this correctly rebuilds things when either the script or any of the files change.
I wonder whether we also want to have a second patch on top to adjust our Makefile? E.g. something like this:
diff --git a/Makefile b/Makefile index 47ed9fa7fd..ed82775ec2 100644 --- a/Makefile +++ b/Makefile @@ -2688,8 +2688,10 @@ $(BUILT_INS): git$X config-list.h: generate-configlist.sh -config-list.h: Documentation/*config.adoc Documentation/config/*.adoc - $(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@ +config-list.h: generate-configlist.sh + $(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@ .depend/config-list.h.d + +-include .depend/config-list.h.d command-list.h: generate-cmdlist.sh command-list.txt Please feel free to skip this part though. Thanks! Patrick