mirror of
https://github.com/python/cpython.git
synced 2025-12-15 21:44:50 +00:00
Cleanup patches from Greg Stein:
* in import.c, #ifdef out references to dynamic loading based on HAVE_DYNAMIC_LOADING * clean out the platform-specific crud from importdl.c. [ maybe fold this function into import.c and drop the importdl.c file? Greg.] * change GetDynLoadFunc's "funcname" parameter to "shortname". change "name" to "fqname" for clarification. * each GetDynLoadFunc now creates its own funcname value. WARNING: as I mentioned previously, we may run into an issue with a missing "_" on some platforms. Testing will show this pretty quickly, however. * move pathname munging into dynload_shlib.c
This commit is contained in:
parent
6a90b5e4d0
commit
96a8fb7e99
11 changed files with 64 additions and 75 deletions
|
|
@ -30,59 +30,22 @@ PERFORMANCE OF THIS SOFTWARE.
|
|||
******************************************************************/
|
||||
|
||||
/* Support for dynamic loading of extension modules */
|
||||
/* If no dynamic linking is supported, this file still generates some code! */
|
||||
|
||||
#include "Python.h"
|
||||
#include "importdl.h"
|
||||
|
||||
/* Explanation of some of the the various #defines used by dynamic linking...
|
||||
|
||||
symbol -- defined for:
|
||||
|
||||
HAVE_DYNAMIC_LOADING -- any kind of dynamic linking (from ./configure)
|
||||
USE_SHLIB -- SunOS or IRIX 5 (SVR4?) shared libraries
|
||||
_AIX -- AIX style dynamic linking
|
||||
__NetBSD__ -- NetBSD shared libraries
|
||||
(assuming dlerror() was introduced between 1.2 and 1.3)
|
||||
__BEOS__ -- BeOS shared libraries - defined by the compiler
|
||||
/* ./configure sets HAVE_DYNAMIC_LOADING if dynamic loading of modules is
|
||||
supported on this platform. configure will then compile and link in one
|
||||
of the dynload_*.c files, as appropriate. We will call a function in
|
||||
those modules to get a function pointer to the module's init function.
|
||||
*/
|
||||
|
||||
/* Configure dynamic linking */
|
||||
|
||||
#ifdef HAVE_DYNAMIC_LOADING
|
||||
|
||||
#include "importdl.h"
|
||||
|
||||
extern dl_funcptr _PyImport_GetDynLoadFunc(const char *name,
|
||||
const char *funcname,
|
||||
const char *shortname,
|
||||
const char *pathname, FILE *fp);
|
||||
|
||||
/* ### given NeXT, is WITH_DYLD not necessary? */
|
||||
|
||||
#if defined(__hp9000s300) || (defined(__NetBSD__) || defined(__FreeBSD__)) && !defined(__ELF__) || defined(__OpenBSD__) || defined(__BORLANDC__) || defined(NeXT) || defined(WITH_DYLD)
|
||||
#define FUNCNAME_PATTERN "_init%.200s"
|
||||
#else
|
||||
#define FUNCNAME_PATTERN "init%.200s"
|
||||
#endif
|
||||
|
||||
/* ### temporary, for setting USE_SHLIB */
|
||||
#if defined(__NetBSD__) && (NetBSD < 199712)
|
||||
#define USE_SHLIB
|
||||
#else
|
||||
#if defined(HAVE_DLOPEN) || defined(M_UNIX)
|
||||
#define USE_SHLIB
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _AIX
|
||||
#undef USE_SHLIB
|
||||
#endif
|
||||
#ifdef __BEOS__
|
||||
#undef USE_SHLIB
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_DYNAMIC_LOADING */
|
||||
|
||||
#ifdef NO_DYNAMIC_LINK
|
||||
#undef HAVE_DYNAMIC_LOADING
|
||||
#endif
|
||||
|
||||
|
||||
PyObject *
|
||||
|
|
@ -91,24 +54,9 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
|
|||
char *pathname;
|
||||
FILE *fp;
|
||||
{
|
||||
#ifndef HAVE_DYNAMIC_LOADING
|
||||
PyErr_SetString(PyExc_ImportError,
|
||||
"dynamically linked modules not supported");
|
||||
return NULL;
|
||||
#else
|
||||
PyObject *m, *d, *s;
|
||||
char funcname[258];
|
||||
char *lastdot, *shortname, *packagecontext;
|
||||
dl_funcptr p = NULL;
|
||||
|
||||
#ifdef USE_SHLIB
|
||||
char pathbuf[260];
|
||||
if (strchr(pathname, '/') == NULL) {
|
||||
/* Prefix bare filename with "./" */
|
||||
sprintf(pathbuf, "./%-.255s", pathname);
|
||||
pathname = pathbuf;
|
||||
}
|
||||
#endif /* USE_SHLIB */
|
||||
dl_funcptr p;
|
||||
|
||||
if ((m = _PyImport_FindExtension(name, pathname)) != NULL) {
|
||||
Py_INCREF(m);
|
||||
|
|
@ -123,15 +71,14 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
|
|||
packagecontext = name;
|
||||
shortname = lastdot+1;
|
||||
}
|
||||
sprintf(funcname, FUNCNAME_PATTERN, shortname);
|
||||
|
||||
p = _PyImport_GetDynLoadFunc(name, funcname, pathname, fp);
|
||||
p = _PyImport_GetDynLoadFunc(name, shortname, pathname, fp);
|
||||
if (PyErr_Occurred())
|
||||
return NULL;
|
||||
if (p == NULL) {
|
||||
PyErr_Format(PyExc_ImportError,
|
||||
"dynamic module does not define init function (%.200s)",
|
||||
funcname);
|
||||
"dynamic module does not define init function (init%.200s)",
|
||||
shortname);
|
||||
return NULL;
|
||||
}
|
||||
_Py_PackageContext = packagecontext;
|
||||
|
|
@ -160,5 +107,6 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
|
|||
name, pathname);
|
||||
Py_INCREF(m);
|
||||
return m;
|
||||
#endif /* HAVE_DYNAMIC_LOADING */
|
||||
}
|
||||
|
||||
#endif /* HAVE_DYNAMIC_LOADING */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue