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_STATIC_LIBS
	depends on BR2_TOOLCHAIN_HAS_ATOMIC || BR2_TOOLCHAIN_HAS_SYNC_8
	select BR2_PACKAGE_LIBAIO
	select BR2_PACKAGE_LIBXML2
	select BR2_PACKAGE_NCURSES
	select BR2_PACKAGE_OPENSSL
	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/

comment "mariadb needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS
	depends on BR2_TOOLCHAIN_HAS_ATOMIC || BR2_TOOLCHAIN_HAS_SYNC_8

config BR2_PACKAGE_ORACLE_MYSQL
	bool "oracle mysql"
	select BR2_PACKAGE_NCURSES
	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.

config BR2_PACKAGE_MARIADB_SERVER_EMBEDDED
	bool "mariadb embedded server"
	depends on BR2_PACKAGE_MARIADB_SERVER
	help
	  Install the mariadb embedded 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
