| --- misc/build/Python-2.6.1/configure.in 2009-03-30 19:56:14.000000000 +0200 |
| +++ misc/build/Python-2.6.1/configure.in 2009-05-09 13:48:16.000000000 +0200 |
| @@ -12,6 +12,11 @@ |
| AC_CONFIG_SRCDIR([Include/object.h]) |
| AC_CONFIG_HEADER(pyconfig.h) |
| |
| +# find compiler while respecting --host setting |
| +AC_CANONICAL_HOST() |
| +AC_CHECK_TOOLS(CC,gcc cc) |
| +AC_CHECK_TOOLS(CXX,g++ c++) |
| + |
| dnl This is for stuff that absolutely must end up in pyconfig.h. |
| dnl Please use pyport.h instead, if possible. |
| AH_TOP([ |
| @@ -215,8 +220,8 @@ |
| # Set name for machine-dependent library files |
| AC_SUBST(MACHDEP) |
| AC_MSG_CHECKING(MACHDEP) |
| -if test -z "$MACHDEP" |
| -then |
| +if test -z "$MACHDEP"; then |
| + if test "$cross_compiling" = "no"; then |
| ac_sys_system=`uname -s` |
| if test "$ac_sys_system" = "AIX" -o "$ac_sys_system" = "Monterey64" \ |
| -o "$ac_sys_system" = "UnixWare" -o "$ac_sys_system" = "OpenUNIX"; then |
| @@ -224,6 +229,24 @@ |
| else |
| ac_sys_release=`uname -r` |
| fi |
| + else |
| + #m=`$CC -dumpmachine` |
| + #changequote(<<, >>)#dnl |
| + #ac_sys_system=`expr "$m" : "[^-]*-\([^-]*\)"` |
| + #changequote([, ])#dnl |
| + |
| + m=`$CC -dumpmachine` |
| + ac_sys_system=`echo $m | cut -d- -f3` |
| + |
| + case $ac_sys_system in |
| + cygwin*) ac_sys_system=`echo $ac_sys_system | sed s/cygwin/CYGWIN/g `;; |
| + darwin*) ac_sys_system=`echo $ac_sys_system | sed s/darwin/Darwin/g `;; |
| + linux*) ac_sys_system=`echo $ac_sys_system | sed s/linux/Linux/g `;; |
| + esac |
| + |
| + |
| + fi |
| + |
| ac_md_system=`echo $ac_sys_system | |
| tr -d '[/ ]' | tr '[[A-Z]]' '[[a-z]]'` |
| ac_md_release=`echo $ac_sys_release | |
| @@ -232,6 +255,7 @@ |
| |
| case $MACHDEP in |
| cygwin*) MACHDEP="cygwin";; |
| + mingw*) MACHDEP="mingw";; |
| darwin*) MACHDEP="darwin";; |
| atheos*) MACHDEP="atheos";; |
| irix646) MACHDEP="irix6";; |
| @@ -363,7 +387,7 @@ |
| fi |
| AC_MSG_RESULT($MACHDEP) |
| |
| -# And add extra plat-mac for darwin |
| +# And add extra plat-mac for Darwin |
| AC_SUBST(EXTRAPLATDIR) |
| AC_SUBST(EXTRAMACHDEPPATH) |
| AC_MSG_CHECKING(EXTRAPLATDIR) |
| @@ -382,6 +406,23 @@ |
| fi |
| AC_MSG_RESULT($EXTRAPLATDIR) |
| |
| +AC_MSG_CHECKING(posix flavour) |
| +if test -z "$POSIX" |
| +then |
| + case $ac_sys_system/$ac_sys_release in |
| + mingw*) |
| + DELIM=';' |
| + POSIX=nt |
| + ;; |
| + *) |
| + DELIM=':' |
| + POSIX=posix |
| + ;; |
| + esac |
| + fi |
| +AC_SUBST(DELIM) |
| +AC_MSG_RESULT($POSIX) |
| + |
| # Record the configure-time value of MACOSX_DEPLOYMENT_TARGET, |
| # it may influence the way we can build extensions, so distutils |
| # needs to check it |
| @@ -546,9 +587,11 @@ |
| then |
| AC_MSG_RESULT(yes) |
| BUILDEXEEXT=.exe |
| + case_sensitive=no |
| else |
| - AC_MSG_RESULT(no) |
| - BUILDEXEEXT=$EXEEXT |
| + AC_MSG_RESULT(no) |
| + BUILDEXEEXT=$EXEEXT |
| + case_sensitive=yes |
| fi |
| rmdir CaseSensitiveTestDir |
| |
| @@ -645,7 +688,7 @@ |
| if test -z "$enable_shared" |
| then |
| case $ac_sys_system in |
| - CYGWIN* | atheos*) |
| + CYGWIN* | atheos* | mingw*) |
| enable_shared="yes";; |
| *) |
| enable_shared="no";; |
| @@ -700,6 +743,10 @@ |
| LDLIBRARY='libpython$(VERSION).dll.a' |
| DLLLIBRARY='libpython$(VERSION).dll' |
| ;; |
| + mingw*) |
| + LDLIBRARY='libpython$(VERSION).dll.a' |
| + DLLLIBRARY='libpython$(VERSION).dll' |
| + ;; |
| SunOS*) |
| LDLIBRARY='libpython$(VERSION).so' |
| BLDLIBRARY='-Wl,-R,$(LIBDIR) -L. -lpython$(VERSION)' |
| @@ -752,14 +799,18 @@ |
| BLDLIBRARY='$(LIBRARY)' |
| LDLIBRARY='libpython$(VERSION).dll.a' |
| ;; |
| + mingw*) |
| + BLDLIBRARY='$(LIBRARY)' |
| + LDLIBRARY='libpython$(VERSION).dll.a' |
| + ;; |
| esac |
| fi |
| |
| AC_MSG_RESULT($LDLIBRARY) |
| |
| -AC_PROG_RANLIB |
| -AC_SUBST(AR) |
| -AC_CHECK_PROGS(AR, ar aal, ar) |
| +# find tools while respecting --host setting |
| +AC_CHECK_TOOL(RANLIB,ranlib) |
| +AC_CHECK_TOOLS(AR,ar aal,ar) |
| |
| AC_SUBST(SVNVERSION) |
| AC_CHECK_PROG(SVNVERSION, svnversion, found, not-found) |
| @@ -965,6 +1016,9 @@ |
| OSF*) |
| BASECFLAGS="$BASECFLAGS -mieee" |
| ;; |
| + mingw*) |
| + OPT="-DMS_WINDOWS -DPy_WIN_WIDE_FILENAMES $OPT" |
| + ;; |
| esac |
| ;; |
| |
| @@ -1013,7 +1067,7 @@ |
| if test $ac_cv_opt_olimit_ok = yes; then |
| case $ac_sys_system in |
| # XXX is this branch needed? On MacOSX 10.2.2 the result of the |
| - # olimit_ok test is "no". Is it "yes" in some other Darwin-esque |
| + # olimit_ok test is "no". Is it "yes" in some other darwin-esque |
| # environment? |
| Darwin*) |
| ;; |
| @@ -1590,6 +1644,7 @@ |
| esac |
| ;; |
| CYGWIN*) SO=.dll;; |
| + mingw*) SO=.dll;; |
| *) SO=.so;; |
| esac |
| else |
| @@ -1713,6 +1768,8 @@ |
| 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";; |
| + mingw*) LDSHARED='$(CC) -mdll' |
| + BLDSHARED='$(CC) -mdll libpython$(VERSION).dll';; |
| atheos*) LDSHARED="gcc -shared";; |
| *) LDSHARED="ld";; |
| esac |
| @@ -1805,6 +1862,11 @@ |
| then |
| LINKFORSHARED='-Wl,--out-implib=$(LDLIBRARY)' |
| fi;; |
| + mingw*) |
| + if test $enable_shared = "no" |
| + then |
| + LINKFORSHARED='-Wl,--out-implib=$(LDLIBRARY)' |
| + fi;; |
| QNX*) |
| # -Wl,-E causes the symbols to be added to the dynamic |
| # symbol table so that they can be found when a module |
| @@ -1882,6 +1944,16 @@ |
| # BeOS' sockets are stashed in libnet. |
| AC_CHECK_LIB(nsl, t_open, [LIBS="-lnsl $LIBS"]) # SVR4 |
| AC_CHECK_LIB(socket, socket, [LIBS="-lsocket $LIBS"], [], $LIBS) # SVR4 sockets |
| +AC_CHECK_HEADER(winsock2.h) |
| +AC_CHECK_LIB(wsock32, select, [LIBS="-lws2_32 -lwsock32 $LIBS"], [], $LIBS) # Mingw32 select |
| +save_LIBS="$LIBS" |
| +LIBS="-lws2_32 -lwsock32 $LIBS" |
| +AC_MSG_CHECKING([for include <winsock2.h> select in libwinsock32]) |
| +AC_TRY_LINK([#include <winsock2.h>], |
| + [select (1,2,3,4,5);], |
| + [AC_MSG_RESULT(yes)], |
| + [AC_MSG_RESULT(no)] |
| + [LIBS="$save_LIBS"]) |
| |
| case "$ac_sys_system" in |
| BeOS*) |
| @@ -2424,6 +2496,7 @@ |
| # 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";; |
| + mingw*) DYNLOADFILE="dynload_win.o";; |
| *) |
| # use dynload_shlib.c and dlopen() if we have it; otherwise stub |
| # out any dynamic loading |
| @@ -2568,7 +2641,7 @@ |
| # On Tru64, chflags seems to be present, but calling it will |
| # exit Python |
| AC_MSG_CHECKING(for chflags) |
| -AC_TRY_RUN([ |
| +AC_TRY_COMPILE([ |
| #include <sys/stat.h> |
| #include <unistd.h> |
| int main(int argc, char*argv[]) |
| @@ -2577,13 +2650,13 @@ |
| return 1; |
| return 0; |
| } |
| -],AC_DEFINE(HAVE_CHFLAGS, 1, Define to 1 if you have the `chflags' function.) |
| +],void* p=chflags, AC_DEFINE(HAVE_CHFLAGS, 1, Define to 1 if you have the `chflags' function.) |
| AC_MSG_RESULT(yes), |
| AC_MSG_RESULT(no) |
| ) |
| |
| AC_MSG_CHECKING(for lchflags) |
| -AC_TRY_RUN([ |
| +AC_TRY_COMPILE([ |
| #include <sys/stat.h> |
| #include <unistd.h> |
| int main(int argc, char*argv[]) |
| @@ -2592,7 +2665,7 @@ |
| return 1; |
| return 0; |
| } |
| -],AC_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' function.) |
| +],void* p=lchflags, AC_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' function.) |
| AC_MSG_RESULT(yes), |
| AC_MSG_RESULT(no) |
| ) |
| @@ -2722,6 +2795,8 @@ |
| ) |
| ) |
| |
| +AC_CHECK_FUNCS(cwait fsync pipe popen spawnv system) |
| + |
| AC_MSG_CHECKING(for major, minor, and makedev) |
| AC_TRY_LINK([ |
| #if defined(MAJOR_IN_MKDEV) |
| @@ -2871,7 +2946,7 @@ |
| AC_CHECK_MEMBERS([struct stat.st_flags]) |
| AC_CHECK_MEMBERS([struct stat.st_gen]) |
| AC_CHECK_MEMBERS([struct stat.st_birthtime]) |
| -AC_STRUCT_ST_BLOCKS |
| +#AC_STRUCT_ST_BLOCKS |
| |
| AC_MSG_CHECKING(for time.h that defines altzone) |
| AC_CACHE_VAL(ac_cv_header_time_altzone, |
| @@ -3657,7 +3732,8 @@ |
| fi |
| |
| AC_MSG_CHECKING(for %zd printf() format support) |
| -AC_TRY_RUN([#include <stdio.h> |
| +AC_CACHE_VAL(ac_cv_printf_zd_format, |
| + AC_TRY_RUN([#include <stdio.h> |
| #include <stddef.h> |
| #include <string.h> |
| |
| @@ -3693,7 +3769,7 @@ |
| }], |
| [AC_MSG_RESULT(yes) |
| AC_DEFINE(PY_FORMAT_SIZE_T, "z", [Define to printf format modifier for Py_ssize_t])], |
| - AC_MSG_RESULT(no)) |
| + AC_MSG_RESULT(no))) |
| |
| AC_CHECK_TYPE(socklen_t,, |
| AC_DEFINE(socklen_t,int, |
| @@ -3704,6 +3780,9 @@ |
| #ifdef HAVE_SYS_SOCKET_H |
| #include <sys/socket.h> |
| #endif |
| +#ifdef _WIN32 |
| +#include <ws2tcpip.h> |
| +#endif |
| ]) |
| |
| AC_SUBST(THREADHEADERS) |
| @@ -3723,6 +3802,67 @@ |
| done |
| AC_MSG_RESULT(done) |
| |
| +# Cross compiling |
| +AC_SUBST(cross_compiling) |
| + |
| +if test "$cross_compiling" = "yes"; then |
| + AC_MSG_CHECKING(cc for build) |
| + ## /usr/bin/cc still uses wrong assembler |
| + ## CC_FOR_BUILD="${CC_FOR_BUILD-/usr/bin/cc}" |
| + CC_FOR_BUILD="${CC_FOR_BUILD-PATH=/usr/bin:$PATH cc}" |
| +else |
| + CC_FOR_BUILD="${CC_FOR_BUILD-$CC}" |
| +fi |
| + |
| +if test "$cross_compiling" = "yes"; then |
| + AC_MSG_RESULT($CC_FOR_BUILD) |
| +fi |
| + |
| +AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler (default: cc)]) |
| + |
| +if test "$cross_compiling" = "yes"; then |
| + AC_MSG_CHECKING(python for build) |
| + PYTHON_FOR_BUILD="${PYTHON_FOR_BUILD-python}" |
| +else |
| + PYTHON_FOR_BUILD='$(BUILDPYTHON)' |
| +fi |
| + |
| +if test "$cross_compiling" = "yes"; then |
| + AC_MSG_RESULT($PYTHON_FOR_BUILD) |
| +fi |
| +AC_ARG_VAR(PYTHON_FOR_BUILD,[build system python (default: python)]) |
| +AC_SUBST(PYTHON_FOR_BUILD) |
| + |
| +if test "$cross_compiling" = "yes"; then |
| + CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-} |
| + changequote(<<, >>)#dnl |
| + python_include=`$PYTHON_FOR_BUILD -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'` |
| + changequote([, ])#dnl |
| + CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-"-I$python_include"} |
| + CROSS_COMMENT=# |
| + if test "$case_sensitive" = "yes" |
| + then |
| + EXEEXT_FOR_BUILD= |
| + else |
| + EXEEXT_FOR_BUILD=.exe |
| + fi |
| + LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-} |
| + LIBS_FOR_BUILD=${LIBS_FOR_BUILD-} |
| + O_FOR_BUILD=x |
| + RUNSHARED="CROSS_TARGET=$ac_sys_system SRCDIR=$srcdir SO=${SO}" |
| +else |
| + CROSS_COMMENT= |
| + EXEEXT_FOR_BUILD=$BUILDEXEEXT |
| + O_FOR_BUILD=o |
| +fi |
| +AC_SUBST(CFLAGS_FOR_BUILD) |
| +AC_SUBST(CPPFLAGS_FOR_BUILD) |
| +AC_SUBST(CROSS_COMMENT) |
| +AC_SUBST(EXEEXT_FOR_BUILD) |
| +AC_SUBST(LDFLAGS_FOR_BUILD) |
| +AC_SUBST(LIBS_FOR_BUILD) |
| +AC_SUBST(O_FOR_BUILD) |
| + |
| # generate output files |
| AC_CONFIG_FILES(Makefile.pre Modules/Setup.config) |
| AC_OUTPUT |
| @@ -3732,6 +3872,9 @@ |
| then |
| cp $srcdir/Modules/Setup.dist Modules/Setup |
| fi |
| +mv Modules/Setup Modules/Setup~ |
| +sed -e "s/@POSIX@/$POSIX/g" < Modules/Setup~ > Modules/Setup |
| + |
| |
| echo "creating Modules/Setup.local" |
| if test ! -f Modules/Setup.local |
| --- misc/build/Python-2.6.1/Include/osdefs.h 2006-04-25 17:29:46.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Include/osdefs.h 2009-05-09 13:35:04.000000000 +0200 |
| @@ -9,7 +9,7 @@ |
| |
| /* Mod by chrish: QNX has WATCOM, but isn't DOS */ |
| #if !defined(__QNX__) |
| -#if defined(MS_WINDOWS) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__DJGPP__) || defined(PYOS_OS2) |
| +#if defined(MS_WINDOWS) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__DJGPP__) || defined(PYOS_OS2) || defined(__MINGW32__) |
| #if defined(PYOS_OS2) && defined(PYCC_GCC) |
| #define MAXPATHLEN 260 |
| #define SEP '/' |
| @@ -18,6 +18,7 @@ |
| #define SEP '\\' |
| #define ALTSEP '/' |
| #define MAXPATHLEN 256 |
| +#define ROOTSEP ':' |
| #endif |
| #define DELIM ';' |
| #endif |
| --- misc/build/Python-2.6.1/Include/pyport.h 2009-01-14 01:00:17.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Include/pyport.h 2009-05-09 13:35:04.000000000 +0200 |
| @@ -551,31 +551,31 @@ |
| BeOS and cygwin are the only other autoconf platform requiring special |
| linkage handling and both of these use __declspec(). |
| */ |
| -#if defined(__CYGWIN__) || defined(__BEOS__) |
| +#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BEOS__) |
| # define HAVE_DECLSPEC_DLL |
| #endif |
| |
| /* only get special linkage if built as shared or platform is Cygwin */ |
| -#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) |
| +#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) || defined(__MINGW32__) |
| # if defined(HAVE_DECLSPEC_DLL) |
| # ifdef Py_BUILD_CORE |
| # define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE |
| # define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE |
| /* module init functions inside the core need no external linkage */ |
| /* except for Cygwin to handle embedding (FIXME: BeOS too?) */ |
| -# if defined(__CYGWIN__) |
| +# if defined(__CYGWIN__) || defined(__MINGW32__) |
| # define PyMODINIT_FUNC __declspec(dllexport) void |
| -# else /* __CYGWIN__ */ |
| +# else /* __CYGWIN__ || __MINGW32__ */ |
| # define PyMODINIT_FUNC void |
| -# endif /* __CYGWIN__ */ |
| +# endif /* __CYGWIN__ || __MINGW32__ */ |
| # else /* Py_BUILD_CORE */ |
| /* Building an extension module, or an embedded situation */ |
| /* public Python functions and data are imported */ |
| /* Under Cygwin, auto-import functions to prevent compilation */ |
| /* failures similar to http://python.org/doc/FAQ.html#3.24 */ |
| -# if !defined(__CYGWIN__) |
| +# if !defined(__CYGWIN__) && !defined(__MINGW32__) |
| # define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE |
| -# endif /* !__CYGWIN__ */ |
| +# endif /* !__CYGWIN__ && ! __MINGW32__ */ |
| # define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE |
| /* module init functions outside the core must be exported */ |
| # if defined(__cplusplus) |
| --- misc/build/Python-2.6.1/Lib/distutils/command/build_ext.py 2009-02-05 23:55:00.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Lib/distutils/command/build_ext.py 2009-05-09 13:35:04.000000000 +0200 |
| @@ -679,6 +679,8 @@ |
| ext_path[len(ext_path) - 1] = ext_path[len(ext_path) - 1][:8] |
| # extensions in debug_mode are named 'module_d.pyd' under windows |
| so_ext = get_config_var('SO') |
| + if os.environ.get('CROSS_COMPILING') == 'yes': |
| + so_ext = os.environ.get('SO') |
| if os.name == 'nt' and self.debug: |
| return apply(os.path.join, ext_path) + '_d' + so_ext |
| return os.path.join(*ext_path) + so_ext |
| @@ -731,7 +733,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[:5] == "mingw": |
| template = "python%d.%d" |
| pythonlib = (template % |
| (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) |
| --- misc/build/Python-2.6.1/Lib/plat-mingw/regen 1970-01-01 01:00:00.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Lib/plat-mingw/regen 2009-05-09 13:35:04.000000000 +0200 |
| @@ -0,0 +1,3 @@ |
| +#! /bin/sh |
| +set -v |
| +python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h |
| --- misc/build/Python-2.6.1/Lib/plat-mingw32msvc2/regen 1970-01-01 01:00:00.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Lib/plat-mingw32msvc2/regen 2009-05-09 13:35:04.000000000 +0200 |
| @@ -0,0 +1,3 @@ |
| +#! /bin/sh |
| +set -v |
| +python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h |
| --- misc/build/Python-2.6.1/Lib/plat-pc/regen 1970-01-01 01:00:00.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Lib/plat-pc/regen 2009-05-09 13:35:04.000000000 +0200 |
| @@ -0,0 +1,3 @@ |
| +#! /bin/sh |
| +set -v |
| +python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h |
| --- misc/build/Python-2.6.1/Lib/test/test_future5.py 2008-10-26 21:59:05.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Lib/test/test_future5.py 2009-05-09 14:42:22.000000000 +0200 |
| @@ -13,7 +13,7 @@ |
| |
| def test_print_function(self): |
| with test_support.captured_output("stderr") as s: |
| - print("foo", file=sys.stderr) |
| + print >> sys.stderr, "foo" |
| self.assertEqual(s.getvalue(), "foo\n") |
| |
| |
| --- misc/build/Python-2.6.1/Makefile.pre.in 2009-02-24 12:07:44.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Makefile.pre.in 2009-05-09 13:35:04.000000000 +0200 |
| @@ -18,6 +18,8 @@ |
| # |
| # See also the section "Build instructions" in the README file. |
| |
| +DELIM=@DELIM@ |
| + |
| # === Variables set by makesetup === |
| |
| MODOBJS= _MODOBJS_ |
| @@ -72,6 +74,16 @@ |
| # C flags used for building the interpreter object files |
| PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE |
| |
| +# For cross compile: build compiler options |
| +CC_FOR_BUILD= @CC_FOR_BUILD@ |
| +CROSS_COMPILING= @cross_compiling@ |
| +EXEEXT_FOR_BUILD= @EXEEXT_FOR_BUILD@ |
| +O_FOR_BUILD= @O_FOR_BUILD@ |
| + |
| +CFLAGS_FOR_BUILD= @CFLAGS_FOR_BUILD@ |
| +CPPFLAGS_FOR_BUILD= @CPPFLAGS_FOR_BUILD@ -I$(srcdir)/Include |
| +LDFLAGS_FOR_BUILD= @LDFLAGS_FOR_BUILD@ |
| +LIBS_FOR_BUILD= @LIBS_FOR_BUILD@ |
| |
| # Machine-dependent subdirectories |
| MACHDEP= @MACHDEP@ |
| @@ -106,6 +118,10 @@ |
| BLDSHARED= @BLDSHARED@ |
| DESTSHARED= $(BINLIBDEST)/lib-dynload |
| |
| +comma=, |
| +BLDFLAGS=$(subst -Wl$(comma),,$(LDFLAGS)) |
| + |
| + |
| # Executable suffix (.exe on Windows and Mac OS X) |
| EXE= @EXEEXT@ |
| BUILDEXE= @BUILDEXEEXT@ |
| @@ -174,7 +190,8 @@ |
| UNICODE_OBJS= @UNICODE_OBJS@ |
| |
| PYTHON= python$(EXE) |
| -BUILDPYTHON= python$(BUILDEXE) |
| +BUILDPYTHON= python$(EXE) |
| +PYTHON_FOR_BUILD= @PYTHON_FOR_BUILD@ |
| |
| # The task to run while instrument when building the profile-opt target |
| PROFILE_TASK= $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck |
| @@ -204,7 +221,7 @@ |
| |
| ########################################################################## |
| # Parser |
| -PGEN= Parser/pgen$(EXE) |
| +PGEN_FOR_BUILD= Parser/pgen$(EXEEXT_FOR_BUILD) |
| |
| POBJS= \ |
| Parser/acceler.o \ |
| @@ -221,18 +238,28 @@ |
| |
| PARSER_OBJS= $(POBJS) Parser/myreadline.o Parser/tokenizer.o |
| |
| -PGOBJS= \ |
| - Objects/obmalloc.o \ |
| - Python/mysnprintf.o \ |
| - Parser/tokenizer_pgen.o \ |
| - Parser/printgrammar.o \ |
| - Parser/pgenmain.o |
| - |
| -PARSER_HEADERS= \ |
| - Parser/parser.h \ |
| - Parser/tokenizer.h |
| +POBJS_FOR_BUILD= \ |
| + Parser/acceler.$(O_FOR_BUILD) \ |
| + Parser/grammar1.$(O_FOR_BUILD) \ |
| + Parser/listnode.$(O_FOR_BUILD) \ |
| + Parser/node.$(O_FOR_BUILD) \ |
| + Parser/parser.$(O_FOR_BUILD) \ |
| + Parser/parsetok.$(O_FOR_BUILD) \ |
| + Parser/bitset.$(O_FOR_BUILD) \ |
| + Parser/metagrammar.$(O_FOR_BUILD) \ |
| + Parser/firstsets.$(O_FOR_BUILD) \ |
| + Parser/grammar.$(O_FOR_BUILD) \ |
| + Parser/pgen.$(O_FOR_BUILD) |
| + |
| +PGOBJS_FOR_BUILD= \ |
| + Objects/obmalloc.$(O_FOR_BUILD) \ |
| + Python/mysnprintf.$(O_FOR_BUILD) \ |
| + Parser/tokenizer_pgen.$(O_FOR_BUILD) \ |
| + Parser/printgrammar.$(O_FOR_BUILD) \ |
| + Parser/pgenmain.$(O_FOR_BUILD) |
| + |
| +PGENOBJS= $(POBJS_FOR_BUILD) $(PGOBJS_FOR_BUILD) |
| |
| -PGENOBJS= $(PGENMAIN) $(POBJS) $(PGOBJS) |
| |
| ########################################################################## |
| # AST |
| @@ -387,16 +414,15 @@ |
| Modules/python.o \ |
| $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) |
| |
| -platform: $(BUILDPYTHON) |
| - $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform |
| - |
| +platform: @CROSS_COMMENT@ $(BUILDPYTHON) |
| + $(RUNSHARED) $(PYTHON_FOR_BUILD) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform |
| |
| # Build the shared modules |
| -sharedmods: $(BUILDPYTHON) |
| - @case $$MAKEFLAGS in \ |
| - *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ |
| - *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ |
| - esac |
| +sharedmods: @CROSS_COMMENT@ $(BUILDPYTHON) |
| + case $$MAKEFLAGS in \ |
| + *-s*) $(RUNSHARED) CC='$(CC)' LDFLAGS="$(BLDFLAGS)" CROSS_COMPILING='$(CROSS_COMPILING)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \ |
| + *) $(RUNSHARED) CC='$(CC)' LDFLAGS="$(BLDFLAGS)" CROSS_COMPILING='$(CROSS_COMPILING)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \ |
| + esac |
| |
| # Build static library |
| # avoid long command lines, same as LIBRARY_OBJS |
| @@ -515,12 +541,13 @@ |
| $(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c |
| |
| |
| -$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT) |
| +$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) |
| -@$(INSTALL) -d Include |
| - -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) |
| + -$(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) |
| + |
| +$(PGEN_FOR_BUILD): $(PGENOBJS) |
| + $(CC_FOR_BUILD) $(OPT) $(LDFLAGS_FOR_BUILD) $(PGENOBJS) $(LIBS_FOR_BUILD) -o $(PGEN_FOR_BUILD) |
| |
| -$(PGEN): $(PGENOBJS) |
| - $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN) |
| |
| Parser/grammar.o: $(srcdir)/Parser/grammar.c \ |
| $(srcdir)/Include/token.h \ |
| @@ -578,6 +605,13 @@ |
| $(STRINGLIB_HEADERS) |
| |
| ############################################################################ |
| +# Cross compile rules |
| + |
| +.SUFFIXES: .x |
| +.c.x: |
| + $(CC_FOR_BUILD) -c $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -o $@ $< |
| + |
| +############################################################################ |
| # Header files |
| |
| PYTHON_HEADERS= \ |
| @@ -676,7 +710,7 @@ |
| |
| TESTOPTS= -l $(EXTRATESTOPTS) |
| TESTPROG= $(srcdir)/Lib/test/regrtest.py |
| -TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) -E -tt |
| +TESTPYTHON= $(RUNSHARED) $(PYTHON_FOR_BUILD) -E -tt |
| test: all platform |
| -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f |
| -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) |
| @@ -830,7 +864,7 @@ |
| multiprocessing multiprocessing/dummy \ |
| lib-old \ |
| curses $(MACHDEPS) |
| -libinstall: build_all $(srcdir)/Lib/$(PLATDIR) |
| +libinstall: $(srcdir)/Lib/$(PLATDIR) @CROSS_COMMENT@ $(BUILDPYTHON) |
| @for i in $(SCRIPTDIR) $(LIBDEST); \ |
| do \ |
| if test ! -d $(DESTDIR)$$i; then \ |
| @@ -887,19 +921,19 @@ |
| done |
| $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt |
| PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ |
| + $(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ |
| -d $(LIBDEST) -f \ |
| -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST) |
| PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ |
| + $(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ |
| -d $(LIBDEST) -f \ |
| -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST) |
| -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ |
| + $(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ |
| -d $(LIBDEST)/site-packages -f \ |
| -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages |
| -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ |
| + $(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ |
| -d $(LIBDEST)/site-packages -f \ |
| -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages |
| -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| @@ -909,9 +943,9 @@ |
| $(srcdir)/Lib/$(PLATDIR): |
| mkdir $(srcdir)/Lib/$(PLATDIR) |
| 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`"; \ |
| +@CROSS_COMMENT@ export PATH; PATH="`pwd`:$$PATH"; \ |
| +@CROSS_COMMENT@ export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \ |
| +@CROSS_COMMENT@ export DYLD_FRAMEWORK_PATH; DYLD_FRAMEWORK_PATH="`pwd`"; \ |
| export EXE; EXE="$(BUILDEXE)"; \ |
| cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen |
| |
| @@ -1001,8 +1035,9 @@ |
| # Install the dynamically loadable modules |
| # This goes into $(exec_prefix) |
| sharedinstall: |
| - $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ |
| - --prefix=$(prefix) \ |
| + CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING='$(CROSS_COMPILING)' \ |
| + $(RUNSHARED) $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \ |
| + --prefix=$(prefix) \ |
| --install-scripts=$(BINDIR) \ |
| --install-platlib=$(DESTSHARED) \ |
| --root=/$(DESTDIR) |
| @@ -1081,7 +1116,7 @@ |
| # This installs a few of the useful scripts in Tools/scripts |
| scriptsinstall: |
| SRCDIR=$(srcdir) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py install \ |
| + $(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/setup.py install \ |
| --prefix=$(prefix) \ |
| --install-scripts=$(BINDIR) \ |
| --root=/$(DESTDIR) |
| @@ -1145,11 +1180,12 @@ |
| find . -name '*.gc??' -exec rm -f {} ';' |
| |
| clobber: clean profile-removal |
| - -rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \ |
| + -rm -f $(BUILDPYTHON) $(PGEN_FOR_BUILD) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \ |
| tags TAGS \ |
| config.cache config.log pyconfig.h Modules/config.c |
| -rm -rf build platform |
| -rm -rf $(PYTHONFRAMEWORKDIR) |
| + -rm -rf buildpython |
| |
| # Make things extra clean, before making a distribution: |
| # remove all generated files, even Makefile[.pre] |
| --- misc/build/Python-2.6.1/Modules/datetimemodule.c 2008-06-11 09:41:16.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Modules/datetimemodule.c 2009-05-11 23:36:02.000000000 +0200 |
| @@ -10,6 +10,10 @@ |
| |
| #include <time.h> |
| |
| +#ifdef MS_WINDOWS |
| +#include <winsock2.h> |
| +#endif |
| + |
| #include "timefuncs.h" |
| |
| /* Differentiate between building the core module and building extension |
| --- misc/build/Python-2.6.1/Modules/dl_nt.c 1970-01-01 01:00:00.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Modules/dl_nt.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -0,0 +1,39 @@ |
| +/* |
| + |
| +Entry point for the Windows NT DLL. |
| + |
| +About the only reason for having this, is so initall() can automatically |
| +be called, removing that burden (and possible source of frustration if |
| +forgotten) from the programmer. |
| + |
| +*/ |
| +#include "windows.h" |
| + |
| +/* NT and Python share these */ |
| +#include "pyconfig.h" |
| +#include "Python.h" |
| + |
| +char dllVersionBuffer[16] = ""; // a private buffer |
| + |
| +// Python Globals |
| +HMODULE PyWin_DLLhModule = NULL; |
| +const char *PyWin_DLLVersionString = dllVersionBuffer; |
| + |
| + |
| +BOOL WINAPI DllMain (HANDLE hInst, |
| + ULONG ul_reason_for_call, |
| + LPVOID lpReserved) |
| +{ |
| + switch (ul_reason_for_call) |
| + { |
| + case DLL_PROCESS_ATTACH: |
| + PyWin_DLLhModule = hInst; |
| + // 1000 is a magic number I picked out of the air. Could do with a #define, I spose... |
| + LoadString(hInst, 1000, dllVersionBuffer, sizeof(dllVersionBuffer)); |
| + //initall(); |
| + break; |
| + case DLL_PROCESS_DETACH: |
| + break; |
| + } |
| + return TRUE; |
| +} |
| --- misc/build/Python-2.6.1/Modules/getpath.c 2007-03-10 08:38:14.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Modules/getpath.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -125,6 +125,14 @@ |
| #define LANDMARK "os.py" |
| #endif |
| |
| +#ifndef __MINGW32__ |
| +#define IS_ABSOLUTE(x) (x[0] == SEP) |
| +#else /* __MINGW32__ */ |
| +#define IS_ABSOLUTE(x) (x[0] == SEP || x[0] == ALTSEP\ |
| + || (x[1] && x[1] == ROOTSEP\ |
| + && x[2] && (x[2] == SEP || x[2] == ALTSEP))) |
| +#endif /* __MINGW32__ */ |
| + |
| static char prefix[MAXPATHLEN+1]; |
| static char exec_prefix[MAXPATHLEN+1]; |
| static char progpath[MAXPATHLEN+1]; |
| @@ -135,7 +143,12 @@ |
| reduce(char *dir) |
| { |
| size_t i = strlen(dir); |
| - while (i > 0 && dir[i] != SEP) |
| + while (i > 0 |
| + && dir[i] != SEP |
| +#ifdef ALTSEP |
| + && dir[i] != ALTSEP |
| +#endif /* ALTSEP */ |
| + ) |
| --i; |
| dir[i] = '\0'; |
| } |
| @@ -208,11 +221,16 @@ |
| joinpath(char *buffer, char *stuff) |
| { |
| size_t n, k; |
| - if (stuff[0] == SEP) |
| + if (IS_ABSOLUTE(stuff)) |
| n = 0; |
| else { |
| n = strlen(buffer); |
| - if (n > 0 && buffer[n-1] != SEP && n < MAXPATHLEN) |
| + if (n > 0 |
| + && buffer[n-1] != SEP |
| +#ifdef ALTSEP |
| + && buffer[n-1] != ALTSEP |
| +#endif /* ALTSEP */ |
| + && n < MAXPATHLEN) |
| buffer[n++] = SEP; |
| } |
| if (n > MAXPATHLEN) |
| @@ -229,11 +247,16 @@ |
| static void |
| copy_absolute(char *path, char *p) |
| { |
| - if (p[0] == SEP) |
| + if (IS_ABSOLUTE(p)) |
| strcpy(path, p); |
| else { |
| getcwd(path, MAXPATHLEN); |
| - if (p[0] == '.' && p[1] == SEP) |
| + if (p[0] == '.' |
| + && (p[1] == SEP |
| +#ifdef ALTSEP |
| + || p[1] == ALTSEP |
| +#endif /* ALTSEP */ |
| + )) |
| p += 2; |
| joinpath(path, p); |
| } |
| @@ -245,7 +268,7 @@ |
| { |
| char buffer[MAXPATHLEN + 1]; |
| |
| - if (path[0] == SEP) |
| + if (IS_ABSOLUTE(path)) |
| return; |
| copy_absolute(buffer, path); |
| strcpy(path, buffer); |
| @@ -393,13 +416,23 @@ |
| #endif |
| #endif |
| |
| - /* If there is no slash in the argv0 path, then we have to |
| - * assume python is on the user's $PATH, since there's no |
| - * other way to find a directory to start the search from. If |
| - * $PATH isn't exported, you lose. |
| - */ |
| - if (strchr(prog, SEP)) |
| - strncpy(progpath, prog, MAXPATHLEN); |
| + /* If PROG is an absolute name, then we're done. If PROG is not |
| + * an absolute name and contains SEP/ALTSEP, then it must be |
| + * reachable from CWD. Otherwise, python is on the user's $PATH, |
| + * since there's no other way to find a directory to start the |
| + * search from. If $PATH isn't exported, you lose. |
| + */ |
| + if (IS_ABSOLUTE(prog)) |
| + strncpy(progpath, prog, MAXPATHLEN); |
| + else if (strchr(prog, SEP) |
| +#ifdef ALTSEP |
| + || strchr(prog, ALTSEP) |
| +#endif /* ALTSEP */ |
| + ) |
| + { |
| + getcwd(progpath, MAXPATHLEN); |
| + joinpath(progpath, prog); |
| + } |
| #ifdef __APPLE__ |
| /* On Mac OS X, if a script uses an interpreter of the form |
| * "#!/opt/python2.3/bin/python", the kernel only passes "python" |
| @@ -415,6 +448,9 @@ |
| ; |
| #endif /* __APPLE__ */ |
| else if (path) { |
| +#ifdef __MINGW32__ |
| + char const *ext = strchr(prog, '.') ? "" : ".exe"; |
| +#endif |
| while (1) { |
| char *delim = strchr(path, DELIM); |
| |
| @@ -429,9 +465,11 @@ |
| strncpy(progpath, path, MAXPATHLEN); |
| |
| joinpath(progpath, prog); |
| +#ifdef __MINGW32__ |
| + strcat(progpath, ext); |
| +#endif |
| if (isxfile(progpath)) |
| break; |
| - |
| if (!delim) { |
| progpath[0] = '\0'; |
| break; |
| @@ -441,7 +479,7 @@ |
| } |
| else |
| progpath[0] = '\0'; |
| - if (progpath[0] != SEP) |
| + if (!IS_ABSOLUTE(progpath)) |
| absolutize(progpath); |
| strncpy(argv0_path, progpath, MAXPATHLEN); |
| argv0_path[MAXPATHLEN] = '\0'; |
| @@ -487,7 +525,7 @@ |
| while (linklen != -1) { |
| /* It's not null terminated! */ |
| tmpbuffer[linklen] = '\0'; |
| - if (tmpbuffer[0] == SEP) |
| + if (IS_ABSOLUTE(tmpbuffer)) |
| /* tmpbuffer should never be longer than MAXPATHLEN, |
| but extra check does not hurt */ |
| strncpy(argv0_path, tmpbuffer, MAXPATHLEN); |
| @@ -554,7 +592,7 @@ |
| while (1) { |
| char *delim = strchr(defpath, DELIM); |
| |
| - if (defpath[0] != SEP) |
| + if (!IS_ABSOLUTE(defpath)) |
| /* Paths are relative to prefix */ |
| bufsz += prefixsz; |
| |
| @@ -599,7 +637,7 @@ |
| while (1) { |
| char *delim = strchr(defpath, DELIM); |
| |
| - if (defpath[0] != SEP) { |
| + if (!IS_ABSOLUTE(defpath)) { |
| strcat(buf, prefix); |
| strcat(buf, separator); |
| } |
| --- misc/build/Python-2.6.1/Modules/Makefile 1970-01-01 01:00:00.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Modules/Makefile 2009-05-11 22:34:01.000000000 +0200 |
| @@ -0,0 +1,15 @@ |
| + |
| +# Rules appended by makedepend |
| + |
| +./posixmodule.o: $(srcdir)/./posixmodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/./posixmodule.c -o ./posixmodule.o |
| +./ntmodule$(SO): ./posixmodule.o; $(BLDSHARED) ./posixmodule.o -o ./ntmodule$(SO) |
| +./_sre.o: $(srcdir)/./_sre.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/./_sre.c -o ./_sre.o |
| +./_sre$(SO): ./_sre.o; $(BLDSHARED) ./_sre.o -o ./_sre$(SO) |
| +./_codecsmodule.o: $(srcdir)/./_codecsmodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/./_codecsmodule.c -o ./_codecsmodule.o |
| +./_codecsmodule$(SO): ./_codecsmodule.o; $(BLDSHARED) ./_codecsmodule.o -o ./_codecsmodule$(SO) |
| +./zipimport.o: $(srcdir)/./zipimport.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/./zipimport.c -o ./zipimport.o |
| +./zipimport$(SO): ./zipimport.o; $(BLDSHARED) ./zipimport.o -o ./zipimport$(SO) |
| +./symtablemodule.o: $(srcdir)/./symtablemodule.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/./symtablemodule.c -o ./symtablemodule.o |
| +./_symtablemodule$(SO): ./symtablemodule.o; $(BLDSHARED) ./symtablemodule.o -o ./_symtablemodule$(SO) |
| +./xxsubtype.o: $(srcdir)/./xxsubtype.c; $(CC) $(PY_CFLAGS) -c $(srcdir)/./xxsubtype.c -o ./xxsubtype.o |
| +./xxsubtype$(SO): ./xxsubtype.o; $(BLDSHARED) ./xxsubtype.o -o ./xxsubtype$(SO) |
| --- misc/build/Python-2.6.1/Modules/posixmodule.c 2009-04-06 08:47:37.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Modules/posixmodule.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -96,6 +96,11 @@ |
| #include <sys/loadavg.h> |
| #endif |
| |
| +/* Additional defines for the mingw32 build */ |
| +#if defined(__MINGW32__) |
| +#undef HAVE_DEV_PTMX |
| +#endif |
| + |
| /* Various compilers have only certain posix functions */ |
| /* XXX Gosh I wish these were all moved into pyconfig.h */ |
| #if defined(PYCC_VACPP) && defined(PYOS_OS2) |
| @@ -131,6 +136,10 @@ |
| #define HAVE_FSYNC 1 |
| #define fsync _commit |
| #else |
| +#ifdef __MINGW32__ /* MINGW32 (cross-)compiler*/ |
| +#define HAVE_FSYNC 1 |
| +#define fsync _commit |
| +#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,12 +165,13 @@ |
| #define HAVE_WAIT 1 |
| #define HAVE_TTYNAME 1 |
| #endif /* PYOS_OS2 && PYCC_GCC && __VMS */ |
| +#endif /* __MINGW32__ */ |
| #endif /* _MSC_VER */ |
| #endif /* __BORLANDC__ */ |
| #endif /* ! __WATCOMC__ || __QNX__ */ |
| #endif /* ! __IBMC__ */ |
| |
| -#ifndef _MSC_VER |
| +#if !defined(_MSC_VER) && !defined(__MINGW32__) |
| |
| #if defined(__sgi)&&_COMPILER_VERSION>=700 |
| /* declare ctermid_r if compiling with MIPSPro 7.x in ANSI C mode |
| @@ -173,7 +183,7 @@ |
| #if defined(PYCC_VACPP) |
| extern int mkdir(char *); |
| #else |
| -#if ( defined(__WATCOMC__) || defined(_MSC_VER) ) && !defined(__QNX__) |
| +#if ( defined(__WATCOMC__) || defined(_MSC_VER) || defined(__MINGW32__)) && !defined(__QNX__) |
| extern int mkdir(const char *); |
| #else |
| extern int mkdir(const char *, mode_t); |
| @@ -213,7 +223,7 @@ |
| #endif /* HAVE_LSTAT */ |
| #endif /* !HAVE_UNISTD_H */ |
| |
| -#endif /* !_MSC_VER */ |
| +#endif /* !_MSC_VER && !__MINGW32__ */ |
| |
| #ifdef HAVE_UTIME_H |
| #include <utime.h> |
| @@ -258,7 +268,7 @@ |
| #endif |
| #endif |
| |
| -#ifdef _MSC_VER |
| +#if defined (_MSC_VER) || defined (__MINGW32__) |
| #ifdef HAVE_DIRECT_H |
| #include <direct.h> |
| #endif |
| @@ -273,7 +283,7 @@ |
| #include <shellapi.h> /* for ShellExecute() */ |
| #define popen _popen |
| #define pclose _pclose |
| -#endif /* _MSC_VER */ |
| +#endif /* _MSC_VER || __MINGW32__ */ |
| |
| #if defined(PYCC_VACPP) && defined(PYOS_OS2) |
| #include <io.h> |
| @@ -322,7 +332,7 @@ |
| |
| /* choose the appropriate stat and fstat functions and return structs */ |
| #undef STAT |
| -#if defined(MS_WIN64) || defined(MS_WINDOWS) |
| +#if defined(MS_WIN64) || defined(MS_WINDOWS) || defined(__MINGW32__) |
| # define STAT win32_stat |
| # define FSTAT win32_fstat |
| # define STRUCT_STAT struct win32_stat |
| @@ -350,9 +360,9 @@ |
| */ |
| #include <crt_externs.h> |
| 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 */ |
| +#endif /* !_MSC_VER && ! __MINGW32__ */ |
| |
| static PyObject * |
| convertenviron(void) |
| @@ -446,7 +456,7 @@ |
| return rc; |
| } |
| |
| -#ifdef MS_WINDOWS |
| +#if defined (MS_WINDOWS) || defined (__MINGW32__) |
| static PyObject * |
| win32_error(char* function, char* filename) |
| { |
| @@ -749,7 +759,7 @@ |
| } |
| #endif |
| |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| /* The CRT of Windows has a number of flaws wrt. its stat() implementation: |
| - time stamps are restricted to second resolution |
| - file modification times suffer from forth-and-back conversions between |
| @@ -1074,7 +1084,7 @@ |
| return 0; |
| } |
| |
| -#endif /* MS_WINDOWS */ |
| +#endif /* MS_WINDOWS and __MINGW32__ */ |
| |
| PyDoc_STRVAR(stat_result__doc__, |
| "stat_result: Result from stat or lstat.\n\n\ |
| @@ -1286,7 +1296,7 @@ |
| #else |
| PyStructSequence_SET_ITEM(v, 1, PyInt_FromLong((long)st->st_ino)); |
| #endif |
| -#if defined(HAVE_LONG_LONG) && !defined(MS_WINDOWS) |
| +#if defined(HAVE_LONG_LONG) && !defined(MS_WINDOWS) && !defined(__MINGW32__) |
| PyStructSequence_SET_ITEM(v, 2, |
| PyLong_FromLongLong((PY_LONG_LONG)st->st_dev)); |
| #else |
| @@ -1369,7 +1379,7 @@ |
| return v; |
| } |
| |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| |
| /* IsUNCRoot -- test whether the supplied path is of the form \\SERVER\SHARE\, |
| where / can be used in place of \ and the trailing slash is optional. |
| @@ -1429,7 +1439,7 @@ |
| #undef ISSLASH |
| } |
| #endif /* Py_WIN_WIDE_FILENAMES */ |
| -#endif /* MS_WINDOWS */ |
| +#endif /* MS_WINDOWS and __MINGW32__ */ |
| |
| static PyObject * |
| posix_do_stat(PyObject *self, PyObject *args, |
| @@ -1482,7 +1492,7 @@ |
| Py_END_ALLOW_THREADS |
| |
| if (res != 0) { |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| result = win32_error("stat", pathfree); |
| #else |
| result = posix_error_with_filename(pathfree); |
| @@ -1630,7 +1640,7 @@ |
| static PyObject * |
| posix_chdir(PyObject *self, PyObject *args) |
| { |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| return win32_1str(args, "chdir", "s:chdir", win32_chdir, "U:chdir", win32_wchdir); |
| #elif defined(PYOS_OS2) && defined(PYCC_GCC) |
| return posix_1str(args, "et:chdir", _chdir2); |
| @@ -2073,7 +2083,7 @@ |
| { |
| /* XXX Should redo this putting the (now four) versions of opendir |
| in separate files instead of having them all here... */ |
| -#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) |
| +#if (defined(MS_WINDOWS) || defined(__MINGW32__)) && !defined(HAVE_OPENDIR) |
| |
| PyObject *d, *v; |
| HANDLE hFindFile; |
| @@ -2378,7 +2388,7 @@ |
| #endif /* which OS */ |
| } /* end of posix_listdir */ |
| |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| /* A helper function for abspath on win32 */ |
| static PyObject * |
| posix__getfullpathname(PyObject *self, PyObject *args) |
| @@ -2433,7 +2443,7 @@ |
| } |
| return PyString_FromString(outbuf); |
| } /* end of posix__getfullpathname */ |
| -#endif /* MS_WINDOWS */ |
| +#endif /* MS_WINDOWS and __MINGW32__ */ |
| |
| PyDoc_STRVAR(posix_mkdir__doc__, |
| "mkdir(path [, mode=0777])\n\n\ |
| @@ -2486,7 +2496,7 @@ |
| Py_FileSystemDefaultEncoding, &path, &mode)) |
| return NULL; |
| Py_BEGIN_ALLOW_THREADS |
| -#if ( defined(__WATCOMC__) || defined(PYCC_VACPP) ) && !defined(__QNX__) |
| +#if ( defined(__WATCOMC__) || defined(PYCC_VACPP)) && !defined(__QNX__) |
| res = mkdir(path); |
| #else |
| res = mkdir(path, mode); |
| @@ -2550,7 +2560,7 @@ |
| static PyObject * |
| posix_rename(PyObject *self, PyObject *args) |
| { |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| PyObject *o1, *o2; |
| char *p1, *p2; |
| BOOL result; |
| @@ -2598,7 +2608,7 @@ |
| static PyObject * |
| posix_rmdir(PyObject *self, PyObject *args) |
| { |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| return win32_1str(args, "rmdir", "s:rmdir", RemoveDirectoryA, "U:rmdir", RemoveDirectoryW); |
| #else |
| return posix_1str(args, "et:rmdir", rmdir); |
| @@ -2613,7 +2623,7 @@ |
| static PyObject * |
| posix_stat(PyObject *self, PyObject *args) |
| { |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| return posix_do_stat(self, args, "et:stat", STAT, "U:stat", win32_wstat); |
| #else |
| return posix_do_stat(self, args, "et:stat", STAT, NULL, NULL); |
| @@ -2669,7 +2679,7 @@ |
| static PyObject * |
| posix_unlink(PyObject *self, PyObject *args) |
| { |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| return win32_1str(args, "remove", "s:remove", DeleteFileA, "U:remove", DeleteFileW); |
| #else |
| return posix_1str(args, "et:remove", unlink); |
| @@ -4720,7 +4730,7 @@ |
| |
| #endif /* PYCC_??? */ |
| |
| -#elif defined(MS_WINDOWS) |
| +#elif defined(MS_WINDOWS) || defined(__MINGW32__) |
| |
| /* |
| * Portable 'popen' replacement for Win32. |
| @@ -5913,7 +5923,7 @@ |
| #ifdef HAVE_LSTAT |
| return posix_do_stat(self, args, "et:lstat", lstat, NULL, NULL); |
| #else /* !HAVE_LSTAT */ |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| return posix_do_stat(self, args, "et:lstat", STAT, "U:lstat", win32_wstat); |
| #else |
| return posix_do_stat(self, args, "et:lstat", STAT, NULL, NULL); |
| @@ -6046,7 +6056,7 @@ |
| #endif /* HAVE_TIMES */ |
| |
| |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| #define HAVE_TIMES /* so the method table will pick it up */ |
| static PyObject * |
| posix_times(PyObject *self, PyObject *noargs) |
| @@ -6070,7 +6080,7 @@ |
| (double)0, |
| (double)0); |
| } |
| -#endif /* MS_WINDOWS */ |
| +#endif /* MS_WINDOWS and __MINGW32__ */ |
| |
| #ifdef HAVE_TIMES |
| PyDoc_STRVAR(posix_times__doc__, |
| @@ -6186,7 +6196,7 @@ |
| int mode = 0777; |
| int fd; |
| |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| if (unicode_file_names()) { |
| PyUnicodeObject *po; |
| if (PyArg_ParseTuple(args, "Ui|i:mkdir", &po, &flag, &mode)) { |
| @@ -6305,7 +6315,7 @@ |
| posix_lseek(PyObject *self, PyObject *args) |
| { |
| int fd, how; |
| -#if defined(MS_WIN64) || defined(MS_WINDOWS) |
| +#if defined(MS_WIN64) || defined(MS_WINDOWS) || defined(__MINGW32__) |
| PY_LONG_LONG pos, res; |
| #else |
| off_t pos, res; |
| @@ -6332,7 +6342,7 @@ |
| return NULL; |
| |
| Py_BEGIN_ALLOW_THREADS |
| -#if defined(MS_WIN64) || defined(MS_WINDOWS) |
| +#if defined(MS_WIN64) || defined(MS_WINDOWS) || defined(__MINGW32__) |
| res = _lseeki64(fd, pos, how); |
| #else |
| res = lseek(fd, pos, how); |
| @@ -6348,7 +6358,6 @@ |
| #endif |
| } |
| |
| - |
| PyDoc_STRVAR(posix_read__doc__, |
| "read(fd, buffersize) -> string\n\n\ |
| Read a file descriptor."); |
| @@ -6423,7 +6432,7 @@ |
| res = FSTAT(fd, &st); |
| Py_END_ALLOW_THREADS |
| if (res != 0) { |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| return win32_error("fstat", NULL); |
| #else |
| return posix_error(); |
| @@ -6462,7 +6471,7 @@ |
| return NULL; |
| } |
| Py_BEGIN_ALLOW_THREADS |
| -#if !defined(MS_WINDOWS) && defined(HAVE_FCNTL_H) |
| +#if !defined(MS_WINDOWS) || !defined(__MINGW32__) && defined(HAVE_FCNTL_H) |
| if (mode[0] == 'a') { |
| /* try to make sure the O_APPEND flag is set */ |
| int flags; |
| @@ -6523,7 +6532,7 @@ |
| |
| return Py_BuildValue("(ii)", read, write); |
| #else |
| -#if !defined(MS_WINDOWS) |
| +#if !defined(MS_WINDOWS) || !defined(__MINGW32__) |
| int fds[2]; |
| int res; |
| Py_BEGIN_ALLOW_THREADS |
| @@ -6532,7 +6541,7 @@ |
| if (res != 0) |
| return posix_error(); |
| return Py_BuildValue("(ii)", fds[0], fds[1]); |
| -#else /* MS_WINDOWS */ |
| +#else /* MS_WINDOWS and __MINGW32__ */ |
| HANDLE read, write; |
| int read_fd, write_fd; |
| BOOL ok; |
| @@ -7078,7 +7087,7 @@ |
| "tempnam is a potential security risk to your program") < 0) |
| return NULL; |
| |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| name = _tempnam(dir, pfx); |
| #else |
| name = tempnam(dir, pfx); |
| @@ -8137,7 +8146,7 @@ |
| return NULL; |
| } |
| |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| PyDoc_STRVAR(win32_startfile__doc__, |
| "startfile(filepath [, operation]) - Start a file with its associated\n\ |
| application.\n\ |
| @@ -8239,7 +8248,7 @@ |
| } |
| #endif |
| |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) && !defined(__MINGW32__) |
| |
| PyDoc_STRVAR(win32_urandom__doc__, |
| "urandom(n) -> str\n\n\ |
| @@ -8484,7 +8493,7 @@ |
| #endif /* HAVE_PLOCK */ |
| #ifdef HAVE_POPEN |
| {"popen", posix_popen, METH_VARARGS, posix_popen__doc__}, |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| {"popen2", win32_popen2, METH_VARARGS}, |
| {"popen3", win32_popen3, METH_VARARGS}, |
| {"popen4", win32_popen4, METH_VARARGS}, |
| @@ -8649,13 +8658,13 @@ |
| {"pathconf", posix_pathconf, METH_VARARGS, posix_pathconf__doc__}, |
| #endif |
| {"abort", posix_abort, METH_NOARGS, posix_abort__doc__}, |
| -#ifdef MS_WINDOWS |
| +#if defined(MS_WINDOWS) || defined(__MINGW32__) |
| {"_getfullpathname", posix__getfullpathname, METH_VARARGS, NULL}, |
| #endif |
| #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 |
| @@ -8946,7 +8955,7 @@ |
| } |
| |
| |
| -#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__)) && !defined(__QNX__) |
| +#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) || defined (__MINGW32__)) && !defined(__QNX__) |
| #define INITFUNC initnt |
| #define MODNAME "nt" |
| |
| --- misc/build/Python-2.6.1/Modules/pwdmodule.c 2008-06-09 06:58:54.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Modules/pwdmodule.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -1,9 +1,10 @@ |
| - |
| /* UNIX password file access module */ |
| |
| #include "Python.h" |
| #include "structseq.h" |
| |
| +#ifndef __MINGW32__ |
| + |
| #include <sys/types.h> |
| #include <pwd.h> |
| |
| @@ -196,3 +197,9 @@ |
| PyModule_AddObject(m, "struct_pwent", (PyObject *) &StructPwdType); |
| initialized = 1; |
| } |
| +#else |
| +PyMODINIT_FUNC |
| +initpwd(void) |
| +{ |
| +} |
| +#endif // !__MINGW32__ |
| --- misc/build/Python-2.6.1/Modules/Setup.dist 2008-11-27 11:15:12.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Modules/Setup.dist 2009-05-12 00:28:08.000000000 +0200 |
| @@ -91,12 +91,12 @@ |
| TESTPATH= |
| |
| # Path components for machine- or system-dependent modules and shared libraries |
| -MACHDEPPATH=:plat-$(MACHDEP) |
| +MACHDEPPATH=$(DELIM)plat-$(MACHDEP) |
| EXTRAMACHDEPPATH= |
| |
| # Path component for the Tkinter-related modules |
| # The TKPATH variable is always enabled, to save you the effort. |
| -TKPATH=:lib-tk |
| +TKPATH=$(DELIM)lib-tk |
| |
| # Path component for old modules. |
| OLDPATH=:lib-old |
| @@ -112,9 +112,9 @@ |
| # This only contains the minimal set of modules required to run the |
| # setup.py script in the root of the Python source tree. |
| |
| -posix posixmodule.c # posix (UNIX) system calls |
| +@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 |
| @@ -162,33 +162,33 @@ |
| # it, depending on your system -- see the GNU readline instructions. |
| # It's okay for this to be a shared library, too. |
| |
| -#readline readline.c -lreadline -ltermcap |
| +readline readline.c -lreadline -ltermcap |
| |
| |
| # Modules that should always be present (non UNIX dependent): |
| |
| -#array arraymodule.c # array objects |
| -#cmath cmathmodule.c # -lm # complex math library functions |
| -#math mathmodule.c # -lm # math library functions, e.g. sin() |
| -#_struct _struct.c # binary structure packing/unpacking |
| -#time timemodule.c # -lm # time operations and variables |
| -#operator operator.c # operator.add() and similar goodies |
| -#_weakref _weakref.c # basic weak reference support |
| -#_testcapi _testcapimodule.c # Python C API test module |
| -#_random _randommodule.c # Random number generator |
| -#_collections _collectionsmodule.c # Container types |
| -#itertools itertoolsmodule.c # Functions creating iterators for efficient looping |
| -#strop stropmodule.c # String manipulations |
| -#_functools _functoolsmodule.c # Tools for working with functions and callable objects |
| -#_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c # elementtree accelerator |
| +array arraymodule.c # array objects |
| +cmath cmathmodule.c -lm # complex math library functions |
| +math mathmodule.c -lm # math library functions, e.g. sin() |
| +_struct _struct.c # binary structure packing/unpacking |
| +time timemodule.c -lm # time operations and variables |
| +operator operator.c # operator.add() and similar goodies |
| +_weakref _weakref.c # basic weak reference support |
| +_testcapi _testcapimodule.c # Python C API test module |
| +_random _randommodule.c # Random number generator |
| +_collections _collectionsmodule.c # Container types |
| +itertools itertoolsmodule.c # Functions creating iterators for efficient looping |
| +strop stropmodule.c # String manipulations |
| +_functools _functoolsmodule.c # Tools for working with functions and callable objects |
| +_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c # elementtree accelerator |
| #_pickle _pickle.c # pickle accelerator |
| -#datetime datetimemodule.c # date/time type |
| -#_bisect _bisectmodule.c # Bisection algorithms |
| +datetime datetimemodule.c # date/time type |
| +_bisect _bisectmodule.c # Bisection algorithms |
| |
| -#unicodedata unicodedata.c # static Unicode character database |
| +unicodedata unicodedata.c # static Unicode character database |
| |
| # access to ISO C locale support |
| -#_locale _localemodule.c # -lintl |
| +_locale _localemodule.c -lintl |
| |
| |
| # Modules with some UNIX dependencies -- on by default: |
| @@ -198,16 +198,16 @@ |
| #fcntl fcntlmodule.c # fcntl(2) and ioctl(2) |
| #spwd spwdmodule.c # spwd(3) |
| #grp grpmodule.c # grp(3) |
| -#select selectmodule.c # select(2); not on ancient System V |
| +select selectmodule.c -lws2_32 -lwsock32 # select(2); not on ancient System V |
| |
| # Memory-mapped files (also works on Win32). |
| -#mmap mmapmodule.c |
| +mmap mmapmodule.c |
| |
| # CSV file helper |
| -#_csv _csv.c |
| +_csv _csv.c |
| |
| # Socket module helper for socket(2) |
| -#_socket socketmodule.c |
| +_socket socketmodule.c -lws2_32 -lwsock32 |
| |
| # Socket module helper for SSL support; you must comment out the other |
| # socket line above, and possibly edit the SSL variable: |
| @@ -248,14 +248,14 @@ |
| # Message-Digest Algorithm, described in RFC 1321. The necessary files |
| # md5.c and md5.h are included here. |
| |
| -#_md5 md5module.c md5.c |
| +_md5 md5module.c md5.c |
| |
| |
| # The _sha module implements the SHA checksum algorithms. |
| # (NIST's Secure Hash Algorithms.) |
| -#_sha shamodule.c |
| -#_sha256 sha256module.c |
| -#_sha512 sha512module.c |
| +_sha shamodule.c |
| +_sha256 sha256module.c |
| +_sha512 sha512module.c |
| |
| |
| # SGI IRIX specific modules -- off by default. |
| @@ -307,7 +307,7 @@ |
| |
| # George Neville-Neil's timing module: |
| |
| -#timing timingmodule.c |
| +timing timingmodule.c |
| |
| |
| # The _tkinter module. |
| @@ -411,11 +411,11 @@ |
| # |
| # Edit the variables DB and DBLIBVERto point to the db top directory |
| # and the subdirectory of PORT where you built it. |
| -#DB=/usr/local/BerkeleyDB.4.0 |
| -#DBLIBVER=4.0 |
| -#DBINC=$(DB)/include |
| -#DBLIB=$(DB)/lib |
| -#_bsddb _bsddb.c -I$(DBINC) -L$(DBLIB) -ldb-$(DBLIBVER) |
| +DB=$(prefix) |
| +DBLIBVER=4.8 |
| +DBINC=$(DB)/include |
| +DBLIB=$(DB)/lib |
| +_bsddb _bsddb.c -I$(DBINC) -L$(DBLIB) -ldb-$(DBLIBVER) |
| |
| # Historical Berkeley DB 1.85 |
| # |
| @@ -430,14 +430,14 @@ |
| |
| |
| # Helper module for various ascii-encoders |
| -#binascii binascii.c |
| +binascii binascii.c |
| |
| # Fred Drake's interface to the Python parser |
| -#parser parsermodule.c |
| +parser parsermodule.c |
| |
| # cStringIO and cPickle |
| -#cStringIO cStringIO.c |
| -#cPickle cPickle.c |
| +cStringIO cStringIO.c |
| +cPickle cPickle.c |
| |
| |
| # Lee Busby's SIGFPE modules. |
| @@ -460,7 +460,7 @@ |
| # Andrew Kuchling's zlib module. |
| # This require zlib 1.1.3 (or later). |
| # See http://www.gzip.org/zlib/ |
| -#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz |
| +zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz |
| |
| # Interface to the Expat XML parser |
| # |
| @@ -473,23 +473,23 @@ |
| # |
| # More information on Expat can be found at www.libexpat.org. |
| # |
| -#pyexpat expat/xmlparse.c expat/xmlrole.c expat/xmltok.c pyexpat.c -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI |
| +pyexpat expat/xmlparse.c expat/xmlrole.c expat/xmltok.c pyexpat.c -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI |
| |
| |
| # Hye-Shik Chang's CJKCodecs |
| |
| # multibytecodec is required for all the other CJK codec modules |
| -#_multibytecodec cjkcodecs/multibytecodec.c |
| +_multibytecodec cjkcodecs/multibytecodec.c |
| |
| -#_codecs_cn cjkcodecs/_codecs_cn.c |
| -#_codecs_hk cjkcodecs/_codecs_hk.c |
| -#_codecs_iso2022 cjkcodecs/_codecs_iso2022.c |
| -#_codecs_jp cjkcodecs/_codecs_jp.c |
| -#_codecs_kr cjkcodecs/_codecs_kr.c |
| -#_codecs_tw cjkcodecs/_codecs_tw.c |
| +_codecs_cn cjkcodecs/_codecs_cn.c |
| +_codecs_hk cjkcodecs/_codecs_hk.c |
| +_codecs_iso2022 cjkcodecs/_codecs_iso2022.c |
| +_codecs_jp cjkcodecs/_codecs_jp.c |
| +_codecs_kr cjkcodecs/_codecs_kr.c |
| +_codecs_tw cjkcodecs/_codecs_tw.c |
| |
| # Example -- included for reference only: |
| # xx xxmodule.c |
| |
| # Another example -- the 'xxsubtype' module shows C-level subtyping in action |
| -xxsubtype xxsubtype.c |
| +# xxsubtype xxsubtype.c |
| --- misc/build/Python-2.6.1/Modules/timemodule.c 2008-07-05 21:19:50.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Modules/timemodule.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -42,6 +42,10 @@ |
| #include <windows.h> |
| #include "pythread.h" |
| |
| +#ifdef MS_WINDOWS |
| +#include <winsock2.h> |
| +#endif |
| + |
| /* helper to allow us to interrupt sleep() on Windows*/ |
| static HANDLE hInterruptEvent = NULL; |
| static BOOL WINAPI PyCtrlHandler(DWORD dwCtrlType) |
| @@ -837,7 +841,9 @@ |
| If Ctrl+C event delivered while not sleeping |
| it will be ignored. |
| */ |
| +#ifdef WITH_THREAD |
| main_thread = PyThread_get_thread_ident(); |
| +#endif |
| hInterruptEvent = CreateEvent(NULL, TRUE, FALSE, NULL); |
| SetConsoleCtrlHandler( PyCtrlHandler, TRUE); |
| #endif /* MS_WINDOWS */ |
| @@ -939,8 +945,11 @@ |
| * by Guido, only the main thread can be interrupted. |
| */ |
| ul_millis = (unsigned long)millisecs; |
| - if (ul_millis == 0 || |
| - main_thread != PyThread_get_thread_ident()) |
| + if (ul_millis == 0 |
| +#ifdef WITH_THREAD |
| + || main_thread != PyThread_get_thread_ident() |
| +#endif |
| + ) |
| Sleep(ul_millis); |
| else { |
| DWORD rc; |
| --- misc/build/Python-2.6.1/Modules/xxsubtype.c 2007-07-21 08:55:02.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Modules/xxsubtype.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -1,6 +1,10 @@ |
| #include "Python.h" |
| #include "structmember.h" |
| |
| +#ifndef CLOCKS_PER_SEC |
| +#include <bits/time.h> |
| +#endif |
| + |
| PyDoc_STRVAR(xxsubtype__doc__, |
| "xxsubtype is an example module showing how to subtype builtin types from C.\n" |
| "test_descr.py in the standard test suite requires it in order to complete.\n" |
| --- misc/build/Python-2.6.1/Objects/exceptions.c 2008-07-30 19:45:10.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Objects/exceptions.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -792,7 +792,7 @@ |
| * WindowsError extends OSError |
| */ |
| #ifdef MS_WINDOWS |
| -#include "errmap.h" |
| +#include "../PC/errmap.h" |
| |
| static int |
| WindowsError_clear(PyWindowsErrorObject *self) |
| --- misc/build/Python-2.6.1/Python/dynload_shlib.c 2006-01-04 02:30:17.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Python/dynload_shlib.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -32,7 +32,7 @@ |
| |
| |
| const struct filedescr _PyImport_DynLoadFiletab[] = { |
| -#ifdef __CYGWIN__ |
| +#if defined(__CYGWIN__) || defined(__MINGW32__) |
| {".dll", "rb", C_EXTENSION}, |
| {"module.dll", "rb", C_EXTENSION}, |
| #else |
| --- misc/build/Python-2.6.1/Python/dynload_win.c 2009-01-28 00:30:15.000000000 +0100 |
| +++ misc/build/Python-2.6.1/Python/dynload_win.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -1,7 +1,112 @@ |
| |
| /* Support for dynamic loading of extension modules */ |
| |
| +/* |
| +Entry point for the Windows NT DLL. |
| + |
| +About the only reason for having this, is so initall() can automatically |
| +be called, removing that burden (and possible source of frustration if |
| +forgotten) from the programmer. |
| + |
| +*/ |
| + |
| #include "Python.h" |
| +#include "windows.h" |
| + |
| +#ifdef Py_ENABLE_SHARED |
| +char dllVersionBuffer[16] = ""; // a private buffer |
| + |
| +// Python Globals |
| +HMODULE PyWin_DLLhModule = NULL; |
| +const char *PyWin_DLLVersionString = dllVersionBuffer; |
| + |
| +// Windows "Activation Context" work: |
| +// Our .pyd extension modules are generally built without a manifest (ie, |
| +// those included with Python and those built with a default distutils. |
| +// This requires we perform some "activation context" magic when loading our |
| +// extensions. In summary: |
| +// * As our DLL loads we save the context being used. |
| +// * Before loading our extensions we re-activate our saved context. |
| +// * After extension load is complete we restore the old context. |
| +// As an added complication, this magic only works on XP or later - we simply |
| +// use the existence (or not) of the relevant function pointers from kernel32. |
| +// See bug 4566 (http://python.org/sf/4566) for more details. |
| + |
| +typedef BOOL (WINAPI * PFN_GETCURRENTACTCTX)(HANDLE *); |
| +typedef BOOL (WINAPI * PFN_ACTIVATEACTCTX)(HANDLE, ULONG_PTR *); |
| +typedef BOOL (WINAPI * PFN_DEACTIVATEACTCTX)(DWORD, ULONG_PTR); |
| +typedef BOOL (WINAPI * PFN_ADDREFACTCTX)(HANDLE); |
| +typedef BOOL (WINAPI * PFN_RELEASEACTCTX)(HANDLE); |
| + |
| +// locals and function pointers for this activation context magic. |
| +static HANDLE PyWin_DLLhActivationContext = NULL; // one day it might be public |
| +static PFN_GETCURRENTACTCTX pfnGetCurrentActCtx = NULL; |
| +static PFN_ACTIVATEACTCTX pfnActivateActCtx = NULL; |
| +static PFN_DEACTIVATEACTCTX pfnDeactivateActCtx = NULL; |
| +static PFN_ADDREFACTCTX pfnAddRefActCtx = NULL; |
| +static PFN_RELEASEACTCTX pfnReleaseActCtx = NULL; |
| + |
| +void _LoadActCtxPointers() |
| +{ |
| + HINSTANCE hKernel32 = GetModuleHandleW(L"kernel32.dll"); |
| + if (hKernel32) |
| + pfnGetCurrentActCtx = (PFN_GETCURRENTACTCTX) GetProcAddress(hKernel32, "GetCurrentActCtx"); |
| + // If we can't load GetCurrentActCtx (ie, pre XP) , don't bother with the rest. |
| + if (pfnGetCurrentActCtx) { |
| + pfnActivateActCtx = (PFN_ACTIVATEACTCTX) GetProcAddress(hKernel32, "ActivateActCtx"); |
| + pfnDeactivateActCtx = (PFN_DEACTIVATEACTCTX) GetProcAddress(hKernel32, "DeactivateActCtx"); |
| + pfnAddRefActCtx = (PFN_ADDREFACTCTX) GetProcAddress(hKernel32, "AddRefActCtx"); |
| + pfnReleaseActCtx = (PFN_RELEASEACTCTX) GetProcAddress(hKernel32, "ReleaseActCtx"); |
| + } |
| +} |
| + |
| +ULONG_PTR _Py_ActivateActCtx() |
| +{ |
| + ULONG_PTR ret = 0; |
| + if (PyWin_DLLhActivationContext && pfnActivateActCtx) |
| + if (!(*pfnActivateActCtx)(PyWin_DLLhActivationContext, &ret)) { |
| + OutputDebugString("Python failed to activate the activation context before loading a DLL\n"); |
| + ret = 0; // no promise the failing function didn't change it! |
| + } |
| + return ret; |
| +} |
| + |
| +void _Py_DeactivateActCtx(ULONG_PTR cookie) |
| +{ |
| + if (cookie && pfnDeactivateActCtx) |
| + if (!(*pfnDeactivateActCtx)(0, cookie)) |
| + OutputDebugString("Python failed to de-activate the activation context\n"); |
| +} |
| + |
| +BOOL WINAPI DllMain (HANDLE hInst, |
| + ULONG ul_reason_for_call, |
| + LPVOID lpReserved) |
| +{ |
| + switch (ul_reason_for_call) |
| + { |
| + case DLL_PROCESS_ATTACH: |
| + PyWin_DLLhModule = hInst; |
| + // 1000 is a magic number I picked out of the air. Could do with a #define, I spose... |
| + LoadString(hInst, 1000, dllVersionBuffer, sizeof(dllVersionBuffer)); |
| + |
| + // and capture our activation context for use when loading extensions. |
| + _LoadActCtxPointers(); |
| + if (pfnGetCurrentActCtx && pfnAddRefActCtx) |
| + if ((*pfnGetCurrentActCtx)(&PyWin_DLLhActivationContext)) |
| + if (!(*pfnAddRefActCtx)(PyWin_DLLhActivationContext)) |
| + OutputDebugString("Python failed to load the default activation context\n"); |
| + break; |
| + |
| + case DLL_PROCESS_DETACH: |
| + if (pfnReleaseActCtx) |
| + (*pfnReleaseActCtx)(PyWin_DLLhActivationContext); |
| + break; |
| + } |
| + return TRUE; |
| +} |
| + |
| +#endif /* Py_ENABLE_SHARED */ |
| + |
| |
| #ifdef HAVE_DIRECT_H |
| #include <direct.h> |
| @@ -28,6 +133,9 @@ |
| /* Case insensitive string compare, to avoid any dependencies on particular |
| C RTL implementations */ |
| |
| +#ifdef __MINGW32__ |
| +#define strcasecmp py_strcasecmp |
| +#endif |
| static int strcasecmp (char *string1, char *string2) |
| { |
| int first, second; |
| --- misc/build/Python-2.6.1/Python/frozenmain.c 2002-06-30 17:26:10.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Python/frozenmain.c 2009-05-09 13:35:04.000000000 +0200 |
| @@ -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, "<stdin>") != 0; |
| |
| -#ifdef MS_WINDOWS |
| +#if defined (MS_WINDOWS) && ! defined (__MINGW32__) |
| PyWinFreeze_ExeTerm(); |
| #endif |
| Py_Finalize(); |
| --- misc/build/Python-2.6.1/README 2009-04-07 03:54:02.000000000 +0200 |
| +++ misc/build/Python-2.6.1/README 2009-05-09 13:35:04.000000000 +0200 |
| @@ -1160,6 +1160,37 @@ |
| do this. |
| |
| |
| +Cross Compiling |
| +--------------- |
| + |
| +Python can be cross compiled by supplying different --build and --host |
| +parameters to configure. Python is compiled on the "build" system and |
| +executed on the "host" system. Cross compiling python requires a |
| +native Python on the build host, and a natively compiled tool `Pgen'. |
| + |
| +Before cross compiling, Python must first be compiled and installed on |
| +the build host. The configure script will use `cc' and `python', or |
| +environment variables CC_FOR_BUILD or PYTHON_FOR_BUILD, eg: |
| + |
| + CC_FOR_BUILD=gcc-3.3 \ |
| + PYTHON_FOR_BUILD=python2.4 \ |
| + .../configure --build=i686-linux --host=i586-mingw32 |
| + |
| +Cross compiling has been tested under linux, mileage may vary for |
| +other platforms. |
| + |
| +A few reminders on using configure to cross compile: |
| +- Cross compile tools must be in PATH, |
| +- Cross compile tools must be prefixed with the host type |
| + (ie i586-mingw32-gcc, i586-mingw32-ranlib, ...), |
| +- CC, CXX, AR, and RANLIB must be undefined when running configure, |
| + they will be auto-detected. |
| + |
| +If you need a cross compiler, Debian ships several several (eg: avr, |
| +m68hc1x, mingw32), while dpkg-cross easily creates others. Otherwise, |
| +check out Dan Kegel's crosstool: http://www.kegel.com/crosstool . |
| + |
| + |
| Miscellaneous issues |
| ==================== |
| |
| --- misc/build/Python-2.6.1/setup.py 2009-03-31 20:20:48.000000000 +0200 |
| +++ misc/build/Python-2.6.1/setup.py 2009-05-09 13:35:04.000000000 +0200 |
| @@ -19,6 +19,11 @@ |
| # This global variable is used to hold the list of modules to be disabled. |
| disabled_module_list = [] |
| |
| +import os |
| +sysconfig.get_config_vars() |
| +sysconfig._config_vars.update (os.environ) |
| + |
| + |
| def add_dir_to_list(dirlist, dir): |
| """Add the directory 'dir' to the list 'dirlist' (at the front) if |
| 1) 'dir' is not already in 'dirlist' |
| @@ -115,6 +120,8 @@ |
| # Fix up the autodetected modules, prefixing all the source files |
| # with Modules/ and adding Python's include directory to the path. |
| (srcdir,) = sysconfig.get_config_vars('srcdir') |
| + if os.environ.get('CROSS_COMPILING') == 'yes': |
| + srcdir = os.environ.get('SRCDIR') |
| if not srcdir: |
| # Maybe running on Windows but not using CYGWIN? |
| raise ValueError("No source directory; cannot proceed.") |
| @@ -267,6 +274,10 @@ |
| self.announce('WARNING: skipping import check for Cygwin-based "%s"' |
| % ext.name) |
| return |
| + if os.environ.get('CROSS_COMPILING') == 'yes': |
| + self.announce('WARNING: skipping import check for cross compiled "%s"' |
| + % ext.name) |
| + return |
| ext_filename = os.path.join( |
| self.build_lib, |
| self.get_ext_filename(self.get_ext_fullname(ext.name))) |
| @@ -302,11 +313,14 @@ |
| self.failed.append(ext.name) |
| |
| def get_platform(self): |
| - # Get value of sys.platform |
| - for platform in ['cygwin', 'beos', 'darwin', 'atheos', 'osf1']: |
| - if sys.platform.startswith(platform): |
| + # Get value of target's sys.platform |
| + p = sys.platform |
| + if os.environ.get('CROSS_COMPILING') == 'yes': |
| + p = os.environ.get('CROSS_TARGET') |
| + for platform in ['cygwin', 'mingw', 'beos', 'darwin', 'atheos', 'osf1']: |
| + if p.startswith(platform): |
| return platform |
| - return sys.platform |
| + return p |
| |
| def detect_modules(self): |
| # Ensure that /usr/local is always used |
| @@ -889,13 +903,11 @@ |
| # We hunt for #define SQLITE_VERSION "n.n.n" |
| # We need to find >= sqlite version 3.0.8 |
| sqlite_incdir = sqlite_libdir = None |
| - sqlite_inc_paths = [ '/usr/include', |
| - '/usr/include/sqlite', |
| - '/usr/include/sqlite3', |
| - '/usr/local/include', |
| - '/usr/local/include/sqlite', |
| - '/usr/local/include/sqlite3', |
| - ] |
| + sqlite_inc_paths = [] |
| + |
| + # Broken for x-compile |
| + #'/usr/include', '/usr/include/sqlite', '/usr/include/sqlite3', '/usr/local/include', '/usr/local/include/sqlite', '/usr/local/include/sqlite3', ] |
| + |
| MIN_SQLITE_VERSION_NUMBER = (3, 0, 8) |
| MIN_SQLITE_VERSION = ".".join([str(x) |
| for x in MIN_SQLITE_VERSION_NUMBER]) |
| @@ -1809,6 +1821,8 @@ |
| # mode 755. All installed directories will get mode 755. |
| |
| so_ext = sysconfig.get_config_var("SO") |
| + if os.environ.get('CROSS_COMPILING') == 'yes': |
| + so_ext = os.environ.get('SO') |
| |
| def install(self): |
| outfiles = install_lib.install(self) |
| --- misc/build/Python-2.6.1/Python/thread.c 2008-08-04 09:33:37.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Python/thread.c 2009-05-12 01:00:57.000000000 +0200 |
| @@ -61,6 +61,13 @@ |
| |
| #endif /* _POSIX_THREADS */ |
| |
| +#ifdef __MINGW32__ |
| +#ifdef _POSIX_THREADS |
| +#undef _POSIX_THREADS |
| +#endif |
| +#define NT_THREADS |
| +#endif |
| + |
| |
| #ifdef Py_DEBUG |
| static int thread_debug = 0; |
| --- misc/build/Python-2.6.1/Modules/addrinfo.h 2009-05-12 01:30:32.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Modules/addrinfo.h 2009-05-12 01:34:34.000000000 +0200 |
| @@ -123,7 +123,7 @@ |
| |
| #endif /* !HAVE_GETNAMEINFO */ |
| |
| -#ifndef HAVE_ADDRINFO |
| +#if !defined(HAVE_ADDRINFO) && !defined(_WIN32) |
| struct addrinfo { |
| int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ |
| int ai_family; /* PF_xxx */ |
| @@ -136,7 +136,7 @@ |
| }; |
| #endif /* !HAVE_ADDRINFO */ |
| |
| -#ifndef HAVE_SOCKADDR_STORAGE |
| +#if !defined(HAVE_SOCKADDR_STORAGE) && !defined(_WIN32) |
| /* |
| * RFC 2553: protocol-independent placeholder for socket addresses |
| */ |
| --- misc/build/Python-2.6.1/Modules/socketmodule.c 2009-05-12 01:29:43.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Modules/socketmodule.c 2009-05-12 01:29:51.000000000 +0200 |
| @@ -3134,7 +3134,11 @@ |
| if (h->h_addrtype != af) { |
| /* Let's get real error message to return */ |
| PyErr_SetString(socket_error, |
| +#ifdef _WIN32 |
| + (char *)strerror(WSAEAFNOSUPPORT)); |
| +#else |
| (char *)strerror(EAFNOSUPPORT)); |
| +#endif |
| |
| return NULL; |
| } |
| --- misc/build/Python-2.6.1/Modules/socketmodule.h 2009-08-10 17:15:24.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Modules/socketmodule.h 2009-08-10 17:15:48.000000000 +0200 |
| @@ -21,7 +21,7 @@ |
| * I use SIO_GET_MULTICAST_FILTER to detect a decent SDK. |
| */ |
| # ifdef SIO_GET_MULTICAST_FILTER |
| -# include <MSTcpIP.h> /* for SIO_RCVALL */ |
| +# include <mstcpip.h> /* for SIO_RCVALL */ |
| # define HAVE_ADDRINFO |
| # define HAVE_SOCKADDR_STORAGE |
| # define HAVE_GETADDRINFO |