Blame mingw-python2.spec

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