BSD.PORT.MK(5) OpenBSD Programmer's Manual BSD.PORT.MK(5)NAMEbsd.port.mk - ports tree master Makefile fragment
SYNOPSIS
.include <bsd.port.mk>
DESCRIPTIONbsd.port.mk holds all the standard routines used by the ports tree. Some
variables and targets are for its internal use only. The rest is
documented here.
bsd.port.mk also uses quite a few helper scripts. Those live under
${PORTSDIR}/infrastructure/bin, and they do have manpages under
${PORTSDIR}/infrastructure/man, which is not currently part of the
default manpath.
Other BSD variants, as well as older versions of bsd.port.mk, include
other targets and variables. Conversion methods are outlined here.
Most variables and targets are documented, with very few exceptions.
This documentation covers the current targets, variables and paths used
by bsd.port.mk, followed by sections on obsolete constructs that a porter
may need when converting from other ports systems. There is a separate
section covering the fake framework, a section explaining flavors and
multi-packages, and a section covering the generation of package
information.
Binary package details are mostly covered in pkg_create(1) for the
packing-list details, and in pkg_add(1) for the installation semantics.
Selected common user activity such as the building of every package in
the system is covered by ports(7) instead. packages(7) provides an
overview of the result.
TARGETS
{build,run,all,regress}-dir-depends
Print all dependencies for a port in order to build it, run
it, build and run it, or to run regression tests. The
output is formatted as package specification pairs, in a
form suitable for tsort(1).
full-{build,run,all}-depends
Print all dependencies a package depends upon for building,
running, or both, as a list of package names.
{build,lib,run}-depends-list
Print a list of first level package specifications a port
depends as build dependencies, library dependencies, or run
dependencies.
print-{build,run}-depends
User convenience target that displays the result of
full-{build,run}-depends in a more readable way.
{pre,do,post}-*
Most standard targets can be specialized according to a
given port's needs. If defined, the pre-* hook will be
invoked before running the normal action; the do-* hook
will be invoked instead of the normal action; the post-*
hook will be invoked after the normal action.
Specialization hooks exist for build, configure, distpatch,
extract, fake, fetch, install, package, patch, regress.
See individual targets for exceptions.
addsum Complete the ${CHECKSUM_FILE} record of checksums with
files that have been added since makesum. Complain if
anything does not match.
build, all Default target. Build the port. Essentially invoke
env -i ${MAKE_ENV} ${MAKE_PROGRAM} ${MAKE_FLAGS} \
-f ${MAKE_FILE} ${ALL_TARGET}
build-depends
Verify the ports mentioned in BUILD_DEPENDS, by checking
the corresponding packages are actually installed, and
install the missing ports by recursing through the ports
tree. Invoked right after creating the working directory.
checkpatch Debugging version of the patch target that simulates
invoking patch(1).
checksum Check distribution archives and distribution patches
control sum against the results recorded in
${CHECKSUM_FILE}, using the cryptographic signature
utilities listed in ${PREFERRED_CIPHERS}. All the files
needed to recreate a port should be in ${CHECKSUMFILES} and
checksummed. Invoking checksum with REFETCH=true will try
to fetch a version with the correct checksum from the
OpenBSD main archive site in the case of a checksum
mismatch. NO_CHECKSUM can be used to avoid all
checksumming steps.
clean Clean ports contents. By default, it will clean the work
directory. It can be invoked as make clean='[depends build
bulk work fake flavors dist install sub package packages
plist readme]'.
work Clean work directory.
bulk Clean bulk cookie.
build Clean the WRKBUILD directory (only useful if
SEPARATE_BUILD is set).
depends Recurse into dependencies.
dist Clean distribution files.
fake Clean fake installation directory.
flavors Clean all work directories.
install Uninstall package.
package Remove all copies of package file.
plist Remove registered packing lists of all
subpackages.
readmes Clean files generated through the readme targets
(html files).
sub With install or package, clean subpackages as
well.
packages Shorthand for `sub package'.
all Shorthand for `work flavors packages plist'.
clean-depends
Short hand for make clean=depends.
configure Configure the port. Might be a void operation. Unless
overridden, configure creates the ${WRKBUILD} directory
(see SEPARATE_BUILD), and runs whatever configuration
methods are recorded in CONFIGURE_STYLE.
depends Check all the port's dependencies, that is: build-depends,
lib-depends, run-depends, regress-depends.
describe Prints a one-line index entry of the port, suitable for
${PORTSDIR}/INDEX.
distclean Short-hand for make clean=dist.
distpatch Apply distribution patches only. See patch and PATCH_CASES
for details.
dump-vars Dumps the values of all relevant variables in a port,
prepended with the port's FULLPKGPATH.
extract Extract the distribution files under ${WRKDIR} (but see
EXTRACT_ONLY). Refer to EXTRACT_CASES for a complete
description. Do not use pre-extract and do-extract hooks.
fake Do a fake port installation, that is, simulate the port
installation under ${WRKINST}. There is no do-fake and
post-fake hooks. fake actually uses pre-fake, pre-install,
do-install and post-install. Override pre-install,
do-install, or post-install to change behavior. Do not
touch pre-fake unless you really know what you are doing.
Described in a separate section below.
fetch Fetch the distribution files and patchfiles, using
${FETCH_CMD}. Each file of the DISTFILES and PATCHFILES
lists is retrieved, if necessary, from the list of sites in
MASTER_SITES. If a filename ends with a `:0' to `:9'
extension, it will be retrieved from MASTER_SITES0 to
MASTER_SITES9 instead. The ports framework uses
${DISTDIR}/${DIST_SUBDIR} (aliased to ${FULLDISTDIR}) to
cache the ports distribution files and patch files. Note
that this framework is also used by mirroring scripts,
which will also retrieve SUPDISTFILES, to fill with
supplementary distribution files which are not needed for
every configuration. Use of {pre,do,post}-fetch hooks is
strongly discouraged, and will probably be removed in the
near future, as this makes mirroring of distfiles very
complicated. See CHECKSUMFILES, CDROM_SITE, DISTDIR,
DISTFILES, DIST_SUBDIR, FETCH_CMD, FETCH_MANUALLY,
FETCH_SYMLINK_DISTFILES, FULLDISTDIR, MAKESUMFILES,
MASTER_SITES, MASTER_SITES0, ..., MASTER_SITES9,
PATCHFILES, SUPDISTFILES, REFETCH.
index Top-level target, see ports(7).
install Install the package after building. See the description of
THE FAKE FRAMEWORK for the non-intuitive details of the way
{pre,do,post}-install hooks are actually used by the ports
tree.
install-all Install all packages in a multi-packages port.
lib-depends Verify that the library dependencies a port needs are
actually there, by checking the library specifications.
lib-depends-check
Verify that the LIB_DEPENDS and WANTLIB are accurate for
the port. See port-lib-depends-check, which is quicker.
license-check
Check that PERMIT_PACKAGE_* settings match: if any
dependency has a more restrictive setting, warn about it.
This warning is advisory, because the automated license
checking cannot figure out which ports were used only for
building and did not taint the current port.
link-categories
Create symbolic links in other directories that correspond
to the port's CATEGORIES. Note that this does not affect
bulk package building, since those links don't appear in
the upper-level Makefiles. See also unlink-categories.
lock Manually obtain a lock on a given directory. Output must
be used to update environment variables. The lock can be
released with unlock. Seldom used, see ports(7) for
details.
makesum Create the ${CHECKSUM_FILE} list of recorded checksums by
running the cryptographic fingerprints sha256, sha1, md5
and rmd160 on ${MAKESUMFILES}. NO_CHECKSUM can be used to
avoid all checksumming steps.
manpages-check
Verify that makewhatis(8) can do a correct job with the
port's manpages.
mirror-maker Top-level target, see mirroring-ports(7).
package Build a port package (or packages in MULTI_PACKAGES cases)
from the fake installation. Involves creating packaging
information from templates (see COMMENT, SUBST_VARS among
others) and invoking pkg_create(1) for each package in the
MULTI_PACKAGES list. If the repository already contains
up-to-date packages, they are not rebuilt. If PLIST_DB is
set, the resulting packaging information is compared with
existing stuff, and saved if new, with loud complaints if
it changed without a REVISION bump. Arch-independent
packages are created in ${PACKAGE_REPOSITORY}/no-arch, and
copied into ${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/all as
needed. If ${PERMIT_PACKAGE_FTP} is set to `Yes', copies
built packages into
${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/ftp, using hard links
if possible. If ${PERMIT_PACKAGE_CDROM} is set to `Yes',
copies built packages into
${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/cdrom}, using hard
links if possible.
patch Apply distribution and OpenBSD specific patches. Because
of historical accident, patch does not follow the exact
same scheme other standard targets do. Namely, patch
invokes pre-patch (if defined), do-patch, and post-patch,
but the default do-patch target invokes distpatch directly.
So, if the do-patch target is overridden, it should still
begin by calling make distpatch, before applying OpenBSD
specific patches. Accordingly, the exact sequence of hooks
is: pre-patch, do-distpatch, post-distpatch, do-patch,
post-patch. If ${PATCHDIR} exists, the files described
under PATCH_LIST will be applied under WRKDIST. See also
REORDER_DEPENDENCIES for possible post-patch clean-up.
peek-ftp Connect to the first site in MASTER_SITES, in the right
directory, and leaves user at ftp prompt.
pkglocatedb Top-level target, see ports(7).
port-lib-depends-check
Verify that the LIB_DEPENDS and WANTLIB hold all shared
libraries used for every package in the port. See
library-specs(7). This makes use of
print-plist-with-depends to avoid actually building the
packages, it only needs the completion of the fake stage,
and thus is quicker than lib-depends-check, unless you
already have all binary packages.
prepare Prepare a port for building, by checking and installing all
required dependencies.
print-package-signature
Print the package signature, as computed using information
from the ports tree, in the same format used for
pkg_info(1)-S.
print-plist Generate and print a package packing-list from the static
information present in the port.
print-plist-contents
Generate and print a package contents from the static
information present in the port. In contrast with
print-plist, the package contents only consists of files,
all tagged with category markers such as @file. See
pkg_create(1).
print-plist-libs
Generate and print the list of static and dynamic libraries
present in the port. See pkg_create(1).
print-plist-with-depends
Like print-plist, but slower. It also handles LIB_DEPENDS,
RUN_DEPENDS, and WANTLIB, so that the packing-list is
complete.
readmes Create an html description of packages, including comments,
description, and dependencies.
rebuild Force rebuild of the port.
regress Run regression tests for the port. Essentially depend on a
correct build and invoke
env -i ${MAKE_ENV} ${MAKE_PROGRAM} ${ALL_REGRESS_FLAGS} \
-f ${MAKE_FILE} ${REGRESS_TARGET} ${REGRESS_LOG}
If a port needs some other ports installed to run
regression tests, use REGRESS_DEPENDS. If a port needs
special configuration or build options to enable regression
testing, define a `regress' FLAVOR.
regress-depends
Verify packages needed for regression tests, using the same
scheme as build-depends. Only invoked when regression
tests are run, or explicitly through depends.
reinstall Force reinstallation of a port, by first cleaning the old
installation. Seldom needed, as update will often do the
right thing.
repackage For rebuilding of the packages of a port, by first removing
the old packages.
run-depends Verify the ports mentioned in RUN_DEPENDS, by checking the
corresponding packages are actually installed, and install
the missing ports by recursing through the ports tree.
Invoked right before installing the package.
show Invoked as make show=name, show the contents of ${name}.
Invoked as make show="name1 name2 ...", show the contents
of ${name1} ${name2} ..., one variable value per line.
Mostly used from recursive makes, or to know the contents
of another port's variables without guessing wrongly.
show-required-by
Prints the list of pkgpaths for all ports that will be
affected by the current port changing. Works by walking
the list of dependencies, in reverse.
subupdate Update an existing installation to a newer package, exactly
like update, but affects only one single subpackage in
multi-packages ports.
unlink-categories
Remove symbolic links in other directories that correspond
to the port's CATEGORIES. See also link-categories.
unlock Manually release a lock on a given directory. See lock.
update-patches
Create or update patches for a port, using diff(1) between
file and file.orig, based on file.orig existence. In order
to generate a patch, the original file needs to be named
file.orig and file edited. After the target is invoked,
the patches are placed under the patches/ directory. It
moves existing patches from patch-file to patch-file.orig
update Update an existing installation to a newer package: scan
the installation for a package with the same FULLPKGPATH,
and update it using `pkg_add -r' if a newer package is
available. In multi-packages ports, all relevant packages
are updated. See UPDATE_COOKIES_DIR and FORCE_UPDATE as
well.
update-or-install
Update an installed package or perform a fresh
installation, by using `pkg_add -r'. Handles one single
package in multi-packages ports. See UPDATE_COOKIES_DIR
and FORCE_UPDATE as well.
update-or-install-all
Update installed packages or perform a fresh installation,
by using `pkg_add -r'. Handles all packages in multi-
packages ports. See UPDATE_COOKIES_DIR and FORCE_UPDATE as
well.
update-plist Update the packing lists for a port, using the fake
installation and the existing packing lists. update-plist
should produce mostly correct PLIST, PFRAG.shared and
PFRAG.no-shared files, handling shared libraries, GNU
info(1) files, setuid files, and empty directories. It
moves existing files to PLIST.orig, PFRAG.shared.orig and
PFRAG.no-shared.orig. If the generated lists include files
and directories that shouldn't be included, comment these
like this:
@comment unwanted-file
@comment @dirrm unwanted-dir
Subsequent calls to update-plist will automatically
recognize and handle such lines correctly.
update-plist does not handle flavor situations yet, so
beware.
VARIABLES
Note that some variables are marked as `User-settings', which means that
individual ports should not modify them, and that some variables are
marked as `read-only', which means that they shouldn't ever be changed.
In a MULTI_PACKAGES setup, some variables have settings specific to a
given subpackage. See "Flavors and multi-packages".
show Invoked as make show=name, show the contents of ${name}.
Invoked as make show="name1 name2 ...", show the contents
of ${name1} ${name2} ..., one variable value per line.
ALL_FAKE_FLAGS
Flags passed to ${MAKE} invocations during the fake
process. Equals ${MAKE_FLAGS} ${DESTDIRNAME}=${WRKINST}
${FAKE_FLAGS}. Read-only.
ALL_REGRESS_FLAGS
Flags passed to ${MAKE} invocations during regress. Equals
${MAKE_FLAGS} ${REGRESS_FLAGS}. Read-only.
ALL_TARGET Target used to build software. Default is `all'. Can be
set to empty, to yield a package's default target.
APM_ARCHS Set to the list of apm(4) architectures. Use with
ONLY_FOR_ARCHS.
ARCH Current machine architecture. Read-only.
AUTOCONF Location of the autoconf binary if needed. Defaults to
autoconf (though make autoreconf might be more
appropriate).
AUTOCONF_DIR Where to invoke autoconf if ${CONFIGURE_STYLE} includes
autoconf. Defaults to ${WRKSRC}.
AUTOCONF_VERSION
Starting with OpenBSD 3.3, several versions of autoconf may
coexist peacefully. Setting AUTOCONF_VERSION along with
CONFIGURE_STYLE set to autoconf is the correct way to
specify which one to use. If autoconf must be run
manually, MODGNU_AUTOCONF_DEPENDS can be used to specify
what packages to depend upon.
BASE_PKGPATH Full pkgpath to the current port, taking flavors into
account. Read-only.
BATCH User-settings. Set to `Yes' to avoid ports that require
user-interaction. Use in conjunction with INTERACTIVE to
simplify bulk-package builds. (See IGNORE).
BROKEN Define only for broken ports, set to reason the port is
broken. See also NO_IGNORE, TRY_BROKEN.
BROKEN-<arch>
Define only for ports broken on a given architecture.
Distinct from ONLY_FOR_ARCHS and NOT_FOR_ARCHS, which are
used to mark ports for which support for some architectures
does not exist at all, or is completely obsolete.
BSD_INSTALL_{PROGRAM,SCRIPT,DATA,MAN}[_DIR]
Macros passed to make and configure invocations. Set based
on corresponding INSTALL_* variables.
BUILD_DEPENDS
List of other ports the current port needs to build
correctly. Each item has the form
`[pkgspec:]directory[,-subpackage][,flavor ...][:target]'.
`target' defaults to `install' if it is not specified.
`legacy' used to be a file to check. The ports tree now
uses `pkgspec' instead, as a package that must be installed
prior to the build. `directory' is set relative to
${PORTSDIR}. `subpackage' is an optional subpackage name,
to install instead of the default main package name.
`flavor ...' is a comma separated list of flavors. By
default, the dependency will build the default flavor.
Build dependencies are checked at the beginning of the
extract stage.
Build dependencies that are not the default package or
install target will be processed in a subdirectory of the
working directory, specifically, in ${WRKDIR}/directory.
BUILD_PKGPATH
Full pkgpath to the current port, taking flavors and
pseudo-flavors into account. Mostly useful to write
dependencies for subpackages like this:
LIB_DEPENDS-foo=::${BUILD_PKGPATH} and avoid starting to
build a package with some other flavor combination. Read-
only.
BULK User settings. If set to `Yes', successful package builds
and installations will clean their working directories,
after invoking any targets mentioned in BULK_TARGETS, and
commands mentioned in BULK_DO. Can be set on a per-
${PKGPATH} basis. For instance, setting
BULK_misc/screen=No will override any BULK=Yes passed on
the command line. See BULK_COOKIES_DIR, TRUST_PACKAGES.
BULK_COOKIES_DIR
User settings. Used to store cookies for successful bulk-
package builds, defaults to
${PORTSDIR}/bulk/${MACHINE_ARCH}.
BULK_DO Commands to run after each bulk package build before
cleaning up the working directory. Empty defaults. Can be
set on a per-${PKGPATH} basis, e.g., BULK_DO_${PKGPATH}=...
BULK_FLAGS Flags to pass to build each target in BULK_TARGETS.
BULK_TARGETS Targets to run after each bulk package build before
cleaning up the working directory. Empty defaults. Can be
set on a per-${PKGPATH} basis, e.g.,
BULK_TARGETS_${PKGPATH}=...
BZIP2 Name of the bzip2 binary.
CATEGORIES List of descriptive categories into which this port falls.
Mandatory. See link-categories, unlink-categories.
CDIAGFLAGS Flags appended to CFLAGS if WARNINGS is set.
CDROM_SITE Path to a local database that holds distribution files
(usually a CD-ROM or other similar media), used to retrieve
distribution files before going to the network. Defaults
to empty, set to /cdrom/distfiles/${DIST_SUBDIR} to check
that path. Distribution files are still copied or linked
(see FETCH_SYMLINK_DISFILES) into DISTDIR if they are found
under CDROM_SITE.
CFLAGS Default flags passed to the compiler for building. Many
ports ignore it. See also COPTS, CDIAGFLAGS.
CHECK_LIB_DEPENDS
User settings. If set to `Yes', every package build will
verify that shared libraries are correctly registered.
Defaults to `No', as this can be a big performance hit.
CHECKSUMFILES
List of all files that need to be retrieved by fetch, with
DIST_SUBDIR prepended and with master site selection
extension removed. Read-only. See also MAKESUMFILES.
CHECKSUM_FILE
Location for this port's checksums, used by addsum,
checksum, and makesum. Defaults to distinfo.
CLEANDEPENDS If set to `Yes', `make clean' will also clean dependencies.
Can be overridden on a per-${PKGPATH} basis, by setting
CLEANDEPENDS_${PKGPATH}.
COMMENT Short, one line description of the port, used for the
package, and in the INDEX.
COMMENT-foo Same as COMMENT but used for sub package -foo in a multi-
package setup.
COMMENT-vanilla
Same as COMMENT but used for a flavored package, if the
non-flavored comment is inappropriate.
COMMENT-foo-vanilla
Same as COMMENT but used for a sub-, flavored package.
COMES_WITH The first release where the port was made part of the
standard distribution. If the current OpenBSD version is
>= this version then a notice will be displayed instead of
the port being built.
CONFIGURE_ARGS
Arguments to pass to configure script. Defaults are empty,
except for GNU-style configure, where prefix and sysconfdir
are set.
CONFIGURE_ENV
Basic environment passed to configure script (path and
libtool setup). GNU-style configure adds a lot more
variables.
CONFIGURE_SCRIPT
Set to name of script invoked by configure target, if
appropriate. Should be either an absolute path, or
relative to ${WRKSRC}.
CONFIGURE_SHARED
Set by default to --enable-shared or --disable-shared,
depending on whether the architecture supports shared
libraries. Should be appended to CONFIGURE_ARGS, for ports
that build dynamic libraries and whose configure script
supports these options.
CONFIGURE_STYLE
Set to style of configuration that needs to happen. If
`perl', assume perl(1)ExtUtils::MakeMaker(3p) style. Add
`modbuild', to enable perl(1)Module::Build(3p) or
`modinst' for Module::Install(3p) style. If `gnu', assume
GNU configure style. Add `dest' if port does not handle
DESTDIR correctly, and needs to be configured to add
DESTDIR to prefixes (see also DESTDIRNAME). Add `old' if
port is an older autoconf port that does not recognize
--sysconfdir. Add `autoconf' if autoconf needs to be rerun
first, but set `no-autoheader' to prevent autoheader from
running. Add `automake' if automake may need to be rerun.
Otherwise, automake will be explicitly disabled. If
`imake', assume port configures using X11 ports Imakefile
framework. Add `noman' if port has no man pages the
Imakefile should try installing. If `simple', there is a
configure script, but it does not fit the normal GNU
configure conventions.
Extensions may be defined by specific MODULES. See
port-modules(5) for details.
COPTS User settings. Supplementary options appended to ${CFLAGS}
for building. Since most ports ignore the COPTS
convention, they are actually told to use ${CFLAGS}
${COPTS} as CFLAGS.
CXXDIAGFLAGS Flags appended to CXXFLAGS if WARNINGS is set.
CXXFLAGS Default flags passed to the C++ compiler for building.
Many ports ignore it.
CXXOPTS User settings. Supplementary options appended to
${CXXFLAGS} for building.
DEF_UMASK Correct value of umask for the port to build and package
correctly. Tested against the actual umask at fake time.
Default is 022. Don't override.
DESTDIR See DESTDIRNAME.
DESTDIRNAME Name of variable to set to ${WRKINST} while faking.
Usually DESTDIR. To be used in the rare cases where a port
heeds DESTDIR in a few directories and needs to be
configured with `gnu dest', so that those few directories
do not get in the way.
DISTDIR Directory where all ports distribution files and patchfiles
are stashed. Defaults to ${PORTSDIR}/distfiles. Override
if distribution files are stored elsewhere. Always use
FULLDISTDIR to refer to ports' distribution files location,
as it takes an eventual DIST_SUBDIR into account.
DISTFILES The main port's distribution files (the actual software
source, except for binary-only ports). Will be retrieved
from the MASTER_SITES (see fetch), checksummed and
extracted (see checksum, extract). DISTFILES normally
holds a list of files, possibly with `:0' to `:9' appended
to select a different MASTER_SITES. See also SUPDISTFILES.
DISTNAME Name used to identify the port. See DISTFILES and PKGNAME.
DISTORIG Suffix used by distpatch to rename original files.
Defaults to .bak.orig. Distinct from .orig to avoid
confusing update-patches.
DIST_SUBDIR Optional subdirectory of ${DISTDIR} where the current
port's distribution files and patchfiles will be located.
See target fetch.
DPB Set by the distributed ports builder to only get the
information it needs from dump-vars.
ECHO_MSG User settings. Used to display `===> Configuring for foo'
and similar informative messages. Override to turn off,
for instance.
ECHO_REORDER User settings. Set it to `echo' to see
REORDER_DEPENDENCIES actions. Silent by default.
EPOCH Epoch number of the current package. Defaults to empty (no
need for numbering changes), then numbering starts at 0.
Gets automatically incorporated into FULLPKGNAME as
`v${EPOCH}' to form a full package-name conforming to
packages-specs(7).
ERRORS List of errors found while parsing the port's Makefile.
Display the errors before making any target, and if any
error starts with "Fatal:", do not make anything. For
instance:
.if !defined(COMMENT)
ERRORS+="Fatal: Missing comment"
.endif
EXTRACT_CASES
In the normal extraction stage (when EXTRACT_ONLY is not
empty), this is the contents of a case statement, used to
extract files. Fragments are automatically appended to
extract tar and zip archives, so that the default case is
equivalent to the following shell fragment:
set -e
cd ${WRKDIR}
for archive in ${EXTRACT_ONLY}
do
case $$archive in
*.zip)
unzip -q ${FULLDISTDIR}/$$archive -d ${WRKDIR};;
*.tar.bz2)
bzip2 -dc ${FULLDISTDIR}/$$archive| tar xf -;;
*.shar.gz|*.shar.Z|*.sh.Z|*.sh.gz)
gzcat ${FULLDISTDIR}/$$archive | /bin/sh;;
*.shar|*.sh)
/bin/sh ${FULLDISTDIR}/$$archive;;
*.tar)
tar xf ${FULLDISTDIR}/$$archive;;
*)
gzip -dc ${FULLDISTDIR}/$$archive | tar xf -;;
esac
done
EXTRACT_ONLY Set if not all ${DISTFILES} should be extracted at do-
extract stage. Default value is ${DISTFILES}.
EXTRACT_SUFX Used to set DISTFILES default value to
${DISTNAME}${EXTRACT_SUFX}. Default value is .tar.gz.
FAKE_FLAGS Extra flags passed to ${MAKE_PROGRAM} on fake invocation.
Empty by default.
FAKE_TARGET Target built by ${MAKE_PROGRAM} on fake invocation.
Defaults to ${INSTALL_TARGET}.
FAKEOBJDIR If non empty, used as a base for the fake area. The real
fake directory ${WRKINST} is created there. Can be set on
a per-${PKGPATH} basis. For instance, setting
FAKEOBJDIR_www/mozilla=/tmp/obj will affect only the
mozilla port.
FETCH_CMD Command used to fetch distribution files for this port.
Defaults to ftp(1). User settings. Can be used to go
through excessively paranoid firewalls.
FETCH_MANUALLY
Some ports' distfiles cannot be fetched automatically for
licensing reasons. In this case, set FETCH_MANUALLY to a
list of strings that will be displayed, one per line, e.g.,
FETCH_MANUALLY= "You must fetch foo-1.0.tgz"
FETCH_MANUALLY+="from http://www.fubar.com/ manually,"
FETCH_MANUALLY+="after reading and agreeing to the license."
Automatically sets IS_INTERACTIVE if some distribution
files are missing.
FETCH_PACKAGES
User settings. If set to `Yes', the package target will
download packages missing from the repository from
locations in ${PKG_PATH} and place them into
${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/cache/ It will only
build them if no suitable packages are found.
FETCH_SYMLINK_DISTFILES
User settings. Set to `Yes' to link distribution files off
CDROM_SITE instead of copying them.
FILESDIR Location of other files related to the current ports.
(default: files.${ARCH} or files).
FLAVOR The port's current options. Set by the user, and tested by
the port to activate wanted functionalities.
FLAVORS List of all flavors keywords a port may match. Used to
sort FLAVOR into a canonical order to build the package
name, or to select the packing-list, and as a quick
validity check. See also PSEUDO_FLAVORS.
FLAVOR_EXT Canonical list of flavors being set for the current build,
dash-separated. See FULLPKGNAME.
FORCE_UPDATE User settings. If set to `Yes', the update target will
always update an installed package, as soon as its
signature differs, and all dependencies that install
packages will also force an update. If set to `hard', the
update target will also update installed packages even when
the signature did not change.
FULLDISTDIR Complete path to directory where ${DISTFILES} and
${PATCHFILES} will be located, to be used in hand-crafted
extraction targets. Read-only.
FULLPKGNAME Full name of the created package, taking flavors into
account. Defaults to ${PKGNAME}${FLAVOR_EXT}. See also
EPOCH and REVISION.
FULLPKGPATH Path to the current port's directory, relative to
${PORTSDIR}, including flavors and subpackages.
GCC2_ARCHS, GCC3_ARCHS, GCC4_ARCHS
Set to the list of architectures using gcc 2.95.3, gcc
3.3.5, or gcc 4.2.1. Read-only. Use with NOT_FOR_ARCHS or
ONLY_FOR_ARCHS to limit ports to architectures where they
compile.
GMAKE Location of the GNU make binary, if needed. Defaults to
gmake.
HOMEPAGE Set to a link to the homepage of the software, if
applicable.
IGNORE Usually set to the reasons for which the port is ignored.
If non-empty, most common targets that do something (e.g.,
fetch, build, install ...) will be ignored. See also
BATCH, BROKEN, IGNORE_IS_FATAL, IGNORE_SILENT, INTERACTIVE,
IS_INTERACTIVE, NOT_FOR_ARCHS, NO_IGNORE, ONLY_FOR_ARCHS.
IGNORE_IS_FATAL
If set to `Yes', ignored ports will become fatal errors.
IGNORE_SILENT
If set to `Yes', do not print anything when ignoring a
port.
INSTALL_{PROGRAM,SCRIPT,DATA,MAN}[_DIR]
Macros to use to install a program, a script, data, or a
man page (or the corresponding directory), respectively.
INSTALL_TARGET
Target invoked to install the software, during fake
installation. Default is `install'.
INTERACTIVE User settings. Set to `Yes' to skip all non-interactive
ports. Used in conjunction with BATCH to simplify bulk-
package builds.
IS_INTERACTIVE
Set to `Yes' if port needs human interaction to build.
Usually implies NO_PACKAGE as well. Porters should strive
to minimize IS_INTERACTIVE ports, by using FLAVORS for
multiple choice ports, and by postponing human intervention
to package installation time.
LIB_DEPENDS Libraries this port depends upon. Each item has the form
`[pkgspec:]directory[,-subpackage][,flavor ...]'. Similar
to BUILD_DEPENDS and RUN_DEPENDS, but with specific rules:
LIB_DEPENDS always turn into BUILD_DEPENDS.
On architectures that use dynamic libraries, LIB_DEPENDS is
also used as a run-time dependency, and recorded in the
package as such, if any of the libraries mentioned in
WANTLIB is a shared library that originates within the
dependant port.
See library-specs(7) for more details.
LIBTOOL Location of the libtool binary for ports that set
USE_LIBTOOL (default: ${LOCALBASE}/bin/libtool).
LIBTOOL_FLAGS
Arguments to pass to libtool. If USE_LIBTOOL is set, the
environment variable LIBTOOL is set to ${LIBTOOL}
${LIBTOOL_FLAGS}.
LOCALBASE where other ports have already been installed (default:
/usr/local)
LOCKDIR User settings. Defaults to /tmp/portslocks. If set,
points to a directory common for all instances of
concurrent ports builds.
LOCK_CMD Expands to a command that will acquire a lock. See also
ports(7).
LOCK_VERBOSE User settings. Defaults to `'. Set to `Yes' to show every
acquire/release lock operation.
LP64_ARCHS Set to the list of 64-bit architectures. Read-only. Use
with NOT_FOR_ARCHS.
MAINTAINER E-mail address with full name of the port's maintainer.
Defaults to ports@openbsd.org.
MAKE_ENV Environment variables passed to make invocations. Sets at
least PATH, PREFIX, LOCALBASE, X11BASE, CFLAGS, TRUEPREFIX,
DESTDIR, and the BSD_INSTALL_* macros.
MAKE_FLAGS Flags used for all make invocations, except for the fake
stage, which adds FAKE_FLAGS (see ALL_FAKE_FLAGS) and for
the regress stage, which adds REGRESS_FLAGS (see
ALL_REGRESS_FLAGS).
MAKE_FILE Name of the Makefile used for ports building. Defaults to
Makefile. Used after changing directory to ${WRKBUILD}.
MAKE_PROGRAM The make program that is used for building the port. Set
to ${MAKE} or ${GMAKE} depending on USE_GMAKE. Read-only.
MAKESUMFILES List of all files that need to be retrieved by fetch-all,
with DIST_SUBDIR prepended and with master site selection
extension removed. Read-only. See also CHECKSUMFILES.
MASTER_SITES List of primary location from which distribution files and
patchfiles are retrieved. See the fetch target for more
details. See ports(7) for user configuration.
MASTER_SITES0, ..., MASTER_SITES9
Supplementary locations from which distribution files and
patchfiles are retrieved.
MESSAGE File recorded in the package and displayed during
installation. Defaults to ${PKGDIR}/MESSAGE if this file
exists. Leave empty if no message is needed.
MTREE_FILE mtree(8) specification to check when creating a PLIST with
the update-plist target. MTREE_FILE can hold a list of
file names, to which
${PORTSDIR}/infrastructure/db/fake.mtree is always
appended. These specifications are rooted at ${WRKINST},
and are subject to SUBST_VARS substitution, to ease
${PREFIX} independence. This feature is primarily intended
for large, interconnected ports, such as the kde suite,
where a base package sets up a large, extra directory
hierarchy that would make the manual checking of packing
lists tedious.
MODGNU_CONFIG_GUESS_DIRS
If a port uses config.guess outside WRKSRC, the directories
containing the other copies must be set here.
MODULES External modules mechanism, documented separately. See
port-modules(5).
MOTIFLIB Read-only. Correct incantation to link with motif.
MULTI_PACKAGES
Set to a list of package extensions for ports that create
multiple packages. See "Flavors and multi-packages" below.
Especially read the part about ONLY_FOR_ARCHS as some of
the packages only exist for some architectures.
NOT_FOR_ARCHS
List of architectures on which this port does not build.
See also ONLY_FOR_ARCHS. See also SHARED_ONLY. Do not use
instead of SHARED_ONLY without very good reasons.
NO_BUILD Port does not need any build stage.
NO_CHECKSUM Set to `Yes' to avoid checksum, makesum, and addsum actions
entirely. User settings. Beware of the full implications
of this mechanism, namely that it disables entirely the
basic authentication mechanisms of the ports tree.
NO_DEPENDS User settings. Don't verify build of dependencies. Do not
use in any ports Makefile. This is only meant as a user
convenience when, e.g., you just want to browse through a
given port's source and do not wish to trigger the build of
dependencies.
NO_IGNORE User settings. If set to `Yes', avoid ignoring a port for
the usual reasons. Use, for instance, for fetching all
distribution files, or for fixing a broken port. See also
IGNORE.
NO_REGRESS Port does not have any regression targets.
NO_SHARED_ARCHS
Set to the list of platforms that do not support shared
libraries. Use with NOT_FOR_ARCHS.
NO_SHARED_LIBS
Set to `Yes' if platform does not support shared libraries.
To be tested after including bsd.port.mk, if neither
PFRAG.shared nor CONFIGURE_SHARED are enough.
NO_SYSTRACE Port does not build with systrace enabled build targets.
ONLY_FOR_ARCHS
List of architectures on which this port builds. Can hold
both processor-specific information (e.g., m68k), and more
specific model information (e.g., hp300). This is
subpackage dependent. Read the corresponding part of
"Flavors and multi-packages" if some subpackages should
only be built on some architectures.
OSREV Revision number of OpenBSD. Read-only.
PACKAGE_REPOSITORY
User settings. Default location for built packages.
Defaults to ${PORTSDIR}/packages. See package for details.
PATCH Command to use to apply all patches. Defaults to
/usr/bin/patch.
PATCHORIG Suffix used by patch to rename original files, and
update-patches to re-generate ${PATCHDIR}/${PATCH_LIST} by
looking for files using this suffix. Defaults to .orig.
For a port that already contains .orig files in the
${DISTFILES}, set this to something else, such as
.pat.orig. See also distpatch, DISTORIG.
PATCH_CASES In the normal distpatch stage (when PATCHFILES is not
empty), this is the contents of a case statement, used to
apply distribution patches. Fragments are automatically
appended to handle gzip'ed and bzip'ed patches, so that the
default case is equivalent to the following shell fragment:
set -e
cd ${FULLDISTDIR}
for patchfile in ${_PATCHFILES}
do
case $$patchfile in
*.bz2)
bzip2 -dc $$patchfile | ${PATCH} ${PATCH_DIST_ARGS};;
*.Z|*.gz)
gzcat $$patchfile | ${PATCH} ${PATCH_DIST_ARGS};;
*)
${PATCH} ${PATCH_DIST_ARGS} <$$patchfile;;
esac
done
PATCHDIR Location for patches applied by patch target (default:
patches.${ARCH} or patches).
PATCHFILES Files to fetch from the master sites like DISTFILES, but
serving a different purpose, as they hold distribution
patches that will be applied at the patch stage. See also
SUPDISTFILES.
PATCH_ARGS Full list of options used while applying port's patches.
PATCH_CHECK_ONLY
Set to Yes by the checkpatch target. Don't touch unless
the default checkpatch target needs to be redefined.
Ideally, user-defined patch subtargets ought to test
checkpatch. In practice, they don't.
PATCH_DEBUG If set to `Yes', the patch stage will output extra debug
information.
PATCH_DIST_ARGS
Full list of options used while applying distribution
patches.
PATCH_DIST_STRIP
Patch option used to strip directory levels while applying
distribution patches. Defaults to -p0 .
PATCH_LIST Wildcard pattern of patches to select under ${PATCHDIR}
(default: patch-*). Note that filenames ending in .orig,
or ~ are never applied. Note that PATCH_LIST can hold
absolute pathnames, for instance to share patches among
similar ports:
PATCH_LIST=${PORTSDIR}/x11/kde/libs2/patches/p-* patch-*
PATCH_STRIP Patch option used to strip directory levels while applying
port's patches. Defaults to -p0 .
PERMIT_{DISTFILES,PACKAGE}_{CDROM,FTP}
Set to `Yes' if package or distribution files can be
allowed on FTP sites or CD-ROM without legal issues. Set
to reason not to otherwise. PERMIT_* lines in the Makefile
should be preceded with a comment explaining details about
licensing and patents issues the port may have. Porters
must be very thorough in their checks. In case of doubt,
ask.
PKG_ADD Path to pkg_add(1) command, with possible options.
PKG_ARCH Comma-separated list of architectures on which this package
may install. Defaults to ${MACHINE_ARCH},${ARCH}. Use *
to mean any arch.
PKG_CREATE Path to pkg_create(1) command, with possible options.
PKG_DBDIR Path to package installation records. Defaults to
/var/db/pkg. User settings.
PKG_DELETE Path to pkg_delete(1) command, with possible options.
PKG_INFO Path to pkg_info(1) command, with possible options.
PORTHOME Setting of env variable HOME for most shell invocations.
Default will trip ports that try to write into $HOME while
building.
PORTPATH Path used by most shell invocations. Don't override unless
really needed.
PORTSDIR Root of the ports tree (default: /usr/ports).
PORTSDIR_PATH
Path used by dependencies and bsd.port.subdir.mk to look up
package specifications. Defaults to
${PORTSDIR}:${PORTSDIR}/mystuff.
PKGDIR Location for packaging information (packing list, port
description, messages). Default: pkg.${ARCH} or pkg.
PKGNAME Name of the created package. Default is ${DISTNAME}. This
does not take flavors into account. See FULLPKGNAME for
that. Specific revisions and epoch changes should be
handled by REVISION and EPOCH instead.
PKGNAMES Read-only. List of all package names generated by the
port, with FLAVORS and MULTI_PACKAGES taken into account.
Mostly used as `make show=PKGNAMES' to verify that bumped
package names are correct.
PKGNAME-foo Package name for sub-package foo, if the default value of
${PKGNAME}${SUBPACKAGE} is not appropriate.
PKGPATH Path to the current port's directory, relative to
${PORTSDIR}. Read-only.
PKGSPEC default package spec for using this port as a dependency.
Defaults to `stem-*', derived from the FULLPKGNAME. Do not
override without very good reasons, namely software that
coexist as different incompatible versions with the same
stem, e.g., already a mess.
PLIST_DB User settings. Directory used to save generated packing-
lists, as persistent information. Packing-lists are
processed by a script, register-plist, which complains when
packing-lists change without a REVISION bump. This
directory is never cleaned during normal operation. `make
clean=plist' should only ever be used during debugging by
port maintainers. Defaults to
${PORTSDIR}/plist/${MACHINE_ARCH}.
PREFERRED_CIPHERS
List of cryptographic ciphers to use, in order of
preference. Default is `sha256 sha1 rmd160 md5'. The
first cipher that matches in ${CHECKSUM_FILE} is verified.
PREFIX Base directory for the current port installation. Usually
${LOCALBASE}, though some ports may elect a location under
/var, and some multi-package ports may install under
several locations.
PROGRESS_METER
User-settings. Defaults to `Yes'. Forces commands like
ftp(1), pkg_create(1)... to use their progress-meter even
in the absence of a terminal.
PSEUDO_FLAVORS
Extra list of flavors that do not register in package
names, but are still used to control build logic, and e.g.,
working directory names. Its main use is for disabling
part of a multi-packages build, for instance:
FLAVOR=no_gnome make package
Creation of a separate working directory is mandatory. If,
at a later time, a full build with all subpackages is
required, all the work will need to be done again.
RCDIR Location for daemon startup scripts. Defaults to
/etc/rc.d. Do not change.
REFETCH User settings. If set to true, checksum will analyze
${CHECKSUM_FILE}, and try retrieving files with the correct
checksum off ftp.openbsd.org, in the directory
/pub/OpenBSD/distfiles/$cipher/$value/$file.
REGRESS_DEPENDS
See BUILD_DEPENDS for specification. Regress dependencies
are only checked if the regress stage is invoked.
REGRESS_FLAGS
Extra flags passed to ${MAKE_PROGRAM} to run the regression
tests. Empty by default.
REGRESS_IS_INTERACTIVE
Set to `Yes' if port needs human interaction to run its
tests, or set to `X11' if the tests need an active X11
display to work.
REGRESS_LOG Command used to log the results of regression tests to
REGRESS_LOGFILE.
REGRESS_LOGFILE
Log file containing the results of regression tests.
REGRESS_TARGET
Target to run regression tests. Defaults to `regress',
except for `perl' and `gnu' CONFIGURE_STYLE, which default
to `test' and `check' respectively.
REORDER_DEPENDENCIES
Points to a list of files that specify inter-dependencies
for make(1). If defined, each line of the file is either a
comment (starting with #) or a pair of two files:
most_recent older. At the end of post-patch, touch(1) will
be used to ensure those files are put in the proper order.
The files are assumed to be under ${WRKSRC}. The notation
/file can be used to ask for a recursive search, e.g., to
make sure that all Makefile.in are up-to-date. See
${PORTSDIR}/infrastructure/mk/automake.dep for an example.
REPORT_PROBLEM
See ports(7).
REPORT_PROBLEM_LOGFILE
See ports(7).
REVISION Revision number of the current package. Defaults to empty
(very first package), then numbering starts at 0. Gets
automatically incorporated into FULLPKGNAME as
`p${REVISION}' to form a full package-name conforming to
packages-specs(7).
RUN_DEPENDS Specification of ports this port needs installed to be
functional. Same format as BUILD_DEPENDS. The
corresponding packages will be built at install stage, and
pkg_add(1) will take care of installing them.
SEPARATE_BUILD
Many GNU configure ports can be built in a directory
distinct from the place they were unpacked. For some
specific ports, this is even mandatory. Set to `simple' if
this is the case. The ports infrastructure will generate a
separate ${WRKBUILD} directory in which the port will be
configured and built. Wipe ${WRKBUILD} to start anew, but
skipping the extract/patch stage. Set to `flavored' if
distinct flavors of the port may share a common source
tree.
SHARED_LIBS List of shared libraries that the port may build, as a list
of the form `libname' `libversion'. Used to set variables
of the form LIBlibname_VERSION that are then used for
substitution by pkg_create(1). The porter is responsible
for making sure the port uses those version numbers when
shared libraries are built.
The intent is that the OpenBSD ports system must have
control over shared library versions because of global
changes that may require bumping the major version of every
shared library in the system, or simply because the third
party programmers do not understand the rules for shared
library versions, thus breaking the update mechanism. For
that reason it is advised to set libversion to 0.0 when
first importing a port.
Porters of software using libtool should also set
USE_LIBTOOL and make sure MAKE_FLAGS get propagated to the
libtool invocations. This should be enough, in most cases.
SHARED_ONLY Set to `Yes' if port can only be built on architectures
with shared libraries.
SKIPDIR See ports(7).
STARTAFTER See ports(7).
STARTDIR See ports(7).
SUBPACKAGE Set to the sub package suffix when building a package in a
multi-package port. Read-only. Used to test for
dependencies or to adjust the package name.
SUBST_CMD A command that can be used to perform SUBST_VARS
substitution on arbitrary files. In normal mode,
${SUBST_CMD} file1 file2 ...
will substitute files in place, creating backup copies of
them. In copy mode,
${SUBST_CMD} -c src1 dest1 src2 dest2
will copy files over while performing the substitution, as
suitable for copying template files over from ${FILESDIR}
to ${PREFIX}, for instance. Read-only.
SUBST_CMD can be used like install(1):
${SUBST_CMD} [-g group] [-o owner] file...
to set file owner, group and/or mode.
SUBST_VARS Make variables whose values get substituted to create the
actual package information. Always holds ARCH,
BASE_PKGPATH, FLAVOR_EXT, FULLPKGNAME, HOMEPAGE, LOCALBASE,
MACHINE_ARCH, MAINTAINER, PREFIX, RCDIR, SYSCONFDIR,
TRUEPREFIX, and X11BASE. The special construct
`${FLAVORS}' can be used in the packing-list to specify the
current list of dash separated flavors the port is compiled
with (useful for cross-dependencies in MULTI_PACKAGES).
Add other variables as needed. Some variable names are
prefixed by a ^. This is only relevant for update-plist,
where it means the variable will only be substituted at the
beginning of a path.
SUDO User settings. If set to sudo(8) in mk.conf(5), the ports
tree will only invoke root's privileges for the parts that
really require it.
SUPDISTFILES Supplementary files that need to be retrieved under some
specific circumstances. For instance, a port might need
architecture-specific files. SUPDISTFILES should hold a
list of all distribution files and patchfiles that are not
always needed, so that a mirror will be able to grab all
files, or that makesum will work. Having an overlap
between SUPDISTFILES and DISTFILES, PATCHFILES is
admissible, and in fact, expected, as it is much simpler to
build an error-free list of files to retrieve in that way.
See the xanim port for an example.
SYSCONFDIR Location for ports system configuration files. Defaults to
/etc, should never be set to /usr/local/etc.
SYSTRACE_FILTER
Location of the systrace filter file which is the basis for
a port's actual systrace policy file. Defaults to
${PORTSDIR}/infrastructure/db/systrace.filter.
SYSTRACE_SUBST_VARS
List of variables used in ${SYSTRACE_FILTER} that will be
substituted by their real value when creating the systrace
policy file. Always holds WRKOBJDIR, PORTSDIR, and
DISTDIR.
TAR Name of the tar binary.
TARGETS Read-only. Set to the list of special targets for a port
({pre,do,post}-*). Used by introspection tools such as the
sqlports package.
TEMPLATES Base location for the templates used in the readmes target.
User settings.
TRUST_PACKAGES
User settings. If set to `Yes', dependency mechanisms will
assume the database of installed packages is correct. See
also BULK.
TRY_BROKEN User settings. If set to `Yes', don't set IGNORE for
BROKEN ports, so that we will attempt to build them.
UNLOCK_CMD User settings. If set, expands to a command that will
release a lock. This lock will reside in ${LOCKDIR}.
UNMESSAGE File recorded in the package and displayed during
deinstallation. Defaults to ${PKGDIR}/UNMESSAGE if this
file exists. Leave empty if no message is needed.
UNZIP Name of the unzip binary.
UPDATE_COOKIES_DIR
User settings. Used to store cookies for package updates
and defaults to ${PORTSDIR}/update/${MACHINE_ARCH}. If set
to empty, will revert to a file under ${WRKDIR}.
USE_GMAKE Set to `Yes' if GNU make (${GMAKE}) is needed for correct
behavior of this port.
USE_GROFF Set to `Yes' to use groff to build manpages. This sets
groff as a build dependency, and also tells pkg_create(1)
to format manpages behind the scene using groff while
building packages.
USE_LIBTOOL Set to `Yes' if libtool is required for correct behavior of
this port. Adds correct dependencies, and passes LIBTOOL
environment variable to scripts invocations.
USE_MOTIF Set to `any' if port works with any version of motif;
`lesstif' if port requires lesstif to work; `openmotif' if
ports requires openmotif to work. The `any' setting
creates an extra flavor choice of `lesstif'. See also
MOTIFLIB
USE_SYSTRACE User settings. Set to `Yes' to protect port building with
systrace.
VMEM_WARNING Set to `Yes' if the port requires a lot of memory to
compile, and the user is likely to see a message like
"virtual memory exhausted" with the default process limits.
WANTLIB Extra list of library specifications that a package will
need. May include system and X11 libraries. See
library-specs(7) for more details.
As a special extension, WANTLIB may include absolute paths,
e.g., ${LOCALBASE}/lib/expat.=4 to distinguish between base
libraries and port libraries. Use with caution, this is
very seldom needed.
WARNINGS User settings. If set to `Yes', add CDIAGFLAGS to CFLAGS
and CXXDIAGFLAGS to CXXFLAGS.
WRKBUILD Subdirectory of ${WRKDIR} where the actual build occurs.
Defaults to ${WRKSRC}, unless SEPARATE_BUILD is involved,
in which case it is set to an appropriate value.
WRKCONF Subdirectory of ${WRKDIR} where the actual configure set
occurs. Defaults to ${WRKBUILD}.
WRKDIR Location where all port activity occurs. Apart from the
actual port, may hold all kinds of cookies that checkpoint
the port's build. Read-only. Ports that need to know the
WRKDIR of another port must use cd that_port_dir && make
show=WRKDIR for this. Note that WRKDIR may be a symbolic
link. During ports building, ${WRKDIR}/bin is put at the
front of the PATH.
WRKDIR_LINKNAME
Name of a symbolic link to create within the port directory
which will point to the port's ${WRKDIR}.
WRKDIST Subdirectory of ${WRKDIR} in which the distribution files
normally unpacks. Base for all patches (default:
${WRKDIR}/${DISTNAME}). Note that WRKDIST may be a
symbolic link, if set to ${WRKDIR}.
WRKSRC Subdirectory of ${WRKDIR} where the actual source is. Base
for configuration (default: ${WRKDIST}) Note that WRKSRC
may be a symbolic link, if set to ${WRKDIR}.
WRKINST Subdirectory of ${WRKDIR} where port normally installs (see
fake target).
WRKOBJDIR Used as a base for the actual port working directory
(default: ${PORTSDIR}/pobj). The real working directory
${WRKDIR} is created there. Can be set on a per-${PKGPATH}
basis. For instance, setting
WRKOBJDIR_www/mozilla=/tmp/obj will affect only the mozilla
port. If explicitly unset (WRKOBJDIR=), the working
directory is created within the port directory.
X11BASE Where X11 has been installed (default: /usr/X11R6).
XMKMF Invocation of xmkmf for CONFIGURE_STYLE=imake port.
Defaults to xmkmf -a -DPorts. The -DPorts is specific to
OpenBSD and is always appended.
YACC Name of yacc program to pass to GNU-configure, defaults to
yacc. (GNU-configure would always try to use bison
otherwise, which leads to unreproducible builds.) Set to
bison if needed.
FILES
../Makefile.inc
Common Makefile fragment for a set of ports, included
automatically.
/cdrom/distfiles
Default path to a CD-ROM (or other media) full of distribution
files.
Makefile.${ARCH}
Arch-dependent Makefile fragment, included automatically.
${DISTDIR}
cache of all distribution files.
distinfo Checksum file. Holds the output of cksum(1), using
${PREFERRED_CIPHERS}, for the port's ${DISTFILES} and
${PATCHFILES}, as well as the sizes of these files.
${DISTDIR}/${CHECKSUMFILES}
cache of normal distribution files for a given port.
${DISTDIR}/${MAKESUMFILES}
cache of all distribution files for a given port.
${PKGDIR}/DESCR
Description for the port. Variables such as ${HOMEPAGE} and
${MAINTAINER} will be expanded (see SUBST_VARS). Multi-
package ports will use DESCR${SUBPACKAGE}.
${PKGDIR}/README
OpenBSD specific documentation for a port, that will be
installed as ${LOCALBASE}/share/doc/pkg-readmes/${FULLPKGNAME}
at the end of fake. Variables from SUBST_VARS will be
expanded. Multi-package ports will use README${SUBPACKAGE}.
${PKGDIR}/<foo>.rc
startup script for <foo>. Will be installed as ${RCDIR}/<foo>
at the end of fake. Variables from SUBST_VARS will be
expanded.
${PORTSDIR}/infrastructure/db/fake.mtree
Specification used for populating ${WRKINST} at the start of
fake. Use pre-fake if this is incomplete.
${PORTSDIR}/packages/${MACHINE_ARCH}/cdrom
Default setup of ${PACKAGE_REPOSITORY}.
${PACKAGE_REPOSITORY}/no-arch
Location of arch-independent packages.
${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/all
Location of all built packages.
${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/cache
Location of packages retrieved through the network.
${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/cdrom
Location of packages suitable for the CD.
${PORTSDIR}/packages/${MACHINE_ARCH}/ftp
Location of packages suitable for FTP.
${PORTSDIR}/bulk/${MACHINE_ARCH}
Default setup of ${BULK_COOKIES_DIR}.
${PORTSDIR}/update/${MACHINE_ARCH}
Default setup of ${UPDATE_COOKIES_DIR}.
${PORTSDIR}/mystuff
Extra directory used to store local ports before committing
them. All depend targets will normally look there after the
normal lookup fails. See PORTSDIR_PATH.
systrace.filter
List of additional port specific filters, included
automatically.
systrace.policy
List of additional port specific policies, included
automatically.
OBSOLETE TARGETS
cdrom-packages, ftp-packages
Links are now created during the package target.
depends-list Renamed into full-build-depends
{pre,do}-extract
Don't override. Set EXTRACT_ONLY to nothing and override
post-extract instead.
fetch-all, fetch-list, mirror-distfiles
See mirroring-ports(7) for more efficient and flexible ways
to build mirrors.
obj Starting with OpenBSD 3.3, using WRKOBJDIR no longer
creates a symlink between the current directory and a
subdirectory of ${WRKOBJDIR}, so obj is no longer
applicable.
print-depends
Use print-build-depends and print-run-depends instead.
print-depends-list
Renamed into print-build-depends
print-package-depends
Renamed into print-run-depends
OBSOLETE VARIABLES
BIN_PACKAGES Old user settings. The infrastructure always trusts the
repository to contain correct packages. So, if the package
name did not change and if it exists in the repository, it
will not be rebuilt without manual user action.
CATn List of formatted manpages, per section.
CATPREFIX Location for storing formatted manpages. Derived directly
from PREFIX.
CDROM_PACKAGES
Old user settings. Base location where packages suitable
for a CD-ROM (see PERMIT_PACKAGE_CDROM) will be placed.
Now hardwired to
${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/cdrom.
COMMENT Used to be the name of the comment file for a package. It
now holds the comment itself. Some magic has been put in
to allow for a seamless transition.
DESCR_SRC From NetBSD. This is DESCR. OpenBSD does not give a
specific name to the generated file. It is not recommended
to try to access it directly.
EXTRACT_AFTER_ARGS
Was used to cobble together the normal extraction command,
as ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS}
${EXTRACT_AFTER_ARGS}. Use EXTRACT_CASES instead.
EXTRACT_BEFORE_ARGS
Likewise, use EXTRACT_CASES instead.
EXTRACT_CMD Likewise, use EXTRACT_CASES instead.
FETCH_BEFORE_ARGS, FETCH_AFTER_ARGS
Set FETCH_CMD to point to a script that does any required
special treatment instead.
FETCH_DEPENDS
Used to specify dependencies that were needed to fetch
files. It is much easier to mirror locally weird
distribution files.
FTP_PACKAGES User settings. Base location where packages suitable for
FTP (see PERMIT_PACKAGE_FTP) will be placed. Now hardwired
to ${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/ftp. (default:
${PKGREPOSITORYBASE}/ftp)
GNU_CONFIGURE
Use CONFIGURE_STYLE instead.
HAS_CONFIGURE
Use CONFIGURE_STYLE instead.
HAVE_MOTIF Old user settings. No longer needed since OpenMotif is now
free.
IGNOREFILES Set to the list of files that can't be checksummed. All
uses of it have led to postponing the correct action:
talking to the software author and getting him to provide
versioned archives.
MANn List of unformatted manpages, per section.
MANPREFIX Location for storing unformatted manpages. Derived
directly from PREFIX.
MASTERDIR From FreeBSD. Used to organize a collection of ports that
share most files. OpenBSD uses a single port with flavors
or multi-packages to produce package variations instead.
MASTER_SITE_SUBDIR
Contents were used to replace `%SUBDIR%' in all
MASTER_SITES variables. Since `%SUBDIR%' almost always
occur at the end of the directory, the simpler
${VARIABLE:=subdir/} construct is now used instead (taken
from NetBSD).
MD5_FILE Use CHECKSUM_FILE instead.
MIRROR_DISTFILE
Use PERMIT_DISTFILES_FTP and PERMIT_DISTFILES_CDROM to
determine which files can be mirrored instead. See
mirroring-ports(7).
NEED_VERSION Used to set a requirement on a specific revision of
bsd.port.mk needed by a port. No longer needed as
bsd.port.mk should always be kept up-to-date.
NO_CONFIGURE If ${CONFIGURE_SCRIPT} does not exist, no automatic
configuration will be done anyway.
NO_DESCRIBE All ports should generate a description.
NO_EXTRACT Set EXTRACT_ONLY= instead.
NO_INSTALL_MANPAGES
Use CONFIGURE_STYLE instead.
NO_MTREE Starting with OpenBSD 2.7, the operating system
installation script runs the /usr/local specification
globally, instead of embedding it in each package. So
packages no longer record an mtree(8) specification. Use
an explicit `@exec' command if needed.
NO_PACKAGE All ports should generate a package, preferably before
install.
NO_PATCH The absence of a patches directory does the same. Use
PATCHDIR and PATCH_LIST if patches need to be changed
dynamically.
NO_WRKDIR All ports should have a working directory, as this is
necessary to store cookies and keep state.
NO_WRKSUBDIR The same functionality is obtained by setting
WRKDIST=${WRKDIR} .
NOCLEANDEPENDS
Use CLEANDEPENDS instead.
NOMANCOMPRESS
FreeBSD ships with compressed man pages, and uses this
variable to control that behavior.
OBJMACHINE Starting with OpenBSD 3.3, setting WRKOBJDIR creates the
whole WRKDIR hierarchy under ${WRKOBJDIR}, so OBJMACHINE is
no longer useful.
OPSYS The operating system. This ports tree is only used on
OpenBSD.
OPSYS_VER Use OSREV instead.
PACKAGES Base location for packages built, renamed
PKGREPOSITORYBASE.
PACKAGING Used to be set during package creation, so that the port
would test it to tweak some settings at this point. All
its effects are now achieved through MULTI_PACKAGES.
PATCH_SITES PATCHFILES used to be retrieved from a separate site list.
For greater flexibility, all files are now retrieved from
MASTER_SITES, MASTER_SITES0, ..., MASTER_SITES9, using a
`:0' to `:9' extension to the file name, e.g.,
PATCHFILES=foo.diff.gz
PATCH_SITES=ftp://ftp.zoinx.org/pub/
becomes
PATCHFILES=foo.diff.gz:0
MASTER_SITES0=ftp://ftp.zoinx.org/pub/
PKG_CMD replaced by PKG_CREATE.
PKGREPOSITORY
Old user settings. See PACKAGE_REPOSITORY.
PKGREPOSITORYBASE
Old user settings. See PACKAGE_REPOSITORY.
PLIST_SRC From NetBSD. This is PLIST. OpenBSD does not give a
specific name to the generated file. It is not recommended
to try to access them directly.
PKGNAME Used to refer to the full package name, has been superseded
by FULLPKGNAME-foo, for SUBPACKAGE -foo . PKGNAME now
holds the package name, not taking multi-packages or
flavors into account. Most ports are not concerned by this
change.
PLIST_SUBST From NetBSD and FreeBSD. Use SUBST_VARS instead. OpenBSD
does not allow general substitutions of the form VAR=value,
but uses only a list of variables instead. Most package
files gets transformed, instead of only the packing list.
RESTRICTED Port has cryptographic issues. OpenBSD focuses on
PERMIT_PACKAGE_{FTP,CDROM} instead.
SED_PLIST Old pipeline for creating packing-lists at the ports level.
Necessary functionality has been integrated directly into
pkg_create(1).
SCRIPTDIR Old location for scripts related to the current port.
There is no reason for the semantic distinction, use
FILESDIR for those.
SCRIPTS_ENV Used to contain the environment for invoking various
scripts. CONFIGURE_ENV and MAKE_ENV are enough.
USE_AUTOCONF Use CONFIGURE_STYLE instead.
USE_BZIP2 The framework will automatically detect the presence of
.tar.bz2 files to extract. See also BZIP2, EXTRACT_CASES,
and EXTRACT_SUFX.
USE_IMAKE Use CONFIGURE_STYLE instead.
USE_X11 Presence of ${X11BASE} is now enforced by default for
building ports.
USE_ZIP The framework will automatically detect the presence of
.zip files to extract. See also ZIP, EXTRACT_CASES, and
EXTRACT_SUFX.
VARNAME Use make show=name instead of make show VARNAME=name.
WRKPKG Directory used to build package information from the
templates under ${PKGDIR}. This information is now built
on the fly by pkg_create(1).
OBSOLETE FILES
${FILESDIR}/md5
Renamed to distinfo to match other BSD, and save directories.
${SCRIPTDIR}/{pre,do,post}-*
Identical functionality can be obtained through a
{pre,do,post}-* target, invoking the script manually if
necessary.
${SCRIPTDIR}/configure
No longer invoked automatically. Just inline the instructions
in do-configure in the Makefile, or put the script in
${FILESDIR} and invoke it.
${PKGDIR}/COMMENT
Use COMMENT variable instead.
${PKGDIR}/DEINSTALL*
Use @unexec annotations in the packing-list instead.
${PKGDIR}/INSTALL*
Use @exec annotations in the packing-list instead.
${PKGDIR}/PLIST.noshared
Use PFRAG.shared or PFRAG.no-shared instead. PLIST.noshared
was too easy to forget when updating ports.
${PKGDIR}/PLIST.sed
Use PLIST directly. Until revision 1.295, bsd.port.mk did not
substitute variables in the packing list unless this special
form was used.
${PKGDIR}/REQ*
Old requirement script. Was mostly unused anyway.
/usr/share/mk/bsd.port.mk
Original location of bsd.port.mk. The current file lives
under ${PORTSDIR}/infrastructure/mk/bsd.port.mk, whereas
/usr/share/mk/bsd.port.mk is just a stub.
{scripts,files,patches}.${OPSYS}
The OpenBSD ports tree focuses on robustness, not on being
portable to other operating systems. In any case, portability
should not need to depend on operating system dependent
patches.
/usr/local/etc
Used by FreeBSD to marshall system configuration files. All
OpenBSD system configuration files are located in /etc, or in
a subdirectory of /etc.
THE FAKE FRAMEWORK
The fake target is used to install the port in a private directory first,
ready for packaging by the package target, so that the real installation
will use the package.
Essentially, fake invokes a real install process after tweaking a few
variables.
fake first creates a skeleton tree under ${WRKINST}, using the mtree(8)
specification ${PORTSDIR}/infrastructure/db/fake.mtree.
A pre-fake target may be used to complete that skeleton tree. For
instance, a few ports may need supplementary stuff to be present (as it
would be installed if the ports' dependencies were present).
If {pre,do,post}-install overrides are present, they are used with some
important changes: PREFIX is set to ${WRKINST}${PREFIX}, ${DESTDIRNAME}
is set to ${WRKINST}, and TRUEPREFIX is set to ${PREFIX}. Essentially,
old install targets work transparently, except for a need to change
PREFIX to TRUEPREFIX for symbolic links and similar path lookups.
Specific traditional post install work can be simply removed, as it will
be taken care of by the package itself (for instance, ldconfig, or
texinfo's install-info).
If no do-install override is present, the port is installed using
env -i ${MAKE_ENV}
PREFIX=${WRKINST}${PREFIX} ${DESTDIRNAME}=${WRKINST} TRUEPREFIX=${PREFIX}
${MAKE_PROGRAM} ${ALL_FAKE_FLAGS} -f ${MAKE_FILE} ${FAKE_TARGET}
Note that this does set both PREFIX and ${DESTDIRNAME}. If a port's
Makefile both heeds ${DESTDIRNAME}, and references PREFIX explicitly,
FAKE_FLAGS may rectify the problem by setting PREFIX=${PREFIX} (which
will do the right thing, since ${PREFIX} is a make(1) construct which
will not be seen by the shell).
${FAKE_FLAGS} is used to set variables on make(1) command line, which
will override the port Makefile contents. Thus, a port that mentions
DESTDIR= does not need any patch to work with fake.
Files such as ${PKGDIR}/README* or ${PKGDIR}/*.rc get copied to
${WRKINST} at the end of fake (see the FILES section above for details).
FLAVORS AND MULTI_PACKAGES
Starting with OpenBSD 2.7, each port can generate distinct packages
through two orthogonal mechanisms: FLAVORS and MULTI_PACKAGES.
The current MULTI_PACKAGES mechanism was introduced after OpenBSD 4.0.
If a port can be compiled with several options, these options should be
turned into FLAVORS. The port maintainer will set FLAVORS to be the list
of possible options in the Makefile. When building the port, the package
builder will set FLAVOR='option1 option2...' to build a specific flavor
of the port. The Makefile should test the value of FLAVOR as follows:
FLAVOR?=
.if ${FLAVOR:L:Moption1}
# what to do if option1
.endif
.if ${FLAVOR:L:Moption2}
# what to do if option2
.endif
bsd.port.mk takes care of a few details, such as generating a distinct
work directory for each flavor, or creating a FULLPKGNAME by adding a
dash separated list of flavors to the base package name. The order in
which FLAVOR is specified does not matter: this dash separated list will
be reordered to match the ordering of FLAVORS.
It is an error to specify an option in FLAVOR that does not appear in
FLAVORS, to prevent misspellings.
In recursive package building, flavors can be specified as a comma
separated list after the package directory, e.g., SUBDIR+=vim,no_x11.
Finally, package information will use templates with the canonical
package extension if they are available: if FLAVOR='option1 option2' and
both COMMENT and COMMENT-option1-option2 are available, COMMENT-option1-
option2 will be used.
If one build of a port can generate several distinct packages, set
MULTI_PACKAGES accordingly. Each extension of a MULTI_PACKAGES name
should start with a dash, so that they cannot be confused with FLAVORS.
In dependency checking and recursive builds, a subpackage can be
specified after a comma, e.g., SUBDIR+=quake,-server. MULTI_PACKAGES
only affects the actual package building step (and the describe step,
since a MULTI_PACKAGES port will produce several descriptions).
If MULTI_PACKAGES is set, the packaging stage happens once for every
subpackage, using subpackage-specific variables. For instance, if
MULTI_PACKAGES=-main -lib -server, PKG_ARCH-main, PKG_ARCH-lib and
PKG_ARCH-server will be used for the subpackages respectively called
FULLPKGNAME-main, FULLPKGNAME-lib and FULLPKGNAME-server.
All package information is also derived from templates with SUBPACKAGE
appended. In the preceding example, the packing-list template for
FULLPKGNAME-lib must be in PLIST-lib.
The following variables are subpackage dependent: COMMENT, PKG_ARCH,
PERMIT_PACKAGE_FTP, PERMIT_PACKAGE_CDROM, PKGNAME, FULLPKGNAME, REVISION,
EPOCH, FULLPKGPATH, RUN_DEPENDS, WANTLIB, LIB_DEPENDS, ONLY_FOR_ARCHS,
NOT_FOR_ARCHS, PREFIX, CATEGORIES, MESSAGE, UNMESSAGE, DESCR, PLIST,
PKGSPEC.
The usual non-MULTI_PACKAGES variables are simply used as default values
for all subpackages. So, if you set PKG_ARCH=* PKG_ARCH-main=i386 then
PKG_ARCH-lib and PKG_ARCH-server will both be `*'.
WANTLIB and LIB_DEPENDS are special. At the beginning of build, all
build dependencies will be checked, which includes both LIB_DEPENDS,
WANTLIB and the subpackage-specific version of these. As an exception,
any LIB_DEPENDS-sub that references the current port will be ignored as a
build dependency, in order to avoid recursion.
FULLPKGPATH and FULLPKGNAME are special as well. You must set
PKGNAME-sub or FULLPKGNAME-sub for each subpackage, and FULLPKGPATH-sub
is set automatically to the right value. In very rare cases, one can
override FULLPKGPATH-sub (for instance, if one specific subpackage is not
affected by option settings that affect other subpackages, e.g., for
include files packs).
In terms of implementation, quite a few targets will have a subpackage
specific subtarget: invoking package is the same as invoking subpackage
for all subpackages, invoking install-all is the same as invoking install
for all subpackages, and invoking update is the same as invoking
subupdate for all subpackages.
ONLY_FOR_ARCHS and NOT_FOR_ARCHS interact with MULTI_PACKAGES. The
infrastructure will automatically filter subpackages that are not
suitable for the current architecture. Thus, MULTI_PACKAGES should
always list all subpackages, even things not buildable on the current
architecture, for indexing purposes. Note that dpb(1) will break if all
subpackages are not properly listed.
THE GENERATION OF PACKAGE INFORMATION
Starting after OpenBSD 4.1 all package information is processed directly
by pkg_create(1) from templates in ${PKG_DIR}.
o If not overridden by the user, determine which set of templates to
use, depending on the current SUBPACKAGE and FLAVOR information. Set
${PLIST${SUBPACKAGE}}, ${DESCR${SUBPACKAGE}},
${COMMENT${SUBPACKAGE}}, ${MESSAGE${SUBPACKAGE}},
${UNMESSAGE${SUBPACKAGE}} accordingly.
o Detect the existence of
${PKGDIR}/{REQ,INSTALL,DEINSTALL}${SUBPACKAGE}. These are now
deprecated. Use @exec and @unexec annotations instead.
o Generate the actual DESCR, and if needed, MESSAGE, UNMESSAGE, from
the templates in ${DESCR}, ${MESSAGE}, ${UNMESSAGE}, by substituting
the variables in ${SUBST_VARS}, and by substituting ${FLAVORS} with
the canonical flavor extension for this port, e.g., if FLAVORS=no_map
gfx qt2, if FLAVOR=gfx no_map, this is `-no_map-gfx'.
o Generate the actual PLIST from the template ${PLIST}, by inserting
shared/no-shared fragments, merging other fragments, and applying the
same variable substitutions as other package information.
Note that ${COMMENT} is currently not substituted, to speed up describe
generation.
To avoid substitution, variables can be escaped as follows: $\{PREFIX}
Constructs such as the line %%SHARED%% or !%%SHARED%% in the packing-list
template trigger the inclusion of the ${PKGDIR}/PFRAG.shared${SUBPACKAGE}
or ${PKGDIR}/PFRAG.no-shared${SUBPACKAGE}.
Similarly, if FLAVORS lists flav1, then the line %%flav1%% (resp.
!%%flav1%%) will trigger the inclusion of
${PKGDIR}/PFRAG.flav1${SUBPACKAGE} (resp.
${PKGDIR}/PFRAG.no-flav1${SUBPACKAGE}) in the packing-list. Other
fragments can be defined by simply adding -Dfrag=1 or -Dfrag=0 to
PKG_ARGS
pkg_add(1) now calls ldconfig(8) directly, provided dynamic libraries
have been annotated with @lib libthingy.so.5.0. Adding new directories
to the dynamic loader cache has been deprecated. It is often better to
let libraries be visible as a link under ${LOCALBASE}. Having a separate
directory is enough to trick ld(1) into grabbing the right version.
Libraries used only for dlopen(3) do not need to be visible. Some
programs will prefer to use rpath to find their own libraries.
The special update-plist target does a fairly good job of automatically
generating PLIST and PFRAG.shared fragments.
If PLIST_DB points to a directory, all packing-lists from packages
generated by pkg_create(1) during the package stage are saved in that
location by a script: ${PORTSDIR}/infrastructure/bin/register-plist.
This script strips some irrelevant information and normalizes the
packing-list somehow, and compares it to existing information, looking
for relevant changes. Since a package name must always be changed when
the packing-list changes, any attempt to replace a packing-list of a
given name with a different packing-list will be flagged as an error.
In MULTI_PACKAGES mode, there must be separate COMMENT, DESCR, and PLIST
templates for each SUBPACKAGE (and optional distinct MESSAGE, UNMESSAGE
files in a similar way). This contrasts with the FLAVORS situation,
where all these files will automatically default to the non-flavor
version if there is no flavor-specific file around.
SEE ALSOftp(1), pkg_add(1), pkg_create(1), OpenBSD::Intro(3p), port-modules(5),
library-specs(7), mirroring-ports(7), packages-specs(7), ports(7)HISTORY
The ports mechanism originally came from FreeBSD. A lot of additions
were taken from NetBSD over the seminal years.
Since 1998, the framework has been systematically cleaned-up and
reorganized to remove bugs. New features have been carefully introduced,
trying hard to avoid inconsistencies.
FLAVORS, MULTI_PACKAGES and FAKE are OpenBSD improvements. Most recent
additions do not come from another BSD.
BUGS AND LIMITATIONS
LOCALBASE, X11BASE, SYSCONFDIR and PREFIX are not heeded consistently.
Most of the ports tree will probably fall apart if one tries to build/use
stuff elsewhere.
OpenBSD 4.9 December 11, 2010 OpenBSD 4.9