protocol

# `pack_protocol`

Pack specification protocol. Objects implementing this protocol should be named after the pack with a `_pack` suffix and saved in a file with the same name as the object.

Availability:
`logtalk_load(packs(loader))`
Author: Paulo Moura
Version: 0:17:0
Date: 2024-02-29
Compilation flags:
`static`
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

## Public predicates

### `name/1`

Pack name.

Compilation flags:
`static`
Template:
`name(Name)`
Mode and number of proofs:
`name(?atom)` - `zero_or_one`

### `description/1`

Pack one line description.

Compilation flags:
`static`
Template:
`description(Description)`
Mode and number of proofs:
`description(?atom)` - `zero_or_one`

### `license/1`

Pack license. Specified using the identifier from the SPDX License List (https://spdx.org/licenses/) when possible.

Compilation flags:
`static`
Template:
`license(License)`
Mode and number of proofs:
`license(?atom)` - `zero_or_one`

### `home/1`

Pack home HTTPS or file URL.

Compilation flags:
`static`
Template:
`home(Home)`
Mode and number of proofs:
`home(?atom)` - `zero_or_one`

### `version/6`

Table of available versions.

Compilation flags:
`static`
Template:
`version(Version,Status,URL,Checksum,Dependencies,Portability)`
Mode and number of proofs:
`version(?compound,?atom,-atom,-pair(atom,atom),-list(pair(atom,callable)),?atom)` - `zero_or_more`
`version(?compound,?atom,-atom,-pair(atom,atom),-list(pair(atom,callable)),-list(atom))` - `zero_or_more`
Remarks:

> - Version: This argument uses the same format as entity versions: `Major:Minor:Patch`. Semantic versioning should be used.

> - Status: Version development status. E.g `stable`, `rc`, `beta`, `alpha`, or `deprecated`.

> - URL: File URL for a local directory, file URL for a local archive, download HTTPS URL for the pack archive, or download git archive URL for the pack archive.

> - Checksum: A pair where the key is the hash algorithm and the value is the checksum. Currently, the hash algorithm must be `sha256`. For `file://` URLs of local directories, use `none` instead of a pair.

> - Dependencies: Pack dependencies list. Each dependency is a `Dependency Operator Version` term. `Operator` is a term comparison operator. Valid `Dependency` values are `Registry::Pack`, `os(Name,Machine)`, `logtalk`, and a backend identifier atom.

> - Portability: Either the atom `all` or a list of the supported backend Prolog compilers (using the identifier atoms used by the `prolog_dialect` flag).

> - Clause order: Versions must be listed ordered from newest to oldest.

### `note/3`

Table of notes per action and version.

Compilation flags:
`static`
Template:
`note(Action,Version,Note)`
Mode and number of proofs:
`note(?atom,?term,-atom)` - `zero_or_more`
Remarks:

> - Action: Possible values are `install`, `update`, and `uninstall`. When unbound, the note apply to all actions.

> - Version: Version acted on (i.e. version being installed, updated to, or uninstalled). When unbound, the note apply to all versions.

> - Note: Note to print when performing an action on a pack version.

## Protected predicates

(none)

## Private predicates

(none)

## Operators

(none)