diff options
author | alexv-smirnov <alex@ydb.tech> | 2023-03-28 22:25:04 +0300 |
---|---|---|
committer | alexv-smirnov <alex@ydb.tech> | 2023-03-28 22:25:04 +0300 |
commit | b8a17f9b1c166d2e9a26b99348a4c29d972caf55 (patch) | |
tree | 1a2d881f1a9452b9c6103dbf69d73da7624e98e5 /build/scripts/clang_tidy.py | |
parent | 25659221f18577ea38430a8ec3349836f5626b6a (diff) | |
download | ydb-b8a17f9b1c166d2e9a26b99348a4c29d972caf55.tar.gz |
Revert ymake build from ydb oss export
Diffstat (limited to 'build/scripts/clang_tidy.py')
-rw-r--r-- | build/scripts/clang_tidy.py | 172 |
1 files changed, 0 insertions, 172 deletions
diff --git a/build/scripts/clang_tidy.py b/build/scripts/clang_tidy.py deleted file mode 100644 index 982e9015cb..0000000000 --- a/build/scripts/clang_tidy.py +++ /dev/null @@ -1,172 +0,0 @@ -import argparse -import json -import os -import re -import shutil -import sys - -import subprocess - -import yaml - - -def setup_script(args): - global tidy_config_validation - sys.path.append(os.path.dirname(args.config_validation_script)) - import tidy_config_validation - - -def parse_args(): - parser = argparse.ArgumentParser() - parser.add_argument("--testing-src", required=True) - parser.add_argument("--clang-tidy-bin", required=True) - parser.add_argument("--config-validation-script", required=True) - parser.add_argument("--ymake-python", required=True) - parser.add_argument("--tidy-json", required=True) - parser.add_argument("--source-root", required=True) - parser.add_argument("--build-root", required=True) - parser.add_argument("--default-config-file", required=True) - parser.add_argument("--project-config-file", required=True) - parser.add_argument("--export-fixes", required=True) - parser.add_argument("--checks", required=False, default="") - parser.add_argument("--header-filter", required=False, default=None) - return parser.parse_known_args() - - -def generate_compilation_database(clang_cmd, source_root, filename, path): - compile_database = [ - { - "file": filename, - "command": subprocess.list2cmdline(clang_cmd), - "directory": source_root, - } - ] - compilation_database_json = os.path.join(path, "compile_commands.json") - with open(compilation_database_json, "w") as afile: - json.dump(compile_database, afile) - return compilation_database_json - - -def load_profile(path): - if os.path.exists(path): - files = os.listdir(path) - if len(files) == 1: - with open(os.path.join(path, files[0])) as afile: - return json.load(afile)["profile"] - elif len(files) > 1: - return { - "error": "found several profile files: {}".format(files), - } - return { - "error": "profile file is missing", - } - - -def load_fixes(path): - if os.path.exists(path): - with open(path, 'r') as afile: - return afile.read() - else: - return "" - - -def is_generated(testing_src, build_root): - return testing_src.startswith(build_root) - - -def generate_outputs(output_json): - output_obj = os.path.splitext(output_json)[0] + ".o" - open(output_obj, "w").close() - open(output_json, "w").close() - - -def filter_configs(result_config, filtered_config): - with open(result_config, 'r') as afile: - input_config = yaml.safe_load(afile) - result_config = tidy_config_validation.filter_config(input_config) - with open(filtered_config, 'w') as afile: - yaml.safe_dump(result_config, afile) - - -def main(): - args, clang_cmd = parse_args() - setup_script(args) - clang_tidy_bin = args.clang_tidy_bin - output_json = args.tidy_json - generate_outputs(output_json) - if is_generated(args.testing_src, args.build_root): - return - if args.header_filter is None: - # .pb.h files will be excluded because they are not in source_root - header_filter = r"^" + re.escape(os.path.dirname(args.testing_src)) + r".*" - else: - header_filter = r"^(" + args.header_filter + r").*" - - def ensure_clean_dir(path): - path = os.path.join(args.build_root, path) - if os.path.exists(path): - shutil.rmtree(path) - os.makedirs(path) - return path - - profile_tmpdir = ensure_clean_dir("profile_tmpdir") - db_tmpdir = ensure_clean_dir("db_tmpdir") - fixes_file = "fixes.txt" - config_dir = ensure_clean_dir("config_dir") - result_config_file = args.default_config_file - if args.project_config_file != args.default_config_file: - result_config = os.path.join(config_dir, "result_tidy_config.yaml") - filtered_config = os.path.join(config_dir, "filtered_tidy_config.yaml") - filter_configs(args.project_config_file, filtered_config) - result_config_file = tidy_config_validation.merge_tidy_configs( - base_config_path=args.default_config_file, - additional_config_path=filtered_config, - result_config_path=result_config, - ) - compile_command_path = generate_compilation_database(clang_cmd, args.source_root, args.testing_src, db_tmpdir) - - cmd = [ - clang_tidy_bin, - args.testing_src, - "-p", - compile_command_path, - "--warnings-as-errors", - "*", - "--config-file", - result_config_file, - "--header-filter", - header_filter, - "--use-color", - "--enable-check-profile", - "--store-check-profile={}".format(profile_tmpdir), - ] - if args.export_fixes == "yes": - cmd += ["--export-fixes", fixes_file] - - if args.checks: - cmd += ["--checks", args.checks] - - print("cmd: {}".format(' '.join(cmd))) - res = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out, err = res.communicate() - out = out.replace(args.source_root, "$(SOURCE_ROOT)") - profile = load_profile(profile_tmpdir) - testing_src = os.path.relpath(args.testing_src, args.source_root) - tidy_fixes = load_fixes(fixes_file) - - with open(output_json, "wb") as afile: - json.dump( - { - "file": testing_src, - "exit_code": res.returncode, - "profile": profile, - "stderr": err, - "stdout": out, - "fixes": tidy_fixes, - }, - afile, - ) - - -if __name__ == "__main__": - main() |