# [PATCH] meson: restore hook-list.h to builtin_sources

6 messages from 2026-07-01 to 2026-07-03. Participants: Mike Gilbert, Adrian Ratiu, Patrick Steinhardt, Matt Hunter.
Thread: https://gitlist.dev/t/65906

## Mike Gilbert, 2026-07-01 19:39

Subject: [PATCH] meson: restore hook-list.h to builtin_sources
Message-ID: <20260701193928.358825-1-floppym@gentoo.org>

```
This fixes a racy build failure.

ˋˋˋ
builtin/bugreport.c:12:10: fatal error: hook-list.h: No such file or directory
   12 | #include "hook-list.h"
      |          ^~~~~~~~~~~~~

ˋˋˋ

hook-list.h must be generated before builtin/bugreport.c is compiled.

Bug: https://bugs.gentoo.org/978326
Fixes: 2eb541e8f2a9 (hook: move is_known_hook() to hook.c for wider use, 2026-04-10)
Signed-off-by: Mike Gilbert <floppym@gentoo.org>
---
 meson.build | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/meson.build b/meson.build
index 3247697f74aa..bdc83843e8e0 100644
--- a/meson.build
+++ b/meson.build
@@ -278,7 +278,20 @@ compat_sources = [
   'compat/terminal.c',
 ]
 
+hook_list = custom_target(
+  input: 'Documentation/githooks.adoc',
+  output: 'hook-list.h',
+  command: [
+    shell,
+    meson.current_source_dir() + '/tools/generate-hooklist.sh',
+    meson.current_source_dir(),
+    '@OUTPUT@',
+  ],
+  env: script_environment,
+)
+
 libgit_sources = [
+  hook_list,
   'abspath.c',
   'add-interactive.c',
   'add-patch.c',
@@ -566,19 +579,8 @@ libgit_sources += custom_target(
   env: script_environment,
 )
 
-libgit_sources += custom_target(
-  input: 'Documentation/githooks.adoc',
-  output: 'hook-list.h',
-  command: [
-    shell,
-    meson.current_source_dir() + '/tools/generate-hooklist.sh',
-    meson.current_source_dir(),
-    '@OUTPUT@',
-  ],
-  env: script_environment,
-)
-
 builtin_sources = [
+  hook_list,
   'builtin/add.c',
   'builtin/am.c',
   'builtin/annotate.c',
-- 
2.54.0


```

## Adrian Ratiu, 2026-07-02 10:34

Subject: Re: [PATCH] meson: restore hook-list.h to builtin_sources
Message-ID: <87mrw97k8w.fsf@gentoo.mail-host-address-is-not-set>
In-Reply-To: <20260701193928.358825-1-floppym@gentoo.org>

```
On Wed, 01 Jul 2026, Mike Gilbert <floppym@gentoo.org> wrote:
> This fixes a racy build failure.
>
> ˋˋˋ
> builtin/bugreport.c:12:10: fatal error: hook-list.h: No such file or directory
>    12 | #include "hook-list.h"
>       |          ^~~~~~~~~~~~~
>
> ˋˋˋ
>
> hook-list.h must be generated before builtin/bugreport.c is compiled.
>
> Bug: https://bugs.gentoo.org/978326
> Fixes: 2eb541e8f2a9 (hook: move is_known_hook() to hook.c for wider use, 2026-04-10)
> Signed-off-by: Mike Gilbert <floppym@gentoo.org>
> ---
>  meson.build | 26 ++++++++++++++------------
>  1 file changed, 14 insertions(+), 12 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 3247697f74aa..bdc83843e8e0 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -278,7 +278,20 @@ compat_sources = [
>    'compat/terminal.c',
>  ]
>  
> +hook_list = custom_target(
> +  input: 'Documentation/githooks.adoc',
> +  output: 'hook-list.h',
> +  command: [
> +    shell,
> +    meson.current_source_dir() + '/tools/generate-hooklist.sh',
> +    meson.current_source_dir(),
> +    '@OUTPUT@',
> +  ],
> +  env: script_environment,
> +)
> +
>  libgit_sources = [
> +  hook_list,
>    'abspath.c',
>    'add-interactive.c',
>    'add-patch.c',
> @@ -566,19 +579,8 @@ libgit_sources += custom_target(
>    env: script_environment,
>  )
>  
> -libgit_sources += custom_target(
> -  input: 'Documentation/githooks.adoc',
> -  output: 'hook-list.h',
> -  command: [
> -    shell,
> -    meson.current_source_dir() + '/tools/generate-hooklist.sh',
> -    meson.current_source_dir(),
> -    '@OUTPUT@',
> -  ],
> -  env: script_environment,
> -)
> -
>  builtin_sources = [
> +  hook_list,
>    'builtin/add.c',
>    'builtin/am.c',
>    'builtin/annotate.c',
> -- 
> 2.54.0

LGTM, thanks and nice find!

Sorry for the build regression, at the time I did the builtin->libgit
move IIRC only libgit was using the generated file, but it's clearly
safer to have it for both precisely to avoid these kinds of build races.

```

