197 lines
5.0 KiB
Bash
Executable File
197 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Firefox Development Environment Initialization Script
|
|
# This script downloads Firefox source code, sets up the build environment,
|
|
# and prepares everything for building with mach
|
|
|
|
set -e # Exit on any error
|
|
|
|
# Configuration
|
|
FIREFOX_VERSION="140.0.2"
|
|
SOURCE_URL="https://ftp.mozilla.org/pub/firefox/releases/${FIREFOX_VERSION}/source/firefox-${FIREFOX_VERSION}.source.tar.xz"
|
|
SOURCE_FILE="firefox-${FIREFOX_VERSION}.source.tar.xz"
|
|
SOURCE_DIR="firefox-${FIREFOX_VERSION}"
|
|
CODE_DIR="code"
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Helper functions
|
|
print_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check if required tools are installed
|
|
check_dependencies() {
|
|
print_info "Checking dependencies..."
|
|
|
|
local missing_deps=()
|
|
|
|
# Required tools for Firefox build
|
|
local required_tools=("curl" "tar" "xz" "python3" "gcc" "g++" "make" "pkg-config" "autoconf")
|
|
|
|
for tool in "${required_tools[@]}"; do
|
|
if ! command -v "$tool" &> /dev/null; then
|
|
missing_deps+=("$tool")
|
|
fi
|
|
done
|
|
|
|
if [ ${#missing_deps[@]} -ne 0 ]; then
|
|
print_error "Missing required dependencies: ${missing_deps[*]}"
|
|
print_info "Please install these dependencies first:"
|
|
print_info "Ubuntu/Debian: sudo apt-get install ${missing_deps[*]} build-essential"
|
|
print_info "CentOS/RHEL: sudo yum install ${missing_deps[*]}"
|
|
print_info "Arch Linux: sudo pacman -S ${missing_deps[*]} base-devel"
|
|
exit 1
|
|
fi
|
|
|
|
print_success "All dependencies are installed"
|
|
}
|
|
|
|
# Create code directory
|
|
setup_code_directory() {
|
|
print_info "Setting up code directory..."
|
|
|
|
if [ ! -d "$CODE_DIR" ]; then
|
|
mkdir -p "$CODE_DIR"
|
|
print_success "Created directory: $CODE_DIR"
|
|
else
|
|
print_warning "Directory $CODE_DIR already exists"
|
|
fi
|
|
|
|
cd "$CODE_DIR"
|
|
}
|
|
|
|
# Download Firefox source
|
|
download_source() {
|
|
print_info "Downloading Firefox source ($FIREFOX_VERSION)..."
|
|
|
|
if [ -f "$SOURCE_FILE" ]; then
|
|
print_warning "Source file already exists: $SOURCE_FILE"
|
|
read -p "Do you want to re-download? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
print_info "Skipping download"
|
|
return
|
|
fi
|
|
rm -f "$SOURCE_FILE"
|
|
fi
|
|
|
|
curl -L -o "$SOURCE_FILE" "$SOURCE_URL"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
print_success "Downloaded: $SOURCE_FILE"
|
|
else
|
|
print_error "Failed to download Firefox source"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Extract Firefox source
|
|
extract_source() {
|
|
print_info "Extracting Firefox source..."
|
|
|
|
if [ -d "$SOURCE_DIR" ]; then
|
|
print_warning "Source directory already exists: $SOURCE_DIR"
|
|
read -p "Do you want to re-extract? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
print_info "Skipping extraction"
|
|
return
|
|
fi
|
|
rm -rf "$SOURCE_DIR"
|
|
fi
|
|
|
|
tar -xf "$SOURCE_FILE"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
print_success "Extracted to: $SOURCE_DIR"
|
|
else
|
|
print_error "Failed to extract Firefox source"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Copy mozconfig
|
|
copy_mozconfig() {
|
|
print_info "Copying RBT source file..."
|
|
|
|
if [ -d "../src/" ]; then
|
|
rsync -av "../src/" "$SOURCE_DIR/"
|
|
print_success "Copied RBT source to $SOURCE_DIR/"
|
|
else
|
|
print_error "RBT source file not found in parent directory"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Setup build environment
|
|
setup_build_environment() {
|
|
print_info "Setting up build environment..."
|
|
|
|
cd "$SOURCE_DIR"
|
|
|
|
# Ensure mozconfig exists in src directory
|
|
if [ ! -f "src/.mozconfig" ]; then
|
|
print_error ".mozconfig file is missing in src/ directory"
|
|
exit 1
|
|
fi
|
|
|
|
# Create objdir if it doesn't exist
|
|
if [ ! -d "obj-release" ]; then
|
|
mkdir -p obj-release
|
|
fi
|
|
|
|
print_success "Build environment ready"
|
|
}
|
|
|
|
# Display next steps
|
|
show_next_steps() {
|
|
print_info "Firefox development environment is ready!"
|
|
echo
|
|
echo -e "${YELLOW}Next steps:${NC}"
|
|
echo "1. cd $CODE_DIR/$SOURCE_DIR"
|
|
echo "2. ./mach bootstrap # Install required dependencies"
|
|
echo "3. ./mach build # Build Firefox"
|
|
echo "4. ./mach run # Run Firefox"
|
|
echo "5. ./mach package # Create installable package"
|
|
echo
|
|
print_info "For more information, visit:"
|
|
print_info "https://firefox-source-docs.mozilla.org/setup/index.html"
|
|
print_info "https://firefox-source-docs.mozilla.org/contributing/index.html"
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
print_info "Starting Firefox development environment setup..."
|
|
|
|
check_dependencies
|
|
setup_code_directory
|
|
download_source
|
|
extract_source
|
|
copy_mozconfig
|
|
setup_build_environment
|
|
show_next_steps
|
|
|
|
print_success "Setup completed successfully!"
|
|
}
|
|
|
|
# Run main function
|
|
main
|