3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/default.nix
Niklas Hambüchen 2767936180 thunderbird: Add gpg/gpgme dependencies. Fixes #98765.
This enables to configure Thunderbird to use gnupg directly, which is the
official upstream recommendation when using GPG with smartcards, which are not
yet supported by Thunderbird's native GPG support.
2020-12-18 00:36:55 +01:00

354 lines
8.3 KiB
Nix

{ autoconf213
, bzip2
, cargo
, common-updater-scripts
, copyDesktopItems
, coreutils
, curl
, dbus
, dbus-glib
, fetchpatch
, fetchurl
, file
, fontconfig
, freetype
, glib
, gnugrep
, gnused
, gnupg
, gpgme
, icu
, jemalloc
, lib
, libGL
, libGLU
, libevent
, libjpeg
, libnotify
, libpng
, libstartup_notification
, libvpx
, libwebp
, llvmPackages
, m4
, makeDesktopItem
, nasm
, nodejs
, nspr
, nss_3_53
, pango
, perl
, pkgconfig
, python2
, python3
, runtimeShell
, rust-cbindgen
, rustc
, sqlite
, stdenv
, systemd
, unzip
, which
, writeScript
, xidel
, xorg
, yasm
, zip
, zlib
, debugBuild ? false
, alsaSupport ? stdenv.isLinux, alsaLib
, pulseaudioSupport ? stdenv.isLinux, libpulseaudio
, gtk3Support ? true, gtk2, gtk3, wrapGAppsHook
, waylandSupport ? true
, libxkbcommon, calendarSupport ? true
# Use official trademarked branding. Permission obtained at:
# https://github.com/NixOS/nixpkgs/pull/94880#issuecomment-675907971
, enableOfficialBranding ? true
}:
assert waylandSupport -> gtk3Support == true;
stdenv.mkDerivation rec {
pname = "thunderbird";
version = "78.6.0";
src = fetchurl {
url =
"mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
sha512 =
"0hx9gg3ngpvgshrz9j7ni4kh3chadqd5w5fpywjjw4naj0k53d0i9jjhq4p6fyvf6rb2g825ibqq794lr9drn6nrfndh5w1yn5lw69n";
};
nativeBuildInputs = [
autoconf213
cargo
copyDesktopItems
gnused
llvmPackages.llvm
m4
nasm
nodejs
perl
pkgconfig
python2
python3
rust-cbindgen
rustc
which
yasm
] ++ lib.optional gtk3Support wrapGAppsHook;
buildInputs = [
bzip2
dbus
dbus-glib
file
fontconfig
freetype
glib
gtk2
icu
jemalloc
libGL
libGLU
libevent
libjpeg
libnotify
libpng
libstartup_notification
libvpx
libwebp
nspr
nss_3_53
pango
perl
sqlite
unzip
xorg.libX11
xorg.libXScrnSaver
xorg.libXcursor
xorg.libXext
xorg.libXft
xorg.libXi
xorg.libXrender
xorg.libXt
xorg.pixman
xorg.xorgproto
zip
zlib
] ++ lib.optional alsaSupport alsaLib
++ lib.optional gtk3Support gtk3
++ lib.optional pulseaudioSupport libpulseaudio
++ lib.optional waylandSupport libxkbcommon;
NIX_CFLAGS_COMPILE =[
"-I${glib.dev}/include/gio-unix-2.0"
"-I${nss_3_53.dev}/include/nss"
];
patches = [
./no-buildconfig.patch
];
postPatch = ''
rm -rf obj-x86_64-pc-linux-gnu
'';
hardeningDisable = [ "format" ];
preConfigure = ''
# remove distributed configuration files
rm -f configure
rm -f js/src/configure
rm -f .mozconfig*
configureScript="$(realpath ./mach) configure"
# AS=as in the environment causes build failure https://bugzilla.mozilla.org/show_bug.cgi?id=1497286
unset AS
export MOZCONFIG=$(pwd)/mozconfig
# Set C flags for Rust's bindgen program. Unlike ordinary C
# compilation, bindgen does not invoke $CC directly. Instead it
# uses LLVM's libclang. To make sure all necessary flags are
# included we need to look in a few places.
# TODO: generalize this process for other use-cases.
BINDGEN_CFLAGS="$(< ${stdenv.cc}/nix-support/libc-crt1-cflags) \
$(< ${stdenv.cc}/nix-support/libc-cflags) \
$(< ${stdenv.cc}/nix-support/cc-cflags) \
$(< ${stdenv.cc}/nix-support/libcxx-cxxflags) \
${
lib.optionalString stdenv.cc.isClang
"-idirafter ${stdenv.cc.cc}/lib/clang/${
lib.getVersion stdenv.cc.cc
}/include"
} \
${
lib.optionalString stdenv.cc.isGNU
"-isystem ${stdenv.cc.cc}/include/c++/${
lib.getVersion stdenv.cc.cc
} -isystem ${stdenv.cc.cc}/include/c++/${
lib.getVersion stdenv.cc.cc
}/${stdenv.hostPlatform.config}"
} \
$NIX_CFLAGS_COMPILE"
echo "ac_add_options BINDGEN_CFLAGS='$BINDGEN_CFLAGS'" >> $MOZCONFIG
'';
configureFlags = let
toolkitSlug = if gtk3Support then
"3${lib.optionalString waylandSupport "-wayland"}"
else
"2";
toolkitValue = "cairo-gtk${toolkitSlug}";
in [
"--enable-application=comm/mail"
"--with-system-icu"
"--with-system-jpeg"
"--with-system-libevent"
"--with-system-nspr"
"--with-system-nss"
"--with-system-png" # needs APNG support
"--with-system-zlib"
"--with-system-webp"
"--with-system-libvpx"
"--enable-rust-simd"
"--enable-crashreporter"
"--enable-default-toolkit=${toolkitValue}"
"--enable-js-shell"
"--enable-necko-wifi"
"--enable-system-ffi"
"--enable-system-pixman"
"--disable-tests"
"--disable-updater"
"--enable-jemalloc"
] ++ (if debugBuild then [
"--enable-debug"
"--enable-profiling"
] else [
"--disable-debug"
"--enable-release"
"--disable-debug-symbols"
"--enable-optimize"
"--enable-strip"
]) ++ lib.optionals (!stdenv.hostPlatform.isi686) [
# on i686-linux: --with-libclang-path is not available in this configuration
"--with-libclang-path=${llvmPackages.libclang}/lib"
"--with-clang-path=${llvmPackages.clang}/bin/clang"
] ++ lib.optional alsaSupport "--enable-alsa"
++ lib.optional calendarSupport "--enable-calendar"
++ lib.optional enableOfficialBranding "--enable-official-branding"
++ lib.optional pulseaudioSupport "--enable-pulseaudio";
enableParallelBuilding = true;
postConfigure = ''
cd obj-*
'';
makeFlags = lib.optionals enableOfficialBranding [
"MOZILLA_OFFICIAL=1"
"BUILD_OFFICIAL=1"
];
doCheck = false;
desktopItems = [
(makeDesktopItem {
categories = lib.concatStringsSep ";" [ "Application" "Network" ];
desktopName = "Thunderbird";
genericName = "Mail Reader";
name = "thunderbird";
exec = "thunderbird %U";
icon = "$out/lib/thunderbird/chrome/icons/default/default256.png";
mimeType = lib.concatStringsSep ";" [
# Email
"x-scheme-handler/mailto"
"message/rfc822"
# Feeds
"x-scheme-handler/feed"
"application/rss+xml"
"application/x-extension-rss"
# Newsgroups
"x-scheme-handler/news"
"x-scheme-handler/snews"
"x-scheme-handler/nntp"
];
})
];
postInstall = ''
# TODO: Move to a dev output?
rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl
'';
# Note on GPG support:
# Thunderbird's native GPG support does not yet support smartcards.
# The official upstream recommendation is to configure fall back to gnupg
# using the Thunderbird config `mail.openpgp.allow_external_gnupg`
# and GPG keys set up; instructions with pictures at:
# https://anweshadas.in/how-to-use-yubikey-or-any-gpg-smartcard-in-thunderbird-78/
# For that to work out of the box, it requires `gnupg` on PATH and
# `gpgme` in `LD_LIBRARY_PATH`; we do this below.
preFixup = ''
# Needed to find Mozilla runtime
gappsWrapperArgs+=(
--argv0 "$out/bin/thunderbird"
--set MOZ_APP_LAUNCHER thunderbird
# https://github.com/NixOS/nixpkgs/pull/61980
--set SNAP_NAME "thunderbird"
--set MOZ_LEGACY_PROFILES 1
--set MOZ_ALLOW_DOWNGRADE 1
--prefix PATH : "${lib.getBin gnupg}/bin"
--prefix LD_LIBRARY_PATH : "${lib.getLib gpgme}/lib"
)
'';
# FIXME: The XUL portion of this can probably be removed as soon as we
# package a Thunderbird >=71.0 since XUL shouldn't be anymore (in use)?
postFixup = ''
local xul="$out/lib/thunderbird/libxul.so"
patchelf --set-rpath "${libnotify}/lib:${lib.getLib systemd}/lib:$(patchelf --print-rpath $xul)" $xul
'';
doInstallCheck = true;
installCheckPhase = ''
"$out/bin/thunderbird" --version
'';
disallowedRequisites = [
stdenv.cc
];
passthru.updateScript = import ./../../browsers/firefox/update.nix {
attrPath = "thunderbird-78";
baseUrl = "http://archive.mozilla.org/pub/thunderbird/releases/";
inherit writeScript lib common-updater-scripts xidel coreutils gnused
gnugrep curl runtimeShell;
};
requiredSystemFeatures = [ "big-parallel" ];
meta = with stdenv.lib; {
description = "A full-featured e-mail client";
homepage = "https://www.thunderbird.net";
maintainers = with maintainers; [
eelco
lovesegfault
pierron
vcunat
];
platforms = platforms.linux;
license = licenses.mpl20;
};
}