.. index:: single: pack_protocol
.. _pack_protocol/0:

.. rst-class:: right

**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:18:0
| **Date:** 2025-05-21

| **Compilation flags:**
|    ``static``


| **Dependencies:**
|   (none)


| **Remarks:**
|    (none)

| **Inherited public predicates:**
|    (none)

.. contents::
   :local:
   :backlinks: top

Public predicates
-----------------

.. index:: name/1
.. _pack_protocol/0::name/1:

``name/1``
^^^^^^^^^^

Pack name.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``name(Name)``
| **Mode and number of proofs:**
|    ``name(?atom)`` - ``zero_or_one``


------------

.. index:: description/1
.. _pack_protocol/0::description/1:

``description/1``
^^^^^^^^^^^^^^^^^

Pack one line description.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``description(Description)``
| **Mode and number of proofs:**
|    ``description(?atom)`` - ``zero_or_one``


------------

.. index:: license/1
.. _pack_protocol/0::license/1:

``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``


------------

.. index:: home/1
.. _pack_protocol/0::home/1:

``home/1``
^^^^^^^^^^

Pack home HTTPS or file URL.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``home(Home)``
| **Mode and number of proofs:**
|    ``home(?atom)`` - ``zero_or_one``


------------

.. index:: version/6
.. _pack_protocol/0::version/6:

``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: ``stable``, ``rc``, ``beta``, ``alpha``, ``experimental``, 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.


------------

.. index:: note/3
.. _pack_protocol/0::note/3:

``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 being installed, updated, 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)

