config BR2_PACKAGE_EFL
	bool "efl"
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11
	depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-efl
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_TOOLCHAIN_HAS_THREADS # untested without threads
	depends on BR2_USE_MMU
	depends on BR2_USE_WCHAR # use wchar_t
	depends on !BR2_STATIC_LIBS # dlfcn.h
	# https://phab.enlightenment.org/T2728
	depends on BR2_PACKAGE_LUAJIT
	select BR2_PACKAGE_DBUS
	select BR2_PACKAGE_FREETYPE
	select BR2_PACKAGE_GIFLIB
	select BR2_PACKAGE_JPEG # Emile needs libjpeg
	select BR2_PACKAGE_LIBCURL # Ecore_con_url, runtime dependency
	select BR2_PACKAGE_LIBPNG
	select BR2_PACKAGE_OPENSSL if !(BR2_PACKAGE_GNUTLS && BR2_PACKAGE_LIBGCRYPT)
	select BR2_PACKAGE_LZ4
	select BR2_PACKAGE_ZLIB
	help
	  Enlightenment Foundation Libraries

	  https://enlightenment.org

if BR2_PACKAGE_EFL

config BR2_PACKAGE_EFL_BULLET
	bool "Enable bullet support"
	select BR2_PACKAGE_BULLET
	help
	  If you have chosen to disable physics support, this disables
	  lots of core functionality and is effectively never
	  tested. You are going to find features that suddenly don't
	  work and as a result cause a series of breakages. This is
	  simply not tested so you are on your own in terms of
	  ensuring everything works if you do this.

config BR2_PACKAGE_EFL_EEZE
	bool "Enable eeze (udev) support (recommended)"
	default y
	depends on BR2_PACKAGE_HAS_UDEV # libudev
	help
	  Eeze is EFL's hardware abstraction layer on top of udev.
	  Having it off will disable some hardware detection, such as
	  'drm' graphics engine or 'elput', as well as mounting
	  removable media.

comment "eeze needs udev /dev management"
	depends on !BR2_PACKAGE_HAS_UDEV

config BR2_PACKAGE_EFL_FONTCONFIG
	bool "Enable fontconfig support (recommended)"
	default y
	select BR2_PACKAGE_FONTCONFIG
	help
	  If fontconfig is disabled, this is going to make general
	  font searching not work, and only some very direct 'load
	  /path/file.ttf' will work alongside some old-school ttf file
	  path searching. This is very likely not what you want, so
	  highly reconsider turning fontconfig off. Having it off will
	  lead to visual problems like missing text in many UI areas
	  etc...

config BR2_PACKAGE_EFL_GSTREAMER1
	bool "Enable gstreamer1 support (recommended)"
	default y
	select BR2_PACKAGE_GSTREAMER1
	select BR2_PACKAGE_GST1_PLUGINS_BASE
	help
	  If Gstreamer 1.x support is disabled, it will heavily limit
	  your media support options and render some functionality as
	  useless, leading to visible application bugs.

config BR2_PACKAGE_EFL_LIBFRIBIDI
	bool "Enable libfribidi support (recommended)"
	default y
	select BR2_PACKAGE_LIBFRIBIDI
	help
	  Fribidi is used for handling right-to-left text (like
	  Arabic, Hebrew, Farsi, Persian etc.) and is very likely not
	  a feature you want to disable unless you know for absolute
	  certain you will never encounter and have to display such
	  scripts. Also note that we don't test with fribidi disabled
	  so you may also trigger code paths with bugs that are never
	  normally used.

config BR2_PACKAGE_EFL_LIBSNDFILE
	bool "Enable libsndfile support (recommended)"
	default y
	select BR2_PACKAGE_LIBSNDFILE
	help
	  If you disabled audio support in Ecore, this is not tested
	  and may create bugs for you due to it creating untested code
	  paths.  Reconsider disabling audio.

