On Fri, Aug 01, 2025 at 10:56:22AM +0300, Martin Storsjö wrote: > When using the Meson build system with an old-enough Git version > that does not yet know the `git ls-files --deduplicate` option one > can observe the following error: > > ../meson.build:697:19: ERROR: Command `/usr/bin/git -C /home/martin/code/git ls-files --deduplicate '*.h' ':!contrib' ':!compat/inet_ntop.c' ':!compat/inet_pton.c' ':!compat/nedmalloc' ':!compat/obstack.*' ':!compat/poll' ':!compat/regex' ':!sha1collisiondetection' ':!sha1dc' ':!t/unit-tests/clar' ':!t/t[0-9][0-9][0-9][0-9]*' ':!xdiff'` failed with status 129. > > The failing command is used to find all header files in our code > base, which is required for static analysis. > > Static analysis is an entirely optional feature that distributors > typically don't care about, and we already know to skip running the > command when we are not in a Git repository. But we do not handle > the above failure gracefully, even though we could. > > Fix this by passing `check: false` to `run_command`, which makes it > tolerate failures. Then check `returncode()` manually to decide > whether to inspect the output. > > Signed-off-by: Martin Storsjö <martin@xxxxxxxxx> > --- > meson.build | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/meson.build b/meson.build > index 9bc1826cb6..9b519e6eed 100644 > --- a/meson.build > +++ b/meson.build > @@ -694,9 +694,12 @@ third_party_excludes = [ > > headers_to_check = [] > if git.found() and fs.exists(meson.project_source_root() / '.git') > - foreach header : run_command(git, '-C', meson.project_source_root(), 'ls-files', '--deduplicate', '*.h', third_party_excludes, check: true).stdout().split() > - headers_to_check += header > - endforeach > + ls_headers = run_command(git, '-C', meson.project_source_root(), 'ls-files', '--deduplicate', '*.h', third_party_excludes, check: false) > + if ls_headers.returncode() == 0 > + foreach header : ls_headers.stdout().split() > + headers_to_check += header > + endforeach > + endif > endif Yup, this looks reasonable to me. We could have an `else` branch that warns about the command failing, for example like this: warning("could not find headers: " + ls_headers.stderr()) But other than that I'm happy. Thanks! Patrick