config BR2_PACKAGE_DIRECTFB
	bool "directfb"
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
	depends on !BR2_TOOLCHAIN_USES_MUSL # sigval_t issue
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	select BR2_PACKAGE_FREETYPE
	select BR2_PACKAGE_ZLIB
	help
	  DirectFB (Direct Frame Buffer) is a set of graphics APIs implemented
	  on top of the Linux Frame Buffer (fbdev) abstraction layer. It is an
	  alternative to X11 with a smaller memory footprint that still has an
	  integrated windowing system. As of 4 October 2015, DirectFB's website
	  http://www.directfb.org/ is down. See alternative site listed below.

	  http://elinux.org/DirectFB

if BR2_PACKAGE_DIRECTFB

config BR2_PACKAGE_DIRECTFB_MULTI
	bool "directfb multi application"
	select BR2_PACKAGE_LINUX_FUSION
	depends on BR2_USE_MMU # madvise()
	depends on BR2_LINUX_KERNEL
	help
	  Enable use of multiple concurrent DirectFB applications

comment "directfb multi application needs a Linux kernel to be built"
	depends on !BR2_LINUX_KERNEL

config BR2_PACKAGE_DIRECTFB_DEBUG_SUPPORT
	bool "directfb debugging support"
	default y
	help
	  Compile DirectFB with debugging support. It provides
	  functions to print debug information, for DirectFB as well as
	  external DirectFB drivers.

	  When disabled, DirectFB does not print any debug information.
	  The drivers will be installed to and loaded from
	  /usr/lib/directfb-<version>-pure instead of
	  /usr/lib/directfb-<version>.

config BR2_PACKAGE_DIRECTFB_DEBUG
	bool "directfb debugging"
	depends on BR2_PACKAGE_DIRECTFB_DEBUG_SUPPORT
	help
	  Compile DirectFB with lots of debug output

config BR2_PACKAGE_DIRECTFB_TRACE
	bool "directfb call trace support"
	help
	  Enable call tracing for DirectFB applications

config BR2_PACKAGE_DIRECTFB_DIVINE
	bool "divine"
	help
	  Enable the DiVine feature (virtual input)

config BR2_PACKAGE_DIRECTFB_SAWMAN
	bool "sawman"
	help
	  Enable the SawMan feature (window manager)

config BR2_PACKAGE_DIRECTFB_ATI128
	bool "compile ati128 graphics driver"
	depends on BR2_i386 || BR2_x86_64

config BR2_PACKAGE_DIRECTFB_MATROX
	bool "compile matrox graphics driver"
	depends on BR2_i386 || BR2_x86_64

config BR2_PACKAGE_DIRECTFB_PXA3XX
	bool "compile pxa3xx graphics driver"
	depends on BR2_arm
	help
	  The Marvell PXA3xx Processor Family is a system-on-chip based
	  on XScale® microarchitecture. This option enables the graphic
	  driver support for the PXA3xx processor family.

	  http://www.marvell.com/application-processors/pxa-family/

config BR2_PACKAGE_DIRECTFB_EP9X
	bool "compile ep9x graphics driver"
	depends on BR2_arm
	help
	  Enable the graphic driver support for the EP93xx ARMv9 based
	  processors from Cirrus Logic.

	  http://cirrus.com/en/products/arm9.html

config BR2_PACKAGE_DIRECTFB_I830
	bool "compile i830 graphics driver"
	depends on BR2_i386 || BR2_x86_64

config BR2_PACKAGE_DIRECTFB_LINUXINPUT
	bool "compile /dev/input/eventX input driver"
	default y

config BR2_PACKAGE_DIRECTFB_KEYBOARD
	bool "compile keyboard input driver"
	default y

config BR2_PACKAGE_DIRECTFB_PS2MOUSE
	bool "compile PS2 mouse input driver"
	default y

config BR2_PACKAGE_DIRECTFB_SERIALMOUSE
	bool "compile serial mouse input driver"
	default y

config BR2_PACKAGE_DIRECTFB_TSLIB
	bool "enable touchscreen support"
	depends on !BR2_STATIC_LIBS # tslib
	default y
	select BR2_PACKAGE_TSLIB

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

config BR2_PACKAGE_DIRECTFB_GIF
	bool "enable GIF support"
	default y

config BR2_PACKAGE_DIRECTFB_TIFF
	bool "enable TIFF support"
	select BR2_PACKAGE_TIFF

config BR2_PACKAGE_DIRECTFB_IMLIB2
	bool "enable IMLIB2 support"
	select BR2_PACKAGE_IMLIB2
	depends on !BR2_STATIC_LIBS

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

config BR2_PACKAGE_DIRECTFB_JPEG
	bool "enable JPEG support"
	default y
	select BR2_PACKAGE_JPEG

config BR2_PACKAGE_DIRECTFB_PNG
	bool "enable PNG support"
	default y
	select BR2_PACKAGE_LIBPNG

config BR2_PACKAGE_DIRECTFB_SVG
	bool "enable SVG support"
	default y
	select BR2_PACKAGE_LIBSVG_CAIRO

config BR2_PACKAGE_DIRECTFB_DITHER_RGB16
	bool "enable advanced dithering of RGB16 surfaces"
	help
	  Enable dithering when loading images to RGB16 surfaces.
	  This increases the data section by 64 KBytes.

config BR2_PACKAGE_DIRECTFB_TESTS
	bool "build directfb tests"

endif # BR2_PACKAGE_DIRECTFB

comment "directfb needs a glibc or uClibc toolchain w/ C++, NPTL, gcc >= 4.5"
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_INSTALL_LIBSTDCPP || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_5 || BR2_TOOLCHAIN_USES_MUSL
