UPDATE: lang/python 3.11.10 -> 3.12.8

This commit is contained in:
purplerain 2025-01-11 00:51:10 +00:00
parent 15bd75493d
commit 0bd916750b
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
20 changed files with 8535 additions and 9180 deletions

View file

@ -3,16 +3,21 @@
# requirement of the PSF license, if it constitutes a change to # requirement of the PSF license, if it constitutes a change to
# Python itself. # Python itself.
FULL_VERSION = 3.11.10 FULL_VERSION = 3.12.8
SHARED_LIBS = python3.11 0.0 SHARED_LIBS = python3.12 0.0
VERSION_SPEC = >=3.11,<3.12 VERSION_SPEC = >=3.12,<3.13
PORTROACH = limit:^3\.11 PORTROACH = limit:^3\.12
REVISION = 0 REVISION = 0
REVISION-main = 1
AUTOCONF_VERSION = 2.71
CONFIGURE_ENV += ac_cv_working_openssl_hashlib=yes \ CONFIGURE_ENV += ac_cv_working_openssl_hashlib=yes \
TCLTK_CFLAGS="-I${MODTCL_INCDIR} -I${MODTK_INCDIR} -I${X11BASE}/include" \ TCLTK_CFLAGS="-I${MODTCL_INCDIR} -I${MODTK_INCDIR} -I${X11BASE}/include" \
TCLTK_LIBS="-L${X11BASE}/lib -l${MODTCL_LIB} -l${MODTK_LIB} -lpthread" TCLTK_LIBS="-L${X11BASE}/lib -l${MODTCL_LIB} -l${MODTK_LIB} -lpthread" \
ac_cv_lib_panelw_update_panels=yes \
PANEL_LIBS="-lncursesw -lpanelw"
# disable bundled pip in favour of the version from devel/py-pip # disable bundled pip in favour of the version from devel/py-pip
CONFIGURE_ARGS += --with-ensurepip=no CONFIGURE_ARGS += --with-ensurepip=no

View file

@ -1,2 +1,2 @@
SHA256 (Python-3.11.10.tgz) = kvL68kJoG/pAbVOlHhfULFNzr/4joTDNlpfhMu9XRwY= SHA256 (Python-3.12.8.tgz) = WXhDXEeaN2ZIywKFTfO4kqzp7X0ysf6tZScSvunQOkU=
SIZE (Python-3.11.10.tgz) = 26532827 SIZE (Python-3.12.8.tgz) = 27078774

View file

@ -4,7 +4,7 @@ of changes made to this version of Python for the OpenBSD package.
1. OpenBSD packages require that sonames are under control of the 1. OpenBSD packages require that sonames are under control of the
ports infrastructure, configure.ac was patched to do this. ports infrastructure, configure.ac was patched to do this.
2. Conditionally enable modern hashes according to their availability. 2. Disable scrypt, which is not currently available in LibreSSL.
3. Disable libuuid, otherwise Python prefers it over the libc uuid 3. Disable libuuid, otherwise Python prefers it over the libc uuid
functions. functions.

View file

@ -0,0 +1,12 @@
Index: Lib/test/test_asyncio/test_events.py
--- Lib/test/test_asyncio/test_events.py.orig
+++ Lib/test/test_asyncio/test_events.py
@@ -2226,7 +2226,7 @@ else:
@support.requires_mac_ver(10, 9)
# Issue #20667: KqueueEventLoopTests.test_read_pty_output()
# hangs on OpenBSD 5.5
- @unittest.skipIf(sys.platform.startswith('openbsd'),
+ @unittest.skipIf(sys.platform.startswith('secbsd'),
'test hangs on OpenBSD')
def test_read_pty_output(self):
super().test_read_pty_output()

View file

@ -1,7 +1,7 @@
Index: Lib/test/test_fcntl.py Index: Lib/test/test_fcntl.py
--- Lib/test/test_fcntl.py.orig --- Lib/test/test_fcntl.py.orig
+++ Lib/test/test_fcntl.py +++ Lib/test/test_fcntl.py
@@ -24,7 +24,7 @@ def get_lockdata(): @@ -56,7 +56,7 @@ class TestFcntl(unittest.TestCase):
else: else:
start_len = "qq" start_len = "qq"

View file

@ -0,0 +1,12 @@
Index: Lib/test/test_posix.py
--- Lib/test/test_posix.py.orig
+++ Lib/test/test_posix.py
@@ -413,7 +413,7 @@ class PosixTester(unittest.TestCase):
# issue33655: Also ignore EINVAL on *BSD since ZFS is also
# often used there.
if inst.errno == errno.EINVAL and sys.platform.startswith(
- ('sunos', 'freebsd', 'openbsd', 'gnukfreebsd')):
+ ('sunos', 'freebsd', 'openbsd', 'secbsd', 'gnukfreebsd')):
raise unittest.SkipTest("test may fail on ZFS filesystems")
elif inst.errno == errno.EOPNOTSUPP and sys.platform.startswith("netbsd"):
raise unittest.SkipTest("test may fail on FFS filesystems")

View file

@ -1,7 +1,7 @@
Index: Lib/test/test_subprocess.py Index: Lib/test/test_subprocess.py
--- Lib/test/test_subprocess.py.orig --- Lib/test/test_subprocess.py.orig
+++ Lib/test/test_subprocess.py +++ Lib/test/test_subprocess.py
@@ -2440,7 +2440,7 @@ class POSIXProcessTestCase(BaseTestCase): @@ -2435,7 +2435,7 @@ class POSIXProcessTestCase(BaseTestCase):
getattr(p, method)(*args) getattr(p, method)(*args)
return p return p

View file

@ -1,7 +1,7 @@
Index: Lib/test/test_tempfile.py Index: Lib/test/test_tempfile.py
--- Lib/test/test_tempfile.py.orig --- Lib/test/test_tempfile.py.orig
+++ Lib/test/test_tempfile.py +++ Lib/test/test_tempfile.py
@@ -25,7 +25,7 @@ has_spawnl = hasattr(os, 'spawnl') @@ -28,7 +28,7 @@ has_spawnl = hasattr(os, 'spawnl')
# TEST_FILES may need to be tweaked for systems depending on the maximum # TEST_FILES may need to be tweaked for systems depending on the maximum
# number of files that can be opened at one time (see ulimit -n) # number of files that can be opened at one time (see ulimit -n)

View file

@ -1,57 +1,17 @@
LibreSSL has NID_sha3_256 and NID_sha512_256 now, but it's simpler to
handle -stable updates if we keep the patch until 7.4 is out.
Index: Modules/_hashopenssl.c Index: Modules/_hashopenssl.c
--- Modules/_hashopenssl.c.orig --- Modules/_hashopenssl.c.orig
+++ Modules/_hashopenssl.c +++ Modules/_hashopenssl.c
@@ -45,10 +45,18 @@ @@ -44,7 +44,9 @@
#define MUNCH_SIZE INT_MAX #define MUNCH_SIZE INT_MAX
+#ifdef NID_id_scrypt +#ifdef NID_id_scrypt
#define PY_OPENSSL_HAS_SCRYPT 1 #define PY_OPENSSL_HAS_SCRYPT 1
+#endif +#endif
+#ifdef NID_sha3_256 #if defined(NID_sha3_224) && defined(NID_sha3_256) && defined(NID_sha3_384) && defined(NID_sha3_512)
#define PY_OPENSSL_HAS_SHA3 1 #define PY_OPENSSL_HAS_SHA3 1
+#endif #endif
+#ifdef NID_shake256 @@ -922,11 +924,15 @@ py_evp_fromname(PyObject *module, const char *digestna
#define PY_OPENSSL_HAS_SHAKE 1
+#endif
+#ifdef NID_blake2s256
#define PY_OPENSSL_HAS_BLAKE2 1
+#endif
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
#define PY_EVP_MD EVP_MD
@@ -120,19 +128,27 @@ static const py_hashentry_t py_hashes[] = {
PY_HASH_ENTRY(Py_hash_sha384, "SHA384", SN_sha384, NID_sha384),
PY_HASH_ENTRY(Py_hash_sha512, "SHA512", SN_sha512, NID_sha512),
/* truncated sha2 */
+#ifdef NID_sha512_256
PY_HASH_ENTRY(Py_hash_sha512_224, "SHA512_224", SN_sha512_224, NID_sha512_224),
PY_HASH_ENTRY(Py_hash_sha512_256, "SHA512_256", SN_sha512_256, NID_sha512_256),
+#endif
/* sha3 */
+#ifdef PY_OPENSSL_HAS_SHA3
PY_HASH_ENTRY(Py_hash_sha3_224, NULL, SN_sha3_224, NID_sha3_224),
PY_HASH_ENTRY(Py_hash_sha3_256, NULL, SN_sha3_256, NID_sha3_256),
PY_HASH_ENTRY(Py_hash_sha3_384, NULL, SN_sha3_384, NID_sha3_384),
PY_HASH_ENTRY(Py_hash_sha3_512, NULL, SN_sha3_512, NID_sha3_512),
+#endif
/* sha3 shake */
+#ifdef PY_OPENSSL_HAS_SHAKE
PY_HASH_ENTRY(Py_hash_shake_128, NULL, SN_shake128, NID_shake128),
PY_HASH_ENTRY(Py_hash_shake_256, NULL, SN_shake256, NID_shake256),
+#endif
/* blake2 digest */
+#ifdef PY_OPENSSL_HAS_BLAKE2
PY_HASH_ENTRY(Py_hash_blake2s, "blake2s256", SN_blake2s256, NID_blake2s256),
PY_HASH_ENTRY(Py_hash_blake2b, "blake2b512", SN_blake2b512, NID_blake2b512),
+#endif
PY_HASH_ENTRY(NULL, NULL, NULL, 0),
};
@@ -874,11 +890,15 @@ py_evp_fromname(PyObject *module, const char *digestna
goto exit; goto exit;
} }

View file

@ -1,7 +1,7 @@
Index: Modules/_ssl.c Index: Modules/_ssl.c
--- Modules/_ssl.c.orig --- Modules/_ssl.c.orig
+++ Modules/_ssl.c +++ Modules/_ssl.c
@@ -4541,7 +4541,7 @@ set_sni_callback(PySSLContext *self, PyObject *arg, vo @@ -4469,7 +4469,7 @@ set_sni_callback(PySSLContext *self, PyObject *arg, vo
return 0; return 0;
} }

View file

@ -1,7 +1,7 @@
Index: Python/fileutils.c Index: Python/fileutils.c
--- Python/fileutils.c.orig --- Python/fileutils.c.orig
+++ Python/fileutils.c +++ Python/fileutils.c
@@ -2614,9 +2614,9 @@ done: @@ -2875,9 +2875,9 @@ done:
* non-opened fd in the middle. * non-opened fd in the middle.
* 2b. If fdwalk(3) isn't available, just do a plain close(2) loop. * 2b. If fdwalk(3) isn't available, just do a plain close(2) loop.
*/ */
@ -9,7 +9,7 @@ Index: Python/fileutils.c
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__SecBSD__) +#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__SecBSD__)
# define USE_CLOSEFROM # define USE_CLOSEFROM
-#endif /* __FreeBSD__ */ -#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__ || __OpenBSD__ */ +#endif /* __FreeBSD__ || __OpenBSD__ || __SecBSD__ */
#ifdef HAVE_FDWALK #ifdef HAVE_FDWALK
# define USE_FDWALK # define USE_FDWALK

View file

