comment "qt needs a toolchain w/ C++, threads"
	depends on BR2_USE_MMU
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS

menuconfig BR2_PACKAGE_QT
	bool "Qt (obsolete)"
	depends on BR2_USE_MMU # fork
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_TOOLCHAIN_HAS_THREADS
	help
	  Qt is a cross-platform application and UI framework for
	  developers using C++.

	  http://qt-project.org

if BR2_PACKAGE_QT

choice
	prompt "Qt installation"
	help
	  Selects the type of installation: standard or embedded

config BR2_PACKAGE_QT_EMBEDDED
	bool "Qt embedded"
	help
	  The embedded Qt installation targets embedded systems
	  without X.org. Provides backends for framebuffer.
	  If unsure, say Y.

comment "Qt standard (X11) not available (need X.org)"
	depends on !BR2_PACKAGE_XORG7

config BR2_PACKAGE_QT_X11
	bool "Qt standard (X11)"
	depends on BR2_PACKAGE_XORG7
	select BR2_PACKAGE_FONTCONFIG
	select BR2_PACKAGE_XLIB_LIBXI
	select BR2_PACKAGE_XLIB_LIBX11
	select BR2_PACKAGE_XLIB_LIBXRENDER
	select BR2_PACKAGE_XLIB_LIBXCURSOR
	select BR2_PACKAGE_XLIB_LIBXRANDR
	select BR2_PACKAGE_XLIB_LIBXEXT
	select BR2_PACKAGE_XLIB_LIBXV
	select BR2_PACKAGE_QT_SYSTEMFREETYPE
	select BR2_PACKAGE_QT_GUI_MODULE
	help
	  The standard Qt installation provides X.org backend. If you
	  don't want to use X.org, say N.

endchoice

config BR2_PACKAGE_QT_DEBUG
	bool "Compile with debug support"
	help
	  If unsure, say N.

config BR2_PACKAGE_QT_DEMOS
	bool "Compile and install Qt demos (with code)"
	select BR2_PACKAGE_QT_GUI_MODULE
	help
	  If unsure, say N.

config BR2_PACKAGE_QT_TRANSLATION_FILES
	bool "Install translation files"
	help
	  Install binary .qm translation files.
	  Say y if you need these files. They will take about 8 MB
	  on the target root filesystem.

config BR2_PACKAGE_QT_EXAMPLES
	bool "Compile and install Qt examples (with code)"
	select BR2_PACKAGE_QT_GUI_MODULE
	help
	  If unsure, say N.

choice
	prompt "Library type"
	help
	  Selects the library type: Shared or Static

config BR2_PACKAGE_QT_SHARED
	bool "Shared library"
	depends on !BR2_STATIC_LIBS
	help
	  Create and use shared Qt libraries.
	  If you have multiple programs that depend on Qt or intend to
	  use plugins, say Y.

config BR2_PACKAGE_QT_STATIC
	bool "Static Library"
	help
	  Create and use static Qt libraries.
	  If you don't have multiple programs on the target that
	  depends on Qt, then this will save you quite some of storage
	  space.
	  If unsure, say Y.

endchoice

config BR2_PACKAGE_QT_CONFIG_FILE
	string "Config file"
	help
	  Configure options allow to set which modules are being
	  compiled or not in Qt, but Qt also provide a more
	  fine-grained mechanism to configure which features should be
	  enabled or disabled, through a header file. Examples of such
	  header files can be found in src/corelib/global/qconfig-*.h
	  in the Qt sources.

	  This option allows to set the path of such a configuration
	  file, which Buildroot will give to Qt at compile time.

config BR2_PACKAGE_QT_QT3SUPPORT
	bool "Compatibility with Qt3"
	depends on BR2_PACKAGE_QT_GUI_MODULE
	select BR2_PACKAGE_QT_SQL_MODULE
	help
	  Turns on support for older Qt3. This will create an
	  additional library with proxy code and increase the space
	  required on target.  If unsure say n.

config BR2_PACKAGE_QT_GUI_MODULE
	bool "Gui Module"
	default y
	select BR2_PACKAGE_QT_NETWORK
	help
	  Turns on support for Gui applications. If your board doesn't
	  have video output, or you don't require Qt GUI, say n.

if BR2_PACKAGE_QT_GUI_MODULE

if BR2_PACKAGE_QT_EMBEDDED

menu "Pixel depths"
comment "Deselecting each option leads to Qt's default (8,16,32)"

config BR2_PACKAGE_QT_PIXEL_DEPTH_1
	bool "1 bpp, black/white"

config BR2_PACKAGE_QT_PIXEL_DEPTH_4
	bool "4 bpp, grayscale"

