git: 1e54ec44cf35 - main - graphics/py-opencv-python-headless: update 4.13.0.92 → 5.0.0.93

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Tue, 15 Sep 2026 19:20:22 UTC
The branch main has been updated by yuri:

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

commit 1e54ec44cf35b4a76357f06610dd4f20b3d74274
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2026-09-15 19:19:24 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-09-15 19:20:19 +0000

    graphics/py-opencv-python-headless: update 4.13.0.92 → 5.0.0.93
---
 graphics/py-opencv-python-headless/Makefile        | 24 ++++++++++------
 graphics/py-opencv-python-headless/distinfo        | 18 +++++++-----
 ...odules_core_include_opencv2_core_vsx__utils.hpp | 19 ++++---------
 ...tch-opencv_modules_gapi_cmake_DownloadADE.cmake | 33 ++++++++++++++++++++++
 ...atch-opencv_modules_python_test_tests_common.py | 19 +++++++++++++
 ...ch-opencv_modules_videoio_src_cap_ffmpeg_hw.hpp | 22 +++++++++++++++
 ...-opencv_modules_videoio_src_cap_ffmpeg_impl.hpp | 23 +++++++++++++++
 .../py-opencv-python-headless/files/patch-setup.py | 12 ++++++--
 8 files changed, 138 insertions(+), 32 deletions(-)

diff --git a/graphics/py-opencv-python-headless/Makefile b/graphics/py-opencv-python-headless/Makefile
index 96c34dce0e08..22d3cfd831f2 100644
--- a/graphics/py-opencv-python-headless/Makefile
+++ b/graphics/py-opencv-python-headless/Makefile
@@ -1,6 +1,5 @@
 PORTNAME=	opencv-python-headless
-DISTVERSION=	4.13.0.92
-PORTREVISION=	2
+DISTVERSION=	5.0.0.93
 CATEGORIES=	graphics
 MASTER_SITES=	PYPI
 PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
@@ -12,8 +11,6 @@ WWW=		https://github.com/opencv/opencv-python
 LICENSE=	MIT
 LICENSE_FILE=	${WRKSRC}/LICENSE.txt
 
-BROKEN=		Fails to build with FFmpeg 9
-
 BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}scikit-build>=0.14.0:devel/py-scikit-build@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}numpy>0:math/py-numpy@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR} \
@@ -34,15 +31,24 @@ USE_PYTHON=	pep517 autoplist pytest
 USE_GITHUB=	yes
 GH_ACCOUNT=	opencv
 GH_PROJECT=	opencv-python
-GH_TAGNAME=	92
-GH_TUPLE=	opencv:opencv:b4c5ec4042f097e2a5b386b9d413ec7333d0a184:opencv/opencv \
-		opencv:opencv_contrib:d99ad2a188210cc35067c2e60076eed7c2442bc3:opencv_contrib/opencv_contrib
+GH_TAGNAME=	93
+GH_TUPLE=	opencv:opencv:0654a42e19215ef25b1d367d822f3c630447e7c7:opencv/opencv \
+		opencv:opencv_contrib:a8e9acd62cabd30419dba83007f2ac0d07de5e2c:opencv_contrib/opencv_contrib \
+		opencv:ade:v0.1.2e:ade \
+		opencv:opencv_extra:4.14.0:opencv_extra
+
+post-extract:
+	@${MKDIR} ${WRKSRC}/opencv/3rdparty/ade
+	@${MV} ${WRKSRC_ade} ${WRKSRC}/opencv/3rdparty/ade
 
 MAKE_ENV=	ENABLE_HEADLESS=1 \
 		OPENCV_PYTHON_PACKAGE_NAME=opencv-python-headless
 
-TEST_ENV=	${MAKE_ENV} PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}
+TEST_ENV=	${MAKE_ENV} PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} \
+		OPENCV_TEST_REPO_PATH=${WRKSRC}/opencv \
+		OPENCV_TEST_DATA_PATH=${WRKSRC_opencv_extra}/testdata
 TEST_WRKSRC=	${WRKSRC}/opencv/modules/python
+TEST_ARGS=	--disable-plugin-autoload
 
 CONFLICTS_INSTALL=	opencv # opencv has the same python bindings bundled in
 
@@ -50,4 +56,6 @@ post-patch:
 	@${PRINTF} 'opencv_version = "${DISTVERSION}"\ncontrib = False\nheadless = True\nrolling = False\nci_build = False' \
 		> ${WRKSRC}/cv2/version.py
 
+# tests as of 5.0.0.93: 129 passed, 9 skipped, 2 warnings in 1.96s
+
 .include <bsd.port.mk>
