All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: "D. Ben Knoble" <ben.knoble+github@gmail.com>
Cc: git@vger.kernel.org, Phillip Wood <phillip.wood@dunelm.org.uk>,
	Evan Martin <evan.martin@gmail.com>,
	Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v4] meson: regenerate config-list.h when Documentation changes
Date: Tue, 17 Feb 2026 08:02:23 +0100	[thread overview]
Message-ID: <aZQSf9yaNa693IFF@pks.im> (raw)
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:
> 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.

> 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 ...)"?

> 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

  parent reply	other threads:[~2026-02-17  7:02 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     ` [PATCH v4] " D. Ben Knoble
2026-02-17  0:33       ` Ben Knoble
2026-02-17  7:03         ` Patrick Steinhardt
2026-02-17 13:28           ` D. Ben Knoble
2026-02-17  7:02       ` Patrick Steinhardt [this message]
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=aZQSf9yaNa693IFF@pks.im \
    --to=ps@pks.im \
    --cc=ben.knoble+github@gmail.com \
    --cc=evan.martin@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=phillip.wood@dunelm.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.