# Maintainer (Arch): Levente Polyak <anthraxx[at]archlinux[dot]org>
# Contributor (Arch): Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
# Contributor (Arch): Ionut Biru <ibiru@archlinux.org>
# Contributor (Arch): Alexander Baldeck <alexander@archlinux.org>
# Contributor (Arch): Dale Blount <dale@archlinux.org>
# Contributor (Arch): Anders Bostrom <anders.bostrom@home.se>
# Maintainer: Andreas Grapentin <andreas@grapentin.org>
# Contributor: André Silva <emulatorman@hyperbola.info>
# Contributor: Márcio Silva <coadde@hyperbola.info>
# Contributor: Luke R. <g4jc@openmailbox.org>
# Contributor: Isaac David <isacdaavid@isacdaavid.info>
# Contributor: bill-auger <bill-auger@programmer.net>

# parabola changes and rationale:
#  - rebranded to icedove
#  - added makedepends: quilt mozilla-searchplugins python2-blessings
#  - added replaces, conflicts: thunderbird
#  - disabled tests, they break in an environment without network access.
#  - disabled geo-location
#  - removed nonfree search engines
#  - removed support for insecure chat protocols

_pkgname=thunderbird
pkgname=icedove
replaces=("$_pkgname")
epoch=1
pkgver=68.9.0
pkgrel=1
pkgrel+=.parabola1.nonprism1
_brandingver=68.6
_brandingrel=1
pkgdesc='Standalone mail and news reader based on Mozilla Thunderbird'
pkgdesc+=', without support for unsafe and dangerous for privacy protocols'
url="https://wiki.parabola.nu/$pkgname"
arch=(x86_64)
arch+=(i686 armv7h)
license=(MPL GPL LGPL)
depends=(gtk3 libxt startup-notification mime-types dbus-glib alsa-lib
         nss hunspell sqlite ttf-font) # libvpx
# TODO: depends+=(libicui18n.so libicuuc.so)
depends_armv7h=(icu=65)
depends_i686+=(libicui18n.so libicuuc.so)
depends_x86_64+=(libicui18n.so libicuuc.so)
makedepends=(unzip zip diffutils python python2 yasm nasm mesa imake libpulse inetutils xorg-server-xvfb
             autoconf2.13 rust clang llvm gtk2 cbindgen nodejs)
makedepends+=(quilt mozilla-searchplugins imagemagick)
optdepends=('libcanberra: sound support')
options=(!emptydirs !makeflags)
source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz{,.asc}
        $pkgname.desktop)
source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig}
         libre-searchengines.patch
         mozilla-1338795-regression.patch)
source_armv7h=(arm-wasm-vfp.patch)
sha512sums=('891472c95ba6ff46061131504e89010da512a84b0e1dea0482e603fd4c87f11e099280a245c7dd9fc9320c48229c26602565c089d86f1a1f4271b29b6fc606f0'
            'SKIP'
            'a3c9815491d9bed0440c60f35867a5b8a2a1343521f288035fcc46e651a11b926c75a9eca2d262b43d510a7a7119709b53637f1b00ddbbee8e5b0a4b33d7b8fd'
            '5784493253f9b2b231a7f18d7c3c4a4bb9aec7ac4fa801772ac223342676e388ae0c094b95d89d92c1bd38c2f19feb6f51e074d0ea20228a256b6240ecf34832'
            'SKIP'
            '3f3160441aa17a50b8bf9f95a0fed8e3428864901d7368409903289f069f51fa94e24b6140bf17981b91b55df77c7c29adb870dda9f1596a77ce1a54a62cac00'
            'f4e892fc7af85877ef6cedd82313f6c0f335cb676cfb30badaa127c51aed00773212b99f1598f5709d6f481f12264463d6334bcde8e8da38ec1ea666622d28a1')
sha512sums_armv7h=('c25883c4860e511a99d9fbfba5b824145c0862729101721605725f609ca2a41848b741dd100eff390f57031dc5f14af3ea30133de30f75cb20197c420ae20972')
validpgpkeys=(14F26682D0916CDD81E37B6D61B7B526D98F0353) # Mozilla Software Releases <release@mozilla.com>
validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536) # Andreas Grapentin

