# Contributor: Joseph Benden <joe@benden.us>
# Maintainer: Patrycja Rosa <alpine@ptrcnull.me>
pkgname=thunderbird
pkgver=138.0
pkgrel=1
pkgdesc="Thunderbird email client"
url="https://www.thunderbird.net/"
arch="all !armhf" # blocked by openmp and broken rust neon code
license="GPL-3.0-or-later AND LGPL-2.1-or-later AND MPL-2.0"
depends="libotr librnp"
_llvmver=20
makedepends="
	alsa-lib-dev
	automake
	bsd-compat-headers
	bzip2-dev
	cargo
	cbindgen
	clang$_llvmver
	clang$_llvmver-libclang
	dbus-glib-dev
	gettext
	gtk+3.0-dev
	hunspell-dev
	icu-dev
	json-c-dev
	libevent-dev
	libffi-dev
	libjpeg-turbo-dev
	libnotify-dev
	libogg-dev
	libtheora-dev
	libtool
	libvorbis-dev
	libvpx-dev
	libwebp-dev
	libxcomposite-dev
	libxt-dev
	lld$_llvmver
	llvm$_llvmver-dev
	m4
	mesa-dev
	mimalloc2-insecure
	nasm
	nodejs
	nspr-dev
	nss-dev
	openmp-dev
	pipewire-dev
	pulseaudio-dev
	python3
	rnp-dev
	sed
	wasi-sdk
	wireless-tools-dev
	zip
	"
source="https://ftp.mozilla.org/pub/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz
	abseil-cpp.patch
	bmo-1928504-enable-relr.patch
	bmo-1952657-no-execinfo.patch
	fix-fortify-system-wrappers.patch
	fix-libresolv-path.patch
	fix-rust-target.patch
	fix-webrtc-glibcisms.patch
	lfs64.patch
	metainfo.patch
	no-ccache-stats.patch
	rust-lto-thin.patch
	sandbox-sched_setscheduler.patch
	sqlite-ppc.patch

	loong-skia-lasx.patch
	loong0001-Enable-WebRTC-for-loongarch64.patch
	loong0003-Define-HWCAP_LOONGARCH_LSX_and_LASX.patch
	loong0004-Fix-ycbcr-chromium_types-warning.patch
	loong0005-Fix-libyuv-build-with-LSX-LASX.patch

	stab.h

	mozconfig
	distribution.ini
	mozilla-location.keys
	thunderbird.desktop
	vendor-prefs.js
	"
options="!check" # huge browser thing, skipped like firefox

