#!/bin/bash # pm_apt.sh - APT package manager implementation for Debian/Ubuntu systems # Package name mappings for apt declare -A APT_PACKAGE_NAMES=( ["vala"]="valac" ["meson"]="meson" ["ninja"]="ninja-build" ["git"]="git" ["pkgconfig"]="pkg-config" ["gcc"]="gcc" ["glib"]="libglib2.0-dev" ["libsodium"]="libsodium-dev" ["gtk"]="libgtk-3-dev" ) # Check if a package is installed via apt/dpkg pm_is_installed() { local pkg="$1" dpkg -l "$pkg" 2>/dev/null | grep -q "^ii" } # Get the apt package name for a generic dependency pm_get_package_name() { local dep="$1" if [[ -n "${APT_PACKAGE_NAMES[$dep]}" ]]; then echo "${APT_PACKAGE_NAMES[$dep]}" else echo "$dep" fi } # Update apt cache pm_update() { local sudo=$(get_sudo) if [[ -n "$sudo" ]]; then $sudo apt-get update -qq else apt-get update -qq fi } # Install packages via apt pm_install() { local -a pkgs=("$@") local sudo=$(get_sudo) local apt_opts="-y -qq" if [[ "$ASSUME_YES" == "true" ]]; then apt_opts="-y -qq --allow-downgrades --allow-remove-essential --allow-change-held-packages" fi log_step "Installing packages via apt: ${pkgs[*]}" if [[ -n "$sudo" ]]; then DEBIAN_FRONTEND=noninteractive $sudo apt-get install $apt_opts "${pkgs[@]}" else DEBIAN_FRONTEND=noninteractive apt-get install $apt_opts "${pkgs[@]}" fi } # Get list of missing dependencies (apt-specific override) get_missing_deps() { local -a missing=() local deps=("vala" "meson" "ninja" "git" "pkgconfig" "gcc" "glib" "libsodium") for dep in "${deps[@]}"; do local pkg_name=$(pm_get_package_name "$dep") if ! pm_is_installed "$pkg_name"; then missing+=("$pkg_name") fi done echo "${missing[@]}" }