| |
| pkgname=librewolf |
| version=147.0.1 |
| revision=1 |
| _rev=3 |
| wrksrc=${pkgname}-${version}-${_rev} |
| build_helper="rust" |
| short_desc="LibreWolf web browser" |
| maintainer="index <index@mailbox.org>" |
| license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" |
| homepage="https://librewolf.net/" |
| distfiles="https://codeberg.org/api/packages/librewolf/generic/librewolf-source/${version}-${_rev}/${pkgname}-${version}-${_rev}.source.tar.gz" |
| checksum=ec53e549d9165772bec73d127564098055c414bdab05261e282bfb7d9ba1c1f5 |
|
|
| lib32disabled=yes |
|
|
| _llvmver=21 |
| hostmakedepends="unzip zip pkg-config perl python3 yasm rust |
| cargo llvm${_llvmver} clang${_llvmver} lld${_llvmver} nodejs cbindgen nasm which |
| tar xz $(vopt_if pgo 'xvfb-run dbus mesa-dri vulkan-loader pciutils') |
| $(vopt_if wasi wasi-sdk)" |
| makedepends="nss-devel libjpeg-turbo-devel gtk+3-devel |
| pixman-devel libevent-devel libnotify-devel libvpx-devel libwebp-devel |
| libXrender-devel libXcomposite-devel libSM-devel libXt-devel rust-std |
| libXdamage-devel freetype-devel $(vopt_if wasi wasi-sdk) |
| $(vopt_if alsa alsa-lib-devel) $(vopt_if dbus dbus-glib-devel) |
| $(vopt_if pulseaudio pulseaudio-devel) $(vopt_if xscreensaver libXScrnSaver-devel) |
| $(vopt_if sndio sndio-devel) $(vopt_if jack jack-devel)" |
| depends="nss>=3.72 nspr>=4.32 desktop-file-utils hicolor-icon-theme pciutils" |
|
|
| build_options="alsa jack dbus pulseaudio xscreensaver sndio wayland lto pgo clang wasi debug" |
| build_options_default="alsa jack dbus pulseaudio xscreensaver sndio wayland clang wasi" |
|
|
| if [ "$XBPS_WORDSIZE" != "32" ]; then |
| build_options_default+=" debug" |
| fi |
|
|
| desc_option_lto="Enable Link Time Optimization" |
| desc_option_pgo="Enable Profile-guided Optimization" |
| desc_option_clang="Build with clang" |
| desc_option_wasi="Build wasm sandboxed libraries" |
|
|
| case $XBPS_TARGET_MACHINE in |
| armv[56]*) broken="required NEON extensions are not supported on armv6" ;; |
| ppc64*) ;; |
| ppc*) broken="xptcall bitrot" ;; |
| esac |
|
|
| if [ "$CROSS_BUILD" -a "$build_option_pgo" ]; then |
| broken="pgo can't be enabled for cross-compilation" |
| fi |
|
|
| |
| |
| |
| _clear_vendor_checksums() { |
| sed -i 's/\("files":{\)[^}]*/\1/' third_party/rust/$1/.cargo-checksum.json |
| } |
|
|
| post_extract() { |
| case "$XBPS_TARGET_MACHINE" in |
| *-musl) |
| cp "${FILESDIR}/stab.h" toolkit/crashreporter/google-breakpad/src/ |
| ;; |
| esac |
|
|
| # Mozilla API keys (see https://location.services.mozilla.com/api) |
| # Note: This is for Void Linux use ONLY. |
| echo -n "cd894504-7a2a-4263-abff-ff73ee89ffca" > mozilla-api-key |
| } |
|
|
| post_patch() { |
| : # _clear_vendor_checksums num-traits |
| if [ "$XBPS_TARGET_LIBC" = "musl" ]; then |
| vsed -e '\;sys/single_threaded.h;d' -i config/system-headers.mozbuild |
| fi |
| } |
|
|
| do_build() { |
| export AS="${CC}" |
| export CFLAGS="-O2" |
| export CXXFLAGS="-O2" |
| unset HOST_CFLAGS |
| unset HOST_CXXFLAGS |
| export LDFLAGS="-Wl,-rpath=/usr/lib/librewolf" |
| # export LDFLAGS+="-Wl,--threads=${XBPS_MAKEJOBS}" |
|
|
| if [ "$build_option_clang" ]; then |
| export CC=clang |
| export CXX=clang++ |
| export AR=llvm-ar |
| export NM=llvm-nm |
| export HOST_CC=clang |
| export HOST_CXX=clang++ |
| fi |
|
|
| disable_jemalloc() { |
| if [ "$XBPS_TARGET_LIBC" = "musl" ]; then |
| echo "ac_add_options --disable-jemalloc" |
| fi |
| } |
|
|
| disable_elfhack() { |
| case "$XBPS_TARGET_MACHINE" in |
| x86_64*|i686*|arm*|aarch64*) echo "ac_add_options --disable-elf-hack" ;; |
| esac |
| } |
|
|
| disable_webrtc() { |
| # it seems mozilla has started catching up with google's webrtc |
| # and this newly involves introducing several megabytes of generated |
| # json junk that we just cannot maintain in-tree, additionally they |
| # have indicated that they will be re-generating these frequently |
| # |
| # it is unacceptable to keep a 7MB patch downstream, so disable it |
| # |
| # https://phabricator.services.mozilla.com/D134738 |
| # |
| case "$XBPS_TARGET_MACHINE" in |
| armv7l*) echo "ac_add_options --disable-webrtc" ;; |
| esac |
| |
| # third_party/libwebrtc/common_audio/wav_file.cc:93:2: error: |
| # #error "Need to convert samples to big-endian when reading from WAV file" |
| if [ "$XBPS_TARGET_ENDIAN" = "be" ]; then |
| echo "ac_add_options --disable-webrtc" |
| fi |
| } |
| |
| disable_wasi() { |
| if [ "$build_option_wasi" ]; then |
| echo "ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot" |
| else |
| echo "ac_add_options --without-wasm-sandboxed-libraries" |
| fi |
| } |
| |
| cat <<-! >mozconfig |
| ac_add_options --prefix=/usr |
| ac_add_options --libdir=/usr/lib |
| ac_add_options --host=${XBPS_TRIPLET} |
| ac_add_options --target=${XBPS_CROSS_TRIPLET:-${XBPS_TRIPLET}} |
| ac_add_options --enable-linker=$(vopt_if clang lld bfd) |
| ac_add_options --disable-bootstrap |
| $(vopt_if lto 'ac_add_options --enable-lto=cross') |
| $(vopt_if clang 'ac_add_options --with-libclang-path=/usr/lib') |
|
|
| ac_add_options --enable-application=browser |
| ac_add_options --enable-release |
| ac_add_options --enable-hardening |
| ac_add_options --enable-optimize="\${CFLAGS}" |
| ac_add_options --enable-path-remapping=c,rust |
| ac_add_options --enable-packed-relative-relocs |
| ac_add_options --disable-cargo-incremental |
| ac_add_options --disable-tests |
| ac_add_options --disable-crashreporter |
| ac_add_options --disable-updater |
| ac_add_options --disable-install-strip |
| ac_add_options --disable-strip |
| ac_add_options --disable-profiling |
| $(disable_jemalloc) |
| $(disable_elfhack) |
| $(disable_webrtc) |
| $(disable_wasi) |
| ac_add_options --with-mozilla-api-keyfile="${wrksrc}/mozilla-api-key" |
| ac_add_options --enable-system-pixman |
| ac_add_options --with-system-ffi |
| ac_add_options --with-system-jpeg |
| ac_add_options --with-system-libevent |
| ac_add_options --with-system-libvpx |
| ac_add_options --with-system-nspr |
| ac_add_options --with-system-nss |
| ac_add_options --with-system-webp |
| ac_add_options --with-system-zlib |
| # XXX: the system's libpng doesn't have APNG support |
| ac_add_options --without-system-png |
| ac_add_options --with-unsigned-addon-scopes=app,system |
| ac_add_options --allow-addon-sideload |
| ac_add_options $(vopt_enable dbus) |
| ac_add_options $(vopt_enable dbus necko-wifi) |
| ac_add_options --disable-audio-backends |
| ac_add_options $(vopt_enable alsa) |
| ac_add_options $(vopt_enable jack) |
| ac_add_options $(vopt_enable pulseaudio) |
| ac_add_options $(vopt_enable sndio) |
| ac_add_options --enable-default-toolkit=$(vopt_if wayland 'cairo-gtk3-wayland' 'cairo-gtk3') |
|
|
| mk_add_options MOZ_OBJDIR="${wrksrc}/obj" |
|
|
| # LibreWolf |
| MOZ_APP_REMOTINGNAME=librewolf |
| ac_add_options --disable-debug |
| ac_add_options --disable-default-browser-agent |
| # ac_add_options --enable-rust-simd |
|
|
| ac_add_options --with-app-name=librewolf |
| ac_add_options --with-branding=browser/branding/librewolf |
| ac_add_options --with-l10n-base=$PWD/lw/l10n |
|
|
| export MOZ_REQUIRE_SIGNING= |
|
|
| mk_add_options MOZ_CRASHREPORTER=0 |
| mk_add_options MOZ_DATA_REPORTING=0 |
| mk_add_options MOZ_SERVICES_HEALTHREPORT=0 |
| mk_add_options MOZ_TELEMETRY_REPORTING=0 |
| ! |
|
|
| # XXX: setting --enable-debug/--enable-debug-symbols explicitly |
| # seems to result in a laggy/crashy firefox. |
| if [ -z "$build_option_debug" ]; then |
| echo "ac_add_options --disable-debug-symbols" >>mozconfig |
| echo "ac_add_options --disable-debug" >>mozconfig |
| fi |
|
|
| # work around large debug symbols on 32-bit hosts |
| if [ "$XBPS_WORDSIZE" = "32" ]; then |
| echo "ac_add_options --disable-debug-symbols" >>mozconfig |
| echo "ac_add_options --disable-debug" >>mozconfig |
| export LDFLAGS+=" -Wl,--no-keep-memory" |
| fi |
|
|
| if [ "$SOURCE_DATE_EPOCH" ]; then |
| export MOZ_BUILD_DATE=$(date --date "@$SOURCE_DATE_EPOCH" "+%Y%m%d%H%M%S") |
| fi |
|
|
| export MOZ_MAKE_FLAGS="${makejobs}" |
| export MOZ_NOSPAM=1 |
| export MOZBUILD_STATE_PATH="${wrksrc}/mozbuild" |
| export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system |
|
|
| rm -f old-configure |
|
|
| if [ "$build_option_pgo" ]; then |
| cp mozconfig{,.orig} |
| echo "ac_add_options --enable-profile-generate=cross" >> mozconfig |
|
|
| ./mach build |
| ./mach package |
| LLVM_PROFDATA=llvm-profdata \ |
| JARLOG_FILE="$PWD/jarlog" \ |
| GDK_BACKEND=x11 \ |
| LD_LIBRARY_PATH="$PWD/obj/dist/firefox" \ |
| XDG_RUNTIME_DIR="$(mktemp -d "${wrksrc}/pgo-runtime-XXXXXX")" \ |
| MOZ_ENABLE_WAYLAND=0 \ |
| xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" \ |
| dbus-run-session -- ./mach python build/pgo/profileserver.py |
|
|
| test -s merged.profdata |
| test -s jarlog |
|
|
| ./mach clobber objdir |
|
|
| cp mozconfig{.orig,} |
| cat <<-! >>mozconfig |
| ac_add_options --enable-lto=cross,full |
| ac_add_options --enable-profile-use=cross |
| ac_add_options --with-pgo-profile-path=${PWD@Q}/merged.profdata |
| ac_add_options --with-pgo-jarlog=${PWD@Q}/jarlog |
| ! |
| fi |
|
|
| ./mach build |
| } |
|
|
| do_install() { |
| export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system |
| export MOZBUILD_STATE_PATH="${wrksrc}/mozbuild" |
| DESTDIR="$DESTDIR" ./mach install |
|
|
| vinstall ${FILESDIR}/vendor.js 644 usr/lib/librewolf/browser/defaults/preferences |
| vinstall ${FILESDIR}/librewolf.desktop 644 /usr/share/applications/ |
|
|
| for i in 16x16 32x32 48x48 64x64 128x128; do |
| vinstall ${wrksrc}/browser/branding/librewolf/default${i%x*}.png 644 \ |
| usr/share/icons/hicolor/${i}/apps librewolf.png |
| done |
|
|
| # We don't want the development stuff |
| rm -rf ${DESTDIR}/usr/{include,lib/firefox-devel,share/idl} |
| |
| # https://bugzilla.mozilla.org/show_bug.cgi?id=658850 |
| ln -sf librewolf ${DESTDIR}/usr/lib/librewolf/librewolf-bin |
| |
| ln -sf librewolf ${DESTDIR}/usr/bin/librewolf-wayland |
| } |