prepare() {
  cd $_pkgname-$pkgver

  # see: https://labs.parabola.nu/issues/2267
  # upstream BR: https://bugzilla.mozilla.org/show_bug.cgi?id=1628296
  patch -Np1 -i "$srcdir"/mozilla-1338795-regression.patch

  cat >.mozconfig <<END
ac_add_options --enable-application=comm/mail
ac_add_options --enable-calendar

ac_add_options --prefix=/usr
ac_add_options --enable-release
ac_add_options --enable-linker=gold
ac_add_options --enable-hardening
ac_add_options --enable-optimize
# https://bugzilla.mozilla.org/show_bug.cgi?id=1521249
#ac_add_options --enable-rust-simd
# https://bugzilla.mozilla.org/show_bug.cgi?id=1423822
ac_add_options --disable-elf-hack

# Branding
ac_add_options --disable-official-branding
ac_add_options --with-branding=comm/mail/branding/icedove
ac_add_options --enable-update-channel=release
ac_add_options --with-distribution-id=nu.parabola

# System libraries
ac_add_options --with-system-zlib
ac_add_options --with-system-bz2
ac_add_options --with-system-icu
ac_add_options --with-system-jpeg
# ac_add_options --with-system-libvpx
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
ac_add_options --enable-system-sqlite
ac_add_options --enable-system-ffi

# Features
ac_add_options --enable-alsa
ac_add_options --disable-jack
ac_add_options --enable-startup-notification
ac_add_options --disable-crashreporter
ac_add_options --disable-updater
ac_add_options --disable-gconf
# tests require network access.
ac_add_options --disable-tests
END

  if [[ $CARCH = arm* ]]; then
    patch -Np1 -i "$srcdir"/arm-wasm-vfp.patch

    sed -i '/--enable-linker=gold/d' .mozconfig
    sed -i '/--enable-hardening/d' .mozconfig
    sed -i '/--enable-optimize/d' .mozconfig

    export MOZ_DEBUG_FLAGS=" "
    export CFLAGS+=" -g0"
    export CXXFLAGS+=" -g0"
    export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
    export RUSTFLAGS="-Cdebuginfo=0"

    cat >> .mozconfig <<END
ac_add_options --disable-webrtc
ac_add_options --disable-elf-hack
ac_add_options --enable-optimize="-g0 -O2"
END
  fi

  if [[ $CARCH = i686 ]]; then
    sed -i 's/--enable-linker=gold/--enable-linker=bfd/' .mozconfig
    LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
    export LDFLAGS
  fi

  # perform rebranding
  local brandingdir="$srcdir/$pkgname-$_brandingver"
  rm -rf -- comm/mail/branding/$pkgname
  cp -aT -- $brandingdir/$pkgname-branding/ comm/mail/branding/$pkgname

  export QUILT_PATCHES=$brandingdir/patches
  export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index'
  export QUILT_DIFF_ARGS='--no-timestamps'
  quilt push -av

  # produce icons
  for i in 16 22 24 32; do
    rsvg-convert -w $i -h $i "$brandingdir/app-icons/${pkgname}_small.svg" \
      -o "comm/mail/branding/$pkgname/default$i.png"
  done
  for i in 48 64 128 256; do
    rsvg-convert -w $i -h $i "$brandingdir/app-icons/${pkgname}_big.svg" \
      -o "comm/mail/branding/$pkgname/default$i.png"
  done
  cp "$brandingdir/logo/icedove_icon.svg" "comm/mail/branding/$pkgname/"

  # Patch and remove anything that's left
  patch -Np1 -i "$srcdir/libre-searchengines.patch"
  sed -i '\|Phishing Protection|d
          \|UrlClassifier|d
          \|URLClassifier|d
          \|url-classifier|d
         ' comm/mail/installer/package-manifest.in
  sed -i '\|extensions[.]getAddons[.]get[.]url| s|https://services[.]addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g;
          \|extensions[.]getAddons[.]search[.]browseURL| s|https://addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g;
          \|extensions[.]getAddons[.]search[.]url| s|https://services[.]addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g;
          \|extensions[.]webservice[.]discoverURL| s|https://services[.]addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g;
         ' comm/mail/app/profile/all-thunderbird.js

  sed -i '\|facebook|d
          \|gtalk|d
          \|odnoklassniki|d
          \|skype|d
          \|twitter|d
          \|yahoo|d
         ' comm/chat/moz.build
  sed -i '\|facebook[.]js|d
          \|facebook[.]manifest|d
          \|gtalk[.]js|d
          \|gtalk[.]manifest|d
          \|odnoklassniki[.]js|d
          \|odnoklassniki[.]manifest|d
          \|skype[.]js|d
          \|skype[.]manifest|d
          \|twitter[.]js|d
          \|twitter[.]manifest|d
          \|yahoo[.]js|d
          \|yahoo[.]manifest|d
         ' comm/mail/installer/package-manifest.in
  rm -rv comm/chat/protocols/{facebook,gtalk,odnoklassniki,skype,twitter,yahoo}

  cp -av $srcdir/$pkgname-$_brandingver/preview.png \
    comm/mail/themes/linux/mail/preview.png

  # Load our searchplugins
  rm -rv comm/suite/locales/en-US/searchplugins
  cp -av /usr/lib/mozilla/searchplugins comm/suite/locales/en-US/
}

