mirror of https://github.com/python/cpython
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:
parent
a4d651fbc8
commit
fff61ea025
|
@ -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
|
||||||
|
|
|
@ -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"):
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue