Re: [PATCH v5 5/6] meson: add support for 'hdr-check'
- From
- phillip.wood123@gmail.com <phillip.wood123@gmail.com>
- Date
- Apr 23, 2025, 10:05 UTC
- 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:
Show 13 quoted lines
> 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
Show 87 quoted lines
> Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
> ---
> 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(),
>