From: phillip.wood123@gmail.com Date: Wed, 23 Apr 2025 10:05:24 GMT Subject: Re: [PATCH v5 5/6] meson: add support for 'hdr-check' Message-ID: <2a25ca04-c824-4bec-a5e7-95ec32556cf9@gmail.com> In-Reply-To: <20250423-505-wire-up-sparse-via-meson-v5-5-d1e2be4b2078@gmail.com> Hi Karthik On 23/04/2025 09:15, Karthik Nayak wrote: > The Makefile supports a target called 'hdr-check', which checks if > individual header files can be independently compiled. Let's port this > functionality to Meson, our new build system too. The implementation > resembles that of the Makefile and provides the same check. > > Since meson builds are out-of-tree, header dependencies are not > automatically met. So unlike the Makefile version, we also need to add > the required dependencies. > > Also add the 'xdiff/' dir to the list of 'third_party_sources' as those > headers must be skipped from the checks too. This also skips the folder > from the 'coccinelle' checks, this is okay, since this code is an > external dependency. The xdiff code is in a kind of limbo as the upstream project is dead and so people who want a standalone copy take the code from our repository. The Makefile does run coccinelle on it but not hdr-check as that fails. Looking at the filenames in contrib/coccinelle they are almost all quite git specific so it probably makes sense to skip the xdiff files. Best Wishes Phillip > Signed-off-by: Karthik Nayak > --- > meson.build | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 63 insertions(+) > > diff --git a/meson.build b/meson.build > index 4618804c7a..22fc65ec80 100644 > --- a/meson.build > +++ b/meson.build > @@ -645,6 +645,7 @@ third_party_excludes = [ > ':!sha1dc', > ':!t/unit-tests/clar', > ':!t/t[0-9][0-9][0-9][0-9]*', > + ':!xdiff', > ] > > headers_to_check = [] > @@ -1994,6 +1995,68 @@ endif > > subdir('contrib') > > +exclude_from_check_headers = [ > + 'compat/', > + 'unicode-width.h', > +] > + > +if sha1_backend != 'openssl' > + exclude_from_check_headers += 'sha1/openssl.h' > +endif > +if sha256_backend != 'openssl' > + exclude_from_check_headers += 'sha256/openssl.h' > +endif > +if sha256_backend != 'nettle' > + exclude_from_check_headers += 'sha256/nettle.h' > +endif > +if sha256_backend != 'gcrypt' > + exclude_from_check_headers += 'sha256/gcrypt.h' > +endif > + > +if headers_to_check.length() != 0 and compiler.get_argument_syntax() == 'gcc' > + hco_targets = [] > + foreach h : headers_to_check > + skip_header = false > + foreach exclude : exclude_from_check_headers > + if h.startswith(exclude) > + skip_header = true > + break > + endif > + endforeach > + > + if skip_header > + continue > + endif > + > + hcc = custom_target( > + input: h, > + output: h.underscorify() + 'cc', > + command: [ > + shell, > + '-c', > + 'echo \'#include "git-compat-util.h"\' > @OUTPUT@ && echo \'#include "' + h + '"\' >> @OUTPUT@' > + ] > + ) > + > + hco = custom_target( > + input: hcc, > + output: fs.replace_suffix(h.underscorify(), '.hco'), > + command: [ > + compiler.cmd_array(), > + libgit_c_args, > + '-I', meson.project_source_root(), > + '-I', meson.project_source_root() / 't/unit-tests', > + '-o', '/dev/null', > + '-c', '-xc', > + '@INPUT@' > + ] > + ) > + hco_targets += hco > + endforeach > + > + alias_target('hdr-check', hco_targets) > +endif > + > foreach key, value : { > 'DIFF': diff.full_path(), > 'GIT_SOURCE_DIR': meson.project_source_root(), >