diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/Manifest b/tests/fixtures/overlay/app-crypt/pinentry-base/Manifest new file mode 100644 index 00000000..e8e43f0c --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/Manifest @@ -0,0 +1,2 @@ +DIST pinentry-1.0.0.tar.bz2 436930 BLAKE2B 949be8de8504a42cd5bd6ffebe331a825db7ff3c2ccc5fc554155b7621fddf9df957aa92063eb1a06c6964826a296bf60a4cc46cf2886552e37703a62042f35a SHA512 f109236707c51871b5020ef807a551366461fafcfbe09bf8cda19d4b163a42cf622562b905ceb41429f1d648b3f3d27807538709da6a135b67f9888709eccd62 +DIST pinentry-1.1.0.tar.bz2 467702 BLAKE2B cf43555848ab0dc60756fca123aba7599ebb1bfe0458b973ed9d84479f8de9ee69ef309b518b40aa340434d64d37793cf97c94f78f99820bc5c71ecd2aac7a49 SHA512 5012672925bcb5f683358c259e55e4b87c67cf063ad52c759308933733025c33f7ce08e5b8019ffc101cbf7ef30499040ef2fd34a7611698e65e1593f80948cd diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-0.8.2-ncurses.patch b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-0.8.2-ncurses.patch new file mode 100644 index 00000000..3bb92c63 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-0.8.2-ncurses.patch @@ -0,0 +1,25 @@ +From bafe8608fc525ef103b3d1f3048ca28958bef596 Mon Sep 17 00:00:00 2001 +From: Alon Bar-Lev +Date: Sun, 5 May 2013 02:23:08 +0300 +Subject: [PATCH] ncurses: link with optional tinfo + +--- + m4/curses.m4 | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/m4/curses.m4 b/m4/curses.m4 +index 3a01881..ffb6bd1 100644 +--- a/m4/curses.m4 ++++ b/m4/curses.m4 +@@ -36,6 +36,8 @@ AC_DEFUN([IU_LIB_NCURSES], [ + have_ncursesw=no + fi + if test "$LIBNCURSES"; then ++ AC_CHECK_LIB(tinfow, curs_set, LIBNCURSES="${LIBNCURSES} -ltinfow", ++ AC_CHECK_LIB(tinfo, curs_set, LIBNCURSES="${LIBNCURSES} -ltinfo")) + # Use ncurses header files instead of the ordinary ones, if possible; + # is there a better way of doing this, that avoids looking in specific + # directories? +-- +1.8.1.5 + diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-0.9.7-require-CPP11-for-qt-5-7.patches b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-0.9.7-require-CPP11-for-qt-5-7.patches new file mode 100644 index 00000000..406571cd --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-0.9.7-require-CPP11-for-qt-5-7.patches @@ -0,0 +1,48 @@ +From 7384e2a575dde2809784d9f182fd1d247064c8a2 Mon Sep 17 00:00:00 2001 +From: Kristian Fiskerstrand +Date: Thu, 11 Aug 2016 14:44:37 +0200 +Subject: [PATCH] Qt: Append -std=c++11 if building against Qt 5.7 + + * m4/qt.m4: Append -std=c++11 to CFLAGS if building against Qt 5.7 + +-- +Qt 5.7 enables C++11 for Qt modules, and any app relying on it require to be +compiled with at least this standard. + +This patch adds detection for Qt 5.7 and make sure -std=c++11 is passed if +building against Qt 5.7 or higher. +--- + m4/qt.m4 | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/m4/qt.m4 b/m4/qt.m4 +index 093f428..90c4a6e 100644 +--- a/m4/qt.m4 ++++ b/m4/qt.m4 +@@ -35,6 +35,7 @@ AC_DEFUN([FIND_QT], + enable_pinentry_qt5="try") + + have_qt5_libs="no"; ++ require_qt_cpp11="no"; + + if test "$enable_pinentry_qt5" != "no"; then + PKG_CHECK_MODULES(PINENTRY_QT, +@@ -47,6 +48,15 @@ AC_DEFUN([FIND_QT], + fi + fi + if test "$have_qt5_libs" = "yes"; then ++ PKG_CHECK_MODULES(PINENTRY_QT_REQUIRE_CPP11, ++ Qt5Core >= 5.7.0, ++ [require_qt_cpp11="yes"], ++ [require_qt_cpp11="no"]) ++ ++ if test "${require_qt_cpp11}" = "yes"; then ++ PINENTRY_QT_CFLAGS="$PINENTRY_QT_CFLAGS -std=c++11" ++ fi ++ + AC_CHECK_TOOL(MOC, moc) + AC_MSG_CHECKING([moc version]) + mocversion=`$MOC -v 2>&1` +-- +2.7.3 + diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-Disable-tooltips-in-keyboard-grabbing-mode.patch b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-Disable-tooltips-in-keyboard-grabbing-mode.patch new file mode 100644 index 00000000..7724d1be --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-Disable-tooltips-in-keyboard-grabbing-mode.patch @@ -0,0 +1,47 @@ +From 1590b664d88be8386a4664c2994b685187d1eb25 Mon Sep 17 00:00:00 2001 +From: Damien Goutte-Gattat +Date: Thu, 3 Aug 2017 22:56:49 +0200 +Subject: [PATCH 1/6] gtk: Disable tooltips in keyboard-grabbing mode. + +* gtk+-2:/pinentry-gtk-2.c (show_hide_button): Do not show the +tooltip if we attempt to grab the keyboard. +(create_window): Likewise. +-- + +For unclear reasons, those tooltips may interfere with grabbing +under some tiling window managers. + +GnuPG-bug-id: 3297 +Signed-off-by: Damien Goutte-Gattat +--- + gtk+-2/pinentry-gtk-2.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/gtk+-2/pinentry-gtk-2.c b/gtk+-2/pinentry-gtk-2.c +index d467ec5..f17a702 100644 +--- a/gtk+-2/pinentry-gtk-2.c ++++ b/gtk+-2/pinentry-gtk-2.c +@@ -516,7 +516,10 @@ show_hide_button_toggled (GtkWidget *widget, gpointer data) + } + + gtk_label_set_markup (GTK_LABEL(label), text); +- gtk_widget_set_tooltip_text (GTK_WIDGET(button), tooltip); ++ if (!pinentry->grab) ++ { ++ gtk_widget_set_tooltip_text (GTK_WIDGET(button), tooltip); ++ } + g_free (tooltip); + } + +@@ -736,7 +739,7 @@ create_window (pinentry_t ctx) + gtk_progress_bar_set_text (GTK_PROGRESS_BAR (qualitybar), + QUALITYBAR_EMPTY_TEXT); + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (qualitybar), 0.0); +- if (pinentry->quality_bar_tt) ++ if (pinentry->quality_bar_tt && !pinentry->grab) + { + #if !GTK_CHECK_VERSION (2, 12, 0) + gtk_tooltips_set_tip (GTK_TOOLTIPS (tooltips), qualitybar, +-- +2.13.6 + diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-build.patch b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-build.patch new file mode 100644 index 00000000..e367b856 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-build.patch @@ -0,0 +1,218 @@ +From c5c7bee68730c9f66a27f9bb0d023480623a2bfb Mon Sep 17 00:00:00 2001 +From: Werner Koch +Date: Thu, 1 Dec 2016 09:10:08 +0100 +Subject: [PATCH] Fix linkage problem in tty and emacs pinentries. + +* emacs/pinentry-emacs.c (curses_cmd_handler): Remove var. +* tty/pinentry-tty.c (curses_cmd_handler): Remove var. +* pinentry/pinentry.c (flavor_flag): New local var. +(pinentry_set_flavor_flag): New function. +(cmd_getinfo): Use FLAVOR_FLAG for the "flavor" sub-command. +* gnome3/pinentry-gnome3.c (main): Call pinentry_set_flavor_flag. +* gtk+-2/pinentry-gtk-2.c (main): Ditto. +* pinentry/pinentry-emacs.c (initial_emacs_cmd_handler): Ditto. +* qt/main.cpp (main): Ditto. +-- + +Fixes-commit: e4e3a9cc88704dcffac660d0b92fd1ed8abecc11 +Fixes-commit: d126036671e7dd631babc118cb4113f723f15748 +Signed-off-by: Werner Koch +--- + emacs/pinentry-emacs.c | 4 ---- + gnome3/pinentry-gnome3.c | 3 +++ + gtk+-2/pinentry-gtk-2.c | 10 ++++++++-- + pinentry/pinentry-emacs.c | 5 ++++- + pinentry/pinentry.c | 34 ++++++++++++++++++---------------- + pinentry/pinentry.h | 4 ++++ + qt/main.cpp | 1 + + tty/pinentry-tty.c | 3 --- + 8 files changed, 38 insertions(+), 26 deletions(-) + +diff --git a/emacs/pinentry-emacs.c b/emacs/pinentry-emacs.c +index b6b3eb8..3c39a96 100644 +--- a/emacs/pinentry-emacs.c ++++ b/emacs/pinentry-emacs.c +@@ -29,10 +29,6 @@ + + pinentry_cmd_handler_t pinentry_cmd_handler = emacs_cmd_handler; + +-/* needed to link cleanly; should never be used except for comparison +- * in pinentry/pinentry.c's cmd_getinfo(): */ +-pinentry_cmd_handler_t curses_cmd_handler = NULL; +- + + + int +diff --git a/gnome3/pinentry-gnome3.c b/gnome3/pinentry-gnome3.c +index a040f9b..d5a49d6 100644 +--- a/gnome3/pinentry-gnome3.c ++++ b/gnome3/pinentry-gnome3.c +@@ -517,18 +517,21 @@ main (int argc, char *argv[]) + fprintf (stderr, "No $DBUS_SESSION_BUS_ADDRESS found," + " falling back to curses\n"); + pinentry_cmd_handler = curses_cmd_handler; ++ pinentry_set_flavor_flag ("curses"); + } + else if (!pe_gcr_system_prompt_available ()) + { + fprintf (stderr, "No Gcr System Prompter available," + " falling back to curses\n"); + pinentry_cmd_handler = curses_cmd_handler; ++ pinentry_set_flavor_flag ("curses"); + } + else if (pe_gnome_screen_locked ()) + { + fprintf (stderr, "GNOME screensaver is locked," + " falling back to curses\n"); + pinentry_cmd_handler = curses_cmd_handler; ++ pinentry_set_flavor_flag ("curses"); + } + #endif + +diff --git a/gtk+-2/pinentry-gtk-2.c b/gtk+-2/pinentry-gtk-2.c +index 6037533..473c4aa 100644 +--- a/gtk+-2/pinentry-gtk-2.c ++++ b/gtk+-2/pinentry-gtk-2.c +@@ -938,10 +938,16 @@ main (int argc, char *argv[]) + if (pinentry_have_display (argc, argv)) + { + if (! gtk_init_check (&argc, &argv)) +- pinentry_cmd_handler = curses_cmd_handler; ++ { ++ pinentry_cmd_handler = curses_cmd_handler; ++ pinentry_set_flavor_flag ("curses"); ++ } + } + else +- pinentry_cmd_handler = curses_cmd_handler; ++ { ++ pinentry_cmd_handler = curses_cmd_handler; ++ pinentry_set_flavor_flag ("curses"); ++ } + #else + gtk_init (&argc, &argv); + #endif +diff --git a/pinentry/pinentry-emacs.c b/pinentry/pinentry-emacs.c +index df12f1b..50ba406 100644 +--- a/pinentry/pinentry-emacs.c ++++ b/pinentry/pinentry-emacs.c +@@ -644,7 +644,10 @@ initial_emacs_cmd_handler (pinentry_t pe) + if (emacs_socket < 0) + pinentry_cmd_handler = fallback_cmd_handler; + else +- pinentry_cmd_handler = emacs_cmd_handler; ++ { ++ pinentry_cmd_handler = emacs_cmd_handler; ++ pinentry_set_flavor_flag ("emacs"); ++ } + + return (* pinentry_cmd_handler) (pe); + } +diff --git a/pinentry/pinentry.c b/pinentry/pinentry.c +index 322a651..a198fb3 100644 +--- a/pinentry/pinentry.c ++++ b/pinentry/pinentry.c +@@ -67,6 +67,10 @@ static char this_pgmname[50]; + + struct pinentry pinentry; + ++ ++static const char *flavor_flag; ++ ++ + static void + pinentry_reset (int use_defaults) + { +@@ -793,6 +797,16 @@ pinentry_parse_opts (int argc, char *argv[]) + } + } + ++ ++/* Set the optional flag used with getinfo. */ ++void ++pinentry_set_flavor_flag (const char *string) ++{ ++ flavor_flag = string; ++} ++ ++ ++ + + static gpg_error_t + option_handler (assuan_context_t ctx, const char *key, const char *value) +@@ -1444,27 +1458,15 @@ cmd_getinfo (assuan_context_t ctx, char *line) + } + else if (!strcmp (line, "flavor")) + { +- const char *flags; +- + if (!strncmp (this_pgmname, "pinentry-", 9) && this_pgmname[9]) + s = this_pgmname + 9; + else + s = this_pgmname; + +- if (0) +- ; +-#ifdef INSIDE_EMACS +- else if (pinentry_cmd_handler == emacs_cmd_handler) +- flags = ":emacs"; +-#endif +-#ifdef FALLBACK_CURSES +- else if (pinentry_cmd_handler == curses_cmd_handler) +- flags = ":curses"; +-#endif +- else +- flags = ""; +- +- snprintf (buffer, sizeof buffer, "%s%s", s, flags); ++ snprintf (buffer, sizeof buffer, "%s%s%s", ++ s, ++ flavor_flag? ":":"", ++ flavor_flag? flavor_flag : ""); + buffer[sizeof buffer -1] = 0; + rc = assuan_send_data (ctx, buffer, strlen (buffer)); + } +diff --git a/pinentry/pinentry.h b/pinentry/pinentry.h +index 01fb373..45d35ad 100644 +--- a/pinentry/pinentry.h ++++ b/pinentry/pinentry.h +@@ -275,6 +275,10 @@ int pinentry_have_display (int argc, char **argv); + or version output is requested. */ + void pinentry_parse_opts (int argc, char *argv[]); + ++/* Set the optional flag used with getinfo. */ ++void pinentry_set_flavor_flag (const char *string); ++ ++ + + /* The caller must define this variable to process assuan commands. */ + extern pinentry_cmd_handler_t pinentry_cmd_handler; +diff --git a/qt/main.cpp b/qt/main.cpp +index 8284960..225c06b 100644 +--- a/qt/main.cpp ++++ b/qt/main.cpp +@@ -308,6 +308,7 @@ main(int argc, char *argv[]) + #ifdef FALLBACK_CURSES + if (!pinentry_have_display(argc, argv)) { + pinentry_cmd_handler = curses_cmd_handler; ++ pinentry_set_flavor_flag ("curses"); + } else + #endif + { +diff --git a/tty/pinentry-tty.c b/tty/pinentry-tty.c +index 3d6cd5a..a509d79 100644 +--- a/tty/pinentry-tty.c ++++ b/tty/pinentry-tty.c +@@ -556,9 +556,6 @@ tty_cmd_handler(pinentry_t pinentry) + + pinentry_cmd_handler_t pinentry_cmd_handler = tty_cmd_handler; + +-/* needed to link cleanly; should never be used except for comparison +- * in pinentry/pinentry.c's cmd_getinfo(): */ +-pinentry_cmd_handler_t curses_cmd_handler = NULL; + + + int +-- +2.8.0.rc3 + diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-gtk2-Fix-a-problem-with-fvwm.patch b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-gtk2-Fix-a-problem-with-fvwm.patch new file mode 100644 index 00000000..f7476de1 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-gtk2-Fix-a-problem-with-fvwm.patch @@ -0,0 +1,47 @@ +From b0e0bdeac5d40ca645afc9017778b39a26303523 Mon Sep 17 00:00:00 2001 +From: Werner Koch +Date: Wed, 11 Jan 2017 18:40:17 +0100 +Subject: [PATCH 01/25] gtk2: Fix a problem with fvwm + +* gtk+-2/pinentry-gtk-2.c (grab_pointer): Take care of +GDK_GRAB_ALREADY_GRABBED. +-- + +Debian-bug-id: 850708 +Co-authored-by: Vincent Lefevre +Signed-off-by: Werner Koch +--- + gtk+-2/pinentry-gtk-2.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/gtk+-2/pinentry-gtk-2.c b/gtk+-2/pinentry-gtk-2.c +index 473c4aa..e37601f 100644 +--- a/gtk+-2/pinentry-gtk-2.c ++++ b/gtk+-2/pinentry-gtk-2.c +@@ -203,7 +203,12 @@ grab_pointer (GtkWidget *win, GdkEvent *event, gpointer data) + (void)data; + + /* Change the cursor for the duration of the grab to indicate that +- something is going on. */ ++ * something is going on. The fvwm window manager grabs the pointer ++ * for a short time and thus we may end up with the already grabbed ++ * error code. Actually this error code should be used to detect a ++ * malicious grabbing application but with fvwm this renders ++ * Pinentry only unusable. Thus we try again several times also for ++ * that error code. See Debian bug 850708 for details. */ + /* XXX: It would be nice to have a key cursor, unfortunately there + is none readily available. */ + cursor = gdk_cursor_new_for_display (gtk_widget_get_display (win), +@@ -215,7 +220,8 @@ grab_pointer (GtkWidget *win, GdkEvent *event, gpointer data) + NULL /* confine to */, + cursor, + gdk_event_get_time (event)); +- while (tries++ < max_tries && err == GDK_GRAB_NOT_VIEWABLE); ++ while (tries++ < max_tries && (err == GDK_GRAB_NOT_VIEWABLE ++ || err == GDK_GRAB_ALREADY_GRABBED)); + + if (err) + { +-- +2.13.6 + diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-make-icon-work-under-Plasma-Wayland.patch b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-make-icon-work-under-Plasma-Wayland.patch new file mode 100644 index 00000000..646df196 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/files/pinentry-1.0.0-make-icon-work-under-Plasma-Wayland.patch @@ -0,0 +1,52 @@ +From 7218becac7132c2508d4e8f42c693d69c406795a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= +Date: Wed, 7 Mar 2018 15:14:22 +0100 +Subject: [PATCH] Make pinentry-qt icon work under Plasma Wayland. + +--- + qt/Makefile.am | 2 ++ + qt/main.cpp | 2 ++ + qt/org.gnupg.pinentry-qt.desktop | 5 +++++ + 3 files changed, 9 insertions(+) + create mode 100644 qt/org.gnupg.pinentry-qt.desktop + +diff --git a/qt/Makefile.am b/qt/Makefile.am +index 698005e..bbf39d1 100644 +--- a/qt/Makefile.am ++++ b/qt/Makefile.am +@@ -24,6 +24,8 @@ bin_PROGRAMS = pinentry-qt + + EXTRA_DIST = document-encrypt.png pinentry.qrc + ++desktopdir = $(datadir)/applications ++dist_desktop_DATA = org.gnupg.pinentry-qt.desktop + + if FALLBACK_CURSES + ncurses_include = $(NCURSES_INCLUDE) +diff --git a/qt/main.cpp b/qt/main.cpp +index fe88d26..b767cb4 100644 +--- a/qt/main.cpp ++++ b/qt/main.cpp +@@ -372,6 +372,8 @@ main(int argc, char *argv[]) + i = argc; + app = new QApplication(i, new_argv); + app->setWindowIcon(QIcon(QLatin1String(":/document-encrypt.png"))); ++ app->setOrganizationDomain(QStringLiteral("gnupg.org")); ++ app->setDesktopFileName(QStringLiteral("org.gnupg.pinentry-qt")); + } + + pinentry_parse_opts(argc, argv); +diff --git a/qt/org.gnupg.pinentry-qt.desktop b/qt/org.gnupg.pinentry-qt.desktop +new file mode 100644 +index 0000000..0ac89aa +--- /dev/null ++++ b/qt/org.gnupg.pinentry-qt.desktop +@@ -0,0 +1,5 @@ ++[Desktop Entry] ++Type=Application ++Name=Pinentry dialog ++Icon=document-encrypt ++NoDisplay=true +-- +2.16.1 + diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/pinentry-base-1.0.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry-base/pinentry-base-1.0.0-r2.ebuild new file mode 100644 index 00000000..96a374f1 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/pinentry-base-1.0.0-r2.ebuild @@ -0,0 +1,91 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit autotools flag-o-matic qmake-utils toolchain-funcs + +MY_PN=${PN/-base} +MY_P=${P/-base} +DESCRIPTION="Simple passphrase entry dialogs which utilize the Assuan protocol" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="mirror://gnupg/${MY_PN}/${MY_P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +IUSE="caps gtk qt5 static" + +RDEPEND=" + >=dev-libs/libgpg-error-1.17 + >=dev-libs/libassuan-2.1 + >=dev-libs/libgcrypt-1.6.3 + + sys-libs/ncurses:0= + caps? ( sys-libs/libcap ) + + static? ( >=sys-libs/ncurses-5.7-r5:0=[static-libs,-gpm] ) + app-eselect/eselect-pinentry +" + +DEPEND="${RDEPEND} + sys-devel/gettext + virtual/pkgconfig +" +S=${WORKDIR}/${MY_P} + +DOCS=( AUTHORS ChangeLog NEWS README THANKS TODO ) + +PATCHES=( + "${FILESDIR}/${MY_PN}-0.8.2-ncurses.patch" + "${FILESDIR}/${MY_P}-build.patch" + "${FILESDIR}/${MY_P}-Disable-tooltips-in-keyboard-grabbing-mode.patch" + "${FILESDIR}/${MY_P}-gtk2-Fix-a-problem-with-fvwm.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + use static && append-ldflags -static + [[ "$(gcc-major-version)" -ge 5 ]] && append-cxxflags -std=gnu++11 + + econf \ + --enable-pinentry-tty \ + --enable-pinentry-emacs \ + --disable-pinentry-gtk2 \ + --enable-pinentry-curses \ + --enable-fallback-curses \ + --disable-pinentry-qt \ + $(use_with caps libcap) \ + --disable-libsecret \ + --disable-pinentry-gnome3 +} + +src_install() { + default + rm -f "${ED}"/usr/bin/pinentry || die +} + +pkg_postinst() { + if ! has_version 'app-crypt/pinentry-base'; then + # || has_version '=2.6.9 support memory locking for unprivileged processes." + elog "The soft resource limit for memory locking specifies the limit an" + elog "unprivileged process may lock into memory. You can also use POSIX" + elog "capabilities to allow pinentry to lock memory. To do so activate the caps" + elog "USE flag and add the CAP_IPC_LOCK capability to the permitted set of" + elog "your users." + fi + + eselect pinentry update ifunset + use gtk && elog "If you want pinentry for Gtk+, please install app-crypt/pinentry-gtk." + use qt5 && elog "If you want pinentry for Qt5, please install app-crypt/pinentry-qt5." +} + +pkg_postrm() { + eselect pinentry update ifunset +} diff --git a/tests/fixtures/overlay/app-crypt/pinentry-base/pinentry-base-1.1.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry-base/pinentry-base-1.1.0-r2.ebuild new file mode 100644 index 00000000..c6362d34 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-base/pinentry-base-1.1.0-r2.ebuild @@ -0,0 +1,89 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit autotools flag-o-matic qmake-utils toolchain-funcs + +MY_PN=${PN/-base} +MY_P=${P/-base} +DESCRIPTION="Simple passphrase entry dialogs which utilize the Assuan protocol" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="mirror://gnupg/${MY_PN}/${MY_P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +IUSE="caps gtk qt5 static" + +RDEPEND=" + >=dev-libs/libgpg-error-1.17 + >=dev-libs/libassuan-2.1 + >=dev-libs/libgcrypt-1.6.3 + + sys-libs/ncurses:0= + caps? ( sys-libs/libcap ) + static? ( >=sys-libs/ncurses-5.7-r5:0=[static-libs,-gpm] ) + app-eselect/eselect-pinentry +" + +DEPEND="${RDEPEND} + sys-devel/gettext + virtual/pkgconfig +" +S=${WORKDIR}/${MY_P} + +DOCS=( AUTHORS ChangeLog NEWS README THANKS TODO ) + +PATCHES=( + "${FILESDIR}/${MY_PN}-1.0.0-make-icon-work-under-Plasma-Wayland.patch" + "${FILESDIR}/${MY_PN}-0.8.2-ncurses.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + use static && append-ldflags -static + [[ "$(gcc-major-version)" -ge 5 ]] && append-cxxflags -std=gnu++11 + + econf \ + --enable-pinentry-tty \ + --enable-pinentry-emacs \ + --disable-pinentry-fltk \ + --disable-pinentry-gtk2 \ + --enable-pinentry-curses \ + --enable-fallback-curses \ + --disable-pinentry-qt \ + $(use_with caps libcap) \ + --disable-libsecret \ + --disable-pinentry-gnome3 +} + +src_install() { + default + rm -f "${ED}"/usr/bin/pinentry || die +} + +pkg_postinst() { + if ! has_version 'app-crypt/pinentry-base'; then + # || has_version '=2.6.9 support memory locking for unprivileged processes." + elog "The soft resource limit for memory locking specifies the limit an" + elog "unprivileged process may lock into memory. You can also use POSIX" + elog "capabilities to allow pinentry to lock memory. To do so activate the caps" + elog "USE flag and add the CAP_IPC_LOCK capability to the permitted set of" + elog "your users." + fi + + eselect pinentry update ifunset + use gtk && elog "If you want pinentry for Gtk+, please install app-crypt/pinentry-gtk." + use qt5 && elog "If you want pinentry for Qt5, please install app-crypt/pinentry-qt5." +} + +pkg_postrm() { + eselect pinentry update ifunset +} diff --git a/tests/fixtures/overlay/app-crypt/pinentry-gnome/Manifest b/tests/fixtures/overlay/app-crypt/pinentry-gnome/Manifest new file mode 100644 index 00000000..e8e43f0c --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-gnome/Manifest @@ -0,0 +1,2 @@ +DIST pinentry-1.0.0.tar.bz2 436930 BLAKE2B 949be8de8504a42cd5bd6ffebe331a825db7ff3c2ccc5fc554155b7621fddf9df957aa92063eb1a06c6964826a296bf60a4cc46cf2886552e37703a62042f35a SHA512 f109236707c51871b5020ef807a551366461fafcfbe09bf8cda19d4b163a42cf622562b905ceb41429f1d648b3f3d27807538709da6a135b67f9888709eccd62 +DIST pinentry-1.1.0.tar.bz2 467702 BLAKE2B cf43555848ab0dc60756fca123aba7599ebb1bfe0458b973ed9d84479f8de9ee69ef309b518b40aa340434d64d37793cf97c94f78f99820bc5c71ecd2aac7a49 SHA512 5012672925bcb5f683358c259e55e4b87c67cf063ad52c759308933733025c33f7ce08e5b8019ffc101cbf7ef30499040ef2fd34a7611698e65e1593f80948cd diff --git a/tests/fixtures/overlay/app-crypt/pinentry-gnome/files b/tests/fixtures/overlay/app-crypt/pinentry-gnome/files new file mode 120000 index 00000000..2f64f310 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-gnome/files @@ -0,0 +1 @@ +../pinentry-base/files \ No newline at end of file diff --git a/tests/fixtures/overlay/app-crypt/pinentry-gnome/pinentry-gnome-1.0.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry-gnome/pinentry-gnome-1.0.0-r2.ebuild new file mode 100644 index 00000000..e30edfb9 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-gnome/pinentry-gnome-1.0.0-r2.ebuild @@ -0,0 +1,76 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit autotools flag-o-matic toolchain-funcs + +MY_PN=${PN/-gnome} +MY_P=${P/-gnome} +DESCRIPTION="GNOME 3 frontend for pinentry" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="mirror://gnupg/${MY_PN}/${MY_P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +IUSE="caps" + +CDEPEND=" + ~app-crypt/pinentry-base-${PV} + app-crypt/libsecret + caps? ( sys-libs/libcap ) +" + +DEPEND="${RDEPEND} + virtual/pkgconfig" + +RDEPEND=" + ${CDEPEND} + app-crypt/gcr + sys-libs/ncurses:0= +" + +S="${WORKDIR}/${MY_P}" + +PATCHES=( + "${FILESDIR}/${MY_PN}-0.8.2-ncurses.patch" + "${FILESDIR}/${MY_P}-build.patch" + "${FILESDIR}/${MY_P}-Disable-tooltips-in-keyboard-grabbing-mode.patch" + "${FILESDIR}/${MY_P}-gtk2-Fix-a-problem-with-fvwm.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + [[ "$(gcc-major-version)" -ge 5 ]] && append-cxxflags -std=gnu++11 + + econf \ + --disable-pinentry-tty \ + --disable-pinentry-emacs \ + --disable-pinentry-gtk2 \ + --disable-pinentry-curses \ + --enable-fallback-curses \ + --disable-pinentry-qt \ + $(use_with caps libcap) \ + --enable-libsecret \ + --enable-pinentry-gnome3 +} + +src_install() { + cd gnome3 || die + emake DESTDIR="${D}" install +} + +pkg_postinst() { + eselect pinentry set pinentry-gnome3 + # eselect pinentry update ifunset + +} + +pkg_postrm() { + eselect pinentry update ifunset +} diff --git a/tests/fixtures/overlay/app-crypt/pinentry-gnome/pinentry-gnome-1.1.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry-gnome/pinentry-gnome-1.1.0-r2.ebuild new file mode 100644 index 00000000..d3fada00 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-gnome/pinentry-gnome-1.1.0-r2.ebuild @@ -0,0 +1,75 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit autotools flag-o-matic toolchain-funcs + +MY_PN=${PN/-gnome} +MY_P=${P/-gnome} +DESCRIPTION="GNOME 3 frontend for pinentry" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="mirror://gnupg/${MY_PN}/${MY_P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +IUSE="caps" + +CDEPEND=" + ~app-crypt/pinentry-base-${PV} + app-crypt/libsecret + caps? ( sys-libs/libcap ) +" + +DEPEND="${RDEPEND} + virtual/pkgconfig" + +RDEPEND=" + ${CDEPEND} + app-crypt/gcr + sys-libs/ncurses:0= +" + +S="${WORKDIR}/${MY_P}" + +PATCHES=( + "${FILESDIR}/${MY_PN}-1.0.0-make-icon-work-under-Plasma-Wayland.patch" + "${FILESDIR}/${MY_PN}-0.8.2-ncurses.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + [[ "$(gcc-major-version)" -ge 5 ]] && append-cxxflags -std=gnu++11 + + econf \ + --disable-pinentry-tty \ + --disable-pinentry-emacs \ + --disable-pinentry-fltk \ + --disable-pinentry-gtk2 \ + --disable-pinentry-curses \ + --enable-fallback-curses \ + --disable-pinentry-qt \ + $(use_with caps libcap) \ + --enable-libsecret \ + --enable-pinentry-gnome3 +} + +src_install() { + cd gnome3 || die + emake DESTDIR="${D}" install +} + +pkg_postinst() { + eselect pinentry set pinentry-gnome3 + # eselect pinentry update ifunset + +} + +pkg_postrm() { + eselect pinentry update ifunset +} diff --git a/tests/fixtures/overlay/app-crypt/pinentry-gtk2/Manifest b/tests/fixtures/overlay/app-crypt/pinentry-gtk2/Manifest new file mode 100644 index 00000000..e8e43f0c --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-gtk2/Manifest @@ -0,0 +1,2 @@ +DIST pinentry-1.0.0.tar.bz2 436930 BLAKE2B 949be8de8504a42cd5bd6ffebe331a825db7ff3c2ccc5fc554155b7621fddf9df957aa92063eb1a06c6964826a296bf60a4cc46cf2886552e37703a62042f35a SHA512 f109236707c51871b5020ef807a551366461fafcfbe09bf8cda19d4b163a42cf622562b905ceb41429f1d648b3f3d27807538709da6a135b67f9888709eccd62 +DIST pinentry-1.1.0.tar.bz2 467702 BLAKE2B cf43555848ab0dc60756fca123aba7599ebb1bfe0458b973ed9d84479f8de9ee69ef309b518b40aa340434d64d37793cf97c94f78f99820bc5c71ecd2aac7a49 SHA512 5012672925bcb5f683358c259e55e4b87c67cf063ad52c759308933733025c33f7ce08e5b8019ffc101cbf7ef30499040ef2fd34a7611698e65e1593f80948cd diff --git a/tests/fixtures/overlay/app-crypt/pinentry-gtk2/files b/tests/fixtures/overlay/app-crypt/pinentry-gtk2/files new file mode 120000 index 00000000..2f64f310 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-gtk2/files @@ -0,0 +1 @@ +../pinentry-base/files \ No newline at end of file diff --git a/tests/fixtures/overlay/app-crypt/pinentry-gtk2/pinentry-gtk2-1.0.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry-gtk2/pinentry-gtk2-1.0.0-r2.ebuild new file mode 100644 index 00000000..8845b13d --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-gtk2/pinentry-gtk2-1.0.0-r2.ebuild @@ -0,0 +1,72 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit autotools flag-o-matic toolchain-funcs + +MY_PN=${PN/-gtk2} +MY_P=${P/-gtk2} +DESCRIPTION="Gtk+2 frontend for pinentry" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="mirror://gnupg/${MY_PN}/${MY_P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +IUSE="caps" + +RDEPEND=" + ~app-crypt/pinentry-base-${PV} + !app-crypt/pinentry-base[static] + caps? ( sys-libs/libcap ) + x11-libs/gtk+:2 + sys-libs/ncurses:0= +" + +DEPEND="${RDEPEND} + virtual/pkgconfig" + +S="${WORKDIR}/${MY_P}" + +PATCHES=( + "${FILESDIR}/${MY_PN}-0.8.2-ncurses.patch" + "${FILESDIR}/${MY_P}-build.patch" + "${FILESDIR}/${MY_P}-Disable-tooltips-in-keyboard-grabbing-mode.patch" + "${FILESDIR}/${MY_P}-gtk2-Fix-a-problem-with-fvwm.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + [[ "$(gcc-major-version)" -ge 5 ]] && append-cxxflags -std=gnu++11 + + econf \ + --disable-pinentry-tty \ + --disable-pinentry-emacs \ + --enable-pinentry-gtk2 \ + --disable-pinentry-curses \ + --enable-fallback-curses \ + --disable-pinentry-qt \ + $(use_with caps libcap) \ + --disable-libsecret \ + --disable-pinentry-gnome3 +} + +src_install() { + cd gtk+-2 || die + emake DESTDIR="${D}" install +} + +pkg_postinst() { + eselect pinentry set pinentry-gtk-2 + # eselect pinentry update ifunset + +} + +pkg_postrm() { + eselect pinentry update ifunset +} diff --git a/tests/fixtures/overlay/app-crypt/pinentry-gtk2/pinentry-gtk2-1.1.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry-gtk2/pinentry-gtk2-1.1.0-r2.ebuild new file mode 100644 index 00000000..3e41f15a --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-gtk2/pinentry-gtk2-1.1.0-r2.ebuild @@ -0,0 +1,71 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit autotools flag-o-matic toolchain-funcs + +MY_PN=${PN/-gtk2} +MY_P=${P/-gtk2} +DESCRIPTION="Gtk+2 frontend for pinentry" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="mirror://gnupg/${MY_PN}/${MY_P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +IUSE="caps" + +RDEPEND=" + ~app-crypt/pinentry-base-${PV} + !app-crypt/pinentry-base[static] + caps? ( sys-libs/libcap ) + x11-libs/gtk+:2 + sys-libs/ncurses:0= +" + +DEPEND="${RDEPEND} + virtual/pkgconfig" + +S="${WORKDIR}/${MY_P}" + +PATCHES=( + "${FILESDIR}/${MY_PN}-1.0.0-make-icon-work-under-Plasma-Wayland.patch" + "${FILESDIR}/${MY_PN}-0.8.2-ncurses.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + [[ "$(gcc-major-version)" -ge 5 ]] && append-cxxflags -std=gnu++11 + + econf \ + --disable-pinentry-tty \ + --disable-pinentry-emacs \ + --disable-pinentry-fltk \ + --enable-pinentry-gtk2 \ + --disable-pinentry-curses \ + --enable-fallback-curses \ + --disable-pinentry-qt \ + $(use_with caps libcap) \ + --disable-libsecret \ + --disable-pinentry-gnome3 +} + +src_install() { + cd gtk+-2 || die + emake DESTDIR="${D}" install +} + +pkg_postinst() { + eselect pinentry set pinentry-gtk-2 + # eselect pinentry update ifunset + +} + +pkg_postrm() { + eselect pinentry update ifunset +} diff --git a/tests/fixtures/overlay/app-crypt/pinentry-qt5/Manifest b/tests/fixtures/overlay/app-crypt/pinentry-qt5/Manifest new file mode 100644 index 00000000..e8e43f0c --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-qt5/Manifest @@ -0,0 +1,2 @@ +DIST pinentry-1.0.0.tar.bz2 436930 BLAKE2B 949be8de8504a42cd5bd6ffebe331a825db7ff3c2ccc5fc554155b7621fddf9df957aa92063eb1a06c6964826a296bf60a4cc46cf2886552e37703a62042f35a SHA512 f109236707c51871b5020ef807a551366461fafcfbe09bf8cda19d4b163a42cf622562b905ceb41429f1d648b3f3d27807538709da6a135b67f9888709eccd62 +DIST pinentry-1.1.0.tar.bz2 467702 BLAKE2B cf43555848ab0dc60756fca123aba7599ebb1bfe0458b973ed9d84479f8de9ee69ef309b518b40aa340434d64d37793cf97c94f78f99820bc5c71ecd2aac7a49 SHA512 5012672925bcb5f683358c259e55e4b87c67cf063ad52c759308933733025c33f7ce08e5b8019ffc101cbf7ef30499040ef2fd34a7611698e65e1593f80948cd diff --git a/tests/fixtures/overlay/app-crypt/pinentry-qt5/files b/tests/fixtures/overlay/app-crypt/pinentry-qt5/files new file mode 120000 index 00000000..2f64f310 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-qt5/files @@ -0,0 +1 @@ +../pinentry-base/files \ No newline at end of file diff --git a/tests/fixtures/overlay/app-crypt/pinentry-qt5/pinentry-qt5-1.0.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry-qt5/pinentry-qt5-1.0.0-r2.ebuild new file mode 100644 index 00000000..c903dcc2 --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-qt5/pinentry-qt5-1.0.0-r2.ebuild @@ -0,0 +1,80 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit autotools flag-o-matic qmake-utils toolchain-funcs + +MY_PN=${PN/-qt5} +MY_P=${P/-qt5} +DESCRIPTION="Qt5 frontend for pinentry" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="mirror://gnupg/${MY_PN}/${MY_P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +IUSE="caps" + +RDEPEND=" + ~app-crypt/pinentry-base-${PV} + !app-crypt/pinentry-base[static] + !app-crypt/pinentry-qt4 + caps? ( sys-libs/libcap ) + dev-qt/qtcore:5 + dev-qt/qtgui:5 + dev-qt/qtwidgets:5 + sys-libs/ncurses:0= +" +DEPEND="${RDEPEND} + virtual/pkgconfig +" + +S=${WORKDIR}/${MY_P} + +PATCHES=( + "${FILESDIR}/${MY_PN}-0.8.2-ncurses.patch" + "${FILESDIR}/${MY_P}-build.patch" + "${FILESDIR}/${MY_P}-Disable-tooltips-in-keyboard-grabbing-mode.patch" + "${FILESDIR}/${MY_P}-gtk2-Fix-a-problem-with-fvwm.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + [[ "$(gcc-major-version)" -ge 5 ]] && append-cxxflags -std=gnu++11 + + export QTLIB="$(qt5_get_libdir)" + + econf \ + --disable-pinentry-tty \ + --disable-pinentry-emacs \ + --disable-pinentry-gtk2 \ + --disable-pinentry-curses \ + --enable-fallback-curses \ + $(use_with caps libcap) \ + --disable-libsecret \ + --disable-pinentry-gnome3 \ + --enable-pinentry-qt \ + MOC="$(qt5_get_bindir)"/moc +} + +src_install() { + cd qt || die + emake DESTDIR="${D}" install + + dosym pinentry-qt /usr/bin/pinentry-qt4 +} + +pkg_postinst() { + # -qt4 is not a typo: see dosym above. + eselect pinentry set pinentry-qt4 + # eselect pinentry update ifunset +} + +pkg_postrm() { + eselect pinentry update ifunset +} diff --git a/tests/fixtures/overlay/app-crypt/pinentry-qt5/pinentry-qt5-1.1.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry-qt5/pinentry-qt5-1.1.0-r2.ebuild new file mode 100644 index 00000000..dd67726f --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry-qt5/pinentry-qt5-1.1.0-r2.ebuild @@ -0,0 +1,79 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit autotools flag-o-matic qmake-utils toolchain-funcs + +MY_PN=${PN/-qt5} +MY_P=${P/-qt5} +DESCRIPTION="Qt5 frontend for pinentry" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="mirror://gnupg/${MY_PN}/${MY_P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +IUSE="caps" + +RDEPEND=" + ~app-crypt/pinentry-base-${PV} + !app-crypt/pinentry-base[static] + !app-crypt/pinentry-qt4 + caps? ( sys-libs/libcap ) + dev-qt/qtcore:5 + dev-qt/qtgui:5 + dev-qt/qtwidgets:5 + sys-libs/ncurses:0= +" +DEPEND="${RDEPEND} + virtual/pkgconfig +" + +S=${WORKDIR}/${MY_P} + +PATCHES=( + "${FILESDIR}/${MY_PN}-1.0.0-make-icon-work-under-Plasma-Wayland.patch" + "${FILESDIR}/${MY_PN}-0.8.2-ncurses.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + [[ "$(gcc-major-version)" -ge 5 ]] && append-cxxflags -std=gnu++11 + + export QTLIB="$(qt5_get_libdir)" + + econf \ + --disable-pinentry-tty \ + --disable-pinentry-emacs \ + --disable-pinentry-fltk \ + --disable-pinentry-gtk2 \ + --disable-pinentry-curses \ + --enable-fallback-curses \ + $(use_with caps libcap) \ + --disable-libsecret \ + --disable-pinentry-gnome3 \ + --enable-pinentry-qt \ + MOC="$(qt5_get_bindir)"/moc +} + +src_install() { + cd qt || die + emake DESTDIR="${D}" install + + dosym pinentry-qt /usr/bin/pinentry-qt4 +} + +pkg_postinst() { + # -qt4 is not a typo: see dosym above. + eselect pinentry set pinentry-qt4 + # eselect pinentry update ifunset +} + +pkg_postrm() { + eselect pinentry update ifunset +} diff --git a/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.0.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.0.0-r2.ebuild new file mode 100644 index 00000000..3b628e7e --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.0.0-r2.ebuild @@ -0,0 +1,30 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +DESCRIPTION="Simple passphrase entry dialogs which utilize the Assuan protocol (meta package)" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +# some use flags are fake, used to mimic portage ebuild USE flags +IUSE="caps emacs gnome-keyring gtk ncurses qt5 static" + +RDEPEND=" + ~app-crypt/pinentry-base-${PV} + caps? ( ~app-crypt/pinentry-base-${PV}[caps] ) + gnome-keyring? ( ~app-crypt/pinentry-gnome-${PV} ) + gtk? ( ~app-crypt/pinentry-gtk2-${PV} ) + qt5? ( ~app-crypt/pinentry-qt5-${PV} ) + static? ( ~app-crypt/pinentry-base-${PV}[static] )" +DEPEND="" + +REQUIRED_USE=" + || ( ncurses gtk qt5 ) + gtk? ( !static ) + qt5? ( !static ) + static? ( ncurses ) +" diff --git a/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.0.0-r2.ebuild.sh b/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.0.0-r2.ebuild.sh new file mode 100644 index 00000000..a9917cde --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.0.0-r2.ebuild.sh @@ -0,0 +1,818 @@ +#!/bin/bash +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# Prevent aliases from causing portage to act inappropriately. +# Make sure it's before everything so we don't mess aliases that follow. + +# Make sure this isn't exported to scripts we execute. +unset BASH_COMPAT +declare -F ___in_portage_iuse >/dev/null && export -n -f ___in_portage_iuse + +source "${PORTAGE_BIN_PATH}/isolated-functions.sh" || exit 1 + +# Set up the bash version compatibility level. This does not disable +# features when running with a newer version, but makes it so that when +# bash changes behavior in an incompatible way, the older behavior is +# used instead. +__check_bash_version() { + # Figure out which min version of bash we require. + local maj min + if ___eapi_bash_3_2 ; then + maj=3 min=2 + elif ___eapi_bash_4_2 ; then + maj=4 min=2 + else + return + fi + + # Make sure the active bash is sane. + if [[ ${BASH_VERSINFO[0]} -lt ${maj} ]] || + [[ ${BASH_VERSINFO[0]} -eq ${maj} && ${BASH_VERSINFO[1]} -lt ${min} ]] ; then + die ">=bash-${maj}.${min} is required" + fi + + # Set the compat level in case things change with newer ones. We must not + # export this into the env otherwise we might break other shell scripts we + # execute (e.g. ones in /usr/bin). + BASH_COMPAT="${maj}.${min}" + + # The variable above is new to bash-4.3. For older versions, we have to use + # a compat knob. Further, the compat knob only exists with older versions + # (e.g. bash-4.3 has compat42 but not compat43). This means we only need to + # turn the knob with older EAPIs, and only when running newer bash versions: + # there is no bash-3.3 (it went 3.2 to 4.0), and when requiring bash-4.2, the + # var works with bash-4.3+, and you don't need to set compat to 4.2 when you + # are already running 4.2. + if ___eapi_bash_3_2 && [[ ${BASH_VERSINFO[0]} -gt 3 ]] ; then + shopt -s compat32 + fi +} +__check_bash_version + +if [[ $EBUILD_PHASE != depend ]] ; then + source "${PORTAGE_BIN_PATH}/phase-functions.sh" || die + source "${PORTAGE_BIN_PATH}/save-ebuild-env.sh" || die + source "${PORTAGE_BIN_PATH}/phase-helpers.sh" || die + source "${PORTAGE_BIN_PATH}/bashrc-functions.sh" || die +else + # These dummy functions are for things that are likely to be called + # in global scope, even though they are completely useless during + # the "depend" phase. + funcs="diropts docompress dostrip exeopts get_KV insopts + KV_major KV_micro KV_minor KV_to_int + libopts register_die_hook register_success_hook + __strip_duplicate_slashes + use useq usev use_with use_enable" + ___eapi_has_usex && funcs+=" usex" + ___eapi_has_in_iuse && funcs+=" in_iuse" + ___eapi_has_get_libdir && funcs+=" get_libdir" + # These functions die because calls to them during the "depend" phase + # are considered to be severe QA violations. + funcs+=" best_version has_version portageq" + ___eapi_has_master_repositories && funcs+=" master_repositories" + ___eapi_has_repository_path && funcs+=" repository_path" + ___eapi_has_available_eclasses && funcs+=" available_eclasses" + ___eapi_has_eclass_path && funcs+=" eclass_path" + ___eapi_has_license_path && funcs+=" license_path" + for x in ${funcs} ; do + eval "${x}() { die \"\${FUNCNAME}() calls are not allowed in global scope\"; }" + done + unset funcs x + + # prevent the shell from finding external executables + # note: we can't use empty because it implies current directory + _PORTAGE_ORIG_PATH=${PATH} + export PATH=/dev/null + command_not_found_handle() { + die "External commands disallowed while sourcing ebuild: ${*}" + } +fi + +# Don't use sandbox's BASH_ENV for new shells because it does +# 'source /etc/profile' which can interfere with the build +# environment by modifying our PATH. +unset BASH_ENV + +# This is just a temporary workaround for portage-9999 users since +# earlier portage versions do not detect a version change in this case +# (9999 to 9999) and therefore they try execute an incompatible version of +# ebuild.sh during the upgrade. +export PORTAGE_BZIP2_COMMAND=${PORTAGE_BZIP2_COMMAND:-bzip2} + +# These two functions wrap sourcing and calling respectively. At present they +# perform a qa check to make sure eclasses and ebuilds and profiles don't mess +# with shell opts (shopts). Ebuilds/eclasses changing shopts should reset them +# when they are done. + +__qa_source() { + local shopts=$(shopt) OLDIFS="$IFS" + local retval + source "$@" + retval=$? + set +e + [[ $shopts != $(shopt) ]] && + eqawarn "QA Notice: Global shell options changed and were not restored while sourcing '$*'" + [[ "$IFS" != "$OLDIFS" ]] && + eqawarn "QA Notice: Global IFS changed and was not restored while sourcing '$*'" + return $retval +} + +__qa_call() { + local shopts=$(shopt) OLDIFS="$IFS" + local retval + "$@" + retval=$? + set +e + [[ $shopts != $(shopt) ]] && + eqawarn "QA Notice: Global shell options changed and were not restored while calling '$*'" + [[ "$IFS" != "$OLDIFS" ]] && + eqawarn "QA Notice: Global IFS changed and was not restored while calling '$*'" + return $retval +} + +EBUILD_SH_ARGS="$*" + +shift $# + +# Unset some variables that break things. +unset GZIP BZIP BZIP2 CDPATH GREP_OPTIONS GREP_COLOR GLOBIGNORE +if ___eapi_has_ENV_UNSET; then + for x in ${ENV_UNSET}; do + unset "${x}" + done + unset x +fi + +[[ $PORTAGE_QUIET != "" ]] && export PORTAGE_QUIET + +# sandbox support functions; defined prior to profile.bashrc srcing, since the profile might need to add a default exception (/usr/lib64/conftest fex) +__sb_append_var() { + local _v=$1 ; shift + local var="SANDBOX_${_v}" + [[ -z $1 || -n $2 ]] && die "Usage: add$(LC_ALL=C tr "[:upper:]" "[:lower:]" <<< "${_v}") " + export ${var}="${!var:+${!var}:}$1" +} +# bash-4 version: +# local var="SANDBOX_${1^^}" +# addread() { __sb_append_var ${0#add} "$@" ; } +addread() { __sb_append_var READ "$@" ; } +addwrite() { __sb_append_var WRITE "$@" ; } +adddeny() { __sb_append_var DENY "$@" ; } +addpredict() { __sb_append_var PREDICT "$@" ; } + +addwrite "${PORTAGE_TMPDIR}/portage" +addread "/:${PORTAGE_TMPDIR}/portage" +[[ -n ${PORTAGE_GPG_DIR} ]] && addpredict "${PORTAGE_GPG_DIR}" + +# Avoid sandbox violations in temporary directories. +if [[ -w $T ]] ; then + export TEMP=$T + export TMP=$T + export TMPDIR=$T +elif [[ $SANDBOX_ON = 1 ]] ; then + for x in TEMP TMP TMPDIR ; do + [[ -n ${!x} ]] && addwrite "${!x}" + done + unset x +fi + +# the sandbox is disabled by default except when overridden in the relevant stages +export SANDBOX_ON=0 + +# Ensure that $PWD is sane whenever possible, to protect against +# exploitation of insecure search path for python -c in ebuilds. +# See bug #239560, bug #469338, and bug #595028. +if [[ -d ${HOME} ]]; then + # Use portage's temporary HOME directory if available. + cd "${HOME}" || die +else + cd "${PORTAGE_PYM_PATH}" || \ + die "PORTAGE_PYM_PATH does not exist: '${PORTAGE_PYM_PATH}'" +fi + +#if no perms are specified, dirs/files will have decent defaults +#(not secretive, but not stupid) +umask 022 + +# debug-print() gets called from many places with verbose status information useful +# for tracking down problems. The output is in $T/eclass-debug.log. +# You can set ECLASS_DEBUG_OUTPUT to redirect the output somewhere else as well. +# The special "on" setting echoes the information, mixing it with the rest of the +# emerge output. +# You can override the setting by exporting a new one from the console, or you can +# set a new default in make.*. Here the default is "" or unset. + +# in the future might use e* from /etc/init.d/functions.sh if i feel like it +debug-print() { + # if $T isn't defined, we're in dep calculation mode and + # shouldn't do anything + [[ $EBUILD_PHASE = depend || ! -d ${T} || ${#} -eq 0 ]] && return 0 + + if [[ ${ECLASS_DEBUG_OUTPUT} == on ]]; then + printf 'debug: %s\n' "${@}" >&2 + elif [[ -n ${ECLASS_DEBUG_OUTPUT} ]]; then + printf 'debug: %s\n' "${@}" >> "${ECLASS_DEBUG_OUTPUT}" + fi + + if [[ -w $T ]] ; then + # default target + printf '%s\n' "${@}" >> "${T}/eclass-debug.log" + # let the portage user own/write to this file + chgrp "${PORTAGE_GRPNAME:-portage}" "${T}/eclass-debug.log" + chmod g+w "${T}/eclass-debug.log" + fi +} + +# The following 2 functions are debug-print() wrappers + +debug-print-function() { + debug-print "${1}: entering function, parameters: ${*:2}" +} + +debug-print-section() { + debug-print "now in section ${*}" +} + +# Sources all eclasses in parameters +declare -ix ECLASS_DEPTH=0 +inherit() { + ECLASS_DEPTH=$(($ECLASS_DEPTH + 1)) + if [[ ${ECLASS_DEPTH} -gt 1 ]]; then + debug-print "*** Multiple Inheritence (Level: ${ECLASS_DEPTH})" + + # Since ECLASS_DEPTH > 1, the following variables are locals from the + # previous inherit call in the call stack. + if [[ -n ${ECLASS} && -n ${!__export_funcs_var} ]] ; then + eqawarn "QA Notice: EXPORT_FUNCTIONS is called before inherit in ${ECLASS}.eclass." + eqawarn "For compatibility with <=portage-2.1.6.7, only call EXPORT_FUNCTIONS" + eqawarn "after inherit(s)." + fi + fi + + local -x ECLASS + local __export_funcs_var + local repo_location + local location + local potential_location + local x + local B_IUSE + local B_REQUIRED_USE + local B_DEPEND + local B_RDEPEND + local B_PDEPEND + local B_HDEPEND + local B_BDEPEND + while [ "$1" ]; do + location="" + potential_location="" + + ECLASS="$1" + __export_funcs_var=__export_functions_$ECLASS_DEPTH + unset $__export_funcs_var + + if [[ ${EBUILD_PHASE} != depend && ${EBUILD_PHASE} != nofetch && \ + ${EBUILD_PHASE} != *rm && ${EMERGE_FROM} != "binary" && \ + -z ${_IN_INSTALL_QA_CHECK} ]] + then + # This is disabled in the *rm phases because they frequently give + # false alarms due to INHERITED in /var/db/pkg being outdated + # in comparison to the eclasses from the ebuild repository. It's + # disabled for nofetch, since that can be called by repoman and + # that triggers bug #407449 due to repoman not exporting + # non-essential variables such as INHERITED. + if ! has $ECLASS $INHERITED $__INHERITED_QA_CACHE ; then + eqawarn "QA Notice: ECLASS '$ECLASS' inherited illegally in $CATEGORY/$PF $EBUILD_PHASE" + fi + fi + + for repo_location in "${PORTAGE_ECLASS_LOCATIONS[@]}"; do + potential_location="${repo_location}/eclass/${1}.eclass" + if [[ -f ${potential_location} ]]; then + location="${potential_location}" + debug-print " eclass exists: ${location}" + break + fi + done + debug-print "inherit: $1 -> $location" + [[ -z ${location} ]] && die "${1}.eclass could not be found by inherit()" + + # inherits in QA checks can't handle metadata assignments + if [[ -z ${_IN_INSTALL_QA_CHECK} ]]; then + #We need to back up the values of *DEPEND to B_*DEPEND + #(if set).. and then restore them after the inherit call. + + #turn off glob expansion + set -f + + # Retain the old data and restore it later. + unset B_IUSE B_REQUIRED_USE B_DEPEND B_RDEPEND B_PDEPEND + unset B_HDEPEND B_BDEPEND + [ "${IUSE+set}" = set ] && B_IUSE="${IUSE}" + [ "${REQUIRED_USE+set}" = set ] && B_REQUIRED_USE="${REQUIRED_USE}" + [ "${DEPEND+set}" = set ] && B_DEPEND="${DEPEND}" + [ "${RDEPEND+set}" = set ] && B_RDEPEND="${RDEPEND}" + [ "${PDEPEND+set}" = set ] && B_PDEPEND="${PDEPEND}" + [ "${HDEPEND+set}" = set ] && B_HDEPEND="${HDEPEND}" + [ "${BDEPEND+set}" = set ] && B_BDEPEND="${BDEPEND}" + unset IUSE REQUIRED_USE DEPEND RDEPEND PDEPEND HDEPEND + unset BDEPEND + #turn on glob expansion + set +f + fi + + __qa_source "$location" || die "died sourcing $location in inherit()" + + if [[ -z ${_IN_INSTALL_QA_CHECK} ]]; then + #turn off glob expansion + set -f + + # If each var has a value, append it to the global variable E_* to + # be applied after everything is finished. New incremental behavior. + [ "${IUSE+set}" = set ] && E_IUSE+="${E_IUSE:+ }${IUSE}" + [ "${REQUIRED_USE+set}" = set ] && E_REQUIRED_USE+="${E_REQUIRED_USE:+ }${REQUIRED_USE}" + [ "${DEPEND+set}" = set ] && E_DEPEND+="${E_DEPEND:+ }${DEPEND}" + [ "${RDEPEND+set}" = set ] && E_RDEPEND+="${E_RDEPEND:+ }${RDEPEND}" + [ "${PDEPEND+set}" = set ] && E_PDEPEND+="${E_PDEPEND:+ }${PDEPEND}" + [ "${HDEPEND+set}" = set ] && E_HDEPEND+="${E_HDEPEND:+ }${HDEPEND}" + [ "${BDEPEND+set}" = set ] && E_BDEPEND+="${E_BDEPEND:+ }${BDEPEND}" + + [ "${B_IUSE+set}" = set ] && IUSE="${B_IUSE}" + [ "${B_IUSE+set}" = set ] || unset IUSE + + [ "${B_REQUIRED_USE+set}" = set ] && REQUIRED_USE="${B_REQUIRED_USE}" + [ "${B_REQUIRED_USE+set}" = set ] || unset REQUIRED_USE + + [ "${B_DEPEND+set}" = set ] && DEPEND="${B_DEPEND}" + [ "${B_DEPEND+set}" = set ] || unset DEPEND + + [ "${B_RDEPEND+set}" = set ] && RDEPEND="${B_RDEPEND}" + [ "${B_RDEPEND+set}" = set ] || unset RDEPEND + + [ "${B_PDEPEND+set}" = set ] && PDEPEND="${B_PDEPEND}" + [ "${B_PDEPEND+set}" = set ] || unset PDEPEND + + [ "${B_HDEPEND+set}" = set ] && HDEPEND="${B_HDEPEND}" + [ "${B_HDEPEND+set}" = set ] || unset HDEPEND + + [ "${B_BDEPEND+set}" = set ] && BDEPEND="${B_BDEPEND}" + [ "${B_BDEPEND+set}" = set ] || unset BDEPEND + + #turn on glob expansion + set +f + + if [[ -n ${!__export_funcs_var} ]] ; then + for x in ${!__export_funcs_var} ; do + debug-print "EXPORT_FUNCTIONS: $x -> ${ECLASS}_$x" + declare -F "${ECLASS}_$x" >/dev/null || \ + die "EXPORT_FUNCTIONS: ${ECLASS}_$x is not defined" + eval "$x() { ${ECLASS}_$x \"\$@\" ; }" > /dev/null + done + fi + unset $__export_funcs_var + + has $1 $INHERITED || export INHERITED="$INHERITED $1" + fi + + shift + done + ((--ECLASS_DEPTH)) # Returns 1 when ECLASS_DEPTH reaches 0. + return 0 +} + +# Exports stub functions that call the eclass's functions, thereby making them default. +# For example, if ECLASS="base" and you call "EXPORT_FUNCTIONS src_unpack", the following +# code will be eval'd: +# src_unpack() { base_src_unpack; } +EXPORT_FUNCTIONS() { + if [ -z "$ECLASS" ]; then + die "EXPORT_FUNCTIONS without a defined ECLASS" + fi + eval $__export_funcs_var+=\" $*\" +} + +PORTAGE_BASHRCS_SOURCED=0 + +# @FUNCTION: __source_all_bashrcs +# @DESCRIPTION: +# Source a relevant bashrc files and perform other miscellaneous +# environment initialization when appropriate. +# +# If EAPI is set then define functions provided by the current EAPI: +# +# * default_* aliases for the current EAPI phase functions +# * A "default" function which is an alias for the default phase +# function for the current phase. +# +__source_all_bashrcs() { + [[ $PORTAGE_BASHRCS_SOURCED = 1 ]] && return 0 + PORTAGE_BASHRCS_SOURCED=1 + local x + + local OCC="${CC}" OCXX="${CXX}" + + if [[ $EBUILD_PHASE != depend ]] ; then + # source the existing profile.bashrcs. + while read -r x; do + __try_source "${x}" + done <<<"${PORTAGE_BASHRC_FILES}" + fi + + # The user's bashrc is the ONLY non-portage bit of code + # that can change shopts without a QA violation. + __try_source --no-qa "${PORTAGE_BASHRC}" + + if [[ $EBUILD_PHASE != depend ]] ; then + __source_env_files --no-qa "${PM_EBUILD_HOOK_DIR}" + fi + + [ ! -z "${OCC}" ] && export CC="${OCC}" + [ ! -z "${OCXX}" ] && export CXX="${OCXX}" +} + +# @FUNCTION: __source_env_files +# @USAGE: [--no-qa] +# @DESCRIPTION: +# Source the files relevant to the current package from the given path. +# If --no-qa is specified, use source instead of __qa_source to source the +# files. +__source_env_files() { + local argument=() + if [[ $1 == --no-qa ]]; then + argument=( --no-qa ) + shift + fi + for x in "${1}"/${CATEGORY}/{${PN},${PN}:${SLOT%/*},${P},${PF}}; do + __try_source "${argument[@]}" "${x}" + done +} + +# @FUNCTION: __try_source +# @USAGE: [--no-qa] +# @DESCRIPTION: +# If the path given as argument exists, source the file while preserving +# $-. +# If --no-qa is specified, source the file with source instead of __qa_source. +__try_source() { + local qa=true + if [[ $1 == --no-qa ]]; then + qa=false + shift + fi + if [[ -r $1 && -f $1 ]]; then + local debug_on=false + if [[ "$PORTAGE_DEBUG" == "1" ]] && [[ "${-/x/}" == "$-" ]]; then + debug_on=true + fi + $debug_on && set -x + # If $- contains x, then tracing has already been enabled + # elsewhere for some reason. We preserve it's state so as + # not to interfere. + if ! ${qa} ; then + source "${1}" + else + __qa_source "${1}" + fi + $debug_on && set +x + fi +} +# === === === === === === === === === === === === === === === === === === +# === === === === === functions end, main part begins === === === === === +# === === === === === === === === === === === === === === === === === === + +export SANDBOX_ON="1" +export S=${WORKDIR}/${P} + +# Turn of extended glob matching so that g++ doesn't get incorrectly matched. +shopt -u extglob + +if [[ ${EBUILD_PHASE} == depend ]] ; then + QA_INTERCEPTORS="awk bash cc egrep equery fgrep g++ + gawk gcc grep javac java-config nawk perl + pkg-config python python-config sed" +elif [[ ${EBUILD_PHASE} == clean* ]] ; then + unset QA_INTERCEPTORS +else + QA_INTERCEPTORS="autoconf automake aclocal libtoolize" +fi +# level the QA interceptors if we're in depend +if [[ -n ${QA_INTERCEPTORS} ]] ; then + for BIN in ${QA_INTERCEPTORS}; do + BIN_PATH=$(type -Pf ${BIN}) + if [ "$?" != "0" ]; then + BODY="echo \"*** missing command: ${BIN}\" >&2; return 127" + else + BODY="${BIN_PATH} \"\$@\"; return \$?" + fi + if [[ ${EBUILD_PHASE} == depend ]] ; then + FUNC_SRC="${BIN}() { + if [ \$ECLASS_DEPTH -gt 0 ]; then + eqawarn \"QA Notice: '${BIN}' called in global scope: eclass \${ECLASS}\" + else + eqawarn \"QA Notice: '${BIN}' called in global scope: \${CATEGORY}/\${PF}\" + fi + ${BODY} + }" + elif has ${BIN} autoconf automake aclocal libtoolize ; then + FUNC_SRC="${BIN}() { + if ! has \${FUNCNAME[1]} eautoreconf eaclocal _elibtoolize \\ + eautoheader eautoconf eautomake autotools_run_tool \\ + autotools_check_macro autotools_get_subdirs \\ + autotools_get_auxdir ; then + eqawarn \"QA Notice: '${BIN}' called by \${FUNCNAME[1]}: \${CATEGORY}/\${PF}\" + eqawarn \"Use autotools.eclass instead of calling '${BIN}' directly.\" + fi + ${BODY} + }" + else + FUNC_SRC="${BIN}() { + eqawarn \"QA Notice: '${BIN}' called by \${FUNCNAME[1]}: \${CATEGORY}/\${PF}\" + ${BODY} + }" + fi + eval "$FUNC_SRC" || echo "error creating QA interceptor ${BIN}" >&2 + done + unset BIN_PATH BIN BODY FUNC_SRC +fi + +# Subshell/helper die support (must export for the die helper). +export EBUILD_MASTER_PID=${BASHPID:-$(__bashpid)} +trap 'exit 1' SIGTERM + +if ! has "$EBUILD_PHASE" clean cleanrm depend && \ + ! [[ $EMERGE_FROM = ebuild && $EBUILD_PHASE = setup ]] && \ + [ -f "${T}"/environment ] ; then + # The environment may have been extracted from environment.bz2 or + # may have come from another version of ebuild.sh or something. + # In any case, preprocess it to prevent any potential interference. + # NOTE: export ${FOO}=... requires quoting, unlike normal exports + __preprocess_ebuild_env || \ + die "error processing environment" + # Colon separated SANDBOX_* variables need to be cumulative. + for x in SANDBOX_DENY SANDBOX_READ SANDBOX_PREDICT SANDBOX_WRITE ; do + export PORTAGE_${x}="${!x}" + done + PORTAGE_SANDBOX_ON=${SANDBOX_ON} + export SANDBOX_ON=1 + source "${T}"/environment || \ + die "error sourcing environment" + # We have to temporarily disable sandbox since the + # SANDBOX_{DENY,READ,PREDICT,WRITE} values we've just loaded + # may be unusable (triggering in spurious sandbox violations) + # until we've merged them with our current values. + export SANDBOX_ON=0 + for x in SANDBOX_DENY SANDBOX_PREDICT SANDBOX_READ SANDBOX_WRITE ; do + y="PORTAGE_${x}" + if [ -z "${!x}" ] ; then + export ${x}="${!y}" + elif [ -n "${!y}" ] && [ "${!y}" != "${!x}" ] ; then + # filter out dupes + export ${x}="$(printf "${!y}:${!x}" | tr ":" "\0" | \ + sort -z -u | tr "\0" ":")" + fi + export ${x}="${!x%:}" + unset PORTAGE_${x} + done + unset x y + export SANDBOX_ON=${PORTAGE_SANDBOX_ON} + unset PORTAGE_SANDBOX_ON + [[ -n $EAPI ]] || EAPI=0 +fi + +if ___eapi_enables_globstar; then + shopt -s globstar +fi + +# Convert quoted paths to array. +eval "PORTAGE_ECLASS_LOCATIONS=(${PORTAGE_ECLASS_LOCATIONS})" + +# Source the ebuild every time for FEATURES=noauto, so that ebuild +# modifications take effect immediately. +if ! has "$EBUILD_PHASE" clean cleanrm ; then + if [[ $EBUILD_PHASE = setup && $EMERGE_FROM = ebuild ]] || \ + [[ $EBUILD_PHASE = depend || ! -f $T/environment || \ + -f $PORTAGE_BUILDDIR/.ebuild_changed || \ + " ${FEATURES} " == *" noauto "* ]] ; then + # The bashrcs get an opportunity here to set aliases that will be expanded + # during sourcing of ebuilds and eclasses. + __source_all_bashrcs + + # When EBUILD_PHASE != depend, INHERITED comes pre-initialized + # from cache. In order to make INHERITED content independent of + # EBUILD_PHASE during inherit() calls, we unset INHERITED after + # we make a backup copy for QA checks. + __INHERITED_QA_CACHE=$INHERITED + + # Catch failed globbing attempts in case ebuild writer forgot to + # escape '*' or likes. + # Note: this needs to be done before unsetting EAPI. + if ___eapi_enables_failglob_in_global_scope; then + shopt -s failglob + fi + + # *DEPEND and IUSE will be set during the sourcing of the ebuild. + # In order to ensure correct interaction between ebuilds and + # eclasses, they need to be unset before this process of + # interaction begins. + unset EAPI DEPEND RDEPEND PDEPEND HDEPEND BDEPEND + unset INHERITED IUSE REQUIRED_USE ECLASS E_IUSE E_REQUIRED_USE + unset E_DEPEND E_RDEPEND E_PDEPEND E_HDEPEND E_BDEPEND + unset PROVIDES_EXCLUDE REQUIRES_EXCLUDE + + if [[ $PORTAGE_DEBUG != 1 || ${-/x/} != $- ]] ; then + source "$EBUILD" || die "error sourcing ebuild" + else + set -x + source "$EBUILD" || die "error sourcing ebuild" + set +x + fi + + if ___eapi_enables_failglob_in_global_scope; then + shopt -u failglob + fi + + if [[ "${EBUILD_PHASE}" != "depend" ]] ; then + RESTRICT=${PORTAGE_RESTRICT} + [[ -e $PORTAGE_BUILDDIR/.ebuild_changed ]] && \ + rm "$PORTAGE_BUILDDIR/.ebuild_changed" + fi + + [ "${EAPI+set}" = set ] || EAPI=0 + + # export EAPI for helpers (especially since we unset it above) + export EAPI + + if ___eapi_has_RDEPEND_DEPEND_fallback; then + export RDEPEND=${RDEPEND-${DEPEND}} + debug-print "RDEPEND: not set... Setting to: ${DEPEND}" + fi + + # add in dependency info from eclasses + IUSE+="${IUSE:+ }${E_IUSE}" + DEPEND+="${DEPEND:+ }${E_DEPEND}" + RDEPEND+="${RDEPEND:+ }${E_RDEPEND}" + PDEPEND+="${PDEPEND:+ }${E_PDEPEND}" + HDEPEND+="${HDEPEND:+ }${E_HDEPEND}" + BDEPEND+="${BDEPEND:+ }${E_BDEPEND}" + REQUIRED_USE+="${REQUIRED_USE:+ }${E_REQUIRED_USE}" + + unset ECLASS E_IUSE E_REQUIRED_USE E_DEPEND E_RDEPEND E_PDEPEND + unset E_HDEPEND E_BDEPEND __INHERITED_QA_CACHE + + # alphabetically ordered by $EBUILD_PHASE value + case ${EAPI} in + 0|1) + _valid_phases="src_compile pkg_config pkg_info src_install + pkg_nofetch pkg_postinst pkg_postrm pkg_preinst pkg_prerm + pkg_setup src_test src_unpack" + ;; + 2|3) + _valid_phases="src_compile pkg_config src_configure pkg_info + src_install pkg_nofetch pkg_postinst pkg_postrm pkg_preinst + src_prepare pkg_prerm pkg_setup src_test src_unpack" + ;; + *) + _valid_phases="src_compile pkg_config src_configure pkg_info + src_install pkg_nofetch pkg_postinst pkg_postrm pkg_preinst + src_prepare pkg_prerm pkg_pretend pkg_setup src_test src_unpack" + ;; + esac + + DEFINED_PHASES= + for _f in $_valid_phases ; do + if declare -F $_f >/dev/null ; then + _f=${_f#pkg_} + DEFINED_PHASES+=" ${_f#src_}" + fi + done + [[ -n $DEFINED_PHASES ]] || DEFINED_PHASES=- + + unset _f _valid_phases + + if [[ $EBUILD_PHASE != depend ]] ; then + + if has distcc $FEATURES ; then + [[ -n $DISTCC_LOG ]] && addwrite "${DISTCC_LOG%/*}" + fi + + if has ccache $FEATURES ; then + + if [[ -n $CCACHE_DIR ]] ; then + addread "$CCACHE_DIR" + addwrite "$CCACHE_DIR" + fi + + [[ -n $CCACHE_SIZE ]] && ccache -M $CCACHE_SIZE &> /dev/null + fi + fi + fi +fi + +if has nostrip ${FEATURES} ${RESTRICT} || has strip ${RESTRICT} +then + export DEBUGBUILD=1 +fi + +if [[ $EBUILD_PHASE = depend ]] ; then + export SANDBOX_ON="0" + set -f + + if [ -n "${dbkey}" ] ; then + if [ ! -d "${dbkey%/*}" ]; then + install -d -g ${PORTAGE_GID} -m2775 "${dbkey%/*}" + fi + # Make it group writable. 666&~002==664 + umask 002 + fi + + auxdbkeys="DEPEND RDEPEND SLOT SRC_URI RESTRICT HOMEPAGE LICENSE + DESCRIPTION KEYWORDS INHERITED IUSE REQUIRED_USE PDEPEND BDEPEND + EAPI PROPERTIES DEFINED_PHASES HDEPEND UNUSED_04 + UNUSED_03 UNUSED_02 UNUSED_01" + + if ! ___eapi_has_HDEPEND; then + unset HDEPEND + fi + if ! ___eapi_has_BDEPEND; then + unset BDEPEND + fi + + # The extra $(echo) commands remove newlines. + if [ -n "${dbkey}" ] ; then + > "${dbkey}" + for f in ${auxdbkeys} ; do + echo $(echo ${!f}) >> "${dbkey}" || exit $? + done + else + for f in ${auxdbkeys} ; do + eval "echo \$(echo \${!f}) 1>&${PORTAGE_PIPE_FD}" || exit $? + done + eval "exec ${PORTAGE_PIPE_FD}>&-" + fi + set +f +else + # Note: readonly variables interfere with __preprocess_ebuild_env(), so + # declare them only after it has already run. + declare -r $PORTAGE_READONLY_METADATA $PORTAGE_READONLY_VARS + if ___eapi_has_prefix_variables; then + declare -r ED EPREFIX EROOT + fi + if ___eapi_has_BROOT; then + declare -r BROOT + fi + + # If ${EBUILD_FORCE_TEST} == 1 and USE came from ${T}/environment + # then it might not have USE=test like it's supposed to here. + if [[ ${EBUILD_PHASE} == test && ${EBUILD_FORCE_TEST} == 1 ]] && + ___in_portage_iuse test && ! has test ${USE} ; then + export USE="${USE} test" + fi + declare -r USE + + if [[ -n $EBUILD_SH_ARGS ]] ; then + ( + # Don't allow subprocesses to inherit the pipe which + # emerge uses to monitor ebuild.sh. + if [[ -n ${PORTAGE_PIPE_FD} ]] ; then + eval "exec ${PORTAGE_PIPE_FD}>&-" + unset PORTAGE_PIPE_FD + fi + __ebuild_main ${EBUILD_SH_ARGS} + exit 0 + ) + exit $? + fi +fi + +# Do not exit when ebuild.sh is sourced by other scripts. +true +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +DESCRIPTION="Simple passphrase entry dialogs which utilize the Assuan protocol (meta package)" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +# some use flags are fake, used to mimic portage ebuild USE flags +IUSE="caps emacs gnome-keyring gtk ncurses qt5 static" + +RDEPEND=" + ~app-crypt/pinentry-base-${PV} + caps? ( ~app-crypt/pinentry-base-${PV}[caps] ) + gnome-keyring? ( ~app-crypt/pinentry-gnome-${PV} ) + gtk? ( ~app-crypt/pinentry-gtk2-${PV} ) + qt5? ( ~app-crypt/pinentry-qt5-${PV} ) + static? ( ~app-crypt/pinentry-base-${PV}[static] )" +DEPEND="" + +REQUIRED_USE=" + || ( ncurses gtk qt5 ) + gtk? ( !static ) + qt5? ( !static ) + static? ( ncurses ) +" diff --git a/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.1.0-r2.ebuild b/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.1.0-r2.ebuild new file mode 100644 index 00000000..60154fbd --- /dev/null +++ b/tests/fixtures/overlay/app-crypt/pinentry/pinentry-1.1.0-r2.ebuild @@ -0,0 +1,28 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +DESCRIPTION="Simple passphrase entry dialogs which utilize the Assuan protocol (meta package)" +HOMEPAGE="https://gnupg.org/aegypten2/index.html" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~arm ~amd64 ~x86" +# some use flags are fake, used to mimic portage ebuild USE flags +IUSE="caps emacs gnome-keyring fltk gtk ncurses qt5 static" + +RDEPEND=" + ~app-crypt/pinentry-base-${PV} + caps? ( ~app-crypt/pinentry-base-${PV}[caps] ) + gnome-keyring? ( ~app-crypt/pinentry-gnome-${PV} ) + gtk? ( ~app-crypt/pinentry-gtk2-${PV} ) + qt5? ( ~app-crypt/pinentry-qt5-${PV} ) + static? ( ~app-crypt/pinentry-base-${PV}[static] )" +DEPEND="" + +REQUIRED_USE=" + gtk? ( !static ) + qt5? ( !static ) +"