From: "D. Ben Knoble" <ben.knoble+github@gmail•com>
To: git@vger•kernel.org
Cc: "D. Ben Knoble" <ben.knoble+github@gmail•com>,
Phillip Wood <phillip.wood@dunelm•org.uk>,
Patrick Steinhardt <ps@pks•im>,
Evan Martin <evan.martin@gmail•com>,
Junio C Hamano <gitster@pobox•com>
Subject: [PATCH v4] meson: regenerate config-list.h when Documentation changes
Date: Mon, 16 Feb 2026 17:28:57 -0500 [thread overview]
Message-ID: <9cdcc9de04f0f8fff657f0474b31c063466ed808.1771280837.git.ben.knoble+github@gmail.com> (raw)
In-Reply-To: <0a344f1f3ee4a5d95c6f46df030b9936db4354a1.1770853297.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. 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.
Helped-by: Patrick Steinhardt <ps@pks•im>
Helped-by: Phillip Wood <phillip.wood@dunelm•org.uk>
Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail•com>
---
Notes (benknoble/commits):
Changes from v3 (<0a344f1f3ee4a5d95c6f46df030b9936db4354a1.1770853297.git.ben.knoble+github@gmail•com>):
• Include the script itself as a dependency via depfile
• Fix output path escaping (spaces, octothorpes; drop backslashes) for
Ninja (I've used a loop because I couldn't find a portable construct
that could escape only the remainder of the lines in the way I
wanted).
• Mention our assumptions about Documentation updates triggering
rebuilds
• Also include some debugging information in the commit message
generate-configlist.sh | 12 +++++++++++-
meson.build | 5 ++++-
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/generate-configlist.sh b/generate-configlist.sh
index 75c39ade209..63a2e8b6938 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,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')"
+ done >"$DEPFILE"
+fi
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,
)
Diff-intervalle contre v3 :
1: 0a344f1f3ee ! 1: 9cdcc9de04f meson: regenerate config-list.h when Documentation changes
@@ Commit message
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.
+ 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.
Helped-by: Patrick Steinhardt <ps@pks•im>
+ Helped-by: Phillip Wood <phillip.wood@dunelm•org.uk>
## Notes (benknoble/commits) ##
- Changes from v2 (<c9ae171eed6bd5b0fa6671b10a5ad0da024f36d0.1770649805.git.ben.knoble+github@gmail•com>):
+ Changes from v3 (<0a344f1f3ee4a5d95c6f46df030b9936db4354a1.1770853297.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?)
+ • Include the script itself as a dependency via depfile
+ • Fix output path escaping (spaces, octothorpes; drop backslashes) for
+ Ninja (I've used a loop because I couldn't find a portable construct
+ that could escape only the remainder of the lines in the way I
+ wanted).
+ • Mention our assumptions about Documentation updates triggering
+ rebuilds
+ • Also include some debugging information in the commit message
## generate-configlist.sh ##
@@
@@ generate-configlist.sh: print_config_list ()
+
+if test -n "$DEPFILE"
+then
-+ printf "$OUTPUT: %s\n" "$0" "$SOURCE_DIR"/Documentation/*config.adoc \
-+ "$SOURCE_DIR"/Documentation/config/*.adoc |
-+ sed 's/[# \\]/\\&/g' >"$DEPFILE"
++ 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')"
++ done >"$DEPFILE"
+fi
## meson.build ##
@@ meson.build: 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',
base-commit: 19a08e0c02faf1c5b4efd1add85598cf8390ff7e
prerequisite-patch-id: 364ba1899740b93be5957262d3583348d030e8fa
--
2.48.1
next prev parent reply other threads:[~2026-02-16 22:29 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-07 21:59 [PATCH] meson: regenerate config-list.h when Documentation changes D. Ben Knoble
2026-02-07 22:38 ` Ben Knoble
2026-02-09 15:19 ` [PATCH v2] " D. Ben Knoble
2026-02-11 23:51 ` [PATCH v3] " D. Ben Knoble
2026-02-12 8:06 ` Patrick Steinhardt
2026-02-12 10:29 ` Phillip Wood
2026-02-12 14:14 ` Phillip Wood
2026-02-12 15:56 ` Ben Knoble
2026-02-16 22:28 ` D. Ben Knoble [this message]
2026-02-17 0:33 ` [PATCH v4] " Ben Knoble
2026-02-17 7:03 ` Patrick Steinhardt
2026-02-17 13:28 ` D. Ben Knoble
2026-02-17 7:02 ` Patrick Steinhardt
2026-02-17 13:28 ` D. Ben Knoble
2026-02-17 20:24 ` Junio C Hamano
2026-02-17 9:20 ` Phillip Wood
2026-02-17 13:38 ` D. Ben Knoble
2026-02-17 15:11 ` Phillip Wood
2026-02-18 14:37 ` [PATCH v5] build: " D. Ben Knoble
2026-02-19 10:19 ` Phillip Wood
2026-02-19 13:40 ` D. Ben Knoble
2026-02-19 13:56 ` Patrick Steinhardt
2026-02-21 13:58 ` D. Ben Knoble
2026-02-19 15:10 ` Marc Branchaud
2026-02-21 13:58 ` D. Ben Knoble
2026-02-21 14:07 ` [PATCH v6] " D. Ben Knoble
2026-02-23 6:37 ` Patrick Steinhardt
2026-02-23 6:55 ` SZEDER Gábor
2026-02-23 21:41 ` Ben Knoble
2026-02-24 9:58 ` Patrick Steinhardt
2026-02-24 11:00 ` Phillip Wood
2026-02-24 14:12 ` D. Ben Knoble
2026-02-24 14:39 ` [PATCH v7] " D. Ben Knoble
2026-02-25 18:45 ` Junio C Hamano
2026-02-26 3:20 ` Ben Knoble
2026-02-09 15:25 ` [PATCH] meson: " Patrick Steinhardt
2026-02-09 21:50 ` D. Ben Knoble
2026-02-11 7:42 ` Patrick Steinhardt
2026-02-11 9:44 ` Phillip Wood
2026-02-11 10:57 ` Phillip Wood
2026-02-11 11:00 ` Patrick Steinhardt
2026-02-11 10:58 ` Patrick Steinhardt
2026-02-11 14:05 ` Phillip Wood
2026-02-11 20:15 ` D. Ben Knoble
2026-02-11 19:58 ` D. Ben Knoble
2026-02-12 8:10 ` Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9cdcc9de04f0f8fff657f0474b31c063466ed808.1771280837.git.ben.knoble+github@gmail.com \
--to=ben.knoble+github@gmail$(echo .)com \
--cc=evan.martin@gmail$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
--cc=phillip.wood@dunelm$(echo .)org.uk \
--cc=ps@pks$(echo .)im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox