Skip to content

Dependencies

Anagnostakis Ioannis edited this page Jun 30, 2026 · 7 revisions

Dependencies

«slacker - one path through the dependency labyrinth. No dead ends.»

Dependency resolution in Slackware is the repository's responsibility, not the package manager's - and the official trees deliberately carry none. slacker follows that: it never guesses, and for official packages it auto-resolves nothing. When a third-party repository chooses to declare dependencies, slacker honours that declaration - from a package's own .dep file, or, when a repo publishes them in PACKAGES.TXT instead (the PACKAGE REQUIRED: field, as slapt-get / SlackBuilds-style repos do), from there. Vanilla Slackware trees carry neither, so they get no auto-dependencies, which is correct. The whole mechanism is yours to switch off (RESOLVE_DEPS=off, or --no-deps per run).

If a package has a .dep file next to it in the repository (one dependency package name per line), slacker reads it and pulls in the missing dependencies from the same repository, recursively, before installing. When the .dep is absent, the comma-separated names from PACKAGE REQUIRED: are used instead (a trailing version constraint is dropped and the first of an a|b alternative is taken).

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
  S["install a package"]:::blue --> D{".dep file<br/>in the repo?"}
  D -->|"no .dep, but<br/>PACKAGE REQUIRED:"| R["use the names from<br/>PACKAGES.TXT"]:::green
  D -->|"neither"| GO["install it"]:::green
  D -->|yes| L["for each listed dep"]:::grey
  R --> L
  L --> C{"already installed?"}
  C -->|"no"| ADD["add to the plan<br/>(from the same repo)"]:::green
  C -->|"yes, same as repo build"| LEAVE["leave it alone"]:::grey
  C -->|"yes, but differs"| PRI{"installed source priority"}
  PRI -->|lower| ASK["prompt: skip / replace /<br/>skip-all / abort"]:::blue
  PRI -->|higher or equal| KEEP["kept by priority,<br/>surfaced with keep / replace"]:::blue
  ADD --> GO
  classDef grey fill:#0d1117,stroke:#6e7781,color:#8b949e;
  classDef blue fill:#0d1117,stroke:#1f6feb,color:#e6edf3;
  classDef green fill:#0d1117,stroke:#2ea043,color:#e6edf3;
Loading

Conflicts are resolved by priority

A dependency already satisfied by that repo's own build is left alone. A dependency that is installed but differs from what the repo offers (for example installed from another source) is handled by source priority:

  • if the installed copy comes from a lower-priority source → you are prompted: skip / replace / skip-all / abort;
  • if it comes from a higher-or-equal priority source → it is kept by the priority rule, but slacker still lists it and lets you keep (the default) or replace it with the version the repo being installed offers.

With --yes, the installed version is kept in both cases.

New dependencies are shown up front, before the confirmation, in the same coloured plan table as everything else - each tagged as a new dep for its parent.


Turning it on and off

On by default. Disable globally with RESOLVE_DEPS=no in slacker.conf, or per-run with --no-deps.

Dependency resolution applies to every command that installs packages: install, upgrade, reinstall, upgrade-all, install-new, and install-template.


Declared conflicts and suggests

A repository may declare two more optional fields for a package, alongside its dependencies. slacker surfaces both — and never acts on either silently.

Conflicts. If a package you are installing declares a conflict with a package that is currently installed, slacker stops before the install, shows X conflicts with the installed Y, and offers a three-way choice: continue anyway, remove the conflicting installed package(s) first (a plain removepkg) and then continue, or abort — the default, so pressing Enter cancels. With --yes it prints the conflict as a warning and proceeds. The check is one-directional: only the installing package's declared conflicts are weighed, against what is installed; a package never conflicts with its own new version.

Suggests. A SUGGESTS line is advisory free text from the repo maintainer. slacker prints it verbatim — "the repo maintainers suggest (acting on it is up to you)" — and does nothing else: it is never parsed, resolved, or installed. A hint for you, not an action for slacker.

Both come from the repo's own metadata (the same place as PACKAGE REQUIRED:), so vanilla Slackware trees — which declare neither — show nothing here.


Notes

  • One small .dep request is made per package at install time. A 404 simply means "no deps" and slacker proceeds normally.
  • Dependencies are only ever pulled from the same repository as the package that declares them, never guessed or cross-resolved.

Clone this wiki locally