Chapter 17. Tools needed for building or running
Prev | Part II. The pkgsrc developer's guide | Next

## Chapter 17. 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 `TOOL_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.

## 17.1. 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.

## 17.2. Tools needed by packages

In the following examples, the :run means that it is needed at run-time (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+=     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.

## 17.3. 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

Prev | Up | Next
Chapter 16. Options handling | Home | Chapter 18. Buildlink methodology