summaryrefslogtreecommitdiff
path: root/numpy/distutils
diff options
context:
space:
mode:
authorxoviat <xoviat@users.noreply.github.com>2017-12-17 16:36:35 -0600
committerxoviat <xoviat@users.noreply.github.com>2017-12-17 16:36:35 -0600
commit887bb661a77a9f38eb71a6b32463e4a3db0f9477 (patch)
tree06fada214263ce95259053c11c16f4fa4481efa7 /numpy/distutils
parent9d054c141b084546810486f91e763f3eb89af633 (diff)
downloadnumpy-887bb661a77a9f38eb71a6b32463e4a3db0f9477.tar.gz
BUG: distutils: use AddDllDirectory where available
This should reduce some DLL hell scenarios, namely scipy/scipy#8064. partial credits to @carlkl
Diffstat (limited to 'numpy/distutils')
-rw-r--r--numpy/distutils/misc_util.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/numpy/distutils/misc_util.py b/numpy/distutils/misc_util.py
index 102af874f..0c78220cb 100644
--- a/numpy/distutils/misc_util.py
+++ b/numpy/distutils/misc_util.py
@@ -2284,10 +2284,25 @@ def generate_config_py(target):
# For gfortran+msvc combination, extra shared libraries may exist
f.write("""
+
import os
+import sys
+
extra_dll_dir = os.path.join(os.path.dirname(__file__), 'extra-dll')
-if os.path.isdir(extra_dll_dir):
- os.environ["PATH"] += os.pathsep + extra_dll_dir
+
+if os.path.isdir(extra_dll_dir) and sys.platform == 'win32':
+ try:
+ from ctypes import windll, c_wchar_p
+ _AddDllDirectory = windll.kernel32.AddDllDirectory
+ _AddDllDirectory.argtypes = [c_wchar_p]
+ # Needed to initialize AddDllDirectory modifications
+ windll.kernel32.SetDefaultDllDirectories(0x1000)
+ except AttributeError:
+ def _AddDllDirectory(dll_directory):
+ os.environ["PATH"] += os.pathsep + dll_directory
+
+ _AddDllDirectory(extra_dll_dir)
+
""")
for k, i in system_info.saved_results.items():