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())