Move to a CPython-like installation layout
This commit is contained in:
parent
bc25649d52
commit
446ee50e4e
124
pypy3.9.spec
124
pypy3.9.spec
@ -124,7 +124,6 @@ URL: http://pypy.org/
|
||||
# Easy way to turn off the selftests:
|
||||
%global run_selftests 1
|
||||
|
||||
%global pypyprefix %{_libdir}/pypy%{pyversion}
|
||||
%global pylibver 3
|
||||
|
||||
# We refer to this subdir of the source tree in a few places during the build:
|
||||
@ -227,6 +226,7 @@ BuildRequires: perl-interpreter
|
||||
%endif
|
||||
|
||||
BuildRequires: /usr/bin/execstack
|
||||
BuildRequires: /usr/bin/patchelf
|
||||
|
||||
# For byte-compiling the JIT-viewing mode:
|
||||
%if %{with_emacs}
|
||||
@ -518,12 +518,47 @@ BuildPyPy \
|
||||
|
||||
|
||||
%install
|
||||
mkdir -p %{buildroot}/%{_bindir}
|
||||
mkdir -p %{buildroot}/%{pypyprefix}
|
||||
# First, run packaging script, it will prep the installation tree in builddir
|
||||
%global installation_archive_name pypy%{pyversion}-%{version_}
|
||||
%global packaging_builddir builddir
|
||||
%global packaged_prefix %{packaging_builddir}/%{installation_archive_name}
|
||||
%global soname_version 0.1
|
||||
|
||||
%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name '%{installation_archive_name}' --builddir '%{packaging_builddir}' --no-embedded-dependencies
|
||||
|
||||
# Run installing script, archive-name pypy%{pyversion} in %{buildroot}/%{_libdir} == %{pypyprefix}
|
||||
%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name pypy%{pyversion} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
|
||||
# Mangle some paths to match CPython,
|
||||
# see https://mail.python.org/pipermail/pypy-dev/2022-January/016310.html and the replies there
|
||||
# 1. remove the "python" executables, we still want CPython as the python command
|
||||
rm %{packaged_prefix}/bin/python*
|
||||
# 2. remove the "pypy" symbolic link, we still want pypy2 to be that for now
|
||||
rm %{packaged_prefix}/bin/pypy
|
||||
# 3. remove the "pypy3"symbolic link, if this is not the main pypy3
|
||||
%{!?with_main_pypy3:rm %{packaged_prefix}/bin/pypy3}
|
||||
# 4. move libpypy3.9-c.so to lib(64) and soname version it
|
||||
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_downstream_so_name_versioning
|
||||
mv %{packaged_prefix}/bin/libpypy%{pyversion}-c.so %{packaged_prefix}/%{_lib}/libpypy%{pyversion}-c.so.%{soname_version}
|
||||
ln -s libpypy%{pyversion}-c.so.%{soname_version} %{packaged_prefix}/%{_lib}/libpypy%{pyversion}-c.so
|
||||
patchelf --set-soname libpypy%{pyversion}-c.so.%{soname_version} %{packaged_prefix}/%{_lib}/libpypy%{pyversion}-c.so
|
||||
patchelf --replace-needed libpypy%{pyversion}-c.so libpypy%{pyversion}-c.so.%{soname_version} %{packaged_prefix}/bin/pypy%{pyversion}
|
||||
# 5. remove stray README
|
||||
rm %{packaged_prefix}/include/README
|
||||
# 6. copy the main LICENSE file to pypy's libdir, as does CPython
|
||||
cp -a LICENSE %{packaged_prefix}/%{_lib}/pypy%{pyversion}
|
||||
|
||||
# Create the prefix and move stuff into it
|
||||
mkdir -p %{buildroot}%{_prefix}
|
||||
mv %{packaged_prefix}/bin %{buildroot}%{_bindir}
|
||||
mv %{packaged_prefix}/include %{buildroot}%{_includedir}
|
||||
mv %{packaged_prefix}/%{_lib} %{buildroot}%{_libdir}
|
||||
|
||||
# Create directories we want to own
|
||||
install -d -m 0755 %{buildroot}%{_libdir}/pypy%{pyversion}/site-packages/__pycache__
|
||||
%if "%{_lib}" == "lib64"
|
||||
# The 64-bit version needs to create "site-packages" in /usr/lib/ (for
|
||||
# pure-Python modules) as well as in /usr/lib64/ (for packages with extension
|
||||
# modules).
|
||||
install -d -m 0755 %{buildroot}%{_prefix}/lib/pypy%{pyversion}/site-packages/__pycache__
|
||||
%endif
|
||||
|
||||
|
||||
# Remove shebang lines from .py files that aren't executable, and
|
||||
@ -542,8 +577,6 @@ find \
|
||||
\) \
|
||||
\)
|
||||
|
||||
mkdir -p %{buildroot}/%{pypyprefix}/site-packages
|
||||
|
||||
# The generated machine code doesn't need an executable stack, but
|
||||
# one of the assembler files (gcmaptable.s) doesn't have the necessary
|
||||
# metadata to inform gcc of that, and thus gcc pessimistically assumes
|
||||
@ -553,12 +586,7 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
|
||||
#
|
||||
# I tried various approaches involving fixing the build, but the simplest
|
||||
# approach is to postprocess the ELF file:
|
||||
execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
|
||||
|
||||
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
|
||||
%if %{with main_pypy3}
|
||||
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
|
||||
%endif
|
||||
execstack --clear-execstack %{buildroot}%{_bindir}/pypy%{pyversion}
|
||||
|
||||
# pypy uses .pyc files by default (--objspace-usepycfiles), but has a slightly
|
||||
# different bytecode format to CPython. It doesn't use .pyo files: the -O flag
|
||||
@ -610,31 +638,18 @@ ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
|
||||
#
|
||||
# Note that some of the test files deliberately contain syntax errors, so
|
||||
# we are running it in subshell, to be able to ignore the failures and not to terminate the build.
|
||||
(%{py_byte_compile %{buildroot}%{pypyprefix}/bin/pypy3 %{buildroot}%{pypyprefix}}) || :
|
||||
export LD_LIBRARY_PATH=%{buildroot}%{_libdir}
|
||||
(%{py_byte_compile %{buildroot}%{_bindir}/pypy%{pyversion} %{buildroot}}) || :
|
||||
|
||||
%{buildroot}%{_bindir}/pypy%{pyversion} -c 'import _tkinter'
|
||||
%{buildroot}%{_bindir}/pypy%{pyversion} -c 'import tkinter'
|
||||
%{buildroot}%{_bindir}/pypy%{pyversion} -c 'import _sqlite3'
|
||||
%{buildroot}%{_bindir}/pypy%{pyversion} -c 'import _curses'
|
||||
%{buildroot}%{_bindir}/pypy%{pyversion} -c 'import curses'
|
||||
%{buildroot}%{_bindir}/pypy%{pyversion} -c 'import syslog'
|
||||
%{buildroot}%{_bindir}/pypy%{pyversion} -c 'from _sqlite3 import *'
|
||||
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _tkinter'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import tkinter'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _sqlite3'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _curses'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import curses'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import syslog'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'from _sqlite3 import *'
|
||||
|
||||
# Header files for C extension modules.
|
||||
# Upstream's packaging process (pypy/tool/release/package.py)
|
||||
# creates an "include" subdir and copies all *.h/*.inl from "include" there
|
||||
# (it also has an apparently out-of-date comment about copying them from
|
||||
# pypy/_interfaces, but this directory doesn't seem to exist, and it doesn't
|
||||
# seem to do this as of 2011-01-13)
|
||||
|
||||
# FIXME: arguably these should be instead put into a subdir below /usr/include,
|
||||
# it's not yet clear to me how upstream plan to deal with the C extension
|
||||
# interface going forward, so let's just mimic upstream for now.
|
||||
%global pypy_include_dir %{pypyprefix}/include
|
||||
mkdir -p %{buildroot}%{pypy_include_dir}
|
||||
rm -f %{buildroot}%{pypy_include_dir}/README
|
||||
|
||||
unset LD_LIBRARY_PATH
|
||||
|
||||
# Capture the RPython source code files from the build within the debuginfo
|
||||
# package (rhbz#666975)
|
||||
@ -692,17 +707,12 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
|
||||
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
|
||||
%endif
|
||||
|
||||
# Remove files we don't want:
|
||||
rm -f %{buildroot}%{_libdir}/%{name}.tar.bz2 \
|
||||
%{buildroot}%{pypyprefix}/README.rst
|
||||
|
||||
# wtf? This is probably masking some bigger problem, but let's do this for now
|
||||
mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
|
||||
|
||||
# since 5.10.0, the debug binaries are built and shipped, making the
|
||||
# pypy3 package ~350 MiB. let's remove them here for now and TODO figure out why
|
||||
rm -f %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}.debug
|
||||
rm -f %{buildroot}%{pypyprefix}/bin/libpypy%{pyversion}-c.so.debug
|
||||
rm -f %{buildroot}%{_bindir}/*.debug
|
||||
|
||||
|
||||
%check
|
||||
@ -842,31 +852,32 @@ CheckPyPy pypy%{pyversion}-c
|
||||
|
||||
%files libs
|
||||
%doc README.rst
|
||||
%license %{_libdir}/pypy%{pyversion}/LICENSE
|
||||
%license %{_libdir}/pypy%{pyversion}/_cffi_ssl/LICENSE
|
||||
%license %{_libdir}/pypy%{pyversion}/cffi/_pycparser/ply/LICENSE
|
||||
%license %{_libdir}/pypy%{pyversion}/hpy.dist-info/LICENSE
|
||||
%{_libdir}/pypy%{pyversion}/
|
||||
%if "%{_lib}" == "lib64"
|
||||
%{_prefix}/lib/pypy%{pyversion}/
|
||||
%endif
|
||||
%{_libdir}/libpypy%{pyversion}-c.so.%{soname_version}
|
||||
|
||||
%dir %{pypyprefix}
|
||||
%license %{pypyprefix}/LICENSE
|
||||
%license %{pypyprefix}/%{_lib}/pypy%{pyversion}/_cffi_ssl/LICENSE
|
||||
%license %{pypyprefix}/%{_lib}/pypy%{pyversion}/cffi/_pycparser/ply/LICENSE
|
||||
%license %{pypyprefix}/%{_lib}/pypy%{pyversion}/hpy.dist-info/LICENSE
|
||||
%{pypyprefix}/%{_lib}/pypy%{pyversion}/
|
||||
%{pypyprefix}/site-packages/
|
||||
%if %{with_emacs}
|
||||
%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.el
|
||||
%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.elc
|
||||
%endif
|
||||
|
||||
|
||||
%files
|
||||
%doc README.rst
|
||||
%if %{with main_pypy3}
|
||||
%{_bindir}/pypy3
|
||||
%endif
|
||||
%{?with_main_pypy3:%{_bindir}/pypy3}
|
||||
%{_bindir}/pypy%{pyversion}
|
||||
%{pypyprefix}/bin/
|
||||
|
||||
|
||||
%files devel
|
||||
%dir %{pypy_include_dir}
|
||||
%dir %{pypy_include_dir}/pypy%{pyversion}
|
||||
%{pypy_include_dir}/pypy%{pyversion}/*.h
|
||||
%dir %{_includedir}/pypy%{pyversion}
|
||||
%{_includedir}/pypy%{pyversion}/*.h
|
||||
%{_libdir}/libpypy%{pyversion}-c.so
|
||||
%if %{with main_pypy3}
|
||||
%{_rpmconfigdir}/macros.d/macros.pypy3
|
||||
%endif
|
||||
@ -875,6 +886,7 @@ CheckPyPy pypy%{pyversion}-c
|
||||
%changelog
|
||||
* Wed Jan 26 2022 Miro Hrončok <mhroncok@redhat.com> - 7.3.8~rc1-1
|
||||
- Update to 7.3.8rc1
|
||||
- Move to a CPython-like installation layout
|
||||
|
||||
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 7.3.7-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
Loading…
x
Reference in New Issue
Block a user