#!/bin/mkpkg # description: Mozilla Thunderbird email client (Extended Support Release) # url: https://www.thunderbird.net/ name=thunderbird-esr _name=thunderbird version=153.5.0esr _version=153.5.0 _patch=153esr-patches-04 release=1 depends=(gtk3 nss nspr libvpx libwebp pixman libffi alsa-lib ffmpeg rnp dbus) makedeps=(rust cbindgen nodejs python3 nasm) source=( https://ftp.mozilla.org/pub/$_name/releases/$version/source/$_name-$version.source.tar.xz https://dev.gentoo.org/~juippis/mozilla/patchsets/firefox-$_patch.tar.xz thunderbird.desktop rawnix.js ) sha256sums=( "f29c5ba3acdf3e756e87f23d30c814c1ad70093a4fb5b383fdf9c51e21cc0baf" "cb1b2331ee17876be71b5b4943177a785d4c11456bd82cca83bf0c7eb26e63e0" "926ad4122618b29bd5424ff43fdc87e5aa006dfe7f569c8773d33ca7b693ab94" "685fb14c8f35b817cc756605ba025b9a5fff4f5c9a44b42647d5cdc949c8d37a" ) patch() { cd $_name-$_version # https://dev.gentoo.org/~juippis for p in "$SRC"/firefox-patches/*.patch; do [ -f "$p" ] && patch -p1 -i "$p" done # musl: allow select() syscall in all sandbox policies awk '/CASES_FOR_poll:/{print; print "#ifdef __NR_select"; print " case __NR_select:"; print "#endif"; next}1' \ security/sandbox/linux/SandboxFilter.cpp > SandboxFilter.tmp mv SandboxFilter.tmp security/sandbox/linux/SandboxFilter.cpp # bindgen: don't panic on unresolved field types when computing union layout (libclang 23) # comm/ carries its own vendored crate set, so patch both copies if present for d in third_party/rust/bindgen comm/third_party/rust/bindgen; do [ -d "$d" ] || continue sed -i 's/ctx\.resolve_type(inner)\.layout(ctx)/ctx.resolve_item_fallible(inner)?.kind().as_type()?.layout(ctx)/' "$d"/ir/ty.rs sed -i 's/ctx\.resolve_type(data\.ty)\.layout(ctx)/ctx.resolve_item_fallible(data.ty)?.kind().as_type()?.layout(ctx)/' "$d"/ir/comp.rs sed -i 's/"files":{[^}]*}/"files":{}/' "$d"/.cargo-checksum.json done } build() { cd $_name-$_version export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none export MOZBUILD_STATE_PATH="$PWD"/mozbuild export MOZ_NOSPAM=1 export SHELL=/bin/bash # musl rust target export RUST_TARGET="x86_64-unknown-linux-musl" # Toolchain export CC=clang CXX=clang++ export AR=llvm-ar NM=llvm-nm RANLIB=llvm-ranlib export AS="clang -c" # Flags export CFLAGS="$CFLAGS -w" export CXXFLAGS="$CXXFLAGS -w" export LDFLAGS="$LDFLAGS -Wl,-rpath=/usr/lib/$name,--enable-new-dtags" export MOZ_DEBUG_FLAGS=-g0 export CXXSTDLIB=c++ export LIBCLANG_PATH=/usr/lib export MOZ_MAKE_FLAGS="-j$(nproc)" # Rustc wrapper: force -crt-static so build scripts can dlopen libclang mkdir -p "$PWD"/rustc-wrap printf '#!/bin/sh\nexec /usr/bin/rustc -Ctarget-feature=-crt-static -Cdebuginfo=0 "$@"\n' \ > "$PWD"/rustc-wrap/rustc chmod +x "$PWD"/rustc-wrap/rustc export PATH="$PWD/rustc-wrap:$PATH" cat > .mozconfig << EOF mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/thunderbird-shared unset MOZ_TELEMETRY_REPORTING ac_add_options --prefix=/usr ac_add_options --libdir=/usr/lib ac_add_options --host=x86_64-unknown-linux-musl ac_add_options --target=x86_64-unknown-linux-musl ac_add_options --enable-release ac_add_options --enable-optimize ac_add_options --enable-strip ac_add_options --enable-install-strip ac_add_options --enable-official-branding ac_add_options --enable-application=comm/mail ac_add_options --enable-project=comm/mail ac_add_options --enable-audio-backends=alsa ac_add_options --enable-dbus ac_add_options --enable-rust-simd ac_add_options --enable-default-toolkit=cairo-gtk3-wayland-only # OpenPGP - use system librnp (which links against system botan) ac_add_options --with-system-librnp # System libraries ac_add_options --with-system-ffi 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 --with-system-pixman ac_add_options --without-system-png ac_add_options --with-system-webp ac_add_options --with-system-zlib ac_add_options --without-wasm-sandboxed-libraries # No Mozilla/Google service keys ac_add_options --without-mozilla-api-keyfile ac_add_options --without-google-location-service-api-keyfile ac_add_options --without-google-safebrowsing-api-keyfile # Disable unused features ac_add_options --disable-jemalloc ac_add_options --disable-elf-hack ac_add_options --disable-tests ac_add_options --disable-updater ac_add_options --disable-crashreporter ac_add_options --disable-debug ac_add_options --disable-debug-symbols ac_add_options --disable-profiling ac_add_options --disable-necko-wifi ac_add_options --disable-webspeech ac_add_options --disable-accessibility ac_add_options --disable-parental-controls ac_add_options --disable-system-extension-dirs ac_add_options --disable-vtune ac_add_options --disable-callgrind ac_add_options --disable-eme ac_add_options --without-onnx-runtime EOF ./mach configure ./mach build DESTDIR="$PKG" ./mach install # ESR rename: mach installs to /usr/lib/thunderbird, move it to /usr/lib/$name # (rpath in LDFLAGS already points at /usr/lib/$name) mv "$PKG"/usr/lib/$_name "$PKG"/usr/lib/$name rm -f "$PKG"/usr/bin/$_name ln -sf /usr/lib/$name/$_name "$PKG"/usr/bin/$name # Desktop integration sed -e "s|^Exec=thunderbird|Exec=$name|" \ -e "s|^Icon=thunderbird|Icon=$name|" \ "$SRC"/thunderbird.desktop > "$SRC"/$name.desktop install -Dm644 "$SRC"/$name.desktop "$PKG"/usr/share/applications/$name.desktop mkdir -p "$PKG"/usr/share/pixmaps ln -sf /usr/lib/$name/chrome/icons/default/default128.png \ "$PKG"/usr/share/pixmaps/$name.png # System-wide privacy prefs (default prefs, user-overridable) install -Dm644 "$SRC"/rawnix.js \ "$PKG"/usr/lib/$name/defaults/pref/rawnix.js # Cleanup rm -f "$PKG"/usr/lib/$name/thunderbird-bin rm -rf "$PKG"/usr/lib/$name/features rm -f "$PKG"/usr/lib/$name/removed-files } signify() { untrusted comment: public key RWTZ9IduCSQ/mL8337TEUinPwT92xFEUpD92hkS7IxcOnzTt9QdpohT3 } # vim: filetype=sh