diff options
-rw-r--r-- | etc/scripts/orphancompiler.py | 56 |
1 files changed, 49 insertions, 7 deletions
diff --git a/etc/scripts/orphancompiler.py b/etc/scripts/orphancompiler.py index 284372eee..809947719 100644 --- a/etc/scripts/orphancompiler.py +++ b/etc/scripts/orphancompiler.py @@ -28,12 +28,17 @@ from os.path import isfile, join import re COMPILERS_LIST_RE = re.compile(r'compilers=(.*)') -ALIAS_LIST_RE = re.compile(r'compiler.\.*?\.alias=(.*)') +ALIAS_LIST_RE = re.compile(r'alias=(.*)') GROUP_NAME_RE = re.compile(r'group\.(.*?)\.') COMPILER_EXE_RE = re.compile(r'compiler\.(.*?)\.exe') FORMATTERS_LIST_RE = re.compile(r'formatters=(.*)') FORMATTER_EXE_RE = re.compile(r'formatter\.(.*?)\.exe') -EMPTY_LIST_RE = re.compile(r'.*(compilers|formatters|versions)=.*::.*') +LIBS_LIST_RE = re.compile(r'libs=(.+)') +LIB_VERSIONS_LIST_RE = re.compile(r'libs\.(.*?)\.versions=(.*)') +LIB_VERSION_RE = re.compile(r'libs\.(.*?)\.versions\.(.*?)\.version') +TOOLS_LIST_RE = re.compile(r'tools=(.+)') +TOOL_EXE_RE = re.compile(r'tools\.(.*?)\.exe') +EMPTY_LIST_RE = re.compile(r'.*(compilers|formatters|versions|tools|alias)=.*::.*') DISABLED_RE = re.compile(r'^# Disabled:\s*(.*)') @@ -58,10 +63,20 @@ def process_file(file: str): seen_compilers = set() listed_formatters = set() seen_formatters = set() + listed_tools = set() + seen_tools = set() + listed_libs_ids = set() + seen_libs_ids = set() + listed_libs_versions = set() + seen_libs_versions = set() empty_separators = set() disabled = set() with open(file) as f: for line in f: + match_empty = EMPTY_LIST_RE.match(line) + if match_empty: + empty_separators.add(f"{line}") + match_compilers = COMPILERS_LIST_RE.search(line) if match_compilers: ids = match_compilers.group(1).split(':') @@ -71,23 +86,45 @@ def process_file(file: str): elif '@' not in elem_id: listed_compilers.add(elem_id) - match_empty = EMPTY_LIST_RE.match(line) - if match_empty: - empty_separators.add(f"{line}") + match_libs_versions = LIB_VERSIONS_LIST_RE.match(line) + if match_libs_versions: + lib_id = match_libs_versions.group(1) + versions = match_libs_versions.group(2).split(':') + seen_libs_ids.add(lib_id) + listed_libs_versions.update([f"{lib_id} {v}" for v in versions]) + + match_libs_version = LIB_VERSION_RE.match(line) + if match_libs_version: + lib_id = match_libs_version.group(1) + version = match_libs_version.group(2) + seen_libs_versions.add(f"{lib_id} {version}") if( match_and_add(line, GROUP_NAME_RE, seen_groups) or match_and_add(line, COMPILER_EXE_RE, seen_compilers) or match_and_add(line, FORMATTER_EXE_RE, seen_formatters) or + match_and_add(line, TOOL_EXE_RE, seen_tools) or match_and_update(line, ALIAS_LIST_RE, seen_compilers) or match_and_update(line, FORMATTERS_LIST_RE, listed_formatters) or + match_and_update(line, TOOLS_LIST_RE, listed_tools) or + match_and_update(line, LIBS_LIST_RE, listed_libs_ids) or match_and_update(line, DISABLED_RE, disabled, ' ') ): continue bad_compilers = listed_compilers.symmetric_difference(seen_compilers) bad_groups = listed_groups.symmetric_difference(seen_groups) bad_formatters = listed_formatters.symmetric_difference(seen_formatters) - return file, bad_compilers - disabled, bad_groups - disabled, bad_formatters - disabled, empty_separators + bad_libs_ids = listed_libs_ids.symmetric_difference(seen_libs_ids) + bad_libs_versions = listed_libs_versions.symmetric_difference(seen_libs_versions) + bad_tools = listed_tools.symmetric_difference(seen_tools) + return (file, + bad_compilers - disabled, + bad_groups - disabled, + bad_formatters - disabled, + bad_libs_ids - disabled, + bad_libs_versions - disabled, + bad_tools - disabled, + empty_separators) def process_folder(folder: str): @@ -101,11 +138,13 @@ def process_folder(folder: str): def problems_found(file_result): return any([len(r) for r in file_result[1:]]) + def print_issue(name, result): if len(result) > 0: sep = "\n\t" print(f"{name}:\n\t{sep.join(sorted(result))}") + def find_orphans(folder: str): result = sorted([r for r in process_folder(folder) if problems_found(r)], key=lambda x: x[0]) if result: @@ -115,7 +154,10 @@ def find_orphans(folder: str): print_issue("COMPILERS", r[1]) print_issue("GROUPS", r[2]) print_issue("FORMATTERS", r[3]) - print_issue("EMPTY LISTINGS", r[4]) + print_issue("LIB IDS", r[4]) + print_issue("LIB VERSIONS", r[5]) + print_issue("TOOLS", r[6]) + print_issue("EMPTY LISTINGS", r[7]) print("") print("To suppress this warning on IDs that are temporally disabled, " "add one or more comments to each listed file:") |