config BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
	bool
	default y if BR2_aarch64 || BR2_arm || \
		BR2_i386 || BR2_x86_64 || \
		BR2_mips || BR2_mips64
	# -m32 flag is used for 32bit builds and host tools have
	# limited architecture support
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative
	depends on !BR2_BINFMT_FLAT # qt5base-icu
	depends on BR2_USE_MMU # libglib2, qt5base-dbus

comment "qt5webengine needs udev /dev management and a glibc toolchain w/ gcc >= 4.8, host gcc >= 4.8, threads, wchar"
	depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
	depends on !BR2_PACKAGE_HAS_UDEV || !BR2_TOOLCHAIN_USES_GLIBC || \
		!BR2_HOST_GCC_AT_LEAST_4_8 || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \
		!BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR

comment "qt5webengine needs an OpenGL and EGL-capable backend"
	depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
	depends on !BR2_PACKAGE_QT5_GL_AVAILABLE || !BR2_PACKAGE_HAS_LIBEGL

comment "qt5webengine needs a toolchain not affected by GCC bug 85862"
	depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
	depends on !BR2_PACKAGE_QT5_VERSION_5_6
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_85862 # libnss

config BR2_PACKAGE_QT5WEBENGINE
	bool "qt5webengine"
	depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_GLIBC # execinfo.h, mallinfo
	depends on BR2_HOST_GCC_AT_LEAST_4_8 # qt5base-icu
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # qt5base-icu
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_85862 || BR2_PACKAGE_QT5_VERSION_5_6 # libnss
	depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2, libvpx, qt5base-dbus
	depends on BR2_USE_WCHAR # libglib2
	depends on BR2_PACKAGE_QT5_GL_AVAILABLE # qt5declarative, qt5base-eglfs
	depends on BR2_PACKAGE_HAS_LIBEGL # qt5base-eglfs
	depends on BR2_PACKAGE_HAS_UDEV
	# v8 (a chromium 3rd-party) compiles its internal host-tools with the
	# same word size as the target. For 32-bits targets, it adds the -m32
	# flag (for 64-bits, it adds the -m64 flag).
	# https://github.com/v8/v8/blob/5.6.326.55/gypfiles/toolchain.gypi#L1036-L1037
	select BR2_HOSTARCH_NEEDS_IA32_COMPILER if !BR2_ARCH_IS_64 # v8/chromium
	select BR2_PACKAGE_FFMPEG
	select BR2_PACKAGE_LIBGLIB2
	select BR2_PACKAGE_LIBNSS if !BR2_PACKAGE_QT5_VERSION_5_6
	select BR2_PACKAGE_LIBVPX
	select BR2_PACKAGE_OPUS
	select BR2_PACKAGE_WEBP
	select BR2_PACKAGE_WEBP_DEMUX
	select BR2_PACKAGE_QT5BASE_DBUS
	select BR2_PACKAGE_QT5BASE_EGLFS
	select BR2_PACKAGE_QT5BASE_FONTCONFIG
	select BR2_PACKAGE_QT5BASE_ICU
	select BR2_PACKAGE_QT5BASE_GUI
	select BR2_PACKAGE_QT5BASE_WIDGETS
	select BR2_PACKAGE_QT5DECLARATIVE
	select BR2_PACKAGE_QT5DECLARATIVE_QUICK
	select BR2_PACKAGE_QT5QUICKCONTROLS
	select BR2_PACKAGE_QT5QUICKCONTROLS2
	select BR2_PACKAGE_QT5WEBCHANNEL
	select BR2_PACKAGE_XLIB_LIBXCOMPOSITE if BR2_PACKAGE_QT5BASE_XCB
	select BR2_PACKAGE_XLIB_LIBXCURSOR if BR2_PACKAGE_QT5BASE_XCB
	select BR2_PACKAGE_XLIB_LIBXI if BR2_PACKAGE_QT5BASE_XCB
	select BR2_PACKAGE_XLIB_LIBXRANDR if BR2_PACKAGE_QT5BASE_XCB
	select BR2_PACKAGE_XLIB_LIBXSCRNSAVER if BR2_PACKAGE_QT5BASE_XCB
	select BR2_PACKAGE_XLIB_LIBXTST if BR2_PACKAGE_QT5BASE_XCB
	help
	  The Qt WebEngine module provides a web browser engine that
	  makes it easy to embed content from the World Wide Web into
	  your Qt application.

	  Qt WebEngine provides C++ classes and QML types for rendering
	  HTML, XHTML, and SVG documents, styled using Cascading Style
	  Sheets (CSS) and scripted with JavaScript. HTML documents can
	  be made fully editable by the user through the use of the
	  contenteditable attribute on HTML elements.

	  http://doc.qt.io/qt-5/qtwebengine-index.html

if BR2_PACKAGE_QT5WEBENGINE

config BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS
	bool "proprietary codecs"
	help
	  Qt WebEngine supports the MPEG-4 Part 14 (MP4) file format,
	  which includes required proprietary audio and video codecs,
	  such as H.264 and MPEG layer-3 (MP3).

config BR2_PACKAGE_QT5WEBENGINE_ALSA
	bool "alsa"
	select BR2_PACKAGE_ALSA_LIB
	select BR2_PACKAGE_ALSA_LIB_MIXER
	select BR2_PACKAGE_ALSA_LIB_RAWMIDI
	select BR2_PACKAGE_ALSA_LIB_HWDEP
	select BR2_PACKAGE_ALSA_LIB_SEQ
	help
	  Enable ALSA support.

endif
