mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-06 12:42:28 +00:00
python-3.6.zip added from Github
README.cosmo contains the necessary links.
This commit is contained in:
parent
75fc601ff5
commit
0c4c56ff39
4219 changed files with 1968626 additions and 0 deletions
89
third_party/python/PC/validate_ucrtbase.py
vendored
Normal file
89
third_party/python/PC/validate_ucrtbase.py
vendored
Normal file
|
@ -0,0 +1,89 @@
|
|||
'''
|
||||
This script gets the version number from ucrtbased.dll and checks
|
||||
whether it is a version with a known issue.
|
||||
'''
|
||||
|
||||
import sys
|
||||
|
||||
from ctypes import (c_buffer, POINTER, byref, create_unicode_buffer,
|
||||
Structure, WinDLL)
|
||||
from ctypes.wintypes import DWORD, HANDLE
|
||||
|
||||
class VS_FIXEDFILEINFO(Structure):
|
||||
_fields_ = [
|
||||
("dwSignature", DWORD),
|
||||
("dwStrucVersion", DWORD),
|
||||
("dwFileVersionMS", DWORD),
|
||||
("dwFileVersionLS", DWORD),
|
||||
("dwProductVersionMS", DWORD),
|
||||
("dwProductVersionLS", DWORD),
|
||||
("dwFileFlagsMask", DWORD),
|
||||
("dwFileFlags", DWORD),
|
||||
("dwFileOS", DWORD),
|
||||
("dwFileType", DWORD),
|
||||
("dwFileSubtype", DWORD),
|
||||
("dwFileDateMS", DWORD),
|
||||
("dwFileDateLS", DWORD),
|
||||
]
|
||||
|
||||
kernel32 = WinDLL('kernel32')
|
||||
version = WinDLL('version')
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print('Usage: validate_ucrtbase.py <ucrtbase|ucrtbased>')
|
||||
sys.exit(2)
|
||||
|
||||
try:
|
||||
ucrtbased = WinDLL(sys.argv[1])
|
||||
except OSError:
|
||||
print('Cannot find ucrtbased.dll')
|
||||
# This likely means that VS is not installed, but that is an
|
||||
# obvious enough problem if you're trying to produce a debug
|
||||
# build that we don't need to fail here.
|
||||
sys.exit(0)
|
||||
|
||||
# We will immediately double the length up to MAX_PATH, but the
|
||||
# path may be longer, so we retry until the returned string is
|
||||
# shorter than our buffer.
|
||||
name_len = actual_len = 130
|
||||
while actual_len == name_len:
|
||||
name_len *= 2
|
||||
name = create_unicode_buffer(name_len)
|
||||
actual_len = kernel32.GetModuleFileNameW(HANDLE(ucrtbased._handle),
|
||||
name, len(name))
|
||||
if not actual_len:
|
||||
print('Failed to get full module name.')
|
||||
sys.exit(2)
|
||||
|
||||
size = version.GetFileVersionInfoSizeW(name, None)
|
||||
if not size:
|
||||
print('Failed to get size of version info.')
|
||||
sys.exit(2)
|
||||
|
||||
ver_block = c_buffer(size)
|
||||
if (not version.GetFileVersionInfoW(name, None, size, ver_block) or
|
||||
not ver_block):
|
||||
print('Failed to get version info.')
|
||||
sys.exit(2)
|
||||
|
||||
pvi = POINTER(VS_FIXEDFILEINFO)()
|
||||
if not version.VerQueryValueW(ver_block, "", byref(pvi), byref(DWORD())):
|
||||
print('Failed to get version value from info.')
|
||||
sys.exit(2)
|
||||
|
||||
ver = (
|
||||
pvi.contents.dwProductVersionMS >> 16,
|
||||
pvi.contents.dwProductVersionMS & 0xFFFF,
|
||||
pvi.contents.dwProductVersionLS >> 16,
|
||||
pvi.contents.dwProductVersionLS & 0xFFFF,
|
||||
)
|
||||
|
||||
print('{} is version {}.{}.{}.{}'.format(name.value, *ver))
|
||||
|
||||
if ver < (10, 0, 10586):
|
||||
print('WARN: ucrtbased contains known issues. '
|
||||
'Please update the Windows 10 SDK.')
|
||||
print('See:')
|
||||
print(' http://bugs.python.org/issue27705')
|
||||
print(' https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk')
|
||||
sys.exit(1)
|
Loading…
Add table
Add a link
Reference in a new issue