git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] meson: regenerate config-list.h when Documentation changes

From
D. Ben Knoble <ben.knoble+github@gmail.com>
Date
Feb 9, 2026, 21:50 UTC
Message-ID
<20260209215015.25867-1-ben.knoble+github@gmail.com>
In-Reply-To
<aYn8XKv2hH2HX2xO@pks.im>
Hi Patrick,
Show 24 quoted lines
> 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

Show 6 quoted lines
> 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.
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 37 of 46 in “meson: regenerate config-list.h when Documentation changes”
  1. meson: regenerate config-list.h when Documentation changesD. Ben Knoble, Feb 7, 2026
  2. Ben KnobleFeb 7, 2026
  3. meson: regenerate config-list.h when Documentation changesD. Ben Knoble, Feb 9, 2026
  4. meson: regenerate config-list.h when Documentation changesD. Ben Knoble, Feb 11, 2026
  5. Patrick SteinhardtFeb 12, 2026
  6. Phillip WoodFeb 12, 2026
  7. Phillip WoodFeb 12, 2026
  8. Ben KnobleFeb 12, 2026
  9. meson: regenerate config-list.h when Documentation changesD. Ben Knoble, Feb 16, 2026
  10. Ben KnobleFeb 17, 2026
  11. Patrick SteinhardtFeb 17, 2026
  12. D. Ben KnobleFeb 17, 2026
  13. Patrick SteinhardtFeb 17, 2026
  14. D. Ben KnobleFeb 17, 2026
  15. Junio C HamanoFeb 17, 2026
  16. Phillip WoodFeb 17, 2026
  17. D. Ben KnobleFeb 17, 2026
  18. Phillip WoodFeb 17, 2026
  19. build: regenerate config-list.h when Documentation changesD. Ben Knoble, Feb 18, 2026
  20. Phillip WoodFeb 19, 2026
  21. D. Ben KnobleFeb 19, 2026
  22. Patrick SteinhardtFeb 19, 2026
  23. D. Ben KnobleFeb 21, 2026
  24. Marc BranchaudFeb 19, 2026
  25. D. Ben KnobleFeb 21, 2026
  26. build: regenerate config-list.h when Documentation changesD. Ben Knoble, Feb 21, 2026
  27. Patrick SteinhardtFeb 23, 2026
  28. SZEDER GáborFeb 23, 2026
  29. Ben KnobleFeb 23, 2026
  30. Patrick SteinhardtFeb 24, 2026
  31. Phillip WoodFeb 24, 2026
  32. D. Ben KnobleFeb 24, 2026
  33. build: regenerate config-list.h when Documentation changesD. Ben Knoble, Feb 24, 2026
  34. Junio C HamanoFeb 25, 2026
  35. Ben KnobleFeb 26, 2026
  36. Patrick SteinhardtFeb 9, 2026
  37. D. Ben KnobleFeb 9, 2026
  38. Patrick SteinhardtFeb 11, 2026
  39. Phillip WoodFeb 11, 2026
  40. Phillip WoodFeb 11, 2026
  41. Patrick SteinhardtFeb 11, 2026
  42. Patrick SteinhardtFeb 11, 2026
  43. Phillip WoodFeb 11, 2026
  44. D. Ben KnobleFeb 11, 2026
  45. D. Ben KnobleFeb 11, 2026
  46. Patrick SteinhardtFeb 12, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.