thunderbird: rewrite

This is a large scale rework of the package, here's a change summary:
    * Organized inputs (1/line, except conditionals)
    * Introduced alsaSupport, pulseaudioSupport, waylandSupport
    * enableGTK3 -> gtk3Support
    * enableCalendar -> calendarSupport
    * Organized buildInputs, nativeBuildInputs (1/line)
    * Corrected native/buildInputs separation
    * Ported over fixes/changes from Firefox
    * Enabled sound, webp, vpx, rust-SIMD, necko-wifi
    * Removed manual wrapping
    * Lifted makeDesktopItem out of string section, into Nix
    * Correctly set bindgen options
    * Added lovesegfault as maintainer
    * New url which uses https
This is non-authoritative, look at the diff for further info.
This commit is contained in:
Bernardo Meurer 2019-12-07 00:47:31 -08:00 committed by worldofpeace
parent 3d81015ac4
commit 8b8458ade5
2 changed files with 307 additions and 181 deletions

View File

@ -1,213 +1,339 @@
{ lib, stdenv, fetchurl, pkgconfig, gtk2, pango, perl, python2, python3, nodejs { autoconf213
, libIDL, libjpeg, zlib, dbus, dbus-glib, bzip2, xorg , bzip2
, freetype, fontconfig, file, nspr, nss, libnotify , cargo
, yasm, libGLU, libGL, sqlite, zip, unzip , common-updater-scripts
, libevent, libstartup_notification , coreutils
, icu, libpng, jemalloc , curl
, autoconf213, which, m4, fetchpatch , dbus
, writeScript, xidel, common-updater-scripts, coreutils, gnused, gnugrep, curl , dbus-glib
, runtimeShell , fetchurl
, cargo, rustc, rust-cbindgen, llvmPackages, nasm , file
, enableGTK3 ? false, gtk3, gnome3, wrapGAppsHook, makeWrapper , fontconfig
, enableCalendar ? true , freetype
, debugBuild ? false , glib
, # If you want the resulting program to call itself "Thunderbird" instead , gnugrep
# of "Earlybird" or whatever, enable this option. However, those , gnused
# binaries may not be distributed without permission from the , icu
# Mozilla Foundation, see , jemalloc
# http://www.mozilla.org/foundation/trademarks/. , lib
enableOfficialBranding ? false , libGL
, libGLU
, libIDL
, libevent
, libjpeg
, libnotify
, libpng
, libstartup_notification
, libvpx
, libwebp
, llvmPackages
, m4
, makeDesktopItem , makeDesktopItem
, nasm
, nodejs
, nspr
, nss
, pango
, perl
, pkgconfig
, python2
, python3
, runtimeShell
, rust-cbindgen
, rustc
, sqlite
, stdenv
, 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
, # If you want the resulting program to call itself "Thunderbird" instead
# of "Earlybird" or whatever, enable this option. However, those
# binaries may not be distributed without permission from the
# Mozilla Foundation, see
# http://www.mozilla.org/foundation/trademarks/.
enableOfficialBranding ? false
}: }:
let assert waylandSupport -> gtk3Support == true;
wrapperTool = if enableGTK3 then wrapGAppsHook else makeWrapper;
gcc = if stdenv.cc.isGNU then stdenv.cc.cc else stdenv.cc.cc.gcc; stdenv.mkDerivation rec {
in stdenv.mkDerivation rec {
pname = "thunderbird"; pname = "thunderbird";
version = "68.3.0"; version = "68.3.0";
src = fetchurl { src = fetchurl {
url = "mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz"; url =
sha512 = "3aqr3dj5laws516k6jf8f35a1964p0s75sp682yy87xnzgd8m1iha55z79dcavis2ma9hiyacjnznjz04qhqd4q8swjgfg7lj8lyiwl"; "mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
sha512 =
"3aqr3dj5laws516k6jf8f35a1964p0s75sp682yy87xnzgd8m1iha55z79dcavis2ma9hiyacjnznjz04qhqd4q8swjgfg7lj8lyiwl";
}; };
# from firefox, but without sound libraries nativeBuildInputs = [
buildInputs = autoconf213
[ gtk2 zip libIDL libjpeg zlib bzip2 cargo
dbus dbus-glib pango freetype fontconfig xorg.libXi gnused
xorg.libX11 xorg.libXrender xorg.libXft xorg.libXt file llvmPackages.llvm
nspr nss libnotify xorg.pixman yasm libGLU libGL m4
xorg.libXScrnSaver xorg.xorgproto nasm
xorg.libXext sqlite unzip nodejs
libevent libstartup_notification /* cairo */ perl
icu libpng jemalloc nasm pkgconfig
] python2
++ lib.optionals enableGTK3 [ gtk3 gnome3.adwaita-icon-theme ]; python3
rust-cbindgen
rustc
which
yasm
] ++ lib.optional gtk3Support wrapGAppsHook;
# from firefox + m4 + wrapperTool buildInputs = [
# llvm is for llvm-objdump bzip2
nativeBuildInputs = [ m4 autoconf213 which gnused pkgconfig perl python2 python3 nodejs wrapperTool cargo rustc rust-cbindgen llvmPackages.llvm ]; dbus
dbus-glib
file
fontconfig
freetype
glib
gtk2
icu
jemalloc
libGL
libGLU
libIDL
libevent
libjpeg
libnotify
libpng
libstartup_notification
libvpx
libwebp
nspr
nss
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.dev}/include/nss"
];
patches = [ patches = [
# Remove buildconfig.html to prevent a dependency on clang etc.
./no-buildconfig.patch ./no-buildconfig.patch
] ];
++ lib.optional (lib.versionOlder version "69")
(fetchpatch { # https://bugzilla.mozilla.org/show_bug.cgi?id=1500436#c29
name = "write_error-parallel_make.diff";
url = "https://hg.mozilla.org/mozilla-central/raw-diff/562655fe/python/mozbuild/mozbuild/action/node.py";
sha256 = "11d7rgzinb4mwl7yzhidjkajynmxgmffr4l9isgskfapyax9p88y";
});
configureFlags = postPatch = ''
[ # from firefox, but without sound libraries (alsa, libvpx, pulseaudio) rm -rf obj-x86_64-pc-linux-gnu
"--enable-application=comm/mail" '';
"--disable-alsa"
"--disable-pulseaudio"
"--with-system-jpeg" preConfigure = ''
"--with-system-zlib" # remove distributed configuration files
"--with-system-bz2" rm -f configure
"--with-system-nspr" rm -f js/src/configure
"--with-system-nss" rm -f .mozconfig*
"--with-system-libevent"
"--with-system-png" # needs APNG support configureScript="$(realpath ./mach) configure"
"--with-system-icu" # AS=as in the environment causes build failure https://bugzilla.mozilla.org/show_bug.cgi?id=1497286
#"--enable-rust-simd" # not supported since rustc 1.32.0 -> 1.33.0; TODO: probably OK since 68.0.0 unset AS
"--enable-system-ffi"
"--enable-system-pixman" export MOZCONFIG=$(pwd)/mozconfig
"--enable-system-sqlite"
#"--enable-system-cairo" # Set C flags for Rust's bindgen program. Unlike ordinary C
"--enable-startup-notification" # compilation, bindgen does not invoke $CC directly. Instead it
"--disable-crashreporter" # uses LLVM's libclang. To make sure all necessary flags are
"--disable-tests" # included we need to look in a few places.
"--disable-necko-wifi" # maybe we want to enable this at some point # TODO: generalize this process for other use-cases.
"--disable-updater"
"--enable-jemalloc" BINDGEN_CFLAGS="$(< ${stdenv.cc}/nix-support/libc-cflags) \
"--disable-gconf" $(< ${stdenv.cc}/nix-support/cc-cflags) \
"--enable-default-toolkit=cairo-gtk${if enableGTK3 then "3" else "2"}" ${stdenv.cc.default_cxx_stdlib_compile} \
"--enable-js-shell" ${
] lib.optionalString stdenv.cc.isClang
++ lib.optional enableCalendar "--enable-calendar" "-idirafter ${stdenv.cc.cc}/lib/clang/${
++ (if debugBuild then [ "--enable-debug" "--enable-profiling"] lib.getVersion stdenv.cc.cc
else [ "--disable-debug" "--enable-release" }/include"
"--disable-debug-symbols" } \
"--enable-optimize" "--enable-strip" ]) ${
++ lib.optional enableOfficialBranding "--enable-official-branding" lib.optionalString stdenv.cc.isGNU
++ lib.optionals (lib.versionAtLeast version "56" && !stdenv.hostPlatform.isi686) [ "-isystem ${stdenv.cc.cc}/include/c++/${
# on i686-linux: --with-libclang-path is not available in this configuration lib.getVersion stdenv.cc.cc
"--with-libclang-path=${llvmPackages.libclang}/lib" } -isystem ${stdenv.cc.cc}/include/c++/${
"--with-clang-path=${llvmPackages.clang}/bin/clang" lib.getVersion stdenv.cc.cc
]; }/$(cc -dumpmachine)"
} \
$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-bz2"
"--with-system-icu"
"--with-system-jpeg"
"--with-system-libevent"
"--with-system-nspr"
"--with-system-nss"
"--with-system-png" # needs APNG support
"--with-system-icu"
"--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-startup-notification"
"--enable-system-ffi"
"--enable-system-pixman"
"--enable-system-sqlite"
"--disable-gconf"
"--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; enableParallelBuilding = true;
preConfigure = postConfigure = ''
'' cd obj-*
cxxLib=$( echo -n ${gcc}/include/c++/* ) '';
archLib=$cxxLib/$( ${gcc}/bin/gcc -dumpmachine )
test -f layout/style/ServoBindings.toml && sed -i -e '/"-DRUST_BINDGEN"/ a , "-cxx-isystem", "'$cxxLib'", "-isystem", "'$archLib'"' layout/style/ServoBindings.toml makeFlags = lib.optionals enableOfficialBranding [
"MOZILLA_OFFICIAL=1"
"BUILD_OFFICIAL=1"
];
configureScript="$(realpath ./configure)" doCheck = false;
mkdir ../objdir
cd ../objdir
# AS=as in the environment causes build failure https://bugzilla.mozilla.org/show_bug.cgi?id=1497286 postInstall = let
unset AS desktopItem = 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"
];
};
in ''
# TODO: Move to a dev output?
rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl
dontWrapGApps = true; # we do it ourselves ${desktopItem.buildCommand}
postInstall = '';
''
# TODO: Move to a dev output?
rm -rf $out/include $out/lib/thunderbird-devel-* $out/share/idl
# $binary is a symlink to $target. preFixup = ''
# We wrap $target by replacing the $binary symlink. # Needed to find Mozilla runtime
local target="$out/lib/thunderbird/thunderbird" gappsWrapperArgs+=(
local binary="$out/bin/thunderbird" --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
)
'';
# Wrap correctly, this is needed to # FIXME: This can probably be removed as soon as we package a
# 1) find Mozilla runtime, because argv0 must be the real thing, # Thunderbird >=71.0 since XUL shouldn't be anymore (in use)?
# or a symlink thereto. It cannot be the wrapper itself postFixup = ''
# 2) detect itself as the default mailreader across builds local xul="$out/lib/thunderbird/libxul.so"
gappsWrapperArgs+=( patchelf --set-rpath "${libnotify}/lib:$(patchelf --print-rpath $xul)" $xul
--argv0 "$target" '';
--set MOZ_APP_LAUNCHER thunderbird
# See commit 87e261843c4236c541ee0113988286f77d2fa1ee
--set MOZ_LEGACY_PROFILES 1
--set MOZ_ALLOW_DOWNGRADE 1
# https://github.com/NixOS/nixpkgs/pull/61980
--set SNAP_NAME "thunderbird"
)
${
# We wrap manually because wrapGAppsHook does not detect the symlink
# To mimic wrapGAppsHook, we run it with dontWrapGApps, so
# gappsWrapperArgs gets defined correctly
lib.optionalString enableGTK3 "wrapGAppsHook"
}
# "$binary" is a symlink, replace it by the wrapper
rm "$binary"
makeWrapper "$target" "$binary" "''${gappsWrapperArgs[@]}"
${ let desktopItem = makeDesktopItem {
name = "thunderbird";
exec = "thunderbird %U";
desktopName = "Thunderbird";
icon = "$out/lib/thunderbird/chrome/icons/default/default256.png";
genericName = "Mail Reader";
categories = "Application;Network";
mimeType = stdenv.lib.concatStringsSep ";" [
# Email
"x-scheme-handler/mailto"
"message/rfc822"
# Newsgroup
"x-scheme-handler/news"
"x-scheme-handler/snews"
"x-scheme-handler/nntp"
# Feed
"x-scheme-handler/feed"
"application/rss+xml"
"application/x-extension-rss"
];
}; in desktopItem.buildCommand
}
'';
postFixup =
# Fix notifications. LibXUL uses dlopen for this, unfortunately; see #18712.
''
patchelf --set-rpath "${lib.getLib libnotify
}/lib:$(patchelf --print-rpath "$out"/lib/thunderbird*/libxul.so)" \
"$out"/lib/thunderbird*/libxul.so
'';
doInstallCheck = true; doInstallCheck = true;
installCheckPhase = installCheckPhase = ''
'' "$out/bin/thunderbird" --version
# Some basic testing '';
"$out/bin/thunderbird" --version
'';
disallowedRequisites = [ stdenv.cc ]; disallowedRequisites = [
stdenv.cc
meta = with stdenv.lib; { ];
description = "A full-featured e-mail client";
homepage = http://www.mozilla.org/thunderbird/;
license =
# Official branding implies thunderbird name and logo cannot be reuse,
# see http://www.mozilla.org/foundation/licensing.html
if enableOfficialBranding then licenses.proprietary else licenses.mpl11;
maintainers = [ maintainers.pierron maintainers.eelco ];
platforms = platforms.linux;
};
passthru.updateScript = import ./../../browsers/firefox/update.nix { passthru.updateScript = import ./../../browsers/firefox/update.nix {
attrPath = "thunderbird"; attrPath = "thunderbird";
baseUrl = "http://archive.mozilla.org/pub/thunderbird/releases/"; baseUrl = "http://archive.mozilla.org/pub/thunderbird/releases/";
inherit writeScript lib common-updater-scripts xidel coreutils gnused gnugrep curl runtimeShell; inherit writeScript lib common-updater-scripts xidel coreutils gnused
gnugrep curl runtimeShell;
};
meta = with stdenv.lib; {
description = "A full-featured e-mail client";
homepage = "https://www.thunderbird.net";
maintainers = with maintainers; [
eelco
lovesegfault
pierron
];
platforms = platforms.linux;
}; };
} }

View File

@ -21491,7 +21491,7 @@ in
inherit (gnome2) libIDL; inherit (gnome2) libIDL;
inherit (rustPackages_1_38_0) cargo rustc; inherit (rustPackages_1_38_0) cargo rustc;
libpng = libpng_apng; libpng = libpng_apng;
enableGTK3 = true; gtk3Support = true;
}; };
thunderbolt = callPackage ../os-specific/linux/thunderbolt {}; thunderbolt = callPackage ../os-specific/linux/thunderbolt {};