config BR2_PACKAGE_QT5BASE
	bool "qt5base"
	select BR2_PACKAGE_ZLIB
	select BR2_PACKAGE_PCRE2
	select BR2_PACKAGE_PCRE2_16
	help
	  Qt is a cross-platform application and UI framework for
	  developers using C++.

	  This package corresponds to the qt5base module, which
	  contains the base Qt libraries: QtCore, QtNetwork, QtGui,
	  QtWidgets, etc.

	  http://qt.io

if BR2_PACKAGE_QT5BASE

config BR2_PACKAGE_QT5BASE_CUSTOM_CONF_OPTS
	string "Custom configuration options"
	help
	  Define custom qt5 configuration options which can be used to
	  enable or disable options not managed by buildroot. These
	  options are appended to the ones generated by buildroot and
	  passed to qt5base during configuration.

	  E.g. to remove the Windows Vista style option, add the option
	  -no-feature-style_windowsvista.

config BR2_PACKAGE_QT5BASE_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_QT5BASE_EXAMPLES
	bool "Compile and install examples (with code)"
	select BR2_PACKAGE_QT5BASE_NETWORK
	select BR2_PACKAGE_QT5BASE_XML
	help
	  If unsure, say N.

config BR2_PACKAGE_QT5BASE_NETWORK
	def_bool y

config BR2_PACKAGE_QT5BASE_CONCURRENT
	bool "concurrent module"
	help
	  This options enables the Qt5Concurrent library.

config BR2_PACKAGE_QT5BASE_SQL
	def_bool y

if BR2_PACKAGE_QT5BASE_SQL
config BR2_PACKAGE_QT5BASE_MYSQL
	bool "MySQL Plugin"
	depends on BR2_USE_MMU # mysql
	select BR2_PACKAGE_MYSQL
	select BR2_PACKAGE_NCURSES
	select BR2_PACKAGE_READLINE
	help
	  Build MySQL plugin
	  If unsure, say n.

config BR2_PACKAGE_QT5BASE_PSQL
	bool "PostgreSQL Plugin"
	depends on BR2_USE_MMU # postgresql
	depends on !BR2_STATIC_LIBS
	depends on BR2_USE_WCHAR # postgresql
	select BR2_PACKAGE_POSTGRESQL
	help
	  Build PostgreSQL plugin
	  If unsure, say n.

comment "PostgreSQL plugin needs a toolchain w/ wchar, dynamic library"
	depends on BR2_USE_MMU
	depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR

choice
	prompt "SQLite 3 support"
	default BR2_PACKAGE_QT5BASE_SQLITE_NONE
	help
	  Select SQLite support.

config BR2_PACKAGE_QT5BASE_SQLITE_NONE
	bool "No sqlite support"
	help
	  Do not compile any kind of SQLite support.

config BR2_PACKAGE_QT5BASE_SQLITE_QT
	bool "Qt SQLite"
	help
	  Use Qt bundled SQLite support.

config BR2_PACKAGE_QT5BASE_SQLITE_SYSTEM
	bool "System SQLite"
	select BR2_PACKAGE_SQLITE
	select BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA
	help
	  Use system SQLite.

endchoice

endif

config BR2_PACKAGE_QT5BASE_TEST
	def_bool y

config BR2_PACKAGE_QT5BASE_XML
	def_bool y

config BR2_PACKAGE_QT5BASE_GUI
	bool "gui module"
	select BR2_PACKAGE_FREETYPE
	# At least one graphic backend must be enabled, so enable
	# linuxfb if nothing is enabled.
	select BR2_PACKAGE_QT5BASE_LINUXFB if \
	       !BR2_PACKAGE_QT5BASE_DIRECTFB && \
	       !BR2_PACKAGE_QT5BASE_XCB && \
	       !BR2_PACKAGE_QT5BASE_EGLFS
	help
	  This option enables the Qt5Gui library.

if BR2_PACKAGE_QT5BASE_GUI

config BR2_PACKAGE_QT5BASE_WIDGETS
	bool "widgets module"
	select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_QT5BASE_XCB
	help
	  This option enables the Qt5Widgets library.

comment "OpenGL support needs an OpenGL-capable backend"
	depends on !BR2_PACKAGE_QT5_GL_AVAILABLE

config BR2_PACKAGE_QT5BASE_OPENGL
	bool "OpenGL support"
	depends on BR2_PACKAGE_QT5_GL_AVAILABLE
	help
	  This option enables OpenGL support.

if BR2_PACKAGE_QT5BASE_OPENGL

choice
	prompt "OpenGL API"
	help
	  Select OpenGL API.

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

config BR2_PACKAGE_QT5BASE_OPENGL_ES2
	bool "OpenGL ES 2.0+"
	depends on BR2_PACKAGE_HAS_LIBGLES
	help
	  Use OpenGL ES 2.0 and later versions.