# secfixes:
#   128.5.0-r0:
#     - CVE-2024-11691
#     - CVE-2024-11692
#     - CVE-2024-11693
#     - CVE-2024-11694
#     - CVE-2024-11695
#     - CVE-2024-11696
#     - CVE-2024-11697
#     - CVE-2024-11699
#   115.10.1-r0:
#     - CVE-2024-3864
#   115.5.0-r0:
#     - CVE-2023-6204
#     - CVE-2023-6205
#     - CVE-2023-6206
#     - CVE-2023-6207
#     - CVE-2023-6208
#     - CVE-2023-6209
#     - CVE-2023-6212
#   115.4.1-r0:
#     - CVE-2023-5721
#     - CVE-2023-5732
#     - CVE-2023-5724
#     - CVE-2023-5725
#     - CVE-2023-5726
#     - CVE-2023-5727
#     - CVE-2023-5728
#     - CVE-2023-5730
#   102.1.0-r0:
#     - CVE-2022-2200
#     - CVE-2022-2226
#     - CVE-2022-31744
#     - CVE-2022-34468
#     - CVE-2022-34470
#     - CVE-2022-34472
#     - CVE-2022-34478
#     - CVE-2022-34479
#     - CVE-2022-34481
#     - CVE-2022-34484
#   102.0-r0:
#     - CVE-2022-2200
#     - CVE-2022-2226
#     - CVE-2022-31744
#     - CVE-2022-34468
#     - CVE-2022-34470
#     - CVE-2022-34472
#     - CVE-2022-34478
#     - CVE-2022-34479
#     - CVE-2022-34481
#     - CVE-2022-34484
#   91.10.0-r0:
#     - CVE-2022-1834
#     - CVE-2022-31736
#     - CVE-2022-31737
#     - CVE-2022-31738
#     - CVE-2022-31739
#     - CVE-2022-31740
#     - CVE-2022-31741
#     - CVE-2022-31742
#     - CVE-2022-31747
#   91.9.1-r0:
#     - CVE-2022-1529
#     - CVE-2022-1802
#   91.9.0-r0:
#     - CVE-2022-1520
#     - CVE-2022-29909
#     - CVE-2022-29911
#     - CVE-2022-29912
#     - CVE-2022-29913
#     - CVE-2022-29914
#     - CVE-2022-29916
#     - CVE-2022-29917
#   91.8.0-r0:
#     - CVE-2022-1097
#     - CVE-2022-1196
#     - CVE-2022-1197
#     - CVE-2022-24713
#     - CVE-2022-28281
#     - CVE-2022-28282
#     - CVE-2022-28285
#     - CVE-2022-28286
#     - CVE-2022-28289
#   91.7.0-r0:
#     - CVE-2022-26381
#     - CVE-2022-26383
#     - CVE-2022-26384
#     - CVE-2022-26386
#     - CVE-2022-26388
#   91.6.2-r0:
#     - CVE-2022-0566
#     - CVE-2022-26485
#     - CVE-2022-26486
#   91.6.0-r0:
#     - CVE-2022-22753
#     - CVE-2022-22754
#     - CVE-2022-22756
#     - CVE-2022-22759
#     - CVE-2022-22760
#     - CVE-2022-22761
#     - CVE-2022-22763
#     - CVE-2022-22764
#   91.5.0-r0:
#     - CVE-2021-4140
#     - CVE-2022-22737
#     - CVE-2022-22738
#     - CVE-2022-22739
#     - CVE-2022-22740
#     - CVE-2022-22741
#     - CVE-2022-22742
#     - CVE-2022-22743
#     - CVE-2022-22744
#     - CVE-2022-22745
#     - CVE-2022-22746
#     - CVE-2022-22747
#     - CVE-2022-22748
#     - CVE-2022-22751
#   91.4.1-r0:
#     - CVE-2021-4126
#     - CVE-2021-44538
#   91.4.0-r0:
#     - CVE-2021-4129
#     - CVE-2021-43528
#     - CVE-2021-43536
#     - CVE-2021-43537
#     - CVE-2021-43538
#     - CVE-2021-43539
#     - CVE-2021-43541
#     - CVE-2021-43542
#     - CVE-2021-43543
#     - CVE-2021-43545
#     - CVE-2021-43546
#   91.3.2-r0:
#     - CVE-2021-23961
#     - CVE-2021-23994
#     - CVE-2021-23995
#     - CVE-2021-23998
#     - CVE-2021-23999
#     - CVE-2021-24002
#     - CVE-2021-29945
#     - CVE-2021-29946
#     - CVE-2021-29948
#     - CVE-2021-29951
#     - CVE-2021-29956
#     - CVE-2021-29957
#     - CVE-2021-29964
#     - CVE-2021-29967
#     - CVE-2021-29969
#     - CVE-2021-29970
#     - CVE-2021-29976
#     - CVE-2021-29980
#     - CVE-2021-29980
#     - CVE-2021-29981
#     - CVE-2021-29982
#     - CVE-2021-29984
#     - CVE-2021-29985
#     - CVE-2021-29986
#     - CVE-2021-29987
#     - CVE-2021-29988
#     - CVE-2021-29989
#     - CVE-2021-29991
#     - CVE-2021-30547
#     - CVE-2021-32810
#     - CVE-2021-38492
#     - CVE-2021-38493
#     - CVE-2021-38495
#     - CVE-2021-38496
#     - CVE-2021-38497
#     - CVE-2021-38498
#     - CVE-2021-38500
#     - CVE-2021-38501
#     - CVE-2021-38502
#     - CVE-2021-38503
#     - CVE-2021-38504
#     - CVE-2021-38505
#     - CVE-2021-38506
#     - CVE-2021-38507
#     - CVE-2021-38508
#     - CVE-2021-38509
#     - CVE-2021-38510
#     - CVE-2021-43534
#     - CVE-2021-43535
#   78.9.0-r0:
#     - CVE-2021-23968
#     - CVE-2021-23969
#     - CVE-2021-23973
#     - CVE-2021-23978
#     - CVE-2021-23981
#     - CVE-2021-23982
#     - CVE-2021-23984
#     - CVE-2021-23987
#   78.7.0-r0:
#     - CVE-2020-15685
#     - CVE-2020-26976
#     - CVE-2021-23953
#     - CVE-2021-23954
#     - CVE-2021-23960
#     - CVE-2021-23964
#   78.6.1-r0:
#     - CVE-2020-16044
#     - CVE-2020-16042
#     - CVE-2020-26971
#     - CVE-2020-26973
#     - CVE-2020-26974
#     - CVE-2020-26978
#     - CVE-2020-35111
#     - CVE-2020-35112
#     - CVE-2020-35113
#   78.5.1-r0:
#     - CVE-2020-15683
#     - CVE-2020-15969
#     - CVE-2020-15999
#     - CVE-2020-16012
#     - CVE-2020-26950
#     - CVE-2020-26951
#     - CVE-2020-26953
#     - CVE-2020-26956
#     - CVE-2020-26958
#     - CVE-2020-26959
#     - CVE-2020-26960
#     - CVE-2020-26961
#     - CVE-2020-26965
#     - CVE-2020-26966
#     - CVE-2020-26968
#     - CVE-2020-26970
#   68.10.0-r0:
#     - CVE-2020-12417
#     - CVE-2020-12418
#     - CVE-2020-12419
#     - CVE-2020-12420
#     - CVE-2020-12421
#   68.9.0-r0:
#     - CVE-2020-12398
#     - CVE-2020-12399
#     - CVE-2020-12405
#     - CVE-2020-12406
#     - CVE-2020-12410
#   68.8.0-r0:
#     - CVE-2020-12387
#     - CVE-2020-12392
#     - CVE-2020-12393
#     - CVE-2020-12395
#     - CVE-2020-12397
#     - CVE-2020-6831
#   68.7.0-r0:
#     - CVE-2020-6819
#     - CVE-2020-6820
#     - CVE-2020-6821
#     - CVE-2020-6822
#     - CVE-2020-6825
#   68.6.0-r0:
#     - CVE-2019-20503
#     - CVE-2020-6805
#     - CVE-2020-6806
#     - CVE-2020-6807
#     - CVE-2020-6811
#     - CVE-2020-6812
#     - CVE-2020-6814
#   68.5.0-r0:
#     - CVE-2020-6793
#     - CVE-2020-6794
#     - CVE-2020-6795
#     - CVE-2020-6797
#     - CVE-2020-6798
#     - CVE-2020-6792
#     - CVE-2020-6800

_mozappdir=/usr/lib/thunderbird

# help our shared-object scanner to find the libs
ldpath="$_mozappdir"
sonameprefix="$pkgname:"

# we need this because cargo verifies checksums of all files in vendor
# crates when it builds and gives us no way to override or update the
# file sanely... so just clear out the file list

_clear_vendor_checksums() {
	sed -i 's/\("files":{\)[^}]*/\1/' third_party/rust/$1/.cargo-checksum.json
}

prepare() {
	default_prepare
	cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/

	export CFLAGS="${CFLAGS/-fstack-clash-protection/} -g0 -O2"
	export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/} -g0 -O2 -Wno-deprecated-builtins -Wno-deprecated-declarations"

	_clear_vendor_checksums audio_thread_priority
	_clear_vendor_checksums libc

	base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key

	# XXX: fix transparency in icon
	sed -i '/^<rect/d' comm/mail/branding/thunderbird/TB-symbolic.svg
}

build() {
	export MOZ_BUILD_DATE="$(date ${SOURCE_DATE_EPOCH:+ -d@${SOURCE_DATE_EPOCH}} "+%Y%m%d%H%M%S")"

	# for lto
	ulimit -n 4096

	# can't be set here and fail
	unset RUSTFLAGS

	local thinlto_jobs=${JOBS:-1}
	local link_threads=${JOBS:-1}

	case "$CARCH" in
	# on this platform, lld seems to not utilise >1 threads for thinlto for some reason.
	# at the same time, having more than 8 also crashes lld for firefox buildsystems (why?).
	aarch64|s390x)
		if [ $thinlto_jobs -gt 8 ]; then
			thinlto_jobs=8
		fi
		;;
	esac

	case "$CARCH" in
	arm*|x86|s390x)
		link_threads=1
		;;
	esac

	export LDFLAGS="$LDFLAGS -Wl,--thinlto-jobs=$thinlto_jobs -Wl,--threads=$link_threads"

	export SHELL=/bin/sh
	export BUILD_OFFICIAL=1
	export MOZILLA_OFFICIAL=1
	export USE_SHORT_LIBNAME=1
	export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
	export MOZBUILD_STATE_PATH="$srcdir"/mozbuild
	# disable desktop notifications
	export MOZ_NOSPAM=1
	# Find our triplet JSON
	export RUST_TARGET="$CTARGET"

	# has to be the same version or older than lld
	export CC="clang-$_llvmver"
	export CXX="clang++-$_llvmver"

	# set rpath so linker finds the libs
	export LDFLAGS="$LDFLAGS -Wl,-rpath,$_mozappdir"

	# let thunderbird do this itself.
	unset CARGO_PROFILE_RELEASE_OPT_LEVEL
	unset CARGO_PROFILE_RELEASE_LTO

	export CBUILD CHOST builddir
	envsubst < "$srcdir"/mozconfig > base-mozconfig

	export MOZCONFIG=base-mozconfig

	case "$CARCH" in
	# lto for 64-bit systems only
	aarch64|x86_64|ppc64le)
		cat > lto-mozconfig base-mozconfig <<-EOF
		ac_add_options --enable-lto=cross
		EOF
		export MOZCONFIG=lto-mozconfig
	esac

	case "$CARCH" in
	# mimalloc clashes with scudo in a weird way here
	x86) ;;
	# default allocator returns oom ( and, in turn, std::bad_alloc in clang )
	# at even ~70% of host memory usage
	*)
		export LD_PRELOAD=/usr/lib/libmimalloc-insecure.so.2
		;;
	esac

	./mach build
}

