mirror of
https://github.com/ironfox-oss/IronFox.git
synced 2026-01-26 15:03:43 -05:00
637 lines
27 KiB
Bash
Executable File
637 lines
27 KiB
Bash
Executable File
#!/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 system’s 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 system’s 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 system’s DNS resolver/' \
|
||
-e 's/Learn more about sync/Learn more about Firefox Sync/' \
|
||
-e 's/search?client=firefox&q=%s/search?q=%s/' \
|
||
-e 's/You don’t have any tabs open in IronFox on your other devices/You don’t 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
|