mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-11 01:11:50 +02:00
scripts: check minimum required Windows version is set
We use linker flags (-Wl,--major/minor-subsystem-version) to set the minimum required version of Windows needed to run our binaries. This adds a sanity check that the version is being set as expected.
This commit is contained in:
parent
29615aef52
commit
c972345bac
@ -227,6 +227,14 @@ def check_PE_libraries(filename) -> bool:
|
|||||||
ok = False
|
ok = False
|
||||||
return ok
|
return ok
|
||||||
|
|
||||||
|
def check_PE_subsystem_version(filename) -> bool:
|
||||||
|
binary = lief.parse(filename)
|
||||||
|
major: int = binary.optional_header.major_subsystem_version
|
||||||
|
minor: int = binary.optional_header.minor_subsystem_version
|
||||||
|
if major == 6 and minor == 1:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
CHECKS = {
|
CHECKS = {
|
||||||
'ELF': [
|
'ELF': [
|
||||||
('IMPORTED_SYMBOLS', check_imported_symbols),
|
('IMPORTED_SYMBOLS', check_imported_symbols),
|
||||||
@ -238,7 +246,8 @@ CHECKS = {
|
|||||||
('MIN_OS', check_MACHO_min_os),
|
('MIN_OS', check_MACHO_min_os),
|
||||||
],
|
],
|
||||||
'PE' : [
|
'PE' : [
|
||||||
('DYNAMIC_LIBRARIES', check_PE_libraries)
|
('DYNAMIC_LIBRARIES', check_PE_libraries),
|
||||||
|
('SUBSYSTEM_VERSION', check_PE_subsystem_version),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,12 +145,26 @@ class TestSymbolChecks(unittest.TestCase):
|
|||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
|
|
||||||
self.assertEqual(call_symbol_check(cc, source, executable, ['-lpdh']),
|
self.assertEqual(call_symbol_check(cc, source, executable, ['-lpdh', '-Wl,--major-subsystem-version', '-Wl,6', '-Wl,--minor-subsystem-version', '-Wl,1']),
|
||||||
(1, 'pdh.dll is not in ALLOWED_LIBRARIES!\n' +
|
(1, 'pdh.dll is not in ALLOWED_LIBRARIES!\n' +
|
||||||
executable + ': failed DYNAMIC_LIBRARIES'))
|
executable + ': failed DYNAMIC_LIBRARIES'))
|
||||||
|
|
||||||
source = 'test2.c'
|
source = 'test2.c'
|
||||||
executable = 'test2.exe'
|
executable = 'test2.exe'
|
||||||
|
|
||||||
|
with open(source, 'w', encoding="utf8") as f:
|
||||||
|
f.write('''
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
''')
|
||||||
|
|
||||||
|
self.assertEqual(call_symbol_check(cc, source, executable, ['-Wl,--major-subsystem-version', '-Wl,9', '-Wl,--minor-subsystem-version', '-Wl,9']),
|
||||||
|
(1, executable + ': failed SUBSYSTEM_VERSION'))
|
||||||
|
|
||||||
|
source = 'test3.c'
|
||||||
|
executable = 'test3.exe'
|
||||||
with open(source, 'w', encoding="utf8") as f:
|
with open(source, 'w', encoding="utf8") as f:
|
||||||
f.write('''
|
f.write('''
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -162,7 +176,7 @@ class TestSymbolChecks(unittest.TestCase):
|
|||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
|
|
||||||
self.assertEqual(call_symbol_check(cc, source, executable, ['-lole32']),
|
self.assertEqual(call_symbol_check(cc, source, executable, ['-lole32', '-Wl,--major-subsystem-version', '-Wl,6', '-Wl,--minor-subsystem-version', '-Wl,1']),
|
||||||
(0, ''))
|
(0, ''))
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user