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:
parent
0419610804
commit
52c5f505cf
3 changed files with 48 additions and 50 deletions
|
@ -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)
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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!")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue