config BR2_PACKAGE_MYSQL
	bool "mysql support"
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_USE_MMU # fork()
	depends on BR2_TOOLCHAIN_HAS_THREADS
	help
	  Select the desired mysql provider.

if BR2_PACKAGE_MYSQL

choice
	prompt "mysql variant"
	default BR2_PACKAGE_ORACLE_MYSQL
	help
	  Select either the oracle mysql server or the mariadb server

config BR2_PACKAGE_MARIADB
	bool "mariadb"
	depends on BR2_PACKAGE_LIBAIO_ARCH_SUPPORTS
	select BR2_PACKAGE_LIBAIO
	select BR2_PACKAGE_LIBXML2
	select BR2_PACKAGE_NCURSES
	select BR2_PACKAGE_OPENSSL
	select BR2_PACKAGE_READLINE
	select BR2_PACKAGE_HAS_MYSQL
	help
	  MariaDB is one of the most popular database servers in the
	  world.  It's made by the original developers of MySQL and
	  guaranteed to stay open source.

	  http://www.mariadb.org/

config BR2_PACKAGE_ORACLE_MYSQL
	bool "oracle mysql"
	select BR2_PACKAGE_NCURSES
	select BR2_PACKAGE_READLINE
	select BR2_PACKAGE_HAS_MYSQL
	help
	  The MySQL Open Source Database System

	  http://www.mysql.com/

endchoice

if BR2_PACKAGE_MARIADB

config BR2_PACKAGE_MARIADB_SERVER
	bool "mariadb server"
	help
	  Install the mariadb server on the target.

endif

if BR2_PACKAGE_ORACLE_MYSQL

config BR2_PACKAGE_ORACLE_MYSQL_SERVER
	bool "oracle mysql server"
	help
	  Install the MySQL server on the target.

endif

config BR2_PACKAGE_HAS_MYSQL
	bool

config BR2_PACKAGE_PROVIDES_MYSQL
	string
	default "mariadb"      if BR2_PACKAGE_MARIADB
	default "oracle-mysql" if BR2_PACKAGE_ORACLE_MYSQL

endif

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