| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #!/bin/bash
- # pm_dnf.sh - DNF package manager implementation for Fedora/RHEL systems
- # Package name mappings for dnf
- declare -A DNF_PACKAGE_NAMES=(
- ["vala"]="vala"
- ["meson"]="meson"
- ["ninja"]="ninja-build"
- ["git"]="git"
- ["pkgconfig"]="pkgconf-pkg-config"
- ["gcc"]="gcc"
- ["glib"]="glib2-devel"
- ["libsodium"]="libsodium-devel"
- ["gtk"]="gtk3-devel"
- )
- # Check if a package is installed via dnf/rpm
- pm_is_installed() {
- local pkg="$1"
- rpm -q "$pkg" &>/dev/null
- }
- # Get the dnf package name for a generic dependency
- pm_get_package_name() {
- local dep="$1"
- if [[ -n "${DNF_PACKAGE_NAMES[$dep]}" ]]; then
- echo "${DNF_PACKAGE_NAMES[$dep]}"
- else
- echo "$dep"
- fi
- }
- # Update dnf cache
- pm_update() {
- local sudo=$(get_sudo)
- if [[ -n "$sudo" ]]; then
- $sudo dnf makecache -q 2>/dev/null || $sudo dnf clean metadata
- else
- dnf makecache -q 2>/dev/null || dnf clean metadata
- fi
- }
- # Install packages via dnf
- pm_install() {
- local -a pkgs=("$@")
- local sudo=$(get_sudo)
- local dnf_opts="-y --quiet"
-
- if [[ "$ASSUME_YES" == "true" ]]; then
- dnf_opts="-y --quiet --skip-broken"
- fi
-
- log_step "Installing packages via dnf: ${pkgs[*]}"
-
- if [[ -n "$sudo" ]]; then
- $sudo dnf install $dnf_opts "${pkgs[@]}"
- else
- dnf install $dnf_opts "${pkgs[@]}"
- fi
- }
- # Get list of missing dependencies (dnf-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[@]}"
- }
|