config BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS
	bool
	# ARM needs BLX, so v5t+, BE completely untested so disabled
	default y if BR2_arm && !BR2_ARM_CPU_ARMV4
	default y if BR2_aarch64 || BR2_aarch64_be
	default y if BR2_i386 || BR2_x86_64
	# Disabled on MIPS big endian due to sigbus
	default y if BR2_mipsel || BR2_mips64el
	# Disabled on PowerPC pending runtime testing
	# Disabled on SuperH because of segfault
	depends on BR2_USE_MMU # libglib2
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt

comment "webkitgtk needs libgtk3 and a glibc toolchain w/ C++, gcc >= 7"
	depends on BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS
	depends on !BR2_PACKAGE_LIBGTK3 || !BR2_INSTALL_LIBSTDCPP || \
		!BR2_TOOLCHAIN_USES_GLIBC || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_7
	depends on BR2_USE_MMU

config BR2_PACKAGE_WEBKITGTK
	bool "webkitgtk"
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7
	depends on BR2_TOOLCHAIN_USES_GLIBC
	depends on BR2_PACKAGE_LIBGTK3
	depends on BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS
	select BR2_PACKAGE_CAIRO
	select BR2_PACKAGE_CAIRO_PNG
	select BR2_PACKAGE_ENCHANT
	select BR2_PACKAGE_HARFBUZZ
	select BR2_PACKAGE_ICU
	select BR2_PACKAGE_JPEG
	select BR2_PACKAGE_LIBGCRYPT
	select BR2_PACKAGE_LIBSECRET
	select BR2_PACKAGE_LIBSOUP
	select BR2_PACKAGE_LIBTASN1
	select BR2_PACKAGE_LIBXML2
	select BR2_PACKAGE_LIBXSLT
	select BR2_PACKAGE_OPENJPEG
	select BR2_PACKAGE_SQLITE
	select BR2_PACKAGE_WEBP
	select BR2_PACKAGE_WEBP_DEMUX
	select BR2_PACKAGE_WOFF2
	select BR2_PACKAGE_XLIB_LIBXCOMPOSITE if BR2_PACKAGE_LIBGTK3_X11
	select BR2_PACKAGE_XLIB_LIBXDAMAGE if BR2_PACKAGE_LIBGTK3_X11
	select BR2_PACKAGE_XLIB_LIBXRENDER if BR2_PACKAGE_LIBGTK3_X11
	select BR2_PACKAGE_XLIB_LIBXT if BR2_PACKAGE_LIBGTK3_X11
	help
	  WebKit is an open source, standards compliant web browser
	  engine.

	  http://www.webkitgtk.org/

if BR2_PACKAGE_WEBKITGTK

config BR2_PACKAGE_WEBKITGTK_SANDBOX
	bool "sandboxing support"
	depends on BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS # libseccomp
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 # libseccomp
	select BR2_PACKAGE_BUBBLEWRAP # runtime
	select BR2_PACKAGE_XDG_DBUS_PROXY # runtime
	select BR2_PACKAGE_LIBSECCOMP
	help
	  Enable sandboxing of the processes used for network operation,
	  disk access, and Web content rendering.

comment "sandboxing support needs a toolchain w/ headers >= 3.12"
	depends on BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12

config BR2_PACKAGE_WEBKITGTK_HTTPS
	bool "HTTPS support"
	depends on !BR2_STATIC_LIBS # libsoup -> glib-networking, gnutls
	select BR2_PACKAGE_CA_CERTIFICATES # runtime
	select BR2_PACKAGE_LIBSOUP_SSL
	help
	  Enable HTTPS protocol support.

comment "webkitgtk https support needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS

config BR2_PACKAGE_WEBKITGTK_MULTIMEDIA
	bool "multimedia support"
	select BR2_PACKAGE_GSTREAMER1
	select BR2_PACKAGE_GST1_PLUGINS_BAD
	select BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGTSDEMUX
	select BR2_PACKAGE_GST1_PLUGINS_BASE
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOCONVERT
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORESAMPLE
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_PLAYBACK
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOCONVERT
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOSCALE
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VOLUME
	select BR2_PACKAGE_GST1_PLUGINS_GOOD
	select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ISOMP4
	select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTSP
	select BR2_PACKAGE_GST1_LIBAV
	help
	  This option pulls in all of the required dependencies
	  to enable multimedia (video/audio) support.

if BR2_PACKAGE_WEBKITGTK_MULTIMEDIA

config BR2_PACKAGE_WEBKITGTK_USE_GSTREAMER_GL
	bool "use gstreamer-gl"
	default y
	depends on BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_OPENGL
	help
	  Use the GStreamer GL elements for handling video content.
	  This is recommended as it improves performance of video
	  playback. In some target configurations incorrect rendering
	  might be produced, and disabling this option may help.

endif

config BR2_PACKAGE_WEBKITGTK_WEBDRIVER
	bool "WebDriver support"
	help
	  Enable support for WebDriver. This will build and install the
	  WebKitWebDriver program in the target.

endif
