meson: add support for 'hdr-check'

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.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Karthik Nayak
2025-04-23 10:15:38 +02:00
committed by Junio C Hamano
parent 7e873eb390
commit 02a132616a

View File

@@ -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(),