1
0
mirror of https://aur.archlinux.org/firedragon.git synced 2024-12-25 20:24:14 +00:00
firedragon/PKGBUILD

423 lines
14 KiB
Bash
Raw Normal View History

2021-05-25 10:25:32 +00:00
# Maintainer: dr460nf1r3 <dr460nf1r3 at garudalinux dot org>
2023-08-09 00:54:06 +00:00
# Co-Maintainer: FGD
2021-03-03 10:22:28 +00:00
2024-03-19 21:54:43 +00:00
# Three-stage profile-guided optimization
: ${_build_pgo:=true}
# Profile with xvfb-run, if possible
: ${_build_pgo_xvfb:=false}
2021-03-03 10:22:28 +00:00
pkgname=firedragon
_pkgname=FireDragon
pkgver=11.12.0
_floorp_core_commit="c54e98bdcb80c3dd9e10fe668d9f1b052ac23e62"
_floorp_l10n_commit="b7a652ebf828e1c695a19903a568505d818463d2"
_floorp_private_commit="fd03f5cc34377591f63a293e82f0b5eb55a8c5fc"
2024-02-25 20:36:47 +00:00
pkgrel=1
epoch=1
pkgdesc="Floorp fork build using custom branding and settings"
url='https://garudalinux.org'
arch=('x86_64')
license=('MPL2' 'Floorp Shared Source License')
depends=(dbus
dbus-glib
ffmpeg
gtk3
libevent
libjpeg
libpulse
libvpx
libwebp
libxss
libxt
mime-types
nss
pipewire
ttf-font
zlib)
makedepends=(cbindgen
clang
diffutils
dump_syms
imagemagick
imake
inetutils
git
jack
lld
llvm
mesa
mold
nasm
nodejs
python
rust
unzip
wasi-compiler-rt
wasi-libc
wasi-libc++
wasi-libc++abi
xorg-server-xvfb
yasm
zip)
optdepends=('hunspell-dictionary: Spell checking'
'libnotify: Notification integration'
'networkmanager: Location detection via available WiFi networks'
'profile-sync-daemon: Load the browser profile into RAM'
'pulseaudio: Audio support'
'searx: Searching the web using a locally running searX instance'
'speech-dispatcher: Text-to-Speech'
'whoogle: Searching the web using a locally running Whoogle instance'
'xdg-desktop-portal: Screensharing with Wayland')
replaces=(firedragon-next)
options=(!debug
!emptydirs
!lto
!makeflags
!strip)
backup=("usr/lib/${pkgname}/${pkgname}.cfg"
"usr/lib/${pkgname}/distribution/policies.json")
source=(https://github.com/Floorp-Projects/Floorp/archive/refs/tags/v"${pkgver}".tar.gz
"floorp-core::git+https://github.com/Floorp-Projects/Floorp-core#commit=$_floorp_core_commit"
"floorp-l10n-central::git+https://github.com/Floorp-Projects/Unified-l10n-central#commit=$_floorp_l10n_commit"
"floorp-private::git+https://github.com/floorp-Projects/Floorp-private-components#commit=$_floorp_private_commit"
"common::git+https://gitlab.com/garuda-linux/firedragon/common.git"
"settings::git+https://gitlab.com/garuda-linux/firedragon/settings.git"
"${pkgname}.desktop")
sha256sums=('4d1c6b6c69b139e90f2ae6b192f2774f7525eaca265fcb58247a8c0a20a18ae5'
'04659d794809a3e2dcb13e051b8752ddf322364f552d389e9ece28f9285fabab'
'5f9a31c9a7166328ac364b9172e3b40bff822f142976fa009de5ada65a7dd938'
'58d690b35080a70d99a665c7fb8db0d6dfc229a37bdea7ff2111c922687141c7'
'SKIP'
'SKIP'
'53d3e743f3750522318a786befa196237892c93f20571443fdf82a480e7f0560')
install="${pkgname}.install"
2022-08-13 16:31:42 +00:00
2024-03-19 21:54:43 +00:00
# Select the method of profiling
if [[ "${_build_pgo::1}" == "t" ]]; then
if [[ "${_build_pgo_xvfb::1}" == "t" ]]; then
makedepends+=(xorg-server-xvfb)
else
makedepends+=(weston xwayland-run)
fi
2024-03-19 21:54:43 +00:00
fi
2021-03-03 10:22:28 +00:00
prepare() {
# Floorp's shenanigan to make the build work without cloning the whole
# git source (puts submodules' content in place)
mv -f "${srcdir}"/floorp-core/* ./Floorp-"${pkgver}"/floorp
mv -f "${srcdir}"/floorp-private/* ./Floorp-"${pkgver}"/floorp/Floorp-private-components
mv -f "${srcdir}"/floorp-l10n-central/* ./Floorp-"${pkgver}"/floorp/browser/locales/l10n-central
2021-06-07 10:30:59 +00:00
rm -rf "${srcdir}/mozbuild"
mkdir "${srcdir}/mozbuild"
2022-06-01 20:15:10 +00:00
cd Floorp-"${pkgver}" || exit
cat > ../mozconfig << END
ac_add_options --with-app-basename=${_pkgname}
ac_add_options --with-app-name=${pkgname}
ac_add_options --with-branding=browser/branding/firedragon
ac_add_options --with-l10n-base=${PWD@Q}/floorp/browser/locales/l10n-central
2021-03-03 10:22:28 +00:00
ac_add_options --enable-application=browser
2024-03-25 13:18:20 +00:00
ac_add_options --enable-private-components
2021-03-03 10:22:28 +00:00
mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
# Build options
2022-06-30 18:20:45 +00:00
ac_add_options --disable-bootstrap
ac_add_options --disable-elf-hack
2022-06-30 18:20:45 +00:00
ac_add_options --enable-default-toolkit=cairo-gtk3-wayland
ac_add_options --enable-hardening
ac_add_options --enable-linker=mold
2022-06-30 18:20:45 +00:00
ac_add_options --enable-release
ac_add_options --enable-rust-simd
ac_add_options --enable-wasm-simd
2022-06-30 18:20:45 +00:00
ac_add_options --prefix=/usr
ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot
export MOZ_INCLUDE_SOURCE_INFO=1
2021-03-03 10:22:28 +00:00
# Branding
2022-06-20 18:52:56 +00:00
ac_add_options --allow-addon-sideload
ac_add_options --enable-unverified-updates
ac_add_options --enable-update-channel=release
2022-06-20 18:52:56 +00:00
ac_add_options --with-distribution-id=org.garudalinux
2021-03-03 10:22:28 +00:00
ac_add_options --with-unsigned-addon-scopes=app,system
export MOZILLA_OFFICIAL=1
export MOZ_APP_REMOTINGNAME=${pkgname}
export MOZ_CRASHREPORTER=
export MOZ_DATA_REPORTING=
export MOZ_REQUIRE_SIGNING=
export MOZ_SERVICES_HEALTHREPORT=
export MOZ_TELEMETRY_REPORTING=
2021-03-24 14:24:32 +00:00
2021-03-03 10:22:28 +00:00
# System libraries
ac_add_options --with-system-jpeg
ac_add_options --with-system-libevent
ac_add_options --with-system-libvpx
2021-03-03 10:22:28 +00:00
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
ac_add_options --with-system-webp
ac_add_options --with-system-zlib
2021-03-03 10:22:28 +00:00
# Features
ac_add_options --disable-crashreporter # (Minimize telemetry)
ac_add_options --disable-debug
ac_add_options --disable-debug-js-modules
ac_add_options --disable-debug-symbols
ac_add_options --disable-default-browser-agent
ac_add_options --disable-gpsd
ac_add_options --disable-necko-wifi
ac_add_options --disable-parental-controls # (Disable local/OS MTIM)
ac_add_options --disable-rust-tests
ac_add_options --disable-synth-speechd
ac_add_options --disable-tests
ac_add_options --disable-updater
ac_add_options --disable-warnings-as-errors
ac_add_options --disable-webspeech
ac_add_options --disable-webspeechtestbackend
2021-05-25 10:25:32 +00:00
ac_add_options --enable-alsa
ac_add_options --enable-av1
ac_add_options --enable-eme=widevine
2021-05-25 10:25:32 +00:00
ac_add_options --enable-jack
ac_add_options --enable-jxl
ac_add_options --enable-proxy-bypass-protection
ac_add_options --enable-pulseaudio
ac_add_options --enable-raw
ac_add_options --enable-sandbox
ac_add_options --enable-strip
# Optimization
ac_add_options --enable-optimize=-O3
ac_add_options --enable-lto=cross,full
ac_add_options OPT_LEVEL="3"
ac_add_options RUSTC_OPT_LEVEL="3"
# Other
export AR=llvm-ar
export CC=clang
export CXX=clang++
export NM=llvm-nm
export RANLIB=llvm-ranlib
2021-03-03 10:22:28 +00:00
END
local _patches_dir
_patches_dir="${srcdir}/common/patches"
local _floorp_patches_dir
_floorp_patches_dir="${srcdir}/common/patches/floorp/"
_patch() {
printf 'Patching %s ...\n' "$1"
patch -Np1 -i "$1"
}
# Remove some pre-installed addons that might be questionable
_patch "${_floorp_patches_dir}"/remove_addons.patch
# Stop some undesired requests (https://gitlab.com/librewolf-community/browser/common/-/issues/10)
_patch "${_floorp_patches_dir}"/sed-patches/stop-undesired-requests.patch
# Assorted patches
_patch "${_floorp_patches_dir}"/urlbarprovider-interventions.patch
# Allow uBlockOrigin to run in private mode by default, without user intervention
_patch "${_floorp_patches_dir}"/allow-ubo-private-mode.patch
# Add custom uBO assets (on first launch only)
_patch "${_floorp_patches_dir}"/custom-ubo-assets-bootstrap-location.patch
# Allows hiding the password manager (from the lw pref pane) / via a pref
_patch "${_floorp_patches_dir}"/hide-passwordmgr.patch
# Add Firedragon Preferences Pane
_patch "${_patches_dir}"/pref-pane/pref-pane-small.patch
cp "${_patches_dir}/pref-pane/category-firedragon.svg" browser/themes/shared/preferences/category-firedragon.svg
cp "${_patches_dir}/pref-pane/firedragon.css" browser/themes/shared/preferences/firedragon.css
cp "${_patches_dir}/pref-pane/firedragon.inc.xhtml" browser/components/preferences/firedragon.inc.xhtml
cp "${_patches_dir}/pref-pane/firedragon.js" browser/components/preferences/firedragon.js
cat < "${_patches_dir}/pref-pane/preferences.ftl" >> browser/locales/en-US/browser/preferences/preferences.ftl
# Update privacy preferences -- DISABLED to test UI changes and allow user to easily change the setting
# _patch "${_patches_dir}"/custom/privacy-preferences.patch
rm -f "${srcdir}"/common/source_files/mozconfig
cp -r "${srcdir}"/common/source_files/* ./
2021-03-03 10:22:28 +00:00
}
build() {
cd Floorp-"${pkgver}" || exit
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=pip
export MOZBUILD_STATE_PATH="${srcdir}/mozbuild"
export MOZ_ENABLE_FULL_SYMBOLS=1
export MOZ_NOSPAM=1
export MOZ_PROFILER_STARTUP=1 # Starts the profiler is started as early as possible during startup.
# Fix DRI/zink issues during compilation
export LIBGL_ALWAYS_SOFTWARE=true
# Malloc_usable_size is used in various parts of the codebase
CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
# LTO needs more open files
ulimit -n 4096
# Do 3-tier PGO
if [[ "${_build_pgo::1}" == "t" ]]; then
local _old_profdata="${SRCDEST:-$startdir}/merged.profdata"
local _old_jarlog="${SRCDEST:-$startdir}/jarlog"
# Restore old profile
if [[ "${_build_pgo_reuse::1}" == "t" ]]; then
if [[ -s "$_old_profdata" ]]; then
echo "Restoring old profile data."
cp --reflink=auto -f "$_old_profdata" merged.profdata
fi
if [[ -s "$_old_jarlog" ]]; then
echo "Restoring old jar log."
cp --reflink=auto -f "$_old_jarlog" jarlog
fi
fi
# Make new profile
if [[ "${_build_pgo_reuse::1}" != "t" ]] || [[ ! -s merged.profdata ]]; then
echo "Building instrumented browser..."
cat > .mozconfig ../mozconfig
echo >> .mozconfig "ac_add_options --enable-profile-generate=cross"
./mach build
echo "Profiling instrumented browser..."
./mach package
if [[ "${_build_pgo_xvfb::1}" == "t" ]]; then
local _headless_run=(
xvfb-run
-s "-screen 0 1920x1080x24 -nolisten local"
)
else
local _headless_run=(
wlheadless-run
-c weston --width=1920 --height=1080
)
fi
LLVM_PROFDATA=llvm-profdata JARLOG_FILE=${PWD@Q}/jarlog \
"${_headless_run[@]}" -- ./mach python build/pgo/profileserver.py
echo "Removing instrumented browser..."
./mach clobber
fi
echo "Building optimized browser..."
cat > .mozconfig ../mozconfig
if [[ -s merged.profdata ]]; then
stat -c "Profile data found (%s bytes)" merged.profdata
echo >> .mozconfig "ac_add_options --enable-profile-use=cross"
echo >> .mozconfig "ac_add_options --with-pgo-profile-path='${PWD@Q}/merged.profdata'"
# save profdata for reuse
cp --reflink=auto -f merged.profdata "$_old_profdata"
else
echo "Profile data not found."
fi
if [[ -s jarlog ]]; then
stat -c "Jar log found (%s bytes)" jarlog
echo >> .mozconfig "ac_add_options --with-pgo-jarlog='${PWD@Q}/jarlog'"
# save jarlog for reuse
cp --reflink=auto -f jarlog "$_old_jarlog"
else
echo "Jar log not found."
fi
./mach build
else
echo "Building browser..."
cat > .mozconfig ../mozconfig
./mach build
fi
echo "Building symbol archive..."
./mach buildsymbols
2021-03-03 10:22:28 +00:00
}
package() {
cd Floorp-"${pkgver}" || exit
DESTDIR="${pkgdir}" ./mach install
2021-03-03 10:22:28 +00:00
rm "${pkgdir}/usr/lib/${pkgname}/pingsender"
local vendorjs="${pkgdir}/usr/lib/${pkgname}/browser/defaults/preferences/vendor.js"
install -Dvm644 /dev/stdin "${vendorjs}" << END
// Use LANG environment variable to choose locale
pref("intl.locale.requested", "");
2021-03-03 10:22:28 +00:00
// Use system-provided dictionaries
pref("spellchecker.dictionary_path", "/usr/share/hunspell");
// Disable default browser checking.
pref("browser.shell.checkDefaultBrowser", false);
2021-03-03 10:22:28 +00:00
// Don't disable extensions in the application directory
pref("extensions.autoDisableScopes", 11);
2021-03-03 10:22:28 +00:00
// Enable GNOME Shell search provider
pref("browser.gnome-search-provider.enabled", true);
END
local distini="${pkgdir}/usr/lib/${pkgname}/distribution/distribution.ini"
install -Dvm644 /dev/stdin "${distini}" << END
2021-03-03 10:22:28 +00:00
[Global]
id=${pkgname}
version=${pkgver}-${pkgrel}
about=${pkgdesc}
2021-03-03 10:22:28 +00:00
[Preferences]
app.distributor=garudalinux
app.distributor.channel=${pkgname}
2021-03-03 10:22:28 +00:00
app.partner.garudalinux=garudalinux
END
# Use system certificates
local nssckbi="${pkgdir}/usr/lib/${pkgname}/libnssckbi.so"
if [[ -e "${nssckbi}" ]]; then
ln -srfv "${pkgdir}/usr/lib/libnssckbi.so" "${nssckbi}"
fi
# Make native messaging work
ln -s "/usr/lib/mozilla/native-messaging-hosts" "${pkgdir}/usr/lib/${pkgname}/native-messaging-hosts"
# GNOME search provider
local sprovider="$pkgdir/usr/share/gnome-shell/search-providers/$pkgname.search-provider.ini"
install -Dvm644 /dev/stdin "$sprovider" << END
[Shell Search Provider]
DesktopId=$pkgname.desktop
BusName=org.mozilla.${pkgname//-/}.SearchProvider
ObjectPath=/org/mozilla/${pkgname//-/}/SearchProvider
Version=2
2021-03-03 10:22:28 +00:00
END
# Application icons
for i in 16 32 48 64 128; do
install -Dvm644 browser/branding/firedragon/default$i.png \
"${pkgdir}/usr/share/icons/hicolor/${i}x${i}/apps/${pkgname}.png"
done
install -Dvm644 browser/branding/firedragon/content/about-logo.png \
"${pkgdir}/usr/share/icons/hicolor/192x192/apps/${pkgname}.png"
# Replace duplicate binary with wrapper
# https://bugzilla.mozilla.org/show_bug.cgi?id=658850
ln -srfv "$pkgdir/usr/bin/$pkgname" "$pkgdir/usr/lib/$pkgname/${pkgname%-*}-bin"
# All the needed configuration files
install -Dvm644 "../${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop"
install -Dvm644 "${srcdir}/settings/firedragon.cfg" "${pkgdir}/usr/lib/${pkgname}/firedragon.cfg"
install -Dvm644 "${srcdir}/settings/firedragon.psd" "${pkgdir}/usr/share/psd/browsers/firedragon"
install -Dvm644 "${srcdir}/settings/defaults/pref/local-settings.js" "${pkgdir}/usr/lib/${pkgname}/defaults/pref/local-settings.js"
install -Dvm644 "${srcdir}/settings/distribution/policies.json" "${pkgdir}/usr/lib/${pkgname}/distribution/policies.json"
2021-03-03 10:22:28 +00:00
}