forked from NixOS/nixpkgs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
pinentry: remove multiple outputs package
fixes NixOS#133156 NixOS#124753
- Loading branch information
Showing
4 changed files
with
90 additions
and
98 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,105 +1,93 @@ | ||
{ fetchurl, mkDerivation, fetchpatch, stdenv, lib, pkg-config, autoreconfHook, wrapGAppsHook | ||
, libgpgerror, libassuan, qtbase, wrapQtAppsHook | ||
{ stdenv, lib, fetchurl, fetchpatch, pkg-config, autoreconfHook, wrapGAppsHook | ||
, libgpgerror, libassuan, libsForQt5 | ||
, ncurses, gtk2, gcr | ||
, libcap ? null, libsecret ? null | ||
, enabledFlavors ? [ "curses" "tty" "gtk2" "emacs" ] | ||
++ lib.optionals stdenv.isLinux [ "gnome3" ] | ||
++ lib.optionals (stdenv.hostPlatform.system != "aarch64-darwin") [ "qt" ] | ||
}: | ||
|
||
with lib; | ||
|
||
assert isList enabledFlavors && enabledFlavors != []; | ||
|
||
let | ||
pinentryMkDerivation = | ||
if (builtins.elem "qt" enabledFlavors) | ||
then mkDerivation | ||
else stdenv.mkDerivation; | ||
|
||
mkFlag = pfxTrue: pfxFalse: cond: name: | ||
"--${if cond then pfxTrue else pfxFalse}-${name}"; | ||
mkEnable = mkFlag "enable" "disable"; | ||
mkWith = mkFlag "with" "without"; | ||
|
||
mkEnablePinentry = f: | ||
let | ||
info = flavorInfo.${f}; | ||
flag = flavorInfo.${f}.flag or null; | ||
in | ||
optionalString (flag != null) | ||
(mkEnable (elem f enabledFlavors) ("pinentry-" + flag)); | ||
|
||
flavorInfo = { | ||
curses = { bin = "curses"; flag = "curses"; buildInputs = [ ncurses ]; }; | ||
tty = { bin = "tty"; flag = "tty"; }; | ||
gtk2 = { bin = "gtk-2"; flag = "gtk2"; buildInputs = [ gtk2 ]; }; | ||
gnome3 = { bin = "gnome3"; flag = "gnome3"; buildInputs = [ gcr ]; nativeBuildInputs = [ wrapGAppsHook ]; }; | ||
qt = { bin = "qt"; flag = "qt"; buildInputs = [ qtbase ]; nativeBuildInputs = [ wrapQtAppsHook ]; }; | ||
emacs = { bin = "emacs"; flag = "emacs"; buildInputs = []; }; | ||
}; | ||
|
||
in | ||
|
||
pinentryMkDerivation rec { | ||
pname = "pinentry"; | ||
version = "1.1.0"; | ||
|
||
src = fetchurl { | ||
url = "mirror://gnupg/pinentry/${pname}-${version}.tar.bz2"; | ||
sha256 = "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"; | ||
tty = { flag = "tty"; }; | ||
curses = { flag = "curses"; buildInputs = [ ncurses ]; }; | ||
gtk2 = { flag = "gtk2"; buildInputs = [ gtk2 ]; }; | ||
gnome3 = { flag = "gnome3"; buildInputs = [ gcr ]; nativeBuildInputs = [ wrapGAppsHook ]; }; | ||
qt = { flag = "qt"; buildInputs = [ libsForQt5.qtbase ]; nativeBuildInputs = [ libsForQt5.wrapQtAppsHook ]; }; | ||
}; | ||
|
||
nativeBuildInputs = [ pkg-config autoreconfHook ] | ||
++ concatMap(f: flavorInfo.${f}.nativeBuildInputs or []) enabledFlavors; | ||
buildInputs = [ libgpgerror libassuan libcap libsecret ] | ||
++ concatMap(f: flavorInfo.${f}.buildInputs or []) enabledFlavors; | ||
|
||
dontWrapGApps = true; | ||
dontWrapQtApps = true; | ||
|
||
patches = [ | ||
./autoconf-ar.patch | ||
] ++ optionals (elem "gtk2" enabledFlavors) [ | ||
(fetchpatch { | ||
url = "https://salsa.debian.org/debian/pinentry/raw/debian/1.1.0-1/debian/patches/0007-gtk2-When-X11-input-grabbing-fails-try-again-over-0..patch"; | ||
sha256 = "15r1axby3fdlzz9wg5zx7miv7gqx2jy4immaw4xmmw5skiifnhfd"; | ||
}) | ||
]; | ||
|
||
configureFlags = [ | ||
(mkWith (libcap != null) "libcap") | ||
(mkEnable (libsecret != null) "libsecret") | ||
] ++ (map mkEnablePinentry (attrNames flavorInfo)); | ||
|
||
postInstall = | ||
concatStrings (flip map enabledFlavors (f: | ||
buildPinentry = pnameExtra: buildFlavors: let | ||
mkFlavorFlag = f: | ||
let | ||
binary = "pinentry-" + flavorInfo.${f}.bin; | ||
in '' | ||
moveToOutput bin/${binary} ${placeholder f} | ||
ln -sf ${placeholder f}/bin/${binary} ${placeholder f}/bin/pinentry | ||
'' + optionalString (f == "gnome3") '' | ||
wrapGApp ${placeholder f}/bin/${binary} | ||
'' + optionalString (f == "qt") '' | ||
wrapQtApp ${placeholder f}/bin/${binary} | ||
'')) + '' | ||
ln -sf ${placeholder (head enabledFlavors)}/bin/pinentry-${flavorInfo.${head enabledFlavors}.bin} $out/bin/pinentry | ||
''; | ||
|
||
outputs = [ "out" ] ++ enabledFlavors; | ||
|
||
passthru = { flavors = enabledFlavors; }; | ||
info = flavorInfo.${f}; | ||
flag = flavorInfo.${f}.flag or null; | ||
in | ||
lib.optionalString (flag != null) | ||
(mkEnable (lib.elem f buildFlavors) ("pinentry-" + flag)); | ||
|
||
in stdenv.mkDerivation rec { | ||
pname = "pinentry-${pnameExtra}"; | ||
version = "1.1.1"; | ||
|
||
src = fetchurl { | ||
url = "mirror://gnupg/pinentry/pinentry-${version}.tar.bz2"; | ||
sha256 = "0zx5vg6wws2sp2yxwi01b8i1pnsqkydncpj7x0p8xl9y05ja04nd"; | ||
}; | ||
|
||
nativeBuildInputs = [ pkg-config autoreconfHook ] | ||
++ lib.concatMap (f: flavorInfo.${f}.nativeBuildInputs or []) buildFlavors; | ||
buildInputs = [ libgpgerror libassuan libcap libsecret ] | ||
++ lib.concatMap (f: flavorInfo.${f}.buildInputs or []) buildFlavors; | ||
|
||
dontWrapGApps = true; | ||
dontWrapQtApps = true; | ||
|
||
patches = [ | ||
./autoconf-ar.patch | ||
] ++ lib.optionals (lib.elem "gtk2" buildFlavors) [ | ||
(fetchpatch { | ||
url = "https://salsa.debian.org/debian/pinentry/raw/debian/1.1.0-1/debian/patches/0007-gtk2-When-X11-input-grabbing-fails-try-again-over-0..patch"; | ||
sha256 = "15r1axby3fdlzz9wg5zx7miv7gqx2jy4immaw4xmmw5skiifnhfd"; | ||
}) | ||
]; | ||
|
||
configureFlags = [ | ||
(mkWith (libcap != null) "libcap") | ||
(mkEnable (libsecret != null) "libsecret") | ||
] ++ (map mkFlavorFlag (lib.attrNames flavorInfo)); | ||
|
||
postInstall = | ||
lib.optionalString (lib.elem "gnome3" buildFlavors) '' | ||
wrapGApp $out/bin/pinentry-gnome3 | ||
'' + lib.optionalString (lib.elem "qt" buildFlavors) '' | ||
wrapQtApp $out/bin/pinentry-qt | ||
''; | ||
|
||
passthru = { flavors = buildFlavors; }; | ||
|
||
meta = with lib; { | ||
homepage = "http://gnupg.org/aegypten2/"; | ||
description = "GnuPG’s interface to passphrase input"; | ||
license = licenses.gpl2Plus; | ||
platforms = | ||
if elem "gnome3" buildFlavors then platforms.linux else | ||
if elem "qt" buildFlavors then (remove "aarch64-darwin" platforms.all) else | ||
platforms.all; | ||
longDescription = '' | ||
Pinentry provides a console and (optional) GTK and Qt GUIs allowing users | ||
to enter a passphrase when `gpg' or `gpg2' is run and needs it. | ||
''; | ||
maintainers = with maintainers; [ ttuegel fpletz ]; | ||
}; | ||
}; | ||
in | ||
|
||
meta = with lib; { | ||
homepage = "http://gnupg.org/aegypten2/"; | ||
description = "GnuPG’s interface to passphrase input"; | ||
license = licenses.gpl2Plus; | ||
platforms = platforms.all; | ||
longDescription = '' | ||
Pinentry provides a console and (optional) GTK and Qt GUIs allowing users | ||
to enter a passphrase when `gpg' or `gpg2' is run and needs it. | ||
''; | ||
maintainers = with maintainers; [ ttuegel fpletz ]; | ||
}; | ||
{ | ||
curses = buildPinentry "curses" [ "curses" "tty" ]; | ||
gtk2 = buildPinentry "gtk2" [ "gtk2" "curses" "tty" ]; | ||
gnome3 = buildPinentry "gnome3" [ "gnome3" "curses" "tty" ]; | ||
qt = buildPinentry "qt" [ "qt" "curses" "tty" ]; | ||
all = buildPinentry "all" (lib.attrNames flavorInfo); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters