- See also
- - Installed packages can be inspected using
?- doc_browser.
- library(build/tools)
- To be done
- - Version logic
- Find and resolve conflicts
- Upgrade git packages
- Validate git packages
- Test packages: run tests from directory‘test'.
The library(prolog_pack)
provides the SWI-Prolog package
manager. This library lets you inspect installed packages, install
packages, remove packages, etc. It is complemented by the built-in attach_packs/0
that makes installed packages available as libraries.
To make changes to a package:
- Clone the git repo, then go into the repo and run:
?- pack_install(.).
This builds the pack locally and
creates a symlink to make it available. It will also write a file buildenv.sh
that you can source to get the environment for running a normal make
(this is done only if there is a configure
step; i.e., if
there is a
configure.in
or configure
file).
- ‘(source ./buildenv.sh`
&&
make)` to
rebuild
?- pack_rebuild(package_name).
This runs‘make
distclean and
make` with the right environment.
- The build process also supports
cmake
.
Once you have made the changes, you should edit the pack.pl
file to change the version
item. After updating the git
repo, issue a pack_install(package_name, [upgrade(true), test(true), rebuild(make)])
to cause the repository to refresh. You can simulate the full
installation process by removing all the build files in the package
(including any in submodules), running pack_install/1,
and then running pack_install using a file://
URL.
- [det]pack_list_installed
- List currently installed packages. This calls
?- pack_list('', [server(false)]).
- See also
- pack_list/2.
- pack_info(+Pack)
- Print more detailed information about Pack.
- [det]pack_list(+Query)
- [det]pack_list(+Query,
+Options)
- [det]pack_search(+Query)
- Query package server and installed packages and display
results.
Query is matches case-insensitively against the name and
title of known and installed packages. For each matching package, a
single line is displayed that provides:
- Installation status
- p: package, not installed
- i: installed package; up-to-date with public version
- U: installed package; can be upgraded
- A: installed package; newer than publically available
- l: installed package; not on server
- Name@Version
- Name@Version(ServerVersion)
- Title
Options processed:
- installed(true)
- Only list packages that are locally installed. Contacts the server to
compare our local version to the latest available version.
- outdated(true)
- Only list packages that need to be updated. This option implies
installed(true)
.
- server(Server
|
false) - If
false
, do not contact the server. This implies
installed(true)
. Otherwise, use the given pack server.
Hint: ?- pack_list('').
lists all packages.
The predicates pack_list/1
and pack_search/1
are synonyms. Both contact the package server at https://www.swi-prolog.org
to find available packages.
- See also
- pack_list_installed/0
to list installed packages without contacting the server.
- [det]pack_install(+Spec:atom)
- Install a package. Spec is one of
- A package name. This queries the package repository at http://www.swi-prolog.org
- Archive file name
- HTTP URL of an archive file name. This URL may contain a star (*)
for the version. In this case pack_install asks for the directory
content and selects the latest version.
- GIT URL (not well supported yet)
- A local directory name given as
file://
URL
'.'
, in which case a relative symlink is created to the
current directory (all other options for Spec make a copy of
the files).
After resolving the type of package, pack_install/2
is used to do the actual installation.
- [det]pack_install(+Name,
+Options)
- Install package Name. Processes the options below. Default
options as would be used by pack_install/1
are used to complete the provided Options.
- url(+URL)
- Source for downloading the package
- package_directory(+Dir)
- Directory into which to install the package.
- global(+Boolean)
- If
true
, install in the XDG common application data path,
making the pack accessible to everyone. If false
, install
in the XDG user application data path, making the pack accessible for
the current user only. If the option is absent, use the first existing
and writable directory. If that doesn't exist find locations where it
can be created and prompt the user to do so.
- insecure(+Boolean)
- When
true
(default false
), do not perform any
checks on SSL certificates when downloading using https
.
- interactive(+Boolean)
- Use default answer without asking the user if there is a default action.
- silent(+Boolean)
- If
true
(default false), suppress informational progress
messages.
- upgrade(+Boolean)
- If
true
(default false
), upgrade package if it
is already installed.
- rebuild(Condition)
- Rebuild the foreign components. Condition is one of
if_absent
(default, do nothing if the directory with
foreign resources exists), make
(run make
) or true
(run‘make distclean` followed by the default configure and build
steps).
- test(Boolean)
- If
true
(default), run the pack tests.
- git(+Boolean)
- If
true
(default false
unless URL
ends with =.git=), assume the URL is a GIT repository.
- link(+Boolean)
- Can be used if the installation source is a local directory and the file
system supports symbolic links. In this case the system adds the current
directory to the pack registration using a symbolic link and performs
the local installation steps.
Non-interactive installation can be established using the option
interactive(false)
. It is adviced to install from a
particular
trusted URL instead of the plain pack name for unattented
operation.
- [det]pack_install_local(:Spec,
+Dir, +Options)
- Install a number of packages in a local directory. This predicate
supports installing packages local to an application rather than
globally.
- [det]pack_url_file(+URL,
-File)
- True if File is a unique id for the referenced pack and
version. Normally, that is simply the base name, but GitHub archives
destroy this picture. Needed by the pack manager.
- [det]pack_rebuild(+Pack)
- Rebuild possible foreign components of Pack.
- [det]pack_rebuild
- Rebuild foreign components of all packages.
- [semidet]pack_upgrade(+Pack)
- Try to upgrade the package Pack.
- To be done
- Update dependencies when updating a pack from git?
- [det]pack_remove(+Name)
- Remove the indicated package.
- [nondet]pack_property(?Pack,
?Property)
- True when Property is a property of an installed Pack.
This interface is intended for programs that wish to interact with the
package manager. Defined properties are:
- directory(Directory)
- Directory into which the package is installed
- version(Version)
- Installed version
- title(Title)
- Full title of the package
- author(Author)
- Registered author
- download(URL)
- Official download URL
- readme(File)
- Package
README
file (if present)
- todo(File)
- Package
TODO
file (if present)
- [det]pack_attach(+Dir,
+Options)
- Attach a single package in Dir. The Dir is
expected to contain the file
pack.pl
and a prolog
directory. Options processed:
- duplicate(+Action)
- What to do if the same package is already installed in a different
directory. Action is one of
- warning
- Warn and ignore the package
- keep
- Silently ignore the package
- replace
- Unregister the existing and insert the new package
- search(+Where)
- Determines the order of searching package library directories. Default
is
last
, alternative is first
.
- See also
- attach_packs/2 to
attach multiple packs from a directory.