git: d7c115c4b351 - main - graphics/py-mayavi: update 4.8.2 → 4.9.0

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Mon, 21 Sep 2026 23:05:37 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=d7c115c4b351605b5d7033e5ed7e43b6e0f441bd

commit d7c115c4b351605b5d7033e5ed7e43b6e0f441bd
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2026-09-21 23:05:03 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-09-21 23:05:32 +0000

    graphics/py-mayavi: update 4.8.2 → 4.9.0
---
 graphics/py-mayavi/Makefile                   | 44 +++++++++++++++------------
 graphics/py-mayavi/distinfo                   |  6 ++--
 graphics/py-mayavi/files/example-1.py         | 30 ++++++++++++++++++
 graphics/py-mayavi/files/patch-pyproject.toml | 19 ++++++++++++
 graphics/py-mayavi/files/patch-setup.py       | 19 ++++++++++++
 5 files changed, 96 insertions(+), 22 deletions(-)

diff --git a/graphics/py-mayavi/Makefile b/graphics/py-mayavi/Makefile
index 42a11cb1e784..64cd34aed3db 100644
--- a/graphics/py-mayavi/Makefile
+++ b/graphics/py-mayavi/Makefile
@@ -1,6 +1,5 @@
 PORTNAME=	mayavi
-DISTVERSION=	4.8.2
-PORTREVISION=	10
+DISTVERSION=	4.9.0
 CATEGORIES=	graphics science python
 MASTER_SITES=	PYPI
 PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
@@ -19,24 +18,25 @@ LICENSE_FILE_LGPL3=		${WRKSRC}/image_LICENSE_OOo.txt
 LICENSE_FILE_BSD2CLAUSE=	${WRKSRC}/LICENSE_YORICK.txt
 LICENSE_FILE_APACHE11=		${WRKSRC}/LICENSE_COLORBREWER.txt
 
-BROKEN=		compilation fails: VTK throws std::runtime_erroe, see https://gitlab.kitware.com/vtk/vtk/-/issues/19994
 BROKEN_i386=	stage fails: Building TVTK classes... Fatal Python error: Illegal instruction
 
-BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}numpy>=1.16:math/py-numpy@${PY_FLAVOR} \
-		${PY_SPHINX} \
-		sphinx-build:textproc/py-sphinx@${PY_FLAVOR}
 LIB_DEPENDS=	libvtkCommonCore-${VTK_VER}.so:math/vtk${VTK_VER:R}
-RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}numpy>=1.16:math/py-numpy@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}apptools>0:devel/py-apptools@${PY_FLAVOR} \
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}numpy>=1.16:math/py-numpy@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}wheel>0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}apptools>0:devel/py-apptools@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}configobj>0:devel/py-configobj@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}envisage>0:devel/py-envisage@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}numpy>=1.16:math/py-numpy@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}packaging>0:devel/py-packaging@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}pyface>=6.1.1:devel/py-pyface@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}pygments>0:textproc/py-pygments@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}puremagic>0:sysutils/py-puremagic@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}traits>=6.0.0:devel/py-traits@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}traitsui>=7.0.0:graphics/py-traitsui@${PY_FLAVOR} # list is in mayavi/__init__.py
+		${PYTHON_PKGNAMEPREFIX}traitsui>=7.0.0:graphics/py-traitsui@${PY_FLAVOR}
+TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pytest-timeout>0:devel/py-pytest-timeout@${PY_FLAVOR}
 
 USES=		python shebangfix
-USE_PYTHON=	distutils autoplist
+USE_PYTHON=	distutils autoplist pytest
 
 USE_WX=		3.2
 WX_COMPS=	python:run
@@ -44,17 +44,23 @@ WX_COMPS=	python:run
 SHEBANG_FILES=	mayavi/scripts/mayavi2 \
 		mayavi/tests/csv_files/csv_2_py
 
-POST_PLIST=	fix-plist
+PLIST_FILES=	${PYTHON_SITELIBDIR}/tvtk/tvtk_classes.zip
 
-post-install:
-	${STRIP_CMD} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/tvtk/array_ext*.so
-
-fix-plist:
-	@${REINPLACE_CMD} -e "s|${PYTHONPREFIX_SITELIBDIR:S/${PREFIX}\///}/mayavi/preferences/__pycache__$$||" ${TMPPLIST}
-	@${REINPLACE_CMD} -e "s|${PYTHONPREFIX_SITELIBDIR:S/${PREFIX}\///}/tvtk/plugins/scene/__pycache__$$||" ${TMPPLIST}
+TEST_ENV+=	PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}
+TEST_ENV+=	ETS_TOOLKIT=null QT_QPA_PLATFORM=offscreen # no GUI: do all rendering offscreen
 
 do-test:
-	@${SETENV} ${TEST_ENV} PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} ${PYTHON_CMD} ${WRKSRC}/examples/mayavi/interactive/coil_design_application.py
+	@${SETENV} ${TEST_ENV} ${PYTHON_CMD} \
+		-m pytest \
+		--disable-plugin-autoload -p timeout -v --timeout=60 \
+		${WRKSRC}/tvtk \
+		--ignore=${WRKSRC}/tvtk/tests/test_browser.py \
+		--ignore=${WRKSRC}/tvtk/tests/test_qt_x11.py \
+		--ignore=${WRKSRC}/tvtk/tests/test_qvtk_render_window_interactor.py \
+		--ignore=${WRKSRC}/tvtk/tests/test_tvtk_scene.py \
+		--ignore=${WRKSRC}/tvtk/tests/test_visual.py
+
+# tests as of 4.9.0: 115 passed, 8 skipped, 1 xpassed
 
 .include <../../math/vtk9/Makefile.version>
 .include <bsd.port.mk>
diff --git a/graphics/py-mayavi/distinfo b/graphics/py-mayavi/distinfo
index 81df0d9b166b..e3008d3532e6 100644
--- a/graphics/py-mayavi/distinfo
+++ b/graphics/py-mayavi/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1717834084
-SHA256 (mayavi-4.8.2.tar.gz) = b10fe9145f21c48e4902f0e746b3603b3cb694d11456515a46820f21a0a74229
-SIZE (mayavi-4.8.2.tar.gz) = 7100132
+TIMESTAMP = 1790014580
+SHA256 (mayavi-4.9.0.tar.gz) = d12cfb362a658b0d99f088184abb6dca805d8accc437bd5e8131c221987783de
+SIZE (mayavi-4.9.0.tar.gz) = 8578140
diff --git a/graphics/py-mayavi/files/example-1.py b/graphics/py-mayavi/files/example-1.py
new file mode 100644
index 000000000000..ebd568ea280e
--- /dev/null
+++ b/graphics/py-mayavi/files/example-1.py
@@ -0,0 +1,30 @@
+# Author: Gael Varoquaux <gael.varoquaux@normalesup.org>
+# Copyright (c) 2009, Enthought, Inc.
+# License: BSD Style.
+
+import numpy as np
+
+# Create data with x and y random in the [-2, 2] segment, and z a
+# Gaussian function of x and y.
+np.random.seed(12345)
+x = 4 * (np.random.random(500) - 0.5)
+y = 4 * (np.random.random(500) - 0.5)
+
+
+def f(x, y):
+    return np.exp(-(x ** 2 + y ** 2))
+
+z = f(x, y)
+
+from mayavi import mlab
+mlab.figure(1, fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
+
+# Visualize the points
+pts = mlab.points3d(x, y, z, z, scale_mode='none', scale_factor=0.2)
+
+# Create and visualize the mesh
+mesh = mlab.pipeline.delaunay2d(pts)
+surf = mlab.pipeline.surface(mesh)
+
+mlab.view(47, 57, 8.2, (0.1, 0.15, 0.14))
+mlab.show()
diff --git a/graphics/py-mayavi/files/patch-pyproject.toml b/graphics/py-mayavi/files/patch-pyproject.toml
new file mode 100644
index 000000000000..e145874f06b5
--- /dev/null
+++ b/graphics/py-mayavi/files/patch-pyproject.toml
@@ -0,0 +1,19 @@
+-- Use the PEP 621 license table instead of the PEP 639 license expression
+-- and remove license-files, which the old setuptools port does not validate.
+-- This allows building without upgrading devel/py-setuptools.
+--- pyproject.toml.orig	2026-09-21 18:18:49 UTC
++++ pyproject.toml
+@@ -15,12 +15,7 @@ requires-python = ">=3.10"
+ description = "3D scientific data visualization library and application"
+ readme = "README.rst"
+ requires-python = ">=3.10"
+-license = "BSD-3-Clause"
+-license-files = [
+-    "LICENSE.txt",
+-    "LICENSE_COLORBREWER.txt",
+-    "LICENSE_YORICK.txt",
+-]
++license = {text = "BSD-3-Clause"}
+ authors = [
+     {name = "Prabhu Ramachandran, et al.", email = "prabhu@aero.iitb.ac.in"},
+ ]
diff --git a/graphics/py-mayavi/files/patch-setup.py b/graphics/py-mayavi/files/patch-setup.py
new file mode 100644
index 000000000000..6c6c6821817b
--- /dev/null
+++ b/graphics/py-mayavi/files/patch-setup.py
@@ -0,0 +1,19 @@
+-- Work around the old setuptools port (<=70) which does not provide
+-- setuptools.command.bdist_wheel; fall back to wheel.bdist_wheel instead.
+-- This allows building without upgrading devel/py-setuptools.
+--- setup.py.orig	2026-09-21 18:18:49 UTC
++++ setup.py
+@@ -4,9 +4,12 @@ from setuptools import Command, Distribution, setup
+ # All rights reserved.
+ 
+ from setuptools import Command, Distribution, setup
+-from setuptools.command.bdist_wheel import bdist_wheel
+ from setuptools.command.build_py import build_py
+ from setuptools.command.develop import develop
++try:
++    from setuptools.command.bdist_wheel import bdist_wheel
++except ModuleNotFoundError:
++    from wheel.bdist_wheel import bdist_wheel
+ 
+ import os
+ import sys