Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.327 diff -u -r1.327 configure.in --- configure.in 25 Jun 2002 05:53:48 -0000 1.327 +++ configure.in 5 Jul 2002 06:41:28 -0000 @@ -123,8 +123,7 @@ ppc) CC=mwcc without_gcc=yes - OPT="-O -D'DL_EXPORT(RTYPE)=__declspec(dllexport) RTYPE' -D'DL_IMPORT(RTYPE)=__declspec(dllexport) RTYPE' -export pragma" - CCSHARED="-UDL_IMPORT -D'DL_IMPORT(RTYPE)=__declspec(dllimport) RTYPE'" + OPT="-O -export pragma" LDFLAGS="$LDFLAGS -nodup" ;; x86) @@ -357,6 +356,7 @@ # Other platforms follow if test $enable_shared = "yes"; then + AC_DEFINE(Py_ENABLE_SHARED, 1, [Defined if Python is built as a shared library.]) case $ac_sys_system in BeOS*) LDLIBRARY='libpython$(VERSION).so' @@ -946,7 +946,6 @@ *gcc*) CCSHARED="-shared";; *) CCSHARED="";; esac;; - CYGWIN*) CCSHARED="-DUSE_DL_IMPORT";; atheos*) CCSHARED="-fPIC";; esac fi Index: Makefile.pre.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.pre.in,v retrieving revision 1.86 diff -u -r1.86 Makefile.pre.in --- Makefile.pre.in 21 Jun 2002 14:48:36 -0000 1.86 +++ Makefile.pre.in 5 Jul 2002 06:41:28 -0000 @@ -65,7 +65,7 @@ # Extra C flags added for building the interpreter object files. CFLAGSFORSHARED=@CFLAGSFORSHARED@ # C flags used for building the interpreter object files -PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) +PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE # Machine-dependent subdirectories @@ -420,10 +420,10 @@ Python/compile.o Python/symtable.o: $(GRAMMAR_H) Python/getplatform.o: $(srcdir)/Python/getplatform.c - $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c + $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c Python/importdl.o: $(srcdir)/Python/importdl.c - $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c + $(CC) -c $(PY_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c Objects/unicodectype.o: $(srcdir)/Objects/unicodectype.c \ $(srcdir)/Objects/unicodetype_db.h Index: Include/pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.51 diff -u -r2.51 pyport.h --- Include/pyport.h 3 Jul 2002 03:31:20 -0000 2.51 +++ Include/pyport.h 5 Jul 2002 06:41:29 -0000 @@ -379,19 +379,82 @@ extern double hypot(double, double); #endif -#ifndef __CYGWIN__ -#ifndef DL_IMPORT /* declarations for DLL import */ -#define DL_IMPORT(RTYPE) RTYPE -#endif -#else /* __CYGWIN__ */ -#ifdef USE_DL_IMPORT -#define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE -#define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE -#else /* !USE_DL_IMPORT */ -#define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE -#define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE -#endif /* USE_DL_IMPORT */ -#endif /* __CYGWIN__ */ +/* Declarations for symbol visibility. + + PyAPI_FUNC(type): Declares a public Python API function and return type + PyAPI_DATA(type): Declares public Python data and its type + PyMODINIT_FUNC: A Python module init function. If these functions are + inside the Python core, they are private to the core. + If in an extension module, it may be declared with + external linkage depending on the platform. + + As a number of platforms support/require "__declspec(dllimport/dllexport)", + we support a HAVE_DECLSPEC_DLL macro to save duplication. +*/ + +/* +All windows ports, except cygwin, are handled in PC/pyconfig.h +BeOS is only other autoconf platform requiring special linkage handling +and both these use __declspec() +*/ +#if defined(__CYGWIN__) || defined(__BEOS__) +# define HAVE_DECLSPEC_DLL +#endif + +#if defined(Py_ENABLE_SHARED) /* only get special linkage if built as shared */ +# if defined(HAVE_DECLSPEC_DLL) +# ifdef Py_BUILD_CORE +# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE +# define PyAPI_DATA(RTYPE) __declspec(dllexport) RTYPE + /* module init functions inside the core need no external linkage */ +# define PyMODINIT_FUNC void +# else /* Py_BUILD_CORE */ + /* Building an extension module, or an embedded situation */ + /* public Python functions and data are imported */ +# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE +# define PyAPI_DATA(RTYPE) __declspec(dllimport) RTYPE + /* module init functions outside the core must be exported */ +# if defined(__cplusplus) +# define PyMODINIT_FUNC extern "C" __declspec(dllexport) void +# else /* __cplusplus */ +# define PyMODINIT_FUNC __declspec(dllexport) void +# endif /* __cplusplus */ +# endif /* Py_BUILD_CORE */ +# endif /* HAVE_DECLSPEC */ +#endif /* Py_ENABLE_SHARED */ + +/* If no external linkage macros defined by now, create defaults */ +#ifndef PyAPI_FUNC +# define PyAPI_FUNC(RTYPE) RTYPE +#endif +#ifndef PyAPI_DATA +# define PyAPI_DATA(RTYPE) RTYPE +#endif +#ifndef PyMODINIT_FUNC +# if defined(__cplusplus) +# define PyMODINIT_FUNC extern "C" void +# else /* __cplusplus */ +# define PyMODINIT_FUNC void +# endif /* __cplusplus */ +#endif + +/* Deprecated DL_IMPORT and DL_EXPORT macros */ +#if defined(Py_ENABLE_SHARED) && defined (HAVE_DECLSPEC_DLL) +# if defined(Py_BUILD_CORE) +# define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE +# define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE +# else +# define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE +# define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE +# endif +#endif +#ifndef DL_EXPORT +# define DL_EXPORT(RTYPE) RTYPE +#endif +#ifndef DL_IMPORT +# define DL_IMPORT(RTYPE) RTYPE +#endif +/* End of deprecated DL_* macros */ /* If the fd manipulation macros aren't defined, here is a set that should do the job */ @@ -456,15 +519,6 @@ * overflows. */ #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." -#endif - -/* - * Rename some functions for the Borland compiler - */ -#ifdef __BORLANDC__ -# include -# define _chsize chsize -# define _setmode setmode #endif #ifdef __cplusplus Index: Include/import.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/import.h,v retrieving revision 2.27 diff -u -r2.27 import.h --- Include/import.h 1 Sep 2000 23:29:26 -0000 2.27 +++ Include/import.h 5 Jul 2002 06:41:29 -0000 @@ -7,32 +7,32 @@ extern "C" { #endif -DL_IMPORT(long) PyImport_GetMagicNumber(void); -DL_IMPORT(PyObject *) PyImport_ExecCodeModule(char *name, PyObject *co); -DL_IMPORT(PyObject *) PyImport_ExecCodeModuleEx( +PyAPI_FUNC(long) PyImport_GetMagicNumber(void); +PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(char *name, PyObject *co); +PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx( char *name, PyObject *co, char *pathname); -DL_IMPORT(PyObject *) PyImport_GetModuleDict(void); -DL_IMPORT(PyObject *) PyImport_AddModule(char *name); -DL_IMPORT(PyObject *) PyImport_ImportModule(char *name); -DL_IMPORT(PyObject *) PyImport_ImportModuleEx( +PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void); +PyAPI_FUNC(PyObject *) PyImport_AddModule(char *name); +PyAPI_FUNC(PyObject *) PyImport_ImportModule(char *name); +PyAPI_FUNC(PyObject *) PyImport_ImportModuleEx( char *name, PyObject *globals, PyObject *locals, PyObject *fromlist); -DL_IMPORT(PyObject *) PyImport_Import(PyObject *name); -DL_IMPORT(PyObject *) PyImport_ReloadModule(PyObject *m); -DL_IMPORT(void) PyImport_Cleanup(void); -DL_IMPORT(int) PyImport_ImportFrozenModule(char *); +PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); +PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); +PyAPI_FUNC(void) PyImport_Cleanup(void); +PyAPI_FUNC(int) PyImport_ImportFrozenModule(char *); -extern DL_IMPORT(PyObject *)_PyImport_FindExtension(char *, char *); -extern DL_IMPORT(PyObject *)_PyImport_FixupExtension(char *, char *); +extern PyAPI_FUNC(PyObject *)_PyImport_FindExtension(char *, char *); +extern PyAPI_FUNC(PyObject *)_PyImport_FixupExtension(char *, char *); struct _inittab { char *name; void (*initfunc)(void); }; -extern DL_IMPORT(struct _inittab *) PyImport_Inittab; +extern PyAPI_DATA(struct _inittab *) PyImport_Inittab; -extern DL_IMPORT(int) PyImport_AppendInittab(char *name, void (*initfunc)(void)); -extern DL_IMPORT(int) PyImport_ExtendInittab(struct _inittab *newtab); +extern PyAPI_FUNC(int) PyImport_AppendInittab(char *name, void (*initfunc)(void)); +extern PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab); struct _frozen { char *name; @@ -43,7 +43,7 @@ /* Embedding apps may change this pointer to point to their favorite collection of frozen modules: */ -extern DL_IMPORT(struct _frozen *) PyImport_FrozenModules; +extern PyAPI_DATA(struct _frozen *) PyImport_FrozenModules; #ifdef __cplusplus } Index: PC/pyconfig.h =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/pyconfig.h,v retrieving revision 1.11 diff -u -r1.11 pyconfig.h --- PC/pyconfig.h 30 Jun 2002 15:26:10 -0000 1.11 +++ PC/pyconfig.h 5 Jul 2002 06:41:29 -0000 @@ -14,23 +14,17 @@ MS_WIN64 - Code specific to the MS Win64 API MS_WIN32 - Code specific to the MS Win32 (and Win64) API (obsolete, this covers all supported APIs) MS_WINDOWS - Code specific to Windows, but all versions. -MS_COREDLL - Code if the Python core is built as a DLL. - -Note that the old defines "NT" and "WIN32" are still supported, but -will soon be dropped. +Py_ENABLE_SHARED - Code if the Python core is built as a DLL. Also note that neither "_M_IX86" or "_MSC_VER" should be used for any purpose other than "Windows Intel x86 specific" and "Microsoft compiler specific". Therefore, these should be very rare. -*/ +NOTE: The following symbols are deprecated: +NT, WIN32, USE_DL_EXPORT, USE_DL_IMPORT, DL_EXPORT, DL_IMPORT +MS_CORE_DLL. -/* - Some systems require special declarations for data items imported - or exported from dynamic link libraries. Note that the definition - of DL_IMPORT covers both cases. Define USE_DL_IMPORT for the client - of a DLL. Define USE_DL_EXPORT when making a DLL. */ #include @@ -40,12 +34,30 @@ #define HAVE_TEMPNAM #define HAVE_TMPFILE #define HAVE_TMPNAM +#define HAVE_CLOCK +#define HAVE_STRFTIME +#define HAVE_STRERROR #define DONT_HAVE_SIG_ALARM #define DONT_HAVE_SIG_PAUSE #define LONG_BIT 32 +#define WORD_BIT 32 #define PREFIX "" #define EXEC_PREFIX "" +#define MS_WIN32 /* only support win32 and greater. */ +#define MS_WINDOWS +#ifndef PYTHONPATH +# define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk" +#endif +#define NT_THREADS +#define WITH_THREAD +#ifndef NETSCAPE_PI +#define USE_SOCKET +#endif + +/* Compiler specific defines */ + +/* ------------------------------------------------------------------------*/ /* Microsoft C defines _MSC_VER */ #ifdef _MSC_VER @@ -60,11 +72,6 @@ #ifdef _WIN64 #define MS_WIN64 #endif -#ifdef _WIN32 -#define NT /* NT is obsolete - please use MS_WIN32 instead */ -#define MS_WIN32 -#endif -#define MS_WINDOWS /* set the COMPILER */ #ifdef MS_WIN64 @@ -87,99 +94,40 @@ #endif #endif /* MS_WIN32 && !MS_WIN64 */ -#endif /* _MSC_VER */ - -#if defined(_MSC_VER) && _MSC_VER > 850 -/* Start of defines for MS_WIN32 using VC++ 2.0 and up */ - -/* For NT the Python core is in a DLL by default. Test the -standard macro MS_COREDLL to find out. If you have an exception -you must define MS_NO_COREDLL (do not test this macro) */ -#ifndef MS_NO_COREDLL -#define MS_COREDLL /* Python core is in a DLL */ -#ifndef USE_DL_EXPORT -#define USE_DL_IMPORT -#endif /* !USE_DL_EXPORT */ -#endif /* !MS_NO_COREDLL */ - -#define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk" typedef int pid_t; -#define WORD_BIT 32 #pragma warning(disable:4113) #define hypot _hypot -#include -#define HAVE_CLOCK -#define HAVE_STRFTIME -#define HAVE_STRERROR -#define NT_THREADS -#define WITH_THREAD -#ifndef NETSCAPE_PI -#define USE_SOCKET -#endif -#ifdef USE_DL_IMPORT -#define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE -#endif -#ifdef USE_DL_EXPORT -#define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE -#define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE -#endif -#define HAVE_LONG_LONG 1 -#define LONG_LONG __int64 -#endif /* _MSC_VER && > 850 */ +#endif /* _MSC_VER */ +/* define some ANSI types that are not defined in earlier Win headers */ +#if defined(_MSC_VER) && _MSC_VER >= 1200 +/* This file only exists in VC 6.0 or higher */ +#include +#endif + +/* ------------------------------------------------------------------------*/ /* The Borland compiler defines __BORLANDC__ */ /* XXX These defines are likely incomplete, but should be easy to fix. */ #ifdef __BORLANDC__ #define COMPILER "[Borland]" -#define HAVE_CLOCK -#define HAVE_STRFTIME #ifdef _WIN32 - /* tested with BCC 5.5 (__BORLANDC__ >= 0x0550) */ -#define NT /* NT is obsolete - please use MS_WIN32 instead */ -#define MS_WIN32 -#define MS_WINDOWS - -/* For NT the Python core is in a DLL by default. Test the -standard macro MS_COREDLL to find out. If you have an exception -you must define MS_NO_COREDLL (do not test this macro) */ -#ifndef MS_NO_COREDLL -#define MS_COREDLL /* Python core is in a DLL */ -#ifndef USE_DL_EXPORT -#define USE_DL_IMPORT -#endif /* !USE_DL_EXPORT */ -#endif /* !MS_NO_COREDLL */ -#define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk" typedef int pid_t; -#define WORD_BIT 32 -#include -#define HAVE_STRERROR -#define NT_THREADS -#define WITH_THREAD -#ifndef NETSCAPE_PI -#define USE_SOCKET -#endif /* BCC55 seems to understand __declspec(dllimport), it is used in its - own header files (winnt.h, ...) */ -#ifdef USE_DL_IMPORT -#define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE -#endif -#ifdef USE_DL_EXPORT -#define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE -#define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE -#endif - -#define HAVE_LONG_LONG 1 -#define LONG_LONG __int64 + own header files (winnt.h, ...) - so we can do nothing and get the default*/ #undef HAVE_SYS_UTIME_H #define HAVE_UTIME_H #define HAVE_DIRENT_H -#define HAVE_CLOCK + +/* rename a few functions for the Borland compiler */ +#include +#define _chsize chsize +#define _setmode setmode #else /* !_WIN32 */ #error "Only Win32 and later are supported" @@ -187,6 +135,7 @@ #endif /* BORLANDC */ +/* ------------------------------------------------------------------------*/ /* egcs/gnu-win32 defines __GNUC__ and _WIN32 */ #if defined(__GNUC__) && defined(_WIN32) /* XXX These defines are likely incomplete, but should be easy to fix. @@ -199,97 +148,67 @@ #warning "Please use an up-to-date version of gcc! (>2.91 recommended)" #endif -#define NT /* NT is obsolete - please use MS_WIN32 instead */ -#define MS_WIN32 -#define MS_WINDOWS - -/* For NT the Python core is in a DLL by default. Test the -standard macro MS_COREDLL to find out. If you have an exception -you must define MS_NO_COREDLL (do not test this macro) */ -#ifndef MS_NO_COREDLL -#define MS_COREDLL /* Python core is in a DLL */ -#ifndef USE_DL_EXPORT -#define USE_DL_IMPORT -#endif /* !USE_DL_EXPORT */ -#endif /* !MS_NO_COREDLL */ - #define COMPILER "[gcc]" -#define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk" -#define WORD_BIT 32 #define hypot _hypot -#include -#define HAVE_CLOCK -#define HAVE_STRFTIME -#define HAVE_STRERROR -#define NT_THREADS -#define WITH_THREAD -#ifndef NETSCAPE_PI -#define USE_SOCKET -#endif -#ifdef USE_DL_IMPORT -#define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE -#endif -#ifdef USE_DL_EXPORT -#define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE -#define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE -#endif - -#define HAVE_LONG_LONG 1 #define LONG_LONG long long #endif /* GNUC */ +/* ------------------------------------------------------------------------*/ /* lcc-win32 defines __LCC__ */ - #if defined(__LCC__) /* XXX These defines are likely incomplete, but should be easy to fix. They should be complete enough to build extension modules. */ -#define NT /* NT is obsolete - please use MS_WIN32 instead */ -#define MS_WIN32 -#define MS_WINDOWS - -/* For NT the Python core is in a DLL by default. Test the -standard macro MS_COREDLL to find out. If you have an exception -you must define MS_NO_COREDLL (do not test this macro) */ -#ifndef MS_NO_COREDLL -#define MS_COREDLL /* Python core is in a DLL */ -#ifndef USE_DL_EXPORT -#define USE_DL_IMPORT -#endif /* !USE_DL_EXPORT */ -#endif /* !MS_NO_COREDLL */ - #define COMPILER "[lcc-win32]" -#define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk" typedef int pid_t; -#define WORD_BIT 32 -#include -#define HAVE_CLOCK -#define HAVE_STRFTIME -#define HAVE_STRERROR -#define NT_THREADS -#define WITH_THREAD -#ifndef NETSCAPE_PI -#define USE_SOCKET -#endif -#ifdef USE_DL_IMPORT -#define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE -#endif -#ifdef USE_DL_EXPORT -#define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE -#define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE -#endif +/* __declspec() is supported here too - do nothing to get the defaults */ -#define HAVE_LONG_LONG 1 -#define LONG_LONG __int64 #endif /* LCC */ +/* ------------------------------------------------------------------------*/ /* End of compilers - finish up */ -/* define some ANSI types that are not defined in earlier Win headers */ -#if _MSC_VER >= 1200 /* This file only exists in VC 6.0 or higher */ -#include +#ifndef NO_STDIO_H +# include #endif +/* 64 bit ints are usually spelt __int64 unless compiler has overridden */ +#define HAVE_LONG_LONG 1 +#ifndef LONG_LONG +# define LONG_LONG __int64 +#endif + +/* For Windows the Python core is in a DLL by default. Test +Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ +#if !defined(MS_NO_COREDLL) && !defined(Py_NO_ENABLE_SHARED) +# define Py_ENABLE_SHARED 1 /* standard symbol for shared library */ +# define MS_COREDLL /* deprecated old symbol */ +#endif /* !MS_NO_COREDLL && ... */ + +/* Deprecated USE_DL_EXPORT macro - please use Py_BUILD_CORE */ +#ifdef USE_DL_EXPORT +# define Py_BUILD_CORE +#endif /* USE_DL_EXPORT */ + +/* All windows compilers that use this header support __declspec */ +#define HAVE_DECLSPEC_DLL + +/* For an MSVC DLL, we can nominate the .lib files used by extensions */ +#ifdef MS_COREDLL +# ifndef Py_BUILD_CORE /* not building the core - must be an ext */ +# if defined(_MSC_VER) + /* So MSVC users need not specify the .lib file in + their Makefile (other compilers are generally + taken care of by distutils.) */ +# ifdef _DEBUG +# pragma comment(lib,"python23_d.lib") +# else +# pragma comment(lib,"python23.lib") +# endif /* _DEBUG */ +# endif /* _MSC_VER */ +# endif /* Py_BUILD_CORE */ +#endif /* MS_COREDLL */ + #if defined(MS_WIN64) /* maintain "win32" sys.platform for backward compatibility of Python code, the Win64 API should be close enough to the Win32 API to make this @@ -321,23 +240,12 @@ # endif #endif - -#ifdef MS_WIN32 - -#if !defined(USE_DL_EXPORT) && defined(_MSC_VER) -/* So nobody using MSVC needs to specify the .lib in their Makefile any - more (other compilers will still need to do so, but that's taken care - of by the Distutils, so it's not a problem). */ #ifdef _DEBUG -#pragma comment(lib,"python23_d.lib") -#else -#pragma comment(lib,"python23.lib") +# define Py_DEBUG #endif -#endif /* USE_DL_EXPORT */ -#ifdef _DEBUG -#define Py_DEBUG -#endif + +#ifdef MS_WIN32 #define SIZEOF_SHORT 2 #define SIZEOF_INT 4 Index: PC/_winreg.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/_winreg.c,v retrieving revision 1.10 diff -u -r1.10 _winreg.c --- PC/_winreg.c 13 Jun 2002 20:33:01 -0000 1.10 +++ PC/_winreg.c 5 Jul 2002 06:41:30 -0000 @@ -1423,7 +1423,7 @@ #define ADD_KEY(val) inskey(d, #val, val) -__declspec(dllexport) void init_winreg(void) +PyMODINIT_FUNC init_winreg(void) { PyObject *m, *d; m = Py_InitModule3("_winreg", winreg_methods, module_doc); Index: Modules/_sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.80 diff -u -r2.80 _sre.c --- Modules/_sre.c 13 Jun 2002 21:11:11 -0000 2.80 +++ Modules/_sre.c 5 Jul 2002 06:41:31 -0000 @@ -2979,8 +2979,7 @@ {NULL, NULL} }; -DL_EXPORT(void) -init_sre(void) +PyMODINIT_FUNC init_sre(void) { PyObject* m; PyObject* d; Index: Modules/pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.67 diff -u -r2.67 pyexpat.c --- Modules/pyexpat.c 2 Jul 2002 15:44:36 -0000 2.67 +++ Modules/pyexpat.c 5 Jul 2002 06:41:36 -0000 @@ -1583,10 +1583,9 @@ #define MODULE_INITFUNC initpyexpat #endif -void MODULE_INITFUNC(void); /* avoid compiler warnings */ +PyMODINIT_FUNC MODULE_INITFUNC(void); /* avoid compiler warnings */ -DL_EXPORT(void) -MODULE_INITFUNC(void) +PyMODINIT_FUNC MODULE_INITFUNC(void) { PyObject *m, *d; PyObject *errmod_name = PyString_FromString(MODULE_NAME ".errors"); Index: Python/thread.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread.c,v retrieving revision 2.44 diff -u -r2.44 thread.c --- Python/thread.c 25 Jun 2002 19:26:34 -0000 2.44 +++ Python/thread.c 5 Jul 2002 06:41:36 -0000 @@ -7,11 +7,6 @@ #include "Python.h" -/* pyconfig.h may or may not define DL_IMPORT */ -#ifndef DL_IMPORT /* declarations for DLL import/export */ -#define DL_IMPORT(RTYPE) RTYPE -#endif - #ifndef DONT_HAVE_STDIO_H #include #endif Index: Doc/ext/extending.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ext/extending.tex,v retrieving revision 1.21 diff -u -r1.21 extending.tex --- Doc/ext/extending.tex 22 Jun 2002 01:42:00 -0000 1.21 +++ Doc/ext/extending.tex 5 Jul 2002 06:41:37 -0000 @@ -212,7 +212,7 @@ the error checking for now): \begin{verbatim} -void +PyMODINIT_FUNC initspam(void) { PyObject *m; @@ -240,6 +240,7 @@ Should it become a dangling pointer, C code which raises the exception could cause a core dump or other unintended side effects. +We discuss the use of PyMODINIT_FUNC later in this sample. \section{Back to the Example \label{backToExample}} @@ -339,14 +340,16 @@ the module file: \begin{verbatim} -void +PyMODINIT_FUNC initspam(void) { (void) Py_InitModule("spam", SpamMethods); } \end{verbatim} -Note that for \Cpp, this method must be declared \code{extern "C"}. +Note that PyMODINIT_FUNC declares the function as \code{void} return type, +declares any special linkage declarations required by the platform, and for +\Cpp declares the function as \code{extern "C"}. When the Python program imports module \module{spam} for the first time, \cfunction{initspam()} is called. (See below for comments about @@ -1263,7 +1266,7 @@ the C API pointer array: \begin{verbatim} -void +PyMODINIT_FUNC initspam(void) { PyObject *m; @@ -1352,7 +1355,7 @@ function: \begin{verbatim} -void +PyMODINIT_FUNC initclient(void) { PyObject *m;