about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYureka <yuka@yuka.dev>2021-07-13 19:13:53 +0200
committerYureka <yuka@yuka.dev>2021-08-12 11:21:32 +0200
commit8b1c14045d51873023a101aa1376f5e238114c4a (patch)
tree486e4d8a91d2ca8722df4193bb16acb7d23834b3
parent711d674e1322a8ccdbf985322468da87a141bc9c (diff)
thunderbird: use firefox expression
-rw-r--r--pkgs/applications/networking/mailreaders/thunderbird/default.nix357
-rw-r--r--pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig-78.patch13
-rw-r--r--pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig.patch37
-rw-r--r--pkgs/applications/networking/mailreaders/thunderbird/packages.nix38
-rw-r--r--pkgs/applications/networking/mailreaders/thunderbird/wrapper.nix23
-rw-r--r--pkgs/top-level/all-packages.nix25
-rw-r--r--pkgs/top-level/release.nix2
7 files changed, 90 insertions, 405 deletions
diff --git a/pkgs/applications/networking/mailreaders/thunderbird/default.nix b/pkgs/applications/networking/mailreaders/thunderbird/default.nix
deleted file mode 100644
index a5a8ab861edd3..0000000000000
--- a/pkgs/applications/networking/mailreaders/thunderbird/default.nix
+++ /dev/null
@@ -1,357 +0,0 @@
-{ autoconf213
-, bzip2
-, cargo
-, common-updater-scripts
-, copyDesktopItems
-, coreutils
-, curl
-, dbus
-, dbus-glib
-, fetchpatch
-, fetchurl
-, file
-, fontconfig
-, freetype
-, glib
-, gnugrep
-, gnupg
-, gnused
-, gpgme
-, icu
-, jemalloc
-, lib
-, libevent
-, libGL
-, libGLU
-, libjpeg
-, libnotify
-, libpng
-, libstartup_notification
-, libvpx
-, libwebp
-, llvmPackages
-, m4
-, makeDesktopItem
-, nasm
-, nodejs
-, nspr
-, nss_3_53
-, pango
-, perl
-, pkg-config
-, python2
-, python3
-, runtimeShell
-, rust-cbindgen
-, rustc
-, sqlite
-, stdenv
-, systemd
-, unzip
-, which
-, writeScript
-, xdg-utils
-, xidel
-, xorg
-, yasm
-, zip
-, zlib
-
-, debugBuild ? false
-
-, alsaSupport ? stdenv.isLinux, alsa-lib
-, pulseaudioSupport ? stdenv.isLinux, libpulseaudio
-, gtk3Support ? true, gtk2, gtk3, wrapGAppsHook
-, waylandSupport ? true, libdrm
-, 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.13.0";
-
-  src = fetchurl {
-    url =
-      "mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
-    sha512 =
-      "daee9ea9e57bdfce231a35029807f279a06f8790d71efc8998c78eb42d99a93cf98623170947df99202da038f949ba9111a7ff7adbd43c161794deb6791370a0";
-  };
-
-  nativeBuildInputs = [
-    autoconf213
-    cargo
-    copyDesktopItems
-    gnused
-    llvmPackages.llvm
-    m4
-    nasm
-    nodejs
-    perl
-    pkg-config
-    python2
-    python3
-    rust-cbindgen
-    rustc
-    which
-    yasm
-    unzip
-  ] ++ 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
-    xorg.libX11
-    xorg.libXScrnSaver
-    xorg.libXcursor
-    xorg.libXext
-    xorg.libXft
-    xorg.libXi
-    xorg.libXrender
-    xorg.libXt
-    xorg.pixman
-    xorg.xorgproto
-    xorg.libXdamage
-    zip
-    zlib
-  ] ++ lib.optional alsaSupport alsa-lib
-    ++ lib.optional gtk3Support gtk3
-    ++ lib.optional pulseaudioSupport libpulseaudio
-    ++ lib.optionals waylandSupport [ libxkbcommon libdrm ];
-
-  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}/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 = "thunderbird";
-      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
-    install -Dm 444 $out/lib/thunderbird/chrome/icons/default/default256.png $out/share/icons/hicolor/256x256/apps/thunderbird.png
-  '';
-
-  # 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 PATH : "${lib.getBin xdg-utils}/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 gnupg curl runtimeShell;
-  };
-
-  requiredSystemFeatures = [ "big-parallel" ];
-
-  meta = with 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;
-  };
-}
diff --git a/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig-78.patch b/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig-78.patch
new file mode 100644
index 0000000000000..98b40d83d62b9
--- /dev/null
+++ b/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig-78.patch
@@ -0,0 +1,13 @@
+Remove about:buildconfig.  If used as-is, it would add unnecessary runtime dependencies.
+--- a/comm/mail/base/jar.mn
++++ b/comm/mail/base/jar.mn
+@@ -119,9 +119,7 @@
+ % override chrome://mozapps/content/profile/profileDowngrade.js chrome://messenger/content/profileDowngrade.js
+ % override chrome://mozapps/content/profile/profileDowngrade.xhtml chrome://messenger/content/profileDowngrade.xhtml
+ 
+-*   content/messenger/buildconfig.html              (content/buildconfig.html)
+     content/messenger/buildconfig.css               (content/buildconfig.css)
+-% override chrome://global/content/buildconfig.html chrome://messenger/content/buildconfig.html
+ % override chrome://global/content/buildconfig.css chrome://messenger/content/buildconfig.css
+ 
+ # L10n resources and overrides.
diff --git a/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig.patch b/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig.patch
deleted file mode 100644
index d413a06475d79..0000000000000
--- a/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Remove about:buildconfig.  If used as-is, it would add unnecessary runtime dependencies.
-diff -ru -x '*~' a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp
---- a/docshell/base/nsAboutRedirector.cpp
-+++ b/docshell/base/nsAboutRedirector.cpp
-@@ -63,8 +63,6 @@
-     {"about", "chrome://global/content/aboutAbout.html", 0},
-     {"addons", "chrome://mozapps/content/extensions/extensions.xhtml",
-      nsIAboutModule::ALLOW_SCRIPT},
--    {"buildconfig", "chrome://global/content/buildconfig.html",
--     nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT},
-     {"checkerboard", "chrome://global/content/aboutCheckerboard.html",
-      nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
-          nsIAboutModule::ALLOW_SCRIPT},
-diff -ru -x '*~' a/toolkit/content/jar.mn b/toolkit/content/jar.mn
---- a/toolkit/content/jar.mn
-+++ b/toolkit/content/jar.mn
-@@ -35,7 +35,6 @@
-    content/global/plugins.js
-    content/global/browser-child.js
-    content/global/browser-content.js
--*   content/global/buildconfig.html
-    content/global/buildconfig.css
-    content/global/contentAreaUtils.js
-    content/global/datepicker.xhtml
-diff -ru -x '*~' a/comm/mail/base/jar.mn b/comm/mail/base/jar.mn
---- a/comm/mail/base/jar.mn
-+++ b/comm/mail/base/jar.mn
-@@ -119,9 +119,7 @@
- % override chrome://mozapps/content/profile/profileDowngrade.js chrome://messenger/content/profileDowngrade.js
- % override chrome://mozapps/content/profile/profileDowngrade.xhtml chrome://messenger/content/profileDowngrade.xhtml
- 
--*   content/messenger/buildconfig.html              (content/buildconfig.html)
-     content/messenger/buildconfig.css               (content/buildconfig.css)
--% override chrome://global/content/buildconfig.html chrome://messenger/content/buildconfig.html
- % override chrome://global/content/buildconfig.css chrome://messenger/content/buildconfig.css
- 
- # L10n resources and overrides.
diff --git a/pkgs/applications/networking/mailreaders/thunderbird/packages.nix b/pkgs/applications/networking/mailreaders/thunderbird/packages.nix
new file mode 100644
index 0000000000000..c367a9303b59f
--- /dev/null
+++ b/pkgs/applications/networking/mailreaders/thunderbird/packages.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, callPackage, fetchurl, fetchpatch, nixosTests }:
+
+let
+  common = opts: callPackage (import ../../browsers/firefox/common.nix opts) {
+    webrtcSupport = false;
+    geolocationSupport = false;
+  };
+in
+
+rec {
+  thunderbird = common rec {
+    pname = "thunderbird";
+    version = "78.13.0";
+    application = "comm/mail";
+    binaryName = pname;
+    src = fetchurl {
+      url = "mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
+      sha512 = "daee9ea9e57bdfce231a35029807f279a06f8790d71efc8998c78eb42d99a93cf98623170947df99202da038f949ba9111a7ff7adbd43c161794deb6791370a0";
+    };
+    patches = [
+      ./no-buildconfig-78.patch
+    ];
+
+    meta = with lib; {
+      description = "A full-featured e-mail client";
+      homepage = "https://thunderbird.net/";
+      maintainers = with maintainers; [ eelco lovesegfault pierron vcunat ];
+      platforms = platforms.unix;
+      badPlatforms = platforms.darwin;
+      broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+                                             # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+      license = licenses.mpl20;
+    };
+    updateScript = callPackage ./update.nix {
+      attrPath = "thunderbird-78-unwrapped";
+    };
+  };
+}
diff --git a/pkgs/applications/networking/mailreaders/thunderbird/wrapper.nix b/pkgs/applications/networking/mailreaders/thunderbird/wrapper.nix
new file mode 100644
index 0000000000000..0761232cc5198
--- /dev/null
+++ b/pkgs/applications/networking/mailreaders/thunderbird/wrapper.nix
@@ -0,0 +1,23 @@
+{ lib, wrapFirefox, gpgme, gnupg }:
+
+browser:
+args:
+
+(wrapFirefox browser ({
+  libName = "thunderbird";
+} // args))
+
+.overrideAttrs (old: {
+  # 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.
+  buildCommand = old.buildCommand + ''
+    wrapProgram $out/bin/thunderbird \
+      --prefix LD_LIBRARY_PATH ':' "${lib.makeLibraryPath [ gpgme ]}" \
+      --prefix PATH ':' "${lib.makeBinPath [ gnupg ]}"
+  '';
+})
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 9d18dbbabb192..ae4090c808c62 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -27646,17 +27646,20 @@ with pkgs;
 
   thonny = callPackage ../applications/editors/thonny { };
 
-  thunderbird = thunderbird-78;
+  thunderbirdPackages = recurseIntoAttrs (callPackage ../applications/networking/mailreaders/thunderbird/packages.nix {
+    callPackage = pkgs.newScope {
+      inherit (rustPackages) cargo rustc;
+      libpng = libpng_apng;
+      gnused = gnused_422;
+      inherit (darwin.apple_sdk.frameworks) CoreMedia ExceptionHandling
+                                            Kerberos AVFoundation MediaToolbox
+                                            CoreLocation Foundation AddressBook;
+      inherit (darwin) libobjc;
+    };
+  });
 
-  thunderbird-78 = callPackage ../applications/networking/mailreaders/thunderbird {
-    # Using older Rust for workaround:
-    # https://bugzilla.mozilla.org/show_bug.cgi?id=1663715
-    inherit (rustPackages_1_45) cargo rustc;
-    libpng = libpng_apng;
-    icu = icu67;
-    libvpx = libvpx_1_8;
-    gtk3Support = true;
-  };
+  thunderbird-unwrapped = thunderbirdPackages.thunderbird;
+  thunderbird = wrapThunderbird thunderbird-unwrapped { };
 
   thunderbolt = callPackage ../os-specific/linux/thunderbolt {};
 
@@ -28276,6 +28279,8 @@ with pkgs;
 
   wrapFirefox = callPackage ../applications/networking/browsers/firefox/wrapper.nix { };
 
+  wrapThunderbird = callPackage ../applications/networking/mailreaders/thunderbird/wrapper.nix { };
+
   wp-cli = callPackage ../development/tools/wp-cli { };
 
   retroArchCores =
diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix
index dfb3b639b278c..571d345d21e5d 100644
--- a/pkgs/top-level/release.nix
+++ b/pkgs/top-level/release.nix
@@ -104,7 +104,7 @@ let
               jobs.nix-info.x86_64-linux
               jobs.nix-info-tested.x86_64-linux
               # Ensure that X11/GTK are in order.
-              jobs.thunderbird.x86_64-linux
+              jobs.thunderbird-unwrapped.x86_64-linux
               jobs.cachix.x86_64-linux
 
               /*