A pack must have a file pack.pl
in its root directory.
The file contains Prolog terms. Defined terms are below. The argument
types are types registered with must_be/2
and described in the running text.
- name(atom)
- Name of the pack. This should be the same as the directory name. Names
can be constructed from the ASCII letters, underscore and digits, e.g.,
[a-zA-Z9-0_]+
- title(atom)
- Short summary of the package. Do not use line breaks and limit respect
at maximum length of about 40 characters.
- keywords(list(atom))
- List of keywords that help finding your pack. There is no fixed set of
keywords to choose from.
- description(list(atom))
- Longer description as a list of lines.
- version(version)
- Current version of the pack. This is a list of integers separated by
dots. There is no limit to the number of sub revisions.
- author(atom, email_or_url_or_empty)
- Original author of the code. If the contact address is unknown it may be
omitted (empty atom). Repeat this term for multiple authors.
- maintainer(atom, email_or_url)
- packager(atom, email_or_url)
- As
author
, but the contact cannot be empty. May be
repeated.
- pack_version(nonneg)
- Package convention number. Currently 1 (default) or 2. Version 2
provides better support for building foreign extensions.
- home(atom)
- Location of th home page. This is typically a URL.
- download(atom)
- Location for downloading. This is either the URL of the GIT repository
or a wildcard URL for downloading the archive, e.g., https://me.com/packs/mypack-*.zip.
An upgrade request fetches the https://me.com/packs/,
expecting an HTML page with links to the available versions. It then
selects the latest version.
- provides(atom)
- Announce that the pack provides facilities identified by the given
token. Optionally, the token may be given a version using
@(Token,Version)
.
A pack implicitly provides @(PackName,PackVersion)
. The
supplied tokens operate in the same name space as packages and
thus the same care must be taken to select a name. Multiple of these
claims may be present.
- requires(dependency)
- The pack depends on the availability of Dependency. The
Dependency is a token, normally the name of another package.
See
provides
. The dependency may be further refined by
writing Token Cmp Version
, where Cmp is one of
Prolog's standard numerical comparison operators. See cmp_versions/3.
This metadata is also used to state requirements on Prolog. See
section 15.5.1.1.
Multiple requirements are expressed with multiple claims.
- conflicts(dependency)
- The pack cannot be use together with the indicated Dependency.
This is the negation of
requires
.
- replaces(atom)
- This pack replaces some other pack.
- autoload(boolean)
- If
true
, add the library for the package as autoload
library. This implies that the exported predicates may be used without
explicitly importing the library. Use with care.
The file pack.pl
may contain requires(Requirement)
statements. Normally, Requirement is a pack or token,
optionally with a version requirement. The requirement prolog
is reserved for requirements on the Prolog version while
prolog:
Feature may be used to demand specific
features. Feature matching is described with
require_prolog_version/2.
Multiple requirements on Prolog must all be true. Below are some
examples
requires(prolog >= '9.2'). % 9.2.0 or later
requires(prolog:threads). % flag threads = true
requires(prolog:library(socket)). % library(socket) exists
requires(prolog:bounded(false)). % flag bounded = false