diff options
author | xoviat <xoviat@users.noreply.github.com> | 2017-12-17 16:36:35 -0600 |
---|---|---|
committer | xoviat <xoviat@users.noreply.github.com> | 2017-12-17 16:36:35 -0600 |
commit | 887bb661a77a9f38eb71a6b32463e4a3db0f9477 (patch) | |
tree | 06fada214263ce95259053c11c16f4fa4481efa7 /numpy/distutils | |
parent | 9d054c141b084546810486f91e763f3eb89af633 (diff) | |
download | numpy-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.py | 19 |
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(): |