## Patrick Steinhardt, 2026-07-02 11:06

Subject: Re: [PATCH] meson: restore hook-list.h to builtin_sources
Message-ID: <akZGJP1kVtjBFN_e@pks.im>
In-Reply-To: <20260701193928.358825-1-floppym@gentoo.org>

```
On Wed, Jul 01, 2026 at 03:39:28PM -0400, Mike Gilbert wrote:
> This fixes a racy build failure.
> 
> ˋˋˋ
> builtin/bugreport.c:12:10: fatal error: hook-list.h: No such file or directory
>    12 | #include "hook-list.h"
>       |          ^~~~~~~~~~~~~
> 
> ˋˋˋ
> 
> hook-list.h must be generated before builtin/bugreport.c is compiled.

"hook-list.h" is required by both "hook.c" and by "builtin/bugreport.c".
So you would expect that we indeed need the header generated for both of
these, but right now we only explicitly list the dependency for our
libgit sources, not to our builtin sources. And consequently the header
may not be generated:

    $ meson setup build
    ...
    $ ninja -C build git.p/builtin_bugreport.c.o
    ...
    ../builtin/bugreport.c:12:10: fatal error: 'hook-list.h' file not found
   12 | #include "hook-list.h"
      |          ^~~~~~~~~~~~~
   1 error generated.

The fix is of course to explicitly list the header for both targets.
And...

> diff --git a/meson.build b/meson.build
> index 3247697f74aa..bdc83843e8e0 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -278,7 +278,20 @@ compat_sources = [
>    'compat/terminal.c',
>  ]
>  
> +hook_list = custom_target(
> +  input: 'Documentation/githooks.adoc',
> +  output: 'hook-list.h',
> +  command: [
> +    shell,
> +    meson.current_source_dir() + '/tools/generate-hooklist.sh',
> +    meson.current_source_dir(),
> +    '@OUTPUT@',
> +  ],
> +  env: script_environment,
> +)
> +
>  libgit_sources = [
> +  hook_list,
>    'abspath.c',
>    'add-interactive.c',
>    'add-patch.c',
> @@ -566,19 +579,8 @@ libgit_sources += custom_target(
>    env: script_environment,
>  )
>  
> -libgit_sources += custom_target(
> -  input: 'Documentation/githooks.adoc',
> -  output: 'hook-list.h',
> -  command: [
> -    shell,
> -    meson.current_source_dir() + '/tools/generate-hooklist.sh',
> -    meson.current_source_dir(),
> -    '@OUTPUT@',
> -  ],
> -  env: script_environment,
> -)
> -
>  builtin_sources = [
> +  hook_list,
>    'builtin/add.c',
>    'builtin/am.c',
>    'builtin/annotate.c',

... that's exactly what you do. So this fix looks good to me, thanks!

Patrick

```

## Mike Gilbert, 2026-07-02 17:03

Subject: Re: [PATCH] meson: restore hook-list.h to builtin_sources
Message-ID: <CAJ0EP43gyQf_XhCLCNEzCq9wMYXZBQX=PWjR-wYqoESSvByJiA@mail.gmail.com>
In-Reply-To: <akZGJP1kVtjBFN_e@pks.im>

```
On Thu, Jul 2, 2026 at 7:06 AM Patrick Steinhardt <ps@pks.im> wrote:
>
> On Wed, Jul 01, 2026 at 03:39:28PM -0400, Mike Gilbert wrote:
> > This fixes a racy build failure.
> >
> > ˋˋˋ
> > builtin/bugreport.c:12:10: fatal error: hook-list.h: No such file or directory
> >    12 | #include "hook-list.h"
> >       |          ^~~~~~~~~~~~~
> >
> > ˋˋˋ
> >
> > hook-list.h must be generated before builtin/bugreport.c is compiled.
>
> "hook-list.h" is required by both "hook.c" and by "builtin/bugreport.c".
> So you would expect that we indeed need the header generated for both of
> these, but right now we only explicitly list the dependency for our
> libgit sources, not to our builtin sources. And consequently the header
> may not be generated:
>
>     $ meson setup build
>     ...
>     $ ninja -C build git.p/builtin_bugreport.c.o
>     ...
>     ../builtin/bugreport.c:12:10: fatal error: 'hook-list.h' file not found
>    12 | #include "hook-list.h"
>       |          ^~~~~~~~~~~~~
>    1 error generated.
>
> The fix is of course to explicitly list the header for both targets.
> And...
>
> > diff --git a/meson.build b/meson.build
> > index 3247697f74aa..bdc83843e8e0 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -278,7 +278,20 @@ compat_sources = [
> >    'compat/terminal.c',
> >  ]
> >
> > +hook_list = custom_target(
> > +  input: 'Documentation/githooks.adoc',
> > +  output: 'hook-list.h',
> > +  command: [
> > +    shell,
> > +    meson.current_source_dir() + '/tools/generate-hooklist.sh',
> > +    meson.current_source_dir(),
> > +    '@OUTPUT@',
> > +  ],
> > +  env: script_environment,
> > +)
> > +
> >  libgit_sources = [
> > +  hook_list,
> >    'abspath.c',
> >    'add-interactive.c',
> >    'add-patch.c',
> > @@ -566,19 +579,8 @@ libgit_sources += custom_target(
> >    env: script_environment,
> >  )
> >
> > -libgit_sources += custom_target(
> > -  input: 'Documentation/githooks.adoc',
> > -  output: 'hook-list.h',
> > -  command: [
> > -    shell,
> > -    meson.current_source_dir() + '/tools/generate-hooklist.sh',
> > -    meson.current_source_dir(),
> > -    '@OUTPUT@',
> > -  ],
> > -  env: script_environment,
> > -)
> > -
> >  builtin_sources = [
> > +  hook_list,
> >    'builtin/add.c',
> >    'builtin/am.c',
> >    'builtin/annotate.c',
>
> ... that's exactly what you do. So this fix looks good to me, thanks!

Thank you for the review. This is my first contribution to the Git
project and I'm trying to follow the lengthy SubmittingPatches guide.

I believe we have "reached a consensus" and my next steps are as follows:

- Add Reviewed-by (or Acked-by?) for Patrick and Adrian.
- Send the patch to Junio with the list CCed.

Do I have that right?

```

