From 52c5f505cff57266b32aa8eb95eb7c7fc47db94b Mon Sep 17 00:00:00 2001 From: Veselin Georgiev Date: Thu, 28 May 2020 19:55:48 +0300 Subject: [PATCH] Related to c2645d0. Convert all python scripts to Python 3. As stated in discussion, Python 2 is actively being deprecated and the fix is easy, almost automatic. --- libcpuid/check-consistency.py | 56 +++++++++++++++++------------------ tests/create_test.py | 8 ++--- tests/run_tests.py | 34 ++++++++++----------- 3 files changed, 48 insertions(+), 50 deletions(-) diff --git a/libcpuid/check-consistency.py b/libcpuid/check-consistency.py index d8f2331..a73d0fd 100755 --- a/libcpuid/check-consistency.py +++ b/libcpuid/check-consistency.py @@ -1,9 +1,9 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python3 import os, sys, re, glob if len(sys.argv) != 2: - print "Usage: check-consistency " + print("Usage: check-consistency ") sys.exit(0) err = 0 @@ -37,24 +37,24 @@ def getConstant(constantName): return value def checkEnumSize(enumName, constantName): - print "Checking enum `%s':" % enumName, + print("Checking enum `%s':" % enumName, end=' ') count = len(getEnumElements(enumName)) - 1 themax = getConstant(constantName) - print "%d elements; max size (%s=%d)..." % (count, constantName, themax), + print("%d elements; max size (%s=%d)..." % (count, constantName, themax), end=' ') if count > themax: err += 1 - print "FAILED" + print("FAILED") global firstError firstError = False else: - print "OK" + print("OK") checkEnumSize("cpu_feature_t", "CPU_FLAGS_MAX") checkEnumSize("cpu_hint_t", "CPU_HINTS_MAX") checkEnumSize("cpu_sgx_feature_t", "SGX_FLAGS_MAX") rexp = re.compile('.*{ CPU_FEATURE_([^,]+), "([^"]+)".*}.*') -print "Finding features:" +print("Finding features:") for fn in glob.glob("%s/*.c" % sys.argv[1]): f = open(fn, "rt") line = 1 @@ -63,15 +63,13 @@ for fn in glob.glob("%s/*.c" % sys.argv[1]): if rexp.match(s): nfeat += 1 res = rexp.findall(s) - if len(res) > 1: - err += 1 - raise "..Too many matches" + assert len(res) == 1, "Too many matches" if res[0][0].lower() != res[0][1]: err += 1 - print "..Mismatch - %s:%d - `%s' vs `%s'" % (os.path.basename(fn), line, res[0][0], res[0][1]) + print("..Mismatch - %s:%d - `%s' vs `%s'" % (os.path.basename(fn), line, res[0][0], res[0][1])) line += 1 if nfeat: - print " %s: %d features described" % (os.path.basename(fn), nfeat) + print(" %s: %d features described" % (os.path.basename(fn), nfeat)) f.close() # Check whether all features are converted by cpu_feature_str(): @@ -93,19 +91,19 @@ for s in f.readlines(): entry = rexp.findall(s)[0] if entry in impf: err += 1 - print "cpu_feature_str(): duplicate entry: %s" % entry + print("cpu_feature_str(): duplicate entry: %s" % entry) impf.append(entry) f.close() -print "Found %d total features and %d named features" % (len(allf), len(impf)) +print("Found %d total features and %d named features" % (len(allf), len(impf))) for feature in allf: if not feature in impf: err += 1 - print "cpu_feature_str(): don't have entry for %s" % feature + print("cpu_feature_str(): don't have entry for %s" % feature) # Check whether all features have detection code: -print "Checking whether all features have detection code...", +print("Checking whether all features have detection code...", end=' ') firstError = True files_code = {} @@ -129,22 +127,22 @@ for feature in allf: matching_files.append(fn) if len(matching_files) == 0 and feature not in features_whitelist: if firstError: - print "FAILED:" + print("FAILED:") firstError = False err += 1 - print "..No detection code for %s" % feature + print("..No detection code for %s" % feature) if len(matching_files) > 1: if firstError: - print "FAILED:" + print("FAILED:") firstError = False err += 1 - print "..Conflicting detection code for %s in files %s" % (feature, " and ".join(matching_files)) + print("..Conflicting detection code for %s in files %s" % (feature, " and ".join(matching_files))) if firstError: - print "All OK." -print "" + print("All OK.") +print("") -print "Checking processor definitions:" +print("Checking processor definitions:") cache_exp = re.compile(".*([\(/ ][0-9]+K).*") # Check whether CPU codenames for consistency: # - Codenames should not exceed 31 characters @@ -174,26 +172,26 @@ for fn in glob.glob("%s/*.c" % sys.argv[1]): s = parts[10].strip() if s[0] != '"' or s[-1] != '"': err += 1 - print "..Warning, %s:%d - cannot correctly handle the cpu codename" % (bfn, nline) + print("..Warning, %s:%d - cannot correctly handle the cpu codename" % (bfn, nline)) allok = False continue s = s[1:-1] if len(s) > 31: err += 1 - print "..%s:%d - codename (%s) is longer than 31 characters!" % (bfn, nline, s) + print("..%s:%d - codename (%s) is longer than 31 characters!" % (bfn, nline, s)) allok = False if cache_exp.match(s): cache_size = cache_exp.findall(s)[0][1:-1] if not cache_size in common_cache_sizes: err += 1 - print "..Warning, %s:%d - suspicious cache size in codename [%s] (%s)" % (bfn, nline, s, cache_size) + print("..Warning, %s:%d - suspicious cache size in codename [%s] (%s)" % (bfn, nline, s, cache_size)) allok = False if cdefs: - print " %s: %d processor definitions," % (bfn, cdefs), + print(" %s: %d processor definitions," % (bfn, cdefs), end=' ') if allok: - print "all OK" + print("all OK") else: - print "some errors/warnings" + print("some errors/warnings") f.close() sys.exit(err) diff --git a/tests/create_test.py b/tests/create_test.py index c667d45..85f8f6c 100755 --- a/tests/create_test.py +++ b/tests/create_test.py @@ -1,12 +1,12 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python3 import os, sys, re args = sys.argv if len(args) != 3: - print "Usage: create_test.py " - print "The .test file is written to stdout." + print("Usage: create_test.py ") + print("The .test file is written to stdout.") sys.exit(1) def readRawFile(): @@ -57,4 +57,4 @@ def readResultFile(): delimiter = "-" * 80 lines = readRawFile() + [delimiter] + readResultFile() -sys.stdout.writelines(map(lambda s: s + "\n", lines)) +sys.stdout.writelines([s + "\n" for s in lines]) diff --git a/tests/run_tests.py b/tests/run_tests.py index 9978b43..23aaa70 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python3 + -from __future__ import with_statement import os, sys, re, random @@ -16,7 +16,7 @@ fix = False show_test_fast_warning = False if len(args) < 3: - print """ + print(""" Usage: run_tests.py [test file/dir ...] [OPTIONS] If a test file is given, it is tested by itself. @@ -24,7 +24,7 @@ If a directory is given, process all *.test files there, subdirectories included If the --fix option is given, the behaviour of the cpuid_tool binary is deemed correct and any failing tests are updated. -""" +""") sys.exit(1) filelist = [] @@ -51,12 +51,12 @@ for arg in args[2:]: # warnings when you attempt to use that :( def make_tempname(prefix): chars = "" - for i in xrange(26): + for i in range(26): chars += chr(97+i) chars += chr(65+i) - for i in xrange(10): + for i in range(10): chars += chr(48+i) - for i in xrange(6): + for i in range(6): prefix += random.choice(chars) return prefix @@ -66,24 +66,24 @@ def fmt_error(err): def fixFile(filename, input_lines, output_lines): f = open(filename, "wt") - f.writelines(map(lambda s: s + "\n", input_lines)) + f.writelines([s + "\n" for s in input_lines]) f.write("--------------------------------------------------------------------------------\n") - f.writelines(map(lambda s: s + "\n", output_lines)) + f.writelines([s + "\n" for s in output_lines]) f.close() def do_test(inp, expected_out, binary, test_file_name): fninp = make_tempname("cpuidin") fnoutp = make_tempname("cpuidout") f = open(fninp, "wt") - f.writelines(map(lambda s: s + "\n", inp)) + f.writelines([s + "\n" for s in inp]) f.close() - cmd = "%s --load=%s --outfile=%s %s" % (binary, fninp, fnoutp, " ".join(map(lambda s: "--" + s, fields))) + cmd = "%s --load=%s --outfile=%s %s" % (binary, fninp, fnoutp, " ".join(["--" + s for s in fields])) os.system(cmd) os.unlink(fninp) real_out = [] try: f = open(fnoutp, "rt") - real_out = map(lambda s: s.strip(), f.readlines()) + real_out = [s.strip() for s in f.readlines()] f.close() os.unlink(fnoutp) except IOError: @@ -104,7 +104,7 @@ def do_test(inp, expected_out, binary, test_file_name): return "Mismatch in fields:\n%s" % "\n".join([fmt_error(err) for err in err_fields]) errors = False -print "Testing..." +print("Testing...") for test_file_name in filelist: current_input = [] current_output = [] @@ -120,15 +120,15 @@ for test_file_name in filelist: current_input.append(line.strip()) #codename = current_output[len(current_output) - 2] result = do_test(current_input, current_output, cpuid_tool, test_file_name) - print "Test [%s]: %s" % (test_file_name[:-5], result) + print("Test [%s]: %s" % (test_file_name[:-5], result)) if result != "OK": errors = True build_output = False if errors: if show_test_fast_warning: - print """ + print(""" You're running tests in fast mode; before taking any action on the errors -above, please confirm that the slow mode ('make test-old') also fails.""" +above, please confirm that the slow mode ('make test-old') also fails.""") else: - print "All successfull!" + print("All successfull!")