Changes to "depends" between 2018-07-04 01:24:05 and 2018-07-04 01:27:52

1
2
3
4
5

6
7
8
9
10
11
12
13
14
15
16
17
18

19
20

21
22
23
24










25
26
27
28
29
30
31
32
1
2
3
4

5
6
7
8
9
10
11
12
13
14
15
16
17

18
19

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42




-
+












-
+

-
+




+
+
+
+
+
+
+
+
+
+








## # depends:

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

    # depends: corefuncs, json_io
    # depends: corefuncs, json_io, bin:bash

Typically it just lists other plugin basenames. And it's a strong indicator that those must be enabled alongside or prior.

  * It's a list of local URNs.

  * The recommended default is "depends" and not "require", for compatibility with the Debian packaging spec.

  * Also it does not strictly need to enforced strictly in each application. It's more of a recommendation and user-visible field. In dynamic langauges plugins can soft-detect missing dependencies mostly.


## System/language dependencies

This is quite informal / not fixated, but non-plugin dependencies are usually denominated with `type:name` like:
This is quite informal / not fixated, but non-plugin dependencies might also be listed with `type:name` like:

  * `# depends: bin:imagemagick` for binaries
  * `bin:imagemagick` for binaries
  * `python:lyxml` for language modules
  * Or `sys:amd64` for the architecture.
  * And `deb:anacron` for the system package manager.
  * `api:archnemesis` etc.


## 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 `>=` check of course. Most other version expression gimmicks are usually overkill for simple applicatiion-level features.


## Related fields

Depending on complexity other fields might be used alongside:

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