config BR2_PACKAGE_DIRECTFB
	bool "directfb"
	depends on !BR2_STATIC_LIBS # static link issues
	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"
	depends on BR2_USE_MMU # madvise()
	depends on BR2_LINUX_KERNEL
	select BR2_PACKAGE_LINUX_FUSION
	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"
	default y
	depends on !BR2_STATIC_LIBS # tslib
	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"
	depends on !BR2_STATIC_LIBS
	select BR2_PACKAGE_IMLIB2

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, dynamic library"
	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 || \
		BR2_STATIC_LIBS
