Did you know ... | Search Documentation: |
tools.pl -- Utilities for building foreign resources |
This module implements the build system that is used by pack_install/1 and pack_rebuild/1. The build system is a plugin based system where each plugin knows about a specific build toolchain. The plugins recognise whether they are applicable based on the existence of files that are unique to the toolchain. Currently it supports
automake
and autoconf
for configuration and buildingdistclean
or clean
. [test]
may be
omited if --no-test
is effective.
[[dependencies], [configure], build, [test], install]
Each step finds an applicable toolchain based on known unique files and calls the matching plugin to perform the step. A step may fail, which causes the system to try an alternative. A step that wants to abort the build process must throw an exception.
If a step fails, a warning message is printed. The message can be
suppressed by enclosing the step in square brackets. Thus, in the
above example of Steps, only failure by the build
and install
steps result in warning messages; failure of the other steps is
silent.
The failure of a step can be made into an error by enclosing it
in curly brackets, e.g. [[dependencies], [configure], {build}, [test], {install}]
would throw an exception if either the build
or install
step failed.
Options are:
@tbd If no tool is willing to execute some step, the step is
skipped. This is ok for some steps such as dependencies
or test
.
Possibly we should force the install
step to succeed?
build
to create a build
subdir.prolog:build_environment('USER', User) :- getenv('USER', User).
configure
or cmake
to install executables and other related resources in a similar
location as SWI-Prolog itself. Tries these rules:
pack_prefix
at a writable directory, use
this.~/bin
directory, use ~
.informational
.output(Out)
, but messages are printed at level error
.
If Executable is path(Program)
and we have an environment we make
sure to use the PATH
from this environment for searching
Program.
The following predicates are exported from this file while their implementation is defined in imported modules or non-module files loaded by this module.
has_program(path(cmake), CMakeExe)
.
The second allows passing in an environment as Name=Value pairs. If
this contains a value for PATH
, this is used rather than the
current path variable.