mirror of
https://github.com/ironfox-oss/IronFox.git
synced 2026-07-31 01:46:33 -04:00
1977 lines
80 KiB
Bash
Executable File
1977 lines
80 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Set-up our environment
|
|
source $(dirname $0)/env.sh
|
|
|
|
# Include utilities
|
|
source "${IRONFOX_UTILS}"
|
|
|
|
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
|
|
|
|
# Set verbosity
|
|
if [[ "${IRONFOX_VERBOSE}" == 1 ]]; then
|
|
set -x
|
|
else
|
|
set +x
|
|
fi
|
|
|
|
readonly target="$1"
|
|
readonly mode="$2"
|
|
|
|
# Set-up target parameters
|
|
IRONFOX_GET_SOURCE_ANDROGUARD=0
|
|
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_JDK_21=0
|
|
IRONFOX_GET_SOURCE_JDK_25=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_PYYAML=0
|
|
IRONFOX_GET_SOURCE_RUST=0
|
|
IRONFOX_GET_SOURCE_S3CMD=0
|
|
IRONFOX_GET_SOURCE_UNIFFI=0
|
|
IRONFOX_GET_SOURCE_UP_AC=0
|
|
IRONFOX_GET_SOURCE_UV=0
|
|
IRONFOX_GET_SOURCE_WASI=0
|
|
|
|
if [[ "${target}" == 'androguard' ]]; then
|
|
# Get androguard
|
|
## NOTE: This isn't installed if "all" is used below, as it's only used in CI and targeted specifically when it's needed
|
|
IRONFOX_GET_SOURCE_ANDROGUARD=1
|
|
elif [[ "${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}" == 'jdk-21' ]]; then
|
|
# Get OpenJDK (21)
|
|
IRONFOX_GET_SOURCE_JDK_21=1
|
|
elif [[ "${target}" == 'jdk-25' ]]; then
|
|
# Get OpenJDK (25)
|
|
IRONFOX_GET_SOURCE_JDK_25=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 the IronFox prebuilds repo
|
|
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}" == 'pyyaml' ]]; then
|
|
# Get PyYAML
|
|
## NOTE: This isn't installed if "all" is used below, as it's only used in CI and targeted specifically when it's needed
|
|
IRONFOX_GET_SOURCE_PYYAML=1
|
|
elif [[ "${target}" == 'rust' ]]; then
|
|
# Get + set-up rust/cargo
|
|
IRONFOX_GET_SOURCE_RUST=1
|
|
elif [[ "${target}" == 's3cmd' ]]; then
|
|
# Get s3cmd
|
|
## NOTE: This isn't installed if "all" is used below, as it's only used in CI and targeted specifically when it's needed
|
|
IRONFOX_GET_SOURCE_S3CMD=1
|
|
elif [[ "${target}" == 'uniffi' ]]; then
|
|
# Get uniffi
|
|
IRONFOX_GET_SOURCE_UNIFFI=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}" == 'wasi' ]]; then
|
|
# Get WASI SDK
|
|
IRONFOX_GET_SOURCE_WASI=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_JDK_21=1
|
|
IRONFOX_GET_SOURCE_JDK_25=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_PYTHON=1
|
|
IRONFOX_GET_SOURCE_RUST=1
|
|
IRONFOX_GET_SOURCE_UP_AC=1
|
|
IRONFOX_GET_SOURCE_UV=1
|
|
|
|
if [[ "${IRONFOX_NO_PREBUILDS}" == 1 ]]; then
|
|
# If IRONFOX_NO_PREBUILDS is true, we need to get the Prebuilds repo (so that they can be built from source)
|
|
IRONFOX_GET_SOURCE_PREBUILDS=1
|
|
else
|
|
# Otherwise,by default, we can just download the prebuilds directly
|
|
IRONFOX_GET_SOURCE_UNIFFI=1
|
|
IRONFOX_GET_SOURCE_WASI=1
|
|
fi
|
|
else
|
|
echo_red_text "ERROR: Invalid target: ${target}\n You must enter one of the following:"
|
|
echo 'All: all (Default)'
|
|
echo 'androguard: androguard'
|
|
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 'JDK (21): jdk-21'
|
|
echo 'JDK (25): jdk-25'
|
|
echo 'microG: microg'
|
|
echo 'Node.js: node'
|
|
echo 'npm: npm'
|
|
echo 'Phoenix: phoenix'
|
|
echo 'pip: pip'
|
|
echo 'Prebuilds repo: prebuilds'
|
|
echo 'Python: python'
|
|
echo 'PyYAML: pyyaml'
|
|
echo 'Rust: rust'
|
|
echo 's3cmd: s3cmd'
|
|
echo 'UnifiedPush-AC: up-ac'
|
|
echo 'uniffi-bindgen: uniffi'
|
|
echo 'uv: uv'
|
|
echo 'WASI SDK: wasi'
|
|
exit 1
|
|
fi
|
|
|
|
readonly IRONFOX_GET_SOURCE_ANDROGUARD
|
|
readonly IRONFOX_GET_SOURCE_ANDROID_NDK
|
|
readonly IRONFOX_GET_SOURCE_ANDROID_SDK
|
|
readonly IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS
|
|
readonly IRONFOX_GET_SOURCE_ANDROID_SDK_BUILD_TOOLS_35
|
|
readonly IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM
|
|
readonly IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_36
|
|
readonly IRONFOX_GET_SOURCE_ANDROID_SDK_PLATFORM_TOOLS
|
|
readonly IRONFOX_GET_SOURCE_AS
|
|
readonly IRONFOX_GET_SOURCE_BUNDLETOOL
|
|
readonly IRONFOX_GET_SOURCE_CBINDGEN
|
|
readonly IRONFOX_GET_SOURCE_GECKO
|
|
readonly IRONFOX_GET_SOURCE_GECKO_L10N
|
|
readonly IRONFOX_GET_SOURCE_GLEAN
|
|
readonly IRONFOX_GET_SOURCE_GLEAN_PARSER
|
|
readonly IRONFOX_GET_SOURCE_GRADLE
|
|
readonly IRONFOX_GET_SOURCE_GYP
|
|
readonly IRONFOX_GET_SOURCE_JDK_17
|
|
readonly IRONFOX_GET_SOURCE_JDK_21
|
|
readonly IRONFOX_GET_SOURCE_JDK_25
|
|
readonly IRONFOX_GET_SOURCE_MICROG
|
|
readonly IRONFOX_GET_SOURCE_NODE
|
|
readonly IRONFOX_GET_SOURCE_NPM
|
|
readonly IRONFOX_GET_SOURCE_PHOENIX
|
|
readonly IRONFOX_GET_SOURCE_PIP
|
|
readonly IRONFOX_GET_SOURCE_PREBUILDS
|
|
readonly IRONFOX_GET_SOURCE_PYTHON
|
|
readonly IRONFOX_GET_SOURCE_PYYAML
|
|
readonly IRONFOX_GET_SOURCE_RUST
|
|
readonly IRONFOX_GET_SOURCE_S3CMD
|
|
readonly IRONFOX_GET_SOURCE_UNIFFI
|
|
readonly IRONFOX_GET_SOURCE_UP_AC
|
|
readonly IRONFOX_GET_SOURCE_UV
|
|
readonly IRONFOX_GET_SOURCE_WASI
|
|
|
|
# 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
|
|
readonly IRONFOX_GET_SOURCE_CHECKSUM_UPDATE
|
|
|
|
# Include version info
|
|
source "${IRONFOX_VERSIONS}"
|
|
|
|
# Back-up (and remove) a file if it exists
|
|
function backup_file() {
|
|
local -r file="$1"
|
|
local -r file_name="$("${IRONFOX_BASENAME}" "${file}")"
|
|
local -r backup_file="${IRONFOX_EXTERNAL}/temp/backup/${file_name}"
|
|
|
|
if [[ -f "${file}" ]]; then
|
|
"${IRONFOX_RM}" -f "${backup_file}"
|
|
"${IRONFOX_MKDIR}" -p "$("${IRONFOX_DIRNAME}" "${backup_file}")"
|
|
"${IRONFOX_CP}" -f "${file}" "${backup_file}"
|
|
"${IRONFOX_RM}" -f "${file}"
|
|
fi
|
|
}
|
|
|
|
# Back-up (and remove) a directory if it exists
|
|
function backup_dir() {
|
|
local -r dir="$1"
|
|
local -r dir_name="$("${IRONFOX_BASENAME}" "${dir}")"
|
|
local -r backup_dir="${IRONFOX_EXTERNAL}/temp/backup/${dir_name}"
|
|
|
|
if [[ -d "${dir}" ]]; then
|
|
"${IRONFOX_RM}" -rf "${backup_dir}"
|
|
"${IRONFOX_MKDIR}" -p "$("${IRONFOX_DIRNAME}" "${backup_dir}")"
|
|
"${IRONFOX_CP}" -rf "${dir}/" "${backup_dir}"
|
|
"${IRONFOX_RM}" -rf "${dir}"
|
|
fi
|
|
}
|
|
|
|
# Restore a backed-up file
|
|
function restore_file() {
|
|
local -r file="$1"
|
|
local -r file_name="$("${IRONFOX_BASENAME}" "${file}")"
|
|
local -r backed_up_file="${IRONFOX_EXTERNAL}/temp/backup/${file_name}"
|
|
|
|
if [[ -f "${backed_up_file}" ]]; then
|
|
"${IRONFOX_RM}" -f "${file}"
|
|
"${IRONFOX_MKDIR}" -p "$("${IRONFOX_DIRNAME}" "${file}")"
|
|
"${IRONFOX_CP}" -f "${backed_up_file}" "${file}"
|
|
"${IRONFOX_RM}" -f "${backed_up_file}"
|
|
fi
|
|
}
|
|
|
|
# Restore a backed-up directory
|
|
function restore_dir() {
|
|
local -r dir="$1"
|
|
local -r dir_name="$("${IRONFOX_BASENAME}" "${dir}")"
|
|
local -r backed_up_dir="${IRONFOX_EXTERNAL}/temp/backup/${dir_name}"
|
|
|
|
if [[ -d "${backed_up_dir}" ]]; then
|
|
"${IRONFOX_RM}" -rf "${dir}"
|
|
"${IRONFOX_MKDIR}" -p "$("${IRONFOX_DIRNAME}" "${dir}")"
|
|
"${IRONFOX_CP}" -rf "${backed_up_dir}/" "${dir}"
|
|
"${IRONFOX_RM}" -rf "${backed_up_dir}"
|
|
fi
|
|
}
|
|
|
|
# Function to automate updating checksums of dependencies
|
|
function update_checksum() {
|
|
local -r old_checksum="$1"
|
|
local -r new_checksum="$2"
|
|
local -r file="$3"
|
|
local -r checksum_type="$4"
|
|
|
|
if [[ "${checksum_type}" == 'md5sum' ]]; then
|
|
local -r checksum_type_pretty='MD5sum'
|
|
elif [[ "${checksum_type}" == 'sha1sum' ]]; then
|
|
local -r checksum_type_pretty='SHA1sum'
|
|
elif [[ "${checksum_type}" == 'sha256sum' ]]; then
|
|
local -r checksum_type_pretty='SHA256sum'
|
|
elif [[ "${checksum_type}" == 'sha512sum' ]]; then
|
|
local -r checksum_type_pretty='SHA512sum'
|
|
else
|
|
echo_red_text 'ERROR: Unknown checksum type.'
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${old_checksum}" == "${new_checksum}" ]]; then
|
|
echo_red_text 'Checksums match. Skipping...'
|
|
echo "Old checksum: ${old_checksum}"
|
|
echo "New checksum: ${new_checksum}"
|
|
else
|
|
echo_red_text "Updating ${checksum_type_pretty} for ${file}..."
|
|
"${IRONFOX_SED}" -i "s|'${old_checksum}'|'${new_checksum}'|" "${IRONFOX_VERSIONS}"
|
|
echo_green_text "SUCCESS: Updated ${checksum_type_pretty} for ${file}"
|
|
fi
|
|
}
|
|
|
|
function validate_checksum() {
|
|
local -r expected_checksum="$1"
|
|
local -r file="$2"
|
|
local -r checksum_type="$3"
|
|
|
|
if [[ "${checksum_type}" == 'md5sum' ]]; then
|
|
local -r checksum_type_pretty='MD5sum'
|
|
local -r local_checksum=$("${IRONFOX_MD5SUM}" "${file}" | "${IRONFOX_AWK}" '{print $1}')
|
|
elif [[ "${checksum_type}" == 'sha1sum' ]]; then
|
|
local -r checksum_type_pretty='SHA1sum'
|
|
local -r local_checksum=$("${IRONFOX_SHA1SUM}" "${file}" | "${IRONFOX_AWK}" '{print $1}')
|
|
elif [[ "${checksum_type}" == 'sha256sum' ]]; then
|
|
local -r checksum_type_pretty='SHA256sum'
|
|
local -r local_checksum=$("${IRONFOX_SHA256SUM}" "${file}" | "${IRONFOX_AWK}" '{print $1}')
|
|
elif [[ "${checksum_type}" == 'sha512sum' ]]; then
|
|
local -r checksum_type_pretty='SHA512sum'
|
|
local -r local_checksum=$("${IRONFOX_SHA512SUM}" "${file}" | "${IRONFOX_AWK}" '{print $1}')
|
|
else
|
|
echo_red_text 'ERROR: Unknown checksum type.'
|
|
return 1
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
update_checksum "${expected_checksum}" "${local_checksum}" "${file}" "${checksum_type}"
|
|
elif [[ "${local_checksum}" != "${expected_checksum}" ]]; then
|
|
echo_red_text 'ERROR: Checksum validation failed.'
|
|
echo "Expected ${checksum_type_pretty}: ${expected_checksum}"
|
|
echo "Actual ${checksum_type_pretty}: ${local_checksum}"
|
|
|
|
# If checksum validation fails, also just remove the file
|
|
"${IRONFOX_RM}" -f "${file}"
|
|
|
|
return 1
|
|
else
|
|
echo_green_text 'SUCCESS: Checksum validated.'
|
|
echo "${checksum_type_pretty}: ${local_checksum}"
|
|
fi
|
|
}
|
|
|
|
function clone_repo() {
|
|
local -r url="$1"
|
|
local -r path="$2"
|
|
local -r 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}..."
|
|
"${IRONFOX_RM}" -rf "${path}"
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo_red_text "Cloning ${url}::${revision}..."
|
|
"${IRONFOX_GIT}" clone --revision="${revision}" --depth=1 "${url}" "${path}"
|
|
}
|
|
|
|
function download() {
|
|
local -r url="$1"
|
|
local -r file_in="$2"
|
|
local -r file_name=$("${IRONFOX_BASENAME}" "${file_in}")
|
|
local -r expected_sha512sum="$3"
|
|
|
|
# By default, we want to exit upon an error
|
|
if [[ -z "${IRONFOX_DOWNLOAD_EXIT+x}" ]]; then
|
|
IRONFOX_DOWNLOAD_EXIT=1
|
|
fi
|
|
|
|
# By default, we want to perform post-download actions for sources
|
|
## (this includes things like ex. installing a dependency or creating/setting-up an environment)
|
|
## This isn't desired in some cases, like if we're updating checksums, or a user just cancels the download
|
|
unset IRONFOX_PERFORM_POST_DOWNLOAD
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
## If we're just updating a checksum, we should never perform post-download actions
|
|
IRONFOX_PERFORM_POST_DOWNLOAD=0
|
|
else
|
|
IRONFOX_PERFORM_POST_DOWNLOAD=1
|
|
fi
|
|
|
|
if [[ "${url}" == "" ]]; then
|
|
echo_red_text "ERROR: URL is required (file: '${file_in}')"
|
|
IRONFOX_PERFORM_POST_DOWNLOAD=0
|
|
if [[ "${IRONFOX_DOWNLOAD_EXIT}" != 1 ]]; then
|
|
unset IRONFOX_DOWNLOAD_EXIT
|
|
return 1
|
|
else
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# If we're doing a checksum update, we download the file to a separate temporary directory, instead of our standard one
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp/chksm"
|
|
local -r file="${IRONFOX_EXTERNAL}/temp/chksm/${file_name}"
|
|
else
|
|
local -r file="${file_in}"
|
|
fi
|
|
|
|
if [[ -f "${file}" ]]; then
|
|
echo_red_text "${file} already exists."
|
|
read -p "Do you want to re-download? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our file
|
|
echo_red_text "Removing ${file}..."
|
|
backup_file "${file}"
|
|
else
|
|
unset IRONFOX_DOWNLOAD_EXIT
|
|
IRONFOX_PERFORM_POST_DOWNLOAD=0
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
# By default, we know nothing has failed...
|
|
local IRONFOX_CHECKSUM_FAILED=0
|
|
local IRONFOX_DOWNLOAD_FAILED=0
|
|
|
|
if [[ ! -d "$("${IRONFOX_DIRNAME}" "${file}")" ]]; then
|
|
"${IRONFOX_MKDIR}" -vp "$("${IRONFOX_DIRNAME}" "${file}")"
|
|
local -r CREATED_DIR_FOR_DL=1
|
|
else
|
|
local -r CREATED_DIR_FOR_DL=0
|
|
fi
|
|
|
|
echo_red_text "Downloading ${url}..."
|
|
"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location "${url}" --output "${file}" || local IRONFOX_DOWNLOAD_FAILED=1
|
|
|
|
# Verify (or update) SHA512sum
|
|
validate_checksum "${expected_sha512sum}" "${file}" 'sha512sum' || local IRONFOX_CHECKSUM_FAILED=1
|
|
|
|
# If we're just updating the checksum, we're done, so go ahead and exit
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
if [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
exit 1
|
|
elif [[ "${IRONFOX_CHECKSUM_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Failed to update checksum! Exiting...'
|
|
exit 1
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
# If the download (or checksum validation) failed, restore our back-up
|
|
if [[ "${IRONFOX_CHECKSUM_FAILED}" == 1 ]] || [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
if [[ -f "${IRONFOX_EXTERNAL}/temp/backup/${file_name}" ]]; then
|
|
restore_file "${file}"
|
|
fi
|
|
fi
|
|
|
|
# Clean-up
|
|
"${IRONFOX_RM}" -f "${IRONFOX_EXTERNAL}/temp/backup/${file_name}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp/chksm"
|
|
|
|
# If the download (or checksum validation) failed, exit
|
|
if [[ "${IRONFOX_CHECKSUM_FAILED}" == 1 ]] || [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
# If a directory was created just for this download, remove it
|
|
if [[ "${CREATED_DIR_FOR_DL}" == 1 ]]; then
|
|
"${IRONFOX_RM}" -rf "$("${IRONFOX_DIRNAME}" "${file}")"
|
|
fi
|
|
if [[ "${IRONFOX_DOWNLOAD_EXIT}" != 1 ]]; then
|
|
unset IRONFOX_DOWNLOAD_EXIT
|
|
return 1
|
|
else
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Extract archives
|
|
function extract() {
|
|
local -r archive_path="$1"
|
|
local -r target_path="$2"
|
|
local -r 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
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
|
|
fi
|
|
|
|
# Create temporary directory for extraction
|
|
"${IRONFOX_MKDIR}" -p "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
|
|
|
|
# Extract based on file extension
|
|
case "${archive_path}" in
|
|
*.zip)
|
|
"${IRONFOX_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}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
local -r top_input_dir=$("${IRONFOX_LS}" "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}")
|
|
"${IRONFOX_CP}" -rf "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}/${top_input_dir}/" "${target_path}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp/${temp_repo_name}"
|
|
}
|
|
|
|
function download_and_extract() {
|
|
local -r repo_name="$1"
|
|
local -r url="$2"
|
|
local -r path="$3"
|
|
local -r expected_sha512sum="$4"
|
|
|
|
# By default, we want to perform post-download actions for sources
|
|
## (this includes things like ex. installing a dependency or creating/setting-up an environment)
|
|
## This isn't desired in some cases, like if we're updating checksums, or a user just cancels the download
|
|
unset IRONFOX_PERFORM_POST_DOWNLOAD
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
## If we're just updating a checksum, we should never perform post-download actions
|
|
IRONFOX_PERFORM_POST_DOWNLOAD=0
|
|
else
|
|
IRONFOX_PERFORM_POST_DOWNLOAD=1
|
|
fi
|
|
|
|
if [[ -d "${path}" ]] && [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; 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
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directory
|
|
echo_red_text "Removing ${path}..."
|
|
backup_dir "${path}"
|
|
else
|
|
IRONFOX_PERFORM_POST_DOWNLOAD=0
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
if [[ "${url}" =~ \.tar\.xz$ ]]; then
|
|
local -r extension=".tar.xz"
|
|
elif [[ "${url}" =~ \.tar\.gz$ ]]; then
|
|
local -r extension=".tar.gz"
|
|
elif [[ "${url}" =~ \.tar\.zst$ ]]; then
|
|
local -r extension=".tar.zst"
|
|
else
|
|
local -r extension=".zip"
|
|
fi
|
|
|
|
# Tell `download` to return instead of exit upon an error
|
|
IRONFOX_DOWNLOAD_EXIT=0
|
|
|
|
# By default, we know the download hasn't failed...
|
|
local IRONFOX_DOWNLOAD_FAILED=0
|
|
|
|
local -r repo_archive="${IRONFOX_DOWNLOADS}/${repo_name}${extension}"
|
|
download "${url}" "${repo_archive}" "${expected_sha512sum}" || local IRONFOX_DOWNLOAD_FAILED=1
|
|
|
|
# If we're just updating the checksum, we're done, so go ahead and exit
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
if [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
exit 1
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
# If the download failed, restore our back-up (if possible) and exit
|
|
if [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
restore_dir "${path}"
|
|
if [[ "${repo_name}" == 'uv' ]]; then
|
|
IRONFOX_PERFORM_POST_DOWNLOAD=0
|
|
return 1
|
|
else
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo_red_text "Extracting ${repo_archive}..."
|
|
extract "${repo_archive}" "${path}" "${repo_name}"
|
|
|
|
# Clean-up
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp/backup/${repo_name}"
|
|
}
|
|
|
|
# Get androguard
|
|
function get_androguard() {
|
|
# If all we're doing is updating the checksum, we don't care if the environment is prepared
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
if [[ ! -d "${IRONFOX_UV_DIR}" ]] || [[ ! -f "${IRONFOX_PYENV}" ]]; then
|
|
echo_red_text "ERROR: You tried to download androguard, but you don't have a Python environment set-up yet."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -d "${IRONFOX_ANDROGUARD}" ]]; then
|
|
echo_red_text "androguard is already installed at ${IRONFOX_ANDROGUARD}"
|
|
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 androguard
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo_red_text "Downloading androguard..."
|
|
download_and_extract 'androguard' "https://github.com/androguard/androguard/archive/${IRONFOX_ANDROGUARD_COMMIT}.tar.gz" "${IRONFOX_ANDROGUARD_DIR}" "${IRONFOX_ANDROGUARD_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
source "${IRONFOX_PYENV}"
|
|
echo_red_text 'Installing androguard...'
|
|
"${IRONFOX_UV}" pip install --no-editable --strict "${IRONFOX_ANDROGUARD_DIR}"
|
|
echo_green_text "SUCCESS: Set-up androguard at ${IRONFOX_ANDROGUARD}"
|
|
fi
|
|
}
|
|
|
|
# Get Android NDK
|
|
function get_android_ndk() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading the Android NDK (Linux)...'
|
|
download_and_extract 'android-ndk' "https://dl.google.com/android/repository/android-ndk-${IRONFOX_ANDROID_NDK_VERSION}-linux.zip" "${IRONFOX_ANDROID_NDK}" "${IRONFOX_ANDROID_NDK_SHA512SUM_LINUX}"
|
|
|
|
echo_red_text 'Downloading the Android NDK (OS X)...'
|
|
download_and_extract 'android-ndk' "https://dl.google.com/android/repository/android-ndk-${IRONFOX_ANDROID_NDK_VERSION}-darwin.zip" "${IRONFOX_ANDROID_NDK}" "${IRONFOX_ANDROID_NDK_SHA512SUM_OSX}"
|
|
else
|
|
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-${IRONFOX_ANDROID_NDK_VERSION}-darwin.zip" "${IRONFOX_ANDROID_NDK}" "${IRONFOX_ANDROID_NDK_SHA512SUM_OSX}"
|
|
else
|
|
download_and_extract 'android-ndk' "https://dl.google.com/android/repository/android-ndk-${IRONFOX_ANDROID_NDK_VERSION}-linux.zip" "${IRONFOX_ANDROID_NDK}" "${IRONFOX_ANDROID_NDK_SHA512SUM_LINUX}"
|
|
fi
|
|
echo_green_text "SUCCESS: Set-up Android NDK at ${IRONFOX_ANDROID_NDK}"
|
|
fi
|
|
}
|
|
|
|
# Get + set-up Android SDK
|
|
function get_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 [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
if [[ -d "${IRONFOX_ANDROID_SDK}" ]]; then
|
|
echo_red_text "Found existing installation at ${IRONFOX_ANDROID_SDK}"
|
|
echo 'Continuing will remove this installation and related data'
|
|
read -p "Do you still want to continue? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directory
|
|
echo_red_text "Removing ${IRONFOX_ANDROID_SDK}..."
|
|
backup_dir "${IRONFOX_ANDROID_SDK}"
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
"${IRONFOX_MKDIR}" -p "${IRONFOX_ANDROID_SDK}/cmdline-tools"
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading Android SDK (Linux)...'
|
|
download "https://dl.google.com/android/repository/commandlinetools-linux-${IRONFOX_ANDROID_SDK_REVISION}_latest.zip" "${IRONFOX_ANDROID_SDK}/cmdline-tools/${IRONFOX_ANDROID_SDK_VERSION}" "${IRONFOX_ANDROID_SDK_SHA512SUM_LINUX}"
|
|
|
|
echo_red_text 'Downloading Android SDK (OS X)...'
|
|
download "https://dl.google.com/android/repository/commandlinetools-mac-${IRONFOX_ANDROID_SDK_REVISION}_latest.zip" "${IRONFOX_ANDROID_SDK}/cmdline-tools/${IRONFOX_ANDROID_SDK_VERSION}" "${IRONFOX_ANDROID_SDK_SHA512SUM_OSX}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_ANDROID_SDK_PLATFORM='mac'
|
|
else
|
|
local -r IRONFOX_ANDROID_SDK_PLATFORM='linux'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_ANDROID_SDK_SHA512SUM="${IRONFOX_ANDROID_SDK_SHA512SUM_OSX}"
|
|
else
|
|
local -r IRONFOX_ANDROID_SDK_SHA512SUM="${IRONFOX_ANDROID_SDK_SHA512SUM_LINUX}"
|
|
fi
|
|
|
|
echo_red_text 'Downloading Android SDK...'
|
|
download_and_extract 'android-sdk-cmdline-tools' "https://dl.google.com/android/repository/commandlinetools-${IRONFOX_ANDROID_SDK_PLATFORM}-${IRONFOX_ANDROID_SDK_REVISION}_latest.zip" "${IRONFOX_ANDROID_SDK}/cmdline-tools/${IRONFOX_ANDROID_SDK_VERSION}" "${IRONFOX_ANDROID_SDK_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
# Accept Android SDK licenses
|
|
{ "${IRONFOX_YES}" || true; } | "${IRONFOX_ANDROID_SDK}/cmdline-tools/${IRONFOX_ANDROID_SDK_VERSION}/bin/sdkmanager" --sdk_root="${IRONFOX_ANDROID_SDK}" --licenses
|
|
|
|
echo_green_text "SUCCESS: Set-up Android SDK at ${IRONFOX_ANDROID_SDK}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get Android SDK Build Tools (latest)
|
|
function get_android_sdk_build_tools() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading Android SDK Build Tools (latest) (Linux)...'
|
|
download "https://dl.google.com/android/repository/build-tools_${IRONFOX_ANDROID_SDK_BUILD_TOOLS_VERSION}_linux.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS}" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_SHA512SUM_LINUX}"
|
|
|
|
echo_red_text 'Downloading Android SDK Build Tools (latest) (OS X)...'
|
|
download "https://dl.google.com/android/repository/build-tools_${IRONFOX_ANDROID_SDK_BUILD_TOOLS_VERSION}_macosx.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS}" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_SHA512SUM_OSX}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_ANDROID_SDK_BUILD_TOOLS_PLATFORM='macosx'
|
|
else
|
|
local -r IRONFOX_ANDROID_SDK_BUILD_TOOLS_PLATFORM='linux'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_ANDROID_SDK_BUILD_TOOLS_SHA512SUM="${IRONFOX_ANDROID_SDK_BUILD_TOOLS_SHA512SUM_OSX}"
|
|
else
|
|
local -r IRONFOX_ANDROID_SDK_BUILD_TOOLS_SHA512SUM="${IRONFOX_ANDROID_SDK_BUILD_TOOLS_SHA512SUM_LINUX}"
|
|
fi
|
|
|
|
echo_red_text 'Downloading Android SDK Build Tools (latest)...'
|
|
download_and_extract 'android-sdk-build-tools' "https://dl.google.com/android/repository/build-tools_${IRONFOX_ANDROID_SDK_BUILD_TOOLS_VERSION}_${IRONFOX_ANDROID_SDK_BUILD_TOOLS_PLATFORM}.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS}" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Android SDK Build Tools (latest) at ${IRONFOX_ANDROID_SDK_BUILD_TOOLS}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# 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() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading Android SDK Build Tools (35.0.0) (Linux)...'
|
|
download "https://dl.google.com/android/repository/build-tools_r35_linux.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35}" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_LINUX}"
|
|
|
|
echo_red_text 'Downloading Android SDK Build Tools (35.0.0) (OS X)...'
|
|
download "https://dl.google.com/android/repository/build-tools_r35_macosx.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35}" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_OSX}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_PLATFORM='macosx'
|
|
else
|
|
local -r IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_PLATFORM='linux'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM="${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_OSX}"
|
|
else
|
|
local -r IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM="${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM_LINUX}"
|
|
fi
|
|
|
|
echo_red_text 'Downloading Android SDK Build Tools (35.0.0)...'
|
|
download_and_extract 'android-sdk-build-tools-35' "https://dl.google.com/android/repository/build-tools_r35_${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_PLATFORM}.zip" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35}" "${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Android SDK Build Tools (35.0.0) at ${IRONFOX_ANDROID_SDK_BUILD_TOOLS_35}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get Android SDK Platform (latest)
|
|
function get_android_sdk_platform() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text "ERROR: Unsupported project."
|
|
exit 1
|
|
else
|
|
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-${IRONFOX_ANDROID_SDK_PLATFORM_VERSION}" ]]; then
|
|
echo_red_text "Found existing installation at ${IRONFOX_ANDROID_SDK}/platforms/android-${IRONFOX_ANDROID_SDK_PLATFORM_VERSION}"
|
|
echo 'Continuing will remove this installation and related data'
|
|
read -p "Do you still want to continue? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directory
|
|
echo_red_text "Removing ${IRONFOX_ANDROID_SDK}/platforms/android-${IRONFOX_ANDROID_SDK_PLATFORM_VERSION}..."
|
|
backup_dir "${IRONFOX_ANDROID_SDK}/platforms/android-${IRONFOX_ANDROID_SDK_PLATFORM_VERSION}"
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
# By default, we know the download hasn't failed...
|
|
local IRONFOX_DOWNLOAD_FAILED=0
|
|
|
|
echo_red_text 'Downloading Android SDK Platform (latest)...'
|
|
"${IRONFOX_ANDROID_SDK}/cmdline-tools/${IRONFOX_ANDROID_SDK_VERSION}/bin/sdkmanager" "platforms;android-${IRONFOX_ANDROID_SDK_PLATFORM_VERSION}" || local IRONFOX_DOWNLOAD_FAILED=1
|
|
|
|
# If the download failed, restore our back-up, clean-up, and exit
|
|
if [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
restore_dir "${IRONFOX_ANDROID_SDK}/platforms/android-${IRONFOX_ANDROID_SDK_PLATFORM_VERSION}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
else
|
|
echo_green_text "SUCCESS: Set-up Android SDK Platform (latest) at ${IRONFOX_ANDROID_SDK}/platforms/android-${IRONFOX_ANDROID_SDK_PLATFORM_VERSION}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get Android SDK Platform (36)
|
|
## (Needed by microG and 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 [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text "ERROR: Unsupported project."
|
|
exit 1
|
|
else
|
|
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 "Found existing installation at ${IRONFOX_ANDROID_SDK}/platforms/android-36"
|
|
echo 'Continuing will remove this installation and related data'
|
|
read -p "Do you still want to continue? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directory
|
|
echo_red_text "Removing ${IRONFOX_ANDROID_SDK}/platforms/android-36..."
|
|
backup_dir "${IRONFOX_ANDROID_SDK}/platforms/android-36"
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
# By default, we know the download hasn't failed...
|
|
local IRONFOX_DOWNLOAD_FAILED=0
|
|
|
|
echo_red_text 'Downloading Android SDK Platform (36)...'
|
|
"${IRONFOX_ANDROID_SDK}/cmdline-tools/${IRONFOX_ANDROID_SDK_VERSION}/bin/sdkmanager" 'platforms;android-36' || local IRONFOX_DOWNLOAD_FAILED=1
|
|
|
|
# If the download failed, restore our back-up, clean-up, and exit
|
|
if [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
restore_dir "${IRONFOX_ANDROID_SDK}/platforms/android-36"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
else
|
|
echo_green_text "SUCCESS: Set-up Android SDK Platform (36) at ${IRONFOX_ANDROID_SDK}/platforms/android-36"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get Android SDK Platform Tools
|
|
function get_android_sdk_platform_tools() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading Android SDK Platform Tools (Linux)...'
|
|
download "https://dl.google.com/android/repository/platform-tools_r${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_VERSION}-linux.zip" "${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS}" "${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_LINUX}"
|
|
|
|
echo_red_text 'Downloading Android SDK Platform Tools (OS X)...'
|
|
download "https://dl.google.com/android/repository/platform-tools_r${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_VERSION}-darwin.zip" "${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS}" "${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_OSX}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_PLATFORM='darwin'
|
|
else
|
|
local -r IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_PLATFORM='linux'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM="${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_OSX}"
|
|
else
|
|
local -r IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM="${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM_LINUX}"
|
|
fi
|
|
|
|
echo_red_text 'Downloading Android SDK Platform Tools...'
|
|
download_and_extract 'android-sdk-platform-tools' "https://dl.google.com/android/repository/platform-tools_r${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_VERSION}-${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_PLATFORM}.zip" "${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS}" "${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Android SDK Platform Tools at ${IRONFOX_ANDROID_SDK_PLATFORM_TOOLS}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get Application Services
|
|
function get_as() {
|
|
echo_red_text 'Downloading Application Services...'
|
|
download_and_extract 'application-services' "https://github.com/mozilla/application-services/archive/${IRONFOX_AS_COMMIT}.tar.gz" "${IRONFOX_AS}" "${IRONFOX_AS_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Application Services at ${IRONFOX_AS}"
|
|
fi
|
|
}
|
|
|
|
# Get + set-up Bundletool
|
|
function get_bundletool() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading Bundletool (Source archive)...'
|
|
download_and_extract 'bundletool' "https://github.com/google/bundletool/archive/${IRONFOX_BUNDLETOOL_REPO_COMMIT}.tar.gz" "${IRONFOX_BUNDLETOOL_DIR}" "${IRONFOX_BUNDLETOOL_REPO_SHA512SUM}"
|
|
|
|
echo_red_text 'Downloading Bundletool (Prebuilt)...'
|
|
download "https://github.com/google/bundletool/releases/download/${IRONFOX_BUNDLETOOL_VERSION}/bundletool-all-${IRONFOX_BUNDLETOOL_VERSION}.jar" "${IRONFOX_BUNDLETOOL_JAR}" "${IRONFOX_BUNDLETOOL_SHA512SUM}"
|
|
else
|
|
echo_red_text 'Downloading Bundletool...'
|
|
if [[ "${IRONFOX_NO_PREBUILDS}" == "1" ]]; then
|
|
download_and_extract 'bundletool' "https://github.com/google/bundletool/archive/${IRONFOX_BUNDLETOOL_REPO_COMMIT}.tar.gz" "${IRONFOX_BUNDLETOOL_DIR}" "${IRONFOX_BUNDLETOOL_REPO_SHA512SUM}"
|
|
else
|
|
download "https://github.com/google/bundletool/releases/download/${IRONFOX_BUNDLETOOL_VERSION}/bundletool-all-${IRONFOX_BUNDLETOOL_VERSION}.jar" "${IRONFOX_BUNDLETOOL_JAR}" "${IRONFOX_BUNDLETOOL_SHA512SUM}"
|
|
fi
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Bundletool at ${IRONFOX_BUNDLETOOL_DIR}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get cbindgen
|
|
function get_cbindgen() {
|
|
# If all we're doing is updating the checksum, we don't care if the environment is prepared
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
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
|
|
fi
|
|
|
|
echo_red_text "Downloading cbindgen..."
|
|
download_and_extract 'cbindgen' "https://github.com/mozilla/cbindgen/archive/${IRONFOX_CBINDGEN_COMMIT}.tar.gz" "${IRONFOX_CBINDGEN_DIR}" "${IRONFOX_CBINDGEN_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
source "${IRONFOX_CARGO_ENV}"
|
|
echo_red_text 'Installing cbindgen...'
|
|
"${IRONFOX_CARGO}" +"${IRONFOX_RUST_VERSION}" install --locked --force --vers "${IRONFOX_CBINDGEN_VERSION}" --path "${IRONFOX_CBINDGEN_DIR}" cbindgen
|
|
echo_green_text "SUCCESS: Set-up cbindgen at ${IRONFOX_CARGO_HOME}/bin/cbindgen"
|
|
fi
|
|
}
|
|
|
|
# Get Firefox (Gecko/mozilla-central)
|
|
function get_firefox() {
|
|
echo_red_text 'Downloading Firefox...'
|
|
download_and_extract 'gecko' "https://github.com/mozilla-firefox/firefox/archive/${IRONFOX_GECKO_COMMIT}.tar.gz" "${IRONFOX_GECKO}" "${IRONFOX_GECKO_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Firefox at ${IRONFOX_GECKO}"
|
|
fi
|
|
}
|
|
|
|
# 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/${IRONFOX_L10N_CENTRAL_COMMIT}.tar.gz" "${IRONFOX_L10N_CENTRAL}" "${IRONFOX_L10N_CENTRAL_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up firefox-l10n at ${IRONFOX_L10N_CENTRAL}"
|
|
fi
|
|
}
|
|
|
|
# Get Glean
|
|
function get_glean() {
|
|
echo_red_text 'Downloading Glean...'
|
|
download_and_extract 'glean' "https://github.com/mozilla/glean/archive/${IRONFOX_GLEAN_COMMIT}.tar.gz" "${IRONFOX_GLEAN}" "${IRONFOX_GLEAN_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Glean at ${IRONFOX_GLEAN}"
|
|
fi
|
|
}
|
|
|
|
# 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 Python 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
|
|
|
|
# Set our Glean Parser wheels directory
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
local -r glean_parser_wheels="${IRONFOX_EXTERNAL}/temp/chksm/glean_parser-wheels"
|
|
else
|
|
local -r glean_parser_wheels="${IRONFOX_GLEAN_PARSER_WHEELS}"
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]] && [[ -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
|
|
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directory
|
|
backup_dir "${glean_parser_wheels}"
|
|
fi
|
|
fi
|
|
|
|
"${IRONFOX_MKDIR}" -p "${glean_parser_wheels}"
|
|
source "${IRONFOX_PYENV}"
|
|
echo_red_text 'Downloading Glean Parser wheels...'
|
|
pushd "${IRONFOX_GLEAN_PARSER_WHEELS}"
|
|
"${IRONFOX_PIP}" download glean-parser=="${IRONFOX_GLEAN_PARSER_VERSION}"
|
|
popd
|
|
|
|
# Validate SHA512sum
|
|
validate_checksum "${IRONFOX_GLEAN_PARSER_SHA512SUM}" "${IRONFOX_GLEAN_PARSER_WHEELS}/glean_parser-${IRONFOX_GLEAN_PARSER_VERSION}-py3-none-any.whl" 'sha512sum'
|
|
|
|
# Clean-up
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp/chksm"
|
|
fi
|
|
}
|
|
|
|
# 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/${IRONFOX_GRADLE_COMMIT}/gradlew.py" "${IRONFOX_GRADLE_PY}" "${IRONFOX_GRADLE_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Gradle at ${IRONFOX_GRADLE_PY}"
|
|
fi
|
|
}
|
|
|
|
# Get GYP
|
|
function get_gyp() {
|
|
# If all we're doing is updating the checksum, we don't care if the environment is prepared
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
if [[ ! -d "${IRONFOX_UV_DIR}" ]] || [[ ! -f "${IRONFOX_PYENV}" ]]; then
|
|
echo_red_text "ERROR: You tried to download GYP, but you don't have a Python 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
|
|
fi
|
|
|
|
echo_red_text "Downloading GYP..."
|
|
download_and_extract 'gyp-next' "https://github.com/nodejs/gyp-next/archive/${IRONFOX_GYP_COMMIT}.tar.gz" "${IRONFOX_GYP}" "${IRONFOX_GYP_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
source "${IRONFOX_PYENV}"
|
|
echo_red_text 'Installing GYP...'
|
|
"${IRONFOX_UV}" pip install --no-editable --strict "${IRONFOX_GYP}"
|
|
echo_green_text "SUCCESS: Set-up GYP at ${IRONFOX_PYENV_DIR}/bin/gyp"
|
|
fi
|
|
}
|
|
|
|
# Get JDK (17)
|
|
## (Required by GeckoView)
|
|
function get_jdk_17() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading JDK (17) (Linux - ARM64)...'
|
|
download "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${IRONFOX_JDK_17_VERSION}%2B${IRONFOX_JDK_17_REVISION}/OpenJDK17U-jdk_aarch64_linux_hotspot_${IRONFOX_JDK_17_VERSION}_${IRONFOX_JDK_17_REVISION}.tar.gz" "${IRONFOX_JDK_17}" "${IRONFOX_JDK_17_SHA512SUM_LINUX_ARM64}"
|
|
|
|
echo_red_text 'Downloading JDK (17) (Linux - x86_64)...'
|
|
download "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${IRONFOX_JDK_17_VERSION}%2B${IRONFOX_JDK_17_REVISION}/OpenJDK17U-jdk_x64_linux_hotspot_${IRONFOX_JDK_17_VERSION}_${IRONFOX_JDK_17_REVISION}.tar.gz" "${IRONFOX_JDK_17}" "${IRONFOX_JDK_17_SHA512SUM_LINUX_X86_64}"
|
|
|
|
echo_red_text 'Downloading JDK (17) (OS X - ARM64)...'
|
|
download "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${IRONFOX_JDK_17_VERSION}%2B${IRONFOX_JDK_17_REVISION}/OpenJDK17U-jdk_aarch64_mac_hotspot_${IRONFOX_JDK_17_VERSION}_${IRONFOX_JDK_17_REVISION}.tar.gz" "${IRONFOX_JDK_17}" "${IRONFOX_JDK_17_SHA512SUM_OSX_ARM64}"
|
|
|
|
echo_red_text 'Downloading JDK (17) (OS X - x86_64)...'
|
|
download "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${IRONFOX_JDK_17_VERSION}%2B${IRONFOX_JDK_17_REVISION}/OpenJDK17U-jdk_x64_mac_hotspot_${IRONFOX_JDK_17_VERSION}_${IRONFOX_JDK_17_REVISION}.tar.gz" "${IRONFOX_JDK_17}" "${IRONFOX_JDK_17_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_17_PLATFORM='mac'
|
|
else
|
|
local -r IRONFOX_JDK_17_PLATFORM='linux'
|
|
fi
|
|
|
|
# Set our platform architecture
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
local -r IRONFOX_JDK_17_ARCH='aarch64'
|
|
else
|
|
local -r IRONFOX_JDK_17_ARCH='x64'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_17_SHA512SUM="${IRONFOX_JDK_17_SHA512SUM_OSX_ARM64}"
|
|
else
|
|
local -r IRONFOX_JDK_17_SHA512SUM="${IRONFOX_JDK_17_SHA512SUM_LINUX_ARM64}"
|
|
fi
|
|
else
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_17_SHA512SUM="${IRONFOX_JDK_17_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
local -r IRONFOX_JDK_17_SHA512SUM="${IRONFOX_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-${IRONFOX_JDK_17_VERSION}%2B${IRONFOX_JDK_17_REVISION}/OpenJDK17U-jdk_${IRONFOX_JDK_17_ARCH}_${IRONFOX_JDK_17_PLATFORM}_hotspot_${IRONFOX_JDK_17_VERSION}_${IRONFOX_JDK_17_REVISION}.tar.gz" "${IRONFOX_JDK_17}" "${IRONFOX_JDK_17_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up JDK (17) at ${IRONFOX_JDK_17}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get JDK (21)
|
|
function get_jdk_21() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading JDK (21) (Linux - ARM64)...'
|
|
download "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-${IRONFOX_JDK_21_VERSION}%2B${IRONFOX_JDK_21_REVISION}/OpenJDK21U-jdk_aarch64_linux_hotspot_${IRONFOX_JDK_21_VERSION}_${IRONFOX_JDK_21_REVISION}.tar.gz" "${IRONFOX_JDK_21}" "${IRONFOX_JDK_21_SHA512SUM_LINUX_ARM64}"
|
|
|
|
echo_red_text 'Downloading JDK (21) (Linux - x86_64)...'
|
|
download "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-${IRONFOX_JDK_21_VERSION}%2B${IRONFOX_JDK_21_REVISION}/OpenJDK21U-jdk_x64_linux_hotspot_${IRONFOX_JDK_21_VERSION}_${IRONFOX_JDK_21_REVISION}.tar.gz" "${IRONFOX_JDK_21}" "${IRONFOX_JDK_21_SHA512SUM_LINUX_X86_64}"
|
|
|
|
echo_red_text 'Downloading JDK (21) (OS X - ARM64)...'
|
|
download "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-${IRONFOX_JDK_21_VERSION}%2B${IRONFOX_JDK_21_REVISION}/OpenJDK21U-jdk_aarch64_mac_hotspot_${IRONFOX_JDK_21_VERSION}_${IRONFOX_JDK_21_REVISION}.tar.gz" "${IRONFOX_JDK_21}" "${IRONFOX_JDK_21_SHA512SUM_OSX_ARM64}"
|
|
|
|
echo_red_text 'Downloading JDK (21) (OS X - x86_64)...'
|
|
download "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-${IRONFOX_JDK_21_VERSION}%2B${IRONFOX_JDK_21_REVISION}/OpenJDK21U-jdk_x64_mac_hotspot_${IRONFOX_JDK_21_VERSION}_${IRONFOX_JDK_21_REVISION}.tar.gz" "${IRONFOX_JDK_21}" "${IRONFOX_JDK_21_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_21_PLATFORM='mac'
|
|
else
|
|
local -r IRONFOX_JDK_21_PLATFORM='linux'
|
|
fi
|
|
|
|
# Set our platform architecture
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
local -r IRONFOX_JDK_21_ARCH='aarch64'
|
|
else
|
|
local -r IRONFOX_JDK_21_ARCH='x64'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_21_SHA512SUM="${IRONFOX_JDK_21_SHA512SUM_OSX_ARM64}"
|
|
else
|
|
local -r IRONFOX_JDK_21_SHA512SUM="${IRONFOX_JDK_21_SHA512SUM_LINUX_ARM64}"
|
|
fi
|
|
else
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_21_SHA512SUM="${IRONFOX_JDK_21_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
local -r IRONFOX_JDK_21_SHA512SUM="${IRONFOX_JDK_21_SHA512SUM_LINUX_X86_64}"
|
|
fi
|
|
fi
|
|
|
|
echo_red_text 'Downloading JDK (21)...'
|
|
download_and_extract 'jdk-21' "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-${IRONFOX_JDK_21_VERSION}%2B${IRONFOX_JDK_21_REVISION}/OpenJDK21U-jdk_${IRONFOX_JDK_21_ARCH}_${IRONFOX_JDK_21_PLATFORM}_hotspot_${IRONFOX_JDK_21_VERSION}_${IRONFOX_JDK_21_REVISION}.tar.gz" "${IRONFOX_JDK_21}" "${IRONFOX_JDK_21_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up JDK (21) at ${IRONFOX_JDK_21}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get JDK (25)
|
|
function get_jdk_25() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading JDK (25) (Linux - ARM64)...'
|
|
download "https://github.com/adoptium/temurin25-binaries/releases/download/jdk-${IRONFOX_JDK_25_VERSION}%2B${IRONFOX_JDK_25_REVISION}/OpenJDK25U-jdk_aarch64_linux_hotspot_${IRONFOX_JDK_25_VERSION}_${IRONFOX_JDK_25_REVISION}.tar.gz" "${IRONFOX_JDK_25}" "${IRONFOX_JDK_25_SHA512SUM_LINUX_ARM64}"
|
|
|
|
echo_red_text 'Downloading JDK (25) (Linux - x86_64)...'
|
|
download "https://github.com/adoptium/temurin25-binaries/releases/download/jdk-${IRONFOX_JDK_25_VERSION}%2B${IRONFOX_JDK_25_REVISION}/OpenJDK25U-jdk_x64_linux_hotspot_${IRONFOX_JDK_25_VERSION}_${IRONFOX_JDK_25_REVISION}.tar.gz" "${IRONFOX_JDK_25}" "${IRONFOX_JDK_25_SHA512SUM_LINUX_X86_64}"
|
|
|
|
echo_red_text 'Downloading JDK (25) (OS X - ARM64)...'
|
|
download "https://github.com/adoptium/temurin25-binaries/releases/download/jdk-${IRONFOX_JDK_25_VERSION}%2B${IRONFOX_JDK_25_REVISION}/OpenJDK25U-jdk_aarch64_mac_hotspot_${IRONFOX_JDK_25_VERSION}_${IRONFOX_JDK_25_REVISION}.tar.gz" "${IRONFOX_JDK_25}" "${IRONFOX_JDK_25_SHA512SUM_OSX_ARM64}"
|
|
|
|
echo_red_text 'Downloading JDK (25) (OS X - x86_64)...'
|
|
download "https://github.com/adoptium/temurin25-binaries/releases/download/jdk-${IRONFOX_JDK_25_VERSION}%2B${IRONFOX_JDK_25_REVISION}/OpenJDK25U-jdk_x64_mac_hotspot_${IRONFOX_JDK_25_VERSION}_${IRONFOX_JDK_25_REVISION}.tar.gz" "${IRONFOX_JDK_25}" "${IRONFOX_JDK_25_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_25_PLATFORM='mac'
|
|
else
|
|
local -r IRONFOX_JDK_25_PLATFORM='linux'
|
|
fi
|
|
|
|
# Set our platform architecture
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
local -r IRONFOX_JDK_25_ARCH='aarch64'
|
|
else
|
|
local -r IRONFOX_JDK_25_ARCH='x64'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_25_SHA512SUM="${IRONFOX_JDK_25_SHA512SUM_OSX_ARM64}"
|
|
else
|
|
local -r IRONFOX_JDK_25_SHA512SUM="${IRONFOX_JDK_25_SHA512SUM_LINUX_ARM64}"
|
|
fi
|
|
else
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_JDK_25_SHA512SUM="${IRONFOX_JDK_25_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
local -r IRONFOX_JDK_25_SHA512SUM="${IRONFOX_JDK_25_SHA512SUM_LINUX_X86_64}"
|
|
fi
|
|
fi
|
|
|
|
echo_red_text 'Downloading JDK (25)...'
|
|
download_and_extract 'jdk-25' "https://github.com/adoptium/temurin25-binaries/releases/download/jdk-${IRONFOX_JDK_25_VERSION}%2B${IRONFOX_JDK_25_REVISION}/OpenJDK25U-jdk_${IRONFOX_JDK_25_ARCH}_${IRONFOX_JDK_25_PLATFORM}_hotspot_${IRONFOX_JDK_25_VERSION}_${IRONFOX_JDK_25_REVISION}.tar.gz" "${IRONFOX_JDK_25}" "${IRONFOX_JDK_25_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up JDK (25) at ${IRONFOX_JDK_25}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get microG
|
|
function get_microg() {
|
|
echo_red_text 'Downloading microG...'
|
|
download_and_extract 'gmscore' "https://github.com/microg/GmsCore/archive/${IRONFOX_GMSCORE_COMMIT}.tar.gz" "${IRONFOX_GMSCORE}" "${IRONFOX_GMSCORE_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up microG at ${IRONFOX_GMSCORE}"
|
|
fi
|
|
}
|
|
|
|
# Get + set-up Node.js
|
|
function get_node() {
|
|
# If all we're doing is updating the checksum, we don't care if the environment is prepared
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
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
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_NPM_CACHE}" "${IRONFOX_NVM}" "${IRONFOX_ROOT}/node_modules"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
download_and_extract 'nvm' "https://github.com/nvm-sh/nvm/archive/${IRONFOX_NVM_COMMIT}.tar.gz" "${IRONFOX_NVM}" "${IRONFOX_NVM_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_red_text 'Installing Node.js...'
|
|
source "${IRONFOX_NVM_ENV}"
|
|
nvm install "${IRONFOX_NODE_VERSION}"
|
|
nvm alias default "${IRONFOX_NODE_VERSION}"
|
|
nvm use "${IRONFOX_NODE_VERSION}"
|
|
echo_green_text "SUCCESS: Set-up Node.js environment at ${IRONFOX_NVM}"
|
|
fi
|
|
}
|
|
|
|
# Get npm
|
|
function get_npm() {
|
|
# If all we're doing is updating the checksum, we don't care if the environment is prepared
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]] && [[ ! -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-${IRONFOX_NPM_VERSION}.tgz" "${IRONFOX_DOWNLOADS}/npm.tgz" "${IRONFOX_NPM_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
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}"
|
|
fi
|
|
}
|
|
|
|
# Get Phoenix
|
|
function get_phoenix() {
|
|
echo_red_text 'Downloading Phoenix...'
|
|
download_and_extract 'phoenix' "https://gitlab.com/celenityy/Phoenix/-/archive/${IRONFOX_PHOENIX_COMMIT}/Phoenix-${IRONFOX_PHOENIX_COMMIT}.tar.gz" "${IRONFOX_PHOENIX}" "${IRONFOX_PHOENIX_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up Phoenix at ${IRONFOX_PHOENIX}"
|
|
fi
|
|
}
|
|
|
|
# Get + set-up pip
|
|
function get_pip() {
|
|
# If all we're doing is updating the checksum, we don't care if the environment is prepared
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
if [[ ! -d "${IRONFOX_UV_DIR}" ]] || [[ ! -f "${IRONFOX_PYENV}" ]]; then
|
|
echo_red_text "ERROR: You tried to download pip, but you don't have a Python environment set-up yet."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo_red_text 'Downloading pip...'
|
|
download_and_extract 'pip' "https://github.com/pypa/pip/archive/${IRONFOX_PIP_COMMIT}.tar.gz" "${IRONFOX_PIP_DIR}" "${IRONFOX_PIP_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
source "${IRONFOX_PYENV}"
|
|
echo_red_text 'Installing pip...'
|
|
"${IRONFOX_UV}" pip install --no-editable --strict "${IRONFOX_PIP_DIR}"
|
|
echo_green_text "SUCCESS: Set-up pip at ${IRONFOX_PIP}"
|
|
fi
|
|
}
|
|
|
|
# Get the IronFox prebuilds repo
|
|
function get_prebuilds() {
|
|
echo_red_text 'Downloading the IronFox prebuilds repository...'
|
|
download_and_extract 'prebuilds' "https://gitlab.com/ironfox-oss/prebuilds/-/archive/${IRONFOX_PREBUILDS_COMMIT}/prebuilds-${IRONFOX_PREBUILDS_COMMIT}.tar.gz" "${IRONFOX_PREBUILDS}" "${IRONFOX_PREBUILDS_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
pushd "${IRONFOX_PREBUILDS}"
|
|
echo_red_text 'Downloading prebuild sources...'
|
|
/bin/bash "${IRONFOX_PREBUILDS}/scripts/get_sources.sh"
|
|
popd
|
|
echo_green_text "SUCCESS: Set-up the IronFox prebuilds repository at ${IRONFOX_PREBUILDS}"
|
|
fi
|
|
}
|
|
|
|
# Get Python
|
|
function get_python() {
|
|
# If all we're doing is updating the checksum, we don't care about existing installations
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
if [[ ! -x "${IRONFOX_UV}" ]]; then
|
|
echo_red_text "ERROR: You tried to download Python, but you're missing uv!"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -d "${IRONFOX_PYENV_DIR}" ]]; then
|
|
echo_red_text "The Python 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
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directory
|
|
backup_dir "${IRONFOX_PYENV_DIR}"
|
|
fi
|
|
fi
|
|
|
|
if [[ -d "${IRONFOX_PYTHON_DIR}" ]]; then
|
|
echo_red_text "Found existing installation at ${IRONFOX_PYTHON_DIR}"
|
|
echo 'Continuing will remove this installation and related data'
|
|
read -p "Do you still want to continue? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directories
|
|
backup_dir "${IRONFOX_PYENV_DIR}"
|
|
backup_dir "${IRONFOX_PYTHON_DIR}"
|
|
backup_dir "${IRONFOX_UV_CACHE}"
|
|
backup_dir "${IRONFOX_UV_LOCAL}/python-cache"
|
|
backup_dir "${IRONFOX_UV_PYTHON}"
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading Python (Linux - ARM64)...'
|
|
download "https://github.com/astral-sh/python-build-standalone/releases/download/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_DIR}/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_SHA512SUM_LINUX_ARM64}"
|
|
|
|
echo_red_text 'Downloading Python (Linux - x86_64)...'
|
|
download "https://github.com/astral-sh/python-build-standalone/releases/download/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_DIR}/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_SHA512SUM_LINUX_X86_64}"
|
|
|
|
echo_red_text 'Downloading Python (OS X - ARM64)...'
|
|
download "https://github.com/astral-sh/python-build-standalone/releases/download/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-aarch64-apple-darwin-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_DIR}/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-aarch64-apple-darwin-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_SHA512SUM_OSX_ARM64}"
|
|
|
|
echo_red_text 'Downloading Python (OS X - x86_64)...'
|
|
download "https://github.com/astral-sh/python-build-standalone/releases/download/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-x86_64-apple-darwin-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_DIR}/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-x86_64-apple-darwin-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_PYTHON_PLATFORM='apple-darwin'
|
|
else
|
|
local -r IRONFOX_PYTHON_PLATFORM='unknown-linux-gnu'
|
|
fi
|
|
|
|
# Set our platform architecture
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
local -r IRONFOX_PYTHON_ARCH='aarch64'
|
|
else
|
|
local -r IRONFOX_PYTHON_ARCH='x86_64'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_PYTHON_SHA512SUM="${IRONFOX_PYTHON_SHA512SUM_OSX_ARM64}"
|
|
else
|
|
local -r IRONFOX_PYTHON_SHA512SUM="${IRONFOX_PYTHON_SHA512SUM_LINUX_ARM64}"
|
|
fi
|
|
else
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_PYTHON_SHA512SUM="${IRONFOX_PYTHON_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
local -r IRONFOX_PYTHON_SHA512SUM="${IRONFOX_PYTHON_SHA512SUM_LINUX_X86_64}"
|
|
fi
|
|
fi
|
|
|
|
# Tell `download` to return instead of exit upon an error
|
|
IRONFOX_DOWNLOAD_EXIT=0
|
|
|
|
# By default, we know nothing has failed...
|
|
local IRONFOX_DOWNLOAD_FAILED=0
|
|
local IRONFOX_PYENV_FAILED=0
|
|
local IRONFOX_PYTHON_INSTALL_FAILED=0
|
|
|
|
echo_red_text 'Downloading Python...'
|
|
download "https://github.com/astral-sh/python-build-standalone/releases/download/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-${IRONFOX_PYTHON_ARCH}-${IRONFOX_PYTHON_PLATFORM}-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_DIR}/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-${IRONFOX_PYTHON_ARCH}-${IRONFOX_PYTHON_PLATFORM}-install_only_stripped.tar.gz" "${IRONFOX_PYTHON_SHA512SUM}" || local IRONFOX_DOWNLOAD_FAILED=1
|
|
|
|
# If the download failed, restore our back-ups, clean-up, and exit
|
|
if [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
restore_dir "${IRONFOX_PYENV_DIR}"
|
|
restore_dir "${IRONFOX_PYTHON_DIR}"
|
|
restore_dir "${IRONFOX_UV_CACHE}"
|
|
restore_dir "${IRONFOX_UV_PYTHON}"
|
|
restore_dir "${IRONFOX_UV_LOCAL}/python-cache"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
elif [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Downloaded Python to ${IRONFOX_PYTHON_DIR}/${IRONFOX_PYTHON_GIT_RELEASE}/cpython-${IRONFOX_PYTHON_VERSION}+${IRONFOX_PYTHON_GIT_RELEASE}-${IRONFOX_PYTHON_ARCH}-${IRONFOX_PYTHON_PLATFORM}-install_only_stripped.tar.gz"
|
|
|
|
echo_red_text 'Installing Python...'
|
|
"${IRONFOX_UV}" python install "${IRONFOX_PYTHON_VERSION}" || local IRONFOX_PYTHON_INSTALL_FAILED=1
|
|
|
|
# If the install failed, restore our back-ups, clean-up, and exit
|
|
if [[ "${IRONFOX_PYTHON_INSTALL_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Installation failed! Exiting...'
|
|
restore_dir "${IRONFOX_PYENV_DIR}"
|
|
restore_dir "${IRONFOX_PYTHON_DIR}"
|
|
restore_dir "${IRONFOX_UV_CACHE}"
|
|
restore_dir "${IRONFOX_UV_PYTHON}"
|
|
restore_dir "${IRONFOX_UV_LOCAL}/python-cache"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
fi
|
|
|
|
echo_red_text 'Creating Python environment...'
|
|
"${IRONFOX_UV}" venv "${IRONFOX_PYENV_DIR}" || local IRONFOX_PYENV_FAILED=1
|
|
|
|
# If the Python env set-up failed, restore our back-up, clean-up, and exit
|
|
if [[ "${IRONFOX_PYENV_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Environment set-up failed! Exiting...'
|
|
restore_dir "${IRONFOX_PYENV_DIR}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
else
|
|
echo_green_text "SUCCESS: Set-up Python environment at ${IRONFOX_PYENV_DIR}"
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get PyYAML
|
|
function get_pyyaml() {
|
|
# If all we're doing is updating the checksum, we don't care if the environment is prepared
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
if [[ ! -d "${IRONFOX_UV_DIR}" ]] || [[ ! -f "${IRONFOX_PYENV}" ]]; then
|
|
echo_red_text "ERROR: You tried to download PyYAML, but you don't have a Python environment set-up yet."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -d "${IRONFOX_PYYAML}" ]]; then
|
|
echo_red_text "PyYAML is already downloaded at ${IRONFOX_PYYAML}"
|
|
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 pyyaml
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo_red_text "Downloading PyYAML..."
|
|
download_and_extract 'pyyaml' "https://github.com/yaml/pyyaml/archive/${IRONFOX_PYYAML_COMMIT}.tar.gz" "${IRONFOX_PYYAML}" "${IRONFOX_PYYAML_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
source "${IRONFOX_PYENV}"
|
|
echo_red_text 'Installing PyYAML...'
|
|
"${IRONFOX_UV}" pip install --no-editable --strict "${IRONFOX_PYYAML}"
|
|
echo_green_text 'SUCCESS: Set-up PyYAML'
|
|
fi
|
|
}
|
|
|
|
# Get + set-up rust/cargo
|
|
function get_rust() {
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]] && [[ -d "${IRONFOX_CARGO_HOME}" ]]; then
|
|
echo_red_text "Found existing installation at ${IRONFOX_CARGO_HOME}"
|
|
echo 'Continuing will remove this installation and related data'
|
|
read -p "Do you still want to continue? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directories
|
|
backup_dir "${IRONFOX_CARGO_HOME}"
|
|
backup_dir "${IRONFOX_RUSTUP_HOME}"
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo_red_text 'Downloading Rust...'
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
download "https://raw.githubusercontent.com/rust-lang/rustup/${IRONFOX_RUSTUP_COMMIT}/rustup-init.sh" "${IRONFOX_DOWNLOADS}/rustup-init.sh" "${IRONFOX_RUSTUP_SHA512SUM}"
|
|
else
|
|
# Tell `download` to return instead of exit upon an error
|
|
IRONFOX_DOWNLOAD_EXIT=0
|
|
|
|
# By default, we know nothing has failed...
|
|
local IRONFOX_CARGO_ENV_FAILED=0
|
|
local IRONFOX_CARGO_INSTALL_FAILED=0
|
|
local IRONFOX_DOWNLOAD_FAILED=0
|
|
|
|
download "https://raw.githubusercontent.com/rust-lang/rustup/${IRONFOX_RUSTUP_COMMIT}/rustup-init.sh" "${IRONFOX_DOWNLOADS}/rustup-init.sh" "${IRONFOX_RUSTUP_SHA512SUM}" || local IRONFOX_DOWNLOAD_FAILED=1
|
|
|
|
# If the download failed, restore our back-up, clean-up, and exit
|
|
if [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
restore_dir "${IRONFOX_CARGO_HOME}"
|
|
restore_dir "${IRONFOX_RUSTUP_HOME}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
elif [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_red_text 'Installing Rust...'
|
|
/bin/bash -x "${IRONFOX_DOWNLOADS}/rustup-init.sh" -y --no-modify-path --no-update-default-toolchain --profile=minimal || local IRONFOX_CARGO_INSTALL_FAILED=1
|
|
|
|
# If the install failed, restore our back-ups, clean-up, and exit
|
|
if [[ "${IRONFOX_CARGO_INSTALL_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Installation failed! Exiting...'
|
|
restore_dir "${IRONFOX_CARGO_HOME}"
|
|
restore_dir "${IRONFOX_RUSTUP_HOME}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
fi
|
|
|
|
# Source the newly created Rust environment
|
|
source "${IRONFOX_CARGO_ENV}" || local IRONFOX_CARGO_ENV_FAILED=1
|
|
|
|
# If we couldn't source our environment, restore our back-ups, clean-up, and exit
|
|
if [[ "${IRONFOX_CARGO_ENV_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Could not source environment! Exiting...'
|
|
restore_dir "${IRONFOX_CARGO_HOME}"
|
|
restore_dir "${IRONFOX_RUSTUP_HOME}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
fi
|
|
|
|
# Set-up Rust
|
|
rustup set profile minimal
|
|
rustup default "${IRONFOX_RUST_VERSION}"
|
|
rustup override set "${IRONFOX_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 at ${IRONFOX_CARGO_HOME}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get s3cmd
|
|
function get_s3cmd() {
|
|
# If all we're doing is updating the checksum, we don't care if the environment is prepared
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]]; then
|
|
if [[ ! -d "${IRONFOX_UV_DIR}" ]] || [[ ! -f "${IRONFOX_PYENV}" ]]; then
|
|
echo_red_text "ERROR: You tried to download s3cmd, but you don't have a Python environment set-up yet."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -d "${IRONFOX_S3CMD}" ]]; then
|
|
echo_red_text "s3cmd is already installed at ${IRONFOX_S3CMD}"
|
|
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 s3cmd
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo_red_text "Downloading s3cmd..."
|
|
download_and_extract 's3cmd' "https://github.com/s3tools/s3cmd/archive/${IRONFOX_S3CMD_COMMIT}.tar.gz" "${IRONFOX_S3CMD_DIR}" "${IRONFOX_S3CMD_SHA512SUM}"
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
source "${IRONFOX_PYENV}"
|
|
echo_red_text 'Installing s3cmd...'
|
|
"${IRONFOX_UV}" pip install --no-editable --strict "${IRONFOX_S3CMD_DIR}"
|
|
echo_green_text "SUCCESS: Set-up s3cmd at ${IRONFOX_S3CMD}"
|
|
fi
|
|
}
|
|
|
|
# Get Tor's no-op UniFFi binding generator
|
|
function get_uniffi() {
|
|
# Get uniffi-bindgen for Linux
|
|
if [[ "${IRONFOX_PLATFORM}" == 'linux' ]] || [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading prebuilt uniffi-bindgen (Linux)...'
|
|
download_and_extract 'uniffi' "https://gitlab.com/ironfox-oss/prebuilds/-/raw/${IRONFOX_PREBUILDS_COMMIT}/uniffi-bindgen/${IRONFOX_UNIFFI_VERSION}/linux/uniffi-bindgen-${IRONFOX_UNIFFI_VERSION}-${IRONFOX_UNIFFI_IRONFOX_REVISION}-linux.tar.xz" "${IRONFOX_UNIFFI}" "${IRONFOX_UNIFFI_LINUX_IRONFOX_SHA512SUM}"
|
|
fi
|
|
|
|
# Get uniffi-bindgen for OS X
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]] || [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading prebuilt uniffi-bindgen (OS X)...'
|
|
download_and_extract 'uniffi' "https://gitlab.com/ironfox-oss/prebuilds/-/raw/${IRONFOX_PREBUILDS_COMMIT}/uniffi-bindgen/${IRONFOX_UNIFFI_VERSION}/osx/uniffi-bindgen-${IRONFOX_UNIFFI_VERSION}-${IRONFOX_UNIFFI_IRONFOX_REVISION}-osx.tar.xz" "${IRONFOX_UNIFFI}" "${IRONFOX_UNIFFI_OSX_IRONFOX_SHA512SUM}"
|
|
fi
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up the prebuilt uniffi-bindgen at ${IRONFOX_UNIFFI}"
|
|
fi
|
|
}
|
|
|
|
# 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/${IRONFOX_UP_AC_COMMIT}/unifiedpush-ac-${IRONFOX_UP_AC_COMMIT}.tar.gz" "${IRONFOX_UP_AC}" "${IRONFOX_UP_AC_SHA512SUM}"
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up UnifiedPush-AC at ${IRONFOX_UP_AC}"
|
|
fi
|
|
}
|
|
|
|
# Get + set-up uv
|
|
function get_uv() {
|
|
# If all we're doing is updating the checksum, we don't care about existing installations
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" != 1 ]] && [[ -d "${IRONFOX_UV_DIR}" ]]; then
|
|
echo_red_text "Found existing installation at ${IRONFOX_UV_DIR}"
|
|
echo 'Continuing will remove this installation and related data'
|
|
read -p "Do you still want to continue? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
|
|
# Back-up (in case something goes wrong - ex. checksum validation fails) and remove our directories
|
|
backup_dir "${IRONFOX_UV_DIR}"
|
|
backup_dir "${IRONFOX_UV_LOCAL}"
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading uv (Linux - ARM64)...'
|
|
download "https://github.com/astral-sh/uv/releases/download/${IRONFOX_UV_VERSION}/uv-aarch64-unknown-linux-gnu.tar.gz" "${IRONFOX_UV_DIR}" "${IRONFOX_UV_SHA512SUM_LINUX_ARM64}"
|
|
|
|
echo_red_text 'Downloading uv (Linux - x86_64)...'
|
|
download "https://github.com/astral-sh/uv/releases/download/${IRONFOX_UV_VERSION}/uv-x86_64-unknown-linux-gnu.tar.gz" "${IRONFOX_UV_DIR}" "${IRONFOX_UV_SHA512SUM_LINUX_X86_64}"
|
|
|
|
echo_red_text 'Downloading uv (OS X - ARM64)...'
|
|
download "https://github.com/astral-sh/uv/releases/download/${IRONFOX_UV_VERSION}/uv-aarch64-apple-darwin.tar.gz" "${IRONFOX_UV_DIR}" "${IRONFOX_UV_SHA512SUM_OSX_ARM64}"
|
|
|
|
echo_red_text 'Downloading uv (OS X - x86_64)...'
|
|
download "https://github.com/astral-sh/uv/releases/download/${IRONFOX_UV_VERSION}/uv-x86_64-apple-darwin.tar.gz" "${IRONFOX_UV_DIR}" "${IRONFOX_UV_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
# Set our platform
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_UV_PLATFORM='apple-darwin'
|
|
else
|
|
local -r IRONFOX_UV_PLATFORM='unknown-linux-gnu'
|
|
fi
|
|
|
|
# Set our platform architecture
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
local -r IRONFOX_UV_ARCH='aarch64'
|
|
else
|
|
local -r IRONFOX_UV_ARCH='x86_64'
|
|
fi
|
|
|
|
# Set our checksum to verify
|
|
if [[ "${IRONFOX_PLATFORM_ARCH}" == 'aarch64' ]]; then
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_UV_SHA512SUM="${IRONFOX_UV_SHA512SUM_OSX_ARM64}"
|
|
else
|
|
local -r IRONFOX_UV_SHA512SUM="${IRONFOX_UV_SHA512SUM_LINUX_ARM64}"
|
|
fi
|
|
else
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
|
|
local -r IRONFOX_UV_SHA512SUM="${IRONFOX_UV_SHA512SUM_OSX_X86_64}"
|
|
else
|
|
local -r IRONFOX_UV_SHA512SUM="${IRONFOX_UV_SHA512SUM_LINUX_X86_64}"
|
|
fi
|
|
fi
|
|
|
|
# Tell `download` to return instead of exit upon an error
|
|
IRONFOX_DOWNLOAD_EXIT=0
|
|
|
|
# By default, we know the download hasn't failed...
|
|
local IRONFOX_DOWNLOAD_FAILED=0
|
|
|
|
echo_red_text 'Downloading uv...'
|
|
download_and_extract 'uv' "https://github.com/astral-sh/uv/releases/download/${IRONFOX_UV_VERSION}/uv-${IRONFOX_UV_ARCH}-${IRONFOX_UV_PLATFORM}.tar.gz" "${IRONFOX_UV_DIR}" "${IRONFOX_UV_SHA512SUM}" || local IRONFOX_DOWNLOAD_FAILED=1
|
|
|
|
# If the download failed, restore our back-up, clean-up, and exit
|
|
if [[ "${IRONFOX_DOWNLOAD_FAILED}" == 1 ]]; then
|
|
echo_red_text 'ERROR: Download failed! Exiting...'
|
|
restore_dir "${IRONFOX_UV_DIR}"
|
|
restore_dir "${IRONFOX_UV_LOCAL}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
exit 1
|
|
elif [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up uv at ${IRONFOX_UV}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Get WebAssembly SDK
|
|
function get_wasi() {
|
|
# Get WASI SDK for Linux
|
|
if [[ "${IRONFOX_PLATFORM}" == 'linux' ]] || [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading prebuilt WASI SDK (Linux)...'
|
|
download_and_extract 'wasi-sdk' "https://gitlab.com/ironfox-oss/prebuilds/-/raw/${IRONFOX_PREBUILDS_COMMIT}/wasi-sdk/${IRONFOX_WASI_VERSION}/linux/wasi-sdk-${IRONFOX_WASI_VERSION}-${IRONFOX_WASI_IRONFOX_REVISION}-linux.tar.xz" "${IRONFOX_WASI}" "${IRONFOX_WASI_LINUX_IRONFOX_SHA512SUM}"
|
|
fi
|
|
|
|
# Get WASI SDK for OS X
|
|
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]] || [[ "${IRONFOX_GET_SOURCE_CHECKSUM_UPDATE}" == 1 ]]; then
|
|
echo_red_text 'Downloading prebuilt WASI SDK (OS X)...'
|
|
download_and_extract 'wasi-sdk' "https://gitlab.com/ironfox-oss/prebuilds/-/raw/${IRONFOX_PREBUILDS_COMMIT}/wasi-sdk/${IRONFOX_WASI_VERSION}/osx/wasi-sdk-${IRONFOX_WASI_VERSION}-${IRONFOX_WASI_IRONFOX_REVISION}-osx.tar.xz" "${IRONFOX_WASI}" "${IRONFOX_WASI_OSX_IRONFOX_SHA512SUM}"
|
|
fi
|
|
|
|
if [[ "${IRONFOX_PERFORM_POST_DOWNLOAD}" == 1 ]]; then
|
|
echo_green_text "SUCCESS: Set-up the prebuilt WASI SDK at ${IRONFOX_WASI}"
|
|
fi
|
|
}
|
|
|
|
# Clean-up
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_DOWNLOADS}"
|
|
"${IRONFOX_RM}" -rf "${IRONFOX_EXTERNAL}/temp"
|
|
|
|
# These need to run before we get androguard, glean_parser, gyp, PyYAML, and s3cmd
|
|
if [[ "${IRONFOX_GET_SOURCE_UV}" == 1 ]]; then
|
|
get_uv
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_PYTHON}" == 1 ]]; then
|
|
get_python
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_ANDROGUARD}" == 1 ]]; then
|
|
get_androguard
|
|
fi
|
|
|
|
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_25}" == 1 ]]; then
|
|
get_jdk_25
|
|
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
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_JDK_17}" == 1 ]]; then
|
|
get_jdk_17
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_JDK_21}" == 1 ]]; then
|
|
get_jdk_21
|
|
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_PYYAML}" == 1 ]]; then
|
|
get_pyyaml
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_S3CMD}" == 1 ]]; then
|
|
get_s3cmd
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_UNIFFI}" == 1 ]]; then
|
|
get_uniffi
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_UP_AC}" == 1 ]]; then
|
|
get_up_ac
|
|
fi
|
|
|
|
if [[ "${IRONFOX_GET_SOURCE_WASI}" == 1 ]]; then
|
|
get_wasi
|
|
fi
|