From 6a6a8d45dde27e4c29d133fa3956d14f8593ec61 Mon Sep 17 00:00:00 2001 From: Miro Hrončok Date: Feb 28 2018 08:48:35 +0000 Subject: 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. --- diff --git a/macros.pybytecompile3.7 b/macros.pybytecompile3.7 index 3968c6e..f319979 100644 --- a/macros.pybytecompile3.7 +++ b/macros.pybytecompile3.7 @@ -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} diff --git a/python37.spec b/python37.spec index fda232b..85b9e06 100644 --- a/python37.spec +++ b/python37.spec @@ -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 - 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 - 3.7.0-0.10.b1 - Filter out automatic /usr/bin/python3.X requirement, recommend the main package from libs instead