diff --git a/python36.spec b/python36.spec index db47bfb..83b6949 100644 --- a/python36.spec +++ b/python36.spec @@ -25,7 +25,7 @@ Name: python36 Version: %{pybasever}.6 -Release: 13.buildroot%{?dist} +Release: 14.buildroot%{?dist} Summary: Interpreter of the Python programming language License: Python @@ -66,6 +66,11 @@ Obsoletes: python3 < 3.6.6-13 Requires: %{_libexecdir}/platform-python +# Require alternatives version that implements the --keep-foreign flag +Requires: alternatives >= 1.19.2-1 +Requires(post): alternatives >= 1.19.2-1 +Requires(postun): alternatives >= 1.19.2-1 + %global _description \ Python is an accessible, high-level, dynamically typed, interpreted programming\ language, designed with an emphasis on code readibility.\ @@ -90,6 +95,12 @@ Summary: Libraries and header files needed for Python development Requires: python36 Requires: platform-python-devel +# Require alternatives version that implements the --keep-foreign flag +Requires(postun): alternatives >= 1.19.2-1 +# python36 installs the alternatives master symlink to which we attach a slave +Requires(post): python36 +Requires(postun): python36 + %description devel This package contains the header files and configuration needed to compile Python extension modules (typically written in C or C++), to embed Python @@ -108,6 +119,12 @@ Requires: python36 Requires: python36-devel Requires: platform-python-debug +# Require alternatives version that implements the --keep-foreign flag +Requires(postun): alternatives >= 1.19.2-1 +# python36 installs the alternatives master symlink to which we attach a slave +Requires(post): python36 +Requires(postun): python36 + %description debug python3-debug provides a version of the Python runtime with numerous debugging features enabled, aimed at advanced Python users such as developers of Python @@ -140,13 +157,9 @@ mkdir -p %{buildroot}%{_bindir} # Symlink the executable to libexec ln -s %{_libexecdir}/platform-python%{pybasever} %{buildroot}%{_bindir}/python%{pybasever} -# Additional symlink for buildroot -ln -s %{_bindir}/python%{pybasever} %{buildroot}%{_bindir}/python3 # Symlink the config executables ln -s python%{LDVERSION_optimized}-config %{buildroot}%{_bindir}/python%{pybasever}-config -# Additional symlink for buildroot -ln -s %{_bindir}/python%{pybasever}-config %{buildroot}%{_bindir}/python3-config # LDVERSION specific section InstallPython() { @@ -165,20 +178,85 @@ InstallPython %{LDVERSION_debug} # General debug symlinks ln -s python%{LDVERSION_debug}-config %{buildroot}%{_bindir}/python%{pybasever}-debug-config ln -s python%{LDVERSION_debug} %{buildroot}%{_bindir}/python%{pybasever}-debug -# Additional symlinks for buildroot -ln -s %{_bindir}/python%{pybasever}-debug-config %{buildroot}%{_bindir}/python3-debug-config -ln -s %{_bindir}/python%{pybasever}-debug %{buildroot}%{_bindir}/python3-debug %endif # with debug_build InstallPython %{LDVERSION_optimized} +# All ghost files controlled by alternatives need to exist for the files +# section check to succeed +# - Don't list /usr/bin/python as a ghost file so `yum install /usr/bin/python` +# doesn't install this package +touch %{buildroot}%{_bindir}/python3 +touch %{buildroot}%{_bindir}/python3-config +touch %{buildroot}%{_bindir}/python3-debug +touch %{buildroot}%{_bindir}/python3-debug-config + +%post +# Alternative for /usr/bin/python3 -> /usr/bin/python3.6 +# Create only if it doesn't exist already +EXISTS=`alternatives --display python3 | \ + grep -c "^/usr/bin/python3.6 - priority [0-9]*"` + +if [ $EXISTS -eq 0 ]; then + alternatives --install %{_bindir}/python3 \ + python3 \ + %{_bindir}/python3.6 \ + 1000000 +fi + +%postun +# Do this only during uninstall process (not during update) +if [ $1 -eq 0 ]; then + alternatives --keep-foreign --remove python3 \ + %{_bindir}/python3.6 + + # Remove link python → python3 if no other python3.* exists + if ! alternatives --display python3 > /dev/null; then + alternatives --keep-foreign --remove python \ + %{_bindir}/python3 + fi +fi + + +%post -n python36-devel +alternatives --add-slave python3 %{_bindir}/python3.6 \ + %{_bindir}/python3-config \ + python3-config \ + %{_bindir}/python3.6-config + +%postun -n python36-devel +# Do this only during uninstall process (not during update) +if [ $1 -eq 0 ]; then + alternatives --keep-foreign --remove-slave python3 %{_bindir}/python3.6 \ + python3-config +fi + + +%post -n python36-debug +alternatives --add-slave python3 %{_bindir}/python3.6 \ + %{_bindir}/python3-debug \ + python3-debug \ + %{_bindir}/python3.6-debug +alternatives --add-slave python3 %{_bindir}/python3.6 \ + %{_bindir}/python3-debug-config \ + python3-debug-config \ + %{_bindir}/python3.6-debug-config + +%postun -n python36-debug +# Do this only during uninstall process (not during update) +if [ $1 -eq 0 ]; then + alternatives --keep-foreign --remove-slave python3 %{_bindir}/python3.6 \ + python3-debug + alternatives --keep-foreign --remove-slave python3 %{_bindir}/python3.6 \ + python3-debug-config +fi %files %license LICENSE %doc README.rst %{_bindir}/python%{pybasever} %{_bindir}/python%{LDVERSION_optimized} -%{_bindir}/python3 +%ghost %{_bindir}/python3 %files devel %license LICENSE @@ -186,7 +264,7 @@ InstallPython %{LDVERSION_optimized} %{_bindir}/python%{pybasever}-config %{_bindir}/python%{LDVERSION_optimized}-config %{_bindir}/python%{LDVERSION_optimized}-*-config -%{_bindir}/python3-config +%ghost %{_bindir}/python3-config %files debug %license LICENSE @@ -196,13 +274,17 @@ InstallPython %{LDVERSION_optimized} %{_bindir}/python%{LDVERSION_debug}-*-config %{_bindir}/python%{pybasever}-debug-config %{_bindir}/python%{pybasever}-debug -%{_bindir}/python3-debug -%{_bindir}/python3-debug-config +%ghost %{_bindir}/python3-debug +%ghost %{_bindir}/python3-debug-config # IMPORTANT # # See note at the top of the spec file # %changelog +* Mon Jan 29 2024 Lumír Balhar - 3.6.6-14.buildroot +- Implemented alternatives the same way as they're in python36 module +Resolves: RHEL-23019 + * Sat Sep 29 2018 Tomas Orsava - 3.6.6-13.buildroot - Merged `stream-3.6` branch into the `rhel-8.0` branch for the buildroot - Differences: