menuconfig BR2_PACKAGE_SCONESERVER
	bool "sconeserver"
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	depends on !BR2_STATIC_LIBS # dlopen()
	select BR2_PACKAGE_PCRE
	select BR2_PACKAGE_ZLIB
	help
	  Sconeserver is a modular, object-orientated and extremely
	  versatile network server framework for GNU/Linux and
	  UNIX-like platforms.

	  http://www.sconemad.com/sconeserver/

if BR2_PACKAGE_SCONESERVER

comment "Sconeserver modules"

config BR2_PACKAGE_SCONESERVER_EXAMPLES
	bool "examples"
	help
	  Example modules for Sconeserver

config BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE
	bool "http::sconesite"
	select BR2_PACKAGE_LIBXML2
	help
	  http::sconesite module for Sconeserver

config BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE_IMAGE
	bool "http::sconesite::image"
	depends on BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE
	depends on BR2_USE_MMU # imagemagick
	select BR2_PACKAGE_IMAGEMAGICK
	help
	  http::sconesite::image module for Sconeserver

config BR2_PACKAGE_SCONESERVER_MYSQL
	bool "mysql"
	depends on BR2_USE_MMU # mysql
	select BR2_PACKAGE_MYSQL
	help
	  MySQL module for Sconeserver

config BR2_PACKAGE_SCONESERVER_BLUETOOTH
	bool "bluetooth"
	depends on BR2_USE_WCHAR # bluez5_utils -> libglib2
	depends on BR2_USE_MMU # bluez5_utils -> dbus
	depends on BR2_TOOLCHAIN_HAS_THREADS # bluez5_utils -> dbus, libglib2
	depends on !BR2_STATIC_LIBS # bluez5_utils
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # bluez5_utils
	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # bluez5_utils
	select BR2_PACKAGE_BLUEZ5_UTILS
	help
	  Bluetooth module for Sconeserver

comment "bluetooth support needs a toolchain w/ wchar, threads, dynamic library, headers >= 3.4"
	depends on BR2_USE_MMU
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \
		BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4

config BR2_PACKAGE_SCONESERVER_RSS
	bool "rss"
	select BR2_PACKAGE_LIBXML2
	help
	  RSS module for Sconeserver

config BR2_PACKAGE_SCONESERVER_LOCATION
	bool "location"
	depends on BR2_USE_MMU # gpsd
	depends on BR2_TOOLCHAIN_HAS_THREADS # gpsd
	depends on !BR2_STATIC_LIBS # gpsd
	select BR2_PACKAGE_GPSD
	help
	  Location module for Sconeserver

comment "location support needs a toolchain w/ theads, dynamic library"
	depends on BR2_USE_MMU
	depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBRARY

config BR2_PACKAGE_SCONESERVER_LETTUCE
	bool "lettuce"
	help
	  Sconeserver module for Lettuce embedded automation platform

	  http://www.sconemad.com/lettuce/

config BR2_PACKAGE_SCONESERVER_MATHS
	bool "maths"
	select BR2_PACKAGE_MPFR
	help
	  Mathematics module for Sconeserver

config BR2_PACKAGE_SCONESERVER_TESTBUILDER
	bool "testbuilder"
	help
	  Testbuilder module for Sconeserver

config BR2_PACKAGE_SCONESERVER_UI
	bool "ui"
	depends on BR2_PACKAGE_XORG7
	select BR2_PACKAGE_XLIB_LIBX11
	help
	  UI module for Sconeserver

comment "ui module requires X.org"
	depends on !BR2_PACKAGE_XORG7

endif # BR2_PACKAGE_SCONESERVER

comment "sconeserver needs a toolchain with dynamic library, C++, NPTL"
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL \
		|| BR2_STATIC_LIBS
