All of lore.kernel.org
 help / color / mirror / Atom feed
From: "D. Ben Knoble" <ben.knoble+github@gmail.com>
To: git@vger.kernel.org, Patrick Steinhardt <ps@pks.im>
Cc: "D. Ben Knoble" <ben.knoble+github@gmail.com>,
	Junio C Hamano <gitster@pobox.com>,
	Evan Martin <evan.martin@gmail.com>
Subject: Re: [PATCH] meson: regenerate config-list.h when Documentation changes
Date: Mon,  9 Feb 2026 16:50:06 -0500	[thread overview]
Message-ID: <20260209215015.25867-1-ben.knoble+github@gmail.com> (raw)
In-Reply-To: <aYn8XKv2hH2HX2xO@pks.im>

Hi Patrick,

> 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 <ben.knoble+github@gmail.com>
> > ---
> >
> > 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.

Oh, interesting. I didn't consider that, but it seems that adding a new file
doesn't cause the dependency list to get updated in my version. Good catch

> I guess it could look something like the below patch -- please feel free
> to reuse it at will.
>
> Thanks!
>
> Patrick

[snip patch]

I've applied this locally as so (tinkering since I saw the same symptoms below
with your version):

---- 8< ----
diff --git c/generate-configlist.sh w/generate-configlist.sh
index 75c39ade20..2c93ffc58a 100755
--- c/generate-configlist.sh
+++ w/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 @@ print_config_list () {
 	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 c/meson.build w/meson.build
index 3a1d12caa4..fb5d7367f5 100644
--- c/meson.build
+++ w/meson.build
@@ -720,11 +720,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@',
+    '@DEPFILE@',
   ],
   env: script_environment,
 )
---- 8< ----

Only, things are behaving oddly. For example:

    λ meson setup build2
    λ ninja -C build2

works fine, but

    λ ls -l build2/config*
    -rw-r--r-- 1 benknoble benknoble 17169  9 févr. 16:39 build2/config-list.h

I don't see the dependency file. Further, re-building seems to get stuck (I get
similar symptoms if I add or remove a relevant config.adoc file, but let's keep
it simple for now):

    λ ninja -C build2
    ninja: Entering directory `build2'
    [1/28] Generating GIT-VERSION-FILE with a custom command (wrapped by meson to set env)

Of course, if I invoke the command myself, I can fix the build:

    λ grep generate-config build2/build.ninja
     COMMAND = /usr/bin/sh /home/benknoble/code/git/generate-configlist.sh /home/benknoble/code/git config-list.h config-list.h.d
    λ (cd build2 && ../generate-configlist.sh .. config-list.h config-list.h.d)
    λ ninja -C build2
    ninja: Entering directory `build2'
    [7/7] Linking target git-upload-pack

but I certainly wouldn't have expected to have to do that!

Interestingly, after the "setup" step, build2/meson-info/intro-targets.json has
this block

  {
    "name": "config-list.h",
    "id": "config-list.h@cus",
    "type": "custom",
    "defined_in": "/home/benknoble/code/git/meson.build",
    "filename": [
      "/home/benknoble/code/git/build2/config-list.h"
    ],
    "build_by_default": false,
    "target_sources": [
      {
        "language": "unknown",
        "compiler": [
          "/usr/bin/sh",
          "/home/benknoble/code/git/generate-configlist.sh",
          "/home/benknoble/code/git",
          "@OUTPUT@",
          "@DEPFILE@"
        ],
        "parameters": [],
        "sources": [],
        "generated_sources": []
      }
    ],
    "extra_files": [],
    "subproject": null,
    "dependencies": [],
    "depends": [],
    "installed": false
  },

which doesn't mention the .d file anywhere. The _only_ reference to it is
build2/build.ninja. This doesn't change (nor are there more references to the
generate-config script) that I can find inside build2/ after any of these steps,
which is odd.

I can't think of any good next debugging steps, so I'm open to ideas on this
oddity.

  reply	other threads:[~2026-02-09 21:51 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
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 [this message]
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=20260209215015.25867-1-ben.knoble+github@gmail.com \
    --to=ben.knoble+github@gmail.com \
    --cc=evan.martin@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=ps@pks.im \
    /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.