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
diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c
index f8f4317..0e27152 100644
--- a/Python/dynload_aix.c
+++ b/Python/dynload_aix.c
@@ -202,7 +202,7 @@
 }
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
diff --git a/Python/dynload_beos.c b/Python/dynload_beos.c
index 4b4a49a..717d5a9 100644
--- a/Python/dynload_beos.c
+++ b/Python/dynload_beos.c
@@ -185,13 +185,14 @@
 
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
 	image_id the_id;
 	status_t retval;
 	char fullpath[PATH_MAX];
+	char funcname[258];
 
 	if( Py_VerboseFlag ) {
 		printf( "load_add_on( %s )\n", pathname );
@@ -236,6 +237,7 @@
 		return NULL;
 	}
 
+	sprintf(funcname, "init%.200s", shortname);
 	if( Py_VerboseFlag ) {
 		printf( "get_image_symbol( %s )\n", funcname );
 	}
@@ -274,7 +276,7 @@
 	/* Save the module name and image ID for later so we can clean up
 	 * gracefully.
 	 */
-	beos_add_dyn( name, the_id );
+	beos_add_dyn( fqname, the_id );
 
 	return p;
 }
diff --git a/Python/dynload_dl.c b/Python/dynload_dl.c
index 3b445ce..45dcff7 100644
--- a/Python/dynload_dl.c
+++ b/Python/dynload_dl.c
@@ -46,8 +46,11 @@
 };
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
+	char funcname[258];
+
+	sprintf(funcname, "init%.200s", shortname);
 	return dl_loadmod(Py_GetProgramName(), pathname, funcname);
 }
diff --git a/Python/dynload_hpux.c b/Python/dynload_hpux.c
index 4379cbe..b8a5ffc 100644
--- a/Python/dynload_hpux.c
+++ b/Python/dynload_hpux.c
@@ -37,6 +37,11 @@
 #include "Python.h"
 #include "importdl.h"
 
+#if defined(__hp9000s300)
+#define FUNCNAME_PATTERN "_init%.200s"
+#else
+#define FUNCNAME_PATTERN "init%.200s"
+#endif
 
 const struct filedescr _PyImport_DynLoadFiletab[] = {
 	{".sl", "rb", C_EXTENSION},
@@ -44,12 +49,13 @@
 	{0, 0}
 };
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
 	shl_t lib;
 	int flags;
+	char funcname[258];
 
 	flags = BIND_FIRST | BIND_DEFERRED;
 	if (Py_VerboseFlag) {
@@ -67,6 +73,7 @@
 		PyErr_SetString(PyExc_ImportError, buf);
 		return NULL;
 	}
+	sprintf(funcname, FUNCNAME_PATTERN, shortname);
 	if (Py_VerboseFlag)
 		printf("shl_findsym %s\n", funcname);
 	shl_findsym(&lib, funcname, TYPE_UNDEFINED, (void *) &p);
diff --git a/Python/dynload_mac.c b/Python/dynload_mac.c
index 9161995..58c57d5 100644
--- a/Python/dynload_mac.c
+++ b/Python/dynload_mac.c
@@ -59,10 +59,11 @@
 };
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
+	char funcname[258];
 
 	/*
 	** Dynamic loading of CFM shared libraries on the Mac.  The
@@ -121,6 +122,7 @@
 		return NULL;
 	}
 	/* Locate the address of the correct init function */
+	sprintf(funcname, "init%.200s", shortname);
 	err = FindSymbol(connID, Pstring(funcname), &symAddr, &class);
 	if ( err ) {
 		sprintf(buf, "%s: %.200s",
diff --git a/Python/dynload_next.c b/Python/dynload_next.c
index bcb9e4b..5088b05 100644
--- a/Python/dynload_next.c
+++ b/Python/dynload_next.c
@@ -68,10 +68,13 @@
 	{0, 0}
 };
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p = NULL;
+	char funcname[258];
+
+	sprintf(funcname, "_init%.200s", shortname);
 
 #ifdef USE_RLD
 	{
diff --git a/Python/dynload_os2.c b/Python/dynload_os2.c
index 6090c33..528e7dc 100644
--- a/Python/dynload_os2.c
+++ b/Python/dynload_os2.c
@@ -45,13 +45,14 @@
 	{0, 0}
 };
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
 	APIRET  rc;
 	HMODULE hDLL;
 	char failreason[256];
+	char funcname[258];
 
 	rc = DosLoadModule(failreason,
 			   sizeof(failreason),
@@ -67,6 +68,7 @@
 		return NULL;
 	}
 
+	sprintf(funcname, "init%.200s", shortname);
 	rc = DosQueryProcAddr(hDLL, 0L, funcname, &p);
 	if (rc != NO_ERROR)
 		p = NULL; /* Signify Failure to Acquire Entrypoint */
diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
index d3c5a6e..2823bbb 100644
--- a/Python/dynload_shlib.c
+++ b/Python/dynload_shlib.c
@@ -65,11 +65,22 @@
 static int nhandles = 0;
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
 	void *handle;
+	char funcname[258];
+	char pathbuf[260];
+
+	if (strchr(pathname, '/') == NULL) {
+		/* Prefix bare filename with "./" */
+		sprintf(pathbuf, "./%-.255s", pathname);
+		pathname = pathbuf;
+	}
+
+	/* ### should there be a leading underscore for some platforms? */
+	sprintf(funcname, "init%.200s", shortname);
 
 	if (fp != NULL) {
 		int i;
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 9e68cac..08a2a89 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -49,10 +49,13 @@
 };
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
+	char funcname[258];
+
+	sprintf(funcname, "init%.200s", shortname);
 
 #ifdef MS_WIN32
 	{
diff --git a/Python/import.c b/Python/import.c
index e10463b..bce1b57 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -1234,9 +1234,11 @@
 		m = load_compiled_module(name, buf, fp);
 		break;
 
+#ifdef HAVE_DYNAMIC_LOADING
 	case C_EXTENSION:
 		m = _PyImport_LoadDynamicModule(name, buf, fp);
 		break;
+#endif
 
 #ifdef macintosh
 	case PY_RESOURCE:
@@ -2158,6 +2160,8 @@
 	return m;
 }
 
+#ifdef HAVE_DYNAMIC_LOADING
+
 static PyObject *
 imp_load_dynamic(self, args)
 	PyObject *self;
@@ -2180,6 +2184,8 @@
 	return m;
 }
 
+#endif /* HAVE_DYNAMIC_LOADING */
+
 static PyObject *
 imp_load_source(self, args)
 	PyObject *self;
@@ -2330,7 +2336,9 @@
 	{"is_builtin",		imp_is_builtin,		1},
 	{"is_frozen",		imp_is_frozen,		1},
 	{"load_compiled",	imp_load_compiled,	1},
+#ifdef HAVE_DYNAMIC_LOADING
 	{"load_dynamic",	imp_load_dynamic,	1},
+#endif
 	{"load_package",	imp_load_package,	1},
 #ifdef macintosh
 	{"load_resource",	imp_load_resource,	1},
diff --git a/Python/importdl.c b/Python/importdl.c
index 6b3eccc..8dd14b8 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -30,59 +30,22 @@
 ******************************************************************/
 
 /* 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 @@
 	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 @@
 		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 @@
 			name, pathname);
 	Py_INCREF(m);
 	return m;
-#endif /* HAVE_DYNAMIC_LOADING */
 }
+
+#endif /* HAVE_DYNAMIC_LOADING */