# ================== # IMPORTANT # ================== # This package is intended only for the RHEL8 buildroot. # The python36 package for the python36 module is on the git branch # `stream-3.6`. # # You can build this package normally as you would any other package. # Please keep the "buildroot" part of the "Release" tag so it can be # easily distinguished. # # Relevant JIRA tickets: # * https://projects.engineering.redhat.com/browse/RCM-42305 # * https://projects.engineering.redhat.com/browse/RCM-37705 # (superceded by the one above) # ================== # Top-level metadata # ================== %global pybasever 3.6 Name: python36 Version: %{pybasever}.6 Release: 14.buildroot%{?dist} Summary: Interpreter of the Python programming language License: Python URL: https://www.python.org/ Source: https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz %global debug_package %{nil} # ================================== # Conditionals controlling the build # ================================== # Extra build for debugging the interpreter or C-API extensions # (the -debug subpackages) %bcond_without debug_build # ============================================== # Metadata and macros from the python3 component # ============================================== # ABIFLAGS, LDVERSION and SOABI are in the upstream configure.ac # See PEP 3149 for some background: http://www.python.org/dev/peps/pep-3149/ %global ABIFLAGS_optimized m %global ABIFLAGS_debug dm %global LDVERSION_optimized %{pybasever}%{ABIFLAGS_optimized} %global LDVERSION_debug %{pybasever}%{ABIFLAGS_debug} # ======================= # Package and subpackages # ======================= # python36 package itself Provides: python3 = %{version}-%{release} Provides: python3%{?_isa} = %{version}-%{release} 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.\ It includes an extensive standard library, and has a vast ecosystem of\ third-party libraries.\ \ The python36 package provides the "python3.6" executable: the reference\ interpreter for the Python language, version 3.\ \ The python36-devel package contains files for dovelopment of Python application\ and the python36-debug is helpful for debugging.\ \ Packages containing additional libraries for Python 3.6 are generally named\ with the "python3-" prefix. Documentation for Python is provided in the\ python3-docs package. %description %_description %package devel 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 into other programs, and to make binary distributions for Python libraries. It also contains the necessary macros to build RPM packages with Python modules. %if %{with debug_build} %package debug Summary: Debug version of the Python runtime Provides: python3-debug = %{version}-%{release} Provides: python3-debug%{?_isa} = %{version}-%{release} Obsoletes: python3-debug < 3.6.6-13 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 extension modules. This version uses more memory and will be slower than the regular Python build, but is useful for tracking down reference-counting issues and other bugs. The bytecode format is unchanged, so that .pyc files are compatible between this and the standard version of Python, but the debugging features mean that C/C++ extension modules are ABI-incompatible and must be built for each version separately. The debug build shares installation directories with the standard Python runtime, so that .py and .pyc files can be shared. Compiled extension modules use a special ABI flag ("d") in the filename, so extensions for both verisons can co-exist in the same directory. %endif # with debug_build %prep %autosetup -n Python-3.6.3 %build %install mkdir -p %{buildroot}%{_bindir} # Symlink the executable to libexec ln -s %{_libexecdir}/platform-python%{pybasever} %{buildroot}%{_bindir}/python%{pybasever} # Symlink the config executables ln -s python%{LDVERSION_optimized}-config %{buildroot}%{_bindir}/python%{pybasever}-config # LDVERSION specific section InstallPython() { LDVersion=$1 # Symlink python*-config to libexec ln -s %{_libexecdir}/platform-python${LDVersion}-config %{buildroot}%{_bindir}/python${LDVersion}-config ln -s %{_libexecdir}/platform-python${LDVersion}-`uname -m`-config %{buildroot}%{_bindir}/python${LDVersion}-`uname -m`-config # Symlink optimized and debug executables ln -s %{_libexecdir}/platform-python${LDVersion} %{buildroot}%{_bindir}/python${LDVersion} } %if %{with debug_build} 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 %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} %ghost %{_bindir}/python3 %files devel %license LICENSE %doc README.rst %{_bindir}/python%{pybasever}-config %{_bindir}/python%{LDVERSION_optimized}-config %{_bindir}/python%{LDVERSION_optimized}-*-config %ghost %{_bindir}/python3-config %files debug %license LICENSE %doc README.rst %{_bindir}/python%{LDVERSION_debug} %{_bindir}/python%{LDVERSION_debug}-config %{_bindir}/python%{LDVERSION_debug}-*-config %{_bindir}/python%{pybasever}-debug-config %{_bindir}/python%{pybasever}-debug %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: - Don't provide `python3-devel` from the `python36-devel` package because `python3-devel` itself is actually available in the buildroot - Instead of using the `alternatives`, simply simplink the main executables (python3, python3-config,...) - Resolves: rhbz#1619153 * Tue Aug 07 2018 Tomas Orsava - 3.6-5 - Bump * Tue Jul 31 2018 Tomas Orsava - 3.6-4 - Add python3{,-config,-debug} symlinks specially for the buildroot * Tue Jul 31 2018 Tomas Orsava - 3.6-3 - Bump release after revert of commits * Wed Apr 04 2018 Tomas Orsava - 3.6-1 - This new package python36 will belong to the python36 module that will house symlinks from /usr/bin/python* to /usr/libexec/platform-python* et al.