diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 376359ccf2e..5d36dffa801 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -100,8 +100,6 @@ jobs: run: make smelly - name: Check limited ABI symbols run: make check-limited-abi - - name: Check global objects - run: make check-global-objects build_win32: name: 'Windows (x86)' diff --git a/Makefile.pre.in b/Makefile.pre.in index 9b08929dd67..2464bbdf2dd 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -2436,9 +2436,6 @@ patchcheck: @DEF_MAKE_RULE@ check-limited-abi: all $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py --all $(srcdir)/Misc/stable_abi.txt -check-global-objects: all - $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/generate_global_objects.py --check - .PHONY: update-config update-config: curl -sL -o config.guess 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' diff --git a/Tools/scripts/generate_global_objects.py b/Tools/scripts/generate_global_objects.py index e989f3c086f..7a5f42f0d32 100644 --- a/Tools/scripts/generate_global_objects.py +++ b/Tools/scripts/generate_global_objects.py @@ -252,147 +252,10 @@ def generate_runtime_init(identifiers, strings): printer.write(after) -####################################### -# checks - -def err(msg): - print(msg, file=sys.stderr) - - -GETTER_RE = re.compile(r''' - ^ - .*? - (?: - (?: - _Py_ID - [(] - ( \w+ ) # - [)] - ) - | - (?: - _Py_STR - [(] - ( \w+ ) # - [)] - ) - ) -''', re.VERBOSE) -TYPESLOTS_RE = re.compile(r''' - ^ - .*? - (?: - (?: - SLOT0 [(] .*?, \s* - ( \w+ ) # - [)] - ) - | - (?: - SLOT1 [(] .*?, \s* - ( \w+ ) # - , .* [)] - ) - | - (?: - SLOT1BIN [(] .*?, .*?, \s* - ( \w+ ) # - , \s* - ( \w+ ) # - [)] - ) - | - (?: - SLOT1BINFULL [(] .*?, .*?, .*?, \s* - ( \w+ ) # - , \s* - ( \w+ ) # - [)] - ) - | - ( SLOT \d .* [^)] $ ) # - ) -''', re.VERBOSE) - -def check_orphan_strings(identifiers): - literals = set(n for n, s in STRING_LITERALS.items() if s) - identifiers = set(identifiers) - files = glob.iglob(os.path.join(ROOT, '**', '*.[ch]'), recursive=True) - for i, filename in enumerate(files, start=1): - print('.', end='') - if i % 5 == 0: - print(' ', end='') - if i % 20 == 0: - print() - if i % 100 == 0: - print() - with open(filename) as infile: - wrapped = None - for line in infile: - identifier = literal = reverse = None - - line = line.splitlines()[0] - if wrapped: - line = f'{wrapped.rstrip()} {line}' - wrapped = None - - if os.path.basename(filename) == '_warnings.c': - m = re.match(r'^.* = GET_WARNINGS_ATTR[(][^,]*, (\w+),', line) - if m: - identifier, = m.groups() - elif os.path.basename(filename) == 'typeobject.c': - m = TYPESLOTS_RE.match(line) - if m: - (slot0, - slot1, - slot1bin, reverse, - slot1binfull, fullreverse, - wrapped, - ) = m.groups() - identifier = slot0 or slot1 or slot1bin or slot1binfull - reverse = reverse or fullreverse - - if not identifier and not literal: - m = GETTER_RE.match(line) - if not m: - continue - identifier, literal = m.groups() - - if literal: - if literals and literal in literals: - literals.remove(literal) - if identifier: - if identifiers and identifier in identifiers: - identifiers.remove(identifier) - if reverse: - if identifiers and reverse in identifiers: - identifiers.remove(reverse) - if not literals and not identifiers: - break - else: - continue - break - if i % 20: - print() - if not literals and not identifiers: - return - print('ERROR:', file=sys.stderr) - if literals: - err(' unused global string literals:') - for name in sorted(literals): - err(f' {name}') - if identifiers: - if literals: - print() - err(' unused global identifiers:') - for name in sorted(identifiers): - err(f' {name}') - - ####################################### # the script -def main(*, check=False) -> None: +def main() -> None: identifiers = set(IDENTIFIERS) strings = dict(STRING_LITERALS) for name, string, filename, lno, _ in iter_global_strings(): @@ -408,13 +271,9 @@ def main(*, check=False) -> None: generate_global_strings(identifiers, strings) generate_runtime_init(identifiers, strings) - if check: - check_orphan_strings(identifiers) - if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() - parser.add_argument('--check', action='store_true') args = parser.parse_args() main(**vars(args))