package() {
	DESTDIR="$pkgdir" ./mach install

	local _png
	for _png in "$builddir"/comm/mail/branding/thunderbird/default*.png; do
		local i=${_png%.png}
		i=${i##*/default}
		install -Dm644 "$_png" "$pkgdir"/usr/share/icons/hicolor/"$i"x"$i"/apps/thunderbird.png
	done

	install -Dm644 "$builddir"/comm/mail/branding/thunderbird/TB-symbolic.svg \
		"$pkgdir"/usr/share/icons/hicolor/symbolic/apps/thunderbird-symbolic.svg

	install -Dm644 "$builddir"/comm/mail/branding/thunderbird/net.thunderbird.Thunderbird.appdata.xml \
		-t "$pkgdir"/usr/share/metainfo

	install -Dm644 "$srcdir"/thunderbird.desktop \
		-t "$pkgdir"/usr/share/applications

	install -Dm644 "$srcdir"/vendor-prefs.js \
		-t "$pkgdir"/$_mozappdir/defaults/pref
	install -Dm644 "$srcdir"/distribution.ini \
		-t "$pkgdir"/$_mozappdir/distribution

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

	# Replace duplicate binary with wrapper
	# https://bugzilla.mozilla.org/show_bug.cgi?id=658850
	install -Dm755 /dev/stdin "$pkgdir"/usr/bin/thunderbird <<- EOF
	#!/bin/sh
	exec $_mozappdir/thunderbird "\$@"
	EOF
	rm "$pkgdir"/$_mozappdir/thunderbird-bin
	ln -sfv /usr/bin/thunderbird "$pkgdir"/$_mozappdir/thunderbird-bin
}

sha512sums="
923d76cf0a14f29146e5dcfc75dd9522d465512f6c604de6e0acc0812d4240331c170913a821fc0aa03d5945019577f996053498c9a7c691b21a2678a622ac02  thunderbird-138.0.source.tar.xz
616169325dc7715d3ff558c1846394d992f1a0a9427af5339e84abf3d9e7d85a5f9f6bae218ee3416ef39769a56150ac35881435ac09b976876fd556fddeac38  abseil-cpp.patch
106f168dc37a693e279f821695637e0ac0d3534b07f093ac835c5b11f604ad2f11817bbe9604009e27a2b1410c6584a84fe388621170f511914e3e8aa154639e  bmo-1928504-enable-relr.patch
32c566a1529d36b4816cef80bb56f0723d0ec2e407e5e4a61cd278d40dafa3a3032d5a77497f191989f4954fa3ee539845dd170a596e0b22c6ef5b337405a72e  bmo-1952657-no-execinfo.patch
19eea840aa9c1c21e7bd1f832ec078989fe6f08fca40baa271be7e74f1cffeb5ab8d3218a93e664b8d90a41506dede524e2a5174cd47580866109bc6711ea969  fix-fortify-system-wrappers.patch
0b9f44c3c2c4efaf073d2021357f7ad61f7e8ca316494c35f785723f43e0e9b29712cd22abe02260df43a5c57cf394e8a1e308cab5a001620ed8a458a563fceb  fix-libresolv-path.patch
cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549bc7275606d7ec5c8d8af1335d29da4699db7acd8bc7ff556  fix-rust-target.patch
305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b  fix-webrtc-glibcisms.patch
e75daab5573ec6e28d3940a9bb98304d572dfb26ce7c1709e99fdd75dfa58abce170c96de683f8dc2224ea2e118aa7d78affbd54f99c4e328a4641685d64bd7d  lfs64.patch
79948c0670e4ff1d9dac3b11b64937e58fb73dd9ea405cbebc6777ec96243ac3d8ac820b2ac67c1b39aaa286267da156b00ff28abc40a5071e189637046b9834  metainfo.patch
c0437a6753f3f350968fa12d250efdfe1bea77baf0e4c06b072b5cc9e78c774dbf4506bc536337030d349fb3ba4460097b75b0c7c5b8fb2d39d8b0a392948936  no-ccache-stats.patch
5518b7fa131f1a75a24ebd62288d826f9c977113df86b6f36651047d8dd941952b34c8c5fcbac8eff6656ccfa34f86c0c03304db5ff9331f9627897391ccbf0f  rust-lto-thin.patch
f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e7110695183424a87948de593f3927b2d8509ede3e4fc7bd8a1fad1ce  sandbox-sched_setscheduler.patch
67bc0be3da973e6859256bf9be4df7100837430e6076fc0bd623f504c35e02e6c191e9c5a3a1d202e5ad4d89f874f254a09e164e39c7bfd97bbc8d4c8d0632a5  sqlite-ppc.patch
db85b37c10a0c7c3c68b28e68a46af96c7200354270d551fe17da9f615f19a4606fd431f873354ec33b308248406d5ae83543ccc177c13ddcde5cb6faa766d2d  loong-skia-lasx.patch
10190908796ea681cb9c7726e5f000d010dc438560f1c9574ad52f91b984c92634291453d4f7cdb3a5b5e54c1968513bf78d4dc44f5befa39d58065d0e9c3326  loong0001-Enable-WebRTC-for-loongarch64.patch
bcc6987568082e5471962fed98110c13f9a81de7bba11cd961c2ac6c1240e677dc141d6834bf5755d2d85fc8251e522920dd3d9afae20ed9d9896b632ee9336f  loong0003-Define-HWCAP_LOONGARCH_LSX_and_LASX.patch
f95b3a8338b34c98ae028278fcec3a1ae48d8de9fa9eed54544151ae994b57b8d0ff0e6363632257d3cbe9452bcd93ade5c139cf728d0a149a038a179a0b4016  loong0004-Fix-ycbcr-chromium_types-warning.patch
530a695c6f456db6988d850571b9b640320444fe46aba97371b5553ddad2103fed5e1064b790924dd90af47861807de4386958cabe3bcaa48700f330ce5bd6df  loong0005-Fix-libyuv-build-with-LSX-LASX.patch
0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127  stab.h
19bb6fd7d9f2213dfd87832e083449132681528caf21c75e1c2921cbe78637572814c85eb86172be8553df03be83a28540c7cdbc219f47a3c2d4c6d92579d55a  mozconfig
3d1f85c2cd446a973cf158caada7fbc32cbc890ec5111d6d2ac98862df11d0c80cc52eaec290721c64034be7398ed68a91405f168e13ca71ff1981f51cb60046  distribution.ini
382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15  mozilla-location.keys
5eddbfdbe3f8ed31936c0b9e9e6313aa35f1a75d0a2303c0a0742e06997714b787e444fae1696453e3e146226bf2f7fe2ab5e34b0b2069f05f0ccbc55099de89  thunderbird.desktop
d48e2a328fd756e082e7ccd1b3156b5066b4526c2647fafad9d22189b3413d6a564a4d0b03b37a9670c53d65b5ba4a7af855a7a4a4583e4228ee66510bdb379d  vendor-prefs.js
"
