Re: [PATCH v3 3/4] meson: add support for 'hdr-check'
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Apr 20, 2025, 10:57 UTC
- Message-ID
- <CAOLa=ZSYgdY0YnP1Uw83N7oT9R+AUt034ecgPt0ak+RCD3f_6Q@mail.gmail.com>
- In-Reply-To
- <958aee61-23eb-4562-af9d-48108e6fe581@gmail.com>
phillip.wood123@gmail.com writes:
Show 19 quoted lines
> 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. >
Yes, let me add it to the commit message.
Show 6 quoted lines
>> +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. >
Good point, since generated headers are part of the '.gitignore', we can skip the 'generated_headers' variable entirely.
Show 31 quoted lines
>> +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 >
Indeed. Thanks!
Show 41 quoted lines
>
> 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(),