summary refs log tree commit diff
path: root/pkgs/development/interpreters/python/cpython/3.4/ld_library_path.patch
blob: 3172eb6d18e4bf0c84a4132901fb9aa9cc9fb10a (plain) (blame)
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
45
46
47
48
49
50
51
From 85991e0d7f0e631240f3f6233bd65d1128a66dec Mon Sep 17 00:00:00 2001
From: Frederik Rietdijk <fridh@fridh.nl>
Date: Thu, 14 Sep 2017 10:00:31 +0200
Subject: [PATCH] ctypes.util: support LD_LIBRARY_PATH

Backports support for LD_LIBRARY_PATH from 3.6
---
 Lib/ctypes/util.py | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
index 780cd5d21b..d7ac15070f 100644
--- a/Lib/ctypes/util.py
+++ b/Lib/ctypes/util.py
@@ -181,8 +181,32 @@ elif os.name == "posix":
         def _findSoname_ldconfig(name):
             return None
 
+        def _findLib_ld(name):
+            # See issue #9998 for why this is needed
+            expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)
+            cmd = ['ld', '-t']
+            libpath = os.environ.get('LD_LIBRARY_PATH')
+            if libpath:
+                for d in libpath.split(':'):
+                    cmd.extend(['-L', d])
+            cmd.extend(['-o', os.devnull, '-l%s' % name])
+            result = None
+            try:
+                p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                                     stderr=subprocess.PIPE,
+                                     universal_newlines=True)
+                out, _ = p.communicate()
+                res = re.search(expr, os.fsdecode(out))
+                if res:
+                    result = res.group(0)
+            except Exception as e:
+                pass  # result will be None
+            return result
+
         def find_library(name):
-            return _findSoname_ldconfig(name) or _get_soname(_findLib_gcc(name))
+            # See issue #9998
+            return _findSoname_ldconfig(name) or \
+                   _get_soname(_findLib_gcc(name) or _findLib_ld(name))
 
 ################################################################
 # test code
-- 
2.14.1