diff --git a/graphics/py-opencv-python-headless/distinfo b/graphics/py-opencv-python-headless/distinfo
index cfffb0d80edf..f71141dcdc4b 100644
--- a/graphics/py-opencv-python-headless/distinfo
+++ b/graphics/py-opencv-python-headless/distinfo
@@ -1,7 +1,11 @@
-TIMESTAMP = 1775576082
-SHA256 (opencv-opencv-python-4.13.0.92-92_GH0.tar.gz) = 049293f56726a3ebb01bb7508b973e14e62752a4a0e067ac6af4e371d6aa30d3
-SIZE (opencv-opencv-python-4.13.0.92-92_GH0.tar.gz) = 1130133
-SHA256 (opencv-opencv-b4c5ec4042f097e2a5b386b9d413ec7333d0a184_GH0.tar.gz) = 4f2a381ce3377e6f22d0718fe7101e97a21968a21c81f0356f2787bb21024dc4
-SIZE (opencv-opencv-b4c5ec4042f097e2a5b386b9d413ec7333d0a184_GH0.tar.gz) = 95448014
-SHA256 (opencv-opencv_contrib-d99ad2a188210cc35067c2e60076eed7c2442bc3_GH0.tar.gz) = 8d2f5665a4f47fd6763eb75f5017676cbcdeb813074b32a9fda72c25d52abdd4
-SIZE (opencv-opencv_contrib-d99ad2a188210cc35067c2e60076eed7c2442bc3_GH0.tar.gz) = 55518735
+TIMESTAMP = 1789498270
+SHA256 (opencv-opencv-python-5.0.0.93-93_GH0.tar.gz) = 319712e131f336dd5d1e3d6131d20ec7c7e922b93038858ef015c58f634ab1ee
+SIZE (opencv-opencv-python-5.0.0.93-93_GH0.tar.gz) = 1130272
+SHA256 (opencv-opencv-0654a42e19215ef25b1d367d822f3c630447e7c7_GH0.tar.gz) = 7a75663094ebd50bf212928423a24394e29d751db878044ad015ba28546a59db
+SIZE (opencv-opencv-0654a42e19215ef25b1d367d822f3c630447e7c7_GH0.tar.gz) = 96313878
+SHA256 (opencv-opencv_contrib-a8e9acd62cabd30419dba83007f2ac0d07de5e2c_GH0.tar.gz) = c96663affc1e6125fc5b630539db83f5bcff19f911c2bbc40e9b7566f86508c9
+SIZE (opencv-opencv_contrib-a8e9acd62cabd30419dba83007f2ac0d07de5e2c_GH0.tar.gz) = 55526794
+SHA256 (opencv-ade-v0.1.2e_GH0.tar.gz) = 107711887d413127955d64a0e42974ec379c1ebb81832c79a21a9e3a2110e4bf
+SIZE (opencv-ade-v0.1.2e_GH0.tar.gz) = 117054
+SHA256 (opencv-opencv_extra-4.14.0_GH0.tar.gz) = 2d532531e80dd8a073eab3d64c282643ebfa99fa31639029d3829e5f6ad76172
+SIZE (opencv-opencv_extra-4.14.0_GH0.tar.gz) = 507167516
diff --git a/graphics/py-opencv-python-headless/files/patch-opencv_modules_core_include_opencv2_core_vsx__utils.hpp b/graphics/py-opencv-python-headless/files/patch-opencv_modules_core_include_opencv2_core_vsx__utils.hpp
index 5bba87f4bd03..35d8e839e2c5 100644
--- a/graphics/py-opencv-python-headless/files/patch-opencv_modules_core_include_opencv2_core_vsx__utils.hpp
+++ b/graphics/py-opencv-python-headless/files/patch-opencv_modules_core_include_opencv2_core_vsx__utils.hpp
@@ -1,22 +1,13 @@
---- opencv/modules/core/include/opencv2/core/vsx_utils.hpp.orig	2025-12-30 07:52:05 UTC
+--- opencv/modules/core/include/opencv2/core/vsx_utils.hpp.orig	2026-09-15 18:33:59 UTC
 +++ opencv/modules/core/include/opencv2/core/vsx_utils.hpp
