summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-10-25 11:34:04 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-10-25 11:34:04 (GMT)
commit8b905bd9d40f0545e054737b8796a18366546ffc (patch)
treeb2b62946432510b703420013a926d7a5155ade25
parente0be4232971edca23438cc3d79761141f2de124f (diff)
downloadcpython-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.rst13
-rw-r--r--Doc/library/sys.rst10
-rw-r--r--Lib/test/test_posix.py7
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/posixmodule.c26
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):
diff --git a/Misc/NEWS b/Misc/NEWS
index 0a8a3a8..eb73271 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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