endchoice

config BR2_PACKAGE_QT5BASE_OPENGL_LIB
	bool "opengl module"
	select BR2_PACKAGE_QT5BASE_WIDGETS
	help
	  This option enables the Qt5OpenGL library. This library
	  includes OpenGL support classes provided to ease porting
	  from Qt 4.x.

endif

config BR2_PACKAGE_QT5BASE_LINUXFB
	bool "linuxfb support"

config BR2_PACKAGE_QT5BASE_DIRECTFB
	bool "directfb support"
	depends on BR2_PACKAGE_DIRECTFB

comment "directfb backend available if directfb is enabled"
	depends on !BR2_PACKAGE_DIRECTFB

config BR2_PACKAGE_QT5BASE_XCB
	bool "X.org XCB support"
	depends on BR2_PACKAGE_XORG7
	select BR2_PACKAGE_XLIB_LIBX11
	select BR2_PACKAGE_LIBXCB
	select BR2_PACKAGE_XCB_UTIL_IMAGE
	select BR2_PACKAGE_XCB_UTIL_KEYSYMS
	select BR2_PACKAGE_XCB_UTIL_RENDERUTIL
	select BR2_PACKAGE_XCB_UTIL_WM
	select BR2_PACKAGE_LIBXKBCOMMON

comment "X.org XCB backend available if X.org is enabled"
	depends on !BR2_PACKAGE_XORG7

config BR2_PACKAGE_QT5BASE_EGLFS
	bool "eglfs support"
	depends on BR2_PACKAGE_HAS_LIBEGL
	depends on BR2_PACKAGE_QT5_GL_AVAILABLE
	select BR2_PACKAGE_QT5BASE_OPENGL

comment "eglfs backend available if OpenGL and EGL are enabled"
	depends on !BR2_PACKAGE_HAS_LIBEGL || !BR2_PACKAGE_QT5_GL_AVAILABLE

config BR2_PACKAGE_QT5BASE_DEFAULT_QPA
	string "Default graphical platform"
	help
	  Choose the default platform abstraction to use for graphical
	  applications (e.g xcb, linuxfb, eglfs, ...). If this is
	  empty, the default for your architecture will be used
	  (usually this is eglfs).

	  You can get a list of supported platforms by running a Qt
	  application with the option "-platform help" on your
	  target. You can choose a different platform at runtime with
	  the -platform option.

config BR2_PACKAGE_QT5BASE_PRINTSUPPORT
	depends on BR2_PACKAGE_QT5BASE_WIDGETS
	def_bool y

config BR2_PACKAGE_QT5BASE_FONTCONFIG
	bool "fontconfig support"
	select BR2_PACKAGE_FONTCONFIG
	help
	  This option enables Fontconfig and Freetype support using
	  the system fontconfig and freetype2 libraries.

config BR2_PACKAGE_QT5BASE_HARFBUZZ
	bool "harfbuzz support"
	select BR2_PACKAGE_HARFBUZZ if \
		BR2_TOOLCHAIN_HAS_SYNC_4 && \
		BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	help
	  This option enables HarfBuzz support (either system harfbuzz
	  if the toolchain supports __sync for 4 bytes, or the qt
	  provided one which avoids this dependency by using QAtomic).

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

config BR2_PACKAGE_QT5BASE_JPEG
	bool "JPEG support"
	select BR2_PACKAGE_JPEG
	help
	  This option enables JPEG support using the system libjpeg
	  library.

config BR2_PACKAGE_QT5BASE_PNG
	bool "PNG support"
	select BR2_PACKAGE_LIBPNG
	help
	  This option enables PNG support using the system libpng
	  library.

endif

config BR2_PACKAGE_QT5BASE_DBUS
	bool "DBus module"
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_USE_MMU
	select BR2_PACKAGE_DBUS
	help
	  This option enables the D-Bus module.

config BR2_PACKAGE_QT5BASE_ICU
	bool "Enable ICU support"
	depends on !BR2_BINFMT_FLAT # icu
	depends on BR2_HOST_GCC_AT_LEAST_4_9 # icu
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # icu
	select BR2_PACKAGE_ICU
	help
	  This option enables ICU support in Qt5. This is for example
	  needed for Qt5Webkit.

comment "icu support needs a toolchain w/ gcc >= 4.9, host gcc >= 4.9"
	depends on !BR2_BINFMT_FLAT
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \
		!BR2_HOST_GCC_AT_LEAST_4_9

config BR2_PACKAGE_QT5BASE_TSLIB
	bool "Enable Tslib support"
	select BR2_PACKAGE_TSLIB
	help
	  This options enables the Tslib plugin

endif
