From: Martin v. Löwis Date: Tue, 1 Jan 2002 20:18:30 +0000 (+0000) Subject: Patch #497126: Always compile dl. X-Git-Tag: v2.3c1~6911 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=93227275dcf18196c1b81a3c884dbd2e78c8f440;p=python Patch #497126: Always compile dl. --- diff --git a/Misc/ACKS b/Misc/ACKS index ead7ec8a97..861e226851 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -312,6 +312,7 @@ Fredrik Nehr Chad Netzer Max Neunhöffer George Neville-Neil +Gustavo Niemeyer Oscar Nierstrasz Hrvoje Niksic Bill Noon diff --git a/Misc/NEWS b/Misc/NEWS index a0e3572005..abdf40089f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,10 @@ Core and builtins Extension modules +- dl is now build on every system that has dlfcn.h. Failure in case + of sizeof(int)!=sizeof(long)!=sizeof(void*) is delayed until dl.open + is called. + Library - ftplib: to safeguard the user's privacy, anonymous login will use diff --git a/Modules/dlmodule.c b/Modules/dlmodule.c index 18b97d8584..46ae926a3a 100644 --- a/Modules/dlmodule.c +++ b/Modules/dlmodule.c @@ -158,6 +158,13 @@ dl_open(PyObject *self, PyObject *args) char *name; int mode; PyUnivPtr *handle; + if (sizeof(int) != sizeof(long) || + sizeof(long) != sizeof(char *)) { + PyErr_SetString(PyExc_SystemError, + "module dl requires sizeof(int) == sizeof(long) == sizeof(char*)"); + return NULL; + } + if (PyArg_Parse(args, "z", &name)) mode = RTLD_LAZY; else { @@ -204,13 +211,6 @@ initdl(void) { PyObject *m, *d, *x; - if (sizeof(int) != sizeof(long) || - sizeof(long) != sizeof(char *)) { - PyErr_SetString(PyExc_SystemError, - "module dl requires sizeof(int) == sizeof(long) == sizeof(char*)"); - return; - } - /* Initialize object type */ Dltype.ob_type = &PyType_Type; diff --git a/setup.py b/setup.py index 28a1a7c183..8af8bde3ee 100644 --- a/setup.py +++ b/setup.py @@ -567,6 +567,11 @@ class PyBuildExt(build_ext): define_macros = expat_defs, libraries = ['expat']) ) + # Dynamic loading module + dl_inc = find_file('dlfcn.h', [], inc_dirs) + if dl_inc is not None: + exts.append( Extension('dl', ['dlmodule.c']) ) + # Platform-specific libraries if platform == 'linux2': # Linux-specific modules