--- misc/Python-2.6.1/Include/pyport.h 2008-06-11 16:41:16.000000000 +0900 +++ misc/build/Python-2.6.1/Include/pyport.h 2009-03-29 23:28:13.859000000 +0900 @@ -3,6 +3,30 @@ #include "pyconfig.h" /* include for defines */ +#if defined(__MINGW32__) +#undef HAVE_FORKPTY +#undef HAVE_OPENPTY +#undef HAVE_DEV_PTMX +#undef _POSIX_THREADS +#undef HAVE_PTHREAD_H +#define MS_WINDOWS +#define MS_WIN32 +#define Py_WIN_WIDE_FILENAMES +#ifndef PYTHONPATH +# define PYTHONPATH ".\\lib;.\\lib\\python" VERSION ";.\\lib\\python" VERSION "\\lib-dynload;.\\lib\\python" VERSION "\\plat-winmingw32;.\\lib\\python" VERSION "\\lib-tk" +#endif +#define NT_THREADS +#define WITH_THREAD +#define WINVER 0x0501 +#ifdef socklen_t +#undef socklen_t +#endif +#define HAVE_ADDRINFO +#define HAVE_GETADDRINFO +#define HAVE_GETNAMEINFO +#define HAVE_GETPEERNAME +#endif + #ifdef HAVE_STDINT_H #include #endif --- misc/Python-2.6.1/Lib/distutils/ccompiler.py 2008-02-22 03:18:37.000000000 +0900 +++ misc/build/Python-2.6.1/Lib/distutils/ccompiler.py 2009-04-04 01:00:37.014250000 +0900 @@ -1058,6 +1058,7 @@ # on a cygwin built python we can use gcc like an ordinary UNIXish # compiler ('cygwin.*', 'unix'), + ('winmingw*', 'unix'), ('os2emx', 'emx'), # OS name mappings --- misc/Python-2.6.1/Lib/distutils/command/build_ext.py 2008-08-17 13:16:04.000000000 +0900 +++ misc/build/Python-2.6.1/Lib/distutils/command/build_ext.py 2009-04-04 01:05:32.311125000 +0900 @@ -223,7 +223,7 @@ # for extensions under Cygwin and AtheOS Python's library directory must be # appended to library_dirs - if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos': + if sys.platform[:6] == 'cygwin' or sys.platform[:8] == 'winmingw' or sys.platform[:6] == 'atheos': if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): # building third party extensions self.library_dirs.append(os.path.join(sys.prefix, "lib", @@ -729,7 +729,7 @@ # don't extend ext.libraries, it may be shared with other # extensions, it is a reference to the original list return ext.libraries + [pythonlib] - elif sys.platform[:6] == "cygwin": + elif sys.platform[:6] == "cygwin" or sys.platform[:8] == "winmingw": template = "python%d.%d" pythonlib = (template % (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) --- misc/Python-2.6.1/Lib/distutils/command/install.py 2008-05-07 07:41:46.000000000 +0900 +++ misc/build/Python-2.6.1/Lib/distutils/command/install.py 2009-04-05 23:15:56.540750000 +0900 @@ -362,9 +362,10 @@ # Convert directories from Unix /-separated syntax to the local # convention. - self.convert_paths('lib', 'purelib', 'platlib', - 'scripts', 'data', 'headers', - 'userbase', 'usersite') + if os.sep != '/': + self.convert_paths('lib', 'purelib', 'platlib', + 'scripts', 'data', 'headers', + 'userbase', 'usersite') # Well, we're not actually fully completely finalized yet: we still # have to deal with 'extra_path', which is the hack for allowing @@ -376,7 +377,7 @@ # If a new root directory was supplied, make all the installation # dirs relative to it. - if self.root is not None: + if self.root is not None and self.root != "": self.change_roots('libbase', 'lib', 'purelib', 'platlib', 'scripts', 'data', 'headers') @@ -515,7 +516,10 @@ def convert_paths (self, *names): for name in names: attr = "install_" + name - setattr(self, attr, convert_path(getattr(self, attr))) + if self.root is None or self.root == "": + setattr(self, attr, getattr(self, attr).replace('/', os.sep)) + else: + setattr(self, attr, convert_path(getattr(self, attr))) def handle_extra_path (self): --- misc/Python-2.6.1/Lib/distutils/spawn.py 2004-11-11 07:23:15.000000000 +0900 +++ misc/build/Python-2.6.1/Lib/distutils/spawn.py 2009-03-22 19:38:32.935625000 +0900 @@ -186,7 +186,7 @@ path = os.environ['PATH'] paths = string.split(path, os.pathsep) (base, ext) = os.path.splitext(executable) - if (sys.platform == 'win32' or os.name == 'os2') and (ext != '.exe'): + if (sys.platform == 'win32' or sys.platform[:8] == "winmingw" or os.name == 'os2') and (ext != '.exe'): executable = executable + '.exe' if not os.path.isfile(executable): for p in paths: --- misc/Python-2.6.1/Lib/distutils/sysconfig.py 2008-06-05 21:58:24.000000000 +0900 +++ misc/build/Python-2.6.1/Lib/distutils/sysconfig.py 2009-03-29 10:56:10.965750000 +0900 @@ -381,6 +381,9 @@ raise DistutilsPlatformError(my_msg) + if sys.platform[:8] == "winmingw": + g['SO'] = '.pyd' + # On MacOSX we need to check the setting of the environment variable # MACOSX_DEPLOYMENT_TARGET: configure bases some choices on it so # it needs to be compatible. @@ -510,6 +513,9 @@ global _config_vars if _config_vars is None: func = globals().get("_init_" + os.name) + if sys.platform[:8] == "winmingw": + func = globals().get("_init_posix") + if func: func() else: --- misc/Python-2.6.1/Lib/distutils/unixccompiler.py 2008-07-16 22:24:06.000000000 +0900 +++ misc/build/Python-2.6.1/Lib/distutils/unixccompiler.py 2009-04-04 01:11:18.420500000 +0900 @@ -139,7 +139,7 @@ shared_lib_extension = ".so" dylib_lib_extension = ".dylib" static_lib_format = shared_lib_format = dylib_lib_format = "lib%s%s" - if sys.platform == "cygwin": + if sys.platform == "cygwin" or sys.platform == "winmingw": exe_extension = ".exe" def preprocess(self, source, --- misc/Python-2.6.1/Lib/os.py 2008-09-02 14:36:11.000000000 +0900 +++ misc/build/Python-2.6.1/Lib/os.py 2009-03-22 16:55:18.356375000 +0900 @@ -38,7 +38,21 @@ except AttributeError: return [n for n in dir(module) if n[0] != '_'] -if 'posix' in _names: +if 'winmingw32' in _names: + name = 'nt' + linesep = '\r\n' + from posix import * + try: + from posix import _exit + except ImportError: + pass + import ntpath as path + + import posix + __all__.extend(_get_exports_list(posix)) + del posix + +elif 'posix' in _names: name = 'posix' linesep = '\n' from posix import * --- misc/Python-2.6.1/Lib/socket.py 2008-08-08 13:27:28.000000000 +0900 +++ misc/build/Python-2.6.1/Lib/socket.py 2009-04-02 00:40:46.941750000 +0900 @@ -148,7 +148,7 @@ 'sendall', 'setblocking', 'settimeout', 'gettimeout', 'shutdown') -if os.name == "nt": +if os.name == "nt" and sys.platform[:8] != "winmingw": _socketmethods = _socketmethods + ('ioctl',) if sys.platform == "riscos": --- misc/Python-2.6.1/Makefile.pre.in 2008-10-22 01:48:37.000000000 +0900 +++ misc/build/Python-2.6.1/Makefile.pre.in 2009-04-08 23:38:27.989250000 +0900 @@ -105,6 +105,16 @@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ DESTSHARED= $(BINLIBDEST)/lib-dynload +ifeq (@MACHDEP@,winmingw32) +DESTSHAREDFORRULES= $(shell cd $(DESTSHARED) && pwd || echo DESTSHARED) +LIBPYTHONPATH= $(shell cd $(DESTDIR)$(LIBDEST) && cmd /c cd | sed -e s:\\\\:/:g) +DESTPYTHONPATH= $(LIBPYTHONPATH);$(shell cd $(DESTDIR)$(DESTSHARED) && cmd /c cd | sed -e s:\\\\:/:g) +LIBDESTPARAM= $(shell if test -z "$(DESTDIR)" ; then cd $(LIBDEST) && cmd /c cd | sed -e s:\\\\:/:g ; else echo $(LIBDEST) ; fi) +PREFIXPARAM= $(shell if test -z "$(DESTDIR)" ; then cd $(prefix) && cmd /c cd | sed -e s:\\\\:/:g ; else echo $(prefix) ; fi) +BINDIRPARAM= $(shell if test -z "$(DESTDIR)" ; then cd $(BINDIR) && cmd /c cd | sed -e s:\\\\:/:g ; else echo $(BINDIR) ; fi) +DESTSHAREDPARAM= $(shell if test -z "$(DESTDIR)" ; then cd $(DESTSHARED) && cmd /c cd | sed -e s:\\\\:/:g ; else echo $(DESTSHARED) ; fi) +DESTDIRPARAM= $(shell if test ! -z "$(DESTDIR)" ; then cd $(DESTDIR) && cmd /c | sed -e s:\\\\:/:g ; fi) +endif # Executable suffix (.exe on Windows and Mac OS X) EXE= @EXEEXT@ @@ -187,7 +197,7 @@ # Modules MODULE_OBJS= \ Modules/config.o \ - Modules/getpath.o \ + @GETPATH_OBJS@ \ Modules/main.o \ Modules/gcmodule.o @@ -507,6 +517,10 @@ -DVPATH='"$(VPATH)"' \ -o $@ $(srcdir)/Modules/getpath.c +PC/getpathp.o: $(srcdir)/PC/getpathp.c Makefile + $(CC) -c $(PY_CFLAGS) -DVERSION='"$(VERSION)"' \ + -o $@ $(srcdir)/PC/getpathp.c + Modules/python.o: $(srcdir)/Modules/python.c $(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c @@ -544,6 +558,12 @@ Objects/unicodectype.o: $(srcdir)/Objects/unicodectype.c \ $(srcdir)/Objects/unicodetype_db.h +Objects/exceptions.o: $(srcdir)/Objects/exceptions.c + $(CC) -c $(PY_CFLAGS) -I$(srcdir)/PC -o $@ $(srcdir)/Objects/exceptions.c + +PC/import_nt.o: $(srcdir)/PC/import_nt.c + $(CC) -c $(PY_CFLAGS) -I$(srcdir)/Python -o $@ $(srcdir)/PC/import_nt.c + STRINGLIB_HEADERS= \ $(srcdir)/Include/bytes_methods.h \ $(srcdir)/Objects/stringlib/count.h \ @@ -727,7 +747,11 @@ # Install shared libraries enabled by Setup DESTDIRS= $(exec_prefix) $(LIBDIR) $(BINLIBDEST) $(DESTSHARED) +ifeq (@MACHDEP@,winmingw32) +oldsharedinstall: $(DESTSHAREDFORRULES) $(SHAREDMODS) +else oldsharedinstall: $(DESTSHARED) $(SHAREDMODS) +endif @for i in X $(SHAREDMODS); do \ if test $$i != X; then \ echo $(INSTALL_SHARED) $$i $(DESTSHARED)/`basename $$i`; \ @@ -735,7 +759,11 @@ fi; \ done +ifeq (@MACHDEP@,winmingw32) +$(DESTSHAREDFORRULES): +else $(DESTSHARED): +endif @for i in $(DESTDIRS); \ do \ if test ! -d $(DESTDIR)$$i; then \ @@ -822,7 +850,11 @@ multiprocessing multiprocessing/dummy \ lib-old \ curses $(MACHDEPS) +ifeq (@MACHDEP@,winmingw32) +libinstall: build_all $(srcdir)/Lib/$(PLATDIR) sharedinstall +else libinstall: build_all $(srcdir)/Lib/$(PLATDIR) +endif @for i in $(SCRIPTDIR) $(LIBDEST); \ do \ if test ! -d $(DESTDIR)$$i; then \ @@ -878,6 +910,26 @@ done; \ done $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt +ifeq (@MACHDEP@,winmingw32) + PYTHONPATH="$(DESTPYTHONPATH)" $(RUNSHARED) \ + ./$(BUILDPYTHON) -Wi -tt $(LIBPYTHONPATH)/compileall.py \ + -d $(LIBDESTPARAM) -f \ + -x 'bad_coding|badsyntax|site-packages' $(LIBPYTHONPATH) + PYTHONPATH="$(DESTPYTHONPATH)" $(RUNSHARED) \ + ./$(BUILDPYTHON) -Wi -tt -O $(LIBPYTHONPATH)/compileall.py \ + -d $(LIBDESTPARAM) -f \ + -x 'bad_coding|badsyntax|site-packages' $(LIBPYTHONPATH) + -PYTHONPATH="$(DESTPYTHONPATH)" $(RUNSHARED) \ + ./$(BUILDPYTHON) -Wi -t $(LIBPYTHONPATH)/compileall.py \ + -d $(LIBDESTPARAM)/site-packages -f \ + -x badsyntax $(LIBPYTHONPATH)/site-packages + -PYTHONPATH="$(DESTPYTHONPATH)" $(RUNSHARED) \ + ./$(BUILDPYTHON) -Wi -t -O $(LIBPYTHONPATH)/compileall.py \ + -d $(LIBDESTPARAM)/site-packages -f \ + -x badsyntax $(LIBPYTHONPATH)/site-packages + -PYTHONPATH="$(DESTPYTHONPATH)" $(RUNSHARED) \ + ./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" +else PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ @@ -896,16 +948,19 @@ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" +endif # Create the PLATDIR source directory, if one wasn't distributed.. $(srcdir)/Lib/$(PLATDIR): mkdir $(srcdir)/Lib/$(PLATDIR) +ifneq (@MACHDEP@,winmingw32) cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen export PATH; PATH="`pwd`:$$PATH"; \ export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \ export DYLD_FRAMEWORK_PATH; DYLD_FRAMEWORK_PATH="`pwd`"; \ export EXE; EXE="$(BUILDEXE)"; \ cd $(srcdir)/Lib/$(PLATDIR); ./regen +endif # Install the include files INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) @@ -992,12 +1047,21 @@ # Install the dynamically loadable modules # This goes into $(exec_prefix) +ifeq (@MACHDEP@,winmingw32) +sharedinstall: $(DESTSHAREDFORRULES) + $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ + --prefix=$(PREFIXPARAM) \ + --install-scripts=$(BINDIRPARAM) \ + --install-platlib=$(DESTSHAREDPARAM) \ + --root=$(DESTDIRPARAM) +else sharedinstall: $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ --prefix=$(prefix) \ --install-scripts=$(BINDIR) \ --install-platlib=$(DESTSHARED) \ --root=/$(DESTDIR) +endif # Here are a couple of targets for MacOSX again, to install a full # framework-based Python. frameworkinstall installs everything, the --- misc/Python-2.6.1/Modules/Setup.config.in 2002-12-13 02:37:50.000000000 +0900 +++ misc/build/Python-2.6.1/Modules/Setup.config.in 2009-03-21 18:46:57.988875000 +0900 @@ -9,5 +9,9 @@ # The signal module @USE_SIGNAL_MODULE@signal signalmodule.c +# The password module +@USE_PASSWORD_MODULE@pwd pwdmodule.c # this is needed to find out the user's home dir + # if $HOME is not set + # The rest of the modules previously listed in this file are built # by the setup.py script in Python 2.1 and later. --- misc/Python-2.6.1/Modules/Setup.dist 2008-11-27 19:15:12.000000000 +0900 +++ misc/build/Python-2.6.1/Modules/Setup.dist 2009-03-21 18:46:53.785750000 +0900 @@ -114,7 +114,7 @@ posix posixmodule.c # posix (UNIX) system calls errno errnomodule.c # posix (UNIX) errno values -pwd pwdmodule.c # this is needed to find out the user's home dir +#pwd pwdmodule.c # this is needed to find out the user's home dir # if $HOME is not set _sre _sre.c # Fredrik Lundh's new regular expressions _codecs _codecsmodule.c # access to the builtin codecs and codec registry --- misc/Python-2.6.1/Modules/_ctypes/libffi/configure 2008-05-24 00:06:50.000000000 +0900 +++ misc/build/Python-2.6.1/Modules/_ctypes/libffi/configure 2009-04-05 08:30:43.964750000 +0900 @@ -22707,19 +22707,41 @@ multilib_arg= fi +case $host_os in +mingw*) + srcdir=`cd $srcdir && cmd /c cd | sed -e 's:\\\\:/:g'` + ;; +esac + ac_config_commands="$ac_config_commands include" ac_config_commands="$ac_config_commands src" +case $host_os in +mingw*) +ac_config_commands="$ac_config_commands mingw_ffitarget.h" + +;; +*) ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" +;; +esac ac_config_files="$ac_config_files include/ffi.h" +case $host_os in +mingw*) +ac_config_commands="$ac_config_commands mingw_ffi_common.h" + +;; +*) ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" +;; +esac ac_config_files="$ac_config_files fficonfig.py" @@ -23506,8 +23528,10 @@ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; + "mingw_ffitarget.h") CONFIG_COMMANDS="$CONFIG_COMMANDS mingw_ffitarget.h" ;; "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; + "mingw_ffi_common.h") CONFIG_COMMANDS="$CONFIG_COMMANDS mingw_ffi_common.h" ;; "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; @@ -24386,6 +24410,16 @@ test -d src || mkdir src test -d src/$TARGETDIR || mkdir src/$TARGETDIR ;; + "mingw_ffitarget.h":C) +{ echo "$as_me:$LINENO: copying $srcdir/src/$TARGETDIR/ffitarget.h to include/ffitarget.h" >&5 +echo "$as_me: copying $srcdir/src/$TARGETDIR/ffitarget.h to include/ffitarget.h" >&6;} +cp -p $srcdir/src/$TARGETDIR/ffitarget.h include/ffitarget.h + ;; + "mingw_ffi_common.h":C) +{ echo "$as_me:$LINENO: copying $srcdir/include/ffi_common.h to include/ffi_common.h" >&5 +echo "$as_me: copying $srcdir/include/ffi_common.h to include/ffi_common.h" >&6;} +cp -p $srcdir/include/ffi_common.h include/ffi_common.h + ;; esac done # for ac_tag --- misc/Python-2.6.1/Modules/_ctypes/libffi/configure.ac 2008-05-24 00:06:50.000000000 +0900 +++ misc/build/Python-2.6.1/Modules/_ctypes/libffi/configure.ac 2009-04-05 08:30:27.527250000 +0900 @@ -358,17 +358,43 @@ multilib_arg= fi +case $host_os in +mingw*) + srcdir=`cd $srcdir && cmd /c cd | sed -e 's:\\\\:/:g'` + ;; +esac + AC_CONFIG_COMMANDS(include, [test -d include || mkdir include]) AC_CONFIG_COMMANDS(src, [ test -d src || mkdir src test -d src/$TARGETDIR || mkdir src/$TARGETDIR ], [TARGETDIR="$TARGETDIR"]) +case $host_os in +mingw*) +AC_CONFIG_COMMANDS(mingw_ffitarget.h, [ +AC_MSG_NOTICE(copying $srcdir/src/$TARGETDIR/ffitarget.h to include/ffitarget.h) +cp -p $srcdir/src/$TARGETDIR/ffitarget.h include/ffitarget.h +]) +;; +*) AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) +;; +esac AC_CONFIG_FILES(include/ffi.h) +case $host_os in +mingw*) +AC_CONFIG_COMMANDS(mingw_ffi_common.h, [ +AC_MSG_NOTICE(copying $srcdir/include/ffi_common.h to include/ffi_common.h) +cp -p $srcdir/include/ffi_common.h include/ffi_common.h +]) +;; +*) AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) +;; +esac AC_CONFIG_FILES(fficonfig.py) --- misc/Python-2.6.1/Modules/_ctypes/libffi/include/ffi.h.in 2008-04-05 01:01:54.000000000 +0900 +++ misc/build/Python-2.6.1/Modules/_ctypes/libffi/include/ffi.h.in 2009-03-24 20:53:04.519875000 +0900 @@ -350,7 +350,11 @@ ffi_type *rtype, ffi_type **atypes); +#ifdef MS_WIN32 +int ffi_call(ffi_cif *cif, +#else void ffi_call(ffi_cif *cif, +#endif void (*fn)(void), void *rvalue, void **avalue); --- misc/Python-2.6.1/Modules/config.c.in 2008-09-19 08:20:28.000000000 +0900 +++ misc/build/Python-2.6.1/Modules/config.c.in 2009-03-22 16:28:09.418875000 +0900 @@ -48,6 +48,9 @@ {"__builtin__", NULL}, {"sys", NULL}, {"exceptions", NULL}, +#ifdef __MINGW32__ + {"winmingw32", NULL}, +#endif /* This lives in gcmodule.c */ {"gc", initgc}, --- misc/Python-2.6.1/Modules/posixmodule.c 2008-10-10 03:06:58.000000000 +0900 +++ misc/build/Python-2.6.1/Modules/posixmodule.c 2009-03-22 20:04:01.404375000 +0900 @@ -131,6 +131,15 @@ #define HAVE_FSYNC 1 #define fsync _commit #else +#ifdef __MINGW32__ +#define HAVE_SPAWNV 1 +#define HAVE_EXECV 1 +#define HAVE_GETCWD 1 +#define HAVE_OPENDIR 1 +#define HAVE_PIPE 1 +#define HAVE_POPEN 1 +#define HAVE_SYSTEM 1 +#else #if defined(PYOS_OS2) && defined(PYCC_GCC) || defined(__VMS) /* Everything needed is defined in PC/os2emx/pyconfig.h or vms/pyconfig.h */ #else /* all other compilers */ @@ -156,6 +165,7 @@ #define HAVE_WAIT 1 #define HAVE_TTYNAME 1 #endif /* PYOS_OS2 && PYCC_GCC && __VMS */ +#endif /* __MINGW32__ */ #endif /* _MSC_VER */ #endif /* __BORLANDC__ */ #endif /* ! __WATCOMC__ || __QNX__ */ @@ -275,6 +285,14 @@ #define pclose _pclose #endif /* _MSC_VER */ +#ifdef __MINGW32__ +#include "osdefs.h" +#include +#include /* for ShellExecute() */ +#define popen _popen +#define pclose _pclose +#endif + #if defined(PYCC_VACPP) && defined(PYOS_OS2) #include #endif /* OS2 */ @@ -350,7 +368,7 @@ */ #include static char **environ; -#elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) +#elif !defined(_MSC_VER) && !defined(__MINGW32__) && ( !defined(__WATCOMC__) || defined(__QNX__) ) extern char **environ; #endif /* !_MSC_VER */ @@ -775,7 +793,7 @@ int st_ctime_nsec; }; -static __int64 secs_between_epochs = 11644473600; /* Seconds between 1.1.1601 and 1.1.1970 */ +static __int64 secs_between_epochs = 11644473600LL; /* Seconds between 1.1.1601 and 1.1.1970 */ static void FILE_TIME_to_time_t_nsec(FILETIME *in_ptr, int *time_out, int* nsec_out) @@ -8189,7 +8207,7 @@ } #endif -#ifdef MS_WINDOWS +#if defined(MS_WINDOWS) && !defined(__MINGW32__) PyDoc_STRVAR(win32_urandom__doc__, "urandom(n) -> str\n\n\ @@ -8605,7 +8623,7 @@ #ifdef HAVE_GETLOADAVG {"getloadavg", posix_getloadavg, METH_NOARGS, posix_getloadavg__doc__}, #endif - #ifdef MS_WINDOWS + #if defined(MS_WINDOWS) && !defined(__MINGW32__) {"urandom", win32_urandom, METH_VARARGS, win32_urandom__doc__}, #endif #ifdef __VMS --- misc/Python-2.6.1/Modules/socketmodule.c 2008-08-12 23:49:50.000000000 +0900 +++ misc/build/Python-2.6.1/Modules/socketmodule.c 2009-03-29 20:55:19.750375000 +0900 @@ -312,7 +312,7 @@ /* Do not include addrinfo.h for MSVC7 or greater. 'addrinfo' and * EAI_* constants are defined in (the already included) ws2tcpip.h. */ -#else +#elif !defined(__MINGW32__) # include "addrinfo.h" #endif --- misc/Python-2.6.1/PC/_winreg.c 2008-06-09 13:58:54.000000000 +0900 +++ misc/build/Python-2.6.1/PC/_winreg.c 2009-04-12 18:25:01.944250000 +0900 @@ -1630,6 +1630,9 @@ } #define ADD_KEY(val) inskey(d, #val, val) +#ifndef REG_LEGAL_CHANGE_FILTER +#define REG_LEGAL_CHANGE_FILTER (REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_ATTRIBUTES|REG_NOTIFY_CHANGE_LAST_SET|REG_NOTIFY_CHANGE_SECURITY) +#endif PyMODINIT_FUNC init_winreg(void) { --- misc/Python-2.6.1/Python/dynload_win.c 2008-01-24 02:15:06.000000000 +0900 +++ misc/build/Python-2.6.1/Python/dynload_win.c 2009-03-21 22:05:59.683125000 +0900 @@ -24,6 +24,7 @@ /* Case insensitive string compare, to avoid any dependencies on particular C RTL implementations */ +#ifndef __MINGW32__ static int strcasecmp (char *string1, char *string2) { int first, second; @@ -37,6 +38,7 @@ return (first - second); } +#endif /* Function to return the name of the "python" DLL that the supplied module --- misc/Python-2.6.1/Python/frozenmain.c 2002-07-01 00:26:10.000000000 +0900 +++ misc/build/Python-2.6.1/Python/frozenmain.c 2009-03-22 15:36:03.993875000 +0900 @@ -3,7 +3,7 @@ #include "Python.h" -#ifdef MS_WINDOWS +#if defined(MS_WINDOWS) && !defined(__MINGW32__) extern void PyWinFreeze_ExeInit(void); extern void PyWinFreeze_ExeTerm(void); extern int PyInitFrozenExtensions(void); @@ -32,12 +32,12 @@ setbuf(stderr, (char *)NULL); } -#ifdef MS_WINDOWS +#if defined(MS_WINDOWS) && !defined(__MINGW32__) PyInitFrozenExtensions(); #endif /* MS_WINDOWS */ Py_SetProgramName(argv[0]); Py_Initialize(); -#ifdef MS_WINDOWS +#if defined(MS_WINDOWS) && !defined(__MINGW32__) PyWinFreeze_ExeInit(); #endif @@ -60,7 +60,7 @@ if (inspect && isatty((int)fileno(stdin))) sts = PyRun_AnyFile(stdin, "") != 0; -#ifdef MS_WINDOWS +#if defined(MS_WINDOWS) && !defined(__MINGW32__) PyWinFreeze_ExeTerm(); #endif Py_Finalize(); --- misc/Python-2.6.1/configure 2008-11-17 02:57:10.000000000 +0900 +++ misc/build/Python-2.6.1/configure 2009-04-11 16:57:56.149375000 +0900 @@ -719,8 +719,10 @@ USE_THREAD_MODULE LDLAST THREADOBJ +USE_PASSWORD_MODULE DLINCLDIR DYNLOADFILE +GETPATH_OBJS MACHDEP_OBJS TRUE LIBOBJS @@ -2201,6 +2203,13 @@ LDFLAGS="$SGI_ABI $LDFLAGS" MACHDEP=`echo "${MACHDEP}${SGI_ABI}" | sed 's/ *//g'` fi +case $MACHDEP in + *mingw*|*MINGW*|*MinGW*) + MACHDEP="winmingw32" + ac_sys_system=`uname -s` + ac_sys_release=`uname -r` + ;; +esac { echo "$as_me:$LINENO: result: $MACHDEP" >&5 echo "${ECHO_T}$MACHDEP" >&6; } @@ -3995,7 +4004,7 @@ if test -z "$enable_shared" then case $ac_sys_system in - CYGWIN* | atheos*) + CYGWIN* | MINGW* | atheos*) enable_shared="yes";; *) enable_shared="no";; @@ -4096,7 +4105,7 @@ BeOS*) LDLIBRARY='libpython$(VERSION).so' ;; - CYGWIN*) + CYGWIN* | MINGW*) LDLIBRARY='libpython$(VERSION).dll.a' DLLLIBRARY='libpython$(VERSION).dll' ;; @@ -4142,7 +4151,7 @@ esac else # shared is disabled case $ac_sys_system in - CYGWIN*) + CYGWIN* | MINGW*) BLDLIBRARY='$(LIBRARY)' LDLIBRARY='libpython$(VERSION).dll.a' ;; @@ -12645,6 +12654,10 @@ _ACEOF +ac_cv_sizeof_off_t=`echo $ac_cv_sizeof_off_t | tr -d '\015'` +ac_cv_sizeof_long=`echo $ac_cv_sizeof_long | tr -d '\015'` +ac_cv_sizeof_long_long=`echo $ac_cv_sizeof_long_long | tr -d '\015'` +ac_cv_sizeof_short=`echo $ac_cv_sizeof_short | tr -d '\015'` { echo "$as_me:$LINENO: checking whether to enable large file support" >&5 echo $ECHO_N "checking whether to enable large file support... $ECHO_C" >&6; } if test "$have_long_long" = yes -a \ @@ -12985,7 +12998,7 @@ *) SO=.sl;; esac ;; - CYGWIN*) SO=.dll;; + CYGWIN* | MINGW*) SO=.dll;; *) SO=.so;; esac else @@ -13113,7 +13126,7 @@ fi;; SCO_SV*) LDSHARED='$(CC) -Wl,-G,-Bexport';; Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";; - CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";; + CYGWIN* | MINGW*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base ${LDFLAGS}";; atheos*) LDSHARED="gcc -shared";; *) LDSHARED="ld";; esac @@ -13205,7 +13218,7 @@ LINKFORSHARED="-Xlinker --export-dynamic" fi;; esac;; - CYGWIN*) + CYGWIN* | MINGW*) if test $enable_shared = "no" then LINKFORSHARED='-Wl,--out-implib=$(LDLIBRARY)' @@ -13229,7 +13242,7 @@ if test ! "$LIBRARY" = "$LDLIBRARY" then case $ac_sys_system in - CYGWIN*) + CYGWIN* | MINGW*) # Cygwin needs CCSHARED when building extension DLLs # but not when building the interpreter DLL. CFLAGSFORSHARED='';; @@ -15443,7 +15456,7 @@ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF case $ac_sys_system in - CYGWIN*) + CYGWIN* | MINGW*) cat >>confdefs.h <<\_ACEOF #define HAVE_BROKEN_PTHREAD_SIGMASK 1 @@ -15457,6 +15470,17 @@ fi +case $MACHDEP in +winmingw*) + THREADOBJ="Python/thread.o" + USE_THREAD_MODULE="#" + USE_PASSWORD_MODULE="#" + ;; +*) + USE_PASSWORD_MODULE="" + ;; +esac + # Check for enable-ipv6 @@ -16057,6 +16081,11 @@ # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() Darwin/[0156]\..*) DYNLOADFILE="dynload_next.o";; atheos*) DYNLOADFILE="dynload_atheos.o";; + CYGWIN* | MINGW*) + case $MACHDEP in + winmingw*) DYNLOADFILE="dynload_win.o PC/import_nt.o PC/dl_nt.o";; + esac + ;; *) # use dynload_shlib.c and dlopen() if we have it; otherwise stub # out any dynamic loading @@ -16078,6 +16107,21 @@ fi + +{ echo "$as_me:$LINENO: checking GETPATH_OBJS" >&5 +echo $ECHO_N "checking GETPATH_OBJS... $ECHO_C" >&6; } +if test -z "$GETPATH_OBJS" +then + case $MACHDEP in + winmingw*) + GETPATH_OBJS='PC/getpathp.o';; + *) + GETPATH_OBJS='Modules/getpath.o';; + esac +fi +{ echo "$as_me:$LINENO: result: $GETPATH_OBJS" >&5 +echo "${ECHO_T}$GETPATH_OBJS" >&6; } + # MACHDEP_OBJS can be set to platform-specific object files needed by Python @@ -19952,6 +19996,112 @@ fi +case $MACHDEP in +winmingw*) +{ echo "$as_me:$LINENO: checking for struct stat.st_blocks" >&5 +echo $ECHO_N "checking for struct stat.st_blocks... $ECHO_C" >&6; } +if test "${ac_cv_member_struct_stat_st_blocks+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (ac_aggr.st_blocks) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_stat_st_blocks=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (sizeof ac_aggr.st_blocks) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_stat_st_blocks=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_member_struct_stat_st_blocks=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blocks" >&5 +echo "${ECHO_T}$ac_cv_member_struct_stat_st_blocks" >&6; } +if test $ac_cv_member_struct_stat_st_blocks = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLOCKS 1 +_ACEOF + + +fi + +;; +*) { echo "$as_me:$LINENO: checking for struct stat.st_blocks" >&5 echo $ECHO_N "checking for struct stat.st_blocks... $ECHO_C" >&6; } if test "${ac_cv_member_struct_stat_st_blocks+set}" = set; then @@ -20066,6 +20216,8 @@ fi +;; +esac { echo "$as_me:$LINENO: checking for time.h that defines altzone" >&5 echo $ECHO_N "checking for time.h that defines altzone... $ECHO_C" >&6; } @@ -22530,6 +22682,7 @@ +ac_cv_sizeof_wchar_t=`echo $ac_cv_sizeof_wchar_t | tr -d '\015'` if test "$enable_unicode" = "no" then @@ -25368,8 +25521,10 @@ USE_THREAD_MODULE!$USE_THREAD_MODULE$ac_delim LDLAST!$LDLAST$ac_delim THREADOBJ!$THREADOBJ$ac_delim +USE_PASSWORD_MODULE!$USE_PASSWORD_MODULE$ac_delim DLINCLDIR!$DLINCLDIR$ac_delim DYNLOADFILE!$DYNLOADFILE$ac_delim +GETPATH_OBJS!$GETPATH_OBJS$ac_delim MACHDEP_OBJS!$MACHDEP_OBJS$ac_delim TRUE!$TRUE$ac_delim LIBOBJS!$LIBOBJS$ac_delim @@ -25386,7 +25541,7 @@ LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 22; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 24; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 --- misc/Python-2.6.1/configure.in 2008-11-16 17:02:56.000000000 +0900 +++ misc/build/Python-2.6.1/configure.in 2009-04-11 16:56:07.258750000 +0900 @@ -359,6 +359,13 @@ LDFLAGS="$SGI_ABI $LDFLAGS" MACHDEP=`echo "${MACHDEP}${SGI_ABI}" | sed 's/ *//g'` fi +case $MACHDEP in + *mingw*|*MINGW*|*MinGW*) + MACHDEP="winmingw32" + ac_sys_system=`uname -s` + ac_sys_release=`uname -r` + ;; +esac AC_MSG_RESULT($MACHDEP) # And add extra plat-mac for darwin @@ -643,7 +650,7 @@ if test -z "$enable_shared" then case $ac_sys_system in - CYGWIN* | atheos*) + CYGWIN* | MINGW* | atheos*) enable_shared="yes";; *) enable_shared="no";; @@ -694,7 +701,7 @@ BeOS*) LDLIBRARY='libpython$(VERSION).so' ;; - CYGWIN*) + CYGWIN* | MINGW*) LDLIBRARY='libpython$(VERSION).dll.a' DLLLIBRARY='libpython$(VERSION).dll' ;; @@ -740,7 +747,7 @@ esac else # shared is disabled case $ac_sys_system in - CYGWIN*) + CYGWIN* | MINGW*) BLDLIBRARY='$(LIBRARY)' LDLIBRARY='libpython$(VERSION).dll.a' ;; @@ -1402,6 +1409,10 @@ AC_DEFINE_UNQUOTED(SIZEOF_OFF_T, $ac_cv_sizeof_off_t, [The number of bytes in an off_t.]) +ac_cv_sizeof_off_t=`echo $ac_cv_sizeof_off_t | tr -d '\015'` +ac_cv_sizeof_long=`echo $ac_cv_sizeof_long | tr -d '\015'` +ac_cv_sizeof_long_long=`echo $ac_cv_sizeof_long_long | tr -d '\015'` +ac_cv_sizeof_short=`echo $ac_cv_sizeof_short | tr -d '\015'` AC_MSG_CHECKING(whether to enable large file support) if test "$have_long_long" = yes -a \ "$ac_cv_sizeof_off_t" -gt "$ac_cv_sizeof_long" -a \ @@ -1581,7 +1592,7 @@ *) SO=.sl;; esac ;; - CYGWIN*) SO=.dll;; + CYGWIN* | MINGW*) SO=.dll;; *) SO=.so;; esac else @@ -1703,7 +1714,7 @@ fi;; SCO_SV*) LDSHARED='$(CC) -Wl,-G,-Bexport';; Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";; - CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";; + CYGWIN* | MINGW*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base ${LDFLAGS}";; atheos*) LDSHARED="gcc -shared";; *) LDSHARED="ld";; esac @@ -1791,7 +1802,7 @@ LINKFORSHARED="-Xlinker --export-dynamic" fi;; esac;; - CYGWIN*) + CYGWIN* | MINGW*) if test $enable_shared = "no" then LINKFORSHARED='-Wl,--out-implib=$(LDLIBRARY)' @@ -1813,7 +1824,7 @@ if test ! "$LIBRARY" = "$LDLIBRARY" then case $ac_sys_system in - CYGWIN*) + CYGWIN* | MINGW*) # Cygwin needs CCSHARED when building extension DLLs # but not when building the interpreter DLL. CFLAGSFORSHARED='';; @@ -2149,13 +2160,24 @@ fi AC_CHECK_FUNCS(pthread_sigmask, [case $ac_sys_system in - CYGWIN*) + CYGWIN* | MINGW*) AC_DEFINE(HAVE_BROKEN_PTHREAD_SIGMASK, 1, [Define if pthread_sigmask() does not work on your system.]) ;; esac]) fi +AC_SUBST(USE_PASSWORD_MODULE) +case $MACHDEP in +winmingw*) + THREADOBJ="Python/thread.o" + USE_THREAD_MODULE="#" + USE_PASSWORD_MODULE="#" + ;; +*) + USE_PASSWORD_MODULE="" + ;; +esac # Check for enable-ipv6 AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified]) @@ -2415,6 +2437,11 @@ # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() Darwin/@<:@0156@:>@\..*) DYNLOADFILE="dynload_next.o";; atheos*) DYNLOADFILE="dynload_atheos.o";; + CYGWIN* | MINGW*) + case $MACHDEP in + winmingw*) DYNLOADFILE="dynload_win.o PC/import_nt.o PC/dl_nt.o";; + esac + ;; *) # use dynload_shlib.c and dlopen() if we have it; otherwise stub # out any dynamic loading @@ -2432,6 +2459,19 @@ [Defined when any dynamic module loading is enabled.]) fi +AC_SUBST(GETPATH_OBJS) +AC_MSG_CHECKING(GETPATH_OBJS) +if test -z "$GETPATH_OBJS" +then + case $MACHDEP in + winmingw*) + GETPATH_OBJS='PC/getpathp.o';; + *) + GETPATH_OBJS='Modules/getpath.o';; + esac +fi +AC_MSG_RESULT($GETPATH_OBJS) + # MACHDEP_OBJS can be set to platform-specific object files needed by Python AC_SUBST(MACHDEP_OBJS) @@ -2862,7 +2902,14 @@ AC_CHECK_MEMBERS([struct stat.st_flags]) AC_CHECK_MEMBERS([struct stat.st_gen]) AC_CHECK_MEMBERS([struct stat.st_birthtime]) +case $MACHDEP in +winmingw*) +AC_CHECK_MEMBERS([struct stat.st_blocks]) +;; +*) AC_STRUCT_ST_BLOCKS +;; +esac AC_MSG_CHECKING(for time.h that defines altzone) AC_CACHE_VAL(ac_cv_header_time_altzone, @@ -3247,6 +3294,7 @@ AH_TEMPLATE(PY_UNICODE_TYPE, [Define as the integral type used for Unicode representation.]) +ac_cv_sizeof_wchar_t=`echo $ac_cv_sizeof_wchar_t | tr -d '\015'` AC_SUBST(UNICODE_OBJS) if test "$enable_unicode" = "no" then --- misc/Python-2.6.1/setup.py 2008-11-05 05:43:31.000000000 +0900 +++ misc/build/Python-2.6.1/setup.py 2009-04-12 16:02:22.654125000 +0900 @@ -234,6 +234,18 @@ if not self.configure_ctypes(ext): return + if self.get_platform() == "winmingw": + if ext.name == '_ctypes_test': + ext.libraries.append('oleaut32') + elif ext.name == 'select': + ext.libraries.append('ws2_32') + elif ext.name == '_socket': + ext.libraries.append('ws2_32') + if ext.name == '_ctypes': + ext.libraries.append('uuid') + ext.libraries.append('oleaut32') + ext.libraries.append('ole32') + try: build_ext.build_extension(self, ext) except (CCompilerError, DistutilsError), why: @@ -263,7 +275,7 @@ # Workaround for Cygwin: Cygwin currently has fork issues when many # modules have been imported - if self.get_platform() == 'cygwin': + if self.get_platform() in ['cygwin', 'winmingw']: self.announce('WARNING: skipping import check for Cygwin-based "%s"' % ext.name) return @@ -303,7 +315,7 @@ def get_platform(self): # Get value of sys.platform - for platform in ['cygwin', 'beos', 'darwin', 'atheos', 'osf1']: + for platform in ['cygwin', 'winmingw', 'beos', 'darwin', 'atheos', 'osf1']: if sys.platform.startswith(platform): return platform return sys.platform @@ -1009,7 +1021,7 @@ missing.append('bsddb185') # The standard Unix dbm module: - if platform not in ['cygwin']: + if platform not in ['cygwin', 'winmingw']: if find_file("ndbm.h", inc_dirs, []) is not None: # Some systems have -lndbm, others don't if self.compiler.find_library_file(lib_dirs, 'ndbm'): @@ -1053,7 +1065,7 @@ missing.append('resource') # Sun yellow pages. Some systems have the functions in libc. - if platform not in ['cygwin', 'atheos', 'qnx6']: + if platform not in ['cygwin', 'winmingw', 'atheos', 'qnx6']: if (self.compiler.find_library_file(lib_dirs, 'nsl')): libs = ['nsl'] else: @@ -1252,14 +1264,14 @@ ) libraries = [] - elif platform == 'cygwin': # Cygwin + elif platform in ['cygwin', 'winmingw']: # Cygwin macros = dict( HAVE_SEM_OPEN=1, HAVE_SEM_TIMEDWAIT=1, HAVE_FD_TRANSFER=0, HAVE_BROKEN_SEM_UNLINK=1 ) - libraries = [] + libraries = ['ws2_32'] elif platform in ('freebsd4', 'freebsd5', 'freebsd6', 'freebsd7', 'freebsd8'): # FreeBSD's P1003.1b semaphore support is very experimental @@ -1287,7 +1299,7 @@ ) libraries = ['rt'] - if platform == 'win32': + if platform in ['win32', 'winmingw']: multiprocessing_srcs = [ '_multiprocessing/multiprocessing.c', '_multiprocessing/semaphore.c', '_multiprocessing/pipe_connection.c', @@ -1305,6 +1317,7 @@ exts.append ( Extension('_multiprocessing', multiprocessing_srcs, define_macros=macros.items(), + libraries=libraries, include_dirs=["Modules/_multiprocessing"])) # End multiprocessing @@ -1423,6 +1436,10 @@ '-framework', 'Carbon']) ) + if platform == 'winmingw': + exts.append( Extension('_winreg', ['../PC/_winreg.c']) ) + exts.append( Extension('winsound', ['../PC/winsound.c'], libraries = ['winmm']) ) + self.extensions.extend(exts) # Call the method for detecting whether _tkinter can be compiled @@ -1575,7 +1592,7 @@ added_lib_dirs.append('/usr/X11/lib') # If Cygwin, then verify that X is installed before proceeding - if platform == 'cygwin': + if platform in ['cygwin', 'winmingw']: x11_inc = find_file('X11/Xlib.h', [], include_dirs) if x11_inc is None: return @@ -1598,7 +1615,7 @@ libs.append('ld') # Finally, link with the X11 libraries (not appropriate on cygwin) - if platform != "cygwin": + if not platform in ["cygwin", "winmingw"]: libs.append('X11') ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'], @@ -1669,6 +1686,8 @@ from distutils.dir_util import mkpath mkpath(ffi_builddir) config_args = [] + if self.get_platform() == "winmingw": + config_args.append(" --build=mingw32") # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided.