menuconfig BR2_PACKAGE_OPENCV4
	bool "opencv4"
	depends on BR2_TOOLCHAIN_HAS_ATOMIC
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_USE_WCHAR
	depends on !BR2_STATIC_LIBS # include dlfcn.h
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11
	select BR2_PACKAGE_ZLIB
	help
	  OpenCV (Open Source Computer Vision) is a library of
	  programming functions for real time computer vision.

	  Note that the opencv_core module and the opencv_hal library
	  are always built and installed, not matter which other
	  modules are enabled below.

	  http://opencv.org/

if BR2_PACKAGE_OPENCV4

comment "OpenCV modules"

config BR2_PACKAGE_OPENCV4_LIB_CALIB3D
	bool "calib3d"
	select BR2_PACKAGE_OPENCV4_LIB_FEATURES2D
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	help
	  Include opencv_calib3d (camera calibration and 3d
	  reconstruction) module into the OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_DNN
	bool "dnn"
	# dnn needs fenv.h which is not provided by uclibc
	depends on !BR2_TOOLCHAIN_USES_UCLIBC
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8
	select BR2_PACKAGE_OPENCV4_WITH_PROTOBUF
	help
	  Include opencv_dnn (Deep Neural Networks) module into the
	  OpenCV build.

comment "dnn needs a glibc or musl toolchain, gcc >= 8"
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_UCLIBC || \
		!BR2_HOST_GCC_AT_LEAST_8

config BR2_PACKAGE_OPENCV4_LIB_FEATURES2D
	bool "features2d"
	select BR2_PACKAGE_OPENCV4_LIB_FLANN
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	select BR2_PACKAGE_OPENCV4_LIB_ML
	help
	  Include opencv_features2d (2d features framework) module
	  into the OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_FLANN
	bool "flann"
	# opencv_core dependency is already enabled
	help
	  Include opencv_flann (clustering and search in
	  multi-dimensional spaces) module into the OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_HIGHGUI
	bool "highgui"
	select BR2_PACKAGE_OPENCV4_LIB_IMGCODECS
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	select BR2_PACKAGE_OPENCV4_LIB_VIDEOIO
	help
	  Include opencv_highgui (high-level gui and media i/o) module
	  into the OpenCV build.

if BR2_PACKAGE_OPENCV4_LIB_HIGHGUI

choice
	prompt "gui toolkit"
	help
	  GUI toolkit to be used by the opencv_highgui module.

config BR2_PACKAGE_OPENCV4_GUI_NONE
	bool "none"

config BR2_PACKAGE_OPENCV4_WITH_GTK3
	bool "gtk3"
	depends on BR2_PACKAGE_LIBGTK3

comment "gtk3 support needs libgtk3"
	depends on BR2_USE_MMU # libgtk3 -> glib2
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_PACKAGE_LIBGTK3

config BR2_PACKAGE_OPENCV4_WITH_QT5
	bool "qt5"
	depends on BR2_PACKAGE_QT5
	select BR2_PACKAGE_QT5BASE_CONCURRENT
	select BR2_PACKAGE_QT5BASE_GUI
	select BR2_PACKAGE_QT5BASE_WIDGETS
	help
	  Use Qt5 with base, concurrent, test, gui and widgets
	  components, as GUI toolkit.

comment "qt5 support needs qt5"
	depends on !BR2_PACKAGE_QT5

endchoice

config BR2_PACKAGE_OPENCV4_WITH_OPENGL
	bool "opengl support"
	# OpenGL support done using Qt5OpenGL, so depends on WITH_QT5
	depends on BR2_PACKAGE_OPENCV4_WITH_QT5
	# OpenGL support requires Qt5OpenGL with GL support, not GLES
	depends on BR2_PACKAGE_QT5_GL_AVAILABLE
	depends on BR2_PACKAGE_HAS_LIBGL
	select BR2_PACKAGE_QT5BASE_OPENGL
	help
	  Enable OpenGL for UI.

comment "opengl support needs an OpenGL provider"
	depends on BR2_PACKAGE_OPENCV4_WITH_QT5
	depends on !BR2_PACKAGE_QT5_GL_AVAILABLE || \
		!BR2_PACKAGE_HAS_LIBGL

endif # BR2_PACKAGE_OPENCV4_LIB_HIGHGUI

config BR2_PACKAGE_OPENCV4_LIB_IMGCODECS
	bool "imgcodecs"
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	help
	  Include opencv_imgcodecs (image codecs) module into the
	  OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	bool "imgproc"
	# opencv_core dependency is already enabled
	help
	  Include opencv_imgproc (image processing) module into the
	  OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_ML
	bool "ml"
	# opencv_core dependency is already enabled
	help
	  Include opencv_ml (machine learning) module into the OpenCV
	  build.

config BR2_PACKAGE_OPENCV4_LIB_OBJDETECT
	bool "objdetect"
	depends on !BR2_TOOLCHAIN_USES_UCLIBC # dnn support
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # dnn support
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # dnn support
	# opencv_core dependency is already enabled
	select BR2_PACKAGE_OPENCV4_LIB_CALIB3D
	select BR2_PACKAGE_OPENCV4_LIB_DNN
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	select BR2_PACKAGE_OPENCV4_LIB_ML
	help
	  Include opencv_objdetect (object detection) module into the
	  OpenCV build.

comment "objdetect needs a glibc or musl toolchain w/ gcc 8"
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_UCLIBC || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_8

config BR2_PACKAGE_OPENCV4_LIB_PHOTO
	bool "photo"
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	help
	  Include opencv_photo (computational photography) module into
	  the OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_PYTHON
	bool "python"
	depends on BR2_PACKAGE_PYTHON3
	depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL # python-numpy
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_9 # python-numpy
	select BR2_PACKAGE_PYTHON_NUMPY
	help
	  Include opencv_python module into the OpenCV build.  No
	  python example is installed.

comment "python support needs a glibc or musl toolchain w/ gcc >= 9"
	depends on BR2_PACKAGE_PYTHON3
	depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_9 ||\
		!(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL)

config BR2_PACKAGE_OPENCV4_LIB_SHAPE
	bool "shape"
	# opencv_core dependency is already enabled
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	select BR2_PACKAGE_OPENCV4_LIB_VIDEO
	help
	  Include opencv_shape (shape descriptors and matchers) module
	  into the OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_STITCHING
	bool "stitching"
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # objdetect
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # objdetect
	depends on !BR2_TOOLCHAIN_USES_UCLIBC # objdetect
	select BR2_PACKAGE_OPENCV4_LIB_CALIB3D
	select BR2_PACKAGE_OPENCV4_LIB_FEATURES2D
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	select BR2_PACKAGE_OPENCV4_LIB_OBJDETECT
	help
	  Include opencv_stitching (images stitching) module into the
	  OpenCV build.

comment "stitching needs a glibc or musl toolchain w/ gcc >= 8"
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_UCLIBC || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_8

config BR2_PACKAGE_OPENCV4_LIB_SUPERRES
	bool "superres"
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	select BR2_PACKAGE_OPENCV4_LIB_VIDEO
	help
	  Include opencv_superres (super resolution) module into the
	  OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_TS
	bool "ts"
	# opencv_core dependency is already enabled
	select BR2_PACKAGE_OPENCV4_LIB_HIGHGUI
	select BR2_PACKAGE_OPENCV4_LIB_IMGCODECS
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	select BR2_PACKAGE_OPENCV4_LIB_VIDEOIO
	help
	  Include opencv_ts (test) module into the OpenCV build.

config BR2_PACKAGE_OPENCV4_LIB_VIDEOIO
	bool "videoio"
	select BR2_PACKAGE_OPENCV4_LIB_IMGCODECS
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	help
	  Include opencv_videoio (media i/o) module into the OpenCV
	  build.

config BR2_PACKAGE_OPENCV4_LIB_VIDEO
	bool "video"
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	help
	  Include opencv_video (video analysis) module into the OpenCV
	  build.

config BR2_PACKAGE_OPENCV4_LIB_VIDEOSTAB
	bool "videostab"
	select BR2_PACKAGE_OPENCV4_LIB_CALIB3D
	select BR2_PACKAGE_OPENCV4_LIB_FEATURES2D
	select BR2_PACKAGE_OPENCV4_LIB_IMGPROC
	select BR2_PACKAGE_OPENCV4_LIB_PHOTO
	select BR2_PACKAGE_OPENCV4_LIB_VIDEO
	help
	  Include opencv_videostab (video stabilization) module into
	  the OpenCV build.

comment "Test sets"
config BR2_PACKAGE_OPENCV4_BUILD_TESTS
	bool "build tests"

config BR2_PACKAGE_OPENCV4_BUILD_PERF_TESTS
	bool "build performance tests"

comment "3rd party support"

config BR2_PACKAGE_OPENCV4_WITH_FFMPEG
	bool "ffmpeg support"
	depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS
	select BR2_PACKAGE_BZIP2
	select BR2_PACKAGE_FFMPEG
	select BR2_PACKAGE_FFMPEG_SWSCALE
	help
	  Use ffmpeg from the target system.

config BR2_PACKAGE_OPENCV4_WITH_GSTREAMER1
	bool "gstreamer-1.x"
	depends on BR2_USE_MMU # gstreamer1 -> libglib2
	select BR2_PACKAGE_GSTREAMER1
	select BR2_PACKAGE_GST1_PLUGINS_BASE
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP
	help
	  Enable gstreamer support.

choice
	prompt "jpeg2000 support"
	help
	  Select the desired jpeg2000 library provider.

config BR2_PACKAGE_OPENCV4_JPEG2000_NONE
	bool "none"

config BR2_PACKAGE_OPENCV4_JPEG2000_WITH_JASPER
	bool "jasper"
	select BR2_PACKAGE_JASPER
	help
	  Enable jpeg2000 support through jasper.

	  Note: this does not use the libjasper bundled with opencv,
	  but uses the libjasper package installed system-wide by
	  Buildroot.

config BR2_PACKAGE_OPENCV4_JPEG2000_WITH_OPENJPEG
	bool "openjpeg"
	select BR2_PACKAGE_OPENJPEG
	help
	  Enable jpeg2000 support through openjpeg.

	  Note: this does not use the openjpeg bundled with opencv,
	  but uses the openjpeg package installed system-wide by
	  Buildroot.

endchoice

config BR2_PACKAGE_OPENCV4_WITH_JPEG
	bool "jpeg support"
	select BR2_PACKAGE_JPEG
	help
	  Use shared libjpeg from the target system.

config BR2_PACKAGE_OPENCV4_WITH_PNG
	bool "png support"
	select BR2_PACKAGE_LIBPNG
	help
	  Use shared libpng from the target system.

config BR2_PACKAGE_OPENCV4_WITH_PROTOBUF
	bool "protobuf support"
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # protobuf
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # protobuf
	select BR2_PACKAGE_PROTOBUF
	help
	  Use shared protobuf from the target system.

comment "protobuf support needs a toolchain w/ gcc >= 8"
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8

config BR2_PACKAGE_OPENCV4_WITH_TBB
	bool "tbb support"
	depends on !BR2_TOOLCHAIN_USES_UCLIBC # tbb
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # tbb
	select BR2_PACKAGE_TBB
	help
	  Use shared tbb from the target system.

comment "tbb needs a glibc or musl toolchain"
	depends on BR2_TOOLCHAIN_USES_UCLIBC

comment "tbb needs exception_ptr"
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735

config BR2_PACKAGE_OPENCV4_WITH_TIFF
	bool "tiff support"
	select BR2_PACKAGE_TIFF
	help
	  Use shared libtiff from the target system.

config BR2_PACKAGE_OPENCV4_WITH_V4L
	bool "v4l support"
	help
	  Enable Video 4 Linux support.

	  If the package libv4l is enabled, its support is
	  automatically enabled.

config BR2_PACKAGE_OPENCV4_WITH_WEBP
	bool "webp support"
	select BR2_PACKAGE_WEBP
	select BR2_PACKAGE_WEBP_DEMUX
	select BR2_PACKAGE_WEBP_MUX
	help
	  Enable WebP support.

	  Use shared libwebp from the target system.

comment "Install options"

config BR2_PACKAGE_OPENCV4_INSTALL_DATA
	bool "install extra data"
	help
	  Install various data that is used by cv libraries and/or
	  demo applications, specifically for haarcascades and
	  lbpcascades features.

	  For further information: see OpenCV documentation.

endif # BR2_PACKAGE_OPENCV4

comment "opencv4 needs a toolchain w/ C++, NPTL, wchar, dynamic library, gcc >= 4.8"
	depends on BR2_TOOLCHAIN_HAS_ATOMIC
	depends on !BR2_INSTALL_LIBSTDCPP || \
		!BR2_USE_WCHAR || \
		!BR2_TOOLCHAIN_HAS_THREADS_NPTL || \
		BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
