Subject: Re: [PATCH v5 5/6] meson: add support for 'hdr-check'

From: [email-masked]
Date: Wed, 23 Apr 2025 11:05:24 +0100

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 <[email-masked]>
> ---
>   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(),
>