config BR2_PACKAGE_QT_PIXEL_DEPTH_8
	bool "8 bpp, paletted"
	default y

config BR2_PACKAGE_QT_PIXEL_DEPTH_12
	bool "12 bpp, rgb 4-4-4"

config BR2_PACKAGE_QT_PIXEL_DEPTH_15
	bool "15 bpp, rgb 5-5-5"

config BR2_PACKAGE_QT_PIXEL_DEPTH_16
	bool "16 bpp, rgb 5-6-5"
	default y

config BR2_PACKAGE_QT_PIXEL_DEPTH_18
	bool "18 bpp, rgb 6-6-6"

config BR2_PACKAGE_QT_PIXEL_DEPTH_24
	bool "24 bpp, rgb 8-8-8"

config BR2_PACKAGE_QT_PIXEL_DEPTH_32
	bool "32 bpp, argb 8-8-8-8 and rgb 8-8-8"
	default y

endmenu

menu "Fonts"

config BR2_PACKAGE_QT_FONT_TRUETYPE
	bool "dejavu/vera"
	default y
	depends on BR2_PACKAGE_QT_QTFREETYPE || BR2_PACKAGE_QT_SYSTEMFREETYPE

comment "dejavu/vera fonts need freetype support"
	depends on !BR2_PACKAGE_QT_QTFREETYPE && !BR2_PACKAGE_QT_SYSTEMFREETYPE

config BR2_PACKAGE_QT_FONT_MICRO
	bool "micro"
	default y

config BR2_PACKAGE_QT_FONT_FIXED
	bool "fixed"
	default y

config BR2_PACKAGE_QT_FONT_HELVETICA
	bool "helvetica"
	default y

config BR2_PACKAGE_QT_FONT_JAPANESE
	bool "japanese"

config BR2_PACKAGE_QT_FONT_UNIFONT
	bool "unicode"

endmenu

endif # BR2_PACKAGE_QT_EMBEDDED

choice
	prompt "freetype2 support"
	default BR2_PACKAGE_QT_NOFREETYPE
	help
	  Select freetype2 support.

config BR2_PACKAGE_QT_NOFREETYPE
	bool "no freetype2 support"
	depends on BR2_PACKAGE_QT_EMBEDDED
	help
	  Do not compile in Freetype2 support.

comment "Qt freetype2 needs Qt embedded"
	depends on BR2_PACKAGE_QT_X11

config BR2_PACKAGE_QT_QTFREETYPE
	bool "Qt freetype2"
	depends on BR2_PACKAGE_QT_EMBEDDED
	help
	  Use the libfreetype bundled with Qt.

config BR2_PACKAGE_QT_SYSTEMFREETYPE
	bool "System freetype2"
	select BR2_PACKAGE_FREETYPE
	help
	  Use shared libfreetype from the target system.
	  See http://www.freetype.org/
endchoice

config BR2_PACKAGE_QT_GIF
	bool "Enable GIF support"
	help
	  This compiles and installs the plugin for GIF reading support.

config BR2_PACKAGE_QT_LIBMNG
	bool "Enable libmng support"
	help
	  This compiles and installs the plugin for MNG support.

choice
	prompt "JPEG support"
	default BR2_PACKAGE_QT_NOJPEG
	help
	  Select libjpeg support.

config BR2_PACKAGE_QT_NOJPEG
	bool "No jpeg support"
	help
	  Disable JPEG support

config BR2_PACKAGE_QT_SYSTEMJPEG
	bool "System libjpeg"
	select BR2_PACKAGE_JPEG
	help
	  Link against system libjpeg

config BR2_PACKAGE_QT_QTJPEG
	bool "Use Qt bundled libjpeg"
	help
	  Link against libjpeg provided with Qt
endchoice

choice
	prompt "PNG support"
	default BR2_PACKAGE_QT_NOPNG
	help
	  Select which library to use if PNG support should be enabled.

config BR2_PACKAGE_QT_NOPNG
	bool "No PNG support"

config BR2_PACKAGE_QT_SYSTEMPNG
	bool "System libpng"
	select BR2_PACKAGE_LIBPNG

config BR2_PACKAGE_QT_QTPNG
	bool "Use Qt bundled libpng"
endchoice

choice
	prompt "TIFF support"
	default BR2_PACKAGE_QT_NOTIFF
	help
	  Select which library to use if TIFF support should be enabled.

config BR2_PACKAGE_QT_NOTIFF
	bool "No TIFF support"

config BR2_PACKAGE_QT_SYSTEMTIFF
	bool "System libtiff"
	select BR2_PACKAGE_TIFF

config BR2_PACKAGE_QT_QTTIFF
	bool "Use Qt bundled libtiff"
endchoice

config BR2_PACKAGE_QT_ACCESSIBILITY
	bool "Enable accessibility support"
	help
	  This enables and compiles the accessibility support.

endif # BR2_PACKAGE_QT_GUI_MODULE

choice
	prompt "zlib support"
	default BR2_PACKAGE_QT_QTZLIB
	help
	  Select zlib support.

config BR2_PACKAGE_QT_QTZLIB
	bool "Qt zlib"
	depends on !BR2_STATIC_LIBS
	help
	  Use the zlib bundled with Qt.

comment "Qt zlib needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS

config BR2_PACKAGE_QT_SYSTEMZLIB
	bool "System zlib"
	select BR2_PACKAGE_ZLIB
	help
	  Use the shared zlib from the system.
endchoice

source "package/qt/Config.sql.in"
if BR2_PACKAGE_QT_GUI_MODULE
if BR2_PACKAGE_QT_EMBEDDED
source "package/qt/Config.gfx.in"
source "package/qt/Config.mouse.in"
source "package/qt/Config.keyboard.in"
endif

config BR2_PACKAGE_QT_PHONON
	bool "Phonon Module"
	default y
	depends on BR2_PACKAGE_GSTREAMER
	select BR2_PACKAGE_GST_PLUGINS_BASE
	help
	  Build the Phonon module. Support for different audio/video
	  formats can be configured at the GStreamer package.
	  If unsure, say n.

comment "Phonon module needs gstreamer"
	depends on !BR2_PACKAGE_GSTREAMER

config BR2_PACKAGE_QT_PHONON_BACKEND
	bool "Phonon Module Backend"
	depends on BR2_PACKAGE_QT_PHONON
	help
	  Build the platform Phonon plugin.
	  If unsure, say n.

config BR2_PACKAGE_QT_OPENGL
	bool "OpenGL support"
	default y
	depends on (BR2_PACKAGE_HAS_LIBGL && BR2_PACKAGE_QT_X11) || \
		   (BR2_PACKAGE_HAS_LIBEGL && BR2_PACKAGE_HAS_LIBGLES)
	help
	  This option enables OpenGL support.

if BR2_PACKAGE_QT_OPENGL

choice
	prompt "OpenGL API"
	help
	  Select OpenGL API.

comment "Desktop OpenGL not available (needs Qt standard (X11))"
	depends on !BR2_PACKAGE_QT_X11

config BR2_PACKAGE_QT_OPENGL_GL_DESKTOP
	bool "Desktop OpenGL"
	depends on BR2_PACKAGE_HAS_LIBGL
	depends on BR2_PACKAGE_QT_X11
	help
	  Use desktop OpenGL.

config BR2_PACKAGE_QT_OPENGL_ES
	bool "OpenGL ES v2.x support"
	depends on BR2_PACKAGE_HAS_LIBGLES
	depends on BR2_PACKAGE_HAS_LIBEGL
	help
	  Enable the OpenGL ES v2.x support.

endchoice

endif # BR2_PACKAGE_QT_OPENGL

endif

config BR2_PACKAGE_QT_DBUS
	bool "DBus Module"
	depends on BR2_TOOLCHAIN_HAS_THREADS # dbus
	depends on BR2_USE_MMU # dbus
	select BR2_PACKAGE_DBUS
	help
	  Build the Qt DBus module.

comment "DBus Module needs a toolchain w/ threads"
	depends on BR2_USE_MMU
	depends on !BR2_TOOLCHAIN_HAS_THREADS

config BR2_PACKAGE_QT_XML
	bool "XML Module"
	default y
	help
	  Build the XML module.

config BR2_PACKAGE_QT_XMLPATTERNS
	bool "XML Patterns Module"
	depends on BR2_PACKAGE_QT_XML
	help
	  Build QtXmlPatterns module.
	  If unsure, say n

config BR2_PACKAGE_QT_MULTIMEDIA
	bool "Multimedia Module"
	depends on BR2_PACKAGE_QT_GUI_MODULE
	help
	  Build QtMultimedia module.

config BR2_PACKAGE_QT_AUDIO_BACKEND
	bool "QtMultimedia Audio backend"
	depends on BR2_PACKAGE_QT_MULTIMEDIA
	depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib
	select BR2_PACKAGE_ALSA_LIB
	help
	  Build the ALSA audio backend into QtMultimedia

config BR2_PACKAGE_QT_SVG
	bool "SVG Module"
	depends on BR2_PACKAGE_QT_GUI_MODULE
	help
	  Build the SVG module.
	  If unsure, say n

config BR2_PACKAGE_QT_NETWORK
	bool "Network Module"
	default y
	help
	  Install the Network module.
	  if unsure, say y

