portage-ng / handbook
PDF GitHub

Policy: Install obligations

Concern: What must hold for Repo://Ebuild:install?

PMS / Portage: Building/installing a package requires fetch (when needed), satisfied REQUIRED_USE, build-time deps (DEPEND / BDEPEND), and a coherent slot occupancy. Already-installed packages with matching USE are skipped (unless emptytree / forced rebuild).

Literals:

  • Repo://Ebuild:install?{Ctx}
  • Typical body themes: download / required_use / compile-time grouped deps / slot constraints / selected_cn domain locks
  • May rewrite to :update when installed USE ≠ requested build_with_use

Owns: resolving.pl (:install), Rules/Resolving/candidate.pl (eligible, resolve), Rules/Resolving/use.pl, Rules/Resolving/dependency.pl.

Invariants:

  • :install obligates build-time deps, not RDEPEND (those are :run).
  • Installed + matching plan USE ⇒ empty body (nomerge / keep).
  • Installed + mismatched USE ⇒ transactional :update with rebuild_reason(build_with_use).
  • --nodeps empties the obligation list; it does not invent new meaning.

Examples: test01, test50, test65, test67, test76.
See also: Run, USE, REQUIRED_USE.