commit:     b9d43224edb4e4a966f3031b08f97929c3a24065
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Thu May  1 18:37:55 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu May  8 06:26:48 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b9d43224

media-libs/opencv: add 4.11.0

Bug: https://bugs.gentoo.org/947031
Closes: https://bugs.gentoo.org/953397
Closes: https://bugs.gentoo.org/953304
Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/41967
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-libs/opencv/Manifest                         |    5 +
 .../files/opencv-4.11.0-ade-0.1.2e.tar.gz.patch    |   18 +
 .../opencv/files/opencv-4.11.0-cmake-CMP0175.patch |   22 +
 .../opencv/files/opencv-4.11.0-cmake-CMP0177.patch |   25 +
 media-libs/opencv/files/opencv-4.11.0-qt-6.9.patch |   19 +
 media-libs/opencv/metadata.xml                     |    4 +
 media-libs/opencv/opencv-4.11.0.ebuild             | 1473 ++++++++++++++++++++
 profiles/arch/amd64/use.mask                       |    9 +
 profiles/arch/arm/use.mask                         |    5 +
 profiles/arch/arm64/use.mask                       |    4 +
 profiles/arch/base/use.mask                        |    9 +
 profiles/features/big-endian/package.use.mask      |    1 +
 12 files changed, 1594 insertions(+)

diff --git a/media-libs/opencv/Manifest b/media-libs/opencv/Manifest
index af437391f688..0e8cad6b1bd4 100644
--- a/media-libs/opencv/Manifest
+++ b/media-libs/opencv/Manifest
@@ -1,7 +1,9 @@
 DIST NVIDIAOpticalFlowSDK-edb50da3cf849840d680249aa6dbef248ebce2ca.tar.gz 8771 
BLAKE2B 
f579960448bdaf57fbefd5e88002d8f6f4dbb828429b0f3a0112916c03039d4e4de65263eb8464a4d62924c1b77f0a61c2d93b7307657439bfbf7d59785f1533
 SHA512 
85dfdc52260f54f62c980508f4b6ab384e44200bd1c13761c4947f9a898c08f0faed2d734a85a4ba7a46f8788ed58ee89f12f61cee97881b69ba626bbd04f655
 DIST ade-0.1.2d.tar.gz 117027 BLAKE2B 
c544b769c7b289342a469950ed047fa13719bafba29aa41167b588cf4f24ed6e596159ec19b65e61e09519a461a5e82ac07d63e2ea493279ee182fe658810abb
 SHA512 
46f2feee28d732a6940a5a95944f3283bde1b8c8e05466a8ca1c576623c54d1bed875ce2b24a941111d8976cb0c6ba5a4ac8408f042f5765debf1badf7d43348
+DIST ade-0.1.2e.tar.gz 117054 BLAKE2B 
6f6b3bc39e45fff946f75f3b445b05b5a19b757459eefc5eed34ad41543aa7467c608d42f35deda3f709d87d65d5e507b94efbb7d24aad1913696c319370c5c6
 SHA512 
0a27e2e3278c34b76cc437823fdcf73d597cb4866fc6fd13059da41138b23e0eaea0326782a46b86967d9174d3aa67bfc8bdc281724cb7d0a8329387d56b9635
 DIST opencv-4.10.0-protobuf-30.patch 2746 BLAKE2B 
7a532d6b50878b4518b2b4342474b9115cb4d58898d8bd9d300520c9f84fd0bffb97b6796f89dee29b7ec6f9d526dff421dd82d4c034114da65d9900deea4d42
 SHA512 
b749aaa56426ba452bd0d0b54de2803e2b03ad14c9059ad4e32e689d9d0c9f9c97e5627b5db3204171ae32d8a6b88b036ab7b67093807c98607630d2b05669b5
 DIST opencv-4.10.0.tar.gz 94993429 BLAKE2B 
f16de226337ce1dabda4a52ae03257b0570af0e6212102c483dce61f2bcee1549150d0016b6ea20bae5d8c838e12db3d54bcb9c2ec5d3164639cdd56818f0b1b
 SHA512 
b4f7248f89f1cd146dbbae7860a17131cd29bd3cb81db1e678abfcfbf2d8fa4a7633bfd0edbf50afae7b838c8700e8c0d0bb05828139d5cb5662df6bbf3eb92c
+DIST opencv-4.11.0.tar.gz 95051012 BLAKE2B 
a4195007513d82666f785b58bccce69158f81420d6519e162a122bc245f59db3118edb8cacb3b6cadce3c7df7823859f06a1d2cb33ad0a256b19c96629fecfb2
 SHA512 
3b6e0da8169449944715de9e66380977791069a1d8288534ec768eaa2fb68533821fd8e06eac925a26656baf42185258b13aa80579e1e9be3ebc18fcea66f24d
 DIST opencv_3rdparty-34e4206aef44d50e6bbcd0ab06354b52e7466d26.tar.gz 397901 
BLAKE2B 
9adbe14ee3a2c90b890be694aa80d65b67e23a23f47ccabee4564e31eb9857d717b5a751df32004cfa5d6a53a9e1d8ea8d8943b705a0eaea5ca741169e2222f6
 SHA512 
8a92555aed2ac8752818586ab9762dd96ec128c5465cb87e402f15b15d16f7d371b3de045ef7295526e9ef99ec817766bb685a21d24dba29c650cf44e384a4e3
 DIST opencv_3rdparty-8afa57abc8229d611c4937165d20e2a2d9fc5a12.tar.gz 63301261 
BLAKE2B 
923dc944edfda4c292d42207290bee414bfe21998f6ffe341ea3b38b6f2f581f3a243653e2c1fd3fa86084068ad6e7acd5ca73ab43094aa15f124d379833a5d8
 SHA512 
68cce870da0846cbd12a093ec7896b510e34590dad2b91699be1df5d4f72d343f9789d54c45c1b801784f7e57e0e80b19ba65dd99855225da99b4193dae97aaa
 DIST opencv_3rdparty-a8b69ccc738421293254aec5ddb38bd523503252.tar.gz 920403 
BLAKE2B 
5f834e8ccef9d88d0650f8ae5d215a2d07d0a356aaad4de1622068e0b2a7def88fccc84bc4397f0182732e836fcd6e363ae25a2cdeaa4d458a7d8ef9afc81da5
 SHA512 
5611b9db40477759213ab35320570c198f1f224f92ca801ca3accd1f7620faf3d44f306e44abefd10be118acee9b56da643ca82abaa7c4d2102fe92e5b298a6e
@@ -9,4 +11,7 @@ DIST 
opencv_3rdparty-b2bfc75f6aea5b1f834ff0f0b865a7c18ff1459f.tar.gz 10036903 BL
 DIST opencv_3rdparty-fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d.tar.gz 1470898 
BLAKE2B 
f1794cc8f8684501f670db3d720c02f35c57ebe91f276cc21dea1f1c1426740d03569143fec74380e941703b5086db5f013ca913fb296eda99559115fd53ca30
 SHA512 
07118b9d688bf0ff34a6e4ca1548006124d80d11e7b48f08c9e1910b64249b1dad0ace460f50adda0ecb69b90871fc59cc25f451570c63f7c6d6ba2b92d8801c
 DIST opencv_contrib-4.10.0-3607.patch 29870 BLAKE2B 
cf43afbd24d0b32817e908c55ac3bf0d5da8b82b2c459bc04ef31414e16285eefe334c46eeee730bd3cad2bbec062f5bc212a82bd7f2ac83baca231d711545d4
 SHA512 
3fdd08cee6d7da8edf36411f30c8d6230ebd86a1c896a08f1dc86d3a0982e1f1f99797066722bc51ce4b1a60a2db55853c348441b3e6edc0d318fcb7bd5cf944
 DIST opencv_contrib-4.10.0.tar.gz 55387316 BLAKE2B 
5d6f884817b6d45b86833fcab1e31cd0fd7be19885698e0aefe300fa570f93c446d7f564567cc08099d559a98a65e9c3dd0fd35ceeca7e0e9a1e56edc74a0fe9
 SHA512 
480df862250692a97ce6431cba00dbecb70332307a19c1c04aa9d7444e6e74ab4f8c798548dce76d2319a9877624b82e361fb22a71df14b996087ade448be501
+DIST opencv_contrib-4.11.0.tar.gz 55450097 BLAKE2B 
bcfa10a4cceb7990ff695593f7f1ba8a9eefd6530beab6b8d04a14fcb7f2612e6e9c5ac9f654f685337935a434d38c844b16c7f540b31acaf9c4fe639ae678a1
 SHA512 
a5ebb6810a3b5e40858b7fd533f9eb7b3d475dfda843a489bc5168e72c5eaad0a7a23629aace1f43e1b62d9c24e5e1923d841059c297728fac464e00759886c2
 DIST opencv_extra-4.10.0.tar.gz 504349887 BLAKE2B 
6e76860beb95cf00698980a19cfd2894e5bfe0d477d94352cbb2ff98688acbc1c404953cbc3baa95453588e7b9063175a067f24006c5d2719a6c75d15f2ef891
 SHA512 
1a581dad61bc1e5075af5afed2dd3d67793232a9e1219408448d08c518ae714cf0c4d5fec2c25791351a49a0d265fe051ea142b2170f82843e19e82f65abc8c6
+DIST opencv_extra-4.11.0.tar.gz 505587850 BLAKE2B 
797de07ba1a6f1c2a772c8f72bb4fe21af5450bb9af5b2596163ccfc56f9bea0bb89fe88105278ef6ee1bbabe0896d36809521ed9125c84ff21157ed7d72462b
 SHA512 
512afd1489fc224fcaffe4f91da2814e04163c83c17afcd42bd12ddc3b14470b10c24bd0e0f61a94537afb68158c1dffa00fd1d459c83fa11f52f02c681def06
+DIST yunet-202303.onnx 232589 BLAKE2B 
1cd8eac1a254b35697f3b4c7d3d35ec8ed0ca2fc3ed39bc391e06713c039602141122858d4c29cf42f54994af967a22d470d39a547657b7c61f58db3733c9b7e
 SHA512 
ffeec1ba6e45ad63bc10ad2e6d8af5d5a9b816ac1b0606e62f0d06fec611f1bfa23daea07cfd3934fad958ddb5de3042950103ea3066ce61d0a563f47cd4b2d9

