Files
IronFox/scripts/get_sources-if.sh
2026-04-02 22:17:28 +00:00

1263 lines
54 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# Set-up our environment
bash -x $(dirname $0)/env.sh
source $(dirname $0)/env.sh
if [[ -z "${IRONFOX_FROM_SOURCES+x}" ]]; then
echo_red_text "ERROR: Do not call get_sources-if.sh directly. Instead, use get_sources.sh." >&1
exit 1
fi
target="$1"
mode="$2"
# Set-up target parameters
IRONFOX_GET_SOURCE_ANDROID_NDK=0
IRONFOX_GET_SOURCE_ANDROID_SDK=0
IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS=0
IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS_35=0
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM=0
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_36=0
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_TOOLS=0
IRONFOX_GET_SOURCE_AS=0
IRONFOX_GET_SOURCE_BUNDLETOOL=0
IRONFOX_GET_SOURCE_CBINDGEN=0
IRONFOX_GET_SOURCE_GECKO=0
IRONFOX_GET_SOURCE_GECKO_L10N=0
IRONFOX_GET_SOURCE_GLEAN=0
IRONFOX_GET_SOURCE_GLEAN_PARSER=0
IRONFOX_GET_SOURCE_GRADLE=0
IRONFOX_GET_SOURCE_GYP=0
IRONFOX_GET_SOURCE_JDK_17=0
IRONFOX_GET_SOURCE_MICROG=0
IRONFOX_GET_SOURCE_NODE=0
IRONFOX_GET_SOURCE_NPM=0
IRONFOX_GET_SOURCE_PHOENIX=0
IRONFOX_GET_SOURCE_PIP=0
IRONFOX_GET_SOURCE_PREBUILDS=0
IRONFOX_GET_SOURCE_PYTHON=0
IRONFOX_GET_SOURCE_RUST=0
IRONFOX_GET_SOURCE_UP_AC=0
IRONFOX_GET_SOURCE_UV=0
if [ "${target}" == 'android-ndk' ]; then
# Get Android NDK
IRONFOX_GET_SOURCE_ANDROID_NDK=1
elif [ "${target}" == 'android-sdk' ]; then
# Get Android SDK
IRONFOX_GET_SOURCE_ANDROID_SDK=1
elif [ "${target}" == 'android-sdk-build-tools' ]; then
# Get Android SDK Build Tools (latest)
IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS=1
elif [ "${target}" == 'android-sdk-build-tools-35' ]; then
# Get Android SDK Build Tools (35) (Required by Glean)
IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS_35=1
elif [ "${target}" == 'android-sdk-platform' ]; then
# Get Android SDK Platform (latest)
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM=1
elif [ "${target}" == 'android-sdk-platform-36' ]; then
# Get Android SDK Platform (36)
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_36=1
elif [ "${target}" == 'android-sdk-platform-tools' ]; then
# Get Android SDK Platform Tools
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_TOOLS=1
elif [ "${target}" == 'as' ]; then
# Get Application Services
IRONFOX_GET_SOURCE_AS=1
elif [ "${target}" == 'bundletool' ]; then
# Get + set-up Bundletool
IRONFOX_GET_SOURCE_BUNDLETOOL=1
elif [ "${target}" == 'cbindgen' ]; then
# Get cbindgen
IRONFOX_GET_SOURCE_CBINDGEN=1
elif [ "${target}" == 'firefox' ]; then
# Get Firefox (Gecko/mozilla-central)
IRONFOX_GET_SOURCE_GECKO=1
elif [ "${target}" == 'firefox-l10n' ]; then
# Get firefox-l10n
IRONFOX_GET_SOURCE_GECKO_L10N=1
elif [ "${target}" == 'glean' ]; then
# Get Glean
IRONFOX_GET_SOURCE_GLEAN=1
elif [ "${target}" == 'glean-parser' ]; then
# Get glean-parser
IRONFOX_GET_SOURCE_GLEAN_PARSER=1
elif [ "${target}" == 'gradle' ]; then
# Get + set-up Gradle
IRONFOX_GET_SOURCE_GRADLE=1
elif [ "${target}" == 'gyp' ]; then
# Get gyp-next
IRONFOX_GET_SOURCE_GYP=1
elif [ "${target}" == 'jdk-17' ]; then
# Get OpenJDK (17) (Required by GeckoView)
IRONFOX_GET_SOURCE_JDK_17=1
elif [ "${target}" == 'microg' ]; then
# Get microG
IRONFOX_GET_SOURCE_MICROG=1
elif [ "${target}" == 'node' ]; then
# Get + set-up Node.js
IRONFOX_GET_SOURCE_NODE=1
elif [ "${target}" == 'npm' ]; then
# Get + set-up npm
IRONFOX_GET_SOURCE_NPM=1
elif [ "${target}" == 'phoenix' ]; then
# Get Phoenix
IRONFOX_GET_SOURCE_PHOENIX=1
elif [ "${target}" == 'prebuilds' ]; then
# Get IronFox prebuilds
IRONFOX_GET_SOURCE_PREBUILDS=1
elif [ "${target}" == 'pip' ]; then
# Get + set-up pip
IRONFOX_GET_SOURCE_PIP=1
elif [ "${target}" == 'python' ]; then
# Get Python
IRONFOX_GET_SOURCE_PYTHON=1
elif [ "${target}" == 'rust' ]; then
# Get + set-up rust/cargo
IRONFOX_GET_SOURCE_RUST=1
elif [ "${target}" == 'up-ac' ]; then
# Get UnifiedPush-AC
IRONFOX_GET_SOURCE_UP_AC=1
elif [ "${target}" == 'uv' ]; then
# Get + set-up uv
IRONFOX_GET_SOURCE_UV=1
elif [ "${target}" == 'all' ]; then
# If no argument is specified (or argument is set to "all"), just get everything
IRONFOX_GET_SOURCE_ANDROID_NDK=1
IRONFOX_GET_SOURCE_ANDROID_SDK=1
IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS=1
IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS_35=1
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM=1
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_36=1
IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_TOOLS=1
IRONFOX_GET_SOURCE_AS=1
IRONFOX_GET_SOURCE_BUNDLETOOL=1
IRONFOX_GET_SOURCE_CBINDGEN=1
IRONFOX_GET_SOURCE_GECKO=1
IRONFOX_GET_SOURCE_GECKO_L10N=1
IRONFOX_GET_SOURCE_GLEAN=1
IRONFOX_GET_SOURCE_GLEAN_PARSER=1
IRONFOX_GET_SOURCE_GRADLE=1
IRONFOX_GET_SOURCE_GYP=1
IRONFOX_GET_SOURCE_JDK_17=1
IRONFOX_GET_SOURCE_MICROG=1
IRONFOX_GET_SOURCE_NODE=1
IRONFOX_GET_SOURCE_NPM=1
IRONFOX_GET_SOURCE_PHOENIX=1
IRONFOX_GET_SOURCE_PIP=1
IRONFOX_GET_SOURCE_PREBUILDS=1
IRONFOX_GET_SOURCE_PYTHON=1
IRONFOX_GET_SOURCE_RUST=1
IRONFOX_GET_SOURCE_UP_AC=1
IRONFOX_GET_SOURCE_UV=1
else
echo_red_text "ERROR: Invalid target: ${target}\n You must enter one of the following:"
echo 'All: all (Default)'
echo 'Android NDK: android-ndk'
echo 'Android SDK: android-sdk'
echo 'Android SDK Build Tools (latest): android-sdk-build-tools'
echo 'Android SDK Build Tools (35.0.0): android-sdk-build-tools-35'
echo 'Android SDK Platform (latest): android-sdk-platform'
echo 'Android SDK Platform (36): android-sdk-platform-36'
echo 'Android SDK Platform Tools: android-sdk-platform-tools'
echo 'Application Services: as'
echo 'Bundletool: bundletool'
echo 'cbindgen: cbindgen'
echo 'Firefox (Gecko/mozilla-central): firefox'
echo 'firefox-l10n (l10n-central): firefox-l10n'
echo 'Glean: glean'
echo 'Glean Parser: glean-parser'
echo 'Gradle: gradle'
echo 'GYP: gyp'
echo 'JDK (17): jdk-17'
echo 'microG: microg'
echo 'Node.js: node'
echo 'npm: npm'
echo 'Phoenix: phoenix'
echo 'pip: pip'
echo 'Prebuilds: prebuilds'
echo 'Python: python'
echo 'Rust: rust'
echo 'UnifiedPush-AC: up-ac'
echo 'uv: uv'
exit 1
fi
# If the 'checksum-update' argument is specified, in addition to downloading the dependencies as usual,
## we're also updating their checksums
IRONFOX_GET_SOURCE_CHECKSUM_UPDATE=0
if [ "${mode}" == 'checksum-update' ]; then
if [ "${IRONFOX_CI}" != 1 ]; then
IRONFOX_GET_SOURCE_CHECKSUM_UPDATE=1
else
echo_red_text 'ERROR: CI should never automatically update checksums.'
exit 1
fi
elif [ "${mode}" != 'download' ]; then
echo_red_text "ERROR: Invalid mode: ${mode}\n You must enter one of the following:"
echo 'Download: download (Default)'
echo 'Download + update checksums: checksum-update'
exit 1
fi
# Include version info
source "${IRONFOX_VERSIONS}"
# Function to automate updating SHA512sums of dependencies
function update_sha512sum() {
old_sha512sum="$1"
new_sha512sum="$2"
file="$3"
if [ "${old_sha512sum}" == "${ANDROID_NDK_SHA512SUM_LINUX}" ]; then
echo_red_text 'Updating SHA512sum for Android NDK (Linux)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_NDK_SHA512SUM_LINUX='.*'|ANDROID_NDK_SHA512SUM_LINUX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android NDK (Linux)'
elif [ "${old_sha512sum}" == "${ANDROID_NDK_SHA512SUM_OSX}" ]; then
echo_red_text 'Updating SHA512sum for Android NDK (OS X)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_NDK_SHA512SUM_OSX='.*'|ANDROID_NDK_SHA512SUM_OSX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android NDK (OS X)'
elif [ "${old_sha512sum}" == "${ANDROID_SDK_SHA512SUM_LINUX}" ]; then
echo_red_text 'Updating SHA512sum for Android SDK (Linux)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_SDK_SHA512SUM_LINUX='.*'|ANDROID_SDK_SHA512SUM_LINUX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android SDK (Linux)'
elif [ "${old_sha512sum}" == "${ANDROID_SDK_SHA512SUM_OSX}" ]; then
echo_red_text 'Updating SHA512sum for Android SDK (OS X)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_SDK_SHA512SUM_OSX='.*'|ANDROID_SDK_SHA512SUM_OSX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android SDK (OS X)'
elif [ "${old_sha512sum}" == "${ANDROID_SDK_BUILD_TOOLS_SHA512SUM_LINUX}" ]; then
echo_red_text 'Updating SHA512sum for Android SDK Build Tools (latest) (Linux)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_SDK_BUILD_TOOLS_SHA512SUM_LINUX='.*'|ANDROID_SDK_BUILD_TOOLS_SHA512SUM_LINUX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android SDK Build Tools (latest) (Linux)'
elif [ "${old_sha512sum}" == "${ANDROID_SDK_BUILD_TOOLS_SHA512SUM_OSX}" ]; then
echo_red_text 'Updating SHA512sum for Android SDK Build Tools (latest) (OS X)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_SDK_BUILD_TOOLS_SHA512SUM_OSX='.*'|ANDROID_SDK_BUILD_TOOLS_SHA512SUM_OSX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android SDK Build Tools (latest) (OS X)'
elif [ "${old_sha512sum}" == "${ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_LINUX}" ]; then
echo_red_text 'Updating SHA512sum for Android SDK Build Tools (35.0.0) (Linux)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_LINUX='.*'|ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_LINUX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android SDK Build Tools (35.0.0) (Linux)'
elif [ "${old_sha512sum}" == "${ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_OSX}" ]; then
echo_red_text 'Updating SHA512sum for Android SDK Build Tools (35.0.0) (OS X)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_OSX='.*'|ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_OSX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android SDK Build Tools (35.0.0) (OS X)'
elif [ "${old_sha512sum}" == "${ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_LINUX}" ]; then
echo_red_text 'Updating SHA512sum for Android SDK Platform Tools (Linux)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_LINUX='.*'|ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_LINUX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android SDK Platform Tools (Linux)'
elif [ "${old_sha512sum}" == "${ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_OSX}" ]; then
echo_red_text 'Updating SHA512sum for Android SDK Platform Tools (OS X)...'
"${IRONFOX_SED}" -i -e "s|ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_OSX='.*'|ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_OSX='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Android SDK Platform Tools (OS X)'
elif [ "${old_sha512sum}" == "${APPSERVICES_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for Application Services...'
"${IRONFOX_SED}" -i -e "s|APPSERVICES_SHA512SUM='.*'|APPSERVICES_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Application Services'
elif [ "${old_sha512sum}" == "${BUNDLETOOL_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for Bundletool...'
"${IRONFOX_SED}" -i -e "s|BUNDLETOOL_SHA512SUM='.*'|BUNDLETOOL_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Bundletool'
elif [ "${old_sha512sum}" == "${BUNDLETOOL_REPO_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for Bundletool (repository)...'
"${IRONFOX_SED}" -i -e "s|BUNDLETOOL_REPO_SHA512SUM='.*'|BUNDLETOOL_REPO_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Bundletool (repository)'
elif [ "${old_sha512sum}" == "${CBINDGEN_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for cbindgen...'
"${IRONFOX_SED}" -i -e "s|CBINDGEN_SHA512SUM='.*'|CBINDGEN_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for cbindgen'
elif [ "${old_sha512sum}" == "${FIREFOX_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for Firefox...'
"${IRONFOX_SED}" -i -e "s|FIREFOX_SHA512SUM='.*'|FIREFOX_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Firefox'
elif [ "${old_sha512sum}" == "${GLEAN_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for Glean...'
"${IRONFOX_SED}" -i -e "s|GLEAN_SHA512SUM='.*'|GLEAN_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Glean'
elif [ "${old_sha512sum}" == "${GLEAN_PARSER_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for Glean Parser...'
"${IRONFOX_SED}" -i -e "s|GLEAN_PARSER_SHA512SUM='.*'|GLEAN_PARSER_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Glean Parser'
elif [ "${old_sha512sum}" == "${GMSCORE_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for microG...'
"${IRONFOX_SED}" -i -e "s|GMSCORE_SHA512SUM='.*'|GMSCORE_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for microG'
elif [ "${old_sha512sum}" == "${GRADLE_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for F-Droid Gradle script...'
"${IRONFOX_SED}" -i -e "s|GRADLE_SHA512SUM='.*'|GRADLE_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for F-Droid Gradle script'
elif [ "${old_sha512sum}" == "${GYP_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for GYP...'
"${IRONFOX_SED}" -i -e "s|GYP_SHA512SUM='.*'|GYP_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for GYP'
elif [ "${old_sha512sum}" == "${JDK_17_SHA512SUM_LINUX_ARM64}" ]; then
echo_red_text 'Updating SHA512sum for JDK (17) (Linux - ARM64)...'
"${IRONFOX_SED}" -i -e "s|JDK_17_SHA512SUM_LINUX_ARM64='.*'|JDK_17_SHA512SUM_LINUX_ARM64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for JDK (17) (Linux - ARM64)'
elif [ "${old_sha512sum}" == "${JDK_17_SHA512SUM_LINUX_X86_64}" ]; then
echo_red_text 'Updating SHA512sum for JDK (17) (Linux - x86_64)...'
"${IRONFOX_SED}" -i -e "s|JDK_17_SHA512SUM_LINUX_X86_64='.*'|JDK_17_SHA512SUM_LINUX_X86_64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for JDK (17) (Linux - x86_64)'
elif [ "${old_sha512sum}" == "${JDK_17_SHA512SUM_OSX_ARM64}" ]; then
echo_red_text 'Updating SHA512sum for JDK (17) (OS X - ARM64)...'
"${IRONFOX_SED}" -i -e "s|JDK_17_SHA512SUM_OSX_ARM64='.*'|JDK_17_SHA512SUM_OSX_ARM64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for JDK (17) (OS X - ARM64)'
elif [ "${old_sha512sum}" == "${JDK_17_SHA512SUM_OSX_X86_64}" ]; then
echo_red_text 'Updating SHA512sum for JDK (17) (OS X - x86_64)...'
"${IRONFOX_SED}" -i -e "s|JDK_17_SHA512SUM_OSX_X86_64='.*'|JDK_17_SHA512SUM_OSX_X86_64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for JDK (17) (OS X - x86_64)'
elif [ "${old_sha512sum}" == "${L10N_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for firefox-l10n...'
"${IRONFOX_SED}" -i -e "s|L10N_SHA512SUM='.*'|L10N_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for firefox-l10n'
elif [ "${old_sha512sum}" == "${NPM_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for npm...'
"${IRONFOX_SED}" -i -e "s|NPM_SHA512SUM='.*'|NPM_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for npm'
elif [ "${old_sha512sum}" == "${NVM_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for nvm...'
"${IRONFOX_SED}" -i -e "s|NVM_SHA512SUM='.*'|NVM_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for nvm'
elif [ "${old_sha512sum}" == "${PHOENIX_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for Phoenix...'
"${IRONFOX_SED}" -i -e "s|PHOENIX_SHA512SUM='.*'|PHOENIX_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Phoenix'
elif [ "${old_sha512sum}" == "${PIP_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for pip...'
"${IRONFOX_SED}" -i -e "s|PIP_SHA512SUM='.*'|PIP_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for pip'
elif [ "${old_sha512sum}" == "${PYTHON_SHA512SUM_LINUX_ARM64}" ]; then
echo_red_text 'Updating SHA512sum for Python (Linux - ARM64)...'
"${IRONFOX_SED}" -i -e "s|PYTHON_SHA512SUM_LINUX_ARM64='.*'|PYTHON_SHA512SUM_LINUX_ARM64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Python (Linux - ARM64)'
elif [ "${old_sha512sum}" == "${PYTHON_SHA512SUM_LINUX_X86_64}" ]; then
echo_red_text 'Updating SHA512sum for Python (Linux - x86_64)...'
"${IRONFOX_SED}" -i -e "s|PYTHON_SHA512SUM_LINUX_X86_64='.*'|PYTHON_SHA512SUM_LINUX_X86_64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Python (Linux - x86_64)'
elif [ "${old_sha512sum}" == "${PYTHON_SHA512SUM_OSX_ARM64}" ]; then
echo_red_text 'Updating SHA512sum for Python (OS X - ARM64)...'
"${IRONFOX_SED}" -i -e "s|PYTHON_SHA512SUM_OSX_ARM64='.*'|PYTHON_SHA512SUM_OSX_ARM64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Python (OS X - ARM64)'
elif [ "${old_sha512sum}" == "${PYTHON_SHA512SUM_OSX_X86_64}" ]; then
echo_red_text 'Updating SHA512sum for Python (OS X - x86_64)...'
"${IRONFOX_SED}" -i -e "s|PYTHON_SHA512SUM_OSX_X86_64='.*'|PYTHON_SHA512SUM_OSX_X86_64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for Python (OS X - x86_64)'
elif [ "${old_sha512sum}" == "${RUSTUP_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for rustup...'
"${IRONFOX_SED}" -i -e "s|RUSTUP_SHA512SUM='.*'|RUSTUP_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for rustup'
elif [ "${old_sha512sum}" == "${UV_SHA512SUM_LINUX_ARM64}" ]; then
echo_red_text 'Updating SHA512sum for uv (Linux - ARM64)...'
"${IRONFOX_SED}" -i -e "s|UV_SHA512SUM_LINUX_ARM64='.*'|UV_SHA512SUM_LINUX_ARM64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for uv (Linux - ARM64)'
elif [ "${old_sha512sum}" == "${UV_SHA512SUM_LINUX_X86_64}" ]; then
echo_red_text 'Updating SHA512sum for uv (Linux - x86_64)...'
"${IRONFOX_SED}" -i -e "s|UV_SHA512SUM_LINUX_X86_64='.*'|UV_SHA512SUM_LINUX_X86_64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for uv (Linux - x86_64)'
elif [ "${old_sha512sum}" == "${UV_SHA512SUM_OSX_ARM64}" ]; then
echo_red_text 'Updating SHA512sum for uv (OS X - ARM64)...'
"${IRONFOX_SED}" -i -e "s|UV_SHA512SUM_OSX_ARM64='.*'|UV_SHA512SUM_OSX_ARM64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for uv (OS X - ARM64)'
elif [ "${old_sha512sum}" == "${UV_SHA512SUM_OSX_X86_64}" ]; then
echo_red_text 'Updating SHA512sum for uv (OS X - x86_64)...'
"${IRONFOX_SED}" -i -e "s|UV_SHA512SUM_OSX_X86_64='.*'|UV_SHA512SUM_OSX_X86_64='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for uv (OS X - x86_64)'
elif [ "${old_sha512sum}" == "${PREBUILDS_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for IronFox prebuilds...'
"${IRONFOX_SED}" -i -e "s|PREBUILDS_SHA512SUM='.*'|PREBUILDS_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for IronFox prebuilds'
elif [ "${old_sha512sum}" == "${UNIFFI_LINUX_IRONFOX_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for uniffi-bindgen (Linux)...'
"${IRONFOX_SED}" -i -e "s|UNIFFI_LINUX_IRONFOX_SHA512SUM='.*'|UNIFFI_LINUX_IRONFOX_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for uniffi-bindgen (Linux)'
elif [ "${old_sha512sum}" == "${UNIFFI_OSX_IRONFOX_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for uniffi-bindgen (OS X)...'
"${IRONFOX_SED}" -i -e "s|UNIFFI_OSX_IRONFOX_SHA512SUM='.*'|UNIFFI_OSX_IRONFOX_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for uniffi-bindgen (OS X)'
elif [ "${old_sha512sum}" == "${UNIFIEDPUSHAC_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for UnifiedPush-AC...'
"${IRONFOX_SED}" -i -e "s|UNIFIEDPUSHAC_SHA512SUM='.*'|UNIFIEDPUSHAC_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for UnifiedPush-AC'
elif [ "${old_sha512sum}" == "${WASI_LINUX_IRONFOX_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for WASI SDK (Linux)...'
"${IRONFOX_SED}" -i -e "s|WASI_LINUX_IRONFOX_SHA512SUM='.*'|WASI_LINUX_IRONFOX_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for WASI SDK (Linux)'
elif [ "${old_sha512sum}" == "${WASI_OSX_IRONFOX_SHA512SUM}" ]; then
echo_red_text 'Updating SHA512sum for WASI SDK (OS X)...'
"${IRONFOX_SED}" -i -e "s|WASI_OSX_IRONFOX_SHA512SUM='.*'|WASI_OSX_IRONFOX_SHA512SUM='"${new_sha512sum}"'|g" "${IRONFOX_VERSIONS}"
echo_green_text 'SUCCESS: Updated SHA512sum for WASI SDK (OS X)'
fi
rm "${file}"
}
function validate_sha512sum() {
expected_sha512sum="$1"
file="$2"
local_sha512sum=$(sha512sum "${file}" | "${IRONFOX_AWK}" '{print $1}')
if [ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]; then
update_sha512sum "${expected_sha512sum}" "${local_sha512sum}" "${file}"
elif [ "${local_sha512sum}" != "${expected_sha512sum}" ]; then
echo_red_text 'ERROR: Checksum validation failed.'
echo "Expected SHA512sum: ${expected_sha512sum}"
echo "Actual SHA512sum: ${local_sha512sum}"
# If checksum validation fails, also just remove the file
rm -f "${file}"
exit 1
else
echo_green_text 'SUCCESS: Checksum validated.'
echo "SHA512sum: ${local_sha512sum}"
fi
}
function clone_repo() {
url="$1"
path="$2"
revision="$3"
if [[ "${url}" == "" ]]; then
echo_red_text "ERROR: URL missing for clone"
exit 1
fi
if [[ "${path}" == "" ]]; then
echo_red_text "ERROR: Path is required for cloning '${url}'"
exit 1
fi
if [[ "${revision}" == "" ]]; then
echo_red_text "ERROR: Revision is required for cloning '${url}'"
exit 1
fi
if [[ -f "${path}" ]]; then
echo_red_text "ERROR: '${path}' exists and is not a directory"
exit 1
fi
if [[ -d "${path}" ]]; then
echo_red_text "'${path}' already exists"
read -p "Do you want to re-clone this repository? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
echo_red_text "Removing ${path}..."
rm -rf "${path}"
else
return 0
fi
fi
echo_red_text "Cloning ${url}::${revision}..."
git clone --revision="${revision}" --depth=1 "${url}" "${path}"
}
function download() {
local url="$1"
local filepath="$2"
if [[ "${url}" == "" ]]; then
echo_red_text "ERROR: URL is required (file: '${filepath}')"
exit 1
fi
if [ -f "${filepath}" ]; then
echo_red_text "${filepath} already exists."
read -p "Do you want to re-download? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
echo_red_text "Removing ${filepath}..."
rm -f "${filepath}"
else
return 0
fi
fi
mkdir -vp "$(dirname "${filepath}")"
echo_red_text "Downloading ${url}..."
curl ${IRONFOX_CURL_FLAGS} -sSL "${url}" -o "${filepath}"
}
# Extract archives
function extract() {
local archive_path="$1"
local target_path="$2"
local temp_repo_name="$3"
if ! [[ -f "${archive_path}" ]]; then
echo_red_text "ERROR: Archive '${archive_path}' does not exist!"
fi
# If our temporary directory for extraction already exists, delete it
if [[ -d "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}" ]]; then
rm -rf "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
fi
# Create temporary directory for extraction
mkdir -p "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
# Extract based on file extension
case "${archive_path}" in
*.zip)
unzip -q "${archive_path}" -d "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
;;
*.tar.gz)
"${IRONFOX_TAR}" xzf "${archive_path}" -C "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
;;
*.tar.xz)
"${IRONFOX_TAR}" xJf "${archive_path}" -C "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
;;
*.tar.zst)
"${IRONFOX_TAR}" --zstd -xvf "${archive_path}" -C "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
;;
*)
echo_red_text "ERROR: Unsupported archive format: ${archive_path}"
rm -rf "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
exit 1
;;
esac
local top_input_dir=$(ls "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}")
cp -rf "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}/${top_input_dir}"/ "${target_path}"
rm -rf "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
}
function download_and_extract() {
local repo_name="$1"
local url="$2"
local path="$3"
local expected_sha512sum="$4"
if [[ -d "${path}" ]]; then
echo_red_text "'${path}' already exists"
read -p "Do you want to re-download? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
echo_red_text "Removing ${path}..."
rm -rf "${path}"
else
return 0
fi
fi
local extension
if [[ "${url}" =~ \.tar\.xz$ ]]; then
extension=".tar.xz"
elif [[ "${url}" =~ \.tar\.gz$ ]]; then
extension=".tar.gz"
elif [[ "${url}" =~ \.tar\.zst$ ]]; then
extension=".tar.zst"
else
extension=".zip"
fi
local repo_archive="${IRONFOX_DOWNLOADS}/${repo_name}${extension}"
download "${url}" "${repo_archive}"
if [ ! -f "${repo_archive}" ]; then
echo_red_text "ERROR: Source archive for ${repo_name} does not exist."
exit 1
fi
# Before extracting, verify SHA512sum...
validate_sha512sum "${expected_sha512sum}" "${repo_archive}"
if [ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]; then
echo_red_text "Extracting ${repo_archive}..."
extract "${repo_archive}" "${path}" "${repo_name}"
echo
fi
}
# Get Android NDK
function get_android_ndk() {
echo_red_text 'Downloading the Android NDK...'
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
download_and_extract 'android-ndk' "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-darwin.zip" "${IRONFOX_ANDROID_NDK}" "${ANDROID_NDK_SHA512SUM_OSX}"
else
download_and_extract 'android-ndk' "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip" "${IRONFOX_ANDROID_NDK}" "${ANDROID_NDK_SHA512SUM_LINUX}"
fi
echo_green_text "SUCCESS: Set-up Android NDK at ${IRONFOX_ANDROID_NDK}"
}
# Get + set-up Android SDK
function get_android_sdk() {
echo_red_text 'Downloading the Android SDK...'
# This is typically covered by "download_and_extract", but the Android SDK is a special case - we don't download it to IRONFOX_ANDROID_SDK directly
if [[ -d "${IRONFOX_ANDROID_SDK}" ]]; then
echo_red_text "'${IRONFOX_ANDROID_SDK}' already exists"
read -p "Do you want to re-download? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
echo_red_text "Removing ${IRONFOX_ANDROID_SDK}..."
rm -rf "${IRONFOX_ANDROID_SDK}"
else
return 0
fi
fi
mkdir -p "${IRONFOX_ANDROID_SDK}/cmdline-tools"
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
download_and_extract 'android-sdk-cmdline-tools' "https://dl.google.com/android/repository/commandlinetools-mac-${ANDROID_SDK_REVISION}_latest.zip" "${IRONFOX_ANDROID_SDK}/cmdline-tools/latest" "${ANDROID_SDK_SHA512SUM_OSX}"
else
download_and_extract 'android-sdk-cmdline-tools' "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_REVISION}_latest.zip" "${IRONFOX_ANDROID_SDK}/cmdline-tools/latest" "${ANDROID_SDK_SHA512SUM_LINUX}"
fi
# Accept Android SDK licenses
{ yes || true; } | ${IRONFOX_ANDROID_SDKMANAGER} --sdk_root="${IRONFOX_ANDROID_SDK}" --licenses
echo_green_text "SUCCESS: Set-up Android SDK at ${IRONFOX_ANDROID_SDK}"
}
# Get Android SDK Build Tools (latest)
function get_android_sdk_build_tools() {
echo_red_text 'Downloading Android SDK Build Tools (latest)...'
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
download_and_extract 'android-sdk-build-tools' "https://dl.google.com/android/repository/build-tools_${ANDROID_SDK_BUILD_TOOLS_VERSION}_macosx.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS}" "${ANDROID_SDK_BUILD_TOOLS_SHA512SUM_OSX}"
else
download_and_extract 'android-sdk-build-tools' "https://dl.google.com/android/repository/build-tools_${ANDROID_SDK_BUILD_TOOLS_VERSION}_linux.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS}" "${ANDROID_SDK_BUILD_TOOLS_SHA512SUM_LINUX}"
fi
echo_green_text "SUCCESS: Set-up Android SDK Build Tools (latest) at ${IRONFOX_ANDROID_SDK_BUILD_TOOLS}"
}
# Get Android SDK Build Tools (35)
## (Needed by Glean:
### https://github.com/mozilla/glean/blob/main/docs/dev/android/sdk-ndk-versions.md
### https://github.com/mozilla/glean/blob/main/docs/dev/android/setup-android-build-environment.md)
function get_android_sdk_build_tools_35() {
echo_red_text 'Downloading Android SDK Build Tools (35.0.0)...'
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
download_and_extract 'android-sdk-build-tools-35' "https://dl.google.com/android/repository/build-tools_r35_macosx.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35}" "${ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_OSX}"
else
download_and_extract 'android-sdk-build-tools-35' "https://dl.google.com/android/repository/build-tools_r35_linux.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35}" "${ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_LINUX}"
fi
echo_green_text "SUCCESS: Set-up Android SDK Build Tools (35.0.0) at ${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35}"
}
# Get Android SDK Platform (latest)
function get_android_sdk_platform() {
if [ ! -d "${IRONFOX_ANDROID_SDK}" ]; then
echo_red_text "ERROR: You tried to download the Android SDK Platform (latest), but you don't have the Android SDK set-up yet."
exit 1
fi
if [[ -d "${IRONFOX_ANDROID_SDK}/platforms/android-${ANDROID_SDK_PLATFORM_VERSION}" ]]; then
echo_red_text "Android SDK Platform (latest) is already installed at ${IRONFOX_ANDROID_SDK}/platforms/android-${ANDROID_SDK_PLATFORM_VERSION}"
read -p "Do you want to re-download it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Nn]$ ]]; then
return 0
else
rm -rf "${IRONFOX_ANDROID_SDK}/platforms/android-${ANDROID_SDK_PLATFORM_VERSION}"
fi
fi
echo_red_text 'Downloading Android SDK Platform (latest)...'
${IRONFOX_ANDROID_SDKMANAGER} "platforms;android-${ANDROID_SDK_PLATFORM_VERSION}"
echo_green_text "SUCCESS: Set-up Android SDK Platform (latest) at ${IRONFOX_ANDROID_SDK}/platforms/android-${ANDROID_SDK_PLATFORM_VERSION}"
}
# Get Android SDK Platform (36)
## (Needed by Glean:
### https://github.com/mozilla/glean/blob/main/docs/dev/android/sdk-ndk-versions.md
### https://github.com/mozilla/glean/blob/main/docs/dev/android/setup-android-build-environment.md)
function get_android_sdk_platform_36() {
if [ ! -d "${IRONFOX_ANDROID_SDK}" ]; then
echo_red_text "ERROR: You tried to download the Android SDK Platform (36), but you don't have the Android SDK set-up yet."
exit 1
fi
if [[ -d "${IRONFOX_ANDROID_SDK}/platforms/android-36" ]]; then
echo_red_text "Android SDK Platform (36) is already installed at ${IRONFOX_ANDROID_SDK}/platforms/android-36"
read -p "Do you want to re-download it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Nn]$ ]]; then
return 0
else
rm -rf "${IRONFOX_ANDROID_SDK}/platforms/android-36"
fi
fi
echo_red_text 'Downloading Android SDK Platform (36)...'
${IRONFOX_ANDROID_SDKMANAGER} 'platforms;android-36'
echo_green_text "SUCCESS: Set-up Android SDK Platform (36) at ${IRONFOX_ANDROID_SDK}/platforms/android-36"
}
# Get Android SDK Platform Tools
function get_android_sdk_platform_tools() {
echo_red_text 'Downloading Android SDK Platform Tools...'
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
download_and_extract 'android-sdk-platform-tools' "https://dl.google.com/android/repository/platform-tools_r${ANDROID_SDK_PLATFORM_TOOLS_VERSION}-darwin.zip" "${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS}" "${ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_OSX}"
else
download_and_extract 'android-sdk-platform-tools' "https://dl.google.com/android/repository/platform-tools_r${ANDROID_SDK_PLATFORM_TOOLS_VERSION}-linux.zip" "${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS}" "${ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_LINUX}"
fi
echo_green_text "SUCCESS: Set-up Android SDK Platform Tools at ${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS}"
}
# Get Application Services
function get_as() {
echo_red_text 'Downloading Application Services...'
download_and_extract 'application-services' "https://github.com/mozilla/application-services/archive/${APPSERVICES_COMMIT}.tar.gz" "${IRONFOX_AS}" "${APPSERVICES_SHA512SUM}"
echo_green_text "SUCCESS: Set-up Application Services at ${IRONFOX_AS}"
}
# Get + set-up Bundletool
function get_bundletool() {
echo_red_text 'Downloading Bundletool...'
if [[ "${IRONFOX_NO_PREBUILDS}" == "1" ]]; then
download_and_extract 'bundletool' "https://github.com/google/bundletool/archive/${BUNDLETOOL_REPO_COMMIT}.tar.gz" "${IRONFOX_BUNDLETOOL_DIR}" "${BUNDLETOOL_REPO_SHA512SUM}"
else
download "https://github.com/google/bundletool/releases/download/${BUNDLETOOL_VERSION}/bundletool-all-${BUNDLETOOL_VERSION}.jar" "${IRONFOX_BUNDLETOOL_JAR}"
# Validate SHA512sum
validate_sha512sum "${BUNDLETOOL_SHA512SUM}" "${IRONFOX_BUNDLETOOL_JAR}"
fi
echo_green_text "SUCCESS: Set-up Bundletool at ${IRONFOX_BUNDLETOOL_DIR}"
}
# Get cbindgen
function get_cbindgen() {
if [ ! -d "${IRONFOX_CARGO_HOME}" ] || [ ! -f "${IRONFOX_CARGO_ENV}" ]; then
echo_red_text "ERROR: You tried to download cbindgen, but you don't have a Rust environment set-up yet."
exit 1
fi
if [[ -d "${IRONFOX_CARGO_HOME}/bin/cbindgen" ]]; then
echo_red_text "cbindgen is already installed at ${IRONFOX_CARGO_HOME}/bin/cbindgen."
read -p "Do you want to re-download it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Nn]$ ]]; then
return 0
fi
fi
echo_red_text "Downloading cbindgen..."
download_and_extract 'cbindgen' "https://github.com/mozilla/cbindgen/archive/${CBINDGEN_COMMIT}.tar.gz" "${IRONFOX_CBINDGEN}" "${CBINDGEN_SHA512SUM}"
source "${IRONFOX_CARGO_ENV}"
echo_red_text 'Installing cbindgen...'
cargo +"${RUST_VERSION}" install --locked --force --vers "${CBINDGEN_VERSION}" --path "${IRONFOX_CBINDGEN}" cbindgen
echo_green_text "SUCCESS: Set-up cbindgen at ${IRONFOX_CARGO_HOME}/bin/cbindgen"
}
# Get Firefox (Gecko/mozilla-central)
function get_firefox() {
echo_red_text 'Downloading Firefox...'
download_and_extract 'gecko' "https://github.com/mozilla-firefox/firefox/archive/${FIREFOX_COMMIT}.tar.gz" "${IRONFOX_GECKO}" "${FIREFOX_SHA512SUM}"
# Because we use MOZ_AUTOMATION for certain parts of the build, we need to initialize a Git repository
## The Git repository isn't already created, due to our method of downloading and verifying the archive
pushd "${IRONFOX_GECKO}"
git init
popd
echo_green_text "SUCCESS: Set-up Firefox at ${IRONFOX_GECKO}"
}
# Get firefox-l10n
function get_firefox_l10n() {
echo_red_text 'Downloading firefox-l10n...'
download_and_extract 'l10n-central' "https://github.com/mozilla-l10n/firefox-l10n/archive/${L10N_COMMIT}.tar.gz" "${IRONFOX_L10N_CENTRAL}" "${L10N_SHA512SUM}"
echo_green_text "SUCCESS: Set-up firefox-l10n at ${IRONFOX_L10N_CENTRAL}"
}
# Get Glean
function get_glean() {
echo_red_text 'Downloading Glean...'
download_and_extract 'glean' "https://github.com/mozilla/glean/archive/${GLEAN_COMMIT}.tar.gz" "${IRONFOX_GLEAN}" "${GLEAN_SHA512SUM}"
echo_green_text "SUCCESS: Set-up Glean at ${IRONFOX_GLEAN}"
}
# Get Glean Parser
function get_glean_parser() {
if [ ! -d "${IRONFOX_UV_DIR}" ] || [ ! -f "${IRONFOX_PYENV}" ]; then
echo_red_text "ERROR: You tried to download Glean Parser, but you don't have a uv environment set-up yet."
exit 1
fi
if [ ! -d "${IRONFOX_PIP_DIR}" ]; then
echo_red_text "ERROR: You tried to download Glean Parser, but you don't have pip set-up yet."
exit 1
fi
if [[ -d "${IRONFOX_PYENV_DIR}/bin/glean_parser" ]]; then
echo_red_text "Glean Parser is already installed at ${IRONFOX_PYENV_DIR}/bin/glean_parser"
read -p "Do you want to re-download it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Nn]$ ]]; then
return 0
else
source "${IRONFOX_PYENV}"
"${IRONFOX_UV}" pip uninstall glean-parser
fi
fi
if [[ -d "${IRONFOX_GLEAN_PARSER_WHEELS}" ]]; then
echo_red_text "Glean Parser wheels are already downloaded at ${IRONFOX_GLEAN_PARSER_WHEELS}"
read -p "Do you want to re-download it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Nn]$ ]]; then
return 0
else
rm -rf "${IRONFOX_GLEAN_PARSER_WHEELS}"
fi
fi
mkdir -p "${IRONFOX_GLEAN_PARSER_WHEELS}"
source "${IRONFOX_PYENV}"
echo_red_text 'Downloading Glean Parser wheels...'
pushd "${IRONFOX_GLEAN_PARSER_WHEELS}"
"${IRONFOX_PIP}" download glean-parser=="${GLEAN_PARSER_VERSION}"
popd
# Validate SHA512sum
validate_sha512sum "${GLEAN_PARSER_SHA512SUM}" "${IRONFOX_GLEAN_PARSER_WHEELS}/glean_parser-${GLEAN_PARSER_VERSION}-py3-none-any.whl"
}
# Get + set-up F-Droid's Gradle script
function get_gradle() {
echo_red_text "Downloading F-Droid's Gradle script..."
download "https://gitlab.com/fdroid/gradlew-fdroid/-/raw/${GRADLE_COMMIT}/gradlew.py" "${IRONFOX_GRADLE_PY}"
# Validate SHA512sum
validate_sha512sum "${GRADLE_SHA512SUM}" "${IRONFOX_GRADLE_PY}"
}
# Get GYP
function get_gyp() {
if [ ! -d "${IRONFOX_UV_DIR}" ] || [ ! -f "${IRONFOX_PYENV}" ]; then
echo_red_text "ERROR: You tried to download GYP, but you don't have a uv environment set-up yet."
exit 1
fi
if [[ -d "${IRONFOX_PYENV_DIR}/bin/gyp" ]]; then
echo_red_text "GYP is already installed at ${IRONFOX_PYENV_DIR}/bin/gyp"
read -p "Do you want to re-download it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Nn]$ ]]; then
return 0
else
source "${IRONFOX_PYENV}"
"${IRONFOX_UV}" pip uninstall gyp-next
fi
fi
echo_red_text "Downloading GYP..."
download_and_extract 'gyp-next' "https://github.com/nodejs/gyp-next/archive/${GYP_COMMIT}.tar.gz" "${IRONFOX_GYP}" "${GYP_SHA512SUM}"
source "${IRONFOX_PYENV}"
echo_red_text 'Installing GYP...'
"${IRONFOX_UV}" pip install --strict "${IRONFOX_GYP}"
echo_green_text "SUCCESS: Set-up GYP at ${IRONFOX_PYENV_DIR}/bin/gyp"
}
# Get JDK (17)
## (Required by GeckoView)
function get_jdk_17() {
# Set our platform
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly JDK_17_PLATFORM='mac'
else
local readonly JDK_17_PLATFORM='linux'
fi
# Set our platform architecture
if [ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]; then
local readonly JDK_17_ARCH='aarch64'
else
local readonly JDK_17_ARCH='x64'
fi
# Set our checksum to verify
if [ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]; then
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly JDK_17_SHA512SUM="${JDK_17_SHA512SUM_OSX_ARM64}"
else
local readonly JDK_17_SHA512SUM="${JDK_17_SHA512SUM_LINUX_ARM64}"
fi
else
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly JDK_17_SHA512SUM="${JDK_17_SHA512SUM_OSX_X86_64}"
else
local readonly JDK_17_SHA512SUM="${JDK_17_SHA512SUM_LINUX_X86_64}"
fi
fi
echo_red_text 'Downloading JDK (17)...'
download_and_extract 'jdk-17' "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${JDK_17_VERSION}%2B${JDK_17_REVISION}/OpenJDK17U-jdk_${JDK_17_ARCH}_${JDK_17_PLATFORM}_hotspot_${JDK_17_VERSION}_${JDK_17_REVISION}.tar.gz" "${IRONFOX_JDK_17}" "${JDK_17_SHA512SUM}"
echo_green_text "SUCCESS: Set-up JDK (17) at ${IRONFOX_JDK_17}"
}
# Get microG
function get_microg() {
echo_red_text 'Downloading microG...'
download_and_extract 'gmscore' "https://github.com/microg/GmsCore/archive/${GMSCORE_COMMIT}.tar.gz" "${IRONFOX_GMSCORE}" "${GMSCORE_SHA512SUM}"
echo_green_text "SUCCESS: Set-up microG at ${IRONFOX_GMSCORE}"
}
# Get + set-up Node.js
function get_node() {
if [[ -d "${IRONFOX_NVM}" ]]; then
echo_red_text "The Node.js environment is already set-up at ${IRONFOX_NVM}"
read -p "Do you want to re-create it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
rm -rf "${IRONFOX_NPM_CACHE}" "${IRONFOX_NVM}" "${IRONFOX_ROOT}/node_modules"
fi
fi
download_and_extract 'nvm' "https://github.com/nvm-sh/nvm/archive/${NVM_COMMIT}.tar.gz" "${IRONFOX_NVM}" "${NVM_SHA512SUM}"
echo_red_text 'Installing Node.js...'
source "${IRONFOX_NVM_ENV}"
nvm install "${NODE_VERSION}"
nvm alias default "${NODE_VERSION}"
nvm use "${NODE_VERSION}"
echo_green_text "SUCCESS: Set-up Node.js environment at ${IRONFOX_NVM}"
}
# Get npm
function get_npm() {
if [ ! -d "${IRONFOX_NVM}" ]; then
echo_red_text "ERROR: You tried to download npm, but you don't have a Node.js environment set-up yet."
exit 1
fi
echo_red_text 'Downloading npm...'
download "https://registry.npmjs.org/npm/-/npm-${NPM_VERSION}.tgz" "${IRONFOX_DOWNLOADS}/npm.tgz"
# Validate SHA512sum
validate_sha512sum "${NPM_SHA512SUM}" "${IRONFOX_DOWNLOADS}/npm.tgz"
echo_red_text 'Installing npm...'
source "${IRONFOX_NVM_ENV}"
"${IRONFOX_NPM}" install -g npm@file:"${IRONFOX_DOWNLOADS}/npm.tgz"
echo_green_text "SUCCESS: Set-up npm at ${IRONFOX_NPM}"
}
# Get Phoenix
function get_phoenix() {
echo_red_text 'Downloading Phoenix...'
download_and_extract 'phoenix' "https://gitlab.com/celenityy/Phoenix/-/archive/${PHOENIX_COMMIT}/Phoenix-${PHOENIX_COMMIT}.tar.gz" "${IRONFOX_PHOENIX}" "${PHOENIX_SHA512SUM}"
echo_green_text "SUCCESS: Set-up Phoenix at ${IRONFOX_PHOENIX}"
}
# Get + set-up pip
function get_pip() {
if [ ! -d "${IRONFOX_UV_DIR}" ] || [ ! -f "${IRONFOX_PYENV}" ]; then
echo_red_text "ERROR: You tried to download pip, but you don't have a uv environment set-up yet."
exit 1
fi
echo_red_text 'Downloading pip...'
download_and_extract 'pip' "https://github.com/pypa/pip/archive/${PIP_COMMIT}.tar.gz" "${IRONFOX_PIP_DIR}" "${PIP_SHA512SUM}"
source "${IRONFOX_PYENV}"
echo_red_text 'Installing pip...'
"${IRONFOX_UV}" pip install "${IRONFOX_PIP_DIR}"
echo_green_text "SUCCESS: Set-up pip at ${IRONFOX_PIP}"
}
# Get IronFox prebuilds
function get_prebuilds() {
if [[ "${IRONFOX_NO_PREBUILDS}" == "1" ]]; then
echo_red_text 'Downloading the IronFox prebuilds repository...'
download_and_extract 'prebuilds' "https://gitlab.com/ironfox-oss/prebuilds/-/archive/${PREBUILDS_COMMIT}/prebuilds-${PREBUILDS_COMMIT}.tar.gz" "${IRONFOX_PREBUILDS}" "${PREBUILDS_SHA512SUM}"
pushd "${IRONFOX_PREBUILDS}"
echo_red_text 'Downloading prebuild sources...'
bash "${IRONFOX_PREBUILDS}/scripts/get_sources.sh"
popd
echo_green_text "SUCCESS: Set-up the IronFox prebuilds repository at ${IRONFOX_PREBUILDS}"
else
# Get Tor's no-op UniFFi binding generator
echo_red_text 'Downloading prebuilt uniffi-bindgen...'
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
download_and_extract 'uniffi' "https://gitlab.com/ironfox-oss/prebuilds/-/raw/${UNIFFI_OSX_IRONFOX_COMMIT}/uniffi-bindgen/${UNIFFI_VERSION}/osx/uniffi-bindgen-${UNIFFI_VERSION}-${UNIFFI_OSX_IRONFOX_REVISION}-osx.tar.xz" "${IRONFOX_UNIFFI}" "${UNIFFI_OSX_IRONFOX_SHA512SUM}"
else
download_and_extract 'uniffi' "https://gitlab.com/ironfox-oss/prebuilds/-/raw/${UNIFFI_LINUX_IRONFOX_COMMIT}/uniffi-bindgen/${UNIFFI_VERSION}/linux/uniffi-bindgen-${UNIFFI_VERSION}-${UNIFFI_LINUX_IRONFOX_REVISION}-linux.tar.xz" "${IRONFOX_UNIFFI}" "${UNIFFI_LINUX_IRONFOX_SHA512SUM}"
fi
echo_green_text "SUCCESS: Set-up the prebuilt uniffi-bindgen at ${IRONFOX_UNIFFI}"
# Get WebAssembly SDK
echo_red_text 'Downloading prebuilt wasi-sdk...'
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
download_and_extract 'wasi-sdk' "https://gitlab.com/ironfox-oss/prebuilds/-/raw/${WASI_OSX_IRONFOX_COMMIT}/wasi-sdk/${WASI_VERSION}/osx/wasi-sdk-${WASI_VERSION}-${WASI_OSX_IRONFOX_REVISION}-osx.tar.xz" "${IRONFOX_WASI}" "${WASI_OSX_IRONFOX_SHA512SUM}"
else
download_and_extract 'wasi-sdk' "https://gitlab.com/ironfox-oss/prebuilds/-/raw/${WASI_LINUX_IRONFOX_COMMIT}/wasi-sdk/${WASI_VERSION}/linux/wasi-sdk-${WASI_VERSION}-${WASI_LINUX_IRONFOX_REVISION}-linux.tar.xz" "${IRONFOX_WASI}" "${WASI_LINUX_IRONFOX_SHA512SUM}"
fi
echo_green_text "SUCCESS: Set-up the prebuilt wasi-sdk at ${IRONFOX_WASI}"
fi
}
# Get Python
function get_python() {
# Set our platform
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly PYTHON_PLATFORM='apple-darwin'
else
local readonly PYTHON_PLATFORM='unknown-linux-gnu'
fi
# Set our platform architecture
if [ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]; then
local readonly PYTHON_ARCH='aarch64'
else
local readonly PYTHON_ARCH='x86_64'
fi
# Set our checksum to verify
if [ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]; then
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly PYTHON_SHA512SUM="${PYTHON_SHA512SUM_OSX_ARM64}"
else
local readonly PYTHON_SHA512SUM="${PYTHON_SHA512SUM_LINUX_ARM64}"
fi
else
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly PYTHON_SHA512SUM="${PYTHON_SHA512SUM_OSX_X86_64}"
else
local readonly PYTHON_SHA512SUM="${PYTHON_SHA512SUM_LINUX_X86_64}"
fi
fi
echo_red_text 'Downloading Python...'
download "https://github.com/astral-sh/python-build-standalone/releases/download/${PYTHON_GIT_RELEASE}/cpython-${PYTHON_VERSION}+${PYTHON_GIT_RELEASE}-${PYTHON_ARCH}-${PYTHON_PLATFORM}-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_DIR}/${PYTHON_GIT_RELEASE}/cpython-${PYTHON_VERSION}+${PYTHON_GIT_RELEASE}-${PYTHON_ARCH}-${PYTHON_PLATFORM}-install_only_stripped.tar.gz"
# Validate SHA512sum
validate_sha512sum "${PYTHON_SHA512SUM}" "${IRONFOX_PYTHON_DIR}/${PYTHON_GIT_RELEASE}/cpython-${PYTHON_VERSION}+${PYTHON_GIT_RELEASE}-${PYTHON_ARCH}-${PYTHON_PLATFORM}-install_only_stripped.tar.gz"
echo_green_text "SUCCESS: Downloaded Python to ${IRONFOX_PYTHON_DIR}/${PYTHON_GIT_RELEASE}/cpython-${PYTHON_VERSION}+${PYTHON_GIT_RELEASE}-${PYTHON_ARCH}-${PYTHON_PLATFORM}-install_only_stripped.tar.gz"
}
# Get + set-up rust/cargo
function get_rust() {
if [[ -d "${IRONFOX_CARGO_HOME}" ]]; then
echo_red_text "The Rust environment is already set-up at ${IRONFOX_CARGO_HOME}"
read -p "Do you want to re-create it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
rm -rf "${IRONFOX_CARGO_HOME}" "${IRONFOX_RUSTUP_HOME}"
fi
fi
echo_red_text 'Downloading Rust...'
download "https://raw.githubusercontent.com/rust-lang/rustup/${RUSTUP_COMMIT}/rustup-init.sh" "${IRONFOX_DOWNLOADS}/rustup-init.sh"
# Validate SHA512sum
validate_sha512sum "${RUSTUP_SHA512SUM}" "${IRONFOX_DOWNLOADS}/rustup-init.sh"
bash -x "${IRONFOX_DOWNLOADS}/rustup-init.sh" -y --no-modify-path --no-update-default-toolchain --profile=minimal
echo_red_text 'Creating Rust environment...'
source "${IRONFOX_CARGO_ENV}"
rustup set profile minimal
rustup default "${RUST_VERSION}"
rustup override set "${RUST_VERSION}"
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add thumbv7neon-linux-androideabi
rustup target add x86_64-linux-android
echo_green_text "SUCCESS: Set-up Rust environment at ${IRONFOX_CARGO_HOME}"
}
# Get UnifiedPush-AC
function get_up_ac() {
echo_red_text 'Downloading UnifiedPush-AC...'
download_and_extract 'unifiedpush-ac' "https://gitlab.com/ironfox-oss/unifiedpush-ac/-/archive/${UNIFIEDPUSHAC_COMMIT}/unifiedpush-ac-${UNIFIEDPUSHAC_COMMIT}.tar.gz" "${IRONFOX_UP_AC}" "${UNIFIEDPUSHAC_SHA512SUM}"
echo_green_text "SUCCESS: Set-up UnifiedPush-AC at ${IRONFOX_UP_AC}"
}
# Get + set-up uv
function get_uv() {
if [ ! -d "${IRONFOX_PYTHON_DIR}" ]; then
echo_red_text "ERROR: You tried to download uv, but you don't have Python downloaded yet."
exit 1
fi
if [[ -d "${IRONFOX_PYENV_DIR}" ]]; then
echo_red_text "The uv environment is already set-up at ${IRONFOX_PYENV_DIR}"
read -p "Do you want to re-create it? [y/N] " -n 1 -r
echo
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
rm -rf "${IRONFOX_PYENV_DIR}" "${IRONFOX_UV_DIR}" "${IRONFOX_UV_LOCAL}"
fi
fi
# Set our platform
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly UV_PLATFORM='apple-darwin'
else
local readonly UV_PLATFORM='unknown-linux-gnu'
fi
# Set our platform architecture
if [ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]; then
local readonly UV_ARCH='aarch64'
else
local readonly UV_ARCH='x86_64'
fi
# Set our checksum to verify
if [ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]; then
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly UV_SHA512SUM="${UV_SHA512SUM_OSX_ARM64}"
else
local readonly UV_SHA512SUM="${UV_SHA512SUM_LINUX_ARM64}"
fi
else
if [ "${IRONFOX_PLATFORM}" == 'darwin' ]; then
local readonly UV_SHA512SUM="${UV_SHA512SUM_OSX_X86_64}"
else
local readonly UV_SHA512SUM="${UV_SHA512SUM_LINUX_X86_64}"
fi
fi
echo_red_text 'Downloading uv...'
download_and_extract 'uv' "https://github.com/astral-sh/uv/releases/download/${UV_VERSION}/uv-${UV_ARCH}-${UV_PLATFORM}.tar.gz" "${IRONFOX_UV_DIR}" "${UV_SHA512SUM}"
echo_red_text 'Installing Python...'
"${IRONFOX_UV}" python install "${PYTHON_VERSION}"
echo_red_text 'Creating uv environment...'
"${IRONFOX_UV}" venv "${IRONFOX_PYENV_DIR}"
echo_green_text "SUCCESS: Set-up uv environment at ${IRONFOX_PYENV_DIR}"
}
if [ "${IRONFOX_GET_SOURCE_ANDROID_NDK}" == 1 ]; then
get_android_ndk
fi
# This needs to run before we get the Android SDK
if [ "${IRONFOX_GET_SOURCE_JDK_17}" == 1 ]; then
get_jdk_17
fi
if [ "${IRONFOX_GET_SOURCE_ANDROID_SDK}" == 1 ]; then
get_android_sdk
fi
if [ "${IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS}" == 1 ]; then
get_android_sdk_build_tools
fi
if [ "${IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS_35}" == 1 ]; then
get_android_sdk_build_tools_35
fi
if [ "${IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM}" == 1 ]; then
get_android_sdk_platform
fi
if [ "${IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_36}" == 1 ]; then
get_android_sdk_platform_36
fi
if [ "${IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_TOOLS}" == 1 ]; then
get_android_sdk_platform_tools
fi
if [ "${IRONFOX_GET_SOURCE_AS}" == 1 ]; then
get_as
fi
# This needs to run before we get cbindgen
if [ "${IRONFOX_GET_SOURCE_RUST}" == 1 ]; then
get_rust
fi
if [ "${IRONFOX_GET_SOURCE_CBINDGEN}" == 1 ]; then
get_cbindgen
fi
if [ "${IRONFOX_GET_SOURCE_BUNDLETOOL}" == 1 ]; then
get_bundletool
fi
if [ "${IRONFOX_GET_SOURCE_GECKO}" == 1 ]; then
get_firefox
fi
if [ "${IRONFOX_GET_SOURCE_GECKO_L10N}" == 1 ]; then
get_firefox_l10n
fi
if [ "${IRONFOX_GET_SOURCE_GLEAN}" == 1 ]; then
get_glean
fi
# These need to run before we get glean_parser and gyp
if [ "${IRONFOX_GET_SOURCE_PYTHON}" == 1 ]; then
get_python
fi
if [ "${IRONFOX_GET_SOURCE_UV}" == 1 ]; then
get_uv
fi
# This needs to be run before we get glean_parser
if [ "${IRONFOX_GET_SOURCE_PIP}" == 1 ]; then
get_pip
fi
if [ "${IRONFOX_GET_SOURCE_GLEAN_PARSER}" == 1 ]; then
get_glean_parser
fi
if [ "${IRONFOX_GET_SOURCE_GRADLE}" == 1 ]; then
get_gradle
fi
if [ "${IRONFOX_GET_SOURCE_GYP}" == 1 ]; then
get_gyp
fi
if [ "${IRONFOX_GET_SOURCE_MICROG}" == 1 ]; then
get_microg
fi
if [ "${IRONFOX_GET_SOURCE_NODE}" == 1 ]; then
get_node
fi
if [ "${IRONFOX_GET_SOURCE_NPM}" == 1 ]; then
get_npm
fi
if [ "${IRONFOX_GET_SOURCE_PHOENIX}" == 1 ]; then
get_phoenix
fi
if [ "${IRONFOX_GET_SOURCE_PREBUILDS}" == 1 ]; then
get_prebuilds
fi
if [ "${IRONFOX_GET_SOURCE_UP_AC}" == 1 ]; then
get_up_ac
fi