config BR2_PACKAGE_EFL
	bool "efl"
	 # g++ issue with 4.4.5, tested with g++ 4.7.2
	depends on BR2_HOST_GCC_AT_LEAST_4_7
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_PACKAGE_LUAJIT_ARCH_SUPPORTS # luajit
	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
	select BR2_PACKAGE_DBUS
	select BR2_PACKAGE_FREETYPE
	select BR2_PACKAGE_JPEG # Emile needs libjpeg
	select BR2_PACKAGE_LIBCURL # Ecore_con_url, runtime dependency
	# https://phab.enlightenment.org/T2728
	select BR2_PACKAGE_LUAJIT # Lua support broken
	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 (recommended)"
	default y
	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_BULLET && \
		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"
	depends on BR2_HOST_GCC_AT_LEAST_4_8 # Eolian (host) needs C++11
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # Eolian needs C++11
	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 "Eolian needs host and target gcc >= 4.8"
	depends on !BR2_HOST_GCC_AT_LEAST_4_8 || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8

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_LIBXP
	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_ELPUT
	bool "Elput"
	depends on BR2_ENABLE_LOCALE # libinput
	depends on BR2_PACKAGE_EFL_EEZE
	select BR2_PACKAGE_LIBINPUT
	select BR2_PACKAGE_LIBXKBCOMMON
	help
	  The elput library 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 "Elput support needs udev /dev management (eeze), locales"
	depends on !BR2_PACKAGE_EFL_EEZE || !BR2_ENABLE_LOCALE

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
	depends on BR2_ENABLE_LOCALE # efl-elput <- libinput
	select BR2_PACKAGE_EFL_ELPUT
	select BR2_PACKAGE_LIBDRM
	select BR2_PACKAGE_LIBXKBCOMMON
	help
	  This option enable building support for the Evas DRM Engine.

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

comment "libevas loaders"

config BR2_PACKAGE_EFL_PNG
	bool "libevas png loader"
	select BR2_PACKAGE_LIBPNG
	help
	  This enables the loader code that loads png files using
	  libpng.

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

config BR2_PACKAGE_EFL_GIF
	bool "libevas gif loader"
	select BR2_PACKAGE_GIFLIB
	help
	  This enables the loader code that loads gif files using
	  giflib.

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
	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_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.7, threads, wchar"
	depends on !BR2_INSTALL_LIBSTDCPP \
		|| !BR2_HOST_GCC_AT_LEAST_4_7 || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 \
		|| BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR
	depends on BR2_PACKAGE_LUAJIT_ARCH_SUPPORTS
	depends on BR2_USE_MMU