config BR2_PACKAGE_EFL_PULSEAUDIO
	bool "Enable pulseaudio support (recommended)"
	default y
	depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC
	depends on BR2_USE_WCHAR
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on !BR2_STATIC_LIBS
	depends on BR2_USE_MMU
	select BR2_PACKAGE_PULSEAUDIO
	help
	  The only audio output method supported by Ecore right now is
	  via Pulseaudio. You have disabled that and likely have
	  broken a whole bunch of things in the process. Reconsider
	  your configure options.

	  NOTE: multisense support is automatically enabled with
	  pulseaudio.

config BR2_PACKAGE_EFL_UTIL_LINUX_LIBMOUNT
	bool "Enable libmount support (recommended)"
	default y
	depends on BR2_PACKAGE_EFL_EEZE
	select BR2_PACKAGE_UTIL_LINUX
	select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	# libblkid is part of required tools, see EFL's README.
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	help
	  Libmount is used heavily inside Eeze for support of removable
	  devices etc... and disabling this will hurt support for
	  Enlightenment and its filemanager.

comment "efl's libmount support needs udev /dev management (eeze)"
	depends on !BR2_PACKAGE_EFL_EEZE

config BR2_PACKAGE_EFL_HAS_RECOMMENDED_CONFIG
	bool
	default y if BR2_PACKAGE_EFL_EEZE && \
		BR2_PACKAGE_EFL_FONTCONFIG && \
		BR2_PACKAGE_EFL_GSTREAMER1 && \
		BR2_PACKAGE_EFL_LIBFRIBIDI && \
		BR2_PACKAGE_EFL_LIBSNDFILE && \
		BR2_PACKAGE_EFL_PULSEAUDIO && \
		BR2_PACKAGE_EFL_UTIL_LINUX_LIBMOUNT

comment "Warning: one of the recommended option for EFL is not enabled"
	depends on !BR2_PACKAGE_EFL_HAS_RECOMMENDED_CONFIG

config BR2_PACKAGE_EFL_EOLIAN_CPP
	bool "Enable Eolian C++ bindings"
	help
	  Eolian is an EO object parser and code generator.
	  With this option enabled Eolian will handle automatic
	  generation of EFL bindings for the C++11 language.

comment "libecore video support"

config BR2_PACKAGE_EFL_FB
	bool "FB support"

config BR2_PACKAGE_EFL_X_XLIB
	bool "X11 support (xlib)"
	depends on BR2_PACKAGE_XORG7
	select BR2_PACKAGE_XLIB_LIBX11
	select BR2_PACKAGE_XLIB_LIBXEXT
	select BR2_PACKAGE_XLIB_LIBXCOMPOSITE
	select BR2_PACKAGE_XLIB_LIBXCURSOR
	select BR2_PACKAGE_XLIB_LIBXDAMAGE
	select BR2_PACKAGE_XLIB_LIBXINERAMA
	select BR2_PACKAGE_XLIB_LIBXRANDR
	select BR2_PACKAGE_XLIB_LIBXRENDER
	select BR2_PACKAGE_XLIB_LIBXSCRNSAVER
	select BR2_PACKAGE_XLIB_LIBXTST
	select BR2_PACKAGE_XORGPROTO

config BR2_PACKAGE_EFL_WAYLAND
	bool "Wayland support"
	depends on BR2_PACKAGE_WAYLAND
	depends on BR2_TOOLCHAIN_HAS_THREADS # Evas DRM Engine -> libdrm
	depends on BR2_PACKAGE_MESA3D_OPENGL_EGL # Evas DRM Engine
	depends on BR2_PACKAGE_EFL_EEZE # efl drm
	depends on BR2_PACKAGE_EFL_OPENGLES # OpenGL ES with EGL support only
	depends on BR2_ENABLE_LOCALE # efl-drm <- efl-elput <- linput
	select BR2_PACKAGE_EFL_DRM
	select BR2_PACKAGE_WAYLAND_PROTOCOLS

comment "Wayland support needs udev /dev management (eeze), OpenGL ES w/ EGL, threads, locales"
	depends on BR2_PACKAGE_WAYLAND
	depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_PACKAGE_MESA3D_OPENGL_EGL \
		|| !BR2_PACKAGE_EFL_OPENGLES || !BR2_PACKAGE_EFL_EEZE \
		|| !BR2_ENABLE_LOCALE

choice
	bool "OpenGL support"
	help
	  libevas can be configured to use HW acceleration with OpenGL
	  or OpenGL ES.

config BR2_PACKAGE_EFL_OPENGL
	bool "OpenGL"
	depends on BR2_PACKAGE_HAS_LIBGL
	depends on BR2_PACKAGE_XORG7
	select BR2_PACKAGE_EFL_X_XLIB

comment "OpenGL support needs X11 and an OpenGL provider"
	depends on !BR2_PACKAGE_HAS_LIBGL || !BR2_PACKAGE_XORG7

config BR2_PACKAGE_EFL_OPENGLES
	bool "OpenGL ES (w/ EGL)"
	depends on BR2_PACKAGE_HAS_LIBEGL
	depends on BR2_PACKAGE_HAS_LIBGLES

comment "OpenGL ES support needs an OpenGL ES w/ EGL provider"
	depends on !BR2_PACKAGE_HAS_LIBGLES || !BR2_PACKAGE_HAS_LIBEGL

config BR2_PACKAGE_EFL_OPENGL_NONE
	bool "none"

endchoice # OpenGL support

config BR2_PACKAGE_EFL_DRM
	bool "Evas DRM Engine"
	depends on BR2_PACKAGE_EFL_EEZE
	depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm
	depends on BR2_PACKAGE_MESA3D_OPENGL_EGL # require libgbm from mesa3d
	select BR2_PACKAGE_LIBDRM
	select BR2_PACKAGE_LIBINPUT # For elput
	select BR2_PACKAGE_LIBXKBCOMMON
	help
	  This option enable building support for the Evas DRM Engine.

	  Since efl 1.23.x, the drm option enable the elput library
	  which is an efl abstraction for the libinput library which
	  can be used by various other subsystems (ecore_fb, ecore_drm,
	  etc) to handle interfacing with libinput without having to
	  duplicate the code in each subsystem.

comment "Evas DRM Engine needs udev /dev management (eeze), mesa3d w/ EGL support, threads"
	depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_PACKAGE_MESA3D_OPENGL_EGL \
		|| !BR2_PACKAGE_EFL_EEZE

comment "libevas loaders"

config BR2_PACKAGE_EFL_JPEG
	bool "libevas jpeg loader"
	select BR2_PACKAGE_OPENJPEG
	help
	  This enables the loader code that loads jpeg files using
	  libjpeg.

config BR2_PACKAGE_EFL_TIFF
	bool "libevas tiff loader"
	select BR2_PACKAGE_TIFF
	help
	  This enables the loader code that loads tiff files.

config BR2_PACKAGE_EFL_WEBP
	bool "libevas webp image loader"
	select BR2_PACKAGE_WEBP
	select BR2_PACKAGE_WEBP_DEMUX
	help
	  This enables the loader code that loads images using WebP.

config BR2_PACKAGE_EFL_LIBRAW
	bool "libraw loader"
	select BR2_PACKAGE_LIBRAW
	help
	  This option enables the Evas generic Libraw loader

config BR2_PACKAGE_EFL_SVG
	bool "SVG loader"
	depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS # librsvg
	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # librsvg -> pango -> harfbuzz
	select BR2_PACKAGE_LIBRSVG
	select BR2_PACKAGE_CAIRO
	help
	  This option enables the Evas generic SVG loader

endif # BR2_PACKAGE_EFL

comment "efl needs a toolchain w/ C++, dynamic library, gcc >= 4.9, host gcc >= 4.9, threads, wchar"
	depends on !BR2_INSTALL_LIBSTDCPP \
		|| !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \
		|| !BR2_HOST_GCC_AT_LEAST_4_9 || BR2_STATIC_LIBS \
		|| !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR
	depends on BR2_USE_MMU
