diff --git a/macros.pybytecompile b/macros.pybytecompile new file mode 100644 index 0000000..f5439cf --- /dev/null +++ b/macros.pybytecompile @@ -0,0 +1,27 @@ +# Note that the path could itself be a python file, or a directory + +# 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 all Python versions +# Which unfortunately makes the definition more complicated than it should be + +%py_byte_compile()\ +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:]]' || :\ +}\ +\ +# Get version without a dot (36 instead of 3.6), bash doesn't compare floats well \ +python_version=$(%1 -c "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))") \ +# The bytecompilation syntax has changed between Python 3.4 and Python 3.5, so for 3.4 and earlier we use the "Python 2" syntax \ +[ "$python_version" -ge 35 ] && py3_byte_compile "%1" "%2" || py2_byte_compile "%1" "%2" \ +%{nil} diff --git a/python-rpm-macros.spec b/python-rpm-macros.spec index 72ac71e..36b5a6a 100644 --- a/python-rpm-macros.spec +++ b/python-rpm-macros.spec @@ -1,6 +1,6 @@ Name: python-rpm-macros Version: 3 -Release: 21%{?dist} +Release: 22%{?dist} Summary: The unversioned Python RPM macros License: MIT @@ -9,6 +9,7 @@ Source1: macros.python-srpm Source2: macros.python2 Source3: macros.python3 Source4: macros.python3_other +Source5: macros.pybytecompile BuildArch: noarch # For %%python3_pkgversion used in %%python_provide @@ -46,12 +47,13 @@ RPM macros for building Python 3 packages. %install mkdir -p %{buildroot}/%{rpmmacrodir} -install -m 644 %{SOURCE0} %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE4} \ +install -m 644 %{SOURCE0} %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} \ %{buildroot}/%{rpmmacrodir}/ %files %{rpmmacrodir}/macros.python +%{rpmmacrodir}/macros.pybytecompile %files -n python-srpm-macros %{rpmmacrodir}/macros.python-srpm @@ -65,6 +67,11 @@ install -m 644 %{SOURCE0} %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE4} \ %changelog +* Sat Jul 14 2018 Tomas Orsava - 3-22 +- Move macros.pybytecompile in here from python3X-devel +- macros.pybytecompile: Detect Python version through sys.version_info instead + of guessing from the executable name + * Mon Jul 09 2018 Jason L Tibbitts III - 3-21 - Backport %%python3_platform and add %%python3_other_platform.