build() {
  cd $_pkgname-$pkgver

  # clang-{9,10,11} -> error: unknown argument: '-fvar-tracking-assignments'
  CFLAGS="${CFLAGS/-fvar-tracking-assignments/}"
  CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}"

  case "${CARCH}" in
    armv*)
      export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
      sed -i "s/\(cargo_rustc_flags += -C lto\)/#\1/" config/rules.mk
      sed -i "s/debug_info = '2'/debug_info = '1'/" build/moz.configure/toolchain.configure
      export MOZ_MAKE_FLAGS=-j1
      ;;
    i686)
      sed -i "s/\(cargo_rustc_flags += -C lto\)/#\1/" config/rules.mk
      sed -i "s/debug_info = '2'/debug_info = '1'/" build/moz.configure/toolchain.configure
      export MOZ_MAKE_FLAGS=-j1
      ;;
  esac

  ./mach configure
  ./mach build
  ./mach buildsymbols
}

package() {
  cd $_pkgname-$pkgver
  DESTDIR="$pkgdir" ./mach install

  _vendorjs="$pkgdir/usr/lib/$pkgname/defaults/preferences/vendor.js"
  install -Dm644 /dev/stdin "$_vendorjs" <<END
// Use LANG environment variable to choose locale
pref("intl.locale.requested", "");

// Use system-provided dictionaries
pref("spellchecker.dictionary_path", "/usr/share/hunspell");

// Disable default mailer checking.
pref("mail.shell.checkDefaultMail", false);

// Don't disable our bundled extensions in the application directory
pref("extensions.autoDisableScopes", 11);
pref("extensions.shownSelectionUI", true);

// Disable Social API for content
pref("social.remote-install.enabled", false);
pref("social.toast-notifications.enabled", false);

// Make sure that whitelisted and directory installs are empty
pref("social.whitelist", "");
pref("social.directories", "");

// Disable the GeoLocation API for content
pref("geo.enabled", false);

// TODO: this "whats new" page should be in the branding package or abslibre
// Pointing the "Help -> What's new" menu entry to mozilla.debian.net
//pref("mailnews.start_page.override_url", "http://wiki.debian.org/Icedove/WhatsNew45");
END

  _distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
  install -Dm644 /dev/stdin "$_distini" <<END
[Global]
id=parabola
version=1.0
about=Icedove for Parabola GNU/Linux-libre

[Preferences]
app.distributor=parabola
app.distributor.channel=$pkgname
app.partner.parabola=parabola
END

  for i in 16 22 24 32 48 64 128 256; do
    install -Dm644 comm/mail/branding/$pkgname/default${i}.png \
      "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png"
  done
  install -Dm644 comm/mail/branding/$pkgname/${pkgname}_icon.svg \
    "$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.svg"

  install -Dm644 ../$pkgname.desktop \
    "$pkgdir/usr/share/applications/$pkgname.desktop"

  # Use system-provided dictionaries
  ln -Ts /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries"
  ln -Ts /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation"

  # Install a wrapper to avoid confusion about binary path
  install -Dm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END
#!/bin/sh
exec /usr/lib/$pkgname/$pkgname "\$@"
END

  # Replace duplicate binary with wrapper
  # https://bugzilla.mozilla.org/show_bug.cgi?id=658850
  ln -srf "$pkgdir/usr/bin/$pkgname" \
    "$pkgdir/usr/lib/$pkgname/$pkgname-bin"
}

