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! Signed-off-by: Karthik Nayak <karthik.188@xxxxxxxxx> --- meson.build | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/meson.build b/meson.build index 3ca5d01071..b1be2b3cbb 100644 --- a/meson.build +++ b/meson.build @@ -646,6 +646,7 @@ third_party_sources = [ ':!t/unit-tests/clar', ':!t/unit-tests/clar', ':!t/t[0-9][0-9][0-9][0-9]*', + ':!xdiff', ] if git.found() @@ -655,6 +656,10 @@ if git.found() endforeach endif +generated_headers = [ + 'command-list.h', +] + if not get_option('breaking_changes') builtin_sources += 'builtin/pack-redundant.c' endif @@ -669,6 +674,7 @@ builtin_sources += custom_target( ], env: script_environment, ) +generated_headers += 'config-list.h' builtin_sources += custom_target( input: 'Documentation/githooks.adoc', @@ -681,6 +687,7 @@ builtin_sources += custom_target( ], env: script_environment, ) +generated_headers += 'hook-list.h' # This contains the variables for GIT-BUILD-OPTIONS, which we use to propagate # build options to our tests. @@ -1995,6 +2002,69 @@ endif subdir('contrib') +exclude_from_check_headers = generated_headers +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 != 'gcrpyt' + exclude_from_check_headers += 'sha256/gcrypt.h' +endif + +if git.found() and compiler.get_argument_syntax() == 'gcc' + hco_targets = [] + foreach h : headers + 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(), -- 2.48.1