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.)