Fix the py_byte_compile macro to work on Python 2

See https://bugzilla.redhat.com/show_bug.cgi?id=1484993

Inspired by Terje Røsten's workaround from that bugzilla

This also removes the pybytecompile macro file from the flat package because it
doesn't belong there as pointed out during the review and later forgotten.
This commit is contained in:
Miro Hrončok 2018-01-18 16:53:05 +01:00
parent f52973f5cb
commit 6a6a8d45dd
2 changed files with 26 additions and 6 deletions

View File

@ -3,8 +3,23 @@
# Python's compile_all module only works on directories, and requires a max
# recursion depth
# Note that the py_byte_compile macro should work for python2 as well
# Which unfortunately makes the definition more complicated than it should be
# The condition should be reversed once /usr/bin/python is python3!
%py_byte_compile()\
python_binary="%1"\
bytecode_compilation_path="%2"\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2], optimize=opt) for opt in range(2) for f in sys.argv[1:]]' || :\
py2_byte_compile () {\
python_binary="%1"\
bytecode_compilation_path="%2"\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :\
}\
\
py3_byte_compile () {\
python_binary="%1"\
bytecode_compilation_path="%2"\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2], optimize=opt) for opt in range(2) for f in sys.argv[1:]]' || :\
}\
\
[[ "%1" == *python3* ]] || py2_byte_compile "%1" "%2" && py3_byte_compile "%1" "%2" \
%{nil}

View File

@ -18,7 +18,7 @@ URL: https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
Release: 0.10.%{?prerel}%{?dist}
Release: 0.11.%{?prerel}%{?dist}
License: Python
@ -964,9 +964,9 @@ rm -rf %{buildroot}%{_bindir}/__pycache__
find %{buildroot} -perm 555 -exec chmod 755 {} \;
# Install macros for rpm:
%if %{without flatpackage}
mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d/
install -m 644 %{SOURCE3} %{buildroot}/%{_rpmconfigdir}/macros.d/
%if %{without flatpackage}
install -m 644 %{SOURCE9} %{buildroot}/%{_rpmconfigdir}/macros.d/
%endif
@ -1365,6 +1365,7 @@ CheckPython optimized
%{_bindir}/python3-config
%{_libdir}/pkgconfig/python3.pc
%{_rpmconfigdir}/macros.d/macros.systempython
%{_rpmconfigdir}/macros.d/macros.pybytecompile%{pybasever}
%{_bindir}/pathfix.py
%endif
@ -1374,7 +1375,6 @@ CheckPython optimized
%{_libdir}/libpython%{LDVERSION_optimized}.so
%{_libdir}/pkgconfig/python-%{LDVERSION_optimized}.pc
%{_libdir}/pkgconfig/python-%{pybasever}.pc
%{_rpmconfigdir}/macros.d/macros.pybytecompile%{pybasever}
%if %{without flatpackage}
@ -1572,6 +1572,11 @@ CheckPython optimized
# ======================================================
%changelog
* Wed Feb 21 2018 Miro Hrončok <mhroncok@redhat.com> - 3.7.0-0.11.b1
- Fix the py_byte_compile macro to work on Python 2
- Remove the pybytecompile macro file from the flat package
Resolves: rhbz#1484993
* Wed Feb 21 2018 Miro Hrončok <mhroncok@redhat.com> - 3.7.0-0.10.b1
- Filter out automatic /usr/bin/python3.X requirement,
recommend the main package from libs instead