summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2006-04-06 15:23:16 (GMT)
committerThomas Heller <theller@ctypes.org>2006-04-06 15:23:16 (GMT)
commitfff61ea025e9ef31a2a467e685cbda3277d5237f (patch)
tree1bcaa7f235b0bb72f166ba0c906528ed23fe6d1c
parenta4d651fbc8055a59a20e52ddc745a511a1c0b431 (diff)
downloadcpython-fff61ea025e9ef31a2a467e685cbda3277d5237f.zip
cpython-fff61ea025e9ef31a2a467e685cbda3277d5237f.tar.gz
cpython-fff61ea025e9ef31a2a467e685cbda3277d5237f.tar.bz2
Expose RTLD_LOCAL and RTLD_GLOBAL always from the _ctypes extension module.
If RTLD_LOCAL is not #defined in any header file (Windows), set it to 0. If RTLD_GLOBAL is not #defined, set it equal to RTLD_LOCAL. This should fix ctypes on cygwin.
-rw-r--r--Lib/ctypes/__init__.py6
-rw-r--r--Lib/ctypes/_loader.py7
-rw-r--r--Modules/_ctypes/_ctypes.c14
3 files changed, 15 insertions, 12 deletions
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index a005594..28ac180 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -9,11 +9,7 @@ from _ctypes import Union, Structure, Array
from _ctypes import _Pointer
from _ctypes import CFuncPtr as _CFuncPtr
from _ctypes import __version__ as _ctypes_version
-try:
- from _ctypes import RTLD_LOCAL, RTLD_GLOBAL
-except (ImportError, AttributeError):
- RTLD_GLOBAL = RTLD_LOCAL = None
-
+from _ctypes import RTLD_LOCAL, RTLD_GLOBAL
from _ctypes import ArgumentError
from struct import calcsize as _calcsize
diff --git a/Lib/ctypes/_loader.py b/Lib/ctypes/_loader.py
index 6ab0296..7a48c1c 100644
--- a/Lib/ctypes/_loader.py
+++ b/Lib/ctypes/_loader.py
@@ -1,14 +1,11 @@
-# WORK IN PROGRESS! DO NOT (yet) USE!
import sys, os
import ctypes
-__all__ = ["LibraryLoader", "RTLD_LOCAL", "RTLD_GLOBAL"]
-
if os.name in ("nt", "ce"):
from _ctypes import LoadLibrary as dlopen
- RTLD_LOCAL = RTLD_GLOBAL = None
else:
- from _ctypes import dlopen, RTLD_LOCAL, RTLD_GLOBAL
+ from _ctypes import dlopen
+from _ctypes import RTLD_LOCAL, RTLD_GLOBAL
# _findLib(name) returns an iterable of possible names for a library.
if os.name in ("nt", "ce"):
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 0743ec9..b9cac39 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -4575,10 +4575,20 @@ init_ctypes(void)
PyModule_AddObject(m, "_wstring_at_addr", PyLong_FromVoidPtr(wstring_at));
#endif
-#ifdef RTLD_LOCAL
+/* If RTLD_LOCAL is not defined (Windows!), set it to zero. */
+#ifndef RTLD_LOCAL
+#define RTLD_LOCAL 0
+#endif
+
+/* If RTLD_GLOBAL is not defined (cygwin), set it to the same value as
+ RTLD_LOCAL.
+*/
+#ifndef RTLD_GLOBAL
+#define RTLD_GLOBAL RTLD_LOCAL
+#endif
+
PyModule_AddObject(m, "RTLD_LOCAL", PyInt_FromLong(RTLD_LOCAL));
PyModule_AddObject(m, "RTLD_GLOBAL", PyInt_FromLong(RTLD_GLOBAL));
-#endif
PyExc_ArgError = PyErr_NewException("ctypes.ArgumentError", NULL, NULL);
if (PyExc_ArgError) {