mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
* new code * update goal_src and remove all_imports * update reference * add decompiler list of imports * deduplicate and move below decomp begins
79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
|
|
import os
|
|
import glob
|
|
import argparse
|
|
import re
|
|
import json
|
|
|
|
def get_goal_files(root_dir, ext = "*.gc"):
|
|
"""Get all GOAL source files under root_dir."""
|
|
return [goal_file for file in os.walk(root_dir) for goal_file in glob.glob(os.path.join(file[0], ext))]
|
|
|
|
def get_sgs(goal_file):
|
|
"""Get a list of all the skel groups defined in the file, excluding the -sg and *'s."""
|
|
with open(goal_file, "r") as f:
|
|
text = f.read()
|
|
# given "(defskelgroup *foo* bar", will match "bar"
|
|
matches = re.findall(r'\(defskelgroup \*[\w-]+-sg\* ([\w-]+)', text)
|
|
return matches
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(dest='goal_src', help='the goal_src folder')
|
|
args = parser.parse_args()
|
|
all_import_files = get_goal_files(os.path.join(args.goal_src, "import"))
|
|
all_files = get_goal_files(args.goal_src)
|
|
all_non_import_files = list(set(all_files) - set(all_import_files))
|
|
|
|
output_json = {}
|
|
to_modify = {}
|
|
|
|
import_map = {}
|
|
for import_file in all_import_files:
|
|
base = os.path.basename(import_file)
|
|
# make sure extention is -ag.gc
|
|
assert base[-6:] == "-ag.gc"
|
|
base_no_extension = base[:-6]
|
|
import_map[base_no_extension] = "goal_src/import/" + import_file.split("import/")[1]
|
|
# print(import_map)
|
|
|
|
# sg_locations = {}
|
|
for source_file in all_non_import_files:
|
|
sgs = get_sgs(source_file)
|
|
deps = set()
|
|
for sg in sgs:
|
|
if sg not in import_map:
|
|
print("missing: ", sg)
|
|
else:
|
|
deps.add(import_map[sg])
|
|
if len(deps) > 0:
|
|
output_json[os.path.basename(source_file)[:-3]] = list(deps)
|
|
to_modify[source_file] = deps
|
|
|
|
# uncomment to modify files
|
|
# for file, deps in to_modify.items():
|
|
# print("modifying ", file, deps)
|
|
# with open(file, "r") as f:
|
|
# lines = f.readlines()
|
|
# to_add = [] # ["\n"]
|
|
# for dep in deps:
|
|
# to_add.append("(import \"{}\")\n".format(dep))
|
|
# print(to_add)
|
|
# added = False
|
|
# for i, line in enumerate(lines):
|
|
# if ";; decomp begins" in line.lower():
|
|
# lines[i+1:i+1] = to_add
|
|
# added = True
|
|
# break
|
|
# if not added:
|
|
# lines[6:6] = to_add
|
|
# assert lines[1] == "(in-package goal)\n"
|
|
# with open(file, "w") as f:
|
|
# f.writelines(lines)
|
|
|
|
# uncomment to print json.
|
|
# print(json.dumps(output_json, indent=4))
|
|
|
|
if __name__ == "__main__":
|
|
main() |