diff options
author | Guido van Rossum <guido@python.org> | 1996-08-19 22:12:10 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1996-08-19 22:12:10 (GMT) |
commit | 1e6124902a74d5f8445875f64bb2921aad1f9e57 (patch) | |
tree | 25540aaab2b671baa882a17bf9adda3b67991a88 /Python/importdl.c | |
parent | 71bd363d9c06a297dd507289317ca9d835b2ad00 (diff) | |
download | cpython-1e6124902a74d5f8445875f64bb2921aad1f9e57.zip cpython-1e6124902a74d5f8445875f64bb2921aad1f9e57.tar.gz cpython-1e6124902a74d5f8445875f64bb2921aad1f9e57.tar.bz2 |
Many little fixes:
- support for SCO_SV dynamic loading
- on Mac, auto-detect dynamic loading by __CFM68K__ or _powerc)
- on Mac, long shared library extension is .cfm68k.slb or .ppc.slb
- on hp, don't redefine hpux if already defined
- add __file__ property to successfully loaded module
Diffstat (limited to 'Python/importdl.c')
-rw-r--r-- | Python/importdl.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/Python/importdl.c b/Python/importdl.c index d68b002..3ca185f 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -55,8 +55,10 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* Configure dynamic linking */ #ifdef __hpux +#ifndef hpux #define hpux #endif +#endif #ifdef hpux #define DYNAMIC_LINK @@ -106,6 +108,10 @@ typedef FARPROC dl_funcptr; #define USE_DL #endif +#ifdef __powerc +#define USE_MAC_DYNAMIC_LOADING +#endif + #ifdef __CFM68K__ #define USE_MAC_DYNAMIC_LOADING #endif @@ -113,13 +119,17 @@ typedef FARPROC dl_funcptr; #ifdef USE_MAC_DYNAMIC_LOADING #define DYNAMIC_LINK #define SHORT_EXT ".slb" -#define LONG_EXT "module.slb" +#ifdef __CFM68K__ +#define LONG_EXT ".CFM68K.slb" +#else +#define LONG_EXT ".ppc.slb" +#endif #ifndef _DL_FUNCPTR_DEFINED typedef void (*dl_funcptr)(); #endif #endif -#if !defined(DYNAMIC_LINK) && defined(HAVE_DLFCN_H) && defined(HAVE_DLOPEN) +#if !defined(DYNAMIC_LINK) && defined(HAVE_DLFCN_H) && (defined(HAVE_DLOPEN) || defined(M_UNIX)) #define DYNAMIC_LINK #define USE_SHLIB #endif @@ -232,7 +242,7 @@ load_dynamic_module(name, pathname, fp) err_setstr(ImportError, "dynamically linked modules not supported"); return NULL; #else - object *m; + object *m, *d, *s; char funcname[258]; dl_funcptr p = NULL; #ifdef USE_SHLIB @@ -507,6 +517,12 @@ load_dynamic_module(name, pathname, fp) "dynamic module not initialized properly"); return NULL; } + /* Remember the filename as the __file__ attribute */ + d = getmoduledict(m); + s = newstringobject(pathname); + if (s == NULL || dictinsert(d, "__file__", s) != 0) + err_clear(); /* Not important enough to report */ + XDECREF(s); if (verbose) fprintf(stderr, "import %s # dynamically loaded from %s\n", |