| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/bin/bash
- # pm_emerge.sh - Portage (emerge) package manager implementation for Gentoo systems
- #
- # To add a new package manager, create a file named pm_<name>.sh with:
- # - pm_<name>_detect: Returns 0 if this PM is available, 1 otherwise
- # - pm_<name>_get_missing_deps: Prints space-separated list of missing packages
- # - pm_<name>_install_missing_deps: Installs the missing packages
- #
- # Gentoo notes:
- # - EMERGE_DEPS are Gentoo atoms mirroring the dnf/apt dependency sets
- # (vala, meson, ninja, pkgconf, gcc, glib, libsodium, json-glib,
- # libarchive, libgee, xz-utils, gobject-introspection). A stage3 already
- # carries gcc and friends; portageq skips whatever is present.
- # - Everything is compiled from source: this step can take a long time.
- # - USE flags are NOT modified. The stack's platform libraries (glib,
- # json-glib, libgee, ...) enable their introspection USE flag by default
- # and vala ships the platform .vapi bindings itself; only a system that
- # explicitly disabled introspection via package.use/make.conf will lack
- # .gir/.typelib/.vapi artifacts after install — re-enable the flag in
- # /etc/portage/package.use and re-emerge if the USM build needs them.
- # Package atoms required by USM
- EMERGE_DEPS="dev-lang/vala dev-build/meson dev-build/ninja dev-util/pkgconf sys-devel/gcc dev-libs/glib net-libs/glib-networking dev-libs/libsodium dev-libs/json-glib app-arch/libarchive dev-libs/libgee app-arch/xz-utils dev-libs/gobject-introspection"
- # Check if this package manager is available
- pm_emerge_detect() {
- command -v emerge &>/dev/null
- }
- # Get list of missing dependencies
- pm_emerge_get_missing_deps() {
- local -a missing=()
-
- for pkg in $EMERGE_DEPS; do
- if ! portageq has_version / "$pkg" &>/dev/null; then
- missing+=("$pkg")
- fi
- done
-
- echo "${missing[*]}"
- }
- # Install missing dependencies
- pm_emerge_install_missing_deps() {
- local missing=$(pm_emerge_get_missing_deps)
-
- if [[ -z "$missing" ]]; then
- log_info "All dependencies are already installed"
- return 0
- fi
-
- log_step "Installing packages via emerge: ${missing}"
-
- local sudo=""
- if ! is_root; then
- sudo=$(get_sudo)
- fi
-
- local emerge_opts="--ask=n --quiet=y"
-
- if [[ -n "$sudo" ]]; then
- $sudo emerge $emerge_opts $missing
- else
- emerge $emerge_opts $missing
- fi
- }
|