-@@ -258,7 +258,7 @@ VSX_IMPL_1VRG(vec_udword2, vec_dword2,  vpopcntd, vec_
- 
- // converts between single and double-precision
- // vec_floate and vec_doubleo are available since Power10 and z14
--#if defined(__POWER10__) || (defined(__powerpc64__) && defined(__ARCH_PWR10__)
-+#if defined(__POWER10__) || (defined(__powerpc64__) && defined(__ARCH_PWR10__))
- //  Use VSX double<->float conversion instructions (if supported by the architecture)
-     VSX_REDIRECT_1RG(vec_float4,  vec_double2, vec_cvfo, vec_floate)
-     VSX_REDIRECT_1RG(vec_double2, vec_float4,  vec_cvfo, vec_doubleo)
-@@ -417,6 +417,10 @@ VSX_REDIRECT_1RG(vec_udword2, vec_udword2, vec_popcntu
- VSX_REDIRECT_1RG(vec_ushort8, vec_ushort8, vec_popcntu, vec_popcnt)
+@@ -418,6 +418,10 @@ VSX_REDIRECT_1RG(vec_udword2, vec_udword2, vec_popcntu
  VSX_REDIRECT_1RG(vec_uint4,   vec_uint4,   vec_popcntu, vec_popcnt)
  VSX_REDIRECT_1RG(vec_udword2, vec_udword2, vec_popcntu, vec_popcnt)
-+
+ 
 +// converts between single and double precision
 +VSX_REDIRECT_1RG(vec_float4,  vec_double2, vec_cvfo, __builtin_vsx_xvcvdpsp)
 +VSX_REDIRECT_1RG(vec_double2, vec_float4,  vec_cvfo, __builtin_vsx_xvcvspdp)
- 
++
  // converts word and doubleword to double-precision
  #ifdef vec_ctd
+ #   undef vec_ctd
diff --git a/graphics/py-opencv-python-headless/files/patch-opencv_modules_gapi_cmake_DownloadADE.cmake b/graphics/py-opencv-python-headless/files/patch-opencv_modules_gapi_cmake_DownloadADE.cmake
new file mode 100644
index 000000000000..e26e7c2ea82d
--- /dev/null
+++ b/graphics/py-opencv-python-headless/files/patch-opencv_modules_gapi_cmake_DownloadADE.cmake
@@ -0,0 +1,33 @@
+-- Stop cmake from downloading the ADE sources at configure time.
+-- The ADE sources are prefetched by the ports framework and placed into
+-- the OpenCV source tree under opencv/3rdparty/ade.
+
+--- opencv/modules/gapi/cmake/DownloadADE.cmake.orig	2025-07-04 16:37:46 UTC
++++ opencv/modules/gapi/cmake/DownloadADE.cmake
+@@ -1,18 +1,12 @@
+-set(ade_src_dir "${OpenCV_BINARY_DIR}/3rdparty/ade")
++set(ade_src_dir "${OpenCV_SOURCE_DIR}/3rdparty/ade")
+ set(ade_filename "v0.1.2e.zip")
+ set(ade_subdir "ade-0.1.2e")
+ set(ade_md5 "962ce79e0b95591f226431f7b5f152cd")
+-ocv_download(FILENAME ${ade_filename}
+-             HASH ${ade_md5}
+-             URL
+-               "${OPENCV_ADE_URL}"
+-               "$ENV{OPENCV_ADE_URL}"
+-               "https://github.com/opencv/ade/archive/"
+-             DESTINATION_DIR ${ade_src_dir}
+-             ID ADE
+-             STATUS res
+-             UNPACK RELATIVE_URL)
+-
+-if (NOT res)
++set(file_id ade-0.1.2e/CMakeLists.txt)
++set(FILENAME ${ade_src_dir}/${file_id})
++if(EXISTS ${FILENAME})
++    message("++ ade: Using prefetched ${file_id}")
++else()
++    message(WARNING "++ ade: Could not find ${file_id} in ${FILENAME}")
+     return()
+ endif()
+
diff --git a/graphics/py-opencv-python-headless/files/patch-opencv_modules_python_test_tests_common.py b/graphics/py-opencv-python-headless/files/patch-opencv_modules_python_test_tests_common.py
new file mode 100644
index 000000000000..1a8e4219c99c
--- /dev/null
+++ b/graphics/py-opencv-python-headless/files/patch-opencv_modules_python_test_tests_common.py
@@ -0,0 +1,19 @@
+-- Allow the pytest-based port test target to find the sample/test data
+-- without using the unittest bootstrap CLI.  Read the locations from
+-- environment variables set by the port Makefile.
+
+--- opencv/modules/python/test/tests_common.py.orig	2025-07-04 16:37:46 UTC
++++ opencv/modules/python/test/tests_common.py
+@@ -22,9 +22,9 @@
+ class NewOpenCVTests(unittest.TestCase):
+
+     # path to local repository folder containing 'samples' folder
+-    repoPath = None
+-    extraTestDataPath = None
+-    extraDnnTestDataPath = None
++    repoPath = os.environ.get('OPENCV_TEST_REPO_PATH')
++    extraTestDataPath = os.environ.get('OPENCV_TEST_DATA_PATH')
++    extraDnnTestDataPath = os.environ.get('OPENCV_DNN_TEST_DATA_PATH')
+     # github repository url
+     repoUrl = 'https://raw.github.com/opencv/opencv/4.x'
+
diff --git a/graphics/py-opencv-python-headless/files/patch-opencv_modules_videoio_src_cap_ffmpeg_hw.hpp b/graphics/py-opencv-python-headless/files/patch-opencv_modules_videoio_src_cap_ffmpeg_hw.hpp
new file mode 100644
index 000000000000..af6e9b6ccf54
--- /dev/null
+++ b/graphics/py-opencv-python-headless/files/patch-opencv_modules_videoio_src_cap_ffmpeg_hw.hpp
@@ -0,0 +1,22 @@
+-- Fix build against FFmpeg 9.x where AVCodec.pix_fmts was removed.
+-- The pixel-format check for CUDA/VAAPI encoders is only available before
+-- libavcodec 63, so guard the block with a version macro.
+
+--- opencv/modules/videoio/src/cap_ffmpeg_hw.hpp.orig	2025-07-04 16:37:46 UTC
++++ opencv/modules/videoio/src/cap_ffmpeg_hw.hpp
+@@ -757,6 +757,7 @@
+ #endif
+             if (hw_type == AV_HWDEVICE_TYPE_CUDA) // CUDA encoders don't support avcodec_get_hw_config()
+                 hw_native_fmt = AV_PIX_FMT_CUDA;
++#if LIBAVCODEC_VERSION_MAJOR < 63
+             if (av_codec_is_encoder(c) && hw_native_fmt != AV_PIX_FMT_NONE && c->pix_fmts) {
+                 for (int i = 0; c->pix_fmts[i] != AV_PIX_FMT_NONE; i++) {
+                     if (c->pix_fmts[i] == hw_native_fmt) {
+@@ -766,6 +767,7 @@
+                     }
+                 }
+             }
++#endif
+             for (int i = 0;; i++) {
+                 const AVCodecHWConfig *hw_config = avcodec_get_hw_config(c, i);
+                 if (!hw_config)
diff --git a/graphics/py-opencv-python-headless/files/patch-opencv_modules_videoio_src_cap_ffmpeg_impl.hpp b/graphics/py-opencv-python-headless/files/patch-opencv_modules_videoio_src_cap_ffmpeg_impl.hpp
new file mode 100644
index 000000000000..6dfdb89b7d0f
--- /dev/null
+++ b/graphics/py-opencv-python-headless/files/patch-opencv_modules_videoio_src_cap_ffmpeg_impl.hpp
@@ -0,0 +1,23 @@
+-- Fix build against FFmpeg 9.x where AVCodec.supported_framerates was removed.
+-- Skip the supported-framerate adjustment when building against libavcodec
+-- 63 or newer.
+
+--- opencv/modules/videoio/src/cap_ffmpeg_impl.hpp.orig	2025-07-04 16:37:46 UTC
++++ opencv/modules/videoio/src/cap_ffmpeg_impl.hpp
+@@ -2627,6 +2627,7 @@
+     c->time_base.den = frame_rate;
+     c->time_base.num = frame_rate_base;
+     /* adjust time base for supported framerates */
++#if LIBAVCODEC_VERSION_MAJOR < 63
+     if(codec && codec->supported_framerates){
+         const AVRational *p= codec->supported_framerates;
+         AVRational req = {frame_rate, frame_rate_base};
+@@ -2644,6 +2645,7 @@
+             return NULL;
+         }
+         c->time_base.den= best->num;
+         c->time_base.num= best->den;
+     }
++#endif
+
+     c->gop_size = 12; /* emit one intra frame every twelve frames at most */
diff --git a/graphics/py-opencv-python-headless/files/patch-setup.py b/graphics/py-opencv-python-headless/files/patch-setup.py
index 388c6373c4ba..8a518396241f 100644
--- a/graphics/py-opencv-python-headless/files/patch-setup.py
+++ b/graphics/py-opencv-python-headless/files/patch-setup.py
@@ -1,19 +1,25 @@
+-- Relax numpy pin so the port builds with the numpy version in ports,
+-- and disable Intel IPP (IPPICV) because it ships Linux-only prebuilt
+-- binaries that cannot be used on FreeBSD.  Also turn off protobuf and
+-- video acceleration backends that are not needed for this package.
+
 --- setup.py.orig	2025-07-04 16:37:46 UTC
 +++ setup.py
 @@ -23,8 +23,7 @@
      build_rolling = get_build_env_var_by_name("rolling")
- 
+
      install_requires = [
 -        'numpy<2.0; python_version<"3.9"',
 -        'numpy>=2; python_version>="3.9"',
 +        'numpy>=1.13.3',
      ]
- 
+
      python_version = cmaker.CMaker.get_python_version()
-@@ -186,6 +185,8 @@
+@@ -183,6 +182,9 @@
              "-DBUILD_PERF_TESTS=OFF",
              "-DBUILD_DOCS=OFF",
              "-DPYTHON3_LIMITED_API=ON",
++            "-DWITH_IPP=OFF",
 +            "-DWITH_PROTOBUF=OFF",
 +            "-DWITH_VA=OFF",
              "-DBUILD_OPENEXR=ON",