mirror of
https://github.com/git-for-windows/git.git
synced 2026-04-10 16:54:08 -05:00
The Coccinelle tool is an ingrained part of our build infrastructure. It is executed by our CI to detect antipatterns and is used to detect misuses of certain interfaces. It's presence in "contrib/" is thus rather misleading. Promote the configuration into the new "tools/" directory. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
86 lines
2.0 KiB
Meson
86 lines
2.0 KiB
Meson
coccinelle_opt = get_option('coccinelle').require(
|
|
fs.exists(meson.project_source_root() / '.git'),
|
|
error_message: 'coccinelle can only be run from a git checkout',
|
|
)
|
|
|
|
spatch = find_program('spatch', required: coccinelle_opt)
|
|
if not spatch.found()
|
|
subdir_done()
|
|
endif
|
|
|
|
rules = [
|
|
'array.cocci',
|
|
'commit.cocci',
|
|
'config_fn_ctx.pending.cocci',
|
|
'equals-null.cocci',
|
|
'flex_alloc.cocci',
|
|
'free.cocci',
|
|
'git_config_number.cocci',
|
|
'hashmap.cocci',
|
|
'index-compatibility.cocci',
|
|
'object_id.cocci',
|
|
'preincr.cocci',
|
|
'qsort.cocci',
|
|
'refs.cocci',
|
|
'strbuf.cocci',
|
|
'swap.cocci',
|
|
'the_repository.cocci',
|
|
'xcalloc.cocci',
|
|
'xopen.cocci',
|
|
'xstrdup_or_null.cocci',
|
|
'xstrncmpz.cocci',
|
|
]
|
|
|
|
concatenated_rules = custom_target(
|
|
command: [
|
|
'cat', '@INPUT@',
|
|
],
|
|
input: rules,
|
|
output: 'rules.cocci',
|
|
capture: true,
|
|
)
|
|
|
|
coccinelle_sources = []
|
|
foreach source : run_command(git, '-C', meson.project_source_root(), 'ls-files', '--deduplicate', '*.c', third_party_excludes, check: true).stdout().split()
|
|
coccinelle_sources += source
|
|
endforeach
|
|
|
|
coccinelle_headers = []
|
|
foreach header : headers_to_check
|
|
coccinelle_headers += meson.project_source_root() / header
|
|
endforeach
|
|
|
|
coccinelle_includes = []
|
|
foreach path : ['compat', 'ewah', 'refs', 'sha256', 'trace2', 'win32', 'xdiff']
|
|
coccinelle_includes += ['-I', meson.project_source_root() / path]
|
|
endforeach
|
|
|
|
patches = [ ]
|
|
foreach source : coccinelle_sources
|
|
patches += custom_target(
|
|
command: [
|
|
spatch,
|
|
'--all-includes',
|
|
'--sp-file', concatenated_rules,
|
|
'--patch', meson.project_source_root(),
|
|
coccinelle_includes,
|
|
'@INPUT@',
|
|
],
|
|
input: meson.project_source_root() / source,
|
|
output: source.underscorify() + '.patch',
|
|
capture: true,
|
|
depend_files: coccinelle_headers,
|
|
)
|
|
endforeach
|
|
|
|
concatenated_patch = custom_target(
|
|
command: [
|
|
'cat', '@INPUT@',
|
|
],
|
|
input: patches,
|
|
output: 'cocci.patch',
|
|
capture: true,
|
|
)
|
|
|
|
alias_target('coccicheck', concatenated_patch)
|