|
1 | 1 | diff -ur Python-2.7.2.orig/Lib/ctypes/util.py Python-2.7.2/Lib/ctypes/util.py
|
2 | 2 | --- Python-2.7.2.orig/Lib/ctypes/util.py 2011-06-11 16:46:24.000000000 +0100
|
3 |
| -+++ Python-2.7.2/Lib/ctypes/util.py 2015-05-10 10:37:49.258720992 +0100 |
4 |
| -@@ -3,237 +3,16 @@ |
5 |
| - ###################################################################### |
6 |
| - import sys, os |
| 3 | ++++ Python-2.7.2/Lib/ctypes/util.py 2015-05-10 15:50:18.906203529 +0100 |
| 4 | +@@ -71,7 +71,21 @@ |
| 5 | + def find_library(name): |
| 6 | + return name |
7 | 7 |
|
8 |
| --# find_library(name) returns the pathname of a library, or None. |
9 |
| --if os.name == "nt": |
10 |
| -- |
11 |
| -- def _get_build_version(): |
12 |
| -- """Return the version of MSVC that was used to build Python. |
13 |
| -- |
14 |
| -- For Python 2.3 and up, the version number is included in |
15 |
| -- sys.version. For earlier versions, assume the compiler is MSVC 6. |
16 |
| -- """ |
17 |
| -- # This function was copied from Lib/distutils/msvccompiler.py |
18 |
| -- prefix = "MSC v." |
19 |
| -- i = sys.version.find(prefix) |
20 |
| -- if i == -1: |
21 |
| -- return 6 |
22 |
| -- i = i + len(prefix) |
23 |
| -- s, rest = sys.version[i:].split(" ", 1) |
24 |
| -- majorVersion = int(s[:-2]) - 6 |
25 |
| -- minorVersion = int(s[2:3]) / 10.0 |
26 |
| -- # I don't think paths are affected by minor version in version 6 |
27 |
| -- if majorVersion == 6: |
28 |
| -- minorVersion = 0 |
29 |
| -- if majorVersion >= 6: |
30 |
| -- return majorVersion + minorVersion |
31 |
| -- # else we don't know what version of the compiler this is |
32 |
| -- return None |
33 |
| -- |
34 |
| -- def find_msvcrt(): |
35 |
| -- """Return the name of the VC runtime dll""" |
36 |
| -- version = _get_build_version() |
37 |
| -- if version is None: |
38 |
| -- # better be safe than sorry |
39 |
| -- return None |
40 |
| -- if version <= 6: |
41 |
| -- clibname = 'msvcrt' |
42 |
| -- else: |
43 |
| -- clibname = 'msvcr%d' % (version * 10) |
44 |
| -- |
45 |
| -- # If python was built with in debug mode |
46 |
| -- import imp |
47 |
| -- if imp.get_suffixes()[0][0] == '_d.pyd': |
48 |
| -- clibname += 'd' |
49 |
| -- return clibname+'.dll' |
50 |
| -- |
51 |
| -- def find_library(name): |
52 |
| -- if name in ('c', 'm'): |
53 |
| -- return find_msvcrt() |
54 |
| -- # See MSDN for the REAL search order. |
55 |
| -- for directory in os.environ['PATH'].split(os.pathsep): |
56 |
| -- fname = os.path.join(directory, name) |
57 |
| -- if os.path.isfile(fname): |
58 |
| -- return fname |
59 |
| -- if fname.lower().endswith(".dll"): |
60 |
| -- continue |
61 |
| -- fname = fname + ".dll" |
62 |
| -- if os.path.isfile(fname): |
63 |
| -- return fname |
64 |
| -- return None |
65 |
| -- |
66 |
| --if os.name == "ce": |
67 |
| -- # search path according to MSDN: |
68 |
| -- # - absolute path specified by filename |
69 |
| -- # - The .exe launch directory |
70 |
| -- # - the Windows directory |
71 |
| -- # - ROM dll files (where are they?) |
72 |
| -- # - OEM specified search path: HKLM\Loader\SystemPath |
73 |
| -- def find_library(name): |
74 |
| -- return name |
75 |
| -- |
76 | 8 | -if os.name == "posix" and sys.platform == "darwin":
|
77 |
| -- from ctypes.macholib.dyld import dyld_find as _dyld_find |
78 |
| -- def find_library(name): |
79 |
| -- possible = ['lib%s.dylib' % name, |
80 |
| -- '%s.dylib' % name, |
81 |
| -- '%s.framework/%s' % (name, name)] |
82 |
| -- for name in possible: |
83 |
| -- try: |
84 |
| -- return _dyld_find(name) |
85 |
| -- except ValueError: |
86 |
| -- continue |
87 |
| -- return None |
88 |
| -- |
89 |
| --elif os.name == "posix": |
90 |
| -- # Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump |
91 |
| -- import re, tempfile, errno |
92 |
| -- |
93 |
| -- def _findLib_gcc(name): |
94 |
| -- expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name) |
95 |
| -- fdout, ccout = tempfile.mkstemp() |
96 |
| -- os.close(fdout) |
97 |
| -- cmd = 'if type gcc >/dev/null 2>&1; then CC=gcc; elif type cc >/dev/null 2>&1; then CC=cc;else exit 10; fi;' \ |
98 |
| -- '$CC -Wl,-t -o ' + ccout + ' 2>&1 -l' + name |
99 |
| -- try: |
100 |
| -- f = os.popen(cmd) |
101 |
| -- try: |
102 |
| -- trace = f.read() |
103 |
| -- finally: |
104 |
| -- rv = f.close() |
105 |
| -- finally: |
106 |
| -- try: |
107 |
| -- os.unlink(ccout) |
108 |
| -- except OSError, e: |
109 |
| -- if e.errno != errno.ENOENT: |
110 |
| -- raise |
111 |
| -- if rv == 10: |
112 |
| -- raise OSError, 'gcc or cc command not found' |
113 |
| -- res = re.search(expr, trace) |
114 |
| -- if not res: |
115 |
| -- return None |
116 |
| -- return res.group(0) |
117 |
| -- |
118 |
| -- |
119 |
| -- if sys.platform == "sunos5": |
120 |
| -- # use /usr/ccs/bin/dump on solaris |
121 |
| -- def _get_soname(f): |
122 |
| -- if not f: |
123 |
| -- return None |
124 |
| -- cmd = "/usr/ccs/bin/dump -Lpv 2>/dev/null " + f |
125 |
| -- f = os.popen(cmd) |
126 |
| -- try: |
127 |
| -- data = f.read() |
128 |
| -- finally: |
129 |
| -- f.close() |
130 |
| -- res = re.search(r'\[.*\]\sSONAME\s+([^\s]+)', data) |
131 |
| -- if not res: |
132 |
| -- return None |
133 |
| -- return res.group(1) |
134 |
| -- else: |
135 |
| -- def _get_soname(f): |
136 |
| -- # assuming GNU binutils / ELF |
137 |
| -- if not f: |
138 |
| -- return None |
139 |
| -- cmd = 'if ! type objdump >/dev/null 2>&1; then exit 10; fi;' \ |
140 |
| -- "objdump -p -j .dynamic 2>/dev/null " + f |
141 |
| -- f = os.popen(cmd) |
142 |
| -- dump = f.read() |
143 |
| -- rv = f.close() |
144 |
| -- if rv == 10: |
145 |
| -- raise OSError, 'objdump command not found' |
146 |
| -- f = os.popen(cmd) |
147 |
| -- try: |
148 |
| -- data = f.read() |
149 |
| -- finally: |
150 |
| -- f.close() |
151 |
| -- res = re.search(r'\sSONAME\s+([^\s]+)', data) |
152 |
| -- if not res: |
153 |
| -- return None |
154 |
| -- return res.group(1) |
155 |
| -- |
156 |
| -- if (sys.platform.startswith("freebsd") |
157 |
| -- or sys.platform.startswith("openbsd") |
158 |
| -- or sys.platform.startswith("dragonfly")): |
159 |
| -- |
160 |
| -- def _num_version(libname): |
161 |
| -- # "libxyz.so.MAJOR.MINOR" => [ MAJOR, MINOR ] |
162 |
| -- parts = libname.split(".") |
163 |
| -- nums = [] |
164 |
| -- try: |
165 |
| -- while parts: |
166 |
| -- nums.insert(0, int(parts.pop())) |
167 |
| -- except ValueError: |
168 |
| -- pass |
169 |
| -- return nums or [ sys.maxint ] |
170 |
| -- |
171 |
| -- def find_library(name): |
172 |
| -- ename = re.escape(name) |
173 |
| -- expr = r':-l%s\.\S+ => \S*/(lib%s\.\S+)' % (ename, ename) |
174 |
| -- f = os.popen('/sbin/ldconfig -r 2>/dev/null') |
175 |
| -- try: |
176 |
| -- data = f.read() |
177 |
| -- finally: |
178 |
| -- f.close() |
179 |
| -- res = re.findall(expr, data) |
180 |
| -- if not res: |
181 |
| -- return _get_soname(_findLib_gcc(name)) |
182 |
| -- res.sort(cmp= lambda x,y: cmp(_num_version(x), _num_version(y))) |
183 |
| -- return res[-1] |
184 |
| -- |
185 |
| -- else: |
186 |
| -- |
187 |
| -- def _findLib_ldconfig(name): |
188 |
| -- # XXX assuming GLIBC's ldconfig (with option -p) |
189 |
| -- expr = r'/[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name) |
190 |
| -- f = os.popen('LC_ALL=C LANG=C /sbin/ldconfig -p 2>/dev/null') |
191 |
| -- try: |
192 |
| -- data = f.read() |
193 |
| -- finally: |
194 |
| -- f.close() |
195 |
| -- res = re.search(expr, data) |
196 |
| -- if not res: |
197 |
| -- # Hm, this works only for libs needed by the python executable. |
198 |
| -- cmd = 'ldd %s 2>/dev/null' % sys.executable |
199 |
| -- f = os.popen(cmd) |
200 |
| -- try: |
201 |
| -- data = f.read() |
202 |
| -- finally: |
203 |
| -- f.close() |
204 |
| -- res = re.search(expr, data) |
205 |
| -- if not res: |
206 |
| -- return None |
207 |
| -- return res.group(0) |
208 |
| -- |
209 |
| -- def _findSoname_ldconfig(name): |
210 |
| -- import struct |
211 |
| -- if struct.calcsize('l') == 4: |
212 |
| -- machine = os.uname()[4] + '-32' |
213 |
| -- else: |
214 |
| -- machine = os.uname()[4] + '-64' |
215 |
| -- mach_map = { |
216 |
| -- 'x86_64-64': 'libc6,x86-64', |
217 |
| -- 'ppc64-64': 'libc6,64bit', |
218 |
| -- 'sparc64-64': 'libc6,64bit', |
219 |
| -- 's390x-64': 'libc6,64bit', |
220 |
| -- 'ia64-64': 'libc6,IA-64', |
221 |
| -- } |
222 |
| -- abi_type = mach_map.get(machine, 'libc6') |
223 |
| -- |
224 |
| -- # XXX assuming GLIBC's ldconfig (with option -p) |
225 |
| -- expr = r'(\S+)\s+\((%s(?:, OS ABI:[^\)]*)?)\)[^/]*(/[^\(\)\s]*lib%s\.[^\(\)\s]*)' \ |
226 |
| -- % (abi_type, re.escape(name)) |
227 |
| -- f = os.popen('/sbin/ldconfig -p 2>/dev/null') |
228 |
| -- try: |
229 |
| -- data = f.read() |
230 |
| -- finally: |
231 |
| -- f.close() |
232 |
| -- res = re.search(expr, data) |
233 |
| -- if not res: |
234 |
| -- return None |
235 |
| -- return res.group(1) |
236 |
| -- |
237 |
| -- def find_library(name): |
238 |
| -- return _findSoname_ldconfig(name) or _get_soname(_findLib_gcc(name)) |
239 |
| -+def find_library(name): |
240 |
| -+ """ hack to find librarys for kivy and android |
241 |
| -+ split the path and get the first parts which will give us |
242 |
| -+ the app path something like /data/data/org.app.foo/""" |
243 |
| -+ app_root = os.path.abspath('./').split(os.path.sep)[0:4] |
244 |
| -+ lib_search = os.path.sep.join(app_root) + os.path.sep + 'lib' |
245 |
| -+ for filename in os.listdir(lib_search): |
246 |
| -+ if filename.endswith('.so') and name in filename: |
247 |
| -+ return lib_search + os.path.sep + filename |
248 |
| -+ return None |
249 |
| - |
250 |
| - ################################################################ |
251 |
| - # test code |
| 9 | ++# this test is for android specifically shoudl match here and ignore any |
| 10 | ++# of the other platform tests below |
| 11 | ++if os.name == "posix": |
| 12 | ++ def find_library(name): |
| 13 | ++ """ hack to find librarys for kivy and android |
| 14 | ++ split the path and get the first parts which will give us |
| 15 | ++ the app path something like /data/data/org.app.foo/""" |
| 16 | ++ app_root = os.path.abspath('./').split(os.path.sep)[0:4] |
| 17 | ++ lib_search = os.path.sep.join(app_root) + os.path.sep + 'lib' |
| 18 | ++ for filename in os.listdir(lib_search): |
| 19 | ++ if filename.endswith('.so') and name in filename: |
| 20 | ++ return lib_search + os.path.sep + filename |
| 21 | ++ return None |
| 22 | ++ |
| 23 | ++elif os.name == "posix" and sys.platform == "darwin": |
| 24 | + from ctypes.macholib.dyld import dyld_find as _dyld_find |
| 25 | + def find_library(name): |
| 26 | + possible = ['lib%s.dylib' % name, |
| 27 | +Only in Python-2.7.2/Lib/ctypes: util.py.save |
| 28 | +Only in Python-2.7.2/Lib/ctypes: util.py.save.1 |
0 commit comments