pm_apt.sh 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/bin/bash
  2. # pm_apt.sh - APT package manager implementation for Debian/Ubuntu systems
  3. # Package name mappings for apt
  4. declare -A APT_PACKAGE_NAMES=(
  5. ["vala"]="valac"
  6. ["meson"]="meson"
  7. ["ninja"]="ninja-build"
  8. ["git"]="git"
  9. ["pkgconfig"]="pkg-config"
  10. ["gcc"]="gcc"
  11. ["glib"]="libglib2.0-dev"
  12. ["libsodium"]="libsodium-dev"
  13. ["gtk"]="libgtk-3-dev"
  14. )
  15. # Check if a package is installed via apt/dpkg
  16. pm_is_installed() {
  17. local pkg="$1"
  18. dpkg -l "$pkg" 2>/dev/null | grep -q "^ii"
  19. }
  20. # Get the apt package name for a generic dependency
  21. pm_get_package_name() {
  22. local dep="$1"
  23. if [[ -n "${APT_PACKAGE_NAMES[$dep]}" ]]; then
  24. echo "${APT_PACKAGE_NAMES[$dep]}"
  25. else
  26. echo "$dep"
  27. fi
  28. }
  29. # Update apt cache
  30. pm_update() {
  31. local sudo=$(get_sudo)
  32. if [[ -n "$sudo" ]]; then
  33. $sudo apt-get update -qq
  34. else
  35. apt-get update -qq
  36. fi
  37. }
  38. # Install packages via apt
  39. pm_install() {
  40. local -a pkgs=("$@")
  41. local sudo=$(get_sudo)
  42. local apt_opts="-y -qq"
  43. if [[ "$ASSUME_YES" == "true" ]]; then
  44. apt_opts="-y -qq --allow-downgrades --allow-remove-essential --allow-change-held-packages"
  45. fi
  46. log_step "Installing packages via apt: ${pkgs[*]}"
  47. if [[ -n "$sudo" ]]; then
  48. DEBIAN_FRONTEND=noninteractive $sudo apt-get install $apt_opts "${pkgs[@]}"
  49. else
  50. DEBIAN_FRONTEND=noninteractive apt-get install $apt_opts "${pkgs[@]}"
  51. fi
  52. }
  53. # Get list of missing dependencies (apt-specific override)
  54. get_missing_deps() {
  55. local -a missing=()
  56. local deps=("vala" "meson" "ninja" "git" "pkgconfig" "gcc" "glib" "libsodium")
  57. for dep in "${deps[@]}"; do
  58. local pkg_name=$(pm_get_package_name "$dep")
  59. if ! pm_is_installed "$pkg_name"; then
  60. missing+=("$pkg_name")
  61. fi
  62. done
  63. echo "${missing[@]}"
  64. }