diff --git a/media-libs/opencv/files/opencv-4.11.0-ade-0.1.2e.tar.gz.patch 
b/media-libs/opencv/files/opencv-4.11.0-ade-0.1.2e.tar.gz.patch
new file mode 100644
index 000000000000..d500102a2df2
--- /dev/null
+++ b/media-libs/opencv/files/opencv-4.11.0-ade-0.1.2e.tar.gz.patch
@@ -0,0 +1,18 @@
+From: Paul Zander <[email protected]>
+
+Use tar.gz instead of zip to make CI happy.
+
+diff --git a/modules/gapi/cmake/DownloadADE.cmake 
b/modules/gapi/cmake/DownloadADE.cmake
+index e22c4f1..fb0c10a 100644
+--- a/modules/gapi/cmake/DownloadADE.cmake
++++ b/modules/gapi/cmake/DownloadADE.cmake
+@@ -1,7 +1,7 @@
+ set(ade_src_dir "${OpenCV_BINARY_DIR}/3rdparty/ade")
+-set(ade_filename "v0.1.2e.zip")
++set(ade_filename "v0.1.2e.tar.gz")
+ set(ade_subdir "ade-0.1.2e")
+-set(ade_md5 "962ce79e0b95591f226431f7b5f152cd")
++set(ade_md5 "e36774fc32e99463462f5b882f5d572d")
+ ocv_download(FILENAME ${ade_filename}
+              HASH ${ade_md5}
+              URL

diff --git a/media-libs/opencv/files/opencv-4.11.0-cmake-CMP0175.patch 
b/media-libs/opencv/files/opencv-4.11.0-cmake-CMP0175.patch
new file mode 100644
index 000000000000..ded1d03500f4
--- /dev/null
+++ b/media-libs/opencv/files/opencv-4.11.0-cmake-CMP0175.patch
@@ -0,0 +1,22 @@
+From 052f251ab5a80f32ac753824c038094bb360f411 Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Sun, 12 Jan 2025 21:49:10 +0100
+Subject: [PATCH] CMP0175
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/modules/python/python_loader.cmake 
b/modules/python/python_loader.cmake
+index 41dce57..dc16083 100644
+--- a/modules/python/python_loader.cmake
++++ b/modules/python/python_loader.cmake
+@@ -139,6 +139,7 @@ if(${PYTHON}_VERSION_STRING VERSION_GREATER "3.6" AND 
PYTHON_DEFAULT_VERSION VER
+   # halts on hard error.
+   add_custom_command(
+     TARGET copy_opencv_typing_stubs
++    POST_BUILD
+     COMMAND ${PYTHON_DEFAULT_EXECUTABLE} 
${PYTHON_SOURCE_DIR}/src2/copy_typings_stubs_on_success.py
+             --stubs_dir ${OPENCV_PYTHON_BINDINGS_DIR}/cv2
+             --output_dir ${__loader_path}/cv2
+-- 
+2.48.0
+

diff --git a/media-libs/opencv/files/opencv-4.11.0-cmake-CMP0177.patch 
b/media-libs/opencv/files/opencv-4.11.0-cmake-CMP0177.patch
new file mode 100644
index 000000000000..240d3c5a512f
--- /dev/null
+++ b/media-libs/opencv/files/opencv-4.11.0-cmake-CMP0177.patch
@@ -0,0 +1,25 @@
+From 52f444cad7741da4321cee4896c4d6befa538058 Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Sun, 12 Jan 2025 21:44:46 +0100
+Subject: [PATCH] CMP0177
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt
+index 6a18b61..042da87 100644
+--- a/samples/CMakeLists.txt
++++ b/samples/CMakeLists.txt
+@@ -10,8 +10,9 @@ include("${CMAKE_CURRENT_LIST_DIR}/samples_utils.cmake")
+ function(ocv_install_example_src relpath)
+   if(INSTALL_C_EXAMPLES)
+     file(GLOB files ${ARGN})
++    cmake_path(SET install_dir NORMALIZE 
"${OPENCV_SAMPLES_SRC_INSTALL_PATH}/${relpath}" )
+     install(FILES ${files}
+-            DESTINATION "${OPENCV_SAMPLES_SRC_INSTALL_PATH}/${relpath}"
++            DESTINATION "${install_dir}"
+             COMPONENT samples)
+   endif()
+ endfunction()
+-- 
+2.48.0
+

diff --git a/media-libs/opencv/files/opencv-4.11.0-qt-6.9.patch 
b/media-libs/opencv/files/opencv-4.11.0-qt-6.9.patch
new file mode 100644
index 000000000000..681a734e4c86
--- /dev/null
+++ b/media-libs/opencv/files/opencv-4.11.0-qt-6.9.patch
@@ -0,0 +1,19 @@
+From: Atri Bhattacharya <[email protected]>
+See-also: https://github.com/opencv/opencv/issues/27223#issuecomment-2797750952
+---
+ modules/highgui/CMakeLists.txt |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: opencv-4.11.0/modules/highgui/CMakeLists.txt
+===================================================================
+--- opencv-4.11.0.orig/modules/highgui/CMakeLists.txt
++++ opencv-4.11.0/modules/highgui/CMakeLists.txt
+@@ -125,7 +125,7 @@ elseif(HAVE_QT)
+     endif()
+ 
+     foreach(dt_dep ${qt_deps})
+-      add_definitions(${Qt${QT_VERSION_MAJOR}${dt_dep}_DEFINITIONS})
++      link_libraries(${Qt${QT_VERSION_MAJOR}${dt_dep}})
+       include_directories(${Qt${QT_VERSION_MAJOR}${dt_dep}_INCLUDE_DIRS})
+       list(APPEND HIGHGUI_LIBRARIES 
${Qt${QT_VERSION_MAJOR}${dt_dep}_LIBRARIES})
+     endforeach()

diff --git a/media-libs/opencv/metadata.xml b/media-libs/opencv/metadata.xml
index 6dc8077196f8..4427802d5c1f 100644
--- a/media-libs/opencv/metadata.xml
+++ b/media-libs/opencv/metadata.xml
@@ -38,13 +38,17 @@
                <flag name="mkl">Use <pkg>sci-libs/mkl</pkg> for blas, lapack 
and sparse blas routines</flag>
                <flag name="non-free">Enable non-free components</flag>
                <flag name="opencvapps">Enable compilation with 
opencvapps</flag>
+               <flag name="openni">Adds support for Kinect-like 3D sensors 
devices with <pkg>dev-libs/OpenNI</pkg></flag>
+               <flag name="openni2">Adds support for Kinect-like 3D sensors 
devices with <pkg>dev-libs/OpenNI2</pkg> (should be preferred over 
openni)</flag>
                <flag name="quirc">Enable qrcode decoding via 
<pkg>media-libs/quirc</pkg></flag>
+               <flag name="spng">Use <pkg>media-libs/libspng</pkg> for png 
support</flag>
                <flag name="tbb">Enable multithreading with the Intel Threads 
Building Block (<pkg>dev-cpp/tbb</pkg>)</flag>
                <flag name="tesseract">Use Google's OCR Engine</flag>
                <flag name="testprograms">Build and install programs for 
testing OpenCV (performance)</flag>
                <flag name="truetype">Enable <pkg>media-libs/freetype</pkg> 
support for gapi module</flag>
                <flag name="video_cards_intel">Enable Video Acceleration API 
for hardware decoding for Intel cards</flag>
                <flag name="vtk">Build new 3D visualization module viz based on 
<pkg>sci-libs/vtk</pkg></flag>
+               <flag name="vulkan">Enable experimental Vulkan backend</flag>
        </use>
        <upstream>
                
<changelog>https://github.com/opencv/opencv/wiki/ChangeLog</changelog>

diff --git a/media-libs/opencv/opencv-4.11.0.ebuild 
b/media-libs/opencv/opencv-4.11.0.ebuild
new file mode 100644
index 000000000000..1da01f5a23e1
--- /dev/null
+++ b/media-libs/opencv/opencv-4.11.0.ebuild
@@ -0,0 +1,1473 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit flag-o-matic multilib multiprocessing toolchain-funcs
+inherit cuda java-pkg-opt-2 cmake-multilib python-r1 virtualx xdg-utils
+
+DESCRIPTION="A collection of algorithms and sample code for various computer 
vision problems"
+HOMEPAGE="https://opencv.org";
+
+# TODO
+# - dnn: move module from opencv_contrib
+#   
https://github.com/opencv/opencv/commit/93729784bb1c4e544e07ec27a43ef57c4f456cec
+
+if [[ ${PV} = *9999* ]] ; then
+       inherit git-r3
+       EGIT_REPO_URI="https://github.com/${PN}/${PN}.git";
+       if [[ ${PV} = 4.9999* ]]; then
+               EGIT_BRANCH="4.x"
+       elif [[ ${PV} = 5.9999* ]]; then
+               EGIT_BRANCH="5.x"
+       fi
+       NVIDIA_OPTICAL_FLOW_COMMIT="edb50da3cf849840d680249aa6dbef248ebce2ca"
+       # branch v0.1.2e
+       ADE_PV="0.1.2e"
+       ADE_MD5="e36774fc32e99463462f5b882f5d572d"
+else
+       # branch v0.1.2e
+       ADE_PV="0.1.2e"
+       # branch wechat_qrcode_20210119
+       QRCODE_COMMIT="a8b69ccc738421293254aec5ddb38bd523503252"
+       # branch dnn_samples_face_detector_20170830
+       
DNN_SAMPLES_FACE_DETECTOR_COMMIT="b2bfc75f6aea5b1f834ff0f0b865a7c18ff1459f"
+       # branch contrib_xfeatures2d_boostdesc_20161012
+       XFEATURES2D_BOOSTDESC_COMMIT="34e4206aef44d50e6bbcd0ab06354b52e7466d26"
+       # branch contrib_xfeatures2d_vgg_20160317
+       XFEATURES2D_VGG_COMMIT="fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d"
+       # branch contrib_face_alignment_20170818
+       FACE_ALIGNMENT_COMMIT="8afa57abc8229d611c4937165d20e2a2d9fc5a12"
+       # branch nvof_2_0_bsd
+       NVIDIA_OPTICAL_FLOW_COMMIT="edb50da3cf849840d680249aa6dbef248ebce2ca"
+
+       SRC_URI="
+               https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> 
${P}.tar.gz
+               https://github.com/opencv/ade/archive/v${ADE_PV}.tar.gz -> 
ade-${ADE_PV}.tar.gz
+               contrib? (
+                       
https://github.com/${PN}/${PN}_contrib/archive/${PV}.tar.gz -> 
${PN}_contrib-${PV}.tar.gz
+                       dnnsamples? (
+                               
https://github.com/${PN}/${PN}_3rdparty/archive/${QRCODE_COMMIT}.tar.gz -> 
${PN}_3rdparty-${QRCODE_COMMIT}.tar.gz
+                               
https://github.com/${PN}/${PN}_3rdparty/archive/${DNN_SAMPLES_FACE_DETECTOR_COMMIT}.tar.gz
+                                       -> 
${PN}_3rdparty-${DNN_SAMPLES_FACE_DETECTOR_COMMIT}.tar.gz
+                       )
+                       contribxfeatures2d? (
+                               
https://github.com/${PN}/${PN}_3rdparty/archive/${XFEATURES2D_BOOSTDESC_COMMIT}.tar.gz
+                                       -> 
${PN}_3rdparty-${XFEATURES2D_BOOSTDESC_COMMIT}.tar.gz
+                               
https://github.com/${PN}/${PN}_3rdparty/archive/${XFEATURES2D_VGG_COMMIT}.tar.gz
+                                       -> 
${PN}_3rdparty-${XFEATURES2D_VGG_COMMIT}.tar.gz
+                       )
+                               
https://github.com/${PN}/${PN}_3rdparty/archive/${FACE_ALIGNMENT_COMMIT}.tar.gz
+                                       -> 
${PN}_3rdparty-${FACE_ALIGNMENT_COMMIT}.tar.gz
+                       cuda? (
+                               
https://github.com/NVIDIA/NVIDIAOpticalFlowSDK/archive/${NVIDIA_OPTICAL_FLOW_COMMIT}.tar.gz
+                                       -> 
NVIDIAOpticalFlowSDK-${NVIDIA_OPTICAL_FLOW_COMMIT}.tar.gz
+                       )
+                       
https://github.com/${PN}/${PN}_contrib/commit/667a66ee0e99f3f3263c1ef2de1b90d9244b7bd4.patch
+                       -> ${PN}_contrib-4.10.0-3607.patch
+               )
+               test? (
+                       
https://github.com/${PN}/${PN}_extra/archive/refs/tags/${PV}.tar.gz -> 
${PN}_extra-${PV}.tar.gz
+               )
+               contribdnn? (
+                       
https://github.com/ShiqiYu/libfacedetection.train/raw/02246e79b1e976c83d1e135a85e0628120c93769/onnx/yunet_s_640_640.onnx
 -> yunet-202303.onnx
+               )
+       "
+       KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0/${PV}" # subslot = libopencv* soname version
+
+# general options
+IUSE="debug doc +eigen gflags glog java non-free opencvapps python test 
testprograms"
+
+# modules
+IUSE+=" contrib contribcvv contribdnn contribfreetype contribhdf contribovis 
contribsfm contribxfeatures2d dnnsamples examples features2d"
+# hardware
+IUSE+=" cuda cudnn opencl video_cards_intel"
+# video
+IUSE+=" +ffmpeg gphoto2 gstreamer ieee1394 openni openni2 xine vaapi v4l"
+# image
+IUSE+=" avif gdal gif jasper jpeg jpeg2k openexr png quirc spng tesseract tiff 
webp"
+# gui
+IUSE+=" gtk3 qt6 opengl truetype vtk vulkan wayland"
+# parallel
+IUSE+=" openmp tbb"
+# lapack options
+IUSE+=" atlas lapack mkl"
+
+# from cmake/OpenCVCompilerOptimizations.cmake
+# TODO make this only relevant for binhost
+CPU_FEATURES_MAP=(
+       cpu_flags_arm_neon:NEON
+       cpu_flags_arm_vfpv3:VFPV3
+
+       # cpu_flags_arm_fp:FP16
+
+       cpu_flags_arm_asimddp:NEON_DOTPROD
+       # cpu_flags_arm_neon_fp16:NEON_FP16
+       # cpu_flags_arm_neon_bf16:NEON_BF16
+
+       # cpu_flags_loong_lsx:LSX
+       # cpu_flags_loong_lasx:LASX
+
+       # cpu_flags_mips_msa:MSA
+
+       cpu_flags_ppc_vsx:VSX   # (always available on Power8)
+       cpu_flags_ppc_vsx3:VSX3 # (always available on Power9)
+
+       # cpu_flags_riscv_rvv:RVV
+
+       cpu_flags_x86_sse:SSE   # (always available on 64-bit CPUs)
+       cpu_flags_x86_sse2:SSE2 # (always available on 64-bit CPUs)
+
+       cpu_flags_x86_sse3:SSE3
+       cpu_flags_x86_ssse3:SSSE3
+
+       cpu_flags_x86_sse4_1:SSE4_1
+       cpu_flags_x86_popcnt:POPCNT
+       cpu_flags_x86_sse4_2:SSE4_2
+
+       cpu_flags_x86_f16c:FP16
+       cpu_flags_x86_fma3:FMA3
+       cpu_flags_x86_avx:AVX
+       cpu_flags_x86_avx2:AVX2
+       cpu_flags_x86_avx512_bitalg:AVX_512BITALG
+       cpu_flags_x86_avx512_vbmi2:AVX_512VBMI2
+       cpu_flags_x86_avx512_vnni:AVX_512VNNI
+       cpu_flags_x86_avx512_vpopcntdq:AVX_512VPOPCNTDQ
+       cpu_flags_x86_avx512bw:AVX_512BW
+       cpu_flags_x86_avx512cd:AVX_512CD
+       cpu_flags_x86_avx512dq:AVX_512DQ
+       cpu_flags_x86_avx512f:AVX_512F
+       cpu_flags_x86_avx512ifma:AVX_512IFMA
+       cpu_flags_x86_avx512vbmi:AVX_512VBMI
+       cpu_flags_x86_avx512vl:AVX_512VL
+
+       # AVX512_KNL_EXTRA
+       cpu_flags_x86_avx512er:AVX_512ER
+       cpu_flags_x86_avx512pf:AVX_512PF
+       # AVX512_KNM_EXTRA
+       cpu_flags_x86_avx512_4fmaps:AVX_5124FMAPS
+       cpu_flags_x86_avx512_4vnniw:AVX_5124VNNIW
+
+)
+IUSE+=" ${CPU_FEATURES_MAP[*]%:*}"
+
+REQUIRED_USE="
+       amd64? (
+               cpu_flags_x86_sse
+               cpu_flags_x86_sse2
+               cpu_flags_x86_avx2? ( cpu_flags_x86_f16c )
+               cpu_flags_x86_f16c? ( cpu_flags_x86_avx )
+               cpu_flags_x86_avx512er? ( cpu_flags_x86_avx512pf )
+               cpu_flags_x86_avx512pf? ( cpu_flags_x86_avx512er )
+               cpu_flags_x86_avx512_4fmaps? ( cpu_flags_x86_avx512_4fmaps )
+               cpu_flags_x86_avx512_4vnniw? ( cpu_flags_x86_avx512_4vnniw )
+       )
+       atlas? ( lapack )
+       cuda? (
+               contrib
+       )
+       cudnn? ( cuda )
+       dnnsamples? ( examples )
+       gflags? ( contrib )
+       glog? ( contrib )
+       contribcvv? ( contrib qt6 )
+       contribdnn? ( contrib )
+       contribfreetype? ( contrib )
+       contribhdf? ( contrib )
+       contribovis? ( contrib )
+       contribsfm? ( contrib eigen gflags glog )
+       contribxfeatures2d? ( contrib )
+       mkl? ( lapack )
+       java? ( python )
+       opengl? ( || ( qt6 wayland ) )
+       jasper? ( !abi_x86_32 )
+       python? ( ${PYTHON_REQUIRED_USE} )
+       tesseract? ( contrib )
+       testprograms? ( test )
+       test? ( || ( ffmpeg gstreamer ) jpeg png tiff features2d )
+       wayland? ( !vtk )
+"
+#      ?? ( gtk3 qt6 wayland )
+
+RESTRICT="!test? ( test )"
+
+COMMON_DEPEND="
+       app-arch/bzip2[${MULTILIB_USEDEP}]
+       dev-libs/protobuf:=[protoc(+),protobuf(+),${MULTILIB_USEDEP}]
+       sys-libs/zlib[${MULTILIB_USEDEP}]
+       avif? ( media-libs/libavif:=[${MULTILIB_USEDEP}] )
+       cuda? ( dev-util/nvidia-cuda-toolkit:= )
+       cudnn? (
+               dev-cpp/abseil-cpp:=
+               dev-libs/cudnn:=
+       )
+       contribdnn? ( dev-libs/flatbuffers:= )
+       contribhdf? ( sci-libs/hdf5:= )
+       contribfreetype? (
+               media-libs/freetype:2[${MULTILIB_USEDEP}]
+               media-libs/harfbuzz:=[${MULTILIB_USEDEP}]
+       )
+       contribovis? ( >=dev-games/ogre-1.12:= )
+       ffmpeg? ( media-video/ffmpeg:0=[${MULTILIB_USEDEP}] )
+       gdal? ( sci-libs/gdal:= )
+       gflags? ( dev-cpp/gflags:=[${MULTILIB_USEDEP}] )
+       glog? ( dev-cpp/glog:=[${MULTILIB_USEDEP}] )
+       gphoto2? ( media-libs/libgphoto2:=[${MULTILIB_USEDEP}] )
+       gstreamer? (
+               media-libs/gstreamer:1.0[${MULTILIB_USEDEP}]
+               media-libs/gst-plugins-base:1.0[${MULTILIB_USEDEP}]
+       )
+       gtk3? (
+               dev-libs/glib:2[${MULTILIB_USEDEP}]
+               x11-libs/gtk+:3[${MULTILIB_USEDEP}]
+       )
+       ieee1394? (
+               media-libs/libdc1394:=[${MULTILIB_USEDEP}]
+               sys-libs/libraw1394[${MULTILIB_USEDEP}]
+       )
+       jpeg? ( media-libs/libjpeg-turbo:=[${MULTILIB_USEDEP}] )
+       jpeg2k? (
+               jasper? ( media-libs/jasper:= )
+               !jasper? ( media-libs/openjpeg:2=[${MULTILIB_USEDEP}] )
+       )
+       lapack? (
+               atlas? ( sci-libs/atlas )
+               mkl? ( sci-libs/mkl )
+               !atlas? (
+                       !mkl? (
+                               virtual/cblas
+                               >=virtual/lapack-3.10
+                               virtual/lapacke
+                       )
+               )
+       )
+       opencl? (
+               virtual/opencl[${MULTILIB_USEDEP}]
+               dev-util/opencl-headers
+       )
+       openexr? (
+               dev-libs/imath:=
+               media-libs/openexr:=
+       )
+       opengl? (
+               virtual/opengl[${MULTILIB_USEDEP}]
+               virtual/glu[${MULTILIB_USEDEP}]
+       )
+       openni? (
+               dev-libs/OpenNI
+       )
+       openni2? (
+               dev-libs/OpenNI2
+       )
+       png? (
+               !spng? ( media-libs/libpng:0=[${MULTILIB_USEDEP}] )
+               spng? ( media-libs/libspng )
+       )
+       python? (
+               ${PYTHON_DEPS}
+               dev-python/numpy:=[${PYTHON_USEDEP}]
+       )
+       qt6? (
+               dev-qt/qtbase:6[gui,widgets,concurrent,opengl?]
+       )
+       quirc? ( media-libs/quirc )
+       tbb? ( dev-cpp/tbb:=[${MULTILIB_USEDEP}] )
+       tesseract? ( app-text/tesseract[${MULTILIB_USEDEP}] )
+       tiff? ( media-libs/tiff:=[${MULTILIB_USEDEP}] )
+       truetype? ( media-libs/freetype:2[${MULTILIB_USEDEP}] )
+       v4l? ( >=media-libs/libv4l-0.8.3[${MULTILIB_USEDEP}] )
+       vaapi? ( media-libs/libva[${MULTILIB_USEDEP}] )
+       vtk? (
+               sci-libs/vtk:=[rendering,cuda=]
+               || (
+                       (
+                               sci-libs/vtk[opencascade(+)]
+                               sci-libs/opencascade[-ffmpeg]
+                       )
+                       sci-libs/vtk[-opencascade(-)]
+               )
+       )
+       webp? ( media-libs/libwebp:=[${MULTILIB_USEDEP}] )
+       xine? ( media-libs/xine-lib )
+       vulkan? (
+               media-libs/vulkan-loader[${MULTILIB_USEDEP}]
+       )
+       wayland? (
+               x11-libs/libxkbcommon[${MULTILIB_USEDEP}]
+               dev-libs/wayland[${MULTILIB_USEDEP}]
+               >=dev-libs/wayland-protocols-1.13
+       )
+"
+GST_TEST_DEPEND="
+       media-plugins/gst-plugins-aom[${MULTILIB_USEDEP}]
+       media-plugins/gst-plugins-mpeg2enc[${MULTILIB_USEDEP}]
+       media-plugins/gst-plugins-openh264[${MULTILIB_USEDEP}]
+"
+DEPEND="
+       ${COMMON_DEPEND}
+       eigen? ( >=dev-cpp/eigen-3.3.8-r1:3 )
+       java? ( >=virtual/jdk-1.8:* )
+       test? (
+               wayland? ( gui-wm/tinywl )
+               gstreamer? (
+                       amd64? ( ${GST_TEST_DEPEND} )
+                       arm64? ( ${GST_TEST_DEPEND} )
+                       x86? ( ${GST_TEST_DEPEND} )
+                       arm? ( 
media-plugins/gst-plugins-openh264[${MULTILIB_USEDEP}] )
+                       media-plugins/gst-plugins-jpeg[${MULTILIB_USEDEP}]
+                       media-plugins/gst-plugins-libav[${MULTILIB_USEDEP}]
+                       media-plugins/gst-plugins-mpeg2dec[${MULTILIB_USEDEP}]
+                       media-plugins/gst-plugins-mpg123[${MULTILIB_USEDEP}]
+                       media-plugins/gst-plugins-x264[${MULTILIB_USEDEP}]
+                       !elibc_musl? ( !ppc? ( !ppc64? (
+                               
media-plugins/gst-plugins-vpx[${MULTILIB_USEDEP}]
+                       ) ) )
+               )
+       )
+"
+RDEPEND="
+       ${COMMON_DEPEND}
+       java? ( >=virtual/jre-1.8:* )
+"
+unset COMMON_DEPEND
+
+BDEPEND="
+       virtual/pkgconfig
+       cuda? ( dev-util/nvidia-cuda-toolkit:= )
+       doc? (
+               app-text/doxygen[dot]
+               python? (
+                       dev-python/beautifulsoup4[${PYTHON_USEDEP}]
+               )
+       )
+       java? ( >=dev-java/ant-1.10.14-r3 )
+       test? (
+               !arm? (
+                       ffmpeg? (
+                               media-fonts/wqy-microhei
+                       )
+                       gstreamer? (
+                               media-fonts/wqy-microhei
+                       )
+               )
+       )
+"
+
+PATCHES=(
+       "${FILESDIR}/${PN}-3.4.1-cuda-add-relaxed-constexpr.patch"
+       "${FILESDIR}/${PN}-4.1.2-opencl-license.patch"
+       "${FILESDIR}/${PN}-4.4.0-disable-native-cpuflag-detect.patch"
+       "${FILESDIR}/${PN}-4.5.0-link-with-cblas-for-lapack.patch"
+
+       "${FILESDIR}/${PN}-4.8.1-use-system-flatbuffers.patch"
+       "${FILESDIR}/${PN}-4.8.1-use-system-opencl.patch"
+
+       "${FILESDIR}/${PN}-4.9.0-drop-python2-detection.patch"
+       "${FILESDIR}/${PN}-4.9.0-cmake-cleanup.patch"
+
+       "${FILESDIR}/${PN}-4.10.0-dnn-explicitly-include-abseil-cpp.patch"
+       "${FILESDIR}/${PN}-4.10.0-tbb-detection.patch"
+
+       "${FILESDIR}/${PN}-4.11.0-ade-0.1.2e.tar.gz.patch"
+       "${FILESDIR}/${PN}-4.11.0-cmake-CMP0175.patch"
+       "${FILESDIR}/${PN}-4.11.0-cmake-CMP0177.patch"
+
+       "${FILESDIR}/${PN}-4.10.0-cmake4.patch" # PR pending #27192
+       "${FILESDIR}/${PN}-4.11.0-qt-6.9.patch" # 
https://github.com/opencv/opencv/issues/27223
+
+       # TODO applied in src_prepare
+       # "${FILESDIR}/${PN}_contrib-4.8.1-rgbd.patch"
+
+       # 
"${FILESDIR}/${PN}_contrib-4.8.1-NVIDIAOpticalFlowSDK-2.0.tar.gz.patch"
+
+       # "${FILESDIR}/${PN}_contrib-4.10.0-CUDA-12.6-tuple_size.patch" # 3785
+)
+
+cuda_get_host_compiler() {
+       if [[ -n "${NVCC_CCBIN}" ]]; then
+               echo "${NVCC_CCBIN}"
+               return
+       fi
+
+       if [[ -n "${CUDAHOSTCXX}" ]]; then
+               echo "${CUDAHOSTCXX}"
+               return
+       fi
+
+       einfo "Trying to find working CUDA host compiler"
+
+       if ! tc-is-gcc && ! tc-is-clang; then
+               die "$(tc-get-compiler-type) compiler is not supported"
+       fi
+
+       local compiler compiler_type compiler_version
+       local package package_version
+       local NVCC_CCBIN_default
+
+       compiler_type="$(tc-get-compiler-type)"
+       compiler_version="$("${compiler_type}-major-version")"
+
+       # try the default compiler first
+       NVCC_CCBIN="$(tc-getCXX)"
+       NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}"
+
+       compiler="${NVCC_CCBIN/%-${compiler_version}}"
+
+       # store the package so we can re-use it later
+       if tc-is-gcc; then
+               package="sys-devel/${compiler_type}"
+       elif tc-is-clang; then
+               package="llvm-core/${compiler_type}"
+       else
+               die "$(tc-get-compiler-type) compiler is not supported"
+       fi
+
+       package_version="${package}"
+
+       ebegin "testing ${NVCC_CCBIN_default} (default)"
+
+       while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> 
"${T}/cuda_get_host_compiler.log" ; do
+               eend 1
+
+               while true; do
+                       # prepare next version
+                       if ! package_version="<$(best_version 
"${package_version}")"; then
+                               die "could not find a supported version of 
${compiler}"
+                       fi
+
+                       NVCC_CCBIN="${compiler}-$(ver_cut 1 
"${package_version/#<${package}-/}")"
+
+                       [[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && 
break
+               done
+               ebegin "testing ${NVCC_CCBIN}"
+       done
+       eend $?
+
+       echo "${NVCC_CCBIN}"
+       export NVCC_CCBIN
+}
+
+cuda_get_host_native_arch() {
+       [[ -n ${CUDAARCHS} ]] && echo "${CUDAARCHS}"
+
+       __nvcc_device_query || die "failed to query the native device"
+}
+
+pkg_pretend() {
+       [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+
+       if use cuda && [[ -z "${CUDA_GENERATION}" ]] && [[ -z 
"${CUDA_ARCH_BIN}" ]]; then # TODO CUDAARCHS
+               einfo "The target CUDA architecture can be set via one of:"
+               einfo "  - CUDA_GENERATION set to one of Maxwell, Pascal, 
Volta, Turing, Ampere, Lovelace, Hopper, Auto"
+               einfo "  - CUDA_ARCH_BIN, (and optionally CUDA_ARCH_PTX) in the 
form of x.y tuples."
+               einfo "      You can specify multiple tuple separated by \";\"."
+               einfo ""
+               einfo "The CUDA architecture tuple for your device can be found 
at https://developer.nvidia.com/cuda-gpus.";
+       fi
+
+       # When building binpkgs you probably want to include all targets
+       if use cuda && [[ ${MERGE_TYPE} == "buildonly" ]] && [[ -n 
"${CUDA_GENERATION}" || -n "${CUDA_ARCH_BIN}" ]]; then
+               local info_message="When building a binary package it's 
recommended to unset CUDA_GENERATION and CUDA_ARCH_BIN"
+               einfo "$info_message so all available architectures are build."
+       fi
+}
+
+pkg_setup() {
+       [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+
+       use java && java-pkg-opt-2_pkg_setup
+
+       if use cuda && [[ ! -e /dev/nvidia-uvm ]]; then
+               # NOTE We try to load nvidia-uvm and nvidia-modeset here,
+               # so __nvcc_device_query does not fail later.
+
+               nvidia-smi -L &> /dev/null || true
+       fi
+}
+
+src_unpack() {
+       if [[ ${PV} = *9999* ]] ; then
+               git-r3_src_fetch
+               git-r3_checkout
+
+               if use contrib; then
+                       git-r3_fetch "https://github.com/${PN}/${PN}_contrib";
+                       git-r3_checkout 
"https://github.com/${PN}/${PN}_contrib"; "${WORKDIR}/${PN}_contrib-${PV}"
+               fi
+
+               if use test; then
+                       git-r3_fetch "https://github.com/${PN}/${PN}_extra";
+                       git-r3_checkout "https://github.com/${PN}/${PN}_extra"; 
"${WORKDIR}/${PN}_extra-${PV}"
+               fi
+       else
+               default
+       fi
+}
+
+src_prepare() {
+       cmake_src_prepare
+
+       # remove bundled stuff
+       rm -r 3rdparty || die "Removing 3rd party components failed"
+       sed -e '/add_subdirectory(.*3rdparty.*)/ d' \
+               -i CMakeLists.txt cmake/*cmake || die
+
+       sed \
+               -e 's:truetype/wqy:wqy-microhei:g' \
+               -i \
+                       modules/gapi/test/render/gapi_render_tests_ocv.cpp \
+                       modules/gapi/test/render/ftp_render_test.cpp \
+               || die
+
+       if use contrib; then
+               pushd "${WORKDIR}/${PN}_contrib-${PV}" >/dev/null || die
+               eapply "${FILESDIR}/${PN}_contrib-4.8.1-rgbd.patch"
+               eapply 
"${FILESDIR}/${PN}_contrib-4.8.1-NVIDIAOpticalFlowSDK-2.0.tar.gz.patch"
+               popd >/dev/null || die
+
+               ! use contribcvv && { rm -R 
"${WORKDIR}/${PN}_contrib-${PV}/modules/cvv" || die; }
+               ! use contribdnn && { rm -R "${S}/modules/dnn" || die; }
+               ! use contribfreetype && { rm -R 
"${WORKDIR}/${PN}_contrib-${PV}/modules/freetype" || die; }
+               ! use contribhdf && { rm -R 
"${WORKDIR}/${PN}_contrib-${PV}/modules/hdf" || die; }
+               ! use contribovis && { rm -R 
"${WORKDIR}/${PN}_contrib-${PV}/modules/ovis" || die; }
+               ! use contribsfm && { rm -R 
"${WORKDIR}/${PN}_contrib-${PV}/modules/sfm" || die; }
+               ! use contribxfeatures2d && { rm -R 
"${WORKDIR}/${PN}_contrib-${PV}/modules/xfeatures2d" || die; }
+       fi
+
+       mkdir -p "${S}/.cache/ade" || die
+       cp \
+               "${DISTDIR}/ade-${ADE_PV}.tar.gz" \
+               "${S}/.cache/ade/$(md5sum "${DISTDIR}/ade-${ADE_PV}.tar.gz" | 
cut -f 1 -d " ")-v${ADE_PV}.tar.gz" || die
+
+       if [[ ${PV} = *9999* ]] ; then
+               sed \
+                       -e "/ade_filename/s/\.zip/.tar.gz/" \
+                       -e "/set(ade_md5/s/\".*\"/\"${ADE_MD5}\"/g" \
+                       -i "${S}/modules/gapi/cmake/DownloadADE.cmake" || die
+       fi
+
+       if use dnnsamples; then
+               mkdir -p "${S}/.cache/wechat_qrcode" || die
+               for file in "detect.caffemodel" "detect.prototxt" "sr.prototxt" 
"sr.caffemodel"; do
+                       mv \
+                               
"${WORKDIR}/${PN}_3rdparty-${QRCODE_COMMIT}/${file}" \
+                               "${S}/.cache/wechat_qrcode/$( \
+                                       md5sum 
"${WORKDIR}/${PN}_3rdparty-${QRCODE_COMMIT}/${file}" | cut -f 1 -d " " \
+                               )-${file}" || die
+               done
+
+               mv \
+                       
"${WORKDIR}/${PN}_3rdparty-${DNN_SAMPLES_FACE_DETECTOR_COMMIT}/res10_300x300_ssd_iter_140000.caffemodel"
 \
+                       "${S}/samples/dnn/" || die
+       fi
+
+       if use contribxfeatures2d; then
+               cp \
+                       
"${WORKDIR}/${PN}_3rdparty-${XFEATURES2D_BOOSTDESC_COMMIT}/"*.i \
+                       
"${WORKDIR}/${PN}_contrib-${PV}"/modules/xfeatures2d/src/ || die
+               mkdir -p "${S}/.cache/xfeatures2d/boostdesc" || die
+               for file in 
"${WORKDIR}/${PN}_3rdparty-${XFEATURES2D_BOOSTDESC_COMMIT}/"*.i; do
+                       mv \
+                               
"${WORKDIR}/${PN}_3rdparty-${XFEATURES2D_BOOSTDESC_COMMIT}/$(basename 
"${file}")" \
+                               "${S}/.cache/xfeatures2d/boostdesc/$( \
+                                       md5sum 
"${WORKDIR}/${PN}_3rdparty-${XFEATURES2D_BOOSTDESC_COMMIT}/$(basename 
"${file}")" | cut -f 1 -d " " \
+                               )-$(basename "${file}")" || die
+               done
+
+               cp \
+                       
"${WORKDIR}/${PN}_3rdparty-${XFEATURES2D_VGG_COMMIT}/"*.i \
+                       
"${WORKDIR}/${PN}_contrib-${PV}"/modules/xfeatures2d/src/ || die
+               mkdir -p "${S}/.cache/xfeatures2d/vgg" || die
+               for file in 
"${WORKDIR}/${PN}_3rdparty-${XFEATURES2D_VGG_COMMIT}/"*.i; do
+                       mv \
+                               
"${WORKDIR}/${PN}_3rdparty-${XFEATURES2D_VGG_COMMIT}/$(basename "${file}")" \
+                               "${S}/.cache/xfeatures2d/vgg/$( \
+                                       md5sum 
"${WORKDIR}/${PN}_3rdparty-${XFEATURES2D_VGG_COMMIT}/$(basename "${file}")" | 
cut -f 1 -d " " \
+                               )-$(basename "${file}")" || die
+               done
+       fi
+
+       if use contribdnn; then
+               mkdir -p "${S}/.cache/data" || die
+               mkdir -p "${WORKDIR}/${PN}_extra-${PV}/testdata/cv/face/" || die
+               file="face_landmark_model.dat"
+               cp \
+                       
"${WORKDIR}/${PN}_3rdparty-${FACE_ALIGNMENT_COMMIT}/${file}" \
+                       "${WORKDIR}/${PN}_extra-${PV}/testdata/cv/face/" \
+                       || die
+               mv \
+                       
"${WORKDIR}/${PN}_3rdparty-${FACE_ALIGNMENT_COMMIT}/${file}" \
+                       "${S}/.cache/data/$( \
+                               md5sum 
"${WORKDIR}/${PN}_3rdparty-${FACE_ALIGNMENT_COMMIT}/${file}" | cut -f 1 -d " " \
+                       )-${file}" || die
+
+               mkdir -p 
"${WORKDIR}/${PN}_extra-${PV}/testdata/cv/dnn/onnx/models/" || die
+               mv "${DISTDIR}/yunet-202303.onnx" 
"${WORKDIR}/${PN}_extra-${PV}/testdata/cv/dnn/onnx/models/" || die
+       fi
+
+       if use cuda; then
+               mkdir -p "${S}/.cache/nvidia_optical_flow"
+               cp \
+                       
"${DISTDIR}/NVIDIAOpticalFlowSDK-${NVIDIA_OPTICAL_FLOW_COMMIT}.tar.gz" \
+                       "${S}/.cache/nvidia_optical_flow/$( \
+                               md5sum 
"${DISTDIR}/NVIDIAOpticalFlowSDK-${NVIDIA_OPTICAL_FLOW_COMMIT}.tar.gz" | cut -f 
1 -d " " \
+                       )-${NVIDIA_OPTICAL_FLOW_COMMIT}.tar.gz" || die
+       fi
+
+       if use java; then
+               java-pkg-opt-2_src_prepare
+
+               # set encoding so even this cmake build will pick it up.
+               ANT_OPTS+=" -Dfile.encoding=iso-8859-1"
+               ANT_OPTS+=" -Dant.build.javac.source=$(java-pkg_get-source)"
+               ANT_OPTS+=" -Dant.build.javac.target=$(java-pkg_get-target)"
+       fi
+
+       if multilib_native_use testprograms; then
+               sed \
+                       -e 
's:share/OpenCV/testdata:@OPENCV_TEST_DATA_INSTALL_PATH@:g' \
+                       -i  
"${S}/cmake/templates/opencv_run_all_tests_unix.sh.in" || die
+       fi
+}
+
+multilib_src_configure() {
+       # bug #919101 and https://github.com/opencv/opencv/issues/19020
+       filter-lto
+
+       if tc-is-gcc && [[ $(gcc-major-version) -ge 15 ]] && use contribdnn; 
then
+               append-cxxflags "-fno-tree-vectorize"
+       fi
+
+       # please don't sort here, order is the same as in CMakeLists.txt
+       local mycmakeargs=(
+               -DMIN_VER_CMAKE=3.26
+
+               -DCMAKE_POLICY_DEFAULT_CMP0148="OLD" # FindPythonInterp
+
+               # for protobuf
+               -DCMAKE_CXX_STANDARD=17
+
+       # Optional 3rd party components
+       # ===================================================
+               -DOPENCV_ENABLE_NONFREE="$(usex non-free)"
+               -DWITH_QUIRC="$(usex quirc)"
+               -DWITH_FLATBUFFERS="$(multilib_native_usex contribdnn)"
+               -DWITH_1394="$(usex ieee1394)"
+               # -DWITH_AVFOUNDATION="no" # IOS
+               -DWITH_VTK="$(multilib_native_usex vtk)"
+               -DWITH_EIGEN="$(usex eigen)"
+               -DWITH_VFW="no" # Video windows support
+               -DWITH_FFMPEG="$(usex ffmpeg)"
+               -DWITH_GSTREAMER="$(usex gstreamer)"
+               -DWITH_GTK="$(usex gtk3)"
+               -DWITH_GTK_2_X="no" # only want gtk3 nowadays
+               -DWITH_IMGCODEC_GIF="$(usex gif)"
+               -DWITH_IPP="no"
+               -DWITH_JASPER="$(usex jpeg2k "$(multilib_native_usex jasper)")"
+               -DWITH_JPEG="$(usex jpeg)"
+               -DWITH_OPENJPEG="$(usex jpeg2k "$(multilib_native_usex 
!jasper)")"
+               -DWITH_WEBP="$(usex webp)"
+               -DWITH_OPENEXR="$(multilib_native_usex openexr)"
+               -DWITH_OPENGL="$(usex qt6 "$(usex opengl)")"
+               -DOpenGL_GL_PREFERENCE="GLVND"
+               -DWITH_OPENVX="no"
+               -DWITH_OPENNI="$(multilib_native_usex openni)"
+               -DWITH_OPENNI2="$(multilib_native_usex openni2)"
+               -DWITH_PNG="$(usex png)"
+               -DWITH_SPNG="$(usex png "$(multilib_native_usex spng)")"
+               -DWITH_GDCM="no"
+               -DWITH_PVAPI="no"
+               -DWITH_GIGEAPI="no"
+               -DWITH_ARAVIS="no"
+               -DWITH_WIN32UI="no"              # Windows only
+               # -DWITH_QUICKTIME="no"
+               # -DWITH_QTKIT="no"
+               -DWITH_TBB="$(usex tbb)"
+               -DWITH_OPENMP="$(usex openmp)"
+               -DWITH_PTHREADS_PF="yes"
+               -DWITH_TIFF="$(usex tiff)"
+               -DWITH_UNICAP="no"               # Not packaged
+               -DWITH_V4L="$(usex v4l)"
+               -DWITH_LIBV4L="$(usex v4l)"
+               # -DWITH_DSHOW="yes"                 # direct show supp
+               -DWITH_MSMF="no"
+               -DWITH_XIMEA="no"        # Windows only
+               -DWITH_XINE="$(multilib_native_usex xine)"
+               -DWITH_CLP="no"
+               -DWITH_OPENCL="$(usex opencl)"
+               -DWITH_OPENCL_SVM="no" # "$(usex opencl)"
+               -DWITH_DIRECTX="no"
+               -DWITH_INTELPERC="no"
+               -DWITH_IPP_A="no"
+               -DWITH_MATLAB="no"
+               -DWITH_VA="$(usex vaapi)"
+               -DWITH_VA_INTEL="$(usex vaapi "$(usex video_cards_intel)")"
+               -DWITH_GDAL="$(multilib_native_usex gdal)"
+               -DWITH_GPHOTO2="$(usex gphoto2)"
+               -DWITH_LAPACK="$(multilib_native_usex lapack)"
+               -DWITH_ITT="no" # 3dparty libs itt_notify
+
+               -DWITH_AVIF="$(usex avif)"
+               -DWITH_FREETYPE="$(usex truetype)"
+               -DWITH_VULKAN="$(usex vulkan)"
+               -DWITH_WAYLAND="$(usex wayland)"
+       # ===================================================
+       # CUDA build components: nvidia-cuda-toolkit
+       # ===================================================
+               -DWITH_CUDA="$(multilib_native_usex cuda)"
+               -DWITH_CUBLAS="$(multilib_native_usex cuda)"
+               -DWITH_CUFFT="$(multilib_native_usex cuda)"
+               -DWITH_CUDNN="$(multilib_native_usex cudnn)"
+               # NOTE set this via MYCMAKEARGS if needed
+               -DWITH_NVCUVID="no" # TODO needs NVIDIA Video Codec SDK
+               -DWITH_NVCUVENC="no" # TODO needs NVIDIA Video Codec SDK
+               -DCUDA_NPP_LIBRARY_ROOT_DIR="$(usex cuda 
"${CUDA_PATH:-${ESYSROOT}/opt/cuda}" "")"
+       # ===================================================
+       # OpenCV build components
+       # ===================================================
+               -DBUILD_SHARED_LIBS="yes"
+               -DBUILD_JAVA="$(multilib_native_usex java)" # Ant needed, no 
compile flag
+               -DBUILD_ANDROID_EXAMPLES="no"
+               -DBUILD_opencv_apps="$(usex opencvapps)"
+               -DBUILD_DOCS="$(usex doc)" # Doesn't install anyways.
+               -DBUILD_EXAMPLES="$(multilib_native_usex examples)"
+               -DBUILD_TESTS="$(multilib_native_usex test "yes" 
"$(multilib_native_usex testprograms)")"
+               -DBUILD_PERF_TESTS="no"
+
+               # -DBUILD_WITH_STATIC_CRT="no"
+               -DBUILD_WITH_DYNAMIC_IPP="no"
+               -DBUILD_FAT_JAVA_LIB="no"
+               # -DBUILD_ANDROID_SERVICE="no"
+               -DBUILD_CUDA_STUBS="$(multilib_native_usex cuda)"
+               -DOPENCV_EXTRA_MODULES_PATH="$(usex contrib 
"${WORKDIR}/${PN}_contrib-${PV}/modules" "")"
+       # ===================================================
+       # OpenCV installation options
+       # ===================================================
+               -DINSTALL_CREATE_DISTRIB="no"
+               -DINSTALL_BIN_EXAMPLES="$(multilib_native_usex examples)"
+               -DINSTALL_C_EXAMPLES="$(multilib_native_usex examples)"
+               -DINSTALL_TESTS="$(multilib_native_usex testprograms)"
+               # -DINSTALL_ANDROID_EXAMPLES="no"
+               -DINSTALL_TO_MANGLED_PATHS="no"
+               -DOPENCV_GENERATE_PKGCONFIG="yes"
+               # opencv uses both ${CMAKE_INSTALL_LIBDIR} and ${LIB_SUFFIX}
+               # to set its destination libdir
+               -DLIB_SUFFIX=
+       # ===================================================
+       # OpenCV build options
+       # ===================================================
+               -DENABLE_CCACHE="no"
+               # bug 733796, but PCH is a risky game in CMake anyway
+               -DBUILD_USE_SYMLINKS="yes"
+               -DENABLE_PRECOMPILED_HEADERS="no"
+               -DENABLE_SOLUTION_FOLDERS="no"
+               -DENABLE_PROFILING="no"
+               -DENABLE_COVERAGE="no"
+               -DOPENCV_DOWNLOAD_TRIES_LIST="0"
+
+               -DHAVE_opencv_java="$(multilib_native_usex java)"
+
+               -DBUILD_WITH_DEBUG_INFO="$(usex debug)"
+               -DOPENCV_ENABLE_MEMORY_SANITIZER="$(usex debug)"
+               -DCV_TRACE="$(usex debug)"
+               -DENABLE_NOISY_WARNINGS="$(usex debug)"
+               -DOPENCV_WARNINGS_ARE_ERRORS="no"
+               -DENABLE_IMPL_COLLECTION="no"
+               -DENABLE_INSTRUMENTATION="no"
+               -DGENERATE_ABI_DESCRIPTOR="no"
+       # ===================================================
+       # things we want to be hard off or not yet figured out
+       # ===================================================
+               -DBUILD_PACKAGE="no"
+       # ===================================================
+       # Not building protobuf but update files bug #631418
+       # ===================================================
+               -DWITH_PROTOBUF="yes"
+               -DBUILD_PROTOBUF="no"
+               -DPROTOBUF_UPDATE_FILES="yes"
+               -DProtobuf_MODULE_COMPATIBLE="yes"
+       # ===================================================
+       # things we want to be hard enabled not worth useflag
+       # ===================================================
+               -DOPENCV_DOC_INSTALL_PATH="share/doc/${PF}"
+               -DOPENCV_SAMPLES_BIN_INSTALL_PATH="libexec/${PN}/bin/samples"
+
+               -DBUILD_IPP_IW="no"
+               -DBUILD_ITT="no"
+
+       # ===================================================
+       # configure modules to be build
+       # ===================================================
+               -DBUILD_opencv_gapi="$(usex ffmpeg yes "$(usex gstreamer)")"
+               -DBUILD_opencv_features2d="$(usex features2d)"
+               -DBUILD_opencv_java_bindings_generator="$(usex java)"
+               -DBUILD_opencv_js="no"
+               -DBUILD_opencv_js_bindings_generator="no"
+               -DBUILD_opencv_objc_bindings_generator="no"
+               -DBUILD_opencv_python2="no"
+               -DBUILD_opencv_ts="$(usex test)"
+               -DBUILD_opencv_video="$(usex ffmpeg yes "$(usex gstreamer)")"
+               -DBUILD_opencv_videoio="$(usex ffmpeg yes "$(usex gstreamer)")"
+
+               -DBUILD_opencv_cudalegacy="no"
+
+               # -DBUILD_opencv_world="yes"
+
+               -DOPENCV_PLUGIN_VERSION=".$(ver_rs 1-2 '' "$(ver_cut 1-2)")"
+               -DOPENCV_PLUGIN_ARCH=".${ARCH}"
+
+               -DDNN_PLUGIN_LIST="all"
+               -DHIGHGUI_ENABLE_PLUGINS="no"
+
+               -DOPENCV_SKIP_SAMPLES_SYCL="yes"
+       )
+
+       local VIDEOIO_PLUGIN_LIST=()
+       if use ffmpeg; then
+               VIDEOIO_PLUGIN_LIST+=("ffmpeg")
+       fi
+       if use gstreamer; then
+               VIDEOIO_PLUGIN_LIST+=("gstreamer")
+       fi
+
+       mycmakeargs+=(
+               -DVIDEOIO_PLUGIN_LIST="$(IFS=';'; echo 
"${VIDEOIO_PLUGIN_LIST[*]}")"
+       )
+
+       if [[ ${PV} != *9999* ]] ; then
+               mycmakeargs+=(
+                       -DOPENCV_VCSVERSION="${PV}"
+               )
+       fi
+
+       if use qt6; then
+               mycmakeargs+=(
+                       -DWITH_QT="$(multilib_native_usex qt6)"
+                       -DCMAKE_DISABLE_FIND_PACKAGE_Qt5="yes"
+               )
+       else
+               mycmakeargs+=(
+                       -DWITH_QT="no"
+                       -DCMAKE_DISABLE_FIND_PACKAGE_Qt5="yes"
+                       -DCMAKE_DISABLE_FIND_PACKAGE_Qt6="yes"
+               )
+       fi
+
+       # ==================================================
+       # cpu flags, should solve 633900
+       #===================================================
+       # TODO binhost 
https://github.com/opencv/opencv/wiki/CPU-optimizations-build-options
+
+       local CPU_BASELINE=""
+       for i in "${CPU_FEATURES_MAP[@]}" ; do
+               if [[ ${ABI} != x86 || ${i%:*} != "cpu_flags_x86_avx2" ]]; then 
# workaround for Bug 747163
+                       local value
+                       # These are merged into one flag internally
+                       if [[ ${ABI} == amd64 ]]; then
+                               case "${i%:*}" in
+                                       
cpu_flags_x86_avx512er|cpu_flags_x86_avx512pf)
+                                               value="AVX512_KNL_EXTRA"
+                                               ;;
+                                       
cpu_flags_x86_avx512_4fmaps|cpu_flags_x86_avx512_4vnniw)
+                                               value="AVX512_KNM_EXTRA"
+                                               ;;
+                                       *)
+                                               value="${i#*:}"
+                                               ;;
+                               esac
+                       else
+                               value=${i#*:}
+                       fi
+
+                       use "${i%:*}" && CPU_BASELINE="${CPU_BASELINE}${value};"
+               fi
+       done
+       unset CPU_FEATURES_MAP
+
+       mycmakeargs+=(
+               -DCPU_BASELINE="${CPU_BASELINE}"
+       )
+       if [[ ${MERGE_TYPE} != "buildonly" ]]; then
+               mycmakeargs+=(
+                       -DOPENCV_CPU_OPT_IMPLIES_IGNORE="yes"
+                       -DCPU_DISPATCH=
+               )
+       fi
+
+       # ===================================================
+       # OpenCV Contrib Modules
+       # ===================================================
+       # NOTE
+       # we remove unused modules,
+       # so we shouldn't need to disable options for unused modules
+       if use contrib; then
+               mycmakeargs+=(
+                       -DBUILD_opencv_cvv="$(usex contribcvv)"
+                       -DBUILD_opencv_dnn="$(usex contribdnn)"
+                       -DOPENCV_DNN_OPENCL="$(usex opencl)"
+                       -DOPENCV_DNN_CUDA="$(multilib_native_usex cudnn)"
+
+                       -DBUILD_opencv_freetype="$(usex contribfreetype)"
+                       -DBUILD_opencv_hdf="$(multilib_native_usex contribhdf)"
+                       -DBUILD_opencv_ovis="$(usex contribovis)"
+                       -DBUILD_opencv_sfm="$(usex contribsfm)"
+                       -DBUILD_opencv_xfeatures2d="$(usex contribxfeatures2d)"
+               )
+
+               if ! multilib_native_use tesseract; then
+                       mycmakeargs+=(
+                               -DCMAKE_DISABLE_FIND_PACKAGE_Tesseract="yes"
+                       )
+               fi
+       fi
+
+       # workaround for bug 413429
+       tc-export CC CXX
+
+       if multilib_native_use cuda; then
+               cuda_add_sandbox -w
+               addwrite "/proc/self/task"
+               addpredict "/dev/char/"
+
+               if ! test -w /dev/nvidiactl; then
+                       # eqawarn "Can't access the GPU at /dev/nvidiactl."
+                       # eqawarn "User $(id -nu) is not in the group 
\"video\"."
+                       if [[ -z "${CUDA_GENERATION}" ]] && [[ -z 
"${CUDA_ARCH_BIN}" ]]; then
+                               # build all targets
+                               mycmakeargs+=(
+                                       -DCUDA_GENERATION=""
+                               )
+                       fi
+               else
+                       : "${CUDAARCHS:="$(cuda_get_host_native_arch)"}"
+                       export CUDAARCHS
+               fi
+
+               local -x CUDAHOSTCXX CUDAHOSTLD
+               CUDAHOSTCXX="$(cuda_get_host_compiler)"
+               CUDAHOSTLD="$(tc-getCXX)"
+
+               if tc-is-gcc; then
+                       # Filter out IMPLICIT_LINK_DIRECTORIES picked up by 
CMAKE_DETERMINE_COMPILER_ABI(CUDA)
+                       # See 
/usr/share/cmake/Help/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES.rst
+                       CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES_EXCLUDE=$(
+                               "${CUDAHOSTLD}" -E -v - <<<"int main(){}" |& \
+                               grep LIBRARY_PATH | cut -d '=' -f 2 | cut -d 
':' -f 1
+                       )
+               fi
+
+               mycmakeargs+=(
+                       -DENABLE_CUDA_FIRST_CLASS_LANGUAGE="yes"
+               )
+       fi
+
+       if use ffmpeg; then
+               mycmakeargs+=(
+                       -DOPENCV_GAPI_GSTREAMER="no"
+                       -DOPENCV_FFMPEG_DISABLE_MEDIASDK="yes"
+               )
+       fi
+
+       # according to modules/java/jar/CMakeLists.txt:23-26
+       if use java; then
+               mycmakeargs+=(
+                       -DOPENCV_JAVA_SOURCE_VERSION="$(java-pkg_get-source)"
+                       -DOPENCV_JAVA_TARGET_VERSION="$(java-pkg_get-target)"
+               )
+       fi
+
+       if use mkl; then
+               mycmakeargs+=(
+                       -DLAPACK_IMPL="MKL"
+                       -DMKL_WITH_OPENMP="$(usex openmp)"
+                       -DMKL_WITH_TBB="$(usex tbb)"
+               )
+       fi
+
+       # NOTE set this via MYCMAKEARGS if needed
+       if use opencl; then
+               if has_version sci-libs/clfft; then
+                       mycmakeargs+=( -DWITH_OPENCLAMDFFT="yes" )
+               else
+                       mycmakeargs+=( -DWITH_OPENCLAMDFFT="no" )
+               fi
+               if has_version sci-libs/clblas; then
+                       mycmakeargs+=( -DWITH_OPENCLAMDBLAS="yes" )
+               else
+                       mycmakeargs+=( -DWITH_OPENCLAMDBLAS="no" )
+               fi
+       else
+               mycmakeargs+=(
+                       -DWITH_OPENCLAMDFFT="no"
+                       -DWITH_OPENCLAMDBLAS="no"
+               )
+       fi
+
+       # NOTE due to multilib we can't do
+       # if multilib_native_use test; then
+       if use test; then
+               # opencv tests assume to be build in Release mode
+               local -x CMAKE_BUILD_TYPE="Release"
+               mycmakeargs+=(
+                       
-DOPENCV_TEST_DATA_PATH="${WORKDIR}/${PN}_extra-${PV}/testdata"
+               )
+               if use vtk; then
+                       mycmakeargs+=(
+                               -DVTK_MPI_NUMPROCS="$(makeopts_jobs)" # TODO
+                       )
+               fi
+       fi
+
+       if multilib_native_use testprograms; then
+               # NOTE do this so testprograms do not fail
+               mycmakeargs+=(
+                       -DOPENCV_TEST_INSTALL_PATH="libexec/${PN}/bin/test"
+               )
+       fi
+
+       if multilib_native_use python; then
+               # shellcheck disable=SC2317
+               python_configure() {
+                       # Set all python variables to load the correct Gentoo 
paths
+                       local mycmakeargs=(
+                               "${mycmakeargs[@]}"
+                               # python_setup alters PATH and sets this as 
wrapper
+                               # to the correct interpreter we are building for
+                               -DBUILD_opencv_python3="yes"
+                               -DBUILD_opencv_python_bindings_generator="yes"
+                               -DBUILD_opencv_python_tests="$(usex test)"
+                               -DPYTHON_DEFAULT_EXECUTABLE="${EPYTHON}"
+                               -DINSTALL_PYTHON_EXAMPLES="$(usex examples)"
+                       )
+                       cmake_src_configure
+               }
+
+               python_foreach_impl python_configure
+       else
+               mycmakeargs+=(
+                       -DPYTHON_EXECUTABLE="no"
+                       -DINSTALL_PYTHON_EXAMPLES="no"
+                       -DBUILD_opencv_python3="no"
+                       -DBUILD_opencv_python_bindings_generator="no"
+                       -DBUILD_opencv_python_tests="no"
+               )
+               cmake_src_configure
+       fi
+}
+
+multilib_src_compile() {
+       if multilib_native_use python; then
+               python_foreach_impl cmake_src_compile
+       else
+               cmake_src_compile
+       fi
+}
+
+# from firefox/thunderbird
+virtwl() {
+       debug-print-function "${FUNCNAME[*]}" "$@"
+
+       [[ $# -lt 1 ]] && die "${FUNCNAME[*]} needs at least one argument"
+       [[ -n $XDG_RUNTIME_DIR ]] || die "${FUNCNAME[*]} needs XDG_RUNTIME_DIR 
to be set; try xdg_environment_reset"
+       tinywl -h >/dev/null || die 'tinywl -h failed'
+
+       local VIRTWL VIRTWL_PID
+       coproc VIRTWL { WLR_BACKENDS=headless exec tinywl -s 'echo 
$WAYLAND_DISPLAY; read _; kill $PPID'; }
+       local -x WAYLAND_DISPLAY
+       read -r WAYLAND_DISPLAY <&"${VIRTWL[0]}"
+
+       debug-print "${FUNCNAME[*]}: $*"
+       "$@"
+       local r=$?
+
+       [[ -n $VIRTWL_PID ]] || die "tinywl exited unexpectedly"
+       exec {VIRTWL[0]}<&- {VIRTWL[1]}>&-
+       return "${r}"
+}
+
+multilib_src_test() {
+       # no tests on ABI_X86_32
+       ! multilib_is_native_abi && return
+
+       # NOTE we don't run the tests
+       use testprograms && return
+
+       declare -xA OPENCV_SKIP_TESTS
+
+       local -x OPENCV_SKIP_TESTS_core=(
+               'hal_intrin128.*32x4_CPP_EMULATOR'
+               'hal_intrin128.*64x2_CPP_EMULATOR'
+       )
+
+       local -x OPENCV_SKIP_TESTS_gapi=(
+               'AsyncAPICancelation/cancel/*.basic'
+       )
+
+       local -x OPENCV_SKIP_TESTS_videoio=(
+               '*mfx*'
+               'videoio/videoio_bunny.frame_count/12'
+       )
+
+       local -x OPENCV_SKIP_TESTS_video=(
+               'GOTURN.accuracy'
+               'DaSiamRPN.accuracy'
+               'NanoTrack.accuracy_NanoTrack_V1'
+               'NanoTrack.accuracy_NanoTrack_V2'
+               'Tracking/DistanceAndOverlap.GOTURN*'
+       )
+
+       if ! use gtk3 && ! use qt6; then
+               # TODO Compositor doesn't have required interfaces in function 
'init'
+               # && ! use wayland
+               local -x OPENCV_SKIP_TESTS_highgui=(
+                       'Highgui_GUI.*'
+               )
+       else
+               addpredict /dev/fuse
+       fi
+
+       if multilib_native_use cuda; then
+               local -x OPENCV_SKIP_TESTS_cudaoptflow=(
+                       'CUDA_OptFlow/BroxOpticalFlow.Regression/0'
+                       'CUDA_OptFlow/BroxOpticalFlow.OpticalFlowNan/0'
+                       'CUDA_OptFlow/NvidiaOpticalFlow_1_0.Regression/0'
+                       'CUDA_OptFlow/NvidiaOpticalFlow_2_0.Regression/0'
+               )
+               if use opengl; then
+                       local -x OPENCV_SKIP_TESTS_cudaarithm=(
+                               'OpenGL/Buffer.MapDevice/*'
+                               'OpenGL/Buffer*'
+                               'OpenGL/*Gpu*'
+                               'OpenGL/Texture2D*'
+                       )
+               fi
+       fi
+
+       if use contribdnn; then
+               local -x OPENCV_SKIP_TESTS_dnn=(
+                       'Test_ONNX_layers.LSTM_cell_forward/*'
+                       'Test_ONNX_layers.LSTM_cell_bidirectional/*'
+                       'Test_TensorFlow_layers.Convolution3D/*'
+                       'Test_TensorFlow_layers.concat_3d/*'
+               )
+               local -x OPENCV_SKIP_TESTS_objdetect=(
+                       'Objdetect_face_detection.regression'
+                       'Objdetect_face_recognition.regression' 
'Objdetect_QRCode_Encode_Decode_Structured_Append.regression'
+               )
+       else
+               local -x OPENCV_SKIP_TESTS_objdetect=(
+                       'Objdetect_face_detection.regression'
+                       'Objdetect_face_recognition.regression'
+                       )
+
+               OPENCV_SKIP_TESTS_video+=(
+                       'vittrack.accuracy_vittrack'
+               )
+       fi
+
+       if use dnnsamples; then
+               local -x OPENCV_SKIP_TESTS_wechat_qrcode=(
+                       'Objdetect_QRCode_points_position.rotate45'
+                       'Objdetect_QRCode_Big.regression'
+                       'Objdetect_QRCode_Tiny.regression'
+                       'Objdetect_QRCode_Multi.regression/*'
+                       'Objdetect_QRCode_Easy_Multi.regression/1'
+               )
+       fi
+
+       local -x OPENCV_SKIP_TESTS_imgproc=(
+               "Imgproc_ConnectedComponents.spaghetti_bbdt_sauf_stats"
+               "Imgproc_ConnectedComponents.chessboard_even"
+               "Imgproc_ConnectedComponents.chessboard_odd"
+               "Imgproc_ConnectedComponents.maxlabels_8conn_even"
+               "Imgproc_ConnectedComponents.maxlabels_8conn_odd"
+       )
+
+       local -x OPENCV_SKIP_TESTS_ximgproc=(
+               'InterpolatorTest.RICReferenceAccuracy'
+       )
+
+       if multilib_native_use cuda; then
+               if ! SANDBOX_WRITE=/dev/nvidiactl test -w /dev/nvidiactl ; then
+                       eerror "Can't access the GPU at /dev/nvidiactl."
+                       eerror "User $(id -nu) is not in the group \"video\"."
+                       local -x TEST_CUDA="false"
+                       # local -x OPENCV_PARALLEL_BACKEND="threads"
+                       # local -x DNN_BACKEND_OPENCV="cuda"
+
+                       local -x OPENCV_SKIP_TESTS_photo=( "CUDA_*" )
+                       local -x OPENCV_SKIP_TESTS_stitching=( "CUDA_*" )
+                       OPENCV_SKIP_TESTS_video+=( "CUDA_*" )
+               else
+                       cuda_add_sandbox -w
+                       addwrite "/dev/dri/"
+                       [[ -c /dev/udmabuf ]] && addwrite /dev/udmabuf
+               fi
+       fi
+
+       # shellcheck disable=SC2317
+       opencv_test() {
+               cd "${BUILD_DIR}" || die
+
+               # directories to search for _core_ plugins
+               local -x OPENCV_CORE_PLUGIN_PATH="${BUILD_DIR}/lib"
+               # directories to search for _dnn_ plugins
+               local -x OPENCV_DNN_PLUGIN_PATH="${BUILD_DIR}/lib"
+               # directories to search for _videoio_ plugins
+               local -x OPENCV_VIDEOIO_PLUGIN_PATH="${BUILD_DIR}/lib"
+               # # path to extra OpenVINO plugins
+               # local -x OPENCV_DNN_IE_EXTRA_PLUGIN_PATH="${BUILD_DIR}/lib"
+
+               local -x OPENCV_TEMP_PATH="${T}"
+
+               local -x 
OPENCV_TEST_DATA_PATH="${WORKDIR}/${PN}_extra-${PV}/testdata"
+
+               local test_opts_base=(
+                       --skip_unstable=1
+                       --test_threads="$(makeopts_jobs)"
+               )
+
+               local results=()
+
+               local tests
+               readarray -t tests <<< "$(find "${BUILD_DIR}/bin" -name 
'opencv_test_*')"
+
+               for test in "${tests[@]}" ; do
+
+                       if [[ ${TEST_CUDA} == "false" && ${test} = 
*opencv_test_cu* ]] ; then
+                               eqawarn "Skipping test ${test}"
+                               continue
+                       fi
+
+                       local test_opts=(
+                               --gtest_color=yes
+                               
--gtest_output="json:${BUILD_DIR}/test-reports/$(basename "${test}").json"
+                       )
+
+                       local testname
+                       testname="OPENCV_SKIP_TESTS_$(basename 
"${test//opencv_test_/}")[*]"
+                       if [[ -n "${!testname}" ]]; then
+                               test_opts+=(
+                                       --gtest_filter="-$(IFS=':'; echo 
"${!testname}")"
+                               )
+                       fi
+
+                       einfo "${test} ${test_opts_base[*]} ${test_opts[*]}"
+                       if ! "${test}" "${test_opts_base[@]}" 
"${test_opts[@]}"; then
+                               results+=( "$(basename "${test}")" )
+
+                               if [[ -z "${OPENCV_TEST_CONTINUE_ON_FAIL}" ]]; 
then
+                                       eerror "${results[*]} failed"
+                                       die
+                               fi
+                       fi
+               done
+
+               if [[ -n "${results[*]}" ]]; then
+                       echo -e "failed: ${results[*]}"
+                       if command -v jq; then
+                               for res in "${results[@]}"; do
+                                       echo "${res} $(
+                                               jq -r '.testsuites.[] |
+                                                       select( .failures != 0) 
|
+                                                       .testsuite.[] |
+                                                       select( (.failures | 
length) > 0) |
+                                                       
"\(.classname).\(.name)"' "${BUILD_DIR}/test-reports/${res}.json" | \
+                                                       tr '\n' ' '
+                                               )"
+                               done
+                       fi
+                       die "${results[*]}"
+               fi
+       }
+
+       local virtx_cmd=
+
+       xdg_environment_reset
+
+       if use wayland; then
+               virtx_cmd=virtwl
+       else
+               virtx_cmd=virtx
+       fi
+
+       # NOTE we do this to defeat pkgcheck saying virtualx.eclass is unused, 
as it can't detect it being called from a var
+       [[ -z "${virtx_cmd}" ]] && virtx
+
+       local -x MESA_SHADER_CACHE_DISABLE=true
+
+       if multilib_native_use python; then
+               "${virtx_cmd}" python_foreach_impl opencv_test
+       else
+               "${virtx_cmd}" opencv_test
+       fi
+}
+
+multilib_src_install() {
+       if use abi_x86_64 && use abi_x86_32; then
+               MULTILIB_WRAPPED_HEADERS=( # {{{
+                       # [opencv4]
+                       /usr/include/opencv4/opencv2/cvconfig.h
+                       /usr/include/opencv4/opencv2/opencv_modules.hpp
+
+                       /usr/include/opencv4/opencv2/core_detect.hpp
+
+                       /usr/include/opencv4/opencv2/cudaarithm.hpp
+                       /usr/include/opencv4/opencv2/cudabgsegm.hpp
+                       /usr/include/opencv4/opencv2/cudacodec.hpp
+                       /usr/include/opencv4/opencv2/cudafeatures2d.hpp
+                       /usr/include/opencv4/opencv2/cudafilters.hpp
+                       /usr/include/opencv4/opencv2/cudaimgproc.hpp
+                       /usr/include/opencv4/opencv2/cudalegacy.hpp
+                       /usr/include/opencv4/opencv2/cudalegacy/NCV.hpp
+                       
/usr/include/opencv4/opencv2/cudalegacy/NCVBroxOpticalFlow.hpp
+                       
/usr/include/opencv4/opencv2/cudalegacy/NCVHaarObjectDetection.hpp
+                       /usr/include/opencv4/opencv2/cudalegacy/NCVPyramid.hpp
+                       /usr/include/opencv4/opencv2/cudalegacy/NPP_staging.hpp
+                       /usr/include/opencv4/opencv2/cudaobjdetect.hpp
+                       /usr/include/opencv4/opencv2/cudaoptflow.hpp
+                       /usr/include/opencv4/opencv2/cudastereo.hpp
+                       /usr/include/opencv4/opencv2/cudawarping.hpp
+                       # [cudev]
+                       /usr/include/opencv4/opencv2/cudev.hpp
+                       /usr/include/opencv4/opencv2/cudev/block/block.hpp
+                       
/usr/include/opencv4/opencv2/cudev/block/detail/reduce.hpp
+                       
/usr/include/opencv4/opencv2/cudev/block/detail/reduce_key_val.hpp
+                       
/usr/include/opencv4/opencv2/cudev/block/dynamic_smem.hpp
+                       /usr/include/opencv4/opencv2/cudev/block/reduce.hpp
+                       /usr/include/opencv4/opencv2/cudev/block/scan.hpp
+                       
/usr/include/opencv4/opencv2/cudev/block/vec_distance.hpp
+                       /usr/include/opencv4/opencv2/cudev/common.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/binary_func.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/binary_op.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/color.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/deriv.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/expr.hpp
+                       
/usr/include/opencv4/opencv2/cudev/expr/per_element_func.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/reduction.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/unary_func.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/unary_op.hpp
+                       /usr/include/opencv4/opencv2/cudev/expr/warping.hpp
+                       
/usr/include/opencv4/opencv2/cudev/functional/color_cvt.hpp
+                       
/usr/include/opencv4/opencv2/cudev/functional/detail/color_cvt.hpp
+                       
/usr/include/opencv4/opencv2/cudev/functional/functional.hpp
+                       
/usr/include/opencv4/opencv2/cudev/functional/tuple_adapter.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/copy.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/detail/copy.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/histogram.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/integral.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/minmaxloc.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/pyr_down.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/pyr_up.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/reduce.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/reduce_to_column.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/reduce_to_row.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/split_merge.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/transform.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/detail/transpose.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/histogram.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/integral.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/pyramids.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/reduce.hpp
+                       
/usr/include/opencv4/opencv2/cudev/grid/reduce_to_vec.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/split_merge.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/transform.hpp
+                       /usr/include/opencv4/opencv2/cudev/grid/transpose.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/constant.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/deriv.hpp
+                       
/usr/include/opencv4/opencv2/cudev/ptr2d/detail/gpumat.hpp
+                       
/usr/include/opencv4/opencv2/cudev/ptr2d/extrapolation.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/glob.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/gpumat.hpp
+                       
/usr/include/opencv4/opencv2/cudev/ptr2d/interpolation.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/lut.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/mask.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/remap.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/resize.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/texture.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/traits.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/transform.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/warping.hpp
+                       /usr/include/opencv4/opencv2/cudev/ptr2d/zip.hpp
+                       /usr/include/opencv4/opencv2/cudev/util/atomic.hpp
+                       /usr/include/opencv4/opencv2/cudev/util/detail/tuple.hpp
+                       
/usr/include/opencv4/opencv2/cudev/util/detail/type_traits.hpp
+                       /usr/include/opencv4/opencv2/cudev/util/limits.hpp
+                       
/usr/include/opencv4/opencv2/cudev/util/saturate_cast.hpp
+                       
/usr/include/opencv4/opencv2/cudev/util/simd_functions.hpp
+                       /usr/include/opencv4/opencv2/cudev/util/tuple.hpp
+                       /usr/include/opencv4/opencv2/cudev/util/type_traits.hpp
+                       /usr/include/opencv4/opencv2/cudev/util/vec_math.hpp
+                       /usr/include/opencv4/opencv2/cudev/util/vec_traits.hpp
+                       
/usr/include/opencv4/opencv2/cudev/warp/detail/reduce.hpp
+                       
/usr/include/opencv4/opencv2/cudev/warp/detail/reduce_key_val.hpp
+                       /usr/include/opencv4/opencv2/cudev/warp/reduce.hpp
+                       /usr/include/opencv4/opencv2/cudev/warp/scan.hpp
+                       /usr/include/opencv4/opencv2/cudev/warp/shuffle.hpp
+                       /usr/include/opencv4/opencv2/cudev/warp/warp.hpp
+                       # [contribcvv]
+                       /usr/include/opencv4/opencv2/cvv.hpp
+                       /usr/include/opencv4/opencv2/cvv/call_meta_data.hpp
+                       /usr/include/opencv4/opencv2/cvv/cvv.hpp
+                       /usr/include/opencv4/opencv2/cvv/debug_mode.hpp
+                       /usr/include/opencv4/opencv2/cvv/dmatch.hpp
+                       /usr/include/opencv4/opencv2/cvv/filter.hpp
+                       /usr/include/opencv4/opencv2/cvv/final_show.hpp
+                       /usr/include/opencv4/opencv2/cvv/show_image.hpp
+                       # [contribdnn]
+                       /usr/include/opencv4/opencv2/dnn.hpp
+                       /usr/include/opencv4/opencv2/dnn/all_layers.hpp
+                       /usr/include/opencv4/opencv2/dnn/dict.hpp
+                       /usr/include/opencv4/opencv2/dnn/dnn.hpp
+                       /usr/include/opencv4/opencv2/dnn/dnn.inl.hpp
+                       /usr/include/opencv4/opencv2/dnn/layer.details.hpp
+                       /usr/include/opencv4/opencv2/dnn/layer.hpp
+                       /usr/include/opencv4/opencv2/dnn/shape_utils.hpp
+                       /usr/include/opencv4/opencv2/dnn/utils/debug_utils.hpp
+                       
/usr/include/opencv4/opencv2/dnn/utils/inference_engine.hpp
+                       /usr/include/opencv4/opencv2/dnn/version.hpp
+                       /usr/include/opencv4/opencv2/dnn_superres.hpp
+                       # [contribhdf]
+                       /usr/include/opencv4/opencv2/hdf.hpp
+                       /usr/include/opencv4/opencv2/hdf/hdf5.hpp
+
+                       /usr/include/opencv4/opencv2/mcc.hpp
+                       /usr/include/opencv4/opencv2/mcc/ccm.hpp
+                       /usr/include/opencv4/opencv2/mcc/checker_detector.hpp
+                       /usr/include/opencv4/opencv2/mcc/checker_model.hpp
+
+                       /usr/include/opencv4/opencv2/text.hpp
+                       /usr/include/opencv4/opencv2/text/erfilter.hpp
+                       /usr/include/opencv4/opencv2/text/ocr.hpp
+                       /usr/include/opencv4/opencv2/text/swt_text_detection.hpp
+                       /usr/include/opencv4/opencv2/text/textDetector.hpp
+
+                       # [qt6]
+                       /usr/include/opencv4/opencv2/viz.hpp
+                       /usr/include/opencv4/opencv2/viz/types.hpp
+                       /usr/include/opencv4/opencv2/viz/viz3d.hpp
+                       /usr/include/opencv4/opencv2/viz/vizcore.hpp
+                       /usr/include/opencv4/opencv2/viz/widget_accessor.hpp
+                       /usr/include/opencv4/opencv2/viz/widgets.hpp
+
+                       /usr/include/opencv4/opencv2/wechat_qrcode.hpp
+               ) # }}}
+       fi
+
+       if multilib_native_use python; then
+               python_foreach_impl cmake_src_install
+               python_foreach_impl python_optimize
+       else
+               cmake_src_install
+       fi
+
+       for plugin in "${ED}/usr/$(get_libdir)/libopencv_"*".$(ver_rs 1-2 '' 
"$(ver_cut 1-2)").${ARCH}"* ; do
+               patchelf --set-soname "$(basename "${plugin}" 
".$(get_libname)")" "${plugin}"
+       done
+}

diff --git a/profiles/arch/amd64/use.mask b/profiles/arch/amd64/use.mask
index 6fa65aba43de..4f6141bd7fb4 100644
--- a/profiles/arch/amd64/use.mask
+++ b/profiles/arch/amd64/use.mask
@@ -4,6 +4,15 @@
 # Unmask the flag which corresponds to ARCH.
 -amd64
 
+# Paul Zander <[email protected]> (2025-05-01)
+# media-libs/libspng only keyworded on amd64, arm64
+-spng
+
+# Paul Zander <[email protected]> (2025-05-01)
+# only keyworded on amd64, arm
+-openni
+-openni2
+
 # Thomas Bettler <[email protected]> (2024-11-04)
 # media-libs/tiff only keyworded on amd64
 -lerc

diff --git a/profiles/arch/arm/use.mask b/profiles/arch/arm/use.mask
index a7f97c884075..3392eaf57970 100644
--- a/profiles/arch/arm/use.mask
+++ b/profiles/arch/arm/use.mask
@@ -4,6 +4,11 @@
 # Unmask the flag which corresponds to ARCH.
 -arm
 
+# Paul Zander <[email protected]> (2025-05-01)
+# only keyworded on amd64, arm
+-openni
+-openni2
+
 # Sam James <[email protected]> (2024-06-13)
 # Needs as-yet-unkeyworded KF6 (bug #934215)
 kde

diff --git a/profiles/arch/arm64/use.mask b/profiles/arch/arm64/use.mask
index eb3669e0a16d..79bb11cae00f 100644
--- a/profiles/arch/arm64/use.mask
+++ b/profiles/arch/arm64/use.mask
@@ -4,6 +4,10 @@
 # Unmask the flag which corresponds to ARCH.
 -arm64
 
+# Paul Zander <[email protected]> (2025-05-01)
+# media-libs/libspng only keyworded on amd64, arm64
+-spng
+
 # Sam James <[email protected]> (2025-02-19)
 # x11-drivers/xf86-input-wacom is available here
 -input_devices_wacom

diff --git a/profiles/arch/base/use.mask b/profiles/arch/base/use.mask
index f79211c7362f..60cd7027580c 100644
--- a/profiles/arch/base/use.mask
+++ b/profiles/arch/base/use.mask
@@ -1,6 +1,15 @@
 # Copyright 1999-2025 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
+# Paul Zander <[email protected]> (2025-05-01)
+# media-libs/libspng only keyworded on amd64, arm64
+spng
+
+# Paul Zander <[email protected]> (2025-05-01)
+# only keyworded on amd64, arm
+openni
+openni2
+
 # Thomas Bettler <[email protected]> (2024-11-04)
 # media-libs/tiff only keyworded on amd64
 lerc

diff --git a/profiles/features/big-endian/package.use.mask 
b/profiles/features/big-endian/package.use.mask
index cdb1f2f138e7..3b2be0d3fead 100644
--- a/profiles/features/big-endian/package.use.mask
+++ b/profiles/features/big-endian/package.use.mask
@@ -16,6 +16,7 @@ media-libs/gexiv2 test
 
 # matoro <[email protected]> (2023-11-16)
 # media-libs/libvpx casualties (#700902)
+media-libs/opencv test
 media-video/ffmpeg vpx
 media-video/ffmpeg-compat vpx
 www-client/firefox system-libvpx

Reply via email to