python3.14: update to version 3.14.2 (also, drop 3.9 recipe). (#13334)

"Of course they release a new version the same day I updated the previous one"
edition.

At least gives me an excuse to finally drop the 3.9 recipe for good.

RIP 3.9! You weren't loved, but were useful nonetheless!
This commit is contained in:
OscarL
2025-12-05 17:59:12 -03:00
committed by GitHub
parent 41984d72df
commit 0646a13dd0
4 changed files with 23 additions and 1558 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -20,7 +20,7 @@ LICENSE="Python"
COPYRIGHT="1990-2025 Python Software Foundation"
REVISION="1"
SOURCE_URI="https://www.python.org/ftp/python/$portVersion/Python-$portVersion.tar.xz"
CHECKSUM_SHA256="8dfa08b1959d9d15838a1c2dab77dc8d8ff4a553a1ed046dfacbc8095c6d42fc"
CHECKSUM_SHA256="ce543ab854bc256b61b71e9b27f831ffd1bfd60a479d639f8be7f9757cf573e9"
SOURCE_DIR="Python-$portVersion"
pyShortVer="${portVersion%.*}"
@@ -69,6 +69,9 @@ runOnlyKnownFailingTests=false
# Run only the tests that are generally excluded. Expect LOTS of hangs/crashes/etc.
runOnlyExcludedTests=false
# Exclude known slow tests. Handy on slow hardware.
excludeSlowTests=false
# <<<[RECIPE OPTIONS]
PROVIDES="
@@ -415,6 +418,23 @@ TEST()
-x test_imaplib
-x test_unittest
-x test_urllib2_localnet
# 3.14.1 this takes > 11 minutes (and possible hang)
-x test_concurrent_futures.test_interpreter_pool
)
local very_slow_tests=(
# These do not hang, but take >5 to 11 minutes each (sorted in "slowest first" order).
-x test_multiprocessing_main_handling
-x test_regrtest
-x test_concurrent_futures.test_shutdown
-x test_random
-x test_concurrent_futures.test_deadlock
-x test_compileall
-x test_concurrent_futures.test_process_pool
-x test_tarfile
-x test_cmd_line
-x test_pbd
)
local tests_that_fail=(
@@ -471,6 +491,8 @@ TEST()
make $jobArgs test EXTRATESTOPTS="${test_options[*]} ${tests_to_exclude[*]}"
elif $runOnlyKnownFailingTests; then
make $jobArgs test EXTRATESTOPTS="${test_options[*]} ${tests_that_fail[*]}"
elif $excludeSlowTests; then
make $jobArgs test EXTRATESTOPTS="${test_options[*]} ${tests_to_exclude[*]} ${very_slow_tests[*]}"
else
# Runs the full test suite (minus the tests that we explicitly exclude).
make $jobArgs test EXTRATESTOPTS="${test_options[*]} ${tests_to_exclude[*]}"

View File

@@ -1,403 +0,0 @@
SUMMARY="An interpreted, interactive, object-oriented programming language"
DESCRIPTION="Python is a programming language that lets you work more quickly \
and integrate your systems more effectively. You can learn to use Python and \
see almost immediate gains in productivity and lower maintenance costs.
Python runs on Windows, Linux/Unix, Mac OS X, and has been ported to the Java \
and .NET virtual machines.
Python is free to use, even for commercial products, because of its \
OSI-approved open source license."
HOMEPAGE="https://www.python.org"
LICENSE="Python"
COPYRIGHT="1990-2024 Python Software Foundation"
REVISION="1"
SOURCE_URI="https://www.python.org/ftp/python/$portVersion/Python-$portVersion.tar.xz"
CHECKSUM_SHA256="00e07d7c0f2f0cc002432d1ee84d2a40dae404a99303e3f97701c10966c91834"
SOURCE_DIR="Python-$portVersion"
pyShortVer="${portVersion%.*}"
pyVersionCompat="$portVersion compat >= $pyShortVer"
PATCHES="python$pyShortVer-$portVersion.patchset"
ARCHITECTURES="?all !x86_gcc2"
SECONDARY_ARCHITECTURES="?x86"
# On x86_gcc2 we don't want to install the commands in bin/<arch>/, but in bin/.
commandSuffix=$secondaryArchSuffix
commandBinDir=$binDir
if [ "$targetArchitecture" = x86_gcc2 ]; then
commandSuffix=
commandBinDir=$prefix/bin
fi
GLOBAL_WRITABLE_FILES="
non-packaged/lib/python$pyShortVer/site-packages directory keep-old
"
# [RECIPE OPTIONS]>>>
# If this is not intended to be the "default" Python version, set to "false", so "make altinstall"
# is used, and only version-suffixed commands are used in PROVIDES.
installAsDefaultPython=false
# Set to "true" if we should build the "tkinter" module.
# Disabled for now, as tkinter deadlocks on Haiku. Try again when tk drops undroidwish for xlibe.
enableTkinter=false
# Set to "true" to package all the tests into a separate "_tests" package (around 30 MB in size).
# Tests are discarded if set to "false".
packageTests=false
# Set to "false" for faster local/test builds. Around 4 to 5 times faster that way.
optimizedBuild=true
# Run all tests by default. Set to "true" to make "hp --test" only run then known failing tests.
runOnlyKnownFailingTests=false
# <<<[RECIPE OPTIONS]
PROVIDES="
python$pyShortVer$secondaryArchSuffix = $pyVersionCompat
cmd:2to3_$pyShortVer = $pyVersionCompat
cmd:pydoc$pyShortVer = $pyVersionCompat
cmd:python$pyShortVer = $pyVersionCompat
cmd:python${pyShortVer}_config = $pyVersionCompat
devel:libpython$pyShortVer$secondaryArchSuffix = 1.0
lib:libpython$pyShortVer$secondaryArchSuffix = 1.0
"
REQUIRES="
haiku$secondaryArchSuffix
cmd:file
lib:libbz2$secondaryArchSuffix
lib:libedit$secondaryArchSuffix # Using libedit instead of readline only works on Python >=3.10
lib:libexpat$secondaryArchSuffix
lib:libffi$secondaryArchSuffix
lib:libintl$secondaryArchSuffix
lib:liblzma$secondaryArchSuffix
lib:libncursesw$secondaryArchSuffix
lib:libsqlite3$secondaryArchSuffix
lib:libssl$secondaryArchSuffix
lib:libz$secondaryArchSuffix
"
REPLACES="
python39$secondaryArchSuffix
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
devel:libbz2$secondaryArchSuffix
devel:libedit$secondaryArchSuffix
devel:libexpat$secondaryArchSuffix
devel:libffi$secondaryArchSuffix
devel:liblzma$secondaryArchSuffix
devel:libncursesw$secondaryArchSuffix
devel:libsqlite3$secondaryArchSuffix
devel:libssl$secondaryArchSuffix
devel:libz$secondaryArchSuffix
"
BUILD_PREREQUIRES="
autoconf_archive
cmd:aclocal
cmd:autoconf
cmd:find
cmd:gcc$secondaryArchSuffix
cmd:ld$secondaryArchSuffix
cmd:libtoolize$secondaryArchSuffix
cmd:make
cmd:pkg_config$secondaryArchSuffix
"
if $installAsDefaultPython; then
PROVIDES+="
cmd:2to3 = $portVersion compat >= $pyShortVer
cmd:python3 = $portVersion compat >= $pyShortVer
cmd:pydoc3 = $portVersion compat >= $pyShortVer
cmd:python3_config = $portVersion compat >= $pyShortVer
"
fi
if $enableTkinter; then
PROVIDES+="
cmd:idle$pyShortVer = $pyVersionCompat
"
if $installAsDefaultPython; then
PROVIDES+="
cmd:idle3 = $portVersion compat >= $pyShortVer
"
fi
BUILD_REQUIRES+="
devel:libtclstub8.6$secondaryArchSuffix
devel:libtk8.6$secondaryArchSuffix
"
fi
if $packageTests; then
PROVIDES_tests="
python$pyShortVer${secondaryArchSuffix}_tests = $portVersion
"
REQUIRES_tests="
python$pyShortVer$secondaryArchSuffix == $portVersion base
"
fi
BUILD()
{
autoupdate
autoreconf -fi
# From ./configure:
# "compiler flags are generated in two sets, BASECFLAGS and OPT. OPT is just
# for debug/optimization stuff. BASECFLAGS is for flags that are required
# just to get things to compile and link."
# If not provided, the Makefile ends up with:
# BASECFLAGS= -Wno-unused-result -Wsign-compare
# OPT= -DNDEBUG -g -fwrapv -O3 -Wall
# -NDEBUG gets added by ./configure unless "--with-assertions" is used.
export BASECFLAGS="-pipe -D_BSD_SOURCE"
export OPT="-fwrapv -Wall" # remove "-g" until we use "defineDebugInfoPackage".
if $optimizedBuild; then
export OPT+=" -O3"
maybeEnableOptimizations="--enable-optimizations"
else
export OPT+=" -O0"
maybeEnableOptimizations=
fi
runConfigure --omit-dirs binDir,includeDir ./configure \
--bindir=$commandBinDir \
--includedir=$developDir/headers \
$maybeEnableOptimizations \
--enable-shared \
--with-ensurepip=no \
--with-system-expat \
--with-system-ffi
# "configure: WARNING: --with(out)-system-ffi is ignored on this platform"
# Uncomment when doing repeated builds (for testing different flags/options).
# echo "[.recipe] Cleaning before rebuild:" && make clean && rm -f python
# NOTE: When using "--enable-optimizations" above, using "make $jobArgs" might be unreliable.
make $jobArgs
}
INSTALL()
{
if $installAsDefaultPython; then
make install
else
# altinstall avoids clobbering $prefix/bin/{idle3,pydoc3,python3,python3-config}
make altinstall
fi
rm $libDir/libpython3.so
rm $prefix/lib/python$pyShortVer/config-$pyShortVer/libpython$pyShortVer.a
# No point in having this if we don't have a working tkinter.
if ! $enableTkinter; then
rm $prefix/bin/idle$pyShortVer
if $installAsDefaultPython; then
rm -f $prefix/bin/idle3
fi
fi
if [ "$targetArchitecture" = x86_gcc2 ]; then
# On x86_gcc2, move lib-dynload to lib/python3.x/
mv $libDir/python$pyShortVer/lib-dynload $prefix/lib/python$pyShortVer/
fi
prepareInstalledDevelLib libpython$pyShortVer
fixPkgconfig
if [ "$targetArchitecture" = x86_gcc2 ]; then
# fix pkgconfig to match configure flags
sed -i -e 's,headers/x86,headers,' $developLibDir/pkgconfig/python*.pc
fi
mkdir -p $prefix/lib/python$pyShortVer/vendor-packages
echo 'This directory contains packaged python modules.' \
>$prefix/lib/python$pyShortVer/vendor-packages/README
mkdir -p $prefix/non-packaged/lib/python$pyShortVer
mv $prefix/lib/python$pyShortVer/site-packages $prefix/non-packaged/lib/python$pyShortVer/
if $packageTests; then
packageEntries tests \
$prefix/lib/python$pyShortVer/idlelib/idle_test \
$prefix/lib/python$pyShortVer/test
else
# drop testsuite altogether
cd $prefix/lib/python$pyShortVer
rm -rf ctypes/test distutils/tests idlelib/idle_test lib2to3/tests sqlite3/test test \
tkinter/test unittest/test
fi
}
# Some of the test will crash, invoking the crash dialog, and will hang waiting for
# user's interaction. To avoid that, make sure to configure your system by adding
# the following lines in the file "~/config/settings/system/debug_server/settings":
##---
# executable_actions {
# /sources/Python-3.*/python kill
# }
##---
# For some tests that purposefully crash, it would make sense to add support for
# crash-report suppression (as done for other platforms) on "tests/support/__init__,py"'s
# SuppressCrashReport class.
# But that needs support from Haiku's debug_server, as we can't change settings from
# the recipe's building environment at the moment (https://dev.haiku-os.org/ticket/10301)
# To see the available test-runs options:
# > hp -E python3.nn
# > LIBRARY_PATH=%A:/boot/system/lib python -m test --help
# or:
# > LD_PRELOAD=./libpython3.nn.so.1.0 python -m test --help
#
# To only execute a particular test (from the $sourceDir):
#
# > LD_PRELOAD=./libpython3.nn.so.1.0 python -m test test_datetime -W
#
# Beware that running tests that way can cause some tests to fail, while they work fine under
# "hp --test"'s chroot. (test_sysconfig.MakefileTests.test_parse_makefile, for example).
# Problem is "os.getcwd()" will return wrong data, causing some file operations to fail.
# For reference... Tests results on beta4 (x64) in about 20 minutes:
# 352 tests OK. 25 tests failed. 29 tests skipped.
TEST()
{
# Remove tests data left-overs, if any:
# rm -f -r /boot/system/cache/tmp/
# rm -f -d -r build/test_python*
make $jobArgs test EXTRATESTOPTS="--cleanup"
local test_options=(
# --worker-args $jobs # or 1 for single-process. untested.
# Use this to get same test order on different runs (actual value not important).
--randseed 7858065
# Print the names of the 10 slowest tests.
--slowest
# Possibly useful?
# --tempdir=/another_drive/tmp
# Enable/disable certain tests by "resource" type:
# -uall,-audio,-cpu,-curses,-decimal,-gui,-largefile,-network,-subprocess,-urlfetch
# make test --help says that "-unone" is the default, but the build is doing this:
# "resources: all,-audio,-gui,-largefile" instead.
#
# Let's be explicit to avoid surprises:
-unone,curses,tzdata
)
local tests_to_exclude=(
# distutils is deprecated, and will be removed on 3.12.
-x test_distutils
# The following tests invoke the crash dialog, and unless your configure
# debug_server default action to "kill" or "report", they will hang waiting for
# user input. See comment above TEST().
-x test_faulthandler
-x test_futures # from test_asyncio. Crashes: Exception (Segment violation)
-x test_subprocess # tends to hang.
-x test_threading # tends to hang.
# Many of the tests hang/stall. We have two options:
#
# 1- Manually remove the problematic test-cases.
# 2- Set a TIMEOUT.
#
# Option 1: Works, but requires manual identification/mainteinance.
#
# Option 2: Doesn't requires maintaining a list of stalling tests, but:
# - Causes errors at the end of the run:
# "unmounting failed: Device/File/Resource Busy"
# - Leaves dangling threads running when the tests timeout:
# "Warning -- threading_cleanup() failed to cleanup 0 threads (count: 0, dangling: 2)"
# - The time it takes to run the full suite goes from 14 to 30+ minutes,
#
# For Option 2, use: export EXTRATESTOPTS="--timeout=300"
# before calling "make $jobArgs test".
#
# Let's use Option 1, for now at least:
# These hang reliably.
-x test__xxsubinterpreters
-x test_asynchat
-x test_concurrent_futures
-x test_importlib
-x test_interpreters
-x test_multiprocessing
-x test_multiprocessing_fork
-x test_multiprocessing_forkserver
-x test_multiprocessing_main_handling
-x test_multiprocessing_spawn
-x test_socketserver
-x test_threaded_import # test_importlib/test_threaded_import
# "test_asyncio" doesn't seems to runs reliably, even after individually skipping
# all the problematic test-cases that could be identify by running them one by one.
-x test_asyncio
# -x test_asyncio/test_base_events
# -x test_asyncio/test_buffered_proto # Exception on Exception handler.
# -x test_asyncio/test_events
# -x test_asyncio/test_sendfile
# -x test_asyncio/test_server # Exception on Exception handler.
# -x test_asyncio/test_sslproto # Exception on Exception handler.
# -x test_asyncio/test_streams
# These not always hang/stall, but they do it enough to warrant skipping for now.
-x test_imaplib
-x test_signal
-x test_socket
-x test_ssl
-x test_urllib2_localnet
)
local tests_that_fail=(
test_asyncore
test_builtin
test_c_locale_coercion
test_compileall
test_datetime
test_eintr
test_fcntl
test_ftplib
test_genericpath
test_json
test_logging
test_mailbox
test_os
test_peg_generator
test_popen
test_posix
test_pty
test_re
test_shutil
test_site
test_sysconfig
test_tarfile
test_time
test_tools
test_utf8_mode
)
local -x LOGNAME=buildbot # this skips tests_tools/test_freeze, copied from Gentoo's ebuild
if $runOnlyKnownFailingTests; then
make test EXTRATESTOPTS="${test_options[*]} ${tests_that_fail[*]}"
else
# Runs the full test suite (minus the tests that we explicitly exclude).
make test EXTRATESTOPTS="${test_options[*]} ${tests_to_exclude[*]}"
fi
# Occasionally, some test fails seemingly due to the racy nature of tempfile.mktemp().
# Even the help for that function says to NOT use it, but some tests still do.
#
# If you find some strange "æ" suffix on temp dirnames, ej:
# "cwd: /sources/Python-3.nn.nn/build/test_python_10324æ"
# That's due to usages of os_helper.FS_NONASCII.
}