mirror of
https://github.com/ironfox-oss/IronFox.git
synced 2026-01-01 18:49:10 -05:00
238 lines
6.8 KiB
Bash
Executable File
238 lines
6.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
source "$(dirname $0)/versions.sh"
|
|
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
PLATFORM=macos
|
|
else
|
|
PLATFORM=linux
|
|
fi
|
|
|
|
clone_repo() {
|
|
url="$1"
|
|
path="$2"
|
|
tag="$3"
|
|
|
|
if [[ "$url" == "" ]]; then
|
|
echo "URL missing for clone"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$path" == "" ]]; then
|
|
echo "Path is required for cloning '$url'"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$tag" == "" ]]; then
|
|
echo "Tag name is required for cloning '$url'"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -f "$path" ]]; then
|
|
echo "'$path' exists and is not a directory"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -d "$path" ]]; then
|
|
echo "'$path' already exists"
|
|
read -p "Do you want to re-clone this repository? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo "Cloning $url::$tag"
|
|
git clone --branch "$tag" --depth=1 "$url" "$path"
|
|
}
|
|
|
|
download() {
|
|
local url="$1"
|
|
local filepath="$2"
|
|
|
|
if [[ "$url" == "" ]]; then
|
|
echo "URL is required (file: '$filepath')"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f "$filepath" ]; then
|
|
echo "$filepath already exists."
|
|
read -p "Do you want to re-download? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
echo "Removing $filepath..."
|
|
rm -f "$filepath"
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
mkdir -vp "$(dirname "$filepath")"
|
|
|
|
echo "Downloading $url"
|
|
wget --https-only --no-cache --secure-protocol=TLSv1_3 --show-progress --verbose "$url" -O "$filepath"
|
|
}
|
|
|
|
# Extract zip removing top level directory
|
|
extract_rmtoplevel() {
|
|
local archive_path="$1"
|
|
local to_name="$2"
|
|
local extract_to="${ROOTDIR}/$to_name"
|
|
|
|
if ! [[ -f "$archive_path" ]]; then
|
|
echo "Archive '$archive_path' does not exist!"
|
|
fi
|
|
|
|
# Create temporary directory for extraction
|
|
local temp_dir=$(mktemp -d)
|
|
|
|
# Extract based on file extension
|
|
case "$archive_path" in
|
|
*.zip)
|
|
unzip -q "$archive_path" -d "$temp_dir"
|
|
;;
|
|
*.tar.gz)
|
|
tar xzf "$archive_path" -C "$temp_dir"
|
|
;;
|
|
*.tar.xz)
|
|
tar xJf "$archive_path" -C "$temp_dir"
|
|
;;
|
|
*.tar.zst)
|
|
tar --zstd -xvf "$archive_path" -C "$temp_dir"
|
|
;;
|
|
*)
|
|
echo "Unsupported archive format: $archive_path"
|
|
rm -rf "$temp_dir"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
local top_dir=$(ls "$temp_dir")
|
|
local to_parent=$(dirname "$extract_to")
|
|
|
|
rm -rf "$extract_to"
|
|
mkdir -vp "$to_parent"
|
|
mv "$temp_dir/$top_dir" "$to_parent/$to_name"
|
|
|
|
rm -rf "$temp_dir"
|
|
}
|
|
|
|
download_and_extract() {
|
|
local repo_name="$1"
|
|
local url="$2"
|
|
|
|
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="${BUILDDIR}/${repo_name}${extension}"
|
|
|
|
download "$url" "$repo_archive"
|
|
|
|
if [ ! -f "$repo_archive" ]; then
|
|
echo "Source archive for $repo_name does not exist."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Extracting $repo_archive"
|
|
extract_rmtoplevel "$repo_archive" "$repo_name"
|
|
echo
|
|
}
|
|
|
|
mkdir -vp "$BUILDDIR"
|
|
|
|
if ! [[ -f "$BUILDDIR/bundletool.jar" ]]; then
|
|
echo "Downloading bundletool..."
|
|
download "https://github.com/google/bundletool/releases/download/${BUNDLETOOL_TAG}/bundletool-all-${BUNDLETOOL_TAG}.jar" "$BUILDDIR/bundletool.jar"
|
|
fi
|
|
|
|
if ! [[ -f "$BUILDDIR/bundletool" ]]; then
|
|
echo "Creating bundletool script..."
|
|
{
|
|
echo '#!/bin/bash'
|
|
echo "exec java -jar ${BUILDDIR}/bundletool.jar \"\$@\""
|
|
} > "$BUILDDIR/bundletool"
|
|
chmod +x "$BUILDDIR/bundletool"
|
|
fi
|
|
|
|
echo "'bundletool' is set up at $BUILDDIR/bundletool"
|
|
|
|
# Clone Glean
|
|
echo "Cloning Glean..."
|
|
clone_repo "https://github.com/mozilla/glean.git" "$GLEANDIR" "$GLEAN_TAG"
|
|
|
|
# Clone MicroG
|
|
echo "Cloning microG..."
|
|
clone_repo "https://github.com/microg/GmsCore.git" "$GMSCOREDIR" "$GMSCORE_TAG"
|
|
|
|
# Download Phoenix
|
|
echo "Downloading Phoenix..."
|
|
download "https://gitlab.com/celenityy/Phoenix/-/raw/$PHOENIX_TAG/android/phoenix.js" "$PATCHDIR/preferences/phoenix.js"
|
|
download "https://gitlab.com/celenityy/Phoenix/-/raw/$PHOENIX_TAG/android/phoenix-extended.js" "$PATCHDIR/preferences/phoenix-extended.js"
|
|
|
|
# Get WebAssembly SDK
|
|
if [[ -n ${FDROID_BUILD+x} ]]; then
|
|
echo "Cloning wasi-sdk..."
|
|
clone_repo "https://github.com/WebAssembly/wasi-sdk.git" "$WASISDKDIR" "$WASI_TAG"
|
|
(cd "$WASISDKDIR" && git submodule update --init --depth=64)
|
|
elif [[ "$PLATFORM" == "macos" ]]; then
|
|
echo "Downloading prebuilt wasi-sdk..."
|
|
download "https://github.com/celenityy/wasi-sdk/releases/download/$WASI_TAG/$WASI_TAG-firefox-osx.tar.xz" "$BUILDDIR/wasi-sdk.tar.xz"
|
|
mkdir -vp "$WASISDKDIR"
|
|
tar xJf "$BUILDDIR/wasi-sdk.tar.xz" -C "$WASISDKDIR"
|
|
else
|
|
echo "Downloading prebuilt wasi-sdk..."
|
|
download_and_extract "wasi-sdk" "https://github.com/itsaky/ironfox/releases/download/$WASI_TAG/$WASI_TAG-firefox.tar.xz"
|
|
fi
|
|
|
|
# Get Tor's no-op UniFFi binding generator
|
|
if [[ "$PLATFORM" == "macos" ]]; then
|
|
# Do nothing here, unfortunately this doesn't appear to work on macOS ATM
|
|
## We don't ship or build releases from macOS; and regardless, we still stub Glean's Kotlin code through our glean-overlay, disable it entirely, etc - so, while this isn't ideal, it's not the end of the world - the biggest implication here is probably just extra space
|
|
echo "macOS: Doing nothing..."
|
|
else
|
|
if [[ -n ${FDROID_BUILD+x} ]]; then
|
|
echo "Cloning uniffi-bindgen..."
|
|
clone_repo "https://gitlab.torproject.org/tpo/applications/uniffi-rs.git" "$UNIFFIDIR" "$UNIFFI_VERSION"
|
|
else
|
|
echo "Downloading prebuilt uniffi-bindgen..."
|
|
download_and_extract "uniffi" "https://tb-build-06.torproject.org/~tb-builder/tor-browser-build/out/uniffi-rs/uniffi-rs-$UNIFFI_REVISION.tar.zst"
|
|
fi
|
|
fi
|
|
|
|
# Clone application-services
|
|
echo "Cloning application-services..."
|
|
git clone --branch "$APPSERVICES_BRANCH" --depth=1 https://github.com/mozilla/application-services.git "$APPSERVICESDIR"
|
|
|
|
# Clone Firefox
|
|
echo "Cloning Firefox..."
|
|
clone_repo "https://github.com/mozilla-firefox/firefox.git" "$GECKODIR" "${FIREFOX_RELEASE_TAG}"
|
|
|
|
# Write env_local.sh
|
|
echo "Writing ${ENV_SH}..."
|
|
cat > "$ENV_SH" << EOF
|
|
export patches=${PATCHDIR}
|
|
export rootdir=${ROOTDIR}
|
|
export builddir="${BUILDDIR}"
|
|
export android_components=${ANDROID_COMPONENTS}
|
|
export application_services=${APPSERVICESDIR}
|
|
export bundletool=${BUNDLETOOLDIR}
|
|
export glean=${GLEANDIR}
|
|
export fenix=${FENIX}
|
|
export mozilla_release=${GECKODIR}
|
|
export gmscore=${GMSCOREDIR}
|
|
export uniffi=${UNIFFIDIR}
|
|
export wasi=${WASISDKDIR}
|
|
|
|
source "\$rootdir/scripts/env_common.sh"
|
|
EOF
|