patches/python-ctypes-02-util-find-library.diff
author yippi
Mon, 27 Sep 2010 21:07:51 +0000
changeset 20108 51df67ca9307
parent 15319 88daca77217e
permissions -rw-r--r--
I had these modules listed as being owned by me, but they are really owned by wangke, correcting.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15319
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     1
--- ctypes-1.0.2/ctypes/util.py.orig	2009-02-19 18:03:24.380668000 +0800
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     2
+++ ctypes-1.0.2/ctypes/util.py	2009-02-20 10:33:42.945817000 +0800
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     3
@@ -66,15 +66,26 @@
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     4
             return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     5
         return res.group(0)
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     6
 
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     7
-    def _get_soname(f):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     8
-        # assuming GNU binutils / ELF
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     9
-        if not f:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    10
-            return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    11
-        cmd = "objdump -p -j .dynamic 2>/dev/null " + f
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    12
-        res = re.search(r'\sSONAME\s+([^\s]+)', os.popen(cmd).read())
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    13
-        if not res:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    14
-            return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    15
-        return res.group(1)
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    16
+    if sys.platform == "sunos5":
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    17
+        # use /usr/ccs/bin/dump on solaris
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    18
+        def _get_soname(f):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    19
+            if not f:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    20
+                return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    21
+            cmd = "/usr/ccs/bin/dump -Lpv 2>/dev/null " + f
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    22
+            res = re.search(r'\[.*\]\sSONAME\s+([^\s]+)', os.popen(cmd).read())
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    23
+            if not res:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    24
+                return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    25
+            return res.group(1)
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    26
+    else:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    27
+        def _get_soname(f):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    28
+            # assuming GNU binutils / ELF
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    29
+            if not f:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    30
+                return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    31
+            cmd = "objdump -p -j .dynamic 2>/dev/null " + f
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    32
+            res = re.search(r'\sSONAME\s+([^\s]+)', os.popen(cmd).read())
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    33
+            if not res:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    34
+                return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    35
+            return res.group(1)
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    36
 
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    37
     if (sys.platform.startswith("freebsd")
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    38
         or sys.platform.startswith("openbsd")
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    39
@@ -101,6 +112,35 @@
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    40
             res.sort(cmp= lambda x,y: cmp(_num_version(x), _num_version(y)))
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    41
             return res[-1]
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    42
 
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    43
+    elif sys.platform == "sunos5":
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    44
+
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    45
+        def _findLib_crle(name, is64):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    46
+            if not os.path.exists('/usr/bin/crle'):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    47
+                return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    48
+
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    49
+            if is64:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    50
+                cmd = 'env LC_ALL=C /usr/bin/crle -64 2>/dev/null'
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    51
+            else:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    52
+                cmd = 'env LC_ALL=C /usr/bin/crle 2>/dev/null'
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    53
+
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    54
+            for line in os.popen(cmd).readlines():
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    55
+                line = line.strip()
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    56
+                if (line.startswith('Default Library Path (ELF):')):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    57
+                    paths = line.split()[4]
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    58
+
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    59
+            if not paths:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    60
+                return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    61
+
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    62
+            for dir in paths.split(":"):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    63
+                libfile = os.path.join(dir, "lib%s.so" % name)
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    64
+                if os.path.exists(libfile):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    65
+                    return libfile
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    66
+
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    67
+            return None
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    68
+
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    69
+        def find_library(name, is64 = False):
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    70
+            return _get_soname(_findLib_crle(name, is64) or _findLib_gcc(name))
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    71
+
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    72
     else:
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    73
 
88daca77217e 2009-03-06 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    74
         def _findLib_ldconfig(name):