diff -u python-2.7.11.0/Lib/ctypes/__init__.py python-2.7.11.3/Lib/ctypes/__init__.py --- python-2.7.11.0/Lib/ctypes/__init__.py 2015-12-05 19:46:56 +0000 +++ python-2.7.11.3/Lib/ctypes/__init__.py 2016-05-04 11:29:58 +0000 @@ -3,7 +3,7 @@ ###################################################################### """create and manipulate C data types in Python""" -import os as _os, sys as _sys +import os as _os, sys as _sys, subprocess as _subprocess __version__ = "1.1.0" @@ -12,6 +12,11 @@ from _ctypes import CFuncPtr as _CFuncPtr from _ctypes import __version__ as _ctypes_version from _ctypes import RTLD_LOCAL, RTLD_GLOBAL +# from _ctypes import RTLD_LOCAL, RTLD_GLOBAL, RTLD_NOW, RTLD_MEMBER +# RTLD_NOW and RTLD_MEMBER are not in _ctypes (yet) +# RTLD_MEMBER is not in _ctypes (yet), or whereever it needs to be defined +RTLD_NOW = 0x00000002 +RTLD_MEMBER = 0x00040000 from _ctypes import ArgumentError from struct import calcsize as _calcsize @@ -355,6 +360,20 @@ flags |= _FUNCFLAG_USE_ERRNO if use_last_error: flags |= _FUNCFLAG_USE_LASTERROR + if _sys.platform.startswith("aix"): + if name is None: + return + _name = name + # mode |= RTLD_NOW - maybe it could have been added to RTLD_DEFAULT above + # make sure, as this is what AIX expects + mode |= RTLD_NOW + # If name already ends with the char ')' then it is already processed + if _name[-1] != ')': + import ctypes.aixutil as aix + _name = aix.find_library(_name) + self._name = _name + if _name and _name[-1] == ")": + mode |= RTLD_MEMBER class _FuncPtr(_CFuncPtr): _flags_ = flags diff -u python-2.7.11.0/Lib/ctypes/util.py python-2.7.11.3/Lib/ctypes/util.py --- python-2.7.11.0/Lib/ctypes/util.py 2015-12-05 19:46:56 +0000 +++ python-2.7.11.3/Lib/ctypes/util.py 2016-05-04 11:25:44 +0000 @@ -84,6 +84,14 @@ continue return None +if sys.platform.startswith('aix'): + # find .so members in .a files + # using dump loader header information + sys. + import ctypes.aixutil as aix + + def find_library(name): + return aix.find_library(name) + elif os.name == "posix": # Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump import re, tempfile, errno @@ -271,6 +279,44 @@ print cdll.LoadLibrary("libm.so") print cdll.LoadLibrary("libcrypt.so") print find_library("crypt") + print find_library("crypto") + print find_library("crypto.so") + print find_library("iconv") + + if sys.platform.startswith("aix"): + print "\nAdditional Tests for AIX" + print "call find_library(\"foo\")" + print "libintl.so.1:", find_library("libintl.so.1") # from /opt/freeware + print "libintl.so.8:", find_library("libintl.so.8") # from GNU + print "intl:", find_library("intl") # either .1 or .8 - latest installed + print "libintl.so.1: ", find_library("libintl.so.1") + print "libintl.so.8: ", find_library("libintl.so.8") + print "libintl.so: ", find_library("libintl.so") + + print "libcrypto.so: ", find_library("libcrypto.so") + print "c: ", find_library("c") + print "c.a: ", find_library("c.a") + print "c.so: ", find_library("c.so") + print "libc: ", find_library("libc") + print "libc.a: ", find_library("libc.a") + print "libc.so: ", find_library("libc.so") + print "libc.so.6: ", find_library("libc.so.6") +### + print "\ncall cdll.LoadLibrary(\"foo\")" + print "m: ",cdll.LoadLibrary("m") + print "libm.so: ",cdll.LoadLibrary("libm.so") + print "c: ",cdll.LoadLibrary("c") + print "c.a: ",cdll.LoadLibrary("c.a") + print "libc.a: ",cdll.LoadLibrary("libc.a") + print "libc.so: ",cdll.LoadLibrary("libc.so") + print "libc.so.6: ",cdll.LoadLibrary("libc.so.6") + print "libintl.so.1: ",cdll.LoadLibrary("libintl.so.1") # from /opt/freeware + print "libintl.so.8: ",cdll.LoadLibrary("libintl.so.8") # from GNU + print "intl: ",cdll.LoadLibrary("intl") # either .1 or .8 - latest installed + print "crypt: ",cdll.LoadLibrary("crypt") + print "crypto: ",cdll.LoadLibrary("crypto") + print "crypto.so: ",cdll.LoadLibrary("crypto.so") + print "libcrypto.so: ",cdll.LoadLibrary("libcrypto.so") if __name__ == "__main__": test()