To bridge the remaining gaps between Makefile and Meson, this patch series adds 'hdr-check' to Meson to compliment the Makefile's 'hdr-check'. We also introduce 'headers-check' as an alias to 'hdr-check' as a better named replacement in both Meson and make and add a note to deprecate 'hdr-check' in the future. The first two commits are small cleanups, where we re-organize existing variables to make it easier to add the target. The third commit adds the 'hdr-check' target to Meson. The last commit introduces the 'headers-check' alias to both Meson and the makefile and marks 'hdr-check' to be deprecated. This is based on master 9d22ac5122 (The third batch, 2025-04-07) with 'es/meson-build-skip-coccinelle' merged in. --- Changes in v4: - Rename headers to headers_to_check, since these headers are only used for static analysis. - Added a commit to rename third_party_sources -> third_party_excludes and remove a duplicate. - Fix a typo 'gcrpyt' -> 'gcrypt' - Remove 'generated_headers', since we use 'git ls-files' and that would already ignore files within '.gitignore'. - Link to v3: https://lore.kernel.org/r/20250414-505-wire-up-sparse-via-meson-v3-0-edc6e7f26745@xxxxxxxxx Changes in v3: - Some renames: - headers_generated -> generated_headers - meson -> Meson - headers-check -> check-headers - headers_check_exclude -> exclude_from_check_headers - Rewrite 'headers_check_exclude' to also contain dirs so we can skip listing individual header files. - Move 'xdiff/*' to 'third_party_sources' and cleanup 'exclude_from_check_headers'. - Use 'echo' instead of 'echo -n'. - Use `fs.replace_suffix` instead of `str.replace`. - Link to v2: https://lore.kernel.org/r/20250410-505-wire-up-sparse-via-meson-v2-0-acb45cc8a2e5@xxxxxxxxx Changes in v2: - Add 'hdr-check' to meson, while introducing 'headers-check' as a replacement alias. Schedule 'hdr-check' to be deprecated in the future. - Link to v1: https://lore.kernel.org/r/20250408-505-wire-up-sparse-via-meson-v1-0-17476e5cea3f@xxxxxxxxx --- Makefile | 4 +- ci/run-static-analysis.sh | 2 +- contrib/coccinelle/meson.build | 31 ++++----------- meson.build | 86 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 25 deletions(-) Karthik Nayak (5): coccinelle: meson: rename variables to be more specific meson: move headers definition from 'contrib/coccinelle' meson: rename 'third_party_sources' to 'third_party_excludes' meson: add support for 'hdr-check' makefile/meson: add 'check-headers' as alias for 'hdr-check' Range-diff versus v3: 1: bc69638da5 = 1: 337431cf0f coccinelle: meson: rename variables to be more specific 2: de50343e66 ! 2: 2b5bde0cb0 meson: move headers definition from 'contrib/coccinelle' @@ contrib/coccinelle/meson.build: foreach source : run_command(git, '-C', meson.pr coccinelle_headers = [] -foreach header : run_command(git, '-C', meson.project_source_root(), 'ls-files', '--deduplicate', '*.h', third_party_sources, check: true).stdout().split() -+foreach header : headers ++foreach header : headers_to_check coccinelle_headers += meson.project_source_root() / header endforeach @@ meson.build: builtin_sources = [ +] + +if git.found() -+ headers = [] ++ headers_to_check = [] + foreach header : run_command(git, '-C', meson.project_source_root(), 'ls-files', '--deduplicate', '*.h', third_party_sources, check: true).stdout().split() -+ headers += header ++ headers_to_check += header + endforeach +endif + -: ---------- > 3: 2c5c9a9dc8 meson: rename 'third_party_sources' to 'third_party_excludes' 3: fadfc7ef07 ! 4: 5b166c8bcd meson: add support for 'hdr-check' @@ Commit message 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! + 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@xxxxxxxxx> ## meson.build ## -@@ meson.build: third_party_sources = [ - ':!t/unit-tests/clar', +@@ meson.build: third_party_excludes = [ + ':!sha1dc', ':!t/unit-tests/clar', ':!t/t[0-9][0-9][0-9][0-9]*', + ':!xdiff', ] if git.found() -@@ meson.build: if git.found() - endforeach - endif - -+generated_headers = [ -+ 'command-list.h', -+] -+ - if not get_option('breaking_changes') - builtin_sources += 'builtin/pack-redundant.c' - endif -@@ meson.build: builtin_sources += custom_target( - ], - env: script_environment, - ) -+generated_headers += 'config-list.h' - - builtin_sources += custom_target( - input: 'Documentation/githooks.adoc', -@@ meson.build: 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. @@ meson.build: endif subdir('contrib') -+exclude_from_check_headers = generated_headers -+exclude_from_check_headers += [ ++exclude_from_check_headers = [ + 'compat/', + 'unicode-width.h', +] @@ meson.build: endif +if sha256_backend != 'nettle' + exclude_from_check_headers += 'sha256/nettle.h' +endif -+if sha256_backend != 'gcrpyt' ++if sha256_backend != 'gcrypt' + exclude_from_check_headers += 'sha256/gcrypt.h' +endif + +if git.found() and compiler.get_argument_syntax() == 'gcc' + hco_targets = [] -+ foreach h : headers ++ foreach h : headers_to_check + skip_header = false + foreach exclude : exclude_from_check_headers + if h.startswith(exclude) 4: 66c5798df7 ! 5: 97e2e46dc1 makefile/meson: add 'check-headers' as alias for 'hdr-check' @@ meson.build: if git.found() and compiler.get_argument_syntax() == 'gcc' hco_targets += hco endforeach +- alias_target('hdr-check', hco_targets) + # TODO: deprecate 'hdr-check' in lieu of 'check-headers' in Git 2.51+ - alias_target('hdr-check', hco_targets) -+ alias_target('check-headers', hco_targets) ++ hdr_check = alias_target('hdr-check', hco_targets) ++ alias_target('check-headers', hdr_check) endif foreach key, value : { base-commit: 3a956c5f69873611ae5f8dcb9acd117f66b95ddc change-id: 20250330-505-wire-up-sparse-via-meson-2e32dd31208b Thanks - Karthik