1
0
Fork 0
mirror of https://github.com/anrieff/libcpuid synced 2025-10-13 11:10:39 +00:00

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.
This commit is contained in:
Veselin Georgiev 2020-05-28 19:55:48 +03:00
commit 52c5f505cf
3 changed files with 48 additions and 50 deletions

View file

@ -1,9 +1,9 @@
#!/usr/bin/env python2.7 #!/usr/bin/env python3
import os, sys, re, glob import os, sys, re, glob
if len(sys.argv) != 2: if len(sys.argv) != 2:
print "Usage: check-consistency <path>" print("Usage: check-consistency <path>")
sys.exit(0) sys.exit(0)
err = 0 err = 0
@ -37,24 +37,24 @@ def getConstant(constantName):
return value return value
def checkEnumSize(enumName, constantName): def checkEnumSize(enumName, constantName):
print "Checking enum `%s':" % enumName, print("Checking enum `%s':" % enumName, end=' ')
count = len(getEnumElements(enumName)) - 1 count = len(getEnumElements(enumName)) - 1
themax = getConstant(constantName) 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: if count > themax:
err += 1 err += 1
print "FAILED" print("FAILED")
global firstError global firstError
firstError = False firstError = False
else: else:
print "OK" print("OK")
checkEnumSize("cpu_feature_t", "CPU_FLAGS_MAX") checkEnumSize("cpu_feature_t", "CPU_FLAGS_MAX")
checkEnumSize("cpu_hint_t", "CPU_HINTS_MAX") checkEnumSize("cpu_hint_t", "CPU_HINTS_MAX")
checkEnumSize("cpu_sgx_feature_t", "SGX_FLAGS_MAX") checkEnumSize("cpu_sgx_feature_t", "SGX_FLAGS_MAX")
rexp = re.compile('.*{ CPU_FEATURE_([^,]+), "([^"]+)".*}.*') rexp = re.compile('.*{ CPU_FEATURE_([^,]+), "([^"]+)".*}.*')
print "Finding features:" print("Finding features:")
for fn in glob.glob("%s/*.c" % sys.argv[1]): for fn in glob.glob("%s/*.c" % sys.argv[1]):
f = open(fn, "rt") f = open(fn, "rt")
line = 1 line = 1
@ -63,15 +63,13 @@ for fn in glob.glob("%s/*.c" % sys.argv[1]):
if rexp.match(s): if rexp.match(s):
nfeat += 1 nfeat += 1
res = rexp.findall(s) res = rexp.findall(s)
if len(res) > 1: assert len(res) == 1, "Too many matches"
err += 1
raise "..Too many matches"
if res[0][0].lower() != res[0][1]: if res[0][0].lower() != res[0][1]:
err += 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 line += 1
if nfeat: if nfeat:
print " %s: %d features described" % (os.path.basename(fn), nfeat) print(" %s: %d features described" % (os.path.basename(fn), nfeat))
f.close() f.close()
# Check whether all features are converted by cpu_feature_str(): # Check whether all features are converted by cpu_feature_str():
@ -93,19 +91,19 @@ for s in f.readlines():
entry = rexp.findall(s)[0] entry = rexp.findall(s)[0]
if entry in impf: if entry in impf:
err += 1 err += 1
print "cpu_feature_str(): duplicate entry: %s" % entry print("cpu_feature_str(): duplicate entry: %s" % entry)
impf.append(entry) impf.append(entry)
f.close() 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: for feature in allf:
if not feature in impf: if not feature in impf:
err += 1 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: # 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 firstError = True
files_code = {} files_code = {}
@ -129,22 +127,22 @@ for feature in allf:
matching_files.append(fn) matching_files.append(fn)
if len(matching_files) == 0 and feature not in features_whitelist: if len(matching_files) == 0 and feature not in features_whitelist:
if firstError: if firstError:
print "FAILED:" print("FAILED:")
firstError = False firstError = False
err += 1 err += 1
print "..No detection code for %s" % feature print("..No detection code for %s" % feature)
if len(matching_files) > 1: if len(matching_files) > 1:
if firstError: if firstError:
print "FAILED:" print("FAILED:")
firstError = False firstError = False
err += 1 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: if firstError:
print "All OK." print("All OK.")
print "" print("")
print "Checking processor definitions:" print("Checking processor definitions:")
cache_exp = re.compile(".*([\(/ ][0-9]+K).*") cache_exp = re.compile(".*([\(/ ][0-9]+K).*")
# Check whether CPU codenames for consistency: # Check whether CPU codenames for consistency:
# - Codenames should not exceed 31 characters # - Codenames should not exceed 31 characters
@ -174,26 +172,26 @@ for fn in glob.glob("%s/*.c" % sys.argv[1]):
s = parts[10].strip() s = parts[10].strip()
if s[0] != '"' or s[-1] != '"': if s[0] != '"' or s[-1] != '"':
err += 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 allok = False
continue continue
s = s[1:-1] s = s[1:-1]
if len(s) > 31: if len(s) > 31:
err += 1 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 allok = False
if cache_exp.match(s): if cache_exp.match(s):
cache_size = cache_exp.findall(s)[0][1:-1] cache_size = cache_exp.findall(s)[0][1:-1]
if not cache_size in common_cache_sizes: if not cache_size in common_cache_sizes:
err += 1 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 allok = False
if cdefs: if cdefs:
print " %s: %d processor definitions," % (bfn, cdefs), print(" %s: %d processor definitions," % (bfn, cdefs), end=' ')
if allok: if allok:
print "all OK" print("all OK")
else: else:
print "some errors/warnings" print("some errors/warnings")
f.close() f.close()
sys.exit(err) sys.exit(err)

