media-libs/mesa: Version bump to 20.0.0
[gentoo.git] / media-libs / opencv / opencv-3.4.1-r7.ebuild
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=7
5
6 PYTHON_COMPAT=( python3_{6,7} )
7
8 : ${CMAKE_MAKEFILE_GENERATOR:=ninja}
9 inherit java-pkg-opt-2 java-ant-2 python-r1 toolchain-funcs cmake-multilib
10
11 DESCRIPTION="A collection of algorithms and sample code for various computer vision problems"
12 HOMEPAGE="https://opencv.org"
13 TINY_DNN_PV="1.0.0a3"
14 SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz
15         dnnsamples? ( https://dev.gentoo.org/~amynka/snap/${PN}-3.4.0-res10_300x300-caffeemodel.tar.gz )
16         contrib? (
17                 https://github.com/${PN}/${PN}_contrib/archive/${PV}.tar.gz -> ${P}_contrib.tar.gz
18                 contribdnn? (
19                         https://github.com/tiny-dnn/tiny-dnn/archive/v${TINY_DNN_PV}.tar.gz -> tiny-dnn-${TINY_DNN_PV}.tar.gz
20                         https://dev.gentoo.org/~amynka/snap/${PN}-3.4.0-face_landmark_model.tar.gz
21                 )
22                 contribxfeatures2d? ( https://dev.gentoo.org/~amynka/snap/vgg_boostdesc-3.2.0.tar.gz )
23         )"
24
25 LICENSE="BSD"
26 SLOT="0/3.4.1" # subslot = libopencv* soname version
27 KEYWORDS="amd64 ~arm arm64 ~ppc ~ppc64 x86 ~amd64-linux"
28 IUSE="contrib contribcvv contribdnn contribhdf contribsfm contribxfeatures2d cpu_flags_x86_sse cpu_flags_x86_sse2 cpu_flags_x86_sse3 cpu_flags_x86_ssse3 cpu_flags_x86_sse4_1 cpu_flags_x86_sse4_2 cpu_flags_x86_popcnt cpu_flags_x86_avx cpu_flags_x86_avx2 cpu_flags_x86_fma3 cuda debug dnnsamples +eigen examples ffmpeg gdal gflags glog gphoto2 gstreamer gtk ieee1394 jpeg lapack libav opencl openexr opengl openmp pch png +python qt5 tesseract testprograms threads tiff vaapi v4l vtk webp xine"
29 # OpenGL needs gtk or Qt installed to activate, otherwise build system
30 # will silently disable it Wwithout the user knowing, which defeats the
31 # purpose of the opengl use flag.
32 REQUIRED_USE="
33         cuda? ( tesseract? ( opencl ) )
34         dnnsamples? ( examples )
35         gflags? ( contrib )
36         glog? ( contrib )
37         contribcvv? ( contrib qt5 )
38         contribdnn? ( contrib )
39         contribhdf? ( contrib )
40         contribsfm? ( contrib eigen gflags glog )
41         contribxfeatures2d? ( contrib cuda )
42         java? ( python )
43         opengl? ( || ( gtk qt5 ) )
44         python? ( ${PYTHON_REQUIRED_USE} )
45         tesseract? ( contrib )"
46
47 # The following logic is intrinsic in the build system, but we do not enforce
48 # it on the useflags since this just blocks emerging pointlessly:
49 #       gtk? ( !qt5 )
50 #       openmp? ( !threads )
51
52 RDEPEND="
53         app-arch/bzip2[${MULTILIB_USEDEP}]
54         dev-libs/protobuf:=[${MULTILIB_USEDEP}]
55         sys-libs/zlib[${MULTILIB_USEDEP}]
56         cuda? ( dev-util/nvidia-cuda-toolkit:0= )
57         contribhdf? ( sci-libs/hdf5 )
58         ffmpeg? (
59                 libav? ( media-video/libav:0=[${MULTILIB_USEDEP}] )
60                 !libav? ( media-video/ffmpeg:0=[${MULTILIB_USEDEP}] )
61         )
62         gdal? ( sci-libs/gdal:= )
63         gflags? ( dev-cpp/gflags[${MULTILIB_USEDEP}] )
64         glog? ( dev-cpp/glog[${MULTILIB_USEDEP}] )
65         gphoto2? ( media-libs/libgphoto2[${MULTILIB_USEDEP}] )
66         gstreamer? (
67                 media-libs/gstreamer:1.0[${MULTILIB_USEDEP}]
68                 media-libs/gst-plugins-base:1.0[${MULTILIB_USEDEP}]
69         )
70         gtk? (
71                 dev-libs/glib:2[${MULTILIB_USEDEP}]
72                 x11-libs/gtk+:2[${MULTILIB_USEDEP}]
73                 opengl? ( x11-libs/gtkglext[${MULTILIB_USEDEP}] )
74         )
75         ieee1394? (
76                 media-libs/libdc1394[${MULTILIB_USEDEP}]
77                 sys-libs/libraw1394[${MULTILIB_USEDEP}]
78         )
79         java? ( >=virtual/jre-1.6:* )
80         jpeg? ( virtual/jpeg:0[${MULTILIB_USEDEP}] )
81         lapack? ( virtual/lapack )
82         opencl? ( virtual/opencl[${MULTILIB_USEDEP}] )
83         openexr? ( media-libs/openexr[${MULTILIB_USEDEP}] )
84         opengl? (
85                 virtual/opengl[${MULTILIB_USEDEP}]
86                 virtual/glu[${MULTILIB_USEDEP}]
87         )
88         png? ( media-libs/libpng:0=[${MULTILIB_USEDEP}] )
89         python? ( ${PYTHON_DEPS} dev-python/numpy[${PYTHON_USEDEP}] )
90         qt5? (
91                 dev-qt/qtgui:5
92                 dev-qt/qtwidgets:5
93                 dev-qt/qttest:5
94                 dev-qt/qtconcurrent:5
95                 opengl? ( dev-qt/qtopengl:5 )
96         )
97         tesseract? ( app-text/tesseract[opencl=] )
98         threads? ( dev-cpp/tbb[${MULTILIB_USEDEP}] )
99         tiff? ( media-libs/tiff:0[${MULTILIB_USEDEP}] )
100         v4l? ( >=media-libs/libv4l-0.8.3[${MULTILIB_USEDEP}] )
101         vtk? ( sci-libs/vtk[rendering] )
102         webp? ( media-libs/libwebp[${MULTILIB_USEDEP}] )
103         xine? ( media-libs/xine-lib )"
104 DEPEND="${RDEPEND}
105         virtual/pkgconfig[${MULTILIB_USEDEP}]
106         eigen? ( dev-cpp/eigen:3 )
107         java?  ( >=virtual/jdk-1.6 )
108         vaapi?  ( x11-libs/libva )"
109
110 MULTILIB_WRAPPED_HEADERS=(
111         /usr/include/opencv2/cvconfig.h
112         /usr/include/opencv2/opencv_modules.hpp
113         # [contrib_cvv]
114         /usr/include/opencv2/cvv.hpp
115         /usr/include/opencv2/cvv/call_meta_data.hpp
116         /usr/include/opencv2/cvv/cvv.hpp
117         /usr/include/opencv2/cvv/debug_mode.hpp
118         /usr/include/opencv2/cvv/dmatch.hpp
119         /usr/include/opencv2/cvv/filter.hpp
120         /usr/include/opencv2/cvv/final_show.hpp
121         /usr/include/opencv2/cvv/show_image.hpp
122         # [contrib_hdf]
123         /usr/include/opencv2/hdf.hpp
124         /usr/include/opencv2/hdf/hdf5.hpp
125         # [vtk]
126         /usr/include/opencv2/viz.hpp
127         /usr/include/opencv2/viz/types.hpp
128         /usr/include/opencv2/viz/viz3d.hpp
129         /usr/include/opencv2/viz/vizcore.hpp
130         /usr/include/opencv2/viz/widget_accessor.hpp
131         /usr/include/opencv2/viz/widgets.hpp
132         # [cudev]
133         /usr/include/opencv2/cudaarithm.hpp
134         /usr/include/opencv2/cudabgsegm.hpp
135         /usr/include/opencv2/cudacodec.hpp
136         /usr/include/opencv2/cudafeatures2d.hpp
137         /usr/include/opencv2/cudafilters.hpp
138         /usr/include/opencv2/cudaimgproc.hpp
139         /usr/include/opencv2/cudalegacy.hpp
140         /usr/include/opencv2/cudalegacy/NCVBroxOpticalFlow.hpp
141         /usr/include/opencv2/cudalegacy/NCVHaarObjectDetection.hpp
142         /usr/include/opencv2/cudalegacy/NCV.hpp
143         /usr/include/opencv2/cudalegacy/NCVPyramid.hpp
144         /usr/include/opencv2/cudalegacy/NPP_staging.hpp
145         /usr/include/opencv2/cudaobjdetect.hpp
146         /usr/include/opencv2/cudaoptflow.hpp
147         /usr/include/opencv2/cudastereo.hpp
148         /usr/include/opencv2/cudawarping.hpp
149         /usr/include/opencv2/cudev/block/block.hpp
150         /usr/include/opencv2/cudev/block/detail/reduce.hpp
151         /usr/include/opencv2/cudev/block/detail/reduce_key_val.hpp
152         /usr/include/opencv2/cudev/block/dynamic_smem.hpp
153         /usr/include/opencv2/cudev/block/reduce.hpp
154         /usr/include/opencv2/cudev/block/scan.hpp
155         /usr/include/opencv2/cudev/block/vec_distance.hpp
156         /usr/include/opencv2/cudev/common.hpp
157         /usr/include/opencv2/cudev/expr/binary_func.hpp
158         /usr/include/opencv2/cudev/expr/binary_op.hpp
159         /usr/include/opencv2/cudev/expr/color.hpp
160         /usr/include/opencv2/cudev/expr/deriv.hpp
161         /usr/include/opencv2/cudev/expr/expr.hpp
162         /usr/include/opencv2/cudev/expr/per_element_func.hpp
163         /usr/include/opencv2/cudev/expr/reduction.hpp
164         /usr/include/opencv2/cudev/expr/unary_func.hpp
165         /usr/include/opencv2/cudev/expr/unary_op.hpp
166         /usr/include/opencv2/cudev/expr/warping.hpp
167         /usr/include/opencv2/cudev/functional/color_cvt.hpp
168         /usr/include/opencv2/cudev/functional/detail/color_cvt.hpp
169         /usr/include/opencv2/cudev/functional/functional.hpp
170         /usr/include/opencv2/cudev/functional/tuple_adapter.hpp
171         /usr/include/opencv2/cudev/grid/copy.hpp
172         /usr/include/opencv2/cudev/grid/detail/copy.hpp
173         /usr/include/opencv2/cudev/grid/detail/histogram.hpp
174         /usr/include/opencv2/cudev/grid/detail/integral.hpp
175         /usr/include/opencv2/cudev/grid/detail/minmaxloc.hpp
176         /usr/include/opencv2/cudev/grid/detail/pyr_down.hpp
177         /usr/include/opencv2/cudev/grid/detail/pyr_up.hpp
178         /usr/include/opencv2/cudev/grid/detail/reduce.hpp
179         /usr/include/opencv2/cudev/grid/detail/reduce_to_column.hpp
180         /usr/include/opencv2/cudev/grid/detail/reduce_to_row.hpp
181         /usr/include/opencv2/cudev/grid/detail/split_merge.hpp
182         /usr/include/opencv2/cudev/grid/detail/transform.hpp
183         /usr/include/opencv2/cudev/grid/detail/transpose.hpp
184         /usr/include/opencv2/cudev/grid/histogram.hpp
185         /usr/include/opencv2/cudev/grid/integral.hpp
186         /usr/include/opencv2/cudev/grid/pyramids.hpp
187         /usr/include/opencv2/cudev/grid/reduce.hpp
188         /usr/include/opencv2/cudev/grid/reduce_to_vec.hpp
189         /usr/include/opencv2/cudev/grid/split_merge.hpp
190         /usr/include/opencv2/cudev/grid/transform.hpp
191         /usr/include/opencv2/cudev/grid/transpose.hpp
192         /usr/include/opencv2/cudev.hpp
193         /usr/include/opencv2/cudev/ptr2d/constant.hpp
194         /usr/include/opencv2/cudev/ptr2d/deriv.hpp
195         /usr/include/opencv2/cudev/ptr2d/detail/gpumat.hpp
196         /usr/include/opencv2/cudev/ptr2d/extrapolation.hpp
197         /usr/include/opencv2/cudev/ptr2d/glob.hpp
198         /usr/include/opencv2/cudev/ptr2d/gpumat.hpp
199         /usr/include/opencv2/cudev/ptr2d/interpolation.hpp
200         /usr/include/opencv2/cudev/ptr2d/lut.hpp
201         /usr/include/opencv2/cudev/ptr2d/mask.hpp
202         /usr/include/opencv2/cudev/ptr2d/remap.hpp
203         /usr/include/opencv2/cudev/ptr2d/resize.hpp
204         /usr/include/opencv2/cudev/ptr2d/texture.hpp
205         /usr/include/opencv2/cudev/ptr2d/traits.hpp
206         /usr/include/opencv2/cudev/ptr2d/transform.hpp
207         /usr/include/opencv2/cudev/ptr2d/warping.hpp
208         /usr/include/opencv2/cudev/ptr2d/zip.hpp
209         /usr/include/opencv2/cudev/util/atomic.hpp
210         /usr/include/opencv2/cudev/util/detail/tuple.hpp
211         /usr/include/opencv2/cudev/util/detail/type_traits.hpp
212         /usr/include/opencv2/cudev/util/limits.hpp
213         /usr/include/opencv2/cudev/util/saturate_cast.hpp
214         /usr/include/opencv2/cudev/util/simd_functions.hpp
215         /usr/include/opencv2/cudev/util/tuple.hpp
216         /usr/include/opencv2/cudev/util/type_traits.hpp
217         /usr/include/opencv2/cudev/util/vec_math.hpp
218         /usr/include/opencv2/cudev/util/vec_traits.hpp
219         /usr/include/opencv2/cudev/warp/detail/reduce.hpp
220         /usr/include/opencv2/cudev/warp/detail/reduce_key_val.hpp
221         /usr/include/opencv2/cudev/warp/reduce.hpp
222         /usr/include/opencv2/cudev/warp/scan.hpp
223         /usr/include/opencv2/cudev/warp/shuffle.hpp
224         /usr/include/opencv2/cudev/warp/warp.hpp
225 )
226
227 PATCHES=(
228         "${FILESDIR}/${PN}-3.0.0-gles.patch"
229         "${FILESDIR}/${PN}-3.4.0-disable-download.patch"
230         "${FILESDIR}/${P}-compilation-C-mode.patch" # https://bugs.gentoo.org/656530
231         "${FILESDIR}/${P}-python-lib-suffix-hack.patch"
232         "${FILESDIR}/${P}-cuda-add-relaxed-constexpr.patch"
233         "${FILESDIR}/${P}-remove-git-autodetect.patch"
234         "${FILESDIR}/${P}-fix-build-with-va.patch" # bug https://bugs.gentoo.org/656576
235         "${FILESDIR}/${P}-popcnt.patch" # https://bugs.gentoo.org/633900
236         "${FILESDIR}/${P}-fix-on-x86.patch" # https://bugs.gentoo.org/682104
237         "${FILESDIR}/${P}-python37.patch" # https://bugs.gentoo.org/691480
238 )
239
240 pkg_pretend() {
241         [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
242 }
243
244 pkg_setup() {
245         [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
246         java-pkg-opt-2_pkg_setup
247 }
248
249 src_prepare() {
250         cmake-utils_src_prepare
251
252         # remove bundled stuff
253         rm -rf 3rdparty || die "Removing 3rd party components failed"
254         sed -e '/add_subdirectory(.*3rdparty.*)/ d' \
255                 -i CMakeLists.txt cmake/*cmake || die
256
257         if use dnnsamples; then
258                 mv  "${WORKDIR}/res10_300x300_ssd_iter_140000.caffemodel" "${WORKDIR}/${P}/samples/dnn/" || die
259         fi
260
261         if use contrib; then
262                 cd  "${WORKDIR}/${PN}_contrib-${PV}" || die
263                 eapply "${FILESDIR}/${PN}-3.3.0-remove-tiny-dnn-autodownload.patch"
264
265                 if use contribxfeatures2d; then
266                         mv "${WORKDIR}"/*.i "${WORKDIR}/${PN}_contrib-${PV}"/modules/xfeatures2d/src/ || die
267                 fi
268         fi
269
270         java-pkg-opt-2_src_prepare
271
272         # this really belongs in src_prepare() too
273         JAVA_ANT_ENCODING="iso-8859-1"
274         # set encoding so even this cmake build will pick it up.
275         export ANT_OPTS+=" -Dfile.encoding=iso-8859-1"
276         java-ant-2_src_configure
277 }
278
279 multilib_src_configure() {
280         # please dont sort here, order is the same as in CMakeLists.txt
281         GLOBALCMAKEARGS=(
282         # Optional 3rd party components
283         # ===================================================
284                 -DENABLE_DOWNLOAD=OFF
285                 -DWITH_1394=$(usex ieee1394)
286         #       -DWITH_AVFOUNDATION=OFF # IOS
287                 -DWITH_VTK=$(multilib_native_usex vtk)
288                 -DWITH_EIGEN=$(usex eigen)
289                 -DWITH_VFW=OFF # Video windows support
290                 -DWITH_FFMPEG=$(usex ffmpeg)
291                 -DWITH_GSTREAMER=$(usex gstreamer)
292                 -DWITH_GSTREAMER_0_10=OFF       # Don't want this
293                 -DWITH_GTK=$(usex gtk)
294                 -DWITH_GTK_2_X=$(usex gtk)
295                 -DWITH_IPP=OFF
296                 -DWITH_JASPER=OFF
297                 -DWITH_JPEG=$(usex jpeg)
298                 -DWITH_WEBP=$(usex webp)
299                 -DWITH_OPENEXR=$(usex openexr)
300                 -DWITH_OPENGL=$(usex opengl)
301                 -DWITH_OPENVX=OFF
302                 -DWITH_OPENNI=OFF       # Not packaged
303                 -DWITH_OPENNI2=OFF      # Not packaged
304                 -DWITH_PNG=$(usex png)
305                 -DWITH_GDCM=OFF
306                 -DWITH_PVAPI=OFF
307                 -DWITH_GIGEAPI=OFF
308                 -DWITH_ARAVIS=OFF
309                 -DWITH_QT=$(multilib_native_usex qt5 5 OFF)
310                 -DWITH_WIN32UI=OFF              # Windows only
311         #       -DWITH_QUICKTIME=OFF
312         #       -DWITH_QTKIT=OFF
313                 -DWITH_TBB=$(usex threads)
314                 -DWITH_OPENMP=$(usex openmp)
315                 -DWITH_CSTRIPES=OFF
316                 -DWITH_PTHREADS_PF=ON
317                 -DWITH_TIFF=$(usex tiff)
318                 -DWITH_UNICAP=OFF               # Not packaged
319                 -DWITH_V4L=$(usex v4l)
320                 -DWITH_LIBV4L=$(usex v4l)
321                 -DWITH_DSHOW=ON                 # direct show supp
322                 -DWITH_MSMF=OFF
323                 -DWITH_XIMEA=OFF        # Windows only
324                 -DWITH_XINE=$(multilib_native_usex xine)
325                 -DWITH_CLP=OFF
326                 -DWITH_OPENCL=$(usex opencl)
327                 -DWITH_OPENCL_SVM=OFF
328                 -DWITH_OPENCLAMDFFT=$(usex opencl)
329                 -DWITH_OPENCLAMDBLAS=$(usex opencl)
330                 -DWITH_DIRECTX=OFF
331                 -DWITH_INTELPERC=OFF
332                 -DWITH_IPP_A=OFF
333                 -DWITH_MATLAB=OFF
334                 -DWITH_VA=$(usex vaapi)
335                 -DWITH_VA_INTEL=$(usex vaapi)
336                 -DWITH_GDAL=$(multilib_native_usex gdal)
337                 -DWITH_GPHOTO2=$(usex gphoto2)
338                 -DWITH_LAPACK=$(multilib_native_usex lapack)
339                 -DWITH_ITT=OFF # 3dparty libs itt_notify
340         # ===================================================
341         # CUDA build components: nvidia-cuda-toolkit takes care of GCC version
342         # ===================================================
343                 -DWITH_CUDA=$(multilib_native_usex cuda)
344                 -DWITH_CUBLAS=$(multilib_native_usex cuda)
345                 -DWITH_CUFFT=$(multilib_native_usex cuda)
346                 -DWITH_NVCUVID=OFF
347 #               -DWITH_NVCUVID=$(usex cuda)
348                 -DCUDA_NPP_LIBRARY_ROOT_DIR=$(usex cuda "${EPREFIX}/opt/cuda" "")
349         # ===================================================
350         # OpenCV build components
351         # ===================================================
352                 -DBUILD_SHARED_LIBS=ON
353                 -DBUILD_JAVA=$(multilib_native_usex java) # Ant needed, no compile flag
354                 -DBUILD_ANDROID_EXAMPLES=OFF
355                 -DBUILD_opencv_apps=
356                 -DBUILD_DOCS=OFF # Doesn't install anyways.
357                 -DBUILD_EXAMPLES=$(multilib_native_usex examples)
358                 -DBUILD_PERF_TESTS=OFF
359                 -DBUILD_TESTS=$(multilib_native_usex testprograms)
360                 -DBUILD_WITH_DEBUG_INFO=$(usex debug)
361         #       -DBUILD_WITH_STATIC_CRT=OFF
362                 -DBUILD_WITH_DYNAMIC_IPP=OFF
363                 -DBUILD_FAT_JAVA_LIB=$(multilib_native_usex java)
364         #       -DBUILD_ANDROID_SERVICE=OFF
365                 -DBUILD_CUDA_STUBS=$(multilib_native_usex cuda)
366                 -DOPENCV_EXTRA_MODULES_PATH=$(usex contrib "${WORKDIR}/opencv_contrib-${PV}/modules" "")
367         # ===================================================
368         # OpenCV installation options
369         # ===================================================
370                 -DINSTALL_CREATE_DISTRIB=OFF
371                 -DINSTALL_C_EXAMPLES=$(multilib_native_usex examples)
372                 -DINSTALL_TESTS=$(multilib_native_usex testprograms)
373                 -DINSTALL_PYTHON_EXAMPLES=$(multilib_native_usex examples)
374         #       -DINSTALL_ANDROID_EXAMPLES=OFF
375                 -DINSTALL_TO_MANGLED_PATHS=OFF
376                 # opencv uses both ${CMAKE_INSTALL_LIBDIR} and ${LIB_SUFFIX}
377                 # to set its destination libdir
378                 -DLIB_SUFFIX=
379         # ===================================================
380         # OpenCV build options
381         # ===================================================
382                 -DENABLE_CCACHE=OFF
383                 -DENABLE_PRECOMPILED_HEADERS=$(usex pch)
384                 -DENABLE_SOLUTION_FOLDERS=OFF
385                 -DENABLE_PROFILING=OFF
386                 -DENABLE_COVERAGE=OFF
387
388                 -DHAVE_opencv_java=$(multilib_native_usex java YES NO)
389                 -DENABLE_NOISY_WARNINGS=OFF
390                 -DOPENCV_WARNINGS_ARE_ERRORS=OFF
391                 -DENABLE_IMPL_COLLECTION=OFF
392                 -DENABLE_INSTRUMENTATION=OFF
393                 -DGENERATE_ABI_DESCRIPTOR=OFF
394                 -DDOWNLOAD_EXTERNAL_TEST_DATA=OFF
395         # ===================================================
396         # things we want to be hard off or not yet figured out
397         # ===================================================
398                 -DBUILD_PACKAGE=OFF
399         # ===================================================
400         # Not building protobuf but update files bug #631418
401         # ===================================================
402                 -DBUILD_PROTOBUF=OFF
403                 -DPROTOBUF_UPDATE_FILES=ON
404         # ===================================================
405         # things we want to be hard enabled not worth useflag
406         # ===================================================
407                 -DCMAKE_SKIP_RPATH=ON
408                 -DOPENCV_DOC_INSTALL_PATH=
409         # ==================================================
410         # cpu flags, should solve 633900
411         #===================================================
412                 -DOPENCV_CPU_OPT_IMPLIES_IGNORE=ON
413                 -DCPU_DISPATCH=
414                 -DENABLE_SSE=$(usex cpu_flags_x86_sse)
415                 -DENABLE_SSE2=$(usex cpu_flags_x86_sse2)
416                 -DENABLE_SSE3=$(usex cpu_flags_x86_sse3)
417                 -DENABLE_SSSE3=$(usex cpu_flags_x86_ssse3)
418                 -DENABLE_SSE41=$(usex cpu_flags_x86_sse4_1)
419                 -DENABLE_SSE42=$(usex cpu_flags_x86_sse4_2)
420                 -DENABLE_POPCNT=$(usex cpu_flags_x86_popcnt)
421                 -DENABLE_AVX=$(usex cpu_flags_x86_avx)
422                 -DENABLE_AVX2=$(usex cpu_flags_x86_avx2)
423                 -DENABLE_FMA3=$(usex cpu_flags_x86_fma3)
424         )
425
426         # ===================================================
427         # OpenCV Contrib Modules
428         # ===================================================
429         if use contrib; then
430                 GLOBALCMAKEARGS+=(
431                         -DBUILD_opencv_dnn=$(usex contribdnn ON OFF)
432                         -DTINYDNN_ROOT="${WORKDIR}/tiny-dnn-${TINY_DNN_PV}"
433                         -DBUILD_opencv_dnns_easily_fooled=OFF
434                         -DBUILD_opencv_xfeatures2d=$(usex contribxfeatures2d ON OFF)
435                         -DBUILD_opencv_cvv=$(usex contribcvv ON OFF)
436                         -DBUILD_opencv_hdf=$(multilib_native_usex contribhdf ON OFF)
437                         -DBUILD_opencv_sfm=$(usex contribsfm ON OFF)
438                 )
439
440                 if multilib_is_native_abi; then
441                         GLOBALCMAKEARGS+=(
442                                 -DCMAKE_DISABLE_FIND_PACKAGE_Tesseract=$(usex !tesseract)
443                         )
444                 else
445                         GLOBALCMAKEARGS+=(
446                                 -DCMAKE_DISABLE_FIND_PACKAGE_Tesseract=ON
447                         )
448                 fi
449         fi
450
451         # workaround for bug 413429
452         tc-export CC CXX
453
454         local mycmakeargs=( ${GLOBALCMAKEARGS[@]}
455                 -DPYTHON_EXECUTABLE=OFF
456                 -DINSTALL_PYTHON_EXAMPLES=OFF
457         )
458
459         cmake-utils_src_configure
460
461         # Copy face_land_model to ${CMAKE_BINARY_DIR}/${OPENCV_TEST_DATA_INSTALL_PATH}
462         # TODO patch ocv_download to copy files into destination dirs
463         if use contribdnn; then
464                 mkdir -p "${BUILD_DIR}"/share/OpenCV/testdata/cv/face/ || die
465                 cp "${WORKDIR}"/face_landmark_model.dat "${BUILD_DIR}"/share/OpenCV/testdata/cv/face/ || die
466         fi
467
468 }
469
470 python_module_compile() {
471         local BUILD_DIR=${orig_BUILD_DIR}
472         local mycmakeargs=( ${GLOBALCMAKEARGS[@]} )
473
474         # Set all python variables to load the correct Gentoo paths
475         mycmakeargs+=(
476                 # python_setup alters PATH and sets this as wrapper
477                 # to the correct interpreter we are building for
478                 -DPYTHON_DEFAULT_EXECUTABLE=python
479                 -DINSTALL_PYTHON_EXAMPLES=$(usex examples)
480                 -DLIBPY_SUFFIX=64
481         )
482
483         # Regenerate cache file. Can't use rebuild_cache as it won't
484         # have the Gentoo specific options.
485         rm -rf CMakeCache.txt || die "rm failed"
486         cmake-utils_src_configure
487         cmake-utils_src_compile
488         cmake-utils_src_install
489
490         # Remove compiled binary so new version compiles
491         # Avoid conflicts with new module builds as build system doesn't
492         # really support it.
493         rm -rf modules/python2 || die "rm failed"
494 }
495
496 multilib_src_install() {
497         cmake-utils_src_install
498
499         # Build and install the python modules for all targets
500         if multilib_is_native_abi && use python; then
501                 local orig_BUILD_DIR=${BUILD_DIR}
502                 python_foreach_impl python_module_compile
503         fi
504 }