diff --git a/Mk/Uses/python.mk b/Mk/Uses/python.mk --- a/Mk/Uses/python.mk +++ b/Mk/Uses/python.mk @@ -235,12 +235,16 @@ # interpreter without dots, e.g. 27, 38, ... # Used for prefixes and suffixes. # +# PYTHON_BASESUFFIX - PYTHON_SUFFIX without the threaded ABI flag. +# # PYTHON_MAJOR_VER - The major release version of the chosen Python # interpreter, e.g. 2, 3, ... # # PYTHON_VER - The major-minor release version of the chosen Python # interpreter, e.g. 2.7, 3.9, ... # +# PYTHON_BASEVER - PYTHON_VER without the threaded ABI flag. +# # PYTHON_ABIVER - Additional ABI flags set by the chosen Python # interpreter, e.g. md # @@ -284,7 +288,9 @@ # PYTHON_PLATFORM=${PYTHON_PLATFORM} # PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR} # PYTHON_SUFFIX=${PYTHON_SUFFIX} +# PYTHON_BASESUFFIX=${PYTHON_BASESUFFIX} # PYTHON_VER=${PYTHON_VER} +# PYTHON_BASEVER=${PYTHON_BASEVER} # PYTHON_VERSION=${PYTHON_VERSION} # # where PYTHON_INCLUDEDIR, PYTHON_LIBDIR and PYTHON_SITELIBDIR have their PREFIX @@ -324,7 +330,7 @@ # What Python version and what Python interpreters are currently supported? # When adding a version, please keep the comment in # Mk/bsd.default-versions.mk in sync. -_PYTHON_VERSIONS= 3.11 3.12 3.10 3.9 2.7 # preferred first +_PYTHON_VERSIONS= 3.11 3.12 3.13 3.13t 3.10 3.9 2.7 # preferred first _PYTHON_PORTBRANCH= 3.11 # ${_PYTHON_VERSIONS:[1]} _PYTHON_BASECMD= ${LOCALBASE}/bin/python _PYTHON_RELPORTDIR= lang/python @@ -457,7 +463,7 @@ . endif # Pattern to convert python versions (X.Y or X.YY) to comparable format X.YY -_VC= C/^([1-9]\.)([0-9])$$/\10\2/ +_VC= C/^([1-9]\.)([0-9])$$/\10\2/:S/t$/// .undef _PYTHON_VERSION_NONSUPPORTED . if !empty(_PYTHON_VERSION_MINIMUM) && (${_PYTHON_VERSION:${_VC}} < ${_PYTHON_VERSION_MINIMUM:${_VC}}) @@ -525,7 +531,7 @@ . endif . endif -. if ${FLAVOR:Mpy[23][0-9]}${FLAVOR:Mpy[23][1-9][0-9]} +. if ${FLAVOR:Mpy[23][0-9]}${FLAVOR:Mpy[23][1-9][0-9]}${FLAVOR:Mpy31[3-9]t} _PYTHON_VERSION= ${FLAVOR:S/py//:C/(.)/\1./} . endif @@ -548,7 +554,9 @@ # Got the correct python version, set some publicly accessible variables PYTHON_VER= ${_PYTHON_VERSION} +PYTHON_BASEVER= ${PYTHON_VER:S/t$//} PYTHON_SUFFIX= ${_PYTHON_VERSION:S/.//g} +PYTHON_BASESUFFIX= ${PYTHON_SUFFIX:S/t$//} PYTHON_MAJOR_VER= ${PYTHON_VER:R} PYTHON_REL= # empty PYTHON_ABIVER= # empty @@ -556,12 +564,11 @@ # Protect partial checkouts from Mk/Scripts/functions.sh:export_ports_env(). . if !defined(_PORTS_ENV_CHECK) || exists(${PORTSDIR}/${PYTHON_PORTSDIR}) -.include "${PORTSDIR}/${PYTHON_PORTSDIR}/Makefile.version" +.include "${PORTSDIR}/${PYTHON_PORTSDIR:S/t$//}/Makefile.version" . endif # Create a 5 integer version string, prefixing 0 to the minor and patch # tokens if it's a single character. Only use the first 3 tokens of -# PORTVERSION to support pre-release versions (rc3, alpha4, etc) of -# any Python port (lang/pythonXY) +# DISTVERSION to stay consistent regardless of pre-release or ABI flags PYTHON_REL= ${PYTHON_DISTVERSION:C/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/:C/\.([0-9])$/.0\1/:C/\.([0-9]\.[0-9]+)/.0\1/:S/.//g} # Might be overridden by calling ports @@ -573,7 +580,7 @@ . endif . if ${PYTHON_REL} >= 30807 -PYTHON_EXT_SUFFIX= .cpython-${PYTHON_SUFFIX} +PYTHON_EXT_SUFFIX= .cpython-${PYTHON_BASESUFFIX} . else PYTHON_EXT_SUFFIX= # empty . endif @@ -894,8 +901,10 @@ PYTHON_PLATFORM=${PYTHON_PLATFORM} \ PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR} \ PYTHON_SUFFIX=${PYTHON_SUFFIX} \ + PYTHON_BASESUFFIX=${PYTHON_BASESUFFIX} \ PYTHON_EXT_SUFFIX=${PYTHON_EXT_SUFFIX} \ PYTHON_VER=${PYTHON_VER} \ + PYTHON_BASEVER=${PYTHON_BASEVER} \ PYTHON_VERSION=${PYTHON_VERSION} # Substitutions for pkg-plist @@ -906,8 +915,10 @@ PYTHON_PLATFORM=${PYTHON_PLATFORM} \ PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} \ PYTHON_SUFFIX=${PYTHON_SUFFIX} \ + PYTHON_BASESUFFIX=${PYTHON_BASESUFFIX} \ PYTHON_EXT_SUFFIX=${PYTHON_EXT_SUFFIX} \ PYTHON_VER=${PYTHON_VER} \ + PYTHON_BASEVER=${PYTHON_BASEVER} \ PYTHON_VERSION=${PYTHON_VERSION} . if ${PYTHON_MAJOR_VER} < 3 SUB_LIST+= PYTHON2="" PYTHON3="@comment " diff --git a/Mk/bsd.default-versions.mk b/Mk/bsd.default-versions.mk --- a/Mk/bsd.default-versions.mk +++ b/Mk/bsd.default-versions.mk @@ -140,7 +140,7 @@ . else PYCRYPTOGRAPHY_DEFAULT?= legacy . endif -# Possible values: 3.9, 3.10, 3.11, 3.12 +# Possible values: 3.9, 3.10, 3.11, 3.12, 3.13, 3.13t PYTHON_DEFAULT?= 3.11 # Possible values: 2.7 PYTHON2_DEFAULT?= 2.7 diff --git a/databases/py-gdbm/Makefile b/databases/py-gdbm/Makefile --- a/databases/py-gdbm/Makefile +++ b/databases/py-gdbm/Makefile @@ -20,7 +20,7 @@ USES= compiler:c11 python tar:xz USE_PYTHON= allflavors autoplist pep517 -DISTINFO_FILE= ${PORTSDIR}/lang/python${PYTHON_SUFFIX}/distinfo +DISTINFO_FILE= ${PORTSDIR}/lang/python${PYTHON_SUFFIX:S/t$//}/distinfo WRKSRC_SUBDIR= Modules SUB_LIST+= DISTVERSION=${DISTVERSION} diff --git a/databases/py-sqlite3/Makefile b/databases/py-sqlite3/Makefile --- a/databases/py-sqlite3/Makefile +++ b/databases/py-sqlite3/Makefile @@ -20,7 +20,7 @@ USES= compiler:c11 python tar:xz USE_PYTHON= allflavors autoplist pep517 -DISTINFO_FILE= ${PORTSDIR}/lang/python${PYTHON_SUFFIX}/distinfo +DISTINFO_FILE= ${PORTSDIR}/lang/python${PYTHON_SUFFIX:S/t$//}/distinfo WRKSRC_SUBDIR= Modules SUB_LIST+= DISTVERSION=${DISTVERSION} diff --git a/lang/Makefile b/lang/Makefile --- a/lang/Makefile +++ b/lang/Makefile @@ -310,6 +310,8 @@ SUBDIR += python310 SUBDIR += python311 SUBDIR += python312 + SUBDIR += python313 + SUBDIR += python313t SUBDIR += python39 SUBDIR += qmasm SUBDIR += quickjs diff --git a/lang/python313/Makefile b/lang/python313/Makefile new file mode 100644 --- /dev/null +++ b/lang/python313/Makefile @@ -0,0 +1,178 @@ +PORTNAME= python +DISTVERSION= ${PYTHON_DISTVERSION} +CATEGORIES= lang python +MASTER_SITES= PYTHON/ftp/python/${DISTVERSION:C/[a-z].*//} +PKGNAMESUFFIX= ${PYTHON_SUFFIX} +DISTNAME= Python-${DISTVERSION} +DIST_SUBDIR= python + +MAINTAINER= python@FreeBSD.org +COMMENT= Interpreted object-oriented programming language +WWW= https://www.python.org/ + +LICENSE= PSFL + +LIB_DEPENDS= libffi.so:devel/libffi +TEST_DEPENDS= gdb:devel/gdb + +USES= compiler:c11 cpe ncurses pathfix pkgconfig \ + python:${PYTHON_DISTVERSION:R},env readline shebangfix ssl tar:xz +PATHFIX_MAKEFILEIN= Makefile.pre.in +USE_LDCONFIG= yes +GNU_CONFIGURE= yes +python_CMD= ${PREFIX}/bin/python${PYTHON_DISTVERSION:R} +SHEBANG_GLOB= *.py* +SHEBANG_FILES= Lib/test/archivetestdata/exe_with_z64 \ + Lib/test/archivetestdata/exe_with_zip \ + Lib/test/archivetestdata/header.sh + +DISABLED_EXTENSIONS= _sqlite3 _tkinter _gdbm +CONFIGURE_ARGS+= --enable-shared --without-ensurepip +CONFIGURE_ENV+= OPT="" # Null out OPT to respect user CFLAGS and remove optimizations + +INSTALL_TARGET= altinstall # Don't want cloberring of unprefixed files + +TEST_TARGET= test +TEST_ARGS= TESTOPTS=-j${MAKE_JOBS_NUMBER} + +MAKE_ARGS+= INSTALL_SHARED="${INSTALL_LIB}" # Strip shared library + +SUB_FILES= pkg-message +SUB_LIST= PYTHON_SUFFIX=${PYTHON_SUFFIX} + +PLIST_SUB= ABI=${ABIFLAGS} \ + THREAD=${THREADFLAG} \ + DISTVERSION=${DISTVERSION} \ + OSMAJOR=${OSVERSION:C/([0-9]*)[0-9]{5}/\1/} # For plat-freebsd* in pkg-plist. https://bugs.python.org/issue19554 + +OPTIONS_DEFINE= DEBUG IPV6 LIBMPDEC LTO NLS PYMALLOC +OPTIONS_DEFAULT= LIBMPDEC LTO PYMALLOC +OPTIONS_EXCLUDE_riscv64= LTO +OPTIONS_EXCLUDE_powerpc64le= LTO +OPTIONS_RADIO= HASH +OPTIONS_RADIO_HASH= FNV SIPHASH +OPTIONS_GROUP= EXPERIMENTAL +OPTIONS_GROUP_EXPERIMENTAL= JIT +OPTIONS_SUB= yes + +LIBMPDEC_DESC= Use libmpdec from ports instead of bundled version +NLS_DESC= Enable gettext support for the locale module +PYMALLOC_DESC= Enable specialized mallocs + +HASH_DESC= Hash Algorithm (PEP-456) +FNV_DESC= Modified Fowler-Noll-Vo Algorithm +SIPHASH_DESC= SipHash24 Algorithm + +EXPERIMENTAL_DESC= Experimental features +JIT_DESC= Enable just-in-time compiler + +FNV_CONFIGURE_ON= --with-hash-algorithm=fnv +SIPHASH_CONFIGURE_ON= --with-hash-algorithm=siphash24 + +JIT_CONFIGURE_ENABLE= experimental-jit + +DEBUG_CONFIGURE_WITH= pydebug +IPV6_CONFIGURE_ENABLE= ipv6 + +LIBMPDEC_CONFIGURE_ON= --with-system-libmpdec +LIBMPDEC_LIB_DEPENDS= libmpdec.so:math/mpdecimal + +LTO_CONFIGURE_ON= --with-lto + +# Use CPPFLAGS over CFLAGS due to -I ordering, causing elementtree and pyexpat +# to break in Python 2.7, or preprocessor complaints in Python >= 3.3 +# Upstream Issue: https://bugs.python.org/issue6299 +NLS_USES= gettext +NLS_CPPFLAGS= -I${LOCALBASE}/include +NLS_LIBS= -L${LOCALBASE}/lib -lintl +NLS_CONFIGURE_ENV_OFF= ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no + +PYMALLOC_CONFIGURE_WITH= pymalloc + +MASTERDIR?= ${.CURDIR} +CONFLICTS_INSTALL?= python313t +.include "${MASTERDIR}/Makefile.version" +.include + +.if ${PORT_OPTIONS:MDEBUG} +ABIFLAGS:= d${ABIFLAGS} +.endif + +# Python 3.11 or newer is required to build the JIT +.if ${PORT_OPTIONS:MJIT} +. if ${PYTHON_DEFAULT:S/t$//} == 3.13 || ${PYTHON_DEFAULT:S/t$//} < 3.11 +BUILD_DEPENDS+= python3.12:lang/python312 +. else +BUILD_DEPENDS+= python${PYTHON_DEFAULT}:lang/python${PYTHON_DEFAULT:S/.//g} +. endif +.endif + +.if !empty(ABIFLAGS) || !empty(THREADFLAG) +PLIST_FILES+= bin/python${PYTHON_VER}${ABIFLAGS} \ + bin/python${PYTHON_VER}${ABIFLAGS}-config +.endif + +# See https://bugs.freebsd.org/115940 and https://bugs.freebsd.org/193650 +.if !exists(/usr/bin/ypcat) || defined(WITHOUT_NIS) +PLIST_SUB+= NO_NIS="@comment " +DISABLED_EXTENSIONS+= nis +.else +PLIST_SUB+= NO_NIS="" +.endif + +.if ${SSL_DEFAULT:Mlibressl*} +EXTRA_PATCHES+= ${PATCHDIR}/libressl +CONFIGURE_ENV+= ac_cv_working_openssl_hashlib=yes +.endif + +.include + +# llvm17 with -flto=thin makes Programs/_freeze_module crash on armv7; workaround +# cf. https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276249 +.if ${ARCH} == armv7 && ${CHOSEN_COMPILER_TYPE} == clang && ${COMPILER_VERSION} >= 170 && \ + ${COMPILER_VERSION} < 180 +CONFIGURE_ARGS:= ${CONFIGURE_ARGS:N${LTO_CONFIGURE_ON}} +.endif + +post-patch: +# disable the detection of includes and library from e2fsprogs-libuuid, +# which introduces hidden dependency and breaks build + @${REINPLACE_CMD} -e 's|uuid/uuid.h|ignore_&|' ${WRKSRC}/configure + +# disable detection of multiarch as it breaks with clang >= 13, which adds a +# major.minor version number in -print-multiarch output, confusing Python + @${REINPLACE_CMD} -e 's|^\( *MULTIARCH=\).*--print-multiarch.*|\1|' ${WRKSRC}/configure +# Apply DISABLED_EXTENSIONS + @${ECHO_CMD} '*disabled*' > ${WRKSRC}/Modules/Setup.local +. for _module in ${DISABLED_EXTENSIONS} + @${ECHO_CMD} ${_module} >> ${WRKSRC}/Modules/Setup.local +. endfor + +post-install: +.if ! ${PORT_OPTIONS:MDEBUG} + ${RM} ${STAGEDIR}${PREFIX}/lib/libpython3.so # Upstream Issue: https://bugs.python.org/issue17975 +.endif + ${LN} -sf libpython${PYTHON_VER}${ABIFLAGS}.so.1.0 ${STAGEDIR}${PREFIX}/lib/libpython${PYTHON_VER}${ABIFLAGS}.so.1 +# This code block exists for the qemu-user enabled cross build environment. +# When using this environment in poudriere, CC is not set to the default +# of /usr/bin/cc and a cross-compile toolchain is used. We need to hand +# edit this so that the run time configuration for python matches what the +# FreeBSD base system provides. sbruno 02Aug2017 +.if ${CC} == /nxb-bin/usr/bin/cc + @${REINPLACE_CMD} -e 's=/nxb-bin==' \ + ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${THREADFLAG}${ABIFLAGS}_freebsd${OSREL:R}_.py + @cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \ + ./python -E -m compileall -d ${PREFIX}/lib/python${PYTHON_VER} \ + ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${THREADFLAG}${ABIFLAGS}_freebsd${OSREL:R}_.py + @cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \ + ./python -E -O -m compileall -d ${PREFIX}/lib/python${PYTHON_VER} \ + ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${THREADFLAG}${ABIFLAGS}_freebsd${OSREL:R}_.py + @${REINPLACE_CMD} -e 's=/nxb-bin==' \ + ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/config-${PYTHON_VER}${ABIFLAGS}/Makefile +.endif + for i in ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/lib-dynload/*.so; do \ + ${STRIP_CMD} $$i; done # Strip shared extensions + ${INSTALL_DATA} ${WRKSRC}/Tools/gdb/libpython.py \ + ${STAGEDIR}${PREFIX}/lib/libpython${PYTHON_VER}${ABIFLAGS}.so.1.0-gdb.py + +.include diff --git a/lang/python313/Makefile.version b/lang/python313/Makefile.version new file mode 100644 --- /dev/null +++ b/lang/python313/Makefile.version @@ -0,0 +1,7 @@ +# Mk/Uses/python.mk includes this file, don't remove it! + +# Do not forget to +# 1. Update python documentation (lang/python-doc-*) +# Run "make -C lang/python-doc-html makesum" +# 2. Remove PORTREVISION in Makefile +PYTHON_DISTVERSION= 3.13.5 diff --git a/lang/python313/distinfo b/lang/python313/distinfo new file mode 100644 --- /dev/null +++ b/lang/python313/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1750190292 +SHA256 (python/Python-3.13.5.tar.xz) = 93e583f243454e6e9e4588ca2c2662206ad961659863277afcdb96801647d640 +SIZE (python/Python-3.13.5.tar.xz) = 22856016 diff --git a/lang/python313/files/libressl/patch-Modules___hashopenssl.c b/lang/python313/files/libressl/patch-Modules___hashopenssl.c new file mode 100644 --- /dev/null +++ b/lang/python313/files/libressl/patch-Modules___hashopenssl.c @@ -0,0 +1,26 @@ +--- Modules/_hashopenssl.c.orig 2025-02-04 14:51:09 UTC ++++ Modules/_hashopenssl.c +@@ -44,7 +44,9 @@ + + #define MUNCH_SIZE INT_MAX + ++#ifndef LIBRESSL_VERSION_NUMBER + #define PY_OPENSSL_HAS_SCRYPT 1 ++#endif + #if defined(NID_sha3_224) && defined(NID_sha3_256) && defined(NID_sha3_384) && defined(NID_sha3_512) + #define PY_OPENSSL_HAS_SHA3 1 + #endif +@@ -918,9 +920,12 @@ py_evp_fromname(PyObject *module, const char *digestna + goto exit; + } + ++#ifdef PY_OPENSSL_HAS_SHAKE + if ((EVP_MD_flags(digest) & EVP_MD_FLAG_XOF) == EVP_MD_FLAG_XOF) { + type = get_hashlib_state(module)->EVPXOFtype; +- } else { ++ } else ++#endif ++ { + type = get_hashlib_state(module)->EVPtype; + } + diff --git a/lang/python313/files/patch-Makefile.pre.in b/lang/python313/files/patch-Makefile.pre.in new file mode 100644 --- /dev/null +++ b/lang/python313/files/patch-Makefile.pre.in @@ -0,0 +1,62 @@ +--- Makefile.pre.in.orig 2024-06-07 03:15:55 UTC ++++ Makefile.pre.in +@@ -83,7 +83,6 @@ BASECPPFLAGS= @BASECPPFLAGS@ + OPT= @OPT@ + BASECFLAGS= @BASECFLAGS@ + BASECPPFLAGS= @BASECPPFLAGS@ +-CONFIGURE_CFLAGS= @CFLAGS@ + # CFLAGS_NODIST is used for building the interpreter and stdlib C extensions. + # Use it when a compiler flag should _not_ be part of the distutils CFLAGS + # once Python is installed (Issue #21121). +@@ -95,18 +94,16 @@ CONFIGURE_LDFLAGS_NOLTO=@LDFLAGS_NOLTO@ + # LDFLAGS_NOLTO is an extra flag to disable lto. It is used to speed up building + # of _bootstrap_python and _freeze_module tools, which don't need LTO. + CONFIGURE_LDFLAGS_NOLTO=@LDFLAGS_NOLTO@ +-CONFIGURE_CPPFLAGS= @CPPFLAGS@ +-CONFIGURE_LDFLAGS= @LDFLAGS@ + # Avoid assigning CFLAGS, LDFLAGS, etc. so users can use them on the + # command line to append to these values without stomping the pre-set + # values. +-PY_CFLAGS= $(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) ++PY_CFLAGS= $(BASECFLAGS) $(OPT) $(CFLAGS) $(EXTRA_CFLAGS) + PY_CFLAGS_NODIST=$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal -I$(srcdir)/Include/internal/mimalloc + # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to + # be able to build extension modules using the directories specified in the + # environment variables +-PY_CPPFLAGS= $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS) +-PY_LDFLAGS= $(CONFIGURE_LDFLAGS) $(LDFLAGS) ++PY_CPPFLAGS= $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CPPFLAGS) ++PY_LDFLAGS= $(LDFLAGS) + PY_LDFLAGS_NODIST=$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST) + PY_LDFLAGS_NOLTO=$(PY_LDFLAGS) $(CONFIGURE_LDFLAGS_NOLTO) $(LDFLAGS_NODIST) + NO_AS_NEEDED= @NO_AS_NEEDED@ +@@ -2258,14 +2255,6 @@ bininstall: commoninstall altbininstall + else true; \ + fi + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) python3$(EXE)) +- -if test "$(VERSION)" != "$(LDVERSION)"; then \ +- rm -f $(DESTDIR)$(BINDIR)/python$(VERSION)-config; \ +- (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(LDVERSION)-config python$(VERSION)-config); \ +- rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION).pc; \ +- (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION).pc python-$(VERSION).pc); \ +- rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION)-embed.pc; \ +- (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION)-embed.pc python-$(VERSION)-embed.pc); \ +- fi + -rm -f $(DESTDIR)$(BINDIR)/python3-config + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python3-config) + -rm -f $(DESTDIR)$(LIBPC)/python3.pc +@@ -2708,6 +2697,14 @@ libainstall: all scripts + $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh + $(INSTALL_SCRIPT) python-config.py $(DESTDIR)$(LIBPL)/python-config.py + $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(LDVERSION)-config ++ -if test "$(VERSION)" != "$(LDVERSION)"; then \ ++ rm -f $(DESTDIR)$(BINDIR)/python$(VERSION)-config; \ ++ (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(LDVERSION)-config python$(VERSION)-config); \ ++ rm -f $(DESTDIR)$(LIBPC)/python-$(LDVERSION).pc; \ ++ (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION).pc python-$(LDVERSION).pc); \ ++ rm -f $(DESTDIR)$(LIBPC)/python-$(LDVERSION)-embed.pc; \ ++ (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION)-embed.pc python-$(LDVERSION)-embed.pc); \ ++ fi + $(INSTALL_SCRIPT) $(SCRIPT_IDLE) $(DESTDIR)$(BINDIR)/idle$(VERSION) + $(INSTALL_SCRIPT) $(SCRIPT_PYDOC) $(DESTDIR)$(BINDIR)/pydoc$(VERSION) + @if [ -s Modules/python.exp -a \ diff --git a/lang/python313/files/patch-Misc__python-config.sh.in b/lang/python313/files/patch-Misc__python-config.sh.in new file mode 100644 --- /dev/null +++ b/lang/python313/files/patch-Misc__python-config.sh.in @@ -0,0 +1,11 @@ +--- Misc/python-config.sh.in.orig 2018-07-13 21:07:16 UTC ++++ Misc/python-config.sh.in +@@ -15,7 +15,7 @@ fi + # Returns the actual prefix where this script was installed to. + installed_prefix () + { +- RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) ++ RESULT=$(dirname $(cd $(dirname $(realpath "$1")) && pwd -P)) + if which readlink >/dev/null 2>&1 ; then + if readlink -f "$RESULT" >/dev/null 2>&1; then + RESULT=$(readlink -f "$RESULT") diff --git a/lang/python313/files/patch-Tools_jit___targets.py b/lang/python313/files/patch-Tools_jit___targets.py new file mode 100644 --- /dev/null +++ b/lang/python313/files/patch-Tools_jit___targets.py @@ -0,0 +1,12 @@ +--- Tools/jit/_targets.py.orig 2025-04-08 13:54:08 UTC ++++ Tools/jit/_targets.py +@@ -538,6 +538,9 @@ def get_target(host: str) -> _COFF | _ELF | _MachO: + elif re.fullmatch(r"x86_64-.*-linux-gnu", host): + args = ["-fpic"] + target = _ELF(host, args=args, ghccc=True) ++ elif re.fullmatch(r"amd64-.*-freebsd.*", host): ++ args = ["-fpic"] ++ target = _ELF(host, args=args, ghccc=True) + else: + raise ValueError(host) + return target diff --git a/lang/python313/files/patch-configure b/lang/python313/files/patch-configure new file mode 100644 --- /dev/null +++ b/lang/python313/files/patch-configure @@ -0,0 +1,11 @@ +--- configure.orig 2022-11-02 01:26:00 UTC ++++ configure +@@ -7704,7 +7704,7 @@ if test "$Py_LTO" = 'true' ; then + + if test "$Py_LTO" = 'true' ; then + case $CC in +- *clang*) ++ *clang*|cc) + LDFLAGS_NOLTO="-fno-lto" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -flto=thin" >&5 + $as_echo_n "checking whether C compiler accepts -flto=thin... " >&6; } diff --git a/lang/python313/files/pkg-message.in b/lang/python313/files/pkg-message.in new file mode 100644 --- /dev/null +++ b/lang/python313/files/pkg-message.in @@ -0,0 +1,12 @@ +[ +{ type: install + message: <