config BR2_PACKAGE_WPEWEBKIT_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 "wpewebkit needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7"
	depends on BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS
	depends on !BR2_BINFMT_FLAT
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR \
		|| !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS \
		|| !BR2_TOOLCHAIN_GCC_AT_LEAST_7

comment "wpewebkit needs an OpenGL ES w/ EGL-capable Wayland backend"
	depends on BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS
	depends on !BR2_BINFMT_FLAT
	depends on !BR2_PACKAGE_HAS_LIBGLES || !BR2_PACKAGE_HAS_LIBEGL \
		|| !BR2_PACKAGE_HAS_LIBEGL_WAYLAND

config BR2_PACKAGE_WPEWEBKIT
	bool "wpewebkit"
	depends on !BR2_STATIC_LIBS # wayland
	depends on !BR2_BINFMT_FLAT # icu
	depends on BR2_INSTALL_LIBSTDCPP # harfbuzz, icu
	depends on BR2_TOOLCHAIN_HAS_THREADS # wayland, icu, libsoup
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7
	depends on BR2_USE_WCHAR # icu, libsoup
	depends on BR2_PACKAGE_HAS_LIBGLES # libepoxy
	depends on BR2_PACKAGE_HAS_LIBEGL # libepoxy
	depends on BR2_PACKAGE_HAS_LIBEGL_WAYLAND # wpebackend-fdo
	depends on BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS
	select BR2_PACKAGE_CAIRO
	select BR2_PACKAGE_CAIRO_PNG
	select BR2_PACKAGE_HARFBUZZ
	select BR2_PACKAGE_ICU
	select BR2_PACKAGE_JPEG
	select BR2_PACKAGE_LIBEPOXY
	select BR2_PACKAGE_LIBGCRYPT
	select BR2_PACKAGE_LIBPNG
	select BR2_PACKAGE_LIBSOUP
	select BR2_PACKAGE_LIBTASN1
	select BR2_PACKAGE_LIBXSLT
	select BR2_PACKAGE_OPENJPEG
	select BR2_PACKAGE_WAYLAND
	select BR2_PACKAGE_WAYLAND_PROTOCOLS
	select BR2_PACKAGE_WEBP
	select BR2_PACKAGE_WEBP_DEMUX
	select BR2_PACKAGE_WPEBACKEND_FDO
	help
	  WPE (Web Platform for Embedded) port of the WebKit engine,
	  to allow embedders to create simple and performant systems
	  based on Web platform technologies.

	  https://wpewebkit.org/

if BR2_PACKAGE_WPEWEBKIT

config BR2_PACKAGE_WPEWEBKIT_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 asccess, and Web content rendering.

comment "sandboxing supports 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_WPEWEBKIT_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_MATROSKA
	select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTSP
	select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VPX
	select BR2_PACKAGE_GST1_LIBAV
	help
	  This option pulls in all of the required dependencies
	  to enable multimedia (video/audio) support.

if BR2_PACKAGE_WPEWEBKIT_MULTIMEDIA

config BR2_PACKAGE_WPEWEBKIT_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_WPEWEBKIT_WEBDRIVER
	bool "WebDriver support"
	help
	  Enable support for WebDriver. This will build and install the
	  WebKitWebDriver program in the target.

endif
