menuconfig BR2_PACKAGE_PINENTRY
	bool "pinentry"
	depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error
	depends on BR2_USE_MMU # libassuan
	select BR2_PACKAGE_LIBASSUAN
	select BR2_PACKAGE_LIBGPG_ERROR
	# At least one backend is needed to avoid build breakage
	select BR2_PACKAGE_PINENTRY_NCURSES if \
		!BR2_PACKAGE_PINENTRY_GTK2 && \
		!BR2_PACKAGE_PINENTRY_QT5
	help
	  A collection of simple PIN or pass-phrase entry dialogs

	  https://www.gnupg.org/related_software/pinentry/

if BR2_PACKAGE_PINENTRY

config BR2_PACKAGE_PINENTRY_FLTK
	bool "pinentry-fltk"
	depends on BR2_USE_MMU # fltk
	depends on BR2_INSTALL_LIBSTDCPP # fltk
	depends on BR2_PACKAGE_XORG7 # fltk
	select BR2_PACKAGE_FLTK
	help
	  The pinentry-fltk tool

comment "pinentry-fltk needs X and a toolchain w/ C++"
	depends on BR2_USE_MMU
	depends on !BR2_PACKAGE_XORG7 || !BR2_INSTALL_LIBSTDCPP

config BR2_PACKAGE_PINENTRY_NCURSES
	bool "pinentry-ncurses"
	select BR2_PACKAGE_NCURSES
	select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
	help
	  The pinentry-ncurses tool

config BR2_PACKAGE_PINENTRY_GTK2
	bool "pinentry-gtk2"
	depends on BR2_PACKAGE_XORG7
	depends on BR2_USE_WCHAR
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_USE_MMU
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libgtk2 -> pango -> harfbuzz
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # libgtk2 -> pango -> harfbuzz
	select BR2_PACKAGE_LIBGTK2
	select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
	help
	  The pinentry-gtk2 tool

comment "pinentry-gtk2 needs X and a toolchain w/ wchar, threads, C++, gcc >= 4.8"
	depends on BR2_USE_MMU
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_PACKAGE_XORG7 || !BR2_USE_WCHAR || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \
		!BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS

config BR2_PACKAGE_PINENTRY_QT5
	bool "pinentry-qt5"
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_USE_WCHAR
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	depends on BR2_HOST_GCC_AT_LEAST_5
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5
	depends on !BR2_arc
	depends on !BR2_STATIC_LIBS
	select BR2_PACKAGE_QT5
	select BR2_PACKAGE_QT5BASE_GUI
	select BR2_PACKAGE_QT5BASE_WIDGETS
	help
	  The pinentry-qt5 tool

comment "pinentry-qt5 needs a host gcc >= 5.0, and a toolchain w/ wchar, NPTL, gcc >= 5.0, C++, dynamic library"
	depends on !BR2_arc
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \
		!BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_TOOLCHAIN_GCC_AT_LEAST_5 || \
		BR2_STATIC_LIBS || !BR2_HOST_GCC_AT_LEAST_5

endif
