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
	depends on !BR2_PACKAGE_OPENCV3
	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
	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"
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_UCLIBC

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_GTK
	bool "gtk2"
	depends on BR2_PACKAGE_LIBGTK2

comment "gtk2 support needs libgtk2"
	depends on BR2_USE_MMU # libgtk2 -> glib2
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_PACKAGE_LIBGTK2

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
	# 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"
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_UCLIBC

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
	select BR2_PACKAGE_PYTHON_NUMPY
	help
	  Include opencv_python module into the OpenCV build.  No
	  python example is installed.

comment "python support needs glibc or musl"
	depends on BR2_PACKAGE_PYTHON3
	depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS
	depends on !(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"
	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.

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_AVRESAMPLE
	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
	select BR2_PACKAGE_PROTOBUF
	help
	  Use shared protobuf from the target system.

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
	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
