#!/usr/bin/env bash

# Installs the native system libraries GPUI needs to compile on Linux/macOS.
# Run script/setup-rust first if you don't have Rust installed yet.

set -euo pipefail

if [ "$(id -u)" -eq 0 ]; then
  maysudo=''
else
  maysudo="$(command -v sudo || command -v doas || true)"
fi

# Ubuntu, Debian, Mint, Pop!_OS, Kali, Raspbian, etc.
apt=$(command -v apt-get || true)
if [[ -n $apt ]]; then
  deps=(
    curl
    build-essential
    pkg-config
    gcc
    g++
    make
    libasound2-dev
    libfontconfig-dev
    libglib2.0-dev
    libssl-dev
    libva-dev
    libvulkan1
    libwayland-dev
    libx11-xcb-dev
    libxkbcommon-x11-dev
    libzstd-dev
    libsqlite3-dev
  )

  $maysudo "$apt" update
  $maysudo "$apt" install -y "${deps[@]}"
  echo "Desktop native dependencies installed."
  exit 0
fi

# Fedora, RHEL, CentOS, Alma, etc.
dnf=$(command -v dnf || true)
if [[ -n $dnf ]]; then
  deps=(
    gcc
    gcc-c++
    make
    pkg-config
    alsa-lib-devel
    fontconfig-devel
    glib2-devel
    openssl-devel
    libva-devel
    vulkan-loader
    wayland-devel
    libxcb-devel
    libxkbcommon-x11-devel
    libzstd-devel
    sqlite-devel
    curl
  )

  $maysudo "$dnf" install -y "${deps[@]}"
  echo "Desktop native dependencies installed."
  exit 0
fi

# Arch, Manjaro, etc.
pacman=$(command -v pacman || true)
if [[ -n $pacman ]]; then
  deps=(
    gcc
    make
    pkgconf
    alsa-lib
    fontconfig
    glib2
    openssl
    libva
    vulkan-loader
    wayland
    libxcb
    libxkbcommon-x11
    zstd
    sqlite
    curl
  )

  $maysudo "$pacman" -Syu --needed --noconfirm "${deps[@]}"
  echo "Desktop native dependencies installed."
  exit 0
fi

# macOS
if [[ "$(uname)" == "Darwin" ]]; then
  if ! xcode-select -p &> /dev/null; then
    echo "Installing Xcode Command Line Tools..."
    xcode-select --install
    echo "Re-run this script after the Xcode install completes."
    exit 0
  fi

  echo "Desktop native dependencies installed."
  exit 0
fi

echo "Unsupported platform. See apps/desktop/README.md for manual setup instructions."
exit 1
