Message ID | 20250414-505-wire-up-sparse-via-meson-v3-3-edc6e7f26745@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | meson: add corresponding target for Makefile's hdr-check | expand |
Karthik Nayak <karthik.188@gmail.com> writes: > +if sha256_backend != 'gcrpyt' That's a bit unexpected name; relative to this one ... > + exclude_from_check_headers += 'sha256/gcrypt.h' > +endif ... I have to suspect that it is a typo?
Junio C Hamano <gitster@pobox.com> writes: > Karthik Nayak <karthik.188@gmail.com> writes: > >> +if sha256_backend != 'gcrpyt' > > That's a bit unexpected name; relative to this one ... > >> + exclude_from_check_headers += 'sha256/gcrypt.h' >> +endif > > ... I have to suspect that it is a typo? Indeed, I had to double check cause I couldn't spot it when you mentioned. Will fix. Thanks
Hi Karthik On 14/04/2025 22:16, 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! Doesn't this mean we'll skip all the xdiff files when running coccinelle as well? If so the commit message should point that out and explain why that is an improvement. > +exclude_from_check_headers = generated_headers I'm not sure this is necessary. The list of headers that we filter is generated with "git ls-files" and so wont contain generated headers in the first place. > +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 This part looks much more maintainable than than the previous version Thanks Phillip > + 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(),
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(),
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@gmail.com> --- meson.build | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+)