config BR2_PACKAGE_QT_ARCH_SUPPORTS_WEBKIT
	bool
	# see src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h
	# see http://lists.busybox.net/pipermail/buildroot/2014-November/112605.html
	default y if BR2_arc || BR2_arm || BR2_armeb || BR2_i386 || BR2_microblazeel || \
		BR2_microblazebe || BR2_mips || BR2_mipsel || \
		(BR2_mips64 || BR2_mips64el) && !BR2_MIPS_NABI32 || BR2_powerpc || \
		BR2_powerpc64 || BR2_powerpc64le || BR2_x86_64 || \
		BR2_sh4 || BR2_sh4eb || BR2_sh4a || BR2_sh4aeb
	depends on BR2_TOOLCHAIN_HAS_SYNC_4

config BR2_PACKAGE_QT_WEBKIT
	bool "WebKit Module"
	depends on BR2_PACKAGE_QT_SCRIPT
	depends on BR2_PACKAGE_QT_SHARED
	depends on BR2_PACKAGE_QT_GUI_MODULE
	depends on BR2_PACKAGE_QT_NETWORK
	depends on BR2_PACKAGE_QT_ARCH_SUPPORTS_WEBKIT
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # needs pthread_getattr_np()
	depends on BR2_PACKAGE_GSTREAMER
	select BR2_PACKAGE_GST_PLUGINS_BASE
	select BR2_PACKAGE_GST_PLUGINS_BASE_PLUGIN_APP
	help
	  Build the WebKit module.
	  If unsure, say n.

comment "WebKit needs a toolchain w/ dynamic library, NPTL"
	depends on BR2_PACKAGE_QT_ARCH_SUPPORTS_WEBKIT
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIB

comment "WebKit needs QtShared/Script/Gui/Network and Gstreamer 0.10"
	depends on BR2_PACKAGE_QT_ARCH_SUPPORTS_WEBKIT
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL && !BR2_STATIC_LIB
	depends on !BR2_PACKAGE_QT_SCRIPT     || !BR2_PACKAGE_QT_SHARED   \
		|| !BR2_PACKAGE_QT_GUI_MODULE || !BR2_PACKAGE_QT_NETWORK  \
		|| !BR2_PACKAGE_GSTREAMER

config BR2_PACKAGE_QT_STL
	bool "STL support"
	help
	  Compile STL support.
	  If unsure, say n.

config BR2_PACKAGE_QT_OPENSSL
	bool "Enable OpenSSL support"
	depends on BR2_PACKAGE_QT_NETWORK
	select BR2_PACKAGE_OPENSSL
	help
	  Enable support for the OpenSSL encryption library. If you use
	  QSslSocket say y here, otherwise, say no to save space on the
	  target.
	  If unsure, say n.

config BR2_PACKAGE_QT_ARCH_SUPPORTS_SCRIPT
	bool
	# see http://lists.busybox.net/pipermail/buildroot/2014-November/112605.html
	default y if BR2_arc || BR2_arm || BR2_armeb || BR2_aarch64 || BR2_i386 || \
		BR2_microblazeel || BR2_microblazebe || BR2_mips || BR2_mipsel || \
		BR2_mips64 || BR2_mips64el || BR2_nios2 || BR2_powerpc || \
		BR2_powerpc64 || BR2_powerpc64le || BR2_sh4 || BR2_sh4eb || \
		BR2_sh4a || BR2_sh4aeb || BR2_x86_64
	depends on BR2_TOOLCHAIN_HAS_SYNC_4

config BR2_PACKAGE_QT_SCRIPT
	bool "Script Module"
	default y
	depends on BR2_PACKAGE_QT_ARCH_SUPPORTS_SCRIPT
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # needs pthread_getattr_np()
	help
	  Build the Qt Script module.
	  if unsure, say y.

comment "Script Module needs a toolchain with NPTL"
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL
	depends on BR2_PACKAGE_QT_ARCH_SUPPORTS_SCRIPT

config BR2_PACKAGE_QT_SCRIPTTOOLS
	bool "Script Tools Module"
	depends on BR2_PACKAGE_QT_SCRIPT
	depends on BR2_PACKAGE_QT_GUI_MODULE
	help
	  Build the Qt Script Tools module.
	  if unsure, say n.

config BR2_PACKAGE_QT_DECLARATIVE
	bool "Declarative module"
	depends on BR2_PACKAGE_QT_SCRIPT
	depends on BR2_PACKAGE_QT_GUI_MODULE
	depends on BR2_PACKAGE_QT_SQL_MODULE
	help
	  Build the Qt Declarative Module for qml support
	  if unsure, say n.

config BR2_PACKAGE_QT_TEST
	bool "Test Module"
	help
	  Install the Test module.

endif # BR2_PACKAGE_QT
