File: validate_win-64_wheel.py

package info (click to toggle)
llvmlite 0.46.0-0.1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,140 kB
  • sloc: python: 13,605; cpp: 3,192; makefile: 185; sh: 168
file content (44 lines) | stat: -rw-r--r-- 1,587 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import lief
import pathlib

for path in pathlib.Path(".").rglob("**/*.dll"):
    print("path", path)
    dll = lief.PE.parse(str(path))

    if path.name.lower().startswith("msvcp140"):
        continue

    if hasattr(dll, "delay_imports"):
        delay_imports = {x.name for x in dll.delay_imports}
        print("Delay imports:", delay_imports)
        expected_delay_imports = {"SHELL32.dll", "ole32.dll"}
        assert (
            delay_imports == expected_delay_imports
        ), f"Unexpected delay imports: {delay_imports}"

    imports = {x.name for x in dll.imports}
    print("Regular imports:", imports)
    # Normalize delvewheel-mangled MSVCP import (e.g. msvcp140-<hash>.dll)
    imports = {("MSVCP140.dll" if name.lower().startswith("msvcp140") else name) for name in imports}
    expected_imports = {
        "ADVAPI32.dll",
        "KERNEL32.dll",
        "MSVCP140.dll",
        "VCRUNTIME140.dll",
        "VCRUNTIME140_1.dll",
        "api-ms-win-crt-convert-l1-1-0.dll",
        "api-ms-win-crt-environment-l1-1-0.dll",
        "api-ms-win-crt-heap-l1-1-0.dll",
        "api-ms-win-crt-locale-l1-1-0.dll",
        "api-ms-win-crt-math-l1-1-0.dll",
        "api-ms-win-crt-runtime-l1-1-0.dll",
        "api-ms-win-crt-stdio-l1-1-0.dll",
        "api-ms-win-crt-string-l1-1-0.dll",
        "api-ms-win-crt-time-l1-1-0.dll",
        "api-ms-win-crt-utility-l1-1-0.dll",
        "ntdll.dll",
    }
    assert imports == expected_imports, (
        f"Unexpected imports: {imports - expected_imports}\n"
        f"Missing imports: {expected_imports - imports}"
    )