aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/modules/python.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
index 1147945..324dfc8 100644
--- a/mesonbuild/modules/python.py
+++ b/mesonbuild/modules/python.py
@@ -727,10 +727,22 @@ class PythonModule(ExtensionModule):
found_modules: T.List[str] = []
missing_modules: T.List[str] = []
if python.found() and want_modules:
+ # Python 3.8.x or later require add_dll_directory() to be called on Windows if
+ # the needed modules require external DLLs that are not bundled with the modules.
+ # Simplify things by calling add_dll_directory() on the paths in %PATH%
+ add_paths_cmd = ''
+ if hasattr(os, 'add_dll_directory'):
+ add_paths_cmds = []
+ paths = os.environ['PATH'].split(os.pathsep)
+ for path in paths:
+ if path != '' and os.path.isdir(path):
+ add_paths_cmds.append(f'os.add_dll_directory({path!r})')
+ add_paths_cmd = 'import os;' + ';'.join(reversed(add_paths_cmds)) + ';'
+
for mod in want_modules:
p, *_ = mesonlib.Popen_safe(
python.command +
- ['-c', f'import {mod}'])
+ ['-c', f'{add_paths_cmd}import {mod}'])
if p.returncode != 0:
missing_modules.append(mod)
else: