From 6335a7ff4a6d497d7d4a0427bb681c59ca3b7aa8 Mon Sep 17 00:00:00 2001 From: Lumir Balhar Date: Tue, 5 Nov 2019 09:40:12 +0100 Subject: [PATCH] Fix brp-python-bytecompile with the new features from compileall2 Resolves: rhbz#1595265 The problem this change is intended to solve is with how `real_libdir` is calculated. Let's assume we want to recursively byte-compile all `*.py` files in `/builddir/build/BUILDROOT/python-scales-1.0.9-250.fc32.x86_64/usr/lib/python3.8`. Then, `real_libdir` is this path without `$RPM_BUILD_ROOT` with the filename at the end which displays in the error message like this: ``` Bytecompiling .py files below /builddir/build/BUILDROOT/python-scales-1.0.9-250.fc32.x86_64/usr/lib/python3.8 using /usr/bin/python3.8 *** Error compiling '/builddir/build/BUILDROOT/python-scales-1.0.9-250.fc32.x86_64/usr/lib/python3.8/site-packages/greplin/bar.py'... File "/usr/lib/python3.8/bar.py", line 1 import sin from math ^ SyntaxError: invalid syntax ``` `/usr/lib/python3.8/bar.py` is obviously wrong. One of the new features of the `compileall2` module (which will be available in stdlib in Python 3.9) is that the path byte-compiled to `*.pyc` files is calculated for each file. This means that by using `-s` and `-p` we can strip `$RPM_BUILD_ROOT` and prepend `/` for each file individually which will fix the problem. ``` Bytecompiling .py files below /builddir/build/BUILDROOT/python-scales-1.0.9-250.fc32.x86_64/usr/lib/python3.8 using /usr/bin/python3.8 *** Error compiling '/builddir/build/BUILDROOT/python-scales-1.0.9-250.fc32.x86_64/usr/lib/python3.8/site-packages/greplin/bar.py'... File "/usr/lib/python3.8/site-packages/greplin/bar.py", line 1 import sin from math ^ SyntaxError: invalid syntax ``` This change has an effect only for Python >= 3.4. --- brp-python-bytecompile | 8 +++++--- redhat-rpm-config.spec | 6 +++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/brp-python-bytecompile b/brp-python-bytecompile index fee0048..ede435b 100755 --- a/brp-python-bytecompile +++ b/brp-python-bytecompile @@ -29,8 +29,8 @@ function python_bytecompile() local python_binary=$2 local exclude=$3 local python_libdir=$4 - local depth=$5 - local real_libdir=$6 + local depth=$5 # Not used for Python >= 3.4 + local real_libdir=$6 # Not used for Python >= 3.4 python_version=$($python_binary -c "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))") @@ -46,7 +46,9 @@ function python_bytecompile() # -x excludes paths defined by regex # -e excludes symbolic links pointing outside the build root # -x and -e together implements the same functionality as the Filter class below - PYTHONPATH=/usr/lib/rpm/redhat/ $python_binary $options -m compileall2 -q -f $exclude -d $real_libdir -e $RPM_BUILD_ROOT $python_libdir + # -s strips $RPM_BUILD_ROOT from the path + # -p prepends the leading slash to the path to make it absolute + PYTHONPATH=/usr/lib/rpm/redhat/ $python_binary $options -m compileall2 -q -f $exclude -s $RPM_BUILD_ROOT -p / -e $RPM_BUILD_ROOT $python_libdir else # # Python 3.3 and lower (incl. Python 2) diff --git a/redhat-rpm-config.spec b/redhat-rpm-config.spec index 7d46fc6..832f7c5 100644 --- a/redhat-rpm-config.spec +++ b/redhat-rpm-config.spec @@ -6,7 +6,7 @@ Summary: Red Hat specific rpm configuration files Name: redhat-rpm-config -Version: 142 +Version: 143 Release: 1%{?dist} # No version specified. License: GPL+ @@ -207,6 +207,10 @@ install -p -m 644 -t %{buildroot}%{_rpmluadir}/fedora/srpm forge.lua %{_rpmconfigdir}/macros.d/macros.kmp %changelog +* Tue Nov 05 2019 Lumír Balhar - 143-1 +- Fix brp-python-bytecompile with the new features from compileall2 +- Resolves: rhbz#1595265 + * Fri Nov 01 2019 Miro Hrončok - 142-1 - Fix the simple API of %%gpgverify.