diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-10-25 11:34:04 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-10-25 11:34:04 (GMT) |
commit | 8b905bd9d40f0545e054737b8796a18366546ffc (patch) | |
tree | b2b62946432510b703420013a926d7a5155ade25 | |
parent | e0be4232971edca23438cc3d79761141f2de124f (diff) | |
download | cpython-8b905bd9d40f0545e054737b8796a18366546ffc.zip cpython-8b905bd9d40f0545e054737b8796a18366546ffc.tar.gz cpython-8b905bd9d40f0545e054737b8796a18366546ffc.tar.bz2 |
Issue #13226: Add RTLD_xxx constants to the os module. These constants can by
used with sys.setdlopenflags().
-rw-r--r-- | Doc/library/os.rst | 13 | ||||
-rw-r--r-- | Doc/library/sys.rst | 10 | ||||
-rw-r--r-- | Lib/test/test_posix.py | 7 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/posixmodule.c | 26 |
5 files changed, 54 insertions, 5 deletions
diff --git a/Doc/library/os.rst b/Doc/library/os.rst index b2a16d9..fb794d3 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -1393,6 +1393,19 @@ or `the MSDN <http://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx>`_ on Window the C library. +.. data:: RTLD_LAZY + RTLD_NOW + RTLD_GLOBAL + RTLD_LOCAL + RTLD_NODELETE + RTLD_NOLOAD + RTLD_DEEPBIND + + See the Unix manual page :manpage:`dlopen(3)`. + + .. versionadded:: 3.3 + + .. _os-file-dir: Files and Directories diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 0a8ac8b..a032549 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -801,11 +801,11 @@ always available. the interpreter loads extension modules. Among other things, this will enable a lazy resolving of symbols when importing a module, if called as ``sys.setdlopenflags(0)``. To share symbols across extension modules, call as - ``sys.setdlopenflags(ctypes.RTLD_GLOBAL)``. Symbolic names for the - flag modules can be either found in the :mod:`ctypes` module, or in the :mod:`DLFCN` - module. If :mod:`DLFCN` is not available, it can be generated from - :file:`/usr/include/dlfcn.h` using the :program:`h2py` script. Availability: - Unix. + ``sys.setdlopenflags(os.RTLD_GLOBAL)``. Symbolic names for the flag modules + can be found in the :mod:`os` module (``RTLD_xxx`` constants, e.g. + :data:`os.RTLD_LAZY`). + + Availability: Unix. .. function:: setprofile(profilefunc) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index f70688d..c8d0859 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -984,6 +984,13 @@ class PosixTester(unittest.TestCase): self.assertIs(b, l) self.assertEqual(l.count(), 3) + def test_rtld_constants(self): + # check presence of major RTLD_* constants + posix.RTLD_LAZY + posix.RTLD_NOW + posix.RTLD_GLOBAL + posix.RTLD_LOCAL + class PosixGroupsTester(unittest.TestCase): def setUp(self): @@ -341,6 +341,9 @@ Core and Builtins Library ------- +- Issue #13226: Add RTLD_xxx constants to the os module. These constants can by + used with sys.setdlopenflags(). + - Issue #10278: Add clock_getres(), clock_gettime() and CLOCK_xxx constants to the time module. time.clock_gettime(time.CLOCK_MONOTONIC) provides a monotonic clock diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index fa50296..f4476b7 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -121,6 +121,10 @@ corresponding Unix manual entries for more information on calls."); #endif #endif +#ifdef HAVE_DLFCN_H +#include <dlfcn.h> +#endif + /* Various compilers have only certain posix functions */ /* XXX Gosh I wish these were all moved into pyconfig.h */ #if defined(PYCC_VACPP) && defined(PYOS_OS2) @@ -11423,6 +11427,28 @@ all_ins(PyObject *d) if (ins(d, "XATTR_SIZE_MAX", (long)XATTR_SIZE_MAX)) return -1; #endif +#ifdef RTLD_LAZY + if (PyModule_AddIntMacro(d, RTLD_LAZY)) return -1; +#endif +#ifdef RTLD_NOW + if (PyModule_AddIntMacro(d, RTLD_NOW)) return -1; +#endif +#ifdef RTLD_GLOBAL + if (PyModule_AddIntMacro(d, RTLD_GLOBAL)) return -1; +#endif +#ifdef RTLD_LOCAL + if (PyModule_AddIntMacro(d, RTLD_LOCAL)) return -1; +#endif +#ifdef RTLD_NODELETE + if (PyModule_AddIntMacro(d, RTLD_NODELETE)) return -1; +#endif +#ifdef RTLD_NOLOAD + if (PyModule_AddIntMacro(d, RTLD_NOLOAD)) return -1; +#endif +#ifdef RTLD_DEEPBIND + if (PyModule_AddIntMacro(d, RTLD_DEEPBIND)) return -1; +#endif + #if defined(PYOS_OS2) if (insertvalues(d)) return -1; #endif |