1PORTNAME=	opencv
2DISTVERSION=	4.13.0
3CATEGORIES=	graphics
4
5MAINTAINER=	ports@MidnightBSD.org
6COMMENT=	Open Source Computer Vision library
7WWW=		https://www.opencv.org/
8
9LICENSE=	bsd3
10LICENSE_FILE=	${WRKSRC}/LICENSE
11
12LIB_DEPENDS=	libfreetype.so:print/freetype2 \
13		libharfbuzz.so:print/harfbuzz \
14		libhdf5.so:science/hdf5
15
16USES=		cmake compiler:c++14-lang cpe gnome localbase:ldflags pkgconfig
17USE_GITHUB=	yes
18GH_PROJECT=	ade:ade opencv_3rdparty:ippicv opencv_contrib:contrib
19GH_TAGNAME=	7f55c0c26be418d494615afca15218566775c725:ippicv v0.1.2e:ade
20USE_LDCONFIG=	yes
21
22CMAKE_ARGS=	-DOPENCV_EXTRA_MODULES_PATH="${WRKSRC}/contrib/modules"
23CMAKE_ON=	OPENCV_GENERATE_PKGCONFIG OPENCV_SKIP_CMAKE_CXX_STANDARD
24CMAKE_OFF=	BUILD_opencv_python2 BUILD_TESTS OPENCV_GENERATE_SETUPVARS WITH_KLEIDICV
25
26DATADIR=	${PREFIX}/share/${PORTNAME}4
27
28PLIST_SUB=	SHLIB_VER=${DISTVERSION} SHORTVERSION=${DISTVERSION:R:S/.//g}
29
30OPTIONS_DEFINE=		EIGEN GDAL GDCM HARDENING JAVA LTO OPENCL \
31			PATENTED PROTOBUF PYTHON TBB TESSERACT
32OPTIONS_GROUP=		GUI IMAGE VIDEO
33OPTIONS_GROUP_GUI=	GTK3 VTK
34OPTIONS_GROUP_IMAGE=	AVIF GPHOTO2 JPEG OPENEXR PNG TIFF
35OPTIONS_GROUP_VIDEO=	DC1394 FFMPEG GSTREAMER V4L VULKAN WEBP XINE
36
37OPTIONS_SINGLE=		BLAS
38OPTIONS_SINGLE_BLAS=	ATLAS OPENBLAS NOBLAS
39
40OPTIONS_RADIO=		JPEG2K
41OPTIONS_RADIO_JPEG2K=	JASPER OPENJPEG
42
43OPTIONS_DEFAULT=	EIGEN GDAL GDCM OPENCL PROTOBUF PYTHON \
44			DC1394 GSTREAMER V4L VULKAN WEBP \
45			GPHOTO2 JPEG OPENEXR PNG TIFF \
46			OPENBLAS \
47			OPENJPEG
48OPTIONS_SUB=		yes
49
50# Normal options
51EIGEN_DESC=		Add Eigen v3 Support, builds sfm modules
52EIGEN_CMAKE_BOOL=	WITH_EIGEN
53EIGEN_LIB_DEPENDS=	libgflags.so:devel/gflags \
54			libglog.so:devel/glog
55EIGEN_USES=		eigen:3
56
57GDAL_DESC=		Add Geospatial Data Abstraction Library Support
58GDAL_CMAKE_BOOL=	WITH_GDAL
59GDAL_LIB_DEPENDS=	libgdal.so:graphics/gdal
60
61GDCM_DESC=		Add Open source DICOM library Support
62GDCM_CMAKE_BOOL=	WITH_GDCM
63GDCM_LIB_DEPENDS=	libgdcmMSFF.so:devel/gdcm
64
65HARDENING_DESC=		Enables Build Hardening
66HARDENING_CMAKE_BOOL=	ENABLE_BUILD_HARDENING
67
68JAVA_DESC=		Enable Java Support
69JAVA_BUILD_DEPENDS=	ant:devel/apache-ant
70JAVA_CMAKE_BOOL=	BUILD_JAVA BUILD_opencv_java \
71			BUILD_opencv_java_bindings_generator
72JAVA_MAKE_ENV=		JAVACMD=${JAVA}
73JAVA_USE=		JAVA=yes
74
75LTO_DESC=		Enables Link Time Optimizations
76LTO_CMAKE_BOOL=		ENABLE_THIN_LTO
77
78OPENCL_DESC=		Add OpenCL Support
79OPENCL_CMAKE_BOOL=	WITH_OPENCL
80OPENCL_BUILD_DEPENDS=	opencl>=0:devel/opencl
81OPENCL_RUN_DEPENDS=	opencl>=0:devel/opencl
82
83PATENTED_DESC=		Enable patented 2d feature detection USE AT OWN RISK
84PATENTED_CMAKE_BOOL=	OPENCV_ENABLE_NONFREE
85
86PROTOBUF_DESC=		Enable protobuf support, builds dnn modules
87PROTOBUF_CMAKE_BOOL=	WITH_PROTOBUF
88
89PYTHON_DESC=		Enable Python Support 3.6 or greater
90PYTHON_BUILD_DEPENDS=	${PYNUMPY}
91PYTHON_RUN_DEPENDS=	${PYNUMPY}
92PYTHON_USES=		python
93PYTHON_CMAKE_BOOL=	BUILD_opencv_python3
94PYTHON_CMAKE_ON=	-DOPENCV_PYTHON3_INSTALL_PATH=${PYTHON_SITELIBDIR}
95
96TBB_DESC=		Add Intel Threading Building Blocks Support
97TBB_CMAKE_BOOL=		WITH_TBB
98TBB_LIB_DEPENDS=	libtbb.so:devel/onetbb
99
100TESSERACT_DESC=		Add Tesseract-based OCR
101TESSERACT_LIB_DEPENDS=	libtesseract.so:graphics/tesseract
102TESSERACT_CMAKE_BOOL=	WITH_TESSERACT
103###
104
105# GUI group options
106GTK3_USE=		GNOME=cairo,gdkpixbuf,gtk30
107GTK3_CMAKE_BOOL=	WITH_GTK
108
109VTK_DESC=		Include VTK library support (build opencv_viz module)
110VTK_CMAKE_BOOL=		WITH_VTK
111VTK_LIB_DEPENDS=	libvtkCommonCore-${VTK_VER}.so:math/vtk${VTK_VER:R}
112VTK_USES=		qt:5
113VTK_USE=		QT=buildtools:build,qmake:build
114###
115
116# IMAGE group options
117AVIF_LIB_DEPENDS=	libavif.so:graphics/libavif
118AVIF_CMAKE_BOOL=	WITH_AVIF
119
120GPHOTO2_DESC=		Add Gphoto2 Support
121GPHOTO2_CMAKE_BOOL=	WITH_GPHOTO2
122GPHOTO2_LIB_DEPENDS=	libgphoto2.so:graphics/libgphoto2
123
124JPEG_DESC=		Add LibJpeg Support
125JPEG_CMAKE_BOOL=	WITH_JPEG
126JPEG_USES=		jpeg
127
128OPENEXR_DESC=		Add OpenEXR Support
129OPENEXR_CMAKE_BOOL=	WITH_OPENEXR
130OPENEXR_LIB_DEPENDS=	libOpenEXR.so:graphics/openexr
131
132PNG_DESC=		Add LibPNG Support
133PNG_CMAKE_BOOL=		WITH_PNG
134PNG_LIB_DEPENDS=	libpng16.so:graphics/png
135
136TIFF_DESC=		Add LibTIFF Support
137TIFF_CMAKE_BOOL=	WITH_TIFF
138TIFF_LIB_DEPENDS=	libtiff.so:graphics/tiff
139###
140
141# VIDEO group options
142DC1394_DESC=		IEEE 1394 camera support
143DC1394_CMAKE_BOOL=	WITH_1394
144DC1394_LIB_DEPENDS=	libdc1394.so:multimedia/libdc1394
145
146FFMPEG_DESC=		Link with ffmpeg
147FFMPEG_CMAKE_BOOL=	WITH_FFMPEG
148FFMPEG_LIB_DEPENDS=	libavcodec.so:multimedia/ffmpeg
149
150GSTREAMER_DESC=		Add GSTREAMER Support
151GSTREAMER_CMAKE_BOOL=	WITH_GSTREAMER
152GSTREAMER_USES=		gstreamer
153GSTREAMER_USE=		GNOME=glib20
154
155V4L_DESC=		Enable support for Video for Linux
156V4L_CMAKE_BOOL=		WITH_V4L WITH_LIBV4L
157V4L_BUILD_DEPENDS=	${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat
158V4L_LIB_DEPENDS=	libv4l2.so:multimedia/libv4l
159
160VULKAN_DESC=		Add Vulkan Support
161VULKAN_CMAKE_BOOL=	WITH_VULKAN
162VULKAN_CMAKE_ON=	-DVULKAN_INCLUDE_DIRS=${LOCALBASE}/include
163VULKAN_BUILD_DEPENDS=	vulkan-headers>0:graphics/vulkan-headers
164
165WEBP_DESC=		Add Webp Support
166WEBP_CMAKE_BOOL=	WITH_WEBP
167WEBP_LIB_DEPENDS=	libwebp.so:graphics/webp
168
169XINE_DESC=		Add Xine Support
170XINE_CMAKE_BOOL=	WITH_XINE
171XINE_LIB_DEPENDS=	libxine.so:multimedia/libxine
172###
173
174# BLAS group options
175ATLAS_DESC=		ATLAS blas implementation with lapacke
176ATLAS_USES=		blaslapack:atlas
177ATLAS_BUILD_DEPENDS=	cblas>0:math/cblas \
178			lapacke>0:math/lapacke
179
180OPENBLAS_DESC=		OpenBLAS blas implementation with lapacke
181OPENBLAS_USES=		blaslapack:openblas
182OPENBLAS_BUILD_DEPENDS=	cblas>0:math/cblas \
183			lapacke>0:math/lapacke
184
185NOBLAS_DESC=		Disable support for lapack/blas
186NOBLAS_CMAKE_BOOL_OFF=	WITH_LAPACK
187###
188
189# JPEG2K group options
190JASPER_DESC=		Add Jasper Support for JPEG2000
191JASPER_CMAKE_BOOL=	WITH_JASPER
192JASPER_LIB_DEPENDS=	libjasper.so:graphics/jasper
193
194OPENJPEG_DESC=		Add OpenJPEG Support for JPEG2000, OpenCV preferred
195OPENJPEG_CMAKE_BOOL=	WITH_OPENJPEG
196OPENJPEG_LIB_DEPENDS=	libopenjp2.so:graphics/openjpeg
197###
198
199_IPPICV_amd64=	ippicv/ippicv_2021.12.0_lnx_intel64_20240425_general.tgz
200_IPPICV_i386=	ippicv/ippicv_2021.12.0_lnx_ia32_20240425_general.tgz
201
202.include <bsd.mport.options.mk>
203
204post-extract:
205	# Handle contrib
206	${MV} ${WRKSRC_contrib} ${WRKSRC}/contrib
207	# Handle prefetched ade module
208	${MKDIR} ${BUILD_WRKSRC}/3rdparty/ade
209	${MV} ${WRKSRC_ade} ${BUILD_WRKSRC}/3rdparty/ade
210	# Handle ippicv
211.if defined(_IPPICV_${ARCH})
212	${MKDIR} ${BUILD_WRKSRC}/3rdparty/ippicv
213	(cd ${BUILD_WRKSRC}/3rdparty/ippicv && \
214		${EXTRACT_CMD} -xf ${WRKSRC_ippicv}/${_IPPICV_${ARCH}})
215.endif
216
217post-patch:
218	${REINPLACE_CMD} -e 's|/usr/lib/atlas-base|${LOCALBASE}/lib|g' \
219		${WRKSRC}/cmake/OpenCVFindAtlas.cmake
220	${REINPLACE_CMD} -e 's|/usr/include/atlas|${LOCALBASE}/include|g' \
221		${WRKSRC}/cmake/OpenCVFindAtlas.cmake
222
223.include <../../math/vtk9/Makefile.version>
224.include <bsd.port.mk>
225