Tools needed for building or running
The USE_TOOLS definition is used both internally
by pkgsrc and also for individual packages to define what commands
are needed for building a package (like BUILD_DEPENDS)
or for later run-time of an installed packaged (such as
DEPENDS).
If the native system provides an adequate tool, then in many cases, a pkgsrc
package will not be used.
When building a package, the replacement tools are
made available in a directory (as symlinks or wrapper scripts)
that is early in the executable search path. Just like the buildlink
system, this helps with consistent builds.
A tool may be needed to help build a specific package. For example,
perl, GNU make (gmake) or yacc may be needed.
Also a tool may be needed, for example, because the native system's supplied
tool may be inefficient for building a package with pkgsrc.
For example, a package may need GNU awk, bison (instead of
yacc) or a better sed.
The tools used by a package can be listed by running
make show-tools.
Tools for pkgsrc builds
The default set of tools used by pkgsrc is defined in
bsd.pkg.mk. This includes standard Unix tools,
such as: cat, awk,
chmod, test, and so on.
These can be seen by running:
make show-var VARNAME=USE_TOOLS.
If a package needs a specific program to build
then the USE_TOOLS variable can be used
to define the tools needed.
Tools needed by packages
In the following examples, the :pkgsrc means to use the pkgsrc version
and not the native version for a build dependency.
And the :run means that it is used for a
run-time dependencies also (and becomes a DEPENDS).
The default is a build dependency which can be set with
:build. (So in this example, it is the same as gmake:build
and pkg-config:build.)
USE_TOOLS+= mktemp:pkgsrc
USE_TOOLS+= gmake perl:run pkg-config
When using the tools framework, a
TOOLS_PATH.foo variable is defined
which contains the full path to the appropriate tool. For example,
TOOLS_PATH.bash could be /bin/bash
on Linux systems.
If you always need a pkgsrc version of the
tool at run-time, then just use DEPENDS instead.
Tools provided by platforms
When improving or porting pkgsrc to a new platform, have a look
at (or create) the corresponding platform specific make file fragment under
pkgsrc/mk/tools/tools.${OPSYS}.mk which defines
the name of the common tools. For example:
.if exists(/usr/bin/bzcat)
TOOLS_PLATFORM.bzcat?= /usr/bin/bzcat
.elif exists(/usr/bin/bzip2)
TOOLS_PLATFORM.bzcat?= /usr/bin/bzip2 -cd
.endif
TOOLS_PLATFORM.true?= true # shell builtin
Questions regarding the tools
How do I add a new tool?
TODO
How do I get a list of all available
tools?
TODO
How can I get a list of all the tools that a
package is using while being built? I want to know whether it
uses sed or not.
Currently, you can't. (TODO: But I want to be able
to do it.)