## Patrick Steinhardt, 2026-07-03 05:21

Subject: Re: [PATCH] meson: restore hook-list.h to builtin_sources
Message-ID: <akdGzbF7dex9XQwp@pks.im>
In-Reply-To: <CAJ0EP43gyQf_XhCLCNEzCq9wMYXZBQX=PWjR-wYqoESSvByJiA@mail.gmail.com>

```
On Thu, Jul 02, 2026 at 01:03:05PM -0400, Mike Gilbert wrote:
> On Thu, Jul 2, 2026 at 7:06 AM Patrick Steinhardt <ps@pks.im> wrote:
> > On Wed, Jul 01, 2026 at 03:39:28PM -0400, Mike Gilbert wrote:
> > > diff --git a/meson.build b/meson.build
> > > index 3247697f74aa..bdc83843e8e0 100644
> > > --- a/meson.build
> > > +++ b/meson.build
> > > @@ -566,19 +579,8 @@ libgit_sources += custom_target(
> > >    env: script_environment,
> > >  )
> > >
> > > -libgit_sources += custom_target(
> > > -  input: 'Documentation/githooks.adoc',
> > > -  output: 'hook-list.h',
> > > -  command: [
> > > -    shell,
> > > -    meson.current_source_dir() + '/tools/generate-hooklist.sh',
> > > -    meson.current_source_dir(),
> > > -    '@OUTPUT@',
> > > -  ],
> > > -  env: script_environment,
> > > -)
> > > -
> > >  builtin_sources = [
> > > +  hook_list,
> > >    'builtin/add.c',
> > >    'builtin/am.c',
> > >    'builtin/annotate.c',
> >
> > ... that's exactly what you do. So this fix looks good to me, thanks!
> 
> Thank you for the review. This is my first contribution to the Git
> project and I'm trying to follow the lengthy SubmittingPatches guide.

It's gotten quite long by now indeed.

> I believe we have "reached a consensus" and my next steps are as follows:
> 
> - Add Reviewed-by (or Acked-by?) for Patrick and Adrian.
> - Send the patch to Junio with the list CCed.
> 
> Do I have that right?

In the current state you don't have to do anything. Reviews were
favorable and you weren't asked to do any changes, so there is no need
for you to send a second version. Unless somebody else chimes in and
asks for changes, Junio will eventually pick up this patch and may then
add the Reviewed-by trailers himself.

Thanks for your contribution, and welcome to Git :)

Patrick

```

## Matt Hunter, 2026-07-03 06:03

Subject: Re: [PATCH] meson: restore hook-list.h to builtin_sources
Message-ID: <DJOPIP6EQWWJ.H6X9L009RO1W@lfurio.us>
In-Reply-To: <CAJ0EP43gyQf_XhCLCNEzCq9wMYXZBQX=PWjR-wYqoESSvByJiA@mail.gmail.com>

```
On Thu Jul 2, 2026 at 1:03 PM EDT, Mike Gilbert wrote:
>
> Thank you for the review. This is my first contribution to the Git
> project and I'm trying to follow the lengthy SubmittingPatches guide.
>
> I believe we have "reached a consensus" and my next steps are as follows:
>
> - Add Reviewed-by (or Acked-by?) for Patrick and Adrian.

I believe the typical etiquette is to only apply someone else's
Reviewed-by trailer if it is offered to you.

> - Send the patch to Junio with the list CCed.

Generally speaking, I'd wait at least a couple days to see if _this_
copy of the patch gets picked up into the 'seen' branch, before
resending for this purpose.

>

I _would_ give my thoughts on the change while I'm here, but I'm not
nearly hip enough to the meson build system to leave anything useful

Welcome to the Git community

```