View file

@ -1,12 +1,12 @@
#!/usr/bin/env python2.7 #!/usr/bin/env python3
import os, sys, re import os, sys, re
args = sys.argv args = sys.argv
if len(args) != 3: if len(args) != 3:
print "Usage: create_test.py <rawdata file> <report file>" print("Usage: create_test.py <rawdata file> <report file>")
print "The .test file is written to stdout." print("The .test file is written to stdout.")
sys.exit(1) sys.exit(1)
def readRawFile(): def readRawFile():
@ -57,4 +57,4 @@ def readResultFile():
delimiter = "-" * 80 delimiter = "-" * 80
lines = readRawFile() + [delimiter] + readResultFile() lines = readRawFile() + [delimiter] + readResultFile()
sys.stdout.writelines(map(lambda s: s + "\n", lines)) sys.stdout.writelines([s + "\n" for s in lines])

View file

@ -1,6 +1,6 @@
#!/usr/bin/env python2.7 #!/usr/bin/env python3
from __future__ import with_statement
import os, sys, re, random import os, sys, re, random
@ -16,7 +16,7 @@ fix = False
show_test_fast_warning = False show_test_fast_warning = False
if len(args) < 3: if len(args) < 3:
print """ print("""
Usage: run_tests.py <cpuid_tool binary> <test file/dir> [test file/dir ...] [OPTIONS] Usage: run_tests.py <cpuid_tool binary> <test file/dir> [test file/dir ...] [OPTIONS]
If a test file is given, it is tested by itself. 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 If the --fix option is given, the behaviour of the cpuid_tool binary is deemed correct
and any failing tests are updated. and any failing tests are updated.
""" """)
sys.exit(1) sys.exit(1)
filelist = [] filelist = []
@ -51,12 +51,12 @@ for arg in args[2:]:
# warnings when you attempt to use that :( # warnings when you attempt to use that :(
def make_tempname(prefix): def make_tempname(prefix):
chars = "" chars = ""
for i in xrange(26): for i in range(26):
chars += chr(97+i) chars += chr(97+i)
chars += chr(65+i) chars += chr(65+i)
for i in xrange(10): for i in range(10):
chars += chr(48+i) chars += chr(48+i)
for i in xrange(6): for i in range(6):
prefix += random.choice(chars) prefix += random.choice(chars)
return prefix return prefix
@ -66,24 +66,24 @@ def fmt_error(err):
def fixFile(filename, input_lines, output_lines): def fixFile(filename, input_lines, output_lines):
f = open(filename, "wt") 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.write("--------------------------------------------------------------------------------\n")
f.writelines(map(lambda s: s + "\n", output_lines)) f.writelines([s + "\n" for s in output_lines])
f.close() f.close()
def do_test(inp, expected_out, binary, test_file_name): def do_test(inp, expected_out, binary, test_file_name):
fninp = make_tempname("cpuidin") fninp = make_tempname("cpuidin")
fnoutp = make_tempname("cpuidout") fnoutp = make_tempname("cpuidout")
f = open(fninp, "wt") f = open(fninp, "wt")
f.writelines(map(lambda s: s + "\n", inp)) f.writelines([s + "\n" for s in inp])
f.close() 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.system(cmd)
os.unlink(fninp) os.unlink(fninp)
real_out = [] real_out = []
try: try:
f = open(fnoutp, "rt") f = open(fnoutp, "rt")
real_out = map(lambda s: s.strip(), f.readlines()) real_out = [s.strip() for s in f.readlines()]
f.close() f.close()
os.unlink(fnoutp) os.unlink(fnoutp)
except IOError: 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]) return "Mismatch in fields:\n%s" % "\n".join([fmt_error(err) for err in err_fields])
errors = False errors = False
print "Testing..." print("Testing...")
for test_file_name in filelist: for test_file_name in filelist:
current_input = [] current_input = []
current_output = [] current_output = []
@ -120,15 +120,15 @@ for test_file_name in filelist:
current_input.append(line.strip()) current_input.append(line.strip())
#codename = current_output[len(current_output) - 2] #codename = current_output[len(current_output) - 2]
result = do_test(current_input, current_output, cpuid_tool, test_file_name) 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": if result != "OK":
errors = True errors = True
build_output = False build_output = False
if errors: if errors:
if show_test_fast_warning: if show_test_fast_warning:
print """ print("""
You're running tests in fast mode; before taking any action on the errors 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: else:
print "All successfull!" print("All successfull!")