xref: /xnu-12377.41.6/tests/unit/tools/merge_cmds_json.py (revision bbb1b6f9e71b8cdde6e5cd6f4841f207dee3d828)
1*bbb1b6f9SApple OSS Distributions#!/usr/bin/env python3
2*bbb1b6f9SApple OSS Distributionsimport sys
3*bbb1b6f9SApple OSS Distributionsimport os
4*bbb1b6f9SApple OSS Distributionsimport glob
5*bbb1b6f9SApple OSS Distributions
6*bbb1b6f9SApple OSS Distributionsdef main():
7*bbb1b6f9SApple OSS Distributions    xnu_root = sys.argv[1]
8*bbb1b6f9SApple OSS Distributions    xnu_build_dir = sys.argv[2]
9*bbb1b6f9SApple OSS Distributions    tests_obj_dir = sys.argv[3]
10*bbb1b6f9SApple OSS Distributions
11*bbb1b6f9SApple OSS Distributions    xnu_json = os.path.join(xnu_build_dir, "compile_commands.json")
12*bbb1b6f9SApple OSS Distributions    if not os.path.exists(xnu_json):
13*bbb1b6f9SApple OSS Distributions        print(f"did not find xnu build json: {xnu_json}")
14*bbb1b6f9SApple OSS Distributions        return 0
15*bbb1b6f9SApple OSS Distributions    root_json = os.path.join(xnu_root, "compile_commands.json")
16*bbb1b6f9SApple OSS Distributions
17*bbb1b6f9SApple OSS Distributions    if os.path.exists(root_json):
18*bbb1b6f9SApple OSS Distributions        if not os.path.islink(root_json):
19*bbb1b6f9SApple OSS Distributions            print(f"root json is not a symlink, not removing it: {root_json}")
20*bbb1b6f9SApple OSS Distributions            return 0
21*bbb1b6f9SApple OSS Distributions
22*bbb1b6f9SApple OSS Distributions    add_text = ""
23*bbb1b6f9SApple OSS Distributions    for filename in glob.glob(os.path.join(tests_obj_dir, "*.json")):
24*bbb1b6f9SApple OSS Distributions        if filename.endswith("compile_commands.json"):
25*bbb1b6f9SApple OSS Distributions            continue
26*bbb1b6f9SApple OSS Distributions        print(f"found {filename}")
27*bbb1b6f9SApple OSS Distributions        text = open(filename).read()
28*bbb1b6f9SApple OSS Distributions        add_text += text
29*bbb1b6f9SApple OSS Distributions    add_text = add_text.rstrip()
30*bbb1b6f9SApple OSS Distributions    if add_text[-1] == ',':
31*bbb1b6f9SApple OSS Distributions        add_text = add_text[:-1]
32*bbb1b6f9SApple OSS Distributions
33*bbb1b6f9SApple OSS Distributions    if len(add_text) == 0:
34*bbb1b6f9SApple OSS Distributions        print(f"did not find any json files in {tests_obj_dir}")
35*bbb1b6f9SApple OSS Distributions        return 0
36*bbb1b6f9SApple OSS Distributions
37*bbb1b6f9SApple OSS Distributions    xnu_j = open(xnu_json).read()
38*bbb1b6f9SApple OSS Distributions    if xnu_j[-3:] != "\n]\n":
39*bbb1b6f9SApple OSS Distributions        print(f"doesn't look like a legit compile_commands.json: {xnu_json}")
40*bbb1b6f9SApple OSS Distributions        return 0
41*bbb1b6f9SApple OSS Distributions
42*bbb1b6f9SApple OSS Distributions    xnu_j_mod = xnu_j[:-3] + ",\n\n" + add_text + "]\n"
43*bbb1b6f9SApple OSS Distributions
44*bbb1b6f9SApple OSS Distributions    tests_json = os.path.join(tests_obj_dir, "compile_commands.json")
45*bbb1b6f9SApple OSS Distributions    open(tests_json, "w").write(xnu_j_mod)
46*bbb1b6f9SApple OSS Distributions    print(f"saved {tests_json}")
47*bbb1b6f9SApple OSS Distributions
48*bbb1b6f9SApple OSS Distributions    if os.path.exists(root_json):
49*bbb1b6f9SApple OSS Distributions        print(f"removing old link {root_json}")
50*bbb1b6f9SApple OSS Distributions        os.unlink(root_json)
51*bbb1b6f9SApple OSS Distributions    os.symlink(tests_json, root_json)
52*bbb1b6f9SApple OSS Distributions    print(f"added link {root_json}")
53*bbb1b6f9SApple OSS Distributions
54*bbb1b6f9SApple OSS Distributions
55*bbb1b6f9SApple OSS Distributionsif __name__ == "__main__":
56*bbb1b6f9SApple OSS Distributions    sys.exit(main())