%{?mingw_package_header} %global pkgname python2 %global py_ver 2.7 %define mingw32_py2_libdir %{mingw32_libdir}/python%{py_ver} %define mingw64_py2_libdir %{mingw64_libdir}/python%{py_ver} %define mingw32_py2_hostlibdir %{_prefix}/%{mingw32_target}/lib/python%{py_ver} %define mingw64_py2_hostlibdir %{_prefix}/%{mingw64_target}/lib/python%{py_ver} %define mingw32_py2_incdir %{mingw32_includedir}/python%{py_ver} %define mingw64_py2_incdir %{mingw64_includedir}/python%{py_ver} %define mingw32_python2_sitearch %{mingw32_libdir}/python%{py_ver}/site-packages %define mingw64_python2_sitearch %{mingw64_libdir}/python%{py_ver}/site-packages # Some of the files below /usr/lib/pythonMAJOR.MINOR/test (e.g. bad_coding.py) # are deliberately invalid, leading to SyntaxError exceptions if they get # byte-compiled. %global _python_bytecompile_errors_terminate_build 0 Name: mingw-%{pkgname} Version: 2.7.14 Release: 2%{?dist} Summary: MinGW Windows %{pkgname} BuildArch: noarch License: Python URL: https://www.python.org/ Source0: http://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz ## From https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-python2 # Ray Donnelly's should-be-upstreamed patches Patch0: 0000-make-_sysconfigdata.py-relocatable.patch Patch1: 0001-fix-_nt_quote_args-using-subprocess-list2cmdline.patch # Roumen Petrov's core patches Patch2: 0100-MINGW-BASE-use-NT-thread-model.patch Patch3: 0110-MINGW-translate-gcc-internal-defines-to-python-platf.patch Patch4: 0120-MINGW-use-header-in-lowercase.patch Patch5: 0130-MINGW-configure-MACHDEP-and-platform-for-build.patch Patch6: 0140-MINGW-preset-configure-defaults.patch Patch7: 0150-MINGW-configure-largefile-support-for-windows-builds.patch Patch8: 0160-MINGW-add-wincrypt.h-in-Python-random.c.patch Patch9: 0180-MINGW-init-system-calls.patch Patch10: 0190-MINGW-detect-REPARSE_DATA_BUFFER.patch Patch11: 0200-MINGW-build-in-windows-modules-winreg.patch Patch12: 0210-MINGW-determine-if-pwdmodule-should-be-used.patch Patch13: 0220-MINGW-default-sys.path-calculations-for-windows-plat.patch Patch14: 0230-MINGW-AC_LIBOBJ-replacement-of-fileblocks.patch # Roumen Petrov's compiler patch Patch15: 0250-MINGW-compiler-customize-mingw-cygwin-compilers.patch # Roumen Petrov's extensions patches Patch16: 0270-CYGWIN-issue13756-Python-make-fail-on-cygwin.patch Patch17: 0290-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch Patch18: 0300-MINGW-configure-for-shared-build.patch Patch19: 0310-MINGW-dynamic-loading-support.patch Patch20: 0320-MINGW-implement-exec-prefix.patch Patch21: 0330-MINGW-ignore-main-program-for-frozen-scripts.patch Patch22: 0340-MINGW-setup-exclude-termios-module.patch Patch23: 0350-MINGW-setup-_multiprocessing-module.patch Patch24: 0360-MINGW-setup-select-module.patch Patch25: 0370-MINGW-setup-_ctypes-module-with-system-libffi.patch Patch26: 0380-MINGW-defect-winsock2-and-setup-_socket-module.patch Patch27: 0390-MINGW-exclude-unix-only-modules.patch Patch28: 0400-MINGW-setup-msvcrt-module.patch Patch29: 0410-MINGW-build-extensions-with-GCC.patch Patch30: 0420-MINGW-use-Mingw32CCompiler-as-default-compiler-for-m.patch Patch31: 0430-MINGW-find-import-library.patch Patch32: 0440-MINGW-setup-_ssl-module.patch Patch33: 0460-MINGW-generalization-of-posix-build-in-sysconfig.py.patch Patch34: 0462-MINGW-support-stdcall-without-underscore.patch Patch35: 0480-MINGW-generalization-of-posix-build-in-distutils-sys.patch Patch36: 0490-MINGW-customize-site.patch # Ray Donnelly's general/cross patches Patch37: 0500-add-python-config-sh.patch Patch38: 0510-cross-darwin-feature.patch Patch39: 0520-py3k-mingw-ntthreads-vs-pthreads.patch Patch40: 0530-mingw-system-libffi.patch Patch41: 0540-mingw-semicolon-DELIM.patch Patch42: 0550-mingw-regen-use-stddef_h.patch Patch43: 0560-mingw-use-posix-getpath.patch Patch44: 0565-mingw-add-ModuleFileName-dir-to-PATH.patch Patch45: 0570-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch Patch46: 0580-mingw32-test-REPARSE_DATA_BUFFER.patch Patch47: 0590-mingw-INSTALL_SHARED-LDLIBRARY-LIBPL.patch Patch48: 0600-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch Patch49: 0610-msys-cygwin-semi-native-build-sysconfig.patch Patch50: 0620-mingw-sysconfig-like-posix.patch Patch51: 0630-mingw-_winapi_as_builtin_for_Popen_in_cygwinccompiler.patch Patch52: 0640-mingw-x86_64-size_t-format-specifier-pid_t.patch Patch53: 0650-cross-dont-add-multiarch-paths-if-cross-compiling.patch Patch54: 0660-mingw-use-backslashes-in-compileall-py.patch Patch55: 0670-msys-convert_path-fix-and-root-hack.patch Patch56: 0690-allow-static-tcltk.patch Patch57: 0710-CROSS-properly-detect-WINDOW-_flags-for-different-nc.patch Patch58: 0720-mingw-pdcurses_ISPAD.patch Patch59: 0740-grammar-fixes.patch Patch60: 0750-Add-interp-Python-DESTSHARED-to-PYTHONPATH-b4-pybuilddir-txt-dir.patch Patch61: 0760-msys-monkeypatch-os-system-via-sh-exe.patch Patch62: 0770-msys-replace-slashes-used-in-io-redirection.patch Patch63: 0790-mingw-add-_exec_prefix-for-tcltk-dlls.patch Patch64: 0800-mingw-install-layout-as-posix.patch Patch65: 0820-mingw-reorder-bininstall-ln-symlink-creation.patch Patch66: 0830-add-build-sysroot-config-option.patch Patch67: 0840-add-builddir-to-library_dirs.patch Patch68: 0845-Remove-compiler-lib-dirs-from-extension-lib-dirs.patch Patch69: 0850-cross-PYTHON_FOR_BUILD-gteq-276-and-fullpath-it.patch Patch70: 0855-mingw-fix-ssl-dont-use-enum_certificates.patch Patch71: 0860-mingw-build-optimized-ext.patch Patch72: 0870-mingw-add-LIBPL-to-library-dirs.patch Patch73: 0910-fix-using-dllhandle-and-winver-mingw.patch Patch74: 0970-Add-AMD64-to-sys-config-so-msvccompiler-get_build_version-works.patch Patch75: 0980-mingw-readline-features-skip.patch # Alexey Pavlov's mingw-w64 patches Patch76: 1000-dont-link-with-gettext.patch Patch77: 1010-ctypes-python-dll.patch Patch78: 1020-gdbm-module-includes.patch Patch79: 1030-use-gnu_printf-in-format.patch Patch80: 1040-install-msilib.patch Patch81: 1050-skip-add-db-includes-for-win.patch # Renato Silva's patch to distutils Patch82: 2000-distutils-add-windmc-to-cygwinccompiler.patch Patch83: 2700-cygpty-isatty-disable-readline.patch # Own patches: # Fix FTBFS due to missing libs Patch84: 3000-scoketmodule-libs.patch # Also build the winreg module, adapted from https://bugs.python.org/issue17600 #Patch85: 3001-mingw-winreg.patch # Fix PYFORMAT_LONG_LONG not defined, caused by configure test failing due to use of uninitialized variable Patch86: 3002-pyformat_long_long.patch BuildRequires: automake autoconf libtool BuildRequires: python2-devel BuildRequires: mingw32-filesystem >= 102 BuildRequires: mingw32-gcc # Needed for correct value of CXX in _sysconfigdata.py BuildRequires: mingw32-gcc-c++ BuildRequires: mingw32-bzip2 BuildRequires: mingw32-dlfcn BuildRequires: mingw32-expat BuildRequires: mingw32-libffi BuildRequires: mingw32-openssl BuildRequires: mingw32-readline BuildRequires: mingw32-tcl BuildRequires: mingw32-tk BuildRequires: mingw32-zlib BuildRequires: mingw64-filesystem >= 102 BuildRequires: mingw64-gcc # Needed for correct value of CXX in _sysconfigdata.py BuildRequires: mingw64-gcc-c++ BuildRequires: mingw64-bzip2 BuildRequires: mingw64-dlfcn BuildRequires: mingw64-expat BuildRequires: mingw64-libffi BuildRequires: mingw64-openssl BuildRequires: mingw64-readline BuildRequires: mingw64-tcl BuildRequires: mingw64-tk BuildRequires: mingw64-zlib %description MinGW Windows %{pkgname} library. %package -n mingw32-%{pkgname} Summary: MinGW Windows %{pkgname} library Requires: python2 %description -n mingw32-%{pkgname} MinGW Windows %{pkgname} library. %package -n mingw64-%{pkgname} Summary: MinGW Windows %{pkgname} library Requires: python2 %description -n mingw64-%{pkgname} MinGW Windows %{pkgname} library. %{?mingw_debug_package} %prep %setup -q -n Python-%{version} # these are created by patches rm -f Misc/config_mingw \ Misc/cross_mingw32 \ Misc/python-config.sh.in \ Misc/cross_mingw32 \ Misc/python-config-u.sh.in \ Python/fileblocks.c \ Lib/list2cmdline.py %patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 %patch6 -p1 %patch7 -p1 %patch8 -p1 %patch9 -p1 %patch10 -p1 %patch11 -p1 %patch12 -p1 %patch13 -p1 %patch14 -p1 %patch15 -p1 %patch16 -p1 %patch17 -p1 %patch18 -p1 %patch19 -p1 %patch20 -p1 %patch21 -p1 %patch22 -p1 %patch23 -p1 %patch24 -p1 %patch25 -p1 %patch26 -p1 %patch27 -p1 %patch28 -p1 %patch29 -p1 %patch30 -p1 %patch31 -p1 %patch32 -p1 %patch33 -p1 %patch34 -p1 %patch35 -p1 %patch36 -p1 %patch37 -p1 %patch38 -p1 %patch39 -p1 %patch40 -p1 %patch41 -p1 %patch42 -p1 %patch43 -p1 %patch44 -p1 %patch45 -p1 %patch46 -p1 %patch47 -p1 %patch48 -p1 %patch49 -p1 %patch50 -p1 %patch51 -p1 %patch52 -p1 %patch53 -p1 %patch54 -p1 %patch55 -p1 %patch56 -p1 %patch57 -p1 %patch58 -p1 %patch59 -p1 %patch60 -p1 %patch61 -p1 %patch62 -p1 %patch63 -p1 %patch64 -p1 %patch65 -p1 %patch66 -p1 %patch67 -p1 %patch68 -p1 %patch69 -p1 %patch70 -p1 %patch71 -p1 %patch72 -p1 %patch73 -p1 %patch74 -p1 %patch75 -p1 %patch76 -p1 %patch77 -p1 %patch78 -p1 %patch79 -p1 %patch80 -p1 %patch81 -p1 %patch82 -p1 %patch83 -p1 %patch84 -p1 #patch85 -p1 %patch86 -p1 autoreconf -vfi # Temporary workaround for FS#22322 # See https://bugs.python.org/issue10835 for upstream report #sed -i "/progname =/s/python/python${_pybasever}/" Python/pythonrun.c # Enable built-in SQLite module to load extensions (fix FS#22122) sed -i "/SQLITE_OMIT_LOAD_EXTENSION/d" setup.py # FS#23997 sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/env python2|" Lib/cgi.py sed -i "s/python2.3/python2/g" Lib/distutils/tests/test_build_scripts.py Lib/distutils/tests/test_install_scripts.py Tools/scripts/gprof2html.py touch Include/graminit.h touch Python/graminit.c touch Parser/Python.asdl touch Parser/asdl.py touch Parser/asdl_c.py touch Include/Python-ast.h touch Python/Python-ast.c echo \"\" > Parser/pgen.stamp # Ensure that we are using the system copy of various libraries (expat, zlib and libffi), # rather than copies shipped in the tarball rm -r Modules/expat rm -r Modules/zlib rm -r Modules/_ctypes/{darwin,libffi}* # An include which is otherwise not found (cd Include && ln -s ../PC/errmap.h) %build mkdir build_win32 ( cd build_win32 export OPT="%mingw32_cflags -D_GNU_SOURCE -fwrapv -D__USE_MINGW_ANSI_STDIO=1" export CXXFLAGS="$OPT" export CFLAGS="$OPT `mingw32-pkg-config --cflags openssl`" export LDFLAGS="%{mingw32_ldflags}" export LDFLAGS="$LDFLAGS `mingw32-pkg-config --libs-only-L openssl`" export CC="%{mingw32_cc}" export LINKCC="%{mingw32_cc}" export LIBFFI_INCLUDEDIR=`mingw32-pkg-config libffi --cflags-only-I | sed "s|\-I||g"` # Workaround for conftest error on 64-bit builds # export ac_cv_working_tzset=no MSYSTEM=MINGW %mingw32_configure \ --enable-shared \ --with-threads \ --with-system-expat \ --with-system-ffi #--with-dbmliborder='gdbm:ndbm' %mingw32_make %{?_smp_mflags} EXTRA_CFLAGS="$CFLAGS" ) mkdir build_win64 ( cd build_win64 export OPT="%mingw64_cflags -D_GNU_SOURCE -fwrapv -D__USE_MINGW_ANSI_STDIO=1" export CXXFLAGS="$OPT" export CFLAGS="$OPT `mingw64-pkg-config --cflags openssl`" export LDFLAGS="%{mingw64_ldflags}" export LDFLAGS="$LDFLAGS `mingw64-pkg-config --libs-only-L openssl`" export CC="%{mingw64_cc}" export LINKCC="%{mingw64_cc}" export LIBFFI_INCLUDEDIR=`mingw64-pkg-config libffi --cflags-only-I | sed "s|\-I||g"` # Workaround for conftest error on 64-bit builds # export ac_cv_working_tzset=no MSYSTEM=MINGW %mingw64_configure \ --enable-shared \ --with-threads \ --with-system-expat \ --with-system-ffi #--with-dbmliborder='gdbm:ndbm' %mingw64_make %{?_smp_mflags} EXTRA_CFLAGS="$CFLAGS" ) %install %mingw32_make -C build_win32 DESTDIR=%{buildroot} install %mingw64_make -C build_win64 DESTDIR=%{buildroot} install mv %{buildroot}%{mingw32_bindir}/smtpd.py %{buildroot}%{mingw32_py2_libdir}/ mv %{buildroot}%{mingw64_bindir}/smtpd.py %{buildroot}%{mingw64_py2_libdir}/ # Link static and import library to correct location ln -s %{mingw32_py2_libdir}/config/libpython%{py_ver}.dll.a %{buildroot}%{mingw32_libdir}/libpython%{py_ver}.dll.a ln -s %{mingw64_py2_libdir}/config/libpython%{py_ver}.dll.a %{buildroot}%{mingw64_libdir}/libpython%{py_ver}.dll.a ln -s %{mingw32_py2_libdir}/config/libpython%{py_ver}.a %{buildroot}%{mingw32_libdir}/libpython%{py_ver}.a ln -s %{mingw64_py2_libdir}/config/libpython%{py_ver}.a %{buildroot}%{mingw64_libdir}/libpython%{py_ver}.a # Copy some useful "stuff" install -dm755 %{buildroot}%{mingw32_py2_libdir}/Tools/{i18n,scripts} install -dm755 %{buildroot}%{mingw64_py2_libdir}/Tools/{i18n,scripts} install -pm755 Tools/i18n/{msgfmt,pygettext}.py %{buildroot}%{mingw32_py2_libdir}/Tools/i18n/ install -pm755 Tools/i18n/{msgfmt,pygettext}.py %{buildroot}%{mingw64_py2_libdir}/Tools/i18n/ install -pm755 Tools/scripts/{README,*py} %{buildroot}%{mingw32_py2_libdir}/Tools/scripts/ install -pm755 Tools/scripts/{README,*py} %{buildroot}%{mingw64_py2_libdir}/Tools/scripts/ # Cleanup shebangs find %{buildroot}%{mingw32_py2_libdir}/ -name '*.py' | xargs sed -i "s|#[ ]*![ ]*/usr/bin/env python$|#!/usr/bin/python2|" find %{buildroot}%{mingw64_py2_libdir}/ -name '*.py' | xargs sed -i "s|#[ ]*![ ]*/usr/bin/env python$|#!/usr/bin/python2|" # Fix shebangs referencing full mingw prefix for file in 2to3 idle pydoc python%{py_ver}-config; do sed -i "s|%{mingw32_bindir}/python%{py_ver}.exe|/usr/bin/python2|g" %{buildroot}%{mingw32_bindir}/$file sed -i "s|%{mingw64_bindir}/python%{py_ver}.exe|/usr/bin/python2|g" %{buildroot}%{mingw64_bindir}/$file done sed -i "s|%{mingw32_bindir}/python%{py_ver}.exe|/usr/bin/python2|g" %{buildroot}%{mingw32_py2_libdir}/smtpd.py sed -i "s|%{mingw64_bindir}/python%{py_ver}.exe|/usr/bin/python2|g" %{buildroot}%{mingw64_py2_libdir}/smtpd.py # Clean-up references to build directory for file in config/Makefile _sysconfigdata.py; do sed -i "s|%{_builddir}|/build|g" %{buildroot}%{mingw32_py2_libdir}/$file sed -i "s|%{_builddir}|/build|g" %{buildroot}%{mingw64_py2_libdir}/$file done # Fix permissons find %{buildroot} -type f | xargs chmod 0644 find %{buildroot} -type f \( -name "*.dll" -o -name "*.exe" \) | xargs chmod 0755 # Create python executable with windows subsystem cp -a %{buildroot}%{mingw32_bindir}/python2.exe %{buildroot}%{mingw32_bindir}/python2w.exe cp -a %{buildroot}%{mingw64_bindir}/python2.exe %{buildroot}%{mingw64_bindir}/python2w.exe %{mingw32_objcopy} --subsystem windows %{buildroot}%{mingw32_bindir}/python2w.exe %{mingw64_objcopy} --subsystem windows %{buildroot}%{mingw64_bindir}/python2w.exe # Don't ship manpages rm -rf %{buildroot}%{mingw32_mandir} rm -rf %{buildroot}%{mingw64_mandir} rmdir %{buildroot}%{mingw32_datadir} rmdir %{buildroot}%{mingw64_datadir} # Mingw python host wrappers mkdir -p %{buildroot}%{_bindir} mkdir -p %{buildroot}%{_prefix}/%{mingw32_target}/bin/ mkdir -p %{buildroot}%{_prefix}/%{mingw64_target}/bin/ cat > %{buildroot}%{_prefix}/%{mingw32_target}/bin/python2 < %{buildroot}%{_prefix}/%{mingw64_target}/bin/python2 < %{buildroot}%{mingw32_py2_hostlibdir}/distutils/sysconfig.py < %{buildroot}%{mingw64_py2_hostlibdir}/distutils/sysconfig.py < %{buildroot}%{_rpmconfigdir}/macros.d/macros.mingw32-python < %{buildroot}%{_rpmconfigdir}/macros.d/macros.mingw64-python < mingw32-%{pkgname}.debugfiles find %{buildroot}%{mingw64_prefix} | grep -E '.(exe|dll|pyd)$' | sed 's|^%{buildroot}\(.*\)$|%%exclude \1.debug|' > mingw64-%{pkgname}.debugfiles %files -n mingw32-%{pkgname} -f mingw32-%{pkgname}.debugfiles %license LICENSE %{_bindir}/mingw32-python %{_bindir}/mingw32-python2 %{_rpmconfigdir}/macros.d/macros.mingw32-python %{_prefix}/%{mingw32_target}/bin/python2 %{mingw32_py2_hostlibdir}/ %{mingw32_bindir}/*.exe %{mingw32_bindir}/2to3 %{mingw32_bindir}/idle %{mingw32_bindir}/pydoc %{mingw32_bindir}/python-config %{mingw32_bindir}/python-config-u.sh %{mingw32_bindir}/python-config.sh %{mingw32_bindir}/python2-config %{mingw32_bindir}/python%{py_ver}-config %{mingw32_bindir}/libpython%{py_ver}.dll %{mingw32_py2_incdir}/ %{mingw32_libdir}/libpython%{py_ver}.dll.a %{mingw32_libdir}/libpython%{py_ver}.a %{mingw32_py2_libdir}/ %{mingw32_libdir}/pkgconfig/*.pc %files -n mingw64-%{pkgname} -f mingw64-%{pkgname}.debugfiles %license LICENSE %{_bindir}/mingw64-python %{_bindir}/mingw64-python2 %{_rpmconfigdir}/macros.d/macros.mingw64-python %{_prefix}/%{mingw64_target}/bin/python2 %{mingw64_py2_hostlibdir}/ %{mingw64_bindir}/*.exe %{mingw64_bindir}/2to3 %{mingw64_bindir}/idle %{mingw64_bindir}/pydoc %{mingw64_bindir}/python-config %{mingw64_bindir}/python-config-u.sh %{mingw64_bindir}/python-config.sh %{mingw64_bindir}/python2-config %{mingw64_bindir}/python%{py_ver}-config %{mingw64_bindir}/libpython%{py_ver}.dll %{mingw64_py2_incdir}/ %{mingw64_libdir}/libpython%{py_ver}.dll.a %{mingw64_libdir}/libpython%{py_ver}.a %{mingw64_py2_libdir}/ %{mingw64_libdir}/pkgconfig/*.pc %changelog * Sun Nov 05 2017 Sandro Mani - 2.7.14-2 - Fix PYFORMAT_LONG_LONG not defined * Tue Oct 31 2017 Sandro Mani - 2.7.14-1 - Update to 2.7.14 * Thu Sep 28 2017 Sandro Mani - 2.7.13-12 - Also build the winreg module * Tue Sep 19 2017 Sandro Mani - 2.7.13-11 - Rebuild (mingw-binutils) * Mon Sep 18 2017 Sandro Mani - 2.7.13-10 - Fix potential endless recursion in mingw-python wrapper scripts * Sat Sep 09 2017 Sandro Mani - 2.7.13-9 - Rebuild (mingw-filesystem) * Thu Sep 07 2017 Sandro Mani - 2.7.13-8 - Use is_cygpty() to detect a terminal; disable readline with a real Windows console - Dynamically determine native lib-dynload location and add it to path in mingw-python wrappers * Sun Sep 03 2017 Sandro Mani - 2.7.13-7 - BR: mingw{32,64}-gcc-c++ to fix CXX in _sysconfigdata.py * Fri Sep 01 2017 Sandro Mani - 2.7.13-6 - Link lib-dynload from native package * Fri Sep 01 2017 Sandro Mani - 2.7.13-5 - Release bump * Fri Sep 01 2017 Sandro Mani - 2.7.13-4 - Fix mingw-python wrappers - Add mingw_python2 macros * Thu Aug 31 2017 Sandro Mani - 2.7.13-3 - Set PYTHONHOME in mingw-python wrappers * Thu Aug 24 2017 Sandro Mani - 2.7.13-2 - Add missing distutils/command symlink to hostlibs - Add py2_libdir to PYTHONPATH in mingw-python wrappers * Sat Jan 21 2017 Sandro Mani - 2.7.13-1 - Initial package