mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
0e35d74193
build_xc job uses compare_cc_results.py to compare cache files, the cache files are stringified hash maps, the results in python 3.4 don't compare well due to inconsistent order of dict key/value pairs when the cache files are created. While comparing the file contents works fine in python3.6 it fails with python3.4. This patch detects problematic dict lines and rewrites the value for comparison Signed-off-by: Noel Power <noel.power@suse.com> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
67 lines
2.0 KiB
Python
Executable File
67 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
#
|
|
# Compare the results of native and cross-compiled configure tests
|
|
#
|
|
|
|
from __future__ import print_function
|
|
import sys
|
|
import difflib
|
|
|
|
exceptions = [
|
|
'BUILD_DIRECTORY', 'SELFTEST_PREFIX', 'defines',
|
|
'CROSS_COMPILE', 'CROSS_ANSWERS', 'CROSS_EXECUTE',
|
|
'LIBSOCKET_WRAPPER_SO_PATH',
|
|
'LIBNSS_WRAPPER_SO_PATH',
|
|
'LIBPAM_WRAPPER_SO_PATH',
|
|
'PAM_SET_ITEMS_SO_PATH',
|
|
'LIBUID_WRAPPER_SO_PATH',
|
|
'LIBRESOLV_WRAPPER_SO_PATH',
|
|
]
|
|
|
|
base_lines = list()
|
|
base_fname = ''
|
|
|
|
found_diff = False
|
|
|
|
for fname in sys.argv[1:]:
|
|
lines = list()
|
|
f = open(fname, 'r')
|
|
for line in f:
|
|
if line.startswith("cfg_files ="):
|
|
# waf writes configuration files as absolute paths
|
|
continue
|
|
if len(line.split('=', 1)) == 2:
|
|
key = line.split('=', 1)[0].strip()
|
|
value = line.split('=', 1)[1].strip()
|
|
if key in exceptions:
|
|
continue
|
|
# using waf with python 3.4 seems to randomly sort dict keys
|
|
# we can't modify the waf code but we can fake a dict value
|
|
# string representation as if it were sorted. python 3.6.5
|
|
# doesn't seem to suffer from this behaviour
|
|
if value.startswith('{'):
|
|
import ast
|
|
amap = ast.literal_eval(value)
|
|
fakeline = ""
|
|
for k in sorted(amap.keys()):
|
|
if not len(fakeline) == 0:
|
|
fakeline = fakeline + ", "
|
|
fakeline = fakeline + '\'' + k + '\': \'' + amap[k] + '\''
|
|
line = key + ' = {' + fakeline + '}'
|
|
lines.append(line)
|
|
f.close()
|
|
if base_fname:
|
|
diff = list(difflib.unified_diff(base_lines, lines, base_fname, fname))
|
|
if diff:
|
|
print('configuration files %s and %s do not match' % (base_fname, fname))
|
|
for l in diff:
|
|
sys.stdout.write(l)
|
|
found_diff = True
|
|
else:
|
|
base_fname = fname
|
|
base_lines = lines
|
|
|
|
if found_diff:
|
|
sys.exit(1)
|