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

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

From
Patrick Steinhardt <ps@pks.im>
Date
Feb 12, 2026, 08:06 UTC
Message-ID
<aY2J6lcBC4Gcy-SK@pks.im>
In-Reply-To
<0a344f1f3ee4a5d95c6f46df030b9936db4354a1.1770853297.git.ben.knoble+github@gmail.com>
On Wed, Feb 11, 2026 at 06:51:02PM -0500, D. Ben Knoble wrote:
Show 10 quoted lines
> Notes (benknoble/commits):
>     Changes from v2 (<c9ae171eed6bd5b0fa6671b10a5ad0da024f36d0.1770649805.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
I guess you refer to [1], more specifically this quote:
  Rather than implement all of above, we follow what GCC/Clang produces:
      Backslashes escape a space or hash sign.
      When a space is preceded by 2N+1 backslashes, it is represents N
      backslashes followed by space.
      When a space is preceded by 2N backslashes, it represents 2N
      backslashes at the end of a filename.
      A hash sign is escaped by a single backslash. All other
      backslashes remain unchanged.
Show 5 quoted lines
>         λ 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?)

I think it would be interpreted as "foo\\". I would say that we really don't need to go too much into detail here. I very much hope that no sane person would have literal "\ " in their paths. One might wonder about Windows, where backslashes are common. But filenames cannot start with a space there, so this is fine.

So I'd say we should only care about quoting ' ' and '#', nothing else. We can still iterate going forward if we see that we're too naive.

Show 16 quoted lines
>  generate-configlist.sh | 10 +++++++++-
>  meson.build            |  4 +++-
>  2 files changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/generate-configlist.sh b/generate-configlist.sh
> index 75c39ade20..091efd4564 100755
> --- a/generate-configlist.sh
> +++ b/generate-configlist.sh
> @@ -36,3 +37,10 @@ print_config_list () {
>  	echo
>  	print_config_list
>  } >"$OUTPUT"
> +
> +if test -n "$DEPFILE"
> +then
> +	printf "$OUTPUT: %s\n" "$0" "$SOURCE_DIR"/Documentation/*config.adoc \

I think it's a tiny bit hacky that we output the script itself as a dependency here, and that it would be cleaner to do this via `depend_files` in the target itself.

> +	    "$SOURCE_DIR"/Documentation/config/*.adoc |
> +	    sed 's/[# \\]/\\&/g' >"$DEPFILE"
> +fi

From the above rules I would think that we should simply ignore backslashes here. As the last rule says, "All other backslashes remain unchanged.".

Show 16 quoted lines
> diff --git a/meson.build b/meson.build
> index 3a1d12caa4..fb5d7367f5 100644
> --- a/meson.build
> +++ b/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@',
I didn't know about `@DEPFILE@`, nice.
Thanks!
Patrick
[1]: https://github.com/ninja-build/ninja/blob/cc60300ab94dae9bb28fece3c9b7c397235b17de/src/depfile_parser.in.cc#L27
Previous: D. Ben KnobleNext: Phillip Wood
Message 5 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.