tests/windows/16: Use pefile module instead of objdump/dumpbin
The pefile module is a CI dependency now, so we can use that instead of objdump/dumpbin which greatly simplifies the test. Of course, this module is also cross-platform so it will work if we add cross-win32 CI at some point.
This commit is contained in:
parent
bd17c9ad4f
commit
c5c0c467fe
|
@ -1,26 +1,19 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import re
|
import os
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
|
try:
|
||||||
|
import pefile
|
||||||
|
except ImportError:
|
||||||
|
if 'CI' in os.environ:
|
||||||
|
raise
|
||||||
|
# Skip the test if not on CI
|
||||||
|
sys.exit(77)
|
||||||
|
|
||||||
tool = sys.argv[1]
|
executable = sys.argv[1]
|
||||||
executable = sys.argv[2]
|
expected = int(sys.argv[2])
|
||||||
expected = int(sys.argv[3])
|
|
||||||
actual = -1
|
|
||||||
|
|
||||||
if 'objdump' in tool:
|
actual = pefile.PE(executable).dump_dict()['OPTIONAL_HEADER']['Subsystem']['Value']
|
||||||
result = subprocess.check_output([tool, '-p', executable]).decode()
|
|
||||||
match = re.search(r'^Subsystem\s+(\d+)', result, re.MULTILINE)
|
|
||||||
elif 'dumpbin' in tool:
|
|
||||||
result = subprocess.check_output([tool, '/headers', executable]).decode()
|
|
||||||
match = re.search(r'^\s*(\d+) subsystem(?! version)', result, re.MULTILINE)
|
|
||||||
else:
|
|
||||||
print('unknown tool')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if match:
|
|
||||||
actual = int(match.group(1))
|
|
||||||
|
|
||||||
print('subsystem expected: %d, actual: %d' % (expected, actual))
|
print('subsystem expected: %d, actual: %d' % (expected, actual))
|
||||||
sys.exit(0 if (expected == actual) else 1)
|
sys.exit(0 if (expected == actual) else 1)
|
||||||
|
|
|
@ -17,10 +17,5 @@ console_prog = executable('console_prog', 'console_prog.c', gui_app: false)
|
||||||
|
|
||||||
tester = find_program('gui_app_tester.py')
|
tester = find_program('gui_app_tester.py')
|
||||||
|
|
||||||
tool = find_program('objdump', 'dumpbin', required: false)
|
test('is_gui', tester, args: [gui_prog, '2'])
|
||||||
# TODO: when 'llvm-objdump -f' emits the subsystem type, we could use that also
|
test('not_gui', tester, args: [console_prog, '3'])
|
||||||
|
|
||||||
if tool.found()
|
|
||||||
test('is_gui', tester, args: [tool.path(), gui_prog, '2'])
|
|
||||||
test('not_gui', tester, args: [tool.path(), console_prog, '3'])
|
|
||||||
endif
|
|
||||||
|
|
Loading…
Reference in New Issue