Relocate python3.8 out of PATH, add script to fix shebangs

This commit is contained in:
Mikhail Novosyolov 2020-06-01 00:29:53 +03:00
parent 9eade514f9
commit 301d2a8488
3 changed files with 38 additions and 10 deletions

View file

@ -0,0 +1,13 @@
#!/bin/sh
set -efu
find "$RPM_BUILD_ROOT" -type f -print | while read -r line ; do
if file "$line" | grep -q ELF ; then continue ; fi
if head -n 1 "$line" | grep -qE '([[:blank:]])*#([[:blank:]])*\!([[:blank:]])*.*python3' ; then
sed -i -e '1s,python3,python3.8,g' -e '1s,python3.8.8,python3.8,g' "$line"
sed -E -i "$line" \
-e '1s,([[:blank:]])*#([[:blank:]])*\!([[:blank:]])*/usr/bin/env([[:blank:]])*python3.8,#!/usr/libexec/python3.8,g' \
-e '1s,([[:blank:]])*#([[:blank:]])*\!([[:blank:]])*/usr/bin/python3.8,#!/usr/libexec/python3.8,g'
fi
done

View file

@ -1,4 +1,5 @@
%__python38 /usr/bin/python3.8 %__python38 /usr/libexec/python3.8
%python38_sitelib %(%{__python38} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") %python38_sitelib %(%{__python38} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%python38_sitearch %(%{__python38} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))") %python38_sitearch %(%{__python38} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
%python38_version %(%{__python38} -c "import sys; print(sys.version[0:3])") %python38_version %(%{__python38} -c "import sys; print(sys.version[0:3])")
@ -23,3 +24,6 @@ CFLAGS="%{optflags}" %{__python38} %{py_setup} %{?py_setup_args} install -O1 --s
%py38_test() %{expand:\ %py38_test() %{expand:\
%{__python38} %{py_setup} %{?py_setup_args} test %{?1}\ %{__python38} %{py_setup} %{?py_setup_args} test %{?1}\
} }
%py38_shebang_sanity %{_bindir}/python38-shebang-sanity
%py38_ss %py38_shebang_sanity

View file

@ -31,6 +31,9 @@
%define sub_ver %{familyver} %define sub_ver %{familyver}
%endif %endif
# one dir for rpm4/5
%global _libexecdir /usr/libexec
########################################### ###########################################
# We want to byte-compile the .py files within the packages using the new # We want to byte-compile the .py files within the packages using the new
@ -51,7 +54,7 @@
Summary: An interpreted, interactive object-oriented programming language Summary: An interpreted, interactive object-oriented programming language
Name: %{py3_name} Name: %{py3_name}
Version: 3.8.2 Version: 3.8.2
Release: 4 Release: 5
License: Modified CNRI Open Source License License: Modified CNRI Open Source License
Group: Development/Python Group: Development/Python
@ -59,6 +62,7 @@ Source0: https://www.python.org/ftp/python/%{version}/Python-%{version}.
Source1: https://docs.python.org/3/archives/python-%{docver}-docs-html.tar.bz2 Source1: https://docs.python.org/3/archives/python-%{docver}-docs-html.tar.bz2
Source2: python38.macros Source2: python38.macros
Source3: pybytecompile.macros Source3: pybytecompile.macros
Source4: python38-shebang-sanity.sh
Source100: python38.rpmlintrc Source100: python38.rpmlintrc
# 00001 # # 00001 #
@ -407,9 +411,19 @@ ln -s python3-config %{buildroot}%{_bindir}/python-config
cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/ cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
%if %{with py38} %if %{with py38}
install -m0755 %{SOURCE4} %{buildroot}%{_bindir}/python38-shebang-sanity
mv %{buildroot}%{_bindir}/pynche3 \ mv %{buildroot}%{_bindir}/pynche3 \
%{buildroot}%{_bindir}/pynche%{sub_ver} %{buildroot}%{_bindir}/pynche%{sub_ver}
# Build scripts of many packages try to use the highest version of Python that they find
# That is why we have to relocate python3.8 out of $PATH
mkdir -p %{buildroot}%{_libexecdir}
mv %{buildroot}%{_bindir}/python3.8 %{buildroot}%{_libexecdir}/python3.8
# Temporary compat symlink untill all packages are fixed
( cd %{buildroot}%{_bindir} ; ln -s ../libexec/python3.8 python3.8 )
# Remove shebang lines from .py files that aren't executable, and # Remove shebang lines from .py files that aren't executable, and
# remove executability from .py files that don't have a shebang line: # remove executability from .py files that don't have a shebang line:
find %{buildroot} -name \*.py \ find %{buildroot} -name \*.py \
@ -419,13 +433,7 @@ find %{buildroot} -name \*.py \
-exec chmod a-x {} \; \) \) -exec chmod a-x {} \; \) \)
########## shebang py3 > py3.8 ################## ########## shebang py3 > py3.8 ##################
sh %{SOURCE4}
find %{buildroot} -type f -print | while read -r line ; do
if file "$line" | grep -q ELF ; then continue ; fi
if head -n 1 "$line" | grep -v python3.8 | grep -q python3 ; then
sed -i -e '1s,python3,python3.8,g' "$line"
fi
done
# When packaging a not system version of Python, these files are named like e.g. 2to3-3.8 # When packaging a not system version of Python, these files are named like e.g. 2to3-3.8
# These files must not be packaged to avoid conflicts with system python3 # These files must not be packaged to avoid conflicts with system python3
@ -515,6 +523,9 @@ export TMP="/tmp" TMPDIR="/tmp"
%if %{with valgrind} %if %{with valgrind}
%{_libdir}/valgrind/valgrind-python3.supp %{_libdir}/valgrind/valgrind-python3.supp
%endif %endif
%if %{with py38}
%{_libexecdir}/python3*
%endif
%files -n %{lib_name} %files -n %{lib_name}
%{_libdir}/libpython*.so.1* %{_libdir}/libpython*.so.1*