Files
IronFox/scripts/prebuild.sh

637 lines
27 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#
# Fennec build scripts
# Copyright (C) 2020-2024 Matías Zúñiga, Andrew Nayenko, Tavi
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
set -e
# Include version info
source "$rootdir/scripts/versions.sh"
function localize_maven {
# Replace custom Maven repositories with mavenLocal()
find ./* -name '*.gradle' -type f -exec python3 "$rootdir/scripts/localize_maven.py" {} \;
# Make gradlew scripts call our Gradle wrapper
find ./* -name gradlew -type f | while read -r gradlew; do
echo -e '#!/bin/sh\ngradle "$@"' >"$gradlew"
chmod 755 "$gradlew"
done
}
function remove_glean_telemetry() {
local dir="$1"
local telemetry_url="incoming.telemetry.mozilla.org"
# Set telemetry URL to an invalid localhost address
grep -rnlI "${dir}" -e "${telemetry_url}" | xargs -L1 sed -i -r -e "s|${telemetry_url}|localhost:70000|g"
}
if [ -z "$1" ]; then
echo "Usage: $0 arm|arm64|x86_64|bundle" >&1
exit 1
fi
if [[ -n ${FDROID_BUILD+x} ]]; then
source "$(dirname "$0")/setup-android-sdk.sh"
source "$(dirname "$0")/env_fdroid.sh"
fi
# shellcheck disable=SC2154
if [[ "$env_source" != "true" ]]; then
echo "Use 'source scripts/env_local.sh' before calling prebuild or build"
exit 1
fi
if [ ! -d "$ANDROID_HOME" ]; then
echo "\$ANDROID_HOME($ANDROID_HOME) does not exist."
exit 1
fi
if [ ! -d "$ANDROID_NDK" ]; then
echo "\$ANDROID_NDK($ANDROID_NDK) does not exist."
exit 1
fi
JAVA_VER=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{sub("^$", "0", $2); print $1$2}')
[ "$JAVA_VER" -ge 15 ] || {
echo "Java 17 or newer must be set as default JDK"
exit 1
}
if [[ -z "$FIREFOX_VERSION" ]]; then
echo "\$FIREFOX_VERSION is not set! Aborting..."]
exit 1
fi
if [[ -z "${SB_GAPI_KEY_FILE}" ]]; then
echo "SB_GAPI_KEY_FILE environment variable has not been specified! Safe Browsing will not be supported in this build."
read -p "Do you want to continue [y/N] " -n 1 -r
echo ""
if ! [[ $REPLY =~ ^[Yy]$ ]]; then
echo "Aborting..."
exit 1
fi
fi
# Create build directory
mkdir -vp "$rootdir/build"
# Check patch files
source "$rootdir/scripts/patches.sh"
pushd "$mozilla_release"
if ! check_patches; then
echo "Patch validation failed. Please check the patch files and try again."
exit 1
fi
popd
if [[ -n ${FDROID_BUILD+x} ]]; then
# Set up Rust
# shellcheck disable=SC2154
"$rustup"/rustup-init.sh -y --no-update-default-toolchain
else
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-update-default-toolchain
fi
libclang="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/musl/lib"
echo "...libclang dir set to ${libclang}"
# shellcheck disable=SC1090,SC1091
source "$CARGO_HOME/env"
rustup default "$RUST_VERSION"
rustup target add thumbv7neon-linux-androideabi
rustup target add armv7-linux-androideabi
rustup target add aarch64-linux-android
rustup target add x86_64-linux-android
cargo install --vers "$CBINDGEN_VERSION" cbindgen
# Fenix
# shellcheck disable=SC2154
pushd "$fenix"
# Set up the app ID, version name and version code
sed -i \
-e 's|applicationId "org.mozilla"|applicationId "org.ironfoxoss"|' \
-e 's|applicationIdSuffix ".firefox"|applicationIdSuffix ".ironfox"|' \
-e 's|"sharedUserId": "org.mozilla.firefox.sharedID"|"sharedUserId": "org.ironfoxoss.ironfox.sharedID"|' \
-e "s/Config.releaseVersionName(project)/'${IRONFOX_VERSION}'/" \
app/build.gradle
sed -i \
-e '/android:targetPackage/s/org.mozilla.firefox/org.ironfoxoss.ironfox/' \
app/src/release/res/xml/shortcuts.xml
# Set flag for 'official' builds to ensure we're not enabling debug/dev settings
# https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/27623
# We're also setting the "MOZILLA_OFFICIAL" env variable below
sed -i -e '/MOZILLA_OFFICIAL/s/false/true/' app/build.gradle
echo "official=true" >>local.properties
# Ensure we enable the about:config
# Should be unnecessary since we enforce the 'general.aboutConfig.enable' pref, but doesn't hurt to set anyways...
sed -i -e 's/aboutConfigEnabled(.*)/aboutConfigEnabled(true)/' app/src/*/java/org/mozilla/fenix/*/GeckoProvider.kt
# No-op Glean
# https://searchfox.org/mozilla-central/rev/31123021/mobile/android/fenix/app/build.gradle#443
echo 'glean.custom.server.url="data;"' >>local.properties
# Let it be IronFox
sed -i \
-e 's/Notifications help you stay safer with Firefox/Enable notifications/' \
-e 's/Securely send tabs between your devices and discover other privacy features in Firefox./IronFox can remind you when private tabs are open and show you the progress of file downloads./' \
-e 's/Agree and continue/Continue/' \
-e 's/Address bar - Firefox Suggest/Address bar/' \
-e 's/Firefox Daylight/IronFox/; s/Firefox Fenix/IronFox/; s/Mozilla Firefox/IronFox/; s/Firefox/IronFox/g' \
-e '/about_content/s/Mozilla/IronFox OSS/' \
-e 's/IronFox Suggest/Firefox Suggest/' \
-e 's/Learn more about Firefox Suggest/Learn more about search suggestions/' \
-e 's/Suggestions from %1$s/Suggestions from Mozilla/' \
-e 's/Notifications for tabs received from other IronFox devices/Notifications for tabs received from other devices/' \
-e 's/To send a tab, sign in to IronFox/To send a tab, sign in to a Firefox-based web browser/' \
-e 's/On your computer open IronFox and/On your computer, open a Firefox-based web browser, and/' \
-e 's/Fast and secure web browsing/The private, secure, user first web browser for Android./' \
-e 's/Sync is on/Firefox Sync is on/' \
-e 's/No account?/No Firefox account?/' \
-e 's/to sync IronFox/to sync your browsing data/' \
-e 's/%s will stop syncing with your account/%s will stop syncing with your Firefox account/' \
-e 's/%1$s decides when to use secure DNS to protect your privacy/IronFox will use your systems DNS resolver/' \
-e 's/Use your default DNS resolver if there is a problem with the secure DNS provider/Use your default DNS resolver/' \
-e 's/You control when to use secure DNS and choose your provider/IronFox will use secure DNS with your chosen provider by default, but might fallback to your systems DNS resolver if secure DNS is unavailable/' \
-e '/preference_doh_off_summary/s/Use your default DNS resolver/Never use secure DNS, even if supported by your systems DNS resolver/' \
-e 's/Learn more about sync/Learn more about Firefox Sync/' \
-e 's/search?client=firefox&amp;q=%s/search?q=%s/' \
-e 's/You dont have any tabs open in IronFox on your other devices/You dont have any tabs open on your other devices/' \
-e 's/Google Search/Google search/' \
app/src/*/res/values*/*strings.xml
# Fenix uses reflection to create a instance of profile based on the text of
# the label, see
# app/src/main/java/org/mozilla/fenix/perf/ProfilerStartDialogFragment.kt#185
sed -i \
-e '/Firefox(.*, .*)/s/Firefox/IronFox/' \
-e 's/firefox_threads/ironfox_threads/' \
-e 's/firefox_features/ironfox_features/' \
app/src/main/java/org/mozilla/fenix/perf/ProfilerUtils.kt
# Replace proprietary artwork
rm -vf app/src/release/res/drawable/ic_launcher_foreground.xml
rm -vf app/src/release/res/mipmap-*/ic_launcher.webp
rm -vf app/src/release/res/values/colors.xml
rm -vf app/src/main/res/values-v24/styles.xml
sed -i -e '/android:roundIcon/d' app/src/main/AndroidManifest.xml
sed -i -e '/SplashScreen/,+5d' app/src/main/res/values-v27/styles.xml
mkdir -vp app/src/release/res/mipmap-anydpi-v26
sed -i \
-e 's/googleg_standard_color_18/ic_download/' \
app/src/main/java/org/mozilla/fenix/components/menu/compose/MenuItem.kt \
app/src/main/java/org/mozilla/fenix/compose/list/ListItem.kt
# Remove default built-in search engines
rm -vrf app/src/main/assets/searchplugins/*
# Create wallpaper directories
mkdir -vp app/src/main/assets/wallpapers/algae
mkdir -vp app/src/main/assets/wallpapers/colorful-bubbles
mkdir -vp app/src/main/assets/wallpapers/dark-dune
mkdir -vp app/src/main/assets/wallpapers/dune
mkdir -vp app/src/main/assets/wallpapers/firey-red
# Set up target parameters
case "$1" in
arm)
# APK for armeabi-v7a
abi='"armeabi-v7a"'
target=arm-linux-androideabi
llvmtarget="ARM"
rusttarget=arm
;;
x86_64)
# APK for x86_64
abi='"x86_64"'
target=x86_64-linux-android
llvmtarget="X86_64"
rusttarget=x86_64
;;
arm64)
# APK for arm64-v8a
abi='"arm64-v8a"'
target=aarch64-linux-android
llvmtarget="AArch64"
rusttarget=arm64
;;
bundle)
# AAB for both armeabi-v7a and arm64-v8a
abi='"arm64-v8a", "armeabi-v7a", "x86_64"'
target=''
llvmtarget="AArch64;ARM;X86_64"
rusttarget='arm64,arm,x86_64'
;;
*)
echo "Unknown build variant: '$1'" >&2
exit 1
;;
esac
sed -i -e "s/include \".*\"/include $abi/" app/build.gradle
echo "$llvmtarget" >"$builddir/targets_to_build"
# Enable the auto-publication workflow
# shellcheck disable=SC2154
echo "autoPublish.application-services.dir=$application_services" >>local.properties
# Disable FUS Service or we'll get errors like:
# Exception while loading configuration for :app: Could not load the value of field `__buildFusService__` of task `:app:compileFenixReleaseKotlin` of type `org.jetbrains.kotlin.gradle.tasks.KotlinCompile`.
echo "kotlin.internal.collectFUSMetrics=false" >> local.properties
find "$patches/fenix-overlay" -type f | while read -r src; do
cp -vrf "$src" "${src#"$patches/fenix-overlay/"}"
done
popd
#
# Glean
#
# shellcheck disable=SC2154
pushd "$glean"
echo "rust.targets=linux-x86-64,$rusttarget" >>local.properties
localize_maven
popd
#
# Android Components
#
# shellcheck disable=SC2154
pushd "$android_components"
# Remove default built-in search engines
rm -vrf components/feature/search/src/main/assets/searchplugins/*
# Nuke the "Mozilla Android Components - Ads Telemetry" & "Mozilla Android Components - Search Telemetry" extensions
# We don't install these with fenix-disable-telemetry.patch - so no need to keep the files around...
rm -vrf components/feature/search/src/main/assets/extensions/ads
rm -vrf components/feature/search/src/main/assets/extensions/search
# Remove the 'search telemetry' config...
rm -vf components/feature/search/src/main/assets/search/search_telemetry_v2.json
find "$patches/a-c-overlay" -type f | while read -r src; do
cp -vrf "$src" "${src#"$patches/a-c-overlay/"}"
done
popd
# Application Services
pushd "$application_services"
# Break the dependency on older A-C
sed -i -e "/^android-components = \"/c\\android-components = \"${FIREFOX_VERSION}\"" gradle/libs.versions.toml
echo "rust.targets=linux-x86-64,$rusttarget" >>local.properties
sed -i -e '/NDK ez-install/,/^$/d' libs/verify-android-ci-environment.sh
sed -i -e '/content {/,/}/d' build.gradle
localize_maven
# Fix stray
sed -i -e '/^ mavenLocal/{n;d}' tools/nimbus-gradle-plugin/build.gradle
# Fail on use of prebuilt binary
sed -i 's|https://|hxxps://|' tools/nimbus-gradle-plugin/src/main/groovy/org/mozilla/appservices/tooling/nimbus/NimbusGradlePlugin.groovy
patch -p1 --no-backup-if-mismatch --quiet < "$patches/ac-disable-nimbus.patch"
popd
# WASI SDK
# shellcheck disable=SC2154
if [[ -n ${FDROID_BUILD+x} ]]; then
pushd "$wasi"
patch -p1 --no-backup-if-mismatch --quiet <"$mozilla_release/taskcluster/scripts/misc/wasi-sdk.patch"
popd
export wasi_install=$wasi/build/install/wasi
else
export wasi_install=$wasi
fi
# GeckoView
pushd "$mozilla_release"
# Let it be IronFox (part 2...)
mkdir -vp mobile/android/branding/ironfox/content
mkdir -vp mobile/android/branding/ironfox/locales/en-US
sed -i -e 's/Fennec/IronFox/; s/Firefox/IronFox/g' build/moz.configure/init.configure
# Apply patches
apply_patches
# Fix v125 aar output not including native libraries
sed -i \
-e 's/singleVariant("debug")/singleVariant("release")/' \
mobile/android/exoplayer2/build.gradle
sed -i \
-e "s/singleVariant('debug')/singleVariant('release')/" \
mobile/android/geckoview/build.gradle
# Hack the timeout for
# geckoview:generateJNIWrappersForGeneratedWithGeckoBinariesDebug
sed -i \
-e 's/max_wait_seconds=600/max_wait_seconds=1800/' \
mobile/android/gradle.py
# Remove glean telemetry URL
remove_glean_telemetry "${glean}"
remove_glean_telemetry "${application_services}"
remove_glean_telemetry "${mozilla_release}/browser"
remove_glean_telemetry "${mozilla_release}/modules"
remove_glean_telemetry "${mozilla_release}/toolkit"
remove_glean_telemetry "${mozilla_release}/netwerk"
# Take back control of preferences
## This prevents GeckoView from overriding the follow prefs at runtime, which also means we don't have to worry about Nimbus overriding them, etc...
## The prefs will instead take the values we specify in the phoenix/ironfox .js files, and users will also be able to override them via the `about:config`
## This is ideal for features that aren't exposed by the UI, it gives more freedom/control back to users, and it's great to ensure things are always configured how we want them...
sed -i \
-e 's|"browser.safebrowsing.provider."|"z99.ignore.string."|' \
-e 's|"cookiebanners.service.detectOnly"|"z99.ignore.boolean"|' \
-e 's|"cookiebanners.service.enableGlobalRules"|"z99.ignore.boolean"|' \
-e 's|"cookiebanners.service.enableGlobalRules.subFrames"|"z99.ignore.boolean"|' \
-e 's|"cookiebanners.service.mode"|"z99.ignore.integer"|' \
-e 's|"network.cookie.cookieBehavior"|"z99.ignore.integer"|' \
-e 's|"network.cookie.cookieBehavior.pbmode"|"z99.ignore.integer"|' \
-e 's|"privacy.annotate_channels.strict_list.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.purge_trackers.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.query_stripping.allow_list"|"z99.ignore.string"|' \
-e 's|"privacy.query_stripping.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.query_stripping.enabled.pbmode"|"z99.ignore.boolean"|' \
-e 's|"privacy.query_stripping.strip_list"|"z99.ignore.string"|' \
-e 's|"privacy.socialtracking.block_cookies.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.trackingprotection.annotate_channels"|"z99.ignore.boolean"|' \
-e 's|"privacy.trackingprotection.cryptomining.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.trackingprotection.emailtracking.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.trackingprotection.emailtracking.pbmode.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.trackingprotection.fingerprinting.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.trackingprotection.socialtracking.enabled"|"z99.ignore.boolean"|' \
-e 's|"urlclassifier.features.cryptomining.blacklistTables"|"z99.ignore.string"|' \
-e 's|"urlclassifier.features.emailtracking.blocklistTables"|"z99.ignore.string"|' \
-e 's|"urlclassifier.features.fingerprinting.blacklistTables"|"z99.ignore.string"|' \
-e 's|"urlclassifier.features.socialtracking.annotate.blacklistTables"|"z99.ignore.string"|' \
-e 's|"urlclassifier.malwareTable"|"z99.ignore.string"|' \
-e 's|"urlclassifier.phishTable"|"z99.ignore.string"|' \
-e 's|"urlclassifier.trackingTable"|"z99.ignore.string"|' \
mobile/android/geckoview/src/main/java/org/mozilla/geckoview/ContentBlocking.java
sed -i \
-e 's|"apz.allow_double_tap_zooming"|"z99.ignore.boolean"|' \
-e 's|"browser.display.use_document_fonts"|"z99.ignore.integer"|' \
-e 's|"docshell.shistory.sameDocumentNavigationOverridesLoadType"|"z99.ignore.boolean"|' \
-e 's|"docshell.shistory.sameDocumentNavigationOverridesLoadType.forceDisable"|"z99.ignore.string"|' \
-e 's|"dom.ipc.processCount"|"z99.ignore.integer"|' \
-e 's|"dom.manifest.enabled"|"z99.ignore.boolean"|' \
-e 's|"extensions.webapi.enabled"|"z99.ignore.boolean"|' \
-e 's|"extensions.webextensions.crash.threshold"|"z99.ignore.integer"|' \
-e 's|"extensions.webextensions.crash.timeframe"|"z99.ignore.long"|' \
-e 's|"extensions.webextensions.remote"|"z99.ignore.boolean"|' \
-e 's|"fission.autostart"|"z99.ignore.boolean"|' \
-e 's|"fission.disableSessionHistoryInParent"|"z99.ignore.boolean"|' \
-e 's|"fission.webContentIsolationStrategy"|"z99.ignore.integer"|' \
-e 's|"formhelper.autozoom"|"z99.ignore.boolean"|' \
-e 's|"general.aboutConfig.enable"|"z99.ignore.boolean"|' \
-e 's|"javascript.options.mem.gc_parallel_marking"|"z99.ignore.boolean"|' \
-e 's|"javascript.options.use_fdlibm_for_sin_cos_tan"|"z99.ignore.boolean"|' \
-e 's|"network.cookie.cookieBehavior.optInPartitioning"|"z99.ignore.boolean"|' \
-e 's|"network.cookie.cookieBehavior.optInPartitioning.pbmode"|"z99.ignore.boolean"|' \
-e 's|"network.android_doh.autoselect_enabled"|"z99.ignore.boolean"|' \
-e 's|"network.fetchpriority.enabled"|"z99.ignore.boolean"|' \
-e 's|"network.http.http3.enable_kyber"|"z99.ignore.boolean"|' \
-e 's|"network.http.largeKeepaliveFactor"|"z99.ignore.integer"|' \
-e 's|"network.security.ports.banned"|"z99.ignore.string"|' \
-e 's|"privacy.fingerprintingProtection"|"z99.ignore.boolean"|' \
-e 's|"privacy.fingerprintingProtection.overrides"|"z99.ignore.string"|' \
-e 's|"privacy.fingerprintingProtection.pbmode"|"z99.ignore.boolean"|' \
-e 's|"privacy.globalprivacycontrol.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.globalprivacycontrol.functionality.enabled"|"z99.ignore.boolean"|' \
-e 's|"privacy.globalprivacycontrol.pbmode.enabled"|"z99.ignore.boolean"|' \
-e 's|"security.pki.certificate_transparency.mode"|"z99.ignore.integer"|' \
-e 's|"security.tls.enable_kyber"|"z99.ignore.boolean"|' \
-e 's|"toolkit.telemetry.user_characteristics_ping.current_version"|"z99.ignore.integer"|' \
-e 's|"webgl.msaa-samples"|"z99.ignore.integer"|' \
mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
# shellcheck disable=SC2154
if [[ -n ${FDROID_BUILD+x} ]]; then
# Patch the LLVM source code
# Search clang- in https://android.googlesource.com/platform/ndk/+/refs/tags/ndk-r27/ndk/toolchains.py
LLVM_SVN='522817'
python3 "$toolchain_utils/llvm_tools/patch_manager.py" \
--svn_version $LLVM_SVN \
--patch_metadata_file "$llvm_android/patches/PATCHES.json" \
--src_path "$llvm"
# Bundletool
pushd "$bundletool"
localize_maven
popd
fi
{
echo 'ac_add_options --disable-address-sanitizer-reporter'
echo 'ac_add_options --disable-android-debuggable'
echo 'ac_add_options --disable-artifact-builds'
echo 'ac_add_options --disable-backgroundtasks'
echo 'ac_add_options --disable-callgrind'
echo 'ac_add_options --disable-crashreporter'
echo 'ac_add_options --disable-debug'
echo 'ac_add_options --disable-debug-js-modules'
echo 'ac_add_options --disable-debug-symbols'
echo 'ac_add_options --disable-default-browser-agent'
echo 'ac_add_options --disable-dtrace'
echo 'ac_add_options --disable-dump-painting'
echo 'ac_add_options --disable-execution-tracing'
echo 'ac_add_options --disable-extensions-webidl-bindings'
echo 'ac_add_options --disable-ffmpeg'
echo 'ac_add_options --disable-gecko-profiler'
echo 'ac_add_options --disable-geckodriver'
echo 'ac_add_options --disable-gtest-in-build'
echo 'ac_add_options --disable-instruments'
echo 'ac_add_options --disable-jitdump'
echo 'ac_add_options --disable-js-shell'
echo 'ac_add_options --disable-layout-debugger'
echo 'ac_add_options --disable-logrefcnt'
echo 'ac_add_options --disable-negotiateauth'
echo 'ac_add_options --disable-nodejs'
echo 'ac_add_options --disable-parental-controls'
echo 'ac_add_options --disable-phc'
echo 'ac_add_options --disable-pref-extensions'
echo 'ac_add_options --disable-profiling'
echo 'ac_add_options --disable-real-time-tracing'
echo 'ac_add_options --disable-reflow-perf'
echo 'ac_add_options --disable-rust-debug'
echo 'ac_add_options --disable-rust-tests'
echo 'ac_add_options --disable-simulator'
echo 'ac_add_options --disable-spidermonkey-telemetry'
echo 'ac_add_options --disable-system-extension-dirs'
echo 'ac_add_options --disable-system-policies'
echo 'ac_add_options --disable-tests'
echo 'ac_add_options --disable-uniffi-fixtures'
echo 'ac_add_options --disable-unverified-updates'
echo 'ac_add_options --disable-updater'
echo 'ac_add_options --disable-vtune'
echo 'ac_add_options --disable-wasm-codegen-debug'
echo 'ac_add_options --disable-webdriver'
echo 'ac_add_options --disable-webrender-debugger'
echo 'ac_add_options --disable-webspeechtestbackend'
echo 'ac_add_options --disable-wmf'
echo 'ac_add_options --enable-android-subproject="fenix"'
echo 'ac_add_options --enable-application="mobile/android"'
echo 'ac_add_options --enable-disk-remnant-avoidance'
echo 'ac_add_options --enable-hardening'
echo 'ac_add_options --enable-install-strip'
echo 'ac_add_options --enable-minify=properties'
echo 'ac_add_options --enable-mobile-optimize'
echo 'ac_add_options --enable-optimize'
echo 'ac_add_options --enable-proxy-bypass-protection'
echo 'ac_add_options --enable-release'
echo 'ac_add_options --enable-replace-malloc'
echo 'ac_add_options --enable-rust-simd'
echo 'ac_add_options --enable-strip'
echo 'ac_add_options --enable-update-channel="release"'
echo 'ac_add_options --with-app-basename="IronFox"'
echo 'ac_add_options --with-app-name="ironfox"'
echo 'ac_add_options --with-branding="mobile/android/branding/ironfox"'
echo 'ac_add_options --with-crashreporter-url="data;"'
echo 'ac_add_options --with-distribution-id="org.ironfoxoss"'
echo "ac_add_options --with-java-bin-path=\"$JAVA_HOME/bin\""
if [[ -n "${target}" ]]; then
echo "ac_add_options --target=$target"
fi
echo "ac_add_options --with-android-ndk=\"$ANDROID_NDK\""
echo "ac_add_options --with-android-sdk=\"$ANDROID_HOME\""
echo "ac_add_options --with-gradle=$(command -v gradle)"
echo "ac_add_options --with-libclang-path=\"$libclang\""
echo "ac_add_options --with-wasi-sysroot=\"$wasi_install/share/wasi-sysroot\""
echo 'ac_add_options --without-adjust-sdk-keyfile'
echo 'ac_add_options --without-android-googlevr-sdk'
echo 'ac_add_options --without-bing-api-keyfile'
echo 'ac_add_options --without-google-location-service-api-keyfile'
echo 'ac_add_options --without-mozilla-api-keyfile'
echo 'ac_add_options --without-leanplum-sdk-keyfile'
echo 'ac_add_options --without-pocket-api-keyfile'
if [[ -n ${SB_GAPI_KEY_FILE+x} ]]; then
echo "ac_add_options --with-google-safebrowsing-api-keyfile=${SB_GAPI_KEY_FILE}"
fi
echo "ac_add_options WASM_CC=\"$wasi_install/bin/clang\""
echo "ac_add_options WASM_CXX=\"$wasi_install/bin/clang++\""
echo "ac_add_options CC=\"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang\""
echo "ac_add_options CXX=\"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++\""
echo "ac_add_options STRIP=\"$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip\""
echo 'ac_add_options MOZ_APP_BASENAME="IronFox"'
echo 'ac_add_options MOZ_APP_DISPLAYNAME="IronFox"'
echo 'ac_add_options MOZ_APP_NAME="ironfox"'
echo 'ac_add_options MOZ_APP_REMOTINGNAME="ironfox"'
echo 'ac_add_options MOZ_ARTIFACT_BUILDS='
echo 'ac_add_options MOZ_CALLGRIND='
echo 'ac_add_options MOZ_CRASHREPORTER_URL="data;"'
echo 'ac_add_options MOZ_DEBUG_FLAGS='
echo 'ac_add_options MOZ_EXECUTION_TRACING='
echo 'ac_add_options MOZ_INCLUDE_SOURCE_INFO=1'
echo 'ac_add_options MOZ_INSTRUMENTS='
echo 'ac_add_options MOZ_LTO=1'
echo 'ac_add_options MOZ_PACKAGE_JSSHELL='
echo 'ac_add_options MOZ_PHC='
echo 'ac_add_options MOZ_PROFILING='
echo 'ac_add_options MOZ_REQUIRE_SIGNING='
echo 'ac_add_options MOZ_RUST_SIMD=1'
echo 'ac_add_options MOZ_SECURITY_HARDENING=1'
echo 'ac_add_options MOZ_TELEMETRY_REPORTING='
echo 'ac_add_options MOZ_VTUNE='
echo 'ac_add_options MOZILLA_OFFICIAL=1'
echo 'ac_add_options NODEJS='
echo 'ac_add_options RUSTC_OPT_LEVEL=2'
echo 'mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj'
echo 'export MOZ_APP_BASENAME="IronFox"'
echo 'export MOZ_APP_DISPLAYNAME="IronFox"'
echo 'export MOZ_APP_NAME="ironfox"'
echo 'export MOZ_APP_REMOTINGNAME="ironfox"'
echo 'export MOZ_ARTIFACT_BUILDS='
echo 'export MOZ_CALLGRIND='
echo 'export MOZ_CRASHREPORTER_URL="data;"'
echo 'export MOZ_EXECUTION_TRACING='
echo 'export MOZ_INCLUDE_SOURCE_INFO=1'
echo 'export MOZ_INSTRUMENTS='
echo 'export MOZ_LTO=1'
echo 'export MOZ_PACKAGE_JSSHELL='
echo 'export MOZ_PGO=1'
echo 'export MOZ_PHC='
echo 'export MOZ_PROFILING='
echo 'export MOZ_REQUIRE_SIGNING='
echo 'export MOZ_RUST_SIMD=1'
echo 'export MOZ_SECURITY_HARDENING=1'
echo 'export MOZ_TELEMETRY_REPORTING='
echo 'export MOZ_VTUNE='
echo 'export MOZILLA_OFFICIAL=1'
echo 'export RUSTC_OPT_LEVEL=2'
} >>mozconfig
# Point to our build of Bundletool
sed -i \
-e "/bundletool_path = /s|toolchains_base_dir|\"$BUILDDIR\"|" \
build/moz.configure/android-sdk.configure
# Fail on use of prebuilt binary
sed -i 's|https://github.com|hxxps://github.com|' python/mozboot/mozboot/android.py
# Make the build system think we installed the emulator and an AVD
mkdir -vp "$ANDROID_HOME/emulator"
mkdir -vp "$HOME/.mozbuild/android-device/avd"
# Do not check the "emulator" utility which is obviously absent in the empty directory we created above
sed -i -e '/check_android_tools("emulator"/d' build/moz.configure/android-sdk.configure
# Do not define `browser.safebrowsing.features.` prefs by default
## These are unnecessary, add extra confusion and complexity, and don't appear to interact well with our other prefs/settings
sed -i \
-e 's|"browser.safebrowsing.features.cryptomining.update"|"z99.ignore.boolean"|' \
-e 's|"browser.safebrowsing.features.fingerprinting.update"|"z99.ignore.boolean"|' \
-e 's|"browser.safebrowsing.features.malware.update"|"z99.ignore.boolean"|' \
-e 's|"browser.safebrowsing.features.phishing.update"|"z99.ignore.boolean"|' \
-e 's|"browser.safebrowsing.features.trackingAnnotation.update"|"z99.ignore.boolean"|' \
-e 's|"browser.safebrowsing.features.trackingProtection.update"|"z99.ignore.boolean"|' \
mobile/android/app/geckoview-prefs.js
{
cat "$patches/preferences/phoenix.js"
cat "$patches/preferences/phoenix-extended.js"
cat "$patches/preferences/ironfox.js"
if [[ -n ${IRONFOX_UBO_ASSETS_URL+x} ]]; then
# Set uBlock Origin to use our custom/enhanced config by default
echo "pref(\"browser.ironfox.uBO.assetsBootstrapLocation\", \"${IRONFOX_UBO_ASSETS_URL}\");"
fi
} >>mobile/android/app/geckoview-prefs.js
{
cat "$patches/preferences/pdf.js"
} >>toolkit/components/pdfjs/PdfJsOverridePrefs.js
find "$patches/gecko-overlay" -type f | while read -r src; do
cp -vrf "$src" "${src#"$patches/gecko-overlay/"}"
done
popd