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.
This commit is contained in:
Thomas Heller 2006-04-06 15:23:16 +00:00
parent a4d651fbc8
commit fff61ea025
3 changed files with 15 additions and 12 deletions

View File

@ -9,11 +9,7 @@ from _ctypes import Union, Structure, Array
from _ctypes import _Pointer from _ctypes import _Pointer
from _ctypes import CFuncPtr as _CFuncPtr from _ctypes import CFuncPtr as _CFuncPtr
from _ctypes import __version__ as _ctypes_version from _ctypes import __version__ as _ctypes_version
try: from _ctypes import RTLD_LOCAL, RTLD_GLOBAL
from _ctypes import RTLD_LOCAL, RTLD_GLOBAL
except (ImportError, AttributeError):
RTLD_GLOBAL = RTLD_LOCAL = None
from _ctypes import ArgumentError from _ctypes import ArgumentError
from struct import calcsize as _calcsize from struct import calcsize as _calcsize

View File

@ -1,14 +1,11 @@
# WORK IN PROGRESS! DO NOT (yet) USE!
import sys, os import sys, os
import ctypes import ctypes
__all__ = ["LibraryLoader", "RTLD_LOCAL", "RTLD_GLOBAL"]
if os.name in ("nt", "ce"): if os.name in ("nt", "ce"):
from _ctypes import LoadLibrary as dlopen from _ctypes import LoadLibrary as dlopen
RTLD_LOCAL = RTLD_GLOBAL = None
else: 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. # _findLib(name) returns an iterable of possible names for a library.
if os.name in ("nt", "ce"): if os.name in ("nt", "ce"):

View File

@ -4575,10 +4575,20 @@ init_ctypes(void)
PyModule_AddObject(m, "_wstring_at_addr", PyLong_FromVoidPtr(wstring_at)); PyModule_AddObject(m, "_wstring_at_addr", PyLong_FromVoidPtr(wstring_at));
#endif #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_LOCAL", PyInt_FromLong(RTLD_LOCAL));
PyModule_AddObject(m, "RTLD_GLOBAL", PyInt_FromLong(RTLD_GLOBAL)); PyModule_AddObject(m, "RTLD_GLOBAL", PyInt_FromLong(RTLD_GLOBAL));
#endif
PyExc_ArgError = PyErr_NewException("ctypes.ArgumentError", NULL, NULL); PyExc_ArgError = PyErr_NewException("ctypes.ArgumentError", NULL, NULL);
if (PyExc_ArgError) { if (PyExc_ArgError) {