Skip to content

Commit ebeea3c

Browse files
benknoblegitster
authored andcommitted
build: regenerate config-list.h when Documentation changes
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 4173df5 (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. Since Meson does not have (or want) builtin support for globbing like Make, teach generate-configlist.sh to also generate a list of Documentation files its output depends on, and incorporate that into the Meson build. We honor the undocumented GCC/Clang contract of outputting empty targets for all the dependencies (like they do with -MP). That is, generate lines like build/config-list.h: $SOURCE_DIR/Documentation/config.adoc $SOURCE_DIR/Documentation/config.adoc: 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. While we're at it, teach the Makefile to use the same "the script knows it's dependencies" logic. For Meson, 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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 852829b commit ebeea3c

3 files changed

Lines changed: 22 additions & 4 deletions

File tree

Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2687,9 +2687,10 @@ $(BUILT_INS): git$X
26872687
cp $< $@
26882688

26892689
config-list.h: generate-configlist.sh
2690+
@mkdir -p .depend
2691+
$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@ .depend/config-list.h.d
26902692

2691-
config-list.h: Documentation/*config.adoc Documentation/config/*.adoc
2692-
$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@
2693+
-include .depend/config-list.h.d
26932694

26942695
command-list.h: generate-cmdlist.sh command-list.txt
26952696

generate-configlist.sh

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
SOURCE_DIR="$1"
44
OUTPUT="$2"
5+
DEPFILE="$3"
56

67
if test -z "$SOURCE_DIR" || ! test -d "$SOURCE_DIR" || test -z "$OUTPUT"
78
then
8-
echo >&2 "USAGE: $0 <SOURCE_DIR> <OUTPUT>"
9+
echo >&2 "USAGE: $0 <SOURCE_DIR> <OUTPUT> [<DEPFILE>]"
910
exit 1
1011
fi
1112

@@ -36,3 +37,16 @@ EOF
3637
echo
3738
print_config_list
3839
} >"$OUTPUT"
40+
41+
if test -n "$DEPFILE"
42+
then
43+
QUOTED_OUTPUT="$(printf '%s\n' "$OUTPUT" | sed 's,[&/\],\\&,g')"
44+
{
45+
printf '%s\n' "$SOURCE_DIR"/Documentation/*config.adoc \
46+
"$SOURCE_DIR"/Documentation/config/*.adoc |
47+
sed -e 's/[# ]/\\&/g' -e "s/^/$QUOTED_OUTPUT: /"
48+
printf '%s:\n' "$SOURCE_DIR"/Documentation/*config.adoc \
49+
"$SOURCE_DIR"/Documentation/config/*.adoc |
50+
sed -e 's/[# ]/\\&/g'
51+
} >"$DEPFILE"
52+
fi

meson.build

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,11 +720,14 @@ endif
720720

721721
builtin_sources += custom_target(
722722
output: 'config-list.h',
723+
depfile: 'config-list.h.d',
724+
depend_files: [ 'generate-configlist.sh' ],
723725
command: [
724726
shell,
725-
meson.current_source_dir() + '/generate-configlist.sh',
727+
meson.current_source_dir() / 'generate-configlist.sh',
726728
meson.current_source_dir(),
727729
'@OUTPUT@',
730+
'@DEPFILE@',
728731
],
729732
env: script_environment,
730733
)

0 commit comments

Comments
 (0)