#!/bin/bash # GCC 15 Installation für Ubuntu 22.04 # Verwendet verschiedene Quellen um GCC 15 zu bekommen set -euo pipefail # Farben RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } log_info "Installiere GCC 15 für Ubuntu 22.04..." # Option 1: Ubuntu Toolchain PPA (manchmal verfügbar) log_info "Versuche Ubuntu Toolchain PPA..." apt update apt install -y software-properties-common # Füge verschiedene PPAs hinzu add-apt-repository -y ppa:ubuntu-toolchain-r/test 2>/dev/null || log_warning "PPA bereits hinzugefügt oder nicht verfügbar" add-apt-repository -y ppa:ubuntu-toolchain-r/ppa 2>/dev/null || log_warning "PPA bereits hinzugefügt oder nicht verfügbar" apt update # Versuche GCC 15 zu installieren if apt install -y gcc-15 g++-15 2>/dev/null; then log_success "GCC 15 erfolgreich über PPA installiert" GCC15_AVAILABLE=true else log_warning "GCC 15 nicht über PPA verfügbar" GCC15_AVAILABLE=false fi # Option 2: Snap (falls PPA nicht funktioniert) if [ "$GCC15_AVAILABLE" = false ]; then log_info "Versuche GCC 15 über Snap..." if command -v snap &> /dev/null; then if snap install gcc --classic 2>/dev/null; then log_success "GCC über Snap installiert" # Prüfe Version SNAP_GCC_VERSION=$(snap run gcc --version | head -1) log_info "Snap GCC Version: $SNAP_GCC_VERSION" else log_warning "GCC über Snap nicht verfügbar" fi else log_info "Snap nicht installiert, installiere es..." apt install -y snapd if snap install gcc --classic 2>/dev/null; then log_success "GCC über Snap installiert" else log_warning "GCC über Snap nicht verfügbar" fi fi fi # Option 3: Compile from Source (letzte Option) if [ "$GCC15_AVAILABLE" = false ]; then log_info "GCC 15 nicht verfügbar. Verwende GCC 11 (Standard für Ubuntu 22.04)" apt install -y gcc g++ log_info "Verfügbare Compiler:" gcc --version | head -1 g++ --version | head -1 log_warning "Der Code verwendet nur C++17 Features, daher ist GCC 11 ausreichend" log_info "Falls Sie trotzdem GCC 15 brauchen, können Sie es aus dem Quellcode kompilieren" fi # Setze GCC 15 als Standard (falls verfügbar) if [ "$GCC15_AVAILABLE" = true ]; then log_info "Setze GCC 15 als Standard..." update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-15 100 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-15 100 log_success "GCC 15 ist jetzt der Standard-Compiler" gcc --version | head -1 g++ --version | head -1 fi log_success "Compiler-Installation abgeschlossen!"