summaryrefslogtreecommitdiffstats
path: root/Python/importdl.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1996-08-19 22:12:10 (GMT)
committerGuido van Rossum <guido@python.org>1996-08-19 22:12:10 (GMT)
commit1e6124902a74d5f8445875f64bb2921aad1f9e57 (patch)
tree25540aaab2b671baa882a17bf9adda3b67991a88 /Python/importdl.c
parent71bd363d9c06a297dd507289317ca9d835b2ad00 (diff)
downloadcpython-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.c22
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",