@ -7,25 +7,25 @@
Index: configure.ac Index: configure.ac
--- configure.ac.orig --- configure.ac.orig
+++ configure.ac +++ configure.ac
@@ -249,7 +249,7 @@ VERSION=PYTHON_VERSION @@ -251,7 +251,7 @@ VERSION=PYTHON_VERSION
# Version number of Python's own shared library file. # Version number of Python's own shared library file.
AC_SUBST(SOVERSION) AC_SUBST([SOVERSION])
-SOVERSION=1.0 -SOVERSION=1.0
+SOVERSION=${LIBpython3.11_VERSION} +SOVERSION=0.0
# The later definition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # The later definition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
# certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable # certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable
@@ -645,7 +645,7 @@ case $ac_sys_system/$ac_sys_release in @@ -651,7 +651,7 @@ case $ac_sys_system/$ac_sys_release in
# As this has a different meaning on Linux, only define it on OpenBSD AC_DEFINE([_BSD_SOURCE], [1],
AC_DEFINE(_BSD_SOURCE, 1, [Define on OpenBSD to activate all library features]) [Define on OpenBSD to activate all library features])
;; ;;
- OpenBSD/*) - OpenBSD/*)
+ OpenBSD/*|SecBSD/*) + OpenBSD/*|SecBSD/*)
# OpenBSD undoes our definition of __BSD_VISIBLE if _XOPEN_SOURCE is # OpenBSD undoes our definition of __BSD_VISIBLE if _XOPEN_SOURCE is
# also defined. This can be overridden by defining _BSD_SOURCE # also defined. This can be overridden by defining _BSD_SOURCE
# As this has a different meaning on Linux, only define it on OpenBSD # As this has a different meaning on Linux, only define it on OpenBSD
@@ -1104,6 +1104,8 @@ AC_MSG_CHECKING([for multiarch]) @@ -1123,6 +1123,8 @@ AC_MSG_CHECKING([for multiarch])
AS_CASE([$ac_sys_system], AS_CASE([$ac_sys_system],
[Darwin*], [MULTIARCH=""], [Darwin*], [MULTIARCH=""],
[FreeBSD*], [MULTIARCH=""], [FreeBSD*], [MULTIARCH=""],
@ -34,7 +34,7 @@ Index: configure.ac
[MULTIARCH=$($CC --print-multiarch 2>/dev/null)] [MULTIARCH=$($CC --print-multiarch 2>/dev/null)]
) )
AC_SUBST([MULTIARCH]) AC_SUBST([MULTIARCH])
@@ -1493,7 +1495,7 @@ if test $enable_shared = "yes"; then @@ -1517,7 +1519,7 @@ if test $enable_shared = "yes"; then
PY3LIBRARY=libpython3.so PY3LIBRARY=libpython3.so
fi fi
;; ;;
@ -43,8 +43,8 @@ Index: configure.ac
LDLIBRARY='libpython$(LDVERSION).so' LDLIBRARY='libpython$(LDVERSION).so'
BLDLIBRARY='-L. -lpython$(LDVERSION)' BLDLIBRARY='-L. -lpython$(LDVERSION)'
RUNSHARED=LD_LIBRARY_PATH=`pwd`${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} RUNSHARED=LD_LIBRARY_PATH=`pwd`${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
@@ -1843,13 +1845,13 @@ esac @@ -1858,13 +1860,13 @@ esac
[AC_MSG_RESULT(no)]) [AC_MSG_RESULT([no])])
if test "$Py_LTO" = 'true' ; then if test "$Py_LTO" = 'true' ; then
case $CC in case $CC in
- *clang*) - *clang*)
@ -53,13 +53,13 @@ Index: configure.ac
dnl Clang linker requires -flto in order to link objects with LTO information. dnl Clang linker requires -flto in order to link objects with LTO information.
dnl Thin LTO is faster and works for object files with full LTO information, too. dnl Thin LTO is faster and works for object files with full LTO information, too.
AX_CHECK_COMPILE_FLAG([-flto=thin],[LDFLAGS_NOLTO="-flto=thin"],[LDFLAGS_NOLTO="-flto"]) AX_CHECK_COMPILE_FLAG([-flto=thin],[LDFLAGS_NOLTO="-flto=thin"],[LDFLAGS_NOLTO="-flto"])
AC_SUBST(LLVM_AR) AC_SUBST([LLVM_AR])
- AC_PATH_TOOL(LLVM_AR, llvm-ar, '', ${llvm_path}) - AC_PATH_TOOL([LLVM_AR], [llvm-ar], [''], [${llvm_path}])
+ AC_PATH_TOOL(LLVM_AR, ar, '', ${llvm_path}) + AC_PATH_TOOL([LLVM_AR], [ar], [''], [${llvm_path}])
AC_SUBST(LLVM_AR_FOUND) AC_SUBST([LLVM_AR_FOUND])
if test -n "${LLVM_AR}" -a -x "${LLVM_AR}" if test -n "${LLVM_AR}" -a -x "${LLVM_AR}"
then then
@@ -1964,7 +1966,7 @@ then @@ -1987,7 +1989,7 @@ then
fi fi
LLVM_PROF_ERR=no LLVM_PROF_ERR=no
case $CC in case $CC in
@ -67,8 +67,8 @@ Index: configure.ac
+ *clang*|cc) + *clang*|cc)
# Any changes made here should be reflected in the GCC+Darwin case below # Any changes made here should be reflected in the GCC+Darwin case below
PGO_PROF_GEN_FLAG="-fprofile-instr-generate" PGO_PROF_GEN_FLAG="-fprofile-instr-generate"
PGO_PROF_USE_FLAG="-fprofile-instr-use=code.profclangd" PGO_PROF_USE_FLAG="-fprofile-instr-use=\"\$(shell pwd)/code.profclangd\""
@@ -3193,7 +3195,7 @@ then @@ -3373,7 +3375,7 @@ then
else else
LDSHARED="ld -Bshareable" LDSHARED="ld -Bshareable"
fi;; fi;;
@ -77,7 +77,7 @@ Index: configure.ac
if [[ "`$CC -dM -E - </dev/null | grep __ELF__`" != "" ]] if [[ "`$CC -dM -E - </dev/null | grep __ELF__`" != "" ]]
then then
LDSHARED='$(CC) -shared $(CCSHARED)' LDSHARED='$(CC) -shared $(CCSHARED)'
@@ -3269,7 +3271,7 @@ then @@ -3449,7 +3451,7 @@ then
AS_VAR_IF([enable_wasm_dynamic_linking], [yes], [ AS_VAR_IF([enable_wasm_dynamic_linking], [yes], [
CCSHARED="-fPIC" CCSHARED="-fPIC"
]);; ]);;
@ -86,7 +86,7 @@ Index: configure.ac
Haiku*) CCSHARED="-fPIC";; Haiku*) CCSHARED="-fPIC";;
OpenUNIX*|UnixWare*) OpenUNIX*|UnixWare*)
if test "$GCC" = "yes" if test "$GCC" = "yes"
@@ -3326,7 +3328,7 @@ then @@ -3506,7 +3508,7 @@ then
OpenUNIX*|UnixWare*) LINKFORSHARED="-Wl,-Bexport";; OpenUNIX*|UnixWare*) LINKFORSHARED="-Wl,-Bexport";;
SCO_SV*) LINKFORSHARED="-Wl,-Bexport";; SCO_SV*) LINKFORSHARED="-Wl,-Bexport";;
ReliantUNIX*) LINKFORSHARED="-W1 -Blargedynsym";; ReliantUNIX*) LINKFORSHARED="-W1 -Blargedynsym";;
@ -95,7 +95,7 @@ Index: configure.ac
if [[ "`$CC -dM -E - </dev/null | grep __ELF__`" != "" ]] if [[ "`$CC -dM -E - </dev/null | grep __ELF__`" != "" ]]
then then
LINKFORSHARED="-Wl,--export-dynamic" LINKFORSHARED="-Wl,--export-dynamic"
@@ -3888,11 +3890,7 @@ dnl Detect Tcl/Tk. Use pkg-config if available. @@ -4128,11 +4130,7 @@ dnl Detect Tcl/Tk. Use pkg-config if available.
dnl dnl
found_tcltk=no found_tcltk=no
for _QUERY in \ for _QUERY in \

View file

@ -1,14 +1,8 @@
@option no-default-conflict @option no-default-conflict
@option is-branch @option is-branch
@conflict python-gdbm-${VERSION_SPEC} @conflict python-gdbm->=3,<4
@pkgpath lang/python/3.2,-gdbm
@pkgpath lang/python/3.3,-gdbm
@pkgpath lang/python/3.4,-gdbm
@pkgpath lang/python/3.5,-gdbm
@pkgpath lang/python/3.6,-gdbm
@pkgpath lang/python/3.7,-gdbm
@pkgpath lang/python/3.8,-gdbm @pkgpath lang/python/3.8,-gdbm
@pkgpath lang/python/3.9,-gdbm @pkgpath lang/python/3.9,-gdbm
@pkgpath lang/python/3.10,-gdbm @pkgpath lang/python/3.10,-gdbm
@pkgpath lang/python/3.11,-gdbm @pkgpath lang/python/3.11,-gdbm
@so lib/python3.11/lib-dynload/_gdbm.cpython-311.so @so lib/python3.12/lib-dynload/_gdbm.cpython-312.so

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,160 +1,154 @@
@option no-default-conflict @option no-default-conflict
@option is-branch @option is-branch
@conflict python-tkinter-${VERSION_SPEC} @conflict python-tkinter->=3,<4
@pkgpath lang/python/3.2,-tkinter
@pkgpath lang/python/3.3,-tkinter
@pkgpath lang/python/3.4,-tkinter
@pkgpath lang/python/3.5,-tkinter
@pkgpath lang/python/3.6,-tkinter
@pkgpath lang/python/3.7,-tkinter
@pkgpath lang/python/3.8,-tkinter @pkgpath lang/python/3.8,-tkinter
@pkgpath lang/python/3.9,-tkinter @pkgpath lang/python/3.9,-tkinter
@pkgpath lang/python/3.10,-tkinter @pkgpath lang/python/3.10,-tkinter
@pkgpath lang/python/3.11,-tkinter @pkgpath lang/python/3.11,-tkinter
@so lib/python3.11/lib-dynload/_tkinter.cpython-311.so @so lib/python3.12/lib-dynload/_tkinter.cpython-312.so
lib/python3.11/tkinter/ lib/python3.12/tkinter/
lib/python3.11/tkinter/__init__.py lib/python3.12/tkinter/__init__.py
lib/python3.11/tkinter/__main__.py lib/python3.12/tkinter/__main__.py
lib/python3.11/tkinter/__pycache__/ lib/python3.12/tkinter/__pycache__/
lib/python3.11/tkinter/__pycache__/__init__.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/__init__.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/__init__.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/__init__.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/__init__.cpython-311.pyc lib/python3.12/tkinter/__pycache__/__init__.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/__main__.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/__main__.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/__main__.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/__main__.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/__main__.cpython-311.pyc lib/python3.12/tkinter/__pycache__/__main__.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/colorchooser.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/colorchooser.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/colorchooser.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/colorchooser.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/colorchooser.cpython-311.pyc lib/python3.12/tkinter/__pycache__/colorchooser.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/commondialog.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/commondialog.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/commondialog.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/commondialog.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/commondialog.cpython-311.pyc lib/python3.12/tkinter/__pycache__/commondialog.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/constants.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/constants.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/constants.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/constants.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/constants.cpython-311.pyc lib/python3.12/tkinter/__pycache__/constants.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/dialog.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/dialog.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/dialog.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/dialog.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/dialog.cpython-311.pyc lib/python3.12/tkinter/__pycache__/dialog.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/dnd.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/dnd.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/dnd.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/dnd.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/dnd.cpython-311.pyc lib/python3.12/tkinter/__pycache__/dnd.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/filedialog.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/filedialog.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/filedialog.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/filedialog.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/filedialog.cpython-311.pyc lib/python3.12/tkinter/__pycache__/filedialog.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/font.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/font.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/font.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/font.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/font.cpython-311.pyc lib/python3.12/tkinter/__pycache__/font.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/messagebox.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/messagebox.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/messagebox.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/messagebox.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/messagebox.cpython-311.pyc lib/python3.12/tkinter/__pycache__/messagebox.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/scrolledtext.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/scrolledtext.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/scrolledtext.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/scrolledtext.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/scrolledtext.cpython-311.pyc lib/python3.12/tkinter/__pycache__/scrolledtext.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/simpledialog.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/simpledialog.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/simpledialog.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/simpledialog.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/simpledialog.cpython-311.pyc lib/python3.12/tkinter/__pycache__/simpledialog.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/tix.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/tix.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/tix.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/tix.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/tix.cpython-311.pyc lib/python3.12/tkinter/__pycache__/tix.cpython-312.pyc
lib/python3.11/tkinter/__pycache__/ttk.cpython-311.opt-1.pyc lib/python3.12/tkinter/__pycache__/ttk.cpython-312.opt-1.pyc
lib/python3.11/tkinter/__pycache__/ttk.cpython-311.opt-2.pyc lib/python3.12/tkinter/__pycache__/ttk.cpython-312.opt-2.pyc
lib/python3.11/tkinter/__pycache__/ttk.cpython-311.pyc lib/python3.12/tkinter/__pycache__/ttk.cpython-312.pyc
lib/python3.11/tkinter/colorchooser.py lib/python3.12/tkinter/colorchooser.py
lib/python3.11/tkinter/commondialog.py lib/python3.12/tkinter/commondialog.py
lib/python3.11/tkinter/constants.py lib/python3.12/tkinter/constants.py
lib/python3.11/tkinter/dialog.py lib/python3.12/tkinter/dialog.py
lib/python3.11/tkinter/dnd.py lib/python3.12/tkinter/dnd.py
lib/python3.11/tkinter/filedialog.py lib/python3.12/tkinter/filedialog.py
lib/python3.11/tkinter/font.py lib/python3.12/tkinter/font.py
lib/python3.11/tkinter/messagebox.py lib/python3.12/tkinter/messagebox.py
lib/python3.11/tkinter/scrolledtext.py lib/python3.12/tkinter/scrolledtext.py
lib/python3.11/tkinter/simpledialog.py lib/python3.12/tkinter/simpledialog.py
lib/python3.11/tkinter/tix.py lib/python3.12/tkinter/tix.py
lib/python3.11/tkinter/ttk.py lib/python3.12/tkinter/ttk.py
lib/python3.11/turtle.py lib/python3.12/turtle.py
lib/python3.11/turtledemo/ lib/python3.12/turtledemo/
lib/python3.11/turtledemo/__init__.py lib/python3.12/turtledemo/__init__.py
lib/python3.11/turtledemo/__main__.py lib/python3.12/turtledemo/__main__.py
lib/python3.11/turtledemo/__pycache__/ lib/python3.12/turtledemo/__pycache__/
lib/python3.11/turtledemo/__pycache__/__init__.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/__init__.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/__init__.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/__init__.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/__init__.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/__init__.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/__main__.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/__main__.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/__main__.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/__main__.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/__main__.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/__main__.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/bytedesign.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/bytedesign.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/bytedesign.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/bytedesign.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/bytedesign.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/bytedesign.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/chaos.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/chaos.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/chaos.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/chaos.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/chaos.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/chaos.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/clock.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/clock.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/clock.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/clock.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/clock.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/clock.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/colormixer.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/colormixer.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/colormixer.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/colormixer.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/colormixer.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/colormixer.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/forest.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/forest.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/forest.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/forest.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/forest.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/forest.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/fractalcurves.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/fractalcurves.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/fractalcurves.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/fractalcurves.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/fractalcurves.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/fractalcurves.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/lindenmayer.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/lindenmayer.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/lindenmayer.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/lindenmayer.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/lindenmayer.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/lindenmayer.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/minimal_hanoi.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/minimal_hanoi.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/minimal_hanoi.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/minimal_hanoi.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/minimal_hanoi.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/minimal_hanoi.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/nim.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/nim.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/nim.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/nim.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/nim.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/nim.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/paint.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/paint.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/paint.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/paint.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/paint.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/paint.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/peace.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/peace.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/peace.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/peace.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/peace.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/peace.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/penrose.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/penrose.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/penrose.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/penrose.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/penrose.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/penrose.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/planet_and_moon.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/planet_and_moon.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/planet_and_moon.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/planet_and_moon.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/planet_and_moon.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/planet_and_moon.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/rosette.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/rosette.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/rosette.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/rosette.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/rosette.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/rosette.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/round_dance.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/round_dance.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/round_dance.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/round_dance.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/round_dance.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/round_dance.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/sorting_animate.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/sorting_animate.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/sorting_animate.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/sorting_animate.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/sorting_animate.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/sorting_animate.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/tree.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/tree.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/tree.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/tree.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/tree.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/tree.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/two_canvases.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/two_canvases.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/two_canvases.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/two_canvases.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/two_canvases.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/two_canvases.cpython-312.pyc
lib/python3.11/turtledemo/__pycache__/yinyang.cpython-311.opt-1.pyc lib/python3.12/turtledemo/__pycache__/yinyang.cpython-312.opt-1.pyc
lib/python3.11/turtledemo/__pycache__/yinyang.cpython-311.opt-2.pyc lib/python3.12/turtledemo/__pycache__/yinyang.cpython-312.opt-2.pyc
lib/python3.11/turtledemo/__pycache__/yinyang.cpython-311.pyc lib/python3.12/turtledemo/__pycache__/yinyang.cpython-312.pyc
lib/python3.11/turtledemo/bytedesign.py lib/python3.12/turtledemo/bytedesign.py
lib/python3.11/turtledemo/chaos.py lib/python3.12/turtledemo/chaos.py
lib/python3.11/turtledemo/clock.py lib/python3.12/turtledemo/clock.py
lib/python3.11/turtledemo/colormixer.py lib/python3.12/turtledemo/colormixer.py
lib/python3.11/turtledemo/forest.py lib/python3.12/turtledemo/forest.py
lib/python3.11/turtledemo/fractalcurves.py lib/python3.12/turtledemo/fractalcurves.py
lib/python3.11/turtledemo/lindenmayer.py lib/python3.12/turtledemo/lindenmayer.py
lib/python3.11/turtledemo/minimal_hanoi.py lib/python3.12/turtledemo/minimal_hanoi.py
lib/python3.11/turtledemo/nim.py lib/python3.12/turtledemo/nim.py
lib/python3.11/turtledemo/paint.py lib/python3.12/turtledemo/paint.py
lib/python3.11/turtledemo/peace.py lib/python3.12/turtledemo/peace.py
lib/python3.11/turtledemo/penrose.py lib/python3.12/turtledemo/penrose.py
lib/python3.11/turtledemo/planet_and_moon.py lib/python3.12/turtledemo/planet_and_moon.py
lib/python3.11/turtledemo/rosette.py lib/python3.12/turtledemo/rosette.py
lib/python3.11/turtledemo/round_dance.py lib/python3.12/turtledemo/round_dance.py
lib/python3.11/turtledemo/sorting_animate.py lib/python3.12/turtledemo/sorting_animate.py
lib/python3.11/turtledemo/tree.py lib/python3.12/turtledemo/tree.py
lib/python3.11/turtledemo/turtle.cfg lib/python3.12/turtledemo/turtle.cfg
lib/python3.11/turtledemo/two_canvases.py lib/python3.12/turtledemo/two_canvases.py
lib/python3.11/turtledemo/yinyang.py lib/python3.12/turtledemo/yinyang.py

View file

@ -1,5 +1,4 @@
SUBDIR = SUBDIR =
SUBDIR += 2.7
SUBDIR += 3 SUBDIR += 3
.include <bsd.port.subdir.mk> .include <bsd.port.subdir.mk>

View file

@ -110,8 +110,6 @@ LIB_DEPENDS-tkinter = lang/python/${V_SUBDIR},-main \
WANTLIB-tkinter = pthread python${VERSION} \ WANTLIB-tkinter = pthread python${VERSION} \
${MODTK_WANTLIB} ${MODTK_WANTLIB}
AUTOCONF_VERSION = 2.69
CONFIGURE_STYLE = autoconf CONFIGURE_STYLE = autoconf
CONFIGURE_ARGS += --enable-shared CONFIGURE_ARGS += --enable-shared
CONFIGURE_ARGS += --enable-ipv6 \ CONFIGURE_ARGS += --enable-ipv6 \
@ -146,7 +144,7 @@ MAKE_FLAGS += LD_LIBRARY_PATH=${WRKSRC} PATH="${WRKDIST}:${PORTPATH}"
MAKE_FLAGS += CFLAGS_NODIST='-I${LOCALBASE}/include' LDFLAGS_NODIST='-L${WRKSRC} -L${LOCALBASE}/lib/' MAKE_FLAGS += CFLAGS_NODIST='-I${LOCALBASE}/include' LDFLAGS_NODIST='-L${WRKSRC} -L${LOCALBASE}/lib/'
FAKE_FLAGS += RANLIB=: FAKE_FLAGS += RANLIB=:
PY_PLATFORM = openbsd${OSMAJOR} PY_PLATFORM = secbsd${OSMAJOR}
SUBST_VARS += FULL_VERSION VERSION_SPEC PY_PLATFORM SUBST_VARS += FULL_VERSION VERSION_SPEC PY_PLATFORM
# Python itself is clean, but some dlopen()'d extensions e.g. QtWebKit # Python itself is clean, but some dlopen()'d extensions e.g. QtWebKit

View file

@ -1,54 +1,37 @@
# python.port.mk - Xavier Santolaria <xavier@santolaria.net> # python.port.mk - This file is in the public domain.
# This file is in the public domain. # Xavier Santolaria <xavier@santolaria.net>
# Stuart Henderson <stu@spacehopper.org>
CATEGORIES += lang/python CATEGORIES += lang/python
# define the default versions # define the default versions
MODPY_DEFAULT_VERSION_2 = 2.7 MODPY_DEFAULT_VERSION_2 = 2.7
MODPY_DEFAULT_VERSION_3 = 3.11 MODPY_DEFAULT_VERSION_3 = 3.12
MODPY_VERSION ?= ${MODPY_DEFAULT_VERSION_3}
# If switching to a new MODPY_DEFAULT_VERSION_3, say 3.x to 3.y: # If switching to a new MODPY_DEFAULT_VERSION_3, say 3.x to 3.y:
# - All ports with PLISTs that depend on the Python version number # - All ports with PLISTs that depend on the Python version number
# must be REVISION-bumped. # must be REVISION-bumped.
# - Keep xenocara/share/mk/bsd.xorg.mk PYTHON_VERSION in sync # - Keep xenocara/share/mk/bsd.xorg.mk PYTHON_VERSION in sync.
.if !defined(MODPY_VERSION)
FLAVOR ?=
. if !defined(FLAVORS) || !${FLAVORS:Mpython3} || ${FLAVOR:Mpython3}
# for standard "python3-flavoured" ports (normal for py-* modules),
# set the default MODPY_VERSION for the usual py3 version
MODPY_VERSION ?= ${MODPY_DEFAULT_VERSION_3}
. else
# for unflavoured "py2+py3" ports (again normal for py-* modules),
# set the default MODPY_VERSION for the usual py2 version
. if defined(FLAVORS) && ${FLAVORS:Mpython3}
MODPY_VERSION ?= ${MODPY_DEFAULT_VERSION_2}
. else
# ports which don't have a python3 FLAVOR are either old py2-only py-*
# modules, or are other ports which use Python (e.g. those which are
# intended as a standalone program rather than a py-* module).
# in that case, use the usual py3 version; old py2-only modules
# will set MODPY_VERSION themselves.
. endif
. endif
.endif
# verify if MODPY_VERSION found is correct # verify if MODPY_VERSION found is correct
.if ${MODPY_VERSION} == "2.7" .if ${MODPY_VERSION} == "2.7"
_MODPY_SUBDIR = 2.7 _MODPY_SUBDIR = 2.7
.elif ${MODPY_VERSION} == "3.11" .elif ${MODPY_VERSION} == "3.12"
_MODPY_SUBDIR = 3 _MODPY_SUBDIR = 3
.else .else
ERRORS += "Fatal: unknown or unsupported MODPY_VERSION: ${MODPY_VERSION}" ERRORS += "Fatal: unknown or unsupported MODPY_VERSION: ${MODPY_VERSION}"
.endif .endif
MODPY_WANTLIB = python${MODPY_VERSION}
MODPY_RUN_DEPENDS = lang/python/${_MODPY_SUBDIR}
MODPY_LIB_DEPENDS = lang/python/${_MODPY_SUBDIR}
_MODPY_BUILD_DEPENDS = lang/python/${_MODPY_SUBDIR}
MODPY_TKINTER_DEPENDS = lang/python/${_MODPY_SUBDIR},-tkinter
MODPY_MAJOR_VERSION = ${MODPY_VERSION:R} MODPY_MAJOR_VERSION = ${MODPY_VERSION:R}
.if ${MODPY_MAJOR_VERSION} == 2 .if ${MODPY_MAJOR_VERSION} == 2
MODPY_FLAVOR =
# use MODPY_BIN_SUFFIX for binaries to avoid conflict
MODPY_BIN_SUFFIX = -2
MODPY_PY_PREFIX = py- MODPY_PY_PREFIX = py-
MODPY_PYCACHE = MODPY_PYCACHE =
MODPY_PYC_MAGIC_TAG = MODPY_PYC_MAGIC_TAG =
@ -56,10 +39,8 @@ MODPY_COMMENT = "@comment "
MODPY_ABI3SO = MODPY_ABI3SO =
MODPY_PYOEXTENSION = pyo MODPY_PYOEXTENSION = pyo
.elif ${MODPY_MAJOR_VERSION} == 3 .elif ${MODPY_MAJOR_VERSION} == 3
# replace py- prefix by py3- # replace py- prefix with py3-
FULLPKGNAME ?= ${PKGNAME:S/^py-/py3-/}${FLAVOR_EXT:S/-python3//} FULLPKGNAME ?= ${PKGNAME:S/^py-/py3-/}${FLAVOR_EXT}
MODPY_FLAVOR = ,python3
MODPY_BIN_SUFFIX =
MODPY_PY_PREFIX = py3- MODPY_PY_PREFIX = py3-
MODPY_PYCACHE = __pycache__/ MODPY_PYCACHE = __pycache__/
MODPY_MAJORMINOR = ${MODPY_VERSION:C/\.//g} MODPY_MAJORMINOR = ${MODPY_VERSION:C/\.//g}
@ -83,19 +64,9 @@ MODPY_PYTEST ?= No
MODPY_PYTEST ?= Yes MODPY_PYTEST ?= Yes
.endif .endif
MODPY_WANTLIB = python${MODPY_VERSION}
MODPY_RUN_DEPENDS = lang/python/${_MODPY_SUBDIR}
MODPY_LIB_DEPENDS = lang/python/${_MODPY_SUBDIR}
_MODPY_BUILD_DEPENDS = lang/python/${_MODPY_SUBDIR}
.if ${MODPY_PYTEST:L} == "yes" .if ${MODPY_PYTEST:L} == "yes"
. if ${MODPY_VERSION} == ${MODPY_DEFAULT_VERSION_2}
NO_TEST = Yes
. else
MODPY_TEST_DEPENDS = ${RUN_DEPENDS} MODPY_TEST_DEPENDS = ${RUN_DEPENDS}
MODPY_TEST_DEPENDS += devel/py-test${MODPY_FLAVOR} MODPY_TEST_DEPENDS += devel/py-test
. endif
.else .else
MODPY_TEST_DEPENDS = ${MODPY_RUN_DEPENDS} MODPY_TEST_DEPENDS = ${MODPY_RUN_DEPENDS}
.endif .endif
@ -126,30 +97,35 @@ TEST_DEPENDS += ${MODPY_TEST_DEPENDS}
_MODPY_PRE_BUILD_STEPS = : _MODPY_PRE_BUILD_STEPS = :
.if ${MODPY_PYBUILD:L} == "no" .if ${MODPY_PYBUILD:L} == "no" && ${MODPY_MAJOR_VERSION} != 2
# not necessarily an error, but try to draw attention to it. defer printing
# the warning to fake-install where it's less likely to scroll off the screen.
_MODPY_PRE_BUILD_STEPS += ; if [ -e ${WRKSRC}/pyproject.toml ] && \ _MODPY_PRE_BUILD_STEPS += ; if [ -e ${WRKSRC}/pyproject.toml ] && \
grep -q ^build-backend ${WRKSRC}/pyproject.toml && \ grep -q ^build-backend ${WRKSRC}/pyproject.toml; then \
! grep -q ^build-backend.*setuptools ${WRKSRC}/pyproject.toml; then \ (echo; echo '*** Ports with pyproject.toml should normally use MODPY_PYBUILD'; \
printf "\n***\n\nOpenBSD ports: should this use MODPY_PYBUILD?\n"; \ grep -H ^build-backend ${WRKSRC}/pyproject.toml; echo ) >> \
grep ^build-backend ${WRKSRC}/pyproject.toml || true; \ ${WRKDIR}/.modpy-warn; \
printf "\n***\n\n"; fi fi
.endif .endif
_MODPY_USE_CARGO = No
.if ${MODPY_SETUPTOOLS:L} == "yes" .if ${MODPY_SETUPTOOLS:L} == "yes"
. if ${MODPY_PYBUILD:L} != "no" . if ${MODPY_PYBUILD:L} != "no"
ERRORS += "Fatal: don't set both MODPY_PYBUILD and MODPY_SETUPTOOLS" ERRORS += "Fatal: both MODPY_PYBUILD and MODPY_SETUPTOOLS are set. Just use MODPY_PYBUILD."
. endif . endif
# For Python 2, setuptools provides a package locator that # For Python 2, setuptools provides a package locator that is required at
# is required at runtime for the pkg_resources stuff to work # runtime for pkg_resources to work, so an RDEP is needed.
# For Python 3, normally importlib.metadata (in Python core # For Python 3, pkg_resources is deprecated - Python core has similar
# in newer versions) or importlib_metadata (external module) # functionality in importlib.metadata.
# are used in preference. # If a py3 port still needs pkg_resources, expect deprecation warnings
# at runtime, and in that case an RDEP on setuptools should be added
# manually.
. if ${MODPY_MAJOR_VERSION} == 2 . if ${MODPY_MAJOR_VERSION} == 2
MODPY_SETUPUTILS_DEPEND ?= devel/py2-setuptools MODPY_SETUPUTILS_DEPEND ?= devel/py2-setuptools
MODPY_RUN_DEPENDS += ${MODPY_SETUPUTILS_DEPEND} MODPY_RUN_DEPENDS += ${MODPY_SETUPUTILS_DEPEND}
. else . else
MODPY_SETUPUTILS_DEPEND ?= devel/py-setuptools${MODPY_FLAVOR} MODPY_SETUPUTILS_DEPEND ?= devel/py-setuptools
. endif . endif
BUILD_DEPENDS += ${MODPY_SETUPUTILS_DEPEND} BUILD_DEPENDS += ${MODPY_SETUPUTILS_DEPEND}
@ -158,51 +134,66 @@ MODPY_SETUPUTILS = Yes
# The setuptools uses test target # The setuptools uses test target
TEST_TARGET ?= test TEST_TARGET ?= test
_MODPY_USERBASE = _MODPY_USERBASE =
_MODPY_PRE_BUILD_STEPS += ;[ -e ${WRKSRC}/${MODPY_SETUP} ] || \
( printf '%s\n%s\n' \
'\# generated by python.port.mk' \
'from setuptools import setup; setup()' \
> ${WRKSRC}/${MODPY_SETUP}; \
echo '*** generating minimal setup.py; consider using MODPY_PYBUILD')
_MODPY_PRE_BUILD_STEPS += ;${MODPY_CMD} egg_info || true _MODPY_PRE_BUILD_STEPS += ;${MODPY_CMD} egg_info || true
# Setuptools opportunistically picks up plugins. If it picks one up that
# uses finalize_distribution_options (usually setuptools_scm), junking
# that plugin will cause failure at the end of build.
# In the absence of a targetted means of disabling this, use a big hammer:
DPB_PROPERTIES += nojunk
.elif ${MODPY_PYBUILD:L} != no .elif ${MODPY_PYBUILD:L} != no
BUILD_DEPENDS += devel/py-build${MODPY_FLAVOR} \ BUILD_DEPENDS += devel/py-build \
devel/py-installer${MODPY_FLAVOR} devel/py-installer
. if ${MODPY_PYBUILD} == flit . if ${MODPY_PYBUILD} == flit
BUILD_DEPENDS += devel/py-flit${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-flit
. elif ${MODPY_PYBUILD} == flit_core . elif ${MODPY_PYBUILD} == flit_core
BUILD_DEPENDS += devel/py-flit_core${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-flit_core
. elif ${MODPY_PYBUILD} == flit_scm . elif ${MODPY_PYBUILD} == flit_scm
BUILD_DEPENDS += devel/py-flit_scm${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-flit_scm
. elif ${MODPY_PYBUILD} == hatch-vcs . elif ${MODPY_PYBUILD} == hatch-vcs
BUILD_DEPENDS += devel/py-hatch-vcs${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-hatch-vcs
_MODPY_EXPECTED_BACKEND = hatchling
. elif ${MODPY_PYBUILD} == hatchling . elif ${MODPY_PYBUILD} == hatchling
BUILD_DEPENDS += devel/py-hatchling${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-hatchling
. elif ${MODPY_PYBUILD} == jupyter_packaging . elif ${MODPY_PYBUILD} == jupyter_packaging
BUILD_DEPENDS += devel/py-jupyter_packaging${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-jupyter_packaging
_MODPY_EXPECTED_BACKEND = setuptools
. elif ${MODPY_PYBUILD} == maturin . elif ${MODPY_PYBUILD} == maturin
BUILD_DEPENDS += devel/maturin BUILD_DEPENDS += devel/maturin
MODCARGO_CARGO_BIN = maturin
_MODPY_WHEELSDIR = target/wheels
_MODPY_USE_CARGO = Yes
. elif ${MODPY_PYBUILD} == mesonpy
BUILD_DEPENDS += devel/meson-python
. elif ${MODPY_PYBUILD} == pbr
BUILD_DEPENDS += devel/py-pbr \
devel/py-setuptools \
devel/py-wheel
. elif ${MODPY_PYBUILD} == pdm . elif ${MODPY_PYBUILD} == pdm
BUILD_DEPENDS += devel/py-pdm-backend${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-pdm-backend
. elif ${MODPY_PYBUILD} == poetry-core . elif ${MODPY_PYBUILD} == poetry-core
BUILD_DEPENDS += devel/py-poetry-core${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-poetry-core
. elif ${MODPY_PYBUILD} == setuptools || ${MODPY_PYBUILD} == setuptools_scm _MODPY_EXPECTED_BACKEND = poetry.core
BUILD_DEPENDS += devel/py-setuptools${MODPY_FLAVOR} \ . elif ${MODPY_PYBUILD} == setuptools || \
devel/py-wheel${MODPY_FLAVOR} ${MODPY_PYBUILD} == setuptools_scm || \
${MODPY_PYBUILD} == setuptools-rust
BUILD_DEPENDS += devel/py-setuptools \
devel/py-wheel
_MODPY_EXPECTED_BACKEND = setuptools
. if ${MODPY_PYBUILD} == setuptools_scm . if ${MODPY_PYBUILD} == setuptools_scm
BUILD_DEPENDS += devel/py-setuptools_scm${MODPY_FLAVOR} BUILD_DEPENDS += devel/py-setuptools_scm
. elif ${MODPY_PYBUILD} == setuptools-rust
BUILD_DEPENDS += devel/py-setuptools-rust
_MODPY_USE_CARGO = Yes
. endif . endif
. elif !${MODPY_PYBUILD:L:Mother} . elif !${MODPY_PYBUILD:L:Mother}
ERRORS += "Fatal: unknown MODPY_PYBUILD value (flit, flit_core, flit_scm, hatch-vcs, hatchling, jupyter_packaging, pdm, maturin, other, poetry-core, setuptools, setuptools_scm)" ERRORS += "Fatal: unknown MODPY_PYBUILD value (flit, flit_core, flit_scm, hatch-vcs, hatchling, jupyter_packaging, pbr, pdm, maturin, mesonpy, other, poetry-core, setuptools, setuptools_scm, setuptools-rust)"
. endif
_MODPY_EXPECTED_BACKEND ?= ${MODPY_PYBUILD}
_MODPY_WHEELSDIR ?= dist
. if ${_MODPY_USE_CARGO:L} == yes
MODCARGO_INSTALL ?= No
MODCARGO_TEST ?= No
MODULES += devel/cargo
. endif . endif
.else .else
# Try to detect the case where a port will build regardless of setuptools MODPY_SETUPUTILS = No
# but the final plist will be different if it's present. # Detect the case where a port is capable of building with setup.py
# via fallback to distutils, but should use py-build instead.
_MODPY_SETUPUTILS_FAKE_DIR = \ _MODPY_SETUPUTILS_FAKE_DIR = \
${WRKDIR}/lib/python${MODPY_VERSION}/site-packages/setuptools ${WRKDIR}/lib/python${MODPY_VERSION}/site-packages/setuptools
_MODPY_PRE_BUILD_STEPS += \ _MODPY_PRE_BUILD_STEPS += \
@ -210,23 +201,35 @@ _MODPY_PRE_BUILD_STEPS += \
;exec 3>&1 \ ;exec 3>&1 \
;exec >${_MODPY_SETUPUTILS_FAKE_DIR}/__init__.py \ ;exec >${_MODPY_SETUPUTILS_FAKE_DIR}/__init__.py \
;echo 'def setup(*args, **kwargs):' \ ;echo 'def setup(*args, **kwargs):' \
;echo ' msg = "OpenBSD ports: MODPY_PYBUILD or MODPY_SETUPTOOLS is required"' \ ;echo ' msg = "SecBSD ports: use MODPY_PYBUILD"' \
;echo ' raise Exception(msg)' \ ;echo ' raise Exception(msg)' \
;echo 'Extension = Feature = find_packages = setup' \ ;echo 'Extension = Feature = find_packages = setup' \
;exec 1>&3 ;exec 1>&3
MODPY_SETUPUTILS = No
_MODPY_USERBASE = ${WRKDIR} _MODPY_USERBASE = ${WRKDIR}
.endif .endif
# XXX If we run into too many problems with setuptools ports and junking
# XXX then this can be enabled, however if a "nojunk" port fails to build,
# XXX DPB will no longer junk on that node, likely resulting in running
# XXX out of disk space in /usr/local. So far it has only happened very
# XXX occasionally and a single port failure is easier to clean up, and
# XXX setuptools use is decreasing, so trying to avoid this!
#
#.if ${MODPY_SETUPTOOLS:L} == "yes" || ${MODPY_PYBUILD:Msetuptools*}
# Setuptools opportunistically picks up plugins. If it picks one up that
# uses finalize_distribution_options (usually setuptools_scm), junking
# that plugin will cause failure at the end of build.
# In the absence of a targetted means of disabling this, use a big hammer:
#DPB_PROPERTIES += nojunk
#.endif
.if ${MODPY_PI:L} == "yes" .if ${MODPY_PI:L} == "yes"
_MODPY_EGG_NAME = ${DISTNAME:S/-${MODPY_EGG_VERSION}//} _MODPY_EGG_NAME = ${DISTNAME:S/-${MODPY_DISTV}//}
MODPY_PI_DIR ?= ${DISTNAME:C/^([a-zA-Z0-9]).*/\1/}/${_MODPY_EGG_NAME} MODPY_PI_DIR ?= ${DISTNAME:C/^([a-zA-Z0-9]).*/\1/}/${_MODPY_EGG_NAME}
SITES = ${SITE_PYPI:=${MODPY_PI_DIR}/} SITES = ${SITE_PYPI:=${MODPY_PI_DIR}/}
HOMEPAGE ?= https://pypi.python.org/pypi/${_MODPY_EGG_NAME} HOMEPAGE ?= https://pypi.python.org/pypi/${_MODPY_EGG_NAME}
.endif .endif
MODPY_TKINTER_DEPENDS = lang/python/${_MODPY_SUBDIR},-tkinter
MODPY_BIN = ${LOCALBASE}/bin/python${MODPY_VERSION} MODPY_BIN = ${LOCALBASE}/bin/python${MODPY_VERSION}
MODPY_INCDIR = ${LOCALBASE}/include/python${MODPY_VERSION} MODPY_INCDIR = ${LOCALBASE}/include/python${MODPY_VERSION}
MODPY_LIBDIR = ${LOCALBASE}/lib/python${MODPY_VERSION} MODPY_LIBDIR = ${LOCALBASE}/lib/python${MODPY_VERSION}
@ -266,7 +269,7 @@ MODPY_TEST_CMD = cd ${MODPY_TEST_DIR} && ${SETENV} ${ALL_TEST_ENV} ${MODPY_BIN}
.if ${MODPY_PYTEST:L} == "yes" .if ${MODPY_PYTEST:L} == "yes"
MODPY_PYTEST_USERARGS ?= MODPY_PYTEST_USERARGS ?=
MODPY_TEST_CMD += -m pytest ${MODPY_PYTEST_USERARGS} MODPY_TEST_CMD += -m pytest ${MODPY_PYTEST_USERARGS}
MODPY_TEST_LIBDIR ?= ${WRKSRC}/build/lib:${WRKSRC}/build/lib.openbsd-${OSREV}-${ARCH}-cpython-${MODPY_MAJORMINOR}:${WRKSRC}/lib.openbsd-${OSREV}-${ARCH}-${MODPY_VERSION} MODPY_TEST_LIBDIR ?= ${WRKINST}${MODPY_SITEPKG}:${WRKSRC}/build/lib:${WRKSRC}/build/lib.openbsd-${OSREV}-${ARCH}-cpython-${MODPY_MAJORMINOR}:${WRKSRC}/lib.openbsd-${OSREV}-${ARCH}-${MODPY_VERSION}
.else .else
MODPY_TEST_CMD += ./${MODPY_SETUP} ${MODPY_SETUP_ARGS} MODPY_TEST_CMD += ./${MODPY_SETUP} ${MODPY_SETUP_ARGS}
.endif .endif
@ -280,10 +283,10 @@ TEST_ENV += PYTHONPATH=${MODPY_TEST_LIBDIR}:lib:src
.endif .endif
SUBST_VARS := MODPY_PYCACHE MODPY_COMMENT MODPY_ABI3SO MODPY_PYC_MAGIC_TAG \ SUBST_VARS := MODPY_PYCACHE MODPY_COMMENT MODPY_ABI3SO MODPY_PYC_MAGIC_TAG \
MODPY_BIN MODPY_EGG_VERSION MODPY_VERSION MODPY_BIN_SUFFIX \ MODPY_BIN MODPY_DISTV MODPY_VERSION \
MODPY_PY_PREFIX MODPY_PYOEXTENSION ${SUBST_VARS} MODPY_PY_PREFIX MODPY_PYOEXTENSION ${SUBST_VARS}
UPDATE_PLIST_ARGS += -S MODPY_BIN_SUFFIX -S MODPY_PYOEXTENSION \ UPDATE_PLIST_ARGS += -S MODPY_PYOEXTENSION \
-I MODPY_ABI3SO -c MODPY_COMMENT -I MODPY_PYCACHE -I MODPY_ABI3SO -c MODPY_COMMENT -I MODPY_PYCACHE
# set MODPY_BIN for executable scripts # set MODPY_BIN for executable scripts
@ -303,12 +306,34 @@ MODPY_COMPILEALL = ${MODPY_BIN} -m compileall
MODPY_COMPILEALL = ${MODPY_BIN} -m compileall -j ${MAKE_JOBS} -s ${WRKINST} -o 0 -o 1 MODPY_COMPILEALL = ${MODPY_BIN} -m compileall -j ${MAKE_JOBS} -s ${WRKINST} -o 0 -o 1
.endif .endif
MODPY_TEST_TARGET =
MODPY_TEST_LINK_SO ?= No
.if ${MODPY_TEST_LINK_SO:L} == "yes" && !empty(MODPY_TEST_LIBDIR)
MODPY_TEST_SO_CMD = for _dir in ${MODPY_TEST_LIBDIR:S,:, ,g}; do \
if [ -d $${_dir} ]; then \
cd $${_dir} && \
find . -name '*.so' -type f \
-exec ln -sf $${_dir}/{} ${WRKSRC}/{} \; ;\
fi; done
MODPY_TEST_TARGET += ${MODPY_TEST_SO_CMD};
.endif
.if ${MODPY_PYBUILD:L} != no .if ${MODPY_PYBUILD:L} != no
. if ! ${MODPY_PYBUILD:Msetuptools_scm} . if ! ${MODPY_PYBUILD:Msetuptools_scm}
_MODPY_PRE_BUILD_STEPS += ; if [ -e ${WRKSRC}/pyproject.toml ]; then \ _MODPY_PRE_BUILD_STEPS += ; if [ -e ${WRKSRC}/pyproject.toml ] && \
grep -q '^requires.*setuptools_scm' ${WRKSRC}/pyproject.toml && \ grep -q '^requires.*setuptools[-_]scm' ${WRKSRC}/pyproject.toml; then \
echo && sleep 1 && \ (echo; echo '*** Port may need MODPY_PYBUILD=setuptools_scm'; \
echo "*** Port appears to require setuptools_scm" && sleep 2; \ grep -H -e ^build-backend -e '^requires.*setuptools' \
${WRKSRC}/pyproject.toml; echo ) >> ${WRKDIR}/.modpy-warn; \
fi
. endif
. if ${_MODPY_EXPECTED_BACKEND} != other
_MODPY_PRE_BUILD_STEPS += ; if [ -e ${WRKSRC}/pyproject.toml ] && \
grep '^build-backend' ${WRKSRC}/pyproject.toml | \
grep -qv ${_MODPY_EXPECTED_BACKEND}; then \
(echo; echo '*** Check MODPY_PYBUILD setting (currently "${MODPY_PYBUILD}")'; \
grep -H ^build-backend ${WRKSRC}/pyproject.toml; echo ) >> \
${WRKDIR}/.modpy-warn; \
fi fi
. endif . endif
MODPY_PYBUILD_ARGS ?= MODPY_PYBUILD_ARGS ?=
@ -316,8 +341,8 @@ MODPY_BUILD_TARGET = ${_MODPY_PRE_BUILD_STEPS}; \
${_MODPY_RUNBIN} -sBm build -w --no-isolation ${MODPY_PYBUILD_ARGS} ${_MODPY_RUNBIN} -sBm build -w --no-isolation ${MODPY_PYBUILD_ARGS}
MODPY_INSTALL_TARGET = \ MODPY_INSTALL_TARGET = \
${INSTALL_DATA_DIR} ${WRKINST}${MODPY_LIBDIR}; \ ${INSTALL_DATA_DIR} ${WRKINST}${MODPY_LIBDIR}; \
${_MODPY_RUNBIN} -m installer -d ${WRKINST} ${WRKSRC}/dist/*.whl ${_MODPY_RUNBIN} -m installer -d ${WRKINST} ${WRKSRC}/${_MODPY_WHEELSDIR}/*.whl
MODPY_TEST_TARGET = ${MODPY_TEST_CMD} MODPY_TEST_TARGET += ${MODPY_TEST_CMD}
. if ${MODPY_PYTEST:L} == "yes" . if ${MODPY_PYTEST:L} == "yes"
MODPY_TEST_TARGET += ${MODPY_PYTEST_ARGS} MODPY_TEST_TARGET += ${MODPY_PYTEST_ARGS}
. endif . endif
@ -328,7 +353,7 @@ MODPY_INSTALL_TARGET = \
${MODPY_CMD} ${MODPY_DISTUTILS_BUILD} ${MODPY_DISTUTILS_BUILDARGS} \ ${MODPY_CMD} ${MODPY_DISTUTILS_BUILD} ${MODPY_DISTUTILS_BUILDARGS} \
${MODPY_DISTUTILS_INSTALL} ${MODPY_DISTUTILS_INSTALLARGS} ${MODPY_DISTUTILS_INSTALL} ${MODPY_DISTUTILS_INSTALLARGS}
MODPY_TEST_TARGET = ${MODPY_TEST_CMD} MODPY_TEST_TARGET += ${MODPY_TEST_CMD}
. if ${MODPY_PYTEST:L} == "yes" . if ${MODPY_PYTEST:L} == "yes"
MODPY_TEST_TARGET += ${MODPY_PYTEST_ARGS} MODPY_TEST_TARGET += ${MODPY_PYTEST_ARGS}
. elif ${MODPY_SETUPUTILS:L} == "yes" . elif ${MODPY_SETUPUTILS:L} == "yes"
@ -336,12 +361,23 @@ MODPY_TEST_TARGET += ${TEST_TARGET}
. endif . endif
.endif .endif
# dirty way to do it with no modifications in bsd.port.mk MODPY_INSTALL_TARGET += ; if [ -r ${WRKDIR}/.modpy-warn ]; then cat ${WRKDIR}/.modpy-warn; fi
.if empty(CONFIGURE_STYLE) .if empty(CONFIGURE_STYLE)
. if !target(do-configure) && ${_MODPY_USE_CARGO:L} == yes
do-configure:
@${MODCARGO_configure}
. endif
. if !target(do-build) . if !target(do-build)
do-build: do-build:
. if ${_MODPY_USE_CARGO:L} == yes
@${MODCARGO_BUILD_TARGET}
. endif
. if ${MODPY_PYBUILD} != maturin
@${MODPY_BUILD_TARGET} @${MODPY_BUILD_TARGET}
. endif . endif
. endif
# extra documentation or scripts should be installed via post-install # extra documentation or scripts should be installed via post-install
. if !target(do-install) . if !target(do-install)
@ -349,20 +385,10 @@ do-install:
@${MODPY_INSTALL_TARGET} @${MODPY_INSTALL_TARGET}
. endif . endif
# setuptools supports regress testing from setup.py using a standard target,
# though this is deprecated and in most cases MODPY_PYTEST should be used
# (possibly with MODPY_PYTEST_ARGS pointed at test dirs/files if the automatic
# search picks up files in lib/).
. if !target(do-test) && \ . if !target(do-test) && \
(${MODPY_SETUPUTILS:L} == "yes" || ${MODPY_PYTEST:L} == "yes") (${MODPY_SETUPUTILS:L} == "yes" || ${MODPY_PYTEST:L} == "yes")
do-test: do-test:
@${MODPY_TEST_TARGET} @${MODPY_TEST_TARGET}
. endif . endif
. if make(update-plist) || make(plist)
. if defined(FLAVORS) && ${FLAVORS:Mpython3} && !${FLAVOR:Mpython3}
ERRORS += "***\n*** WARNING: running update-plist without FLAVOR=python3\n***\n***"
. endif
. endif
.endif .endif