PORTNAME=	pinentry
PORTVERSION=	1.3.1
PORTREVISION?=	2
CATEGORIES=	security
MASTER_SITES=	GNUPG/pinentry

MAINTAINER=	jhale@FreeBSD.org
COMMENT?=	Collection of simple PIN or passphrase entry dialogs
WWW=		https://www.gnupg.org/aegypten2

LICENSE=	GPLv2+
LICENSE_FILE=	${WRKSRC}/COPYING

USES=		tar:bzip2

.if !defined(PINENTRY_GUI)
INFO=		pinentry
NO_ARCH=	yes
NO_BUILD=	yes
PLIST_FILES=	bin/pinentry

OPTIONS_SINGLE=	FRONTEND
OPTIONS_SINGLE_FRONTEND=	NCURSES TTY
OPTIONS_DEFAULT=	NCURSES

FRONTEND_DESC=	Default frontend

TTY_DESC=	Console version
PINENTRY_TTY=	pinentry-tty
TTY_RUN_DEPENDS=	${PINENTRY_TTY}:security/pinentry-tty

NCURSES_DESC=	Curses frontend
PINENTRY_NCURSES=	pinentry-curses
NCURSES_RUN_DEPENDS=	${PINENTRY_NCURSES}:security/pinentry-curses

EFL_DESC=	EFL frontend
PINENTRY_EFL=	pinentry-efl
# Due to a dependency loop that exists between security/pinentry-efl,
# devel/elf, graphics/poppler, security/gpgmepp, security/gpgme,
# security/gnupg and security/pinentry, the user must install
# pinentry-efl manually. See pkg-message.dep-loop for more details.
#EFL_RUN_DEPENDS=	${PINENTRY_EFL}:security/pinentry-efl
EFL_SUB_FILES=	pkg-message.dep-loop
EFL_SUB_LIST=	PKGNAME="pinentry-efl"
EFL_VARS=	PKGMESSAGE+=${WRKDIR}/pkg-message.dep-loop

FLTK_DESC=	FLTK frontend
PINENTRY_FLTK=	pinentry-fltk
FLTK_RUN_DEPENDS=	${PINENTRY_FLTK}:security/pinentry-fltk

GTK2_DESC=	Gtk+ 2 frontend
PINENTRY_GTK2=	pinentry-gtk-2
GTK2_RUN_DEPENDS=	${PINENTRY_GTK2}:security/pinentry-gtk2

QT5_DESC=	Qt 5 frontend
PINENTRY_QT5=	pinentry-qt5
QT5_RUN_DEPENDS=	${PINENTRY_QT5}:security/pinentry-qt5

QT6_DESC=	Qt 6 frontend
PINENTRY_QT6=	pinentry-qt
QT6_RUN_DEPENDS=	${PINENTRY_QT6}:security/pinentry-qt6

GNOME_DESC=	GNOME frontend
PINENTRY_GNOME=	pinentry-gnome3
# Due to a dependency loop that exists between security/pinentry-gnome,
# security/gcr, security/gnupg and security/pinentry, the user must install
# pinentry-gnome manually. See pkg-message.dep-loop for more details.
#GNOME_RUN_DEPENDS=	${PINENTRY_GNOME}:security/pinentry-gnome
GNOME_SUB_FILES=pkg-message.dep-loop
GNOME_SUB_LIST=	PKGNAME="pinentry-gnome"
GNOME_VARS=	PKGMESSAGE+=${WRKDIR}/pkg-message.dep-loop

.include <bsd.port.options.mk>

.for gui in ${OPTIONS_SINGLE_FRONTEND}
. if ${PORT_OPTIONS:M${gui}}
PINENTRY_BIN=	${PINENTRY_${gui}}
. endif
.endfor

do-install:
	${LN} -sf ${PINENTRY_BIN} ${STAGEDIR}${PREFIX}/bin/pinentry
	${INSTALL_DATA} ${WRKSRC}/doc/pinentry.info ${STAGEDIR}${PREFIX}/${INFO_PATH}

.else # !defined(PINENTRY_GUI)
PKGNAMESUFFIX=	-${PINENTRY_GUI}
LIB_DEPENDS=	libassuan.so:security/libassuan \
		libgpg-error.so:security/libgpg-error

USES+=		gmake iconv localbase ncurses pkgconfig
GNU_CONFIGURE=	yes
CONFIGURE_ARGS=	--disable-pinentry-emacs
LDFLAGS+=	-Wl,--as-needed

OPTIONS_DEFINE=	LIBSECRET

LIBSECRET_DESC=	Saving the passphrase with libsecret
LIBSECRET_CONFIGURE_ENABLE=	libsecret
LIBSECRET_LIB_DEPENDS=	libsecret-1.so:security/libsecret
LIBSECRET_USES=		gnome
LIBSECRET_USE=		GNOME=glib20

CONFIGURE_ARGS+=--disable-pinentry-gnome3
CONFIGURE_ARGS+=--disable-pinentry-qt5
CONFIGURE_ARGS+=--disable-pinentry-qt
CONFIGURE_ARGS+=--disable-pinentry-gtk2
CONFIGURE_ARGS+=--disable-pinentry-efl
CONFIGURE_ARGS+=--disable-pinentry-fltk

.if ${PINENTRY_GUI} == "curses"
PLIST_FILES=	bin/pinentry-curses
.else
CONFIGURE_ARGS+=--disable-pinentry-curses
.endif

.if ${PINENTRY_GUI} == "tty"
PLIST_FILES=	bin/pinentry-tty
CONFIGURE_ARGS+=--enable-pinentry-tty
.else
CONFIGURE_ARGS+=--disable-pinentry-tty
.endif

post-install:
	${RM} ${STAGEDIR}${PREFIX}/bin/pinentry \
		${STAGEDIR}${PREFIX}/share/info/pinentry.info

.endif # !defined(PINENTRY_GUI)

.include <bsd.port.mk>
