config BR2_PACKAGE_FREERDP
	bool "freerdp"
	# FreeRDP does not have a single C++ source file, however it
	# insists on having a C++ compiler. Removing that requirement
	# is a bit too much involving, so we just depend on it...
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_USE_WCHAR
	depends on !BR2_STATIC_LIBS # uses dlfcn.h
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_USE_MMU # libglib2
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	select BR2_PACKAGE_OPENSSL
	select BR2_PACKAGE_ZLIB
	select BR2_PACKAGE_LIBGLIB2
	help
	  FreeRDP is a free implementation of the Remote Desktop
	  Protocol (RDP), released under the Apache license

	  This only installs the freerdp libraries.

	  http://www.freerdp.com/

	  Note: this also installs a key and certificate in
	  /etc/freerdp/keys/ . These are publicly-known, as they
	  are present in FreeRDP's source tree. It is strongly
	  suggested that you overwrite them with your own set,
	  either in an overlay rootfs or in a post-build script.

if BR2_PACKAGE_FREERDP

config BR2_PACKAGE_FREERDP_GSTREAMER1
	bool "gstreamer support"
	depends on BR2_PACKAGE_GSTREAMER1
	depends on BR2_PACKAGE_XORG7 # xlib-libxrandr
	# gstreamer-1.x dependencies already dependencies of FreeRDP
	select BR2_PACKAGE_GST1_PLUGINS_BASE
	select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP
	select BR2_PACKAGE_XLIB_LIBXRANDR

comment "gstreamer support needs X.Org"
	depends on !BR2_PACKAGE_XORG7
	depends on BR2_PACKAGE_GSTREAMER1

config BR2_PACKAGE_FREERDP_SERVER
	bool "server"
	depends on BR2_PACKAGE_XORG7
	select BR2_PACKAGE_XLIB_LIBX11
	select BR2_PACKAGE_XLIB_LIBXDAMAGE
	select BR2_PACKAGE_XLIB_LIBXEXT
	select BR2_PACKAGE_XLIB_LIBXFIXES

config BR2_PACKAGE_FREERDP_CLIENT_X11
	bool "X11 client"
	default y
	depends on BR2_PACKAGE_XORG7
	select BR2_PACKAGE_XLIB_LIBX11
	select BR2_PACKAGE_XLIB_LIBXEXT

comment "server and X11 client need X.Org"
	depends on !BR2_PACKAGE_XORG7

config BR2_PACKAGE_FREERDP_CLIENT_WL
	bool "wayland client"
	default y
	depends on BR2_PACKAGE_WAYLAND
	select BR2_PACKAGE_LIBXKBCOMMON

endif

comment "freerdp needs a toolchain w/ wchar, dynamic library, threads, C++"
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS \
		|| !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP
