Artifact 4b12ddaf6a222cc458e53b74ba92492b2db9ce350043fe3c3d5669b2abf1abf4:

Wiki page [depends] by mario on 2018-07-05 14:30:43.
D 2018-07-05T14:30:43.492
L depends
N text/x-markdown
P 1db4aaff112adb318caa0d61a507477ab918f9b53fad9e4c317edc3b313de533
U mario
W 1993
## # depends:

Lists other plugins or language/system libraries which the current plugin expects:

    # depends: corefuncs, json_io, bin:bash

Each entry is a plugin [basename](wiki/internal-fields#id), and indicates it must be available/active alongside.

  * The recommended field name is "depends" and not "require" - for parity with the Debian packaging spec, and because it sounds less stringent.

  * Not every application would want to enforce this *strictly*. Because dynamic languages can soft-detect dependencies usually.

  * Within a plugin management UI, the depends: list could be used for installation warnings.

It's optional, and might be treated as documentation in some implementations.


## Versioned dependencies

Additionally the plugin names can be suffixed with a version comparison:

    # depends: core (>= 2.0.0)

Which obviously does require the plugin manager to be somewhat more involved. You'll often get away just implementing a `>=` check. Most other version expression gimmicks are likely overkill for simple applicatiion-level features.


## System/language references

While a `TYPE:name` entry can reference other scopes (instead of application-local plugins)

| `bin:imagemagick` | verify a binary exists |
| `python:lxml` | for language modules |
| `sys:amd64` | e.g. the architecture. |
| `deb:anacron` | as hint for the system package manager. |
| `api:archnemesis` | see [api](wiki/api) |

This is quite informal still. There's seldomly practical value to implement such complex dependency lookups, or these exact ones. This is just the advised syntax.

One could implement a few "magic" basenames as well. For instance checking the current language version with just `# depends: python (>= 3.4)`, or if feasible check for module versions `php:sqlite (>= 3.24)`.


## Related fields

Depending on complexity other fields might be used alongside:

  * `# provides:`
  * `# conflicts:`
  * `# suggests:`

Z 95012f6a801244781bc685c91369b2e5