From d06abcf68e0361732ce50768da239bfdeba887ca Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Thu, 24 Apr 2025 12:06:49 +0200 Subject: [PATCH] meson: Implement duplicate includes check with clang-tidy Instead of doing this with our own script, let's use clang-tidy instead. --- .clang-tidy | 3 ++- meson.build | 10 ---------- tools/check-includes.py | 32 -------------------------------- 3 files changed, 2 insertions(+), 43 deletions(-) delete mode 100755 tools/check-includes.py diff --git a/.clang-tidy b/.clang-tidy index f716a6650b3..b09c0996143 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -2,7 +2,8 @@ --- Checks: ' -*, - misc-header-include-cycle + misc-header-include-cycle, + readability-duplicate-include ' WarningsAsErrors: '*' HeaderFileExtensions: diff --git a/meson.build b/meson.build index 7458f060a22..b3cf5f1744a 100644 --- a/meson.build +++ b/meson.build @@ -2824,16 +2824,6 @@ if git.found() run_target( 'ctags', command : [env, 'ctags', '--tag-relative=never', '-o', '@0@/tags'.format(meson.project_source_root())] + all_files) - - ############################################ - - if want_tests != 'false' and conf.get('BUILD_MODE_DEVELOPER') == 1 - test('check-includes', - files('tools/check-includes.py'), - args: all_files, - env : ['PROJECT_SOURCE_ROOT=@0@'.format(meson.project_source_root())], - suite : 'headers') - endif endif #################################################### diff --git a/tools/check-includes.py b/tools/check-includes.py deleted file mode 100755 index 5d5b39f778a..00000000000 --- a/tools/check-includes.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python3 -# SPDX-License-Identifier: LGPL-2.1-or-later - -# pylint: disable=consider-using-with - -import os -import pathlib -import re -import sys - -PROJECT_ROOT = pathlib.Path(os.getenv('PROJECT_SOURCE_ROOT', '.')) - -def check_file(filename): - seen = set() - good = True - for n, line in enumerate(open(filename)): - m = re.match(r'^\s*#\s*include\s*[<"](\S*)[>"]', line) - if m: - include = m.group(1) - if include in seen: - try: - filename = pathlib.Path(filename).resolve().relative_to(PROJECT_ROOT) - except ValueError: - pass - print(f'{filename}:{n}: {line.strip()}') - good = False - seen.add(include) - return good - -if __name__ == '__main__': - all_good = all(check_file(name) for name in sys.argv[1:]) - sys.exit(0 if all_good else 1) -- 2.47.3