BSD.PORT.MK(5) | File Formats Manual | BSD.PORT.MK(5) |
bsd.port.mk
—
ports tree master Makefile fragment
.include <bsd.port.mk>
bsd.port.mk
contains the
ports(7) tree
make(1) framework, in the form
of documented public targets, variables and paths.
Identifiers beginning with an underscore are internal-use only and likely to change without notice.
This documentation contains sections covering targets, variables, diagnostics, and filenames, ordered in alphabetic order, followed by a section covering the fake framework, a section explaining flavors and multi-packages, and a section covering the generation of package information.
It ends with sections covering obsolete targets, variables and files, outlining conversion methods from older incarnations of the ports tree or from other BSD variants.
bsd.port.mk
also uses quite a few helper
scripts which live under
${PORTSDIR}/infrastructure/bin.
Binary package details are mostly covered in pkg_create(1) for the packing-list details, and in pkg_add(1) for the installation semantics.
Common usage such as building every package in the system is covered by ports(7) and bulk(8) instead, with packages(7) providing an overview of the result.
{build,run,all,test}-dir-depends
full-{build,run,all,test}-depends
{build,lib,test,run}-depends-list
print-{build,run}-depends
full-{build,run}-depends
in a more readable
way.{pre,do,post}-*
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
,
gen
, install
,
patch
, test
. See
individual targets for exceptions.all-lib-depends-args
LIB_DEPENDS
list into a form
suitable for
pkg_create(1), see
print-package-args
.build
,
all
env -i ${MAKE_ENV} ${MAKE_PROGRAM} ${MAKE_FLAGS} \ -f ${MAKE_FILE} ${ALL_TARGET}
check-register
PLIST_REPOSITORY
).check-register-all
check-register
to all subpackages of the
current port.checkpatch
checksum
checksum
with
REFETCH
=true
will fetch
alternative versions of files keyed on their checksum from the
OpenBSD main archive site.clean
WRKBUILD
directory (only useful if
SEPARATE_BUILD
is set).clean-depends
make
clean=depends
’.configure
configure
creates
the ${WRKBUILD} directory (see SEPARATE_BUILD
),
and runs whatever configuration methods are recorded in
CONFIGURE_STYLE
.distclean
make
clean=dist
’.distpatch
patch
,
PATCH_CASES
and
FIX_CRLF_FILES
for details.dump-vars
extract
EXTRACT_ONLY
,
FIX_EXTRACT_PERMISSIONS
and
NO_DEPENDS
). Refer to
EXTRACT_CASES
for a complete description. Do not
use pre-extract
and
do-extract
hooks.fake
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. See THE FAKE FRAMEWORK
section below.fake-wantlib-args
WANTLIB
against the list of installed
packages and libraries in the ports tree. See
print-package-args
.fetch
DISTFILES
and
PATCHFILES
using ${FETCH_CMD}. Files are normally
retrieved from the list of sites in MASTER_SITES
.
Appending ‘:0’ to ‘:9’ to an entry
will let ${FETCH_CMD} retrieve from
MASTER_SITES0
to
MASTER_SITES9
instead. If the rest of the entry
parses as
‘filename{url}sufx’
${FETCH_CMD} will fetch
urlsufx instead, but store
the result as
filenamesufx.
Transfers in progress are stored as filenamesufx.part and moved after completion.
The ports framework uses ${DISTDIR}/${DIST_SUBDIR} (aliased to ${FULLDISTDIR}) to save the ports distribution files and patch files.
If you want to fetch a significant number of distfiles
quickly, say all files relevant to a port, dpb
-F
is more efficient.
Use of {pre,do,post}-fetch
hooks is
forbidden, as this would make mirroring of distfiles very
complicated.
See CHECKSUMFILES
,
DISTDIR
, DISTFILES
,
DIST_SUBDIR
, FETCH_CMD
,
FETCH_MANUALLY
,
FETCH_SYMLINK_DISTFILES
,
FULLDISTDIR
,
MAKESUMFILES
,
MASTER_SITES
,
MASTER_SITES0
, ...
,
MASTER_SITES9
,
PATCHFILES
,
SUPDISTFILES
,
REFETCH
.
fetch-all
fetch
, but also fetches
SUPDISTFILES
, for use with e.g.,
makesum
.fix-permissions
PORTS_PRIVSEP
and/or
dpb(1).
If necessary, creates directory
DISTDIR
owned by
FETCH_USER
, and creates directories
LOCKDIR
,
PACKAGES_REPOSITORY
,
PLIST_REPOSITORY
and
WRKOBJDIR
owned by
BUILD_USER
.
If these directories already exist, ownership of their
contents is modified to conform to PORTS_PRIVSEP
and dpb(1) requirements.
gen
MODxxx_gen
) and a do-gen
hooks. Then adjust timestamps to avoid regeneration during build (see
REORDER_DEPENDENCIES
).generate-readmes
fake
and before package
or
update-plist
. Always rerun, as it is cheap
enough.index
install-depends
RUN_DEPENDS
,
LIB_DEPENDS
, and
WANTLIB
.install
{pre,do,post}-install
hooks are actually used by
the ports tree.install-all
lib-depends-args
LIB_DEPENDS
to keep only entries required
by WANTLIB
, and output a list of dependencies
suitable for
pkg_create(1), see
print-package-args
.lib-depends-check
LIB_DEPENDS
and
WANTLIB
are accurate for the port. See
port-lib-depends-check
, which is quicker.license-check
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.lock
unlock
. Seldom used, see
ports(7) for details.makesum
fetch
.no-lib-depends-args
lib-depends-args
that does not
do anything. See print-package-args
.no-wantlib-args
wantlib-args
that does not do
anything. See print-package-args
.package
MULTI_PACKAGES
case) 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_REPOSITORY 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}
is set to ‘Yes’, copies built packages into
${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/ftp, using hard links if
possible.patch
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
.peek-ftp
MASTER_SITES
, in the
right directory, and leaves user at
ftp(1)'s prompt.pkglocatedb
port-lib-depends-check
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.port-wantlib-args
WANTLIB
against the ports tree itself and
system libraries, without looking at built or installed packages, and
writes a list of options suitable for
pkg_create(1). See
print-package-args
.prepare
BUILD_DEPENDS
, LIB_DEPENDS
and WANTLIB
. In
MULTI_PACKAGES
setups, see
FLAVORS AND
MULTI_PACKAGES.print-package-args
-W
wantlib and
-P
depends lines.
Those parameters are generated by
run-depends-args
for
RUN_DEPENDENCIES
handling, a form of
lib-depends-args
for
LIB_DEPENDS
and WANTLIB
interaction, and a form of wantlib-args
for
WANTLIB
resolution.
Variables lib_depends_args
and
wantlib_args
control the exact behavior:
lib_depends_args
is normally set to
lib-depends-args
, but will be set to
all-lib-depends-args
by
port-lib-depends-check
, in order to have access
to the full list of LIB_DEPENDS for figuring out missing WANTLIB.
wantlib_args
is normally set to
wantlib-args
but it may be set to
port-wantlib-args
for introspection purposes, to
fake-wantlib-args
to avoid some checks, or to
no-wantlib-args
to avoid expensive WANTLIB
checks entirely.
print-update-signature
-S
.print-plist
print-plist-all
print-plist
for all subpackages in a
given port.print-plist-all-with-depends
print-plist-with-depends
for all
subpackages in a given port.print-plist-contents
print-plist
, the
package contents only consists of files, all tagged with category markers
such as @file. See
pkg_create(1).print-plist-libs
print-plist-libs-with-depends
print-plist-libs
, but slower. It also handles
LIB_DEPENDS
, RUN_DEPENDS
,
and WANTLIB
, so that the packing-list has complete
dependency information.print-plist-with-depends
print-plist
, but slower. It also handles
LIB_DEPENDS
, RUN_DEPENDS
,
and WANTLIB
, so that the packing-list is
complete.rebuild
regen
reinstall
update
will often do the right
thing.repackage
run-depends-args
RUN_DEPENDS
and outputs a list of
dependencies suitable for
pkg_create(1), see
print-package-args
.reprepare
retest
show
show-debug-info
show-fake-size
BULK_TARGETS
.show-indexed
show
. Invoked as make
show-indexed=name, show the contents of ${name${SUBPACKAGE}}, or ${name}
if the variable name
is not
SUBPACKAGE
dependent.show-prepare-results
prepare
.show-prepare-test-results
prepare
and
test-depends
.show-required-by
show-run-depends
subpackage
package
, but
affects only one single subpackage in multi-packages ports.show-size
BULK_TARGETS
.subupdate
update
, but affects only one single subpackage in
multi-packages ports.test
env -i ${ALL_TEST_ENV} ${MAKE_PROGRAM} ${ALL_TEST_FLAGS} \ -f ${MAKE_FILE} ${TEST_TARGET} ${TEST_LOG}
If a port needs some other ports installed to run regression
tests, use TEST_DEPENDS
. If a port needs special
configuration or build options to enable regression testing, define a
‘test’ FLAVOR
.
test-depends
TEST_DEPENDS
.unlock
lock
.update-patches
EDIT_PATCHES
.update
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_COOKIES_DIR
and
FORCE_UPDATE
as well.update-or-install-all
UPDATE_COOKIES_DIR
and
FORCE_UPDATE
as well.update-plist
update-plist
should
produce a mostly correct PLIST file, handling GNU
info(1) files, setuid files,
and empty directories. It moves an existing file to
PLIST.orig. If the generated list includes files
and directories that shouldn't be included, comment these like this:
@comment unwanted-file @comment unwanted-dir/
Subsequent calls to update-plist
will
automatically recognize and handle such lines correctly.
update-plist
may not handle flavor and
multi-packages situations correctly yet, so beware.
verbose-show
show
, except that it prefixes each
value with the variable name, e.g., VAR=value
.
Also note that it does not show undefined variables, contrary to
show
which outputs blank lines for these.wantlib-args
port-wantlib-args
and
fake-wantlib-args
and compare the results, errors
out in case of discrepancies. See
print-package-args
.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
ALL_FAKE_FLAGS
${MAKE_FLAGS} ${DESTDIRNAME}=${WRKINST}
${FAKE_FLAGS}
. Read-only.ALL_TEST_ENV
${MAKE_ENV}
${TEST_ENV}
. Read-only.ALL_TEST_FLAGS
${MAKE_FLAGS} ${TEST_FLAGS}
. Read-only.ALL_TARGET
APM_ARCHS
ONLY_FOR_ARCHS
.ARCH
AUTOCONF
AUTOCONF_DIR
AUTOCONF_ENV
CONFIGURE_STYLE
is gnu or
higher.AUTOCONF_VERSION
AUTOCONF_VERSION
along with CONFIGURE_STYLE
set to autoconf is the
correct way to specify which one to use.
AUTOCONF_VERSION
defaults to 2.13. If autoconf
must be run manually, MODGNU_AUTOCONF_DEPENDS
can
be used to specify what packages to depend upon.AUTOHEADER
AUTOMAKE_VERSION
AUTOMAKE_VERSION
must be set before trying to run
automake. Defaults to 1.4.AUTORECONF
BASE_PKGPATH
BUILD_PKGPATH
, which also includes pseudo-flavors.
Read-only.BASELOCALSTATEDIR
LOCALSTATEDIR
.BASESYSCONFDIR
SYSCONFDIR
.BATCH
INTERACTIVE
to simplify bulk-package builds. (See
IGNORE).BE_ARCHS
NOT_FOR_ARCHS
and
ONLY_FOR_ARCHS
.BUILD_DEPENDS
PKGSPEC
). If no installation is involved, the
infrastructure will still check that the directory would provide a package
conforming to the ‘pkgspec’. ‘pkgpath’ is set
relative to ${PORTSDIR}, see
pkgpath(7) for details.
Build dependencies are checked before the extract
stage during prepare
.
Build dependencies with a patch
,
configure
or build
target will be processed in a subdirectory of the working directory,
specifically, in ${WRKDIR}/some/directory, with
some/directory the directory part of the
‘pkgpath’.
BUILD_ONCE
When BUILD_ONCE
is set to
‘Yes’, all PSEUDO_FLAVORS
matching
‘no_*’ will be disabled, unless the special pseudo-flavor
‘bootstrap’ is also set.
This is a bulk build optimisation, automatically set by dpb(1): to avoid rebuilding the same package several times, a full bulk build will strip most ports of pseudo-packages variations that remove subpackages.
For instance, an individual package may depend on databases/db/v4,no_java,no_tcl, to avoid bringing a jdk in during a quick build. Nevertheless, during a full bulk build, databases/db/v4 will only be built once, as the pseudo-flavor will be automatically removed.
However, the extra ‘bootstrap’ rule is needed to
take build cycles into account. For instance, the
x11/gnome/gvfs,-goa subpackage depends on
gnome-online-accounts, which in turn requires
x11/gnome/gvfs,-main to build (through its
dependencies). So x11/gnome/gvfs has
PSEUDO_FLAVORS = no_smb no_goa bootstrap
and the
GNOME build first builds
x11/gnome/gvfs,no_smb,no_goa,bootstrap,-main
which is later used to rebuild
x11/gnome/gvfs.
BUILD_PKGPATH
BASE_PKGPATH
, which doesn't include
pseudo-flavors. 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. See
pkgpath(7) on the subject
of ‘pkgpath normalisation’. Read-only.BUILD_PACKAGES
BROKEN
NO_IGNORE
,
TRY_BROKEN
.BUILD_USER
PORTS_PRIVSEP
,
defaults to ‘_pbuild’.BROKEN-<arch>
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]
BULK
BULK_COOKIES_DIR
.
Defaults to ‘Auto’.BULK_COOKIES_DIR
BULK_DO
BULK_FLAGS
BULK_TARGETS
.BULK_TARGETS
BZIP2
CATEGORIES
link-categories
,
unlink-categories
.CCACHE_DIR
USE_CCACHE
is
set to yes. Defaults to ${WRKOBJDIR}/.ccache.CCACHE_ENV
USE_CCACHE
is set to yes. For instance, to enable
verbose logging, set
CCACHE_ENV="CCACHE_LOGFILE=/tmp/ccache.log"CDIAGFLAGS
CFLAGS
if
WARNINGS
is set.CFLAGS
COPTS
,
CDIAGFLAGS
.CHECK_LIB_DEPENDS
make
lib-depends-check
’ after each package build. Defaults to
‘No’, as this can be a big performance hit.CHECKSUMFILES
fetch
, with DIST_SUBDIR
prepended and with the master site selection extension removed. Read-only.
See also MAKESUMFILES
.CHECKSUM_FILE
checksum
, and makesum
.
Defaults to distinfo.CHECKSUM_PACKAGES
PERMIT_PACKAGE
packages. Defaults to
‘no’, which does not compute a checksum at all.CHOSEN_COMPILER
COMPILER
mechanism. Set to ‘irrelevant’ to disable
COMPILER
.CLEANDEPENDS
clean
target
will also clean dependencies. Can be overridden on a per-${PKGPATH} basis,
by setting CLEANDEPENDS_${PKGPATH}.COMMENT
COMMENT-foo
COMMENT-vanilla
COMMENT-foo-vanilla
COMES_WITH
COMPILER
MODGCC4_ARCHS
from the module)MODCLANG_ARCHS
from the module)The first compiler that matches criteria will be chosen. On clang-based architectures, even though gcc is still compiled in base, ‘base-gcc’ never matches.
Defaults to base compilers, e.g., ‘base-clang base-gcc gcc3’.
Common reasons for explicitly setting
COMPILER
will most often be C++11 support,
thread-local-storage support (emulated), atomic operations on some
arches, sometimes assembler support, ABI compatibility with
dependent/depending ports, or plain old internal compiler errors.
With COMPILER
in effect,
MODGCC4_ARCHS
and
MODCLANG_ARCHS
default to
‘${GCC49_ARCHS}’ and ‘${LLVM_ARCHS}’
respectively.
ONLY_FOR_ARCHS
will also be set if
applicable.
COMPILER_LANGS
COMPILER_LANGS
will be added to the
respective module's supported langs. Defaults to ‘c c++’.
Only ‘c’ and ‘c++’ are supported by this
mechanism. ‘fortran’ or ‘java’ still need old
modules annotations, so that it's possible to select, e.g.,
‘gfortran’ from gcc 8 while having clang from base. See also
CHOSEN_COMPILER
.COMPILER_LINKS
bsd.port.mk
and compiler
MODULES
to build scripts in
${WRKDIR}/bin to force setting compiler flags
(-B
is required for clang to find
${WRKDIR}/bin/ld as used by
USE_WXNEEDED
) and call
COMPILER_WRAPPER
if used.COMPILER_WRAPPER
USE_CCACHE
or can be set
explicitly for other purposes (e.g. distcc).CONFIG_SITE_LIST
CONFIGURE_STYLE=gnu
, or with
MODULES += gnu
. List of
config.site fragments that will speed up
gnu-configure, and prevent it from preferring various gnu programs, unless
BUILD_DEPENDS
explicitly ask for them. Read-only,
available for debugging purposes.CLANG_ARCHS,
GCC3_ARCHS
, GCC4_ARCHS
NOT_FOR_ARCHS
or
ONLY_FOR_ARCHS
to limit ports to architectures
where they compile.CONFIGURE_ARGS
CONFIGURE_ENV
CONFIGURE_SCRIPT
configure
target, if appropriate. Should be either an absolute path, or relative to
${WRKSRC}.CONFIGURE_STYLE
If ‘perl’, assume perl(1)'s ExtUtils::MakeMaker(3p) style. Add ‘modbuild’ to enable Module::Build(3p), ‘modbuild tiny’ to enable Module::Build::Tiny(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.
Alternatively, add ‘autoreconf’ to rerun autoconf,
automake, and related tools to completely regenerate the GNU build
framework.
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
CXXDIAGFLAGS
CXXFLAGS
if
WARNINGS
is set.CXXFLAGS
CXXOPTS
DEBUG_CONFIGURE_ARGS
DEBUG_PACKAGES
DEBUG_PACKAGES=${BUILD_PACKAGES}
for packages
where debug information is desirable. Note the subpackages with
PKG_ARCH=*
will automatically be stripped from
that list. See THE
DEBUG_PACKAGES INFRASTRUCTURE below for details.DEBUGINFO_ARCHS
DESTDIR
DESTDIRNAME
.DESTDIRNAME
DISTDIR
FULLDISTDIR
to refer to ports' distribution files
location, as it takes an eventual DIST_SUBDIR
into
account.DISTFILES
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
.
Each entry may optionally be of the form ‘filename{url}sufx’ to deal with sites that only offer archives as weird urls, doing the transfer of urlsufx into result file filenamesufx. For instance, if
DISTFILES = minetest-{minetest/archive/}${V}${EXTRACT_SUFX}
then fetch
will retrieve from url
‘minetest/archive/${V}${EXTRACT_SUFX}’ into
‘minetest-${V}${EXTRACT_SUFX}’.
If ${DISTFILES} varies depending on
FLAVORS
or architecture, use
SUPDISTFILES
to ensure distfiles mirroring and
makesum
proper operation.
DISTNAME
DISTFILES
and
PKGNAME
.DISTORIG
distpatch
to rename original files.
Defaults to .bak.orig. Distinct from
.orig to avoid confusing
update-patches
.DIST_SUBDIR
fetch
.DPB
dump-vars
.DPB_LOCKNAME
PKGPATH
-derived name. This
feature comes with large restrictions and shouldn't be used unless
absolutely necessary. Specifically, it can allow
dpb
to build several flavors of the same port at
the same time, but beware: under MULTI_PACKAGES
and PSEUDO_FLAVORS
conditions, if some of these
packages are identical across flavors, this will not work. This also makes
it harder to interact with locks if the names are not obvious.DPB_PROPERTIES
DUMMY_PACKAGE
bsd.port.mk
will provide dummy values
for variables mandatory for a minimally functional port. Used by various
pieces of the ports tree to perform introspection and get to
bsd.port.mk
's variables.ECHO_MSG
ECHO_REORDER
REORDER_DEPENDENCIES
actions. Silent by
default.EDIT_PATCHES
update-patches
will not open changed files in an
editor.EPOCH
FULLPKGNAME
as
‘v${EPOCH}’ to form a full package-name conforming to
packages-specs(7).ERRORS
.if !defined(COMMENT) ERRORS+="Fatal: Missing comment" .endif
ERRORS
, for instance to flag
erroneous combinations of FLAVORS
(but see
ONLY_FOR_ARCHS
NOT_FOR_ARCHS
and BROKEN
for other common issues).EXTRACT_CASES
EXTRACT_ONLY
is not empty), this is the contents of a
sh(1)
case
conditional, used to extract files. Fragments are automatically
appended to extract the following archives and add the relevant
compression tool to BUILD_DEPENDS
:
Other cases not supported directly in
bsd.port.mk
can be added, and existing cases can
be overridden. For example the following example sets extra conversion
flags to unzip, and adds support for rar:
*.zip) ${UNZIP} -Laq ${FULLDISTDIR}/$$archive -d ${WRKDIR};; \ *.rar) ${LOCALBASE}/bin/unrar x -idq ${DISTDIR}/$$archive;;
EXTRACT_ONLY
do-extract
stage.
Defaults to all distfiles, can even be set to empty.EXTRACT_SUFX
BUILD_DEPENDS
. Default value is .tar.gz.EXTRACT_FILES
EXTRACT_CASES
and passed as file
... argument to tar(1)
or unzip(1), e.g.,
glob(7) patterns and shell
brace expansion may be used. Empty by default to extract all files.FAKE_FLAGS
ALL_FAKE_FLAGS
.FAKE_SETUP
do-install
.
Read-only, see THE FAKE
FRAMEWORK section for details.FAKE_TARGET
FAKEOBJDIR
FETCH_CMD
FETCH_CMD
should support a few ftp options, chief
among them being -C
and -o
dest, but also -m
,
-S
, -v
,
-V
. Most of these can be no-ops in a FETCH_CMD
script, See
${PORTSDIR}/infrastructure/template/fetch_cmd.template
for a skeleton script.FETCH_MANUALLY
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."
IS_INTERACTIVE
if some distribution
files are missing.FETCH_PACKAGES
package
target to download packages
missing from the repository from locations in ${PKG_PATH} and place them
into ${PACKAGE_REPOSITORY}/${MACHINE_ARCH}/cache/,
only building them if no suitable packages are found. For instance,
make FETCH_PACKAGES=
to use without any options, or
make FETCH_PACKAGES=-Dsnap
to use close to release.
FILESDIR
FETCH_USER
PORTS_PRIVSEP
, defaults to
‘_pfetch’.FIX_CLEANUP_PERMISSIONS
clean
. Used for build systems which set
paranoid permissions at build time. Defaults to ‘No’.FIX_CRLF_FILES
distpatch
. Sometimes a port will include files
with MS-DOS line endings (CR LF). To avoid problems with patches
(especially when sent by email) these should be converted to LF.
bsd.port.mk
changes to WRKDIST before converting
files - shell wildcards may be used.FIX_EXTRACT_PERMISSIONS
extract
. Used for some distfile contents which
have paranoid permissions for no reason. Defaults to
‘No’.FLAVOR
FLAVORS
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
FULLPKGNAME
.FORCE_UPDATE
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
FULLPKGNAME
EPOCH
and
REVISION
.FULLPKGPATH
GH_*
MASTER_SITES_GITHUB
and DISTNAME
.GH_ACCOUNT
GH_COMMIT
GH_PROJECT
GH_TAGNAME
GMAKE
HOMEPAGE
IGNORE
fetch
, build
,
install
...) will be
ignored. See also BATCH
,
BROKEN
, FETCH_MANUALLY
,
IGNORE_IS_FATAL
,
IGNORE_SILENT
,
INTERACTIVE
,
IS_INTERACTIVE
,
NOT_FOR_ARCHS
, NO_IGNORE
,
ONLY_FOR_ARCHS
.IGNORE_IS_FATAL
IGNORE_SILENT
INSTALL_DEBUG_PACKAGES
INSTALL_{PROGRAM,SCRIPT,DATA,MAN}[_DIR]
INSTALL_TARGET
INTERACTIVE
BATCH
to simplify
bulk-package builds.IS_INTERACTIVE
IS_INTERACTIVE
ports, by using FLAVORS
for multiple choice ports,
and by postponing human intervention to package installation time.LE_ARCHS
NOT_FOR_ARCHS
and
ONLY_FOR_ARCHS
.LIB_DEPENDS
BUILD_DEPENDS
and
RUN_DEPENDS
, but with specific rules:
LIB_DEPENDS
always turn into
BUILD_DEPENDS
(but see
FLAVORS AND MULTI
PACKAGES).
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 dependent port.
See library-specs(7) for more details.
lib_depends_args
print-package-args
for details.LIBCXX
WANTLIB
.LIBTOOL
LIBTOOL_FLAGS
LLD_EMUL
LLD_EMUL
defaults to the correct option to set the
emulation mode; Otherwise, it stays empty. Read-only. Seldom used, as it
is only needed to link binary data without using the compiler.LLVM_ARCHS
NOT_FOR_ARCHS
or
ONLY_FOR_ARCHS
.LOCALBASE
LOCALSTATEDIR
BASELOCALSTATEDIR
, which defaults to
/var. Passed to gnu configure scripts.LOCKDIR
LOCK_CMD
LOCK_VERBOSE
LP64_ARCHS
NOT_FOR_ARCHS
.MAINTAINER
MAKE_ENV
MAKE_FLAGS
fake
stage, which adds
FAKE_FLAGS
(see
ALL_FAKE_FLAGS
) and for the
test
stage, which adds
TEST_FLAGS
(see
ALL_TEST_FLAGS
).MAKE_FILE
MAKE_JOBS
MAKE_PROGRAM
through
PARALLEL_MAKE_FLAGS
. Mostly set automatically when
DPB_PROPERTIES
contains ‘parallel’.
Note that make(1) still has bugs that may prevent parallel build from working correctly!
MAKE_PROGRAM
MAKEFILE_LIST
MAKESUMFILES
fetch-all
, with
DIST_SUBDIR
prepended and with master site
selection extension removed. Read-only. See also
CHECKSUMFILES
.MASTER_SITE_BACKUP
MASTER_SITE_*
MASTER_SITES
fetch
target for details.
Defaults to ${MASTER_SITES_GITHUB} for GitHub-hosted projects, see
GH_*
. See
ports(7) for user
configuration.MASTER_SITES0
,
...
, MASTER_SITES9
MESSAGE
MISSING_FILES
FETCH_MANUALLY
is set,
MISSING_FILES
will contain the list of missing
distfiles or patchfiles that need to be fetched manually. Read-only.MTREE_FILE
MODGNU_CONFIG_GUESS_DIRS
MODPERL_ADJ_FILES
MODPERL_ADJ_FILES
. File paths here should be
relative to WRKSRC
. These files are patched
automatically at the end of pre-configure
.MODPERL_BIN_ADJ
MODPERL_ADJ_FILES
.MODPERL_BUILD_TARGET
do-build
when
CONFIGURE_STYLE
uses perl. Provided as a separate
variable if a port wants to override do-build
for
its own reasons.MODPERL_INSTALL_TARGET
do-install
.MODPERL_TEST_TARGET
do-test
.MODULES
CONFIGURE_STYLE
. Note
that it is possible to CONFIGURE_STYLE = simple
,
MODULES += gnu
to just get the effects of
CONFIG_SITE
and
MODGNU_CONFIG_GUESS_DIRS
along with the default
TEST_TARGET
, in case the normal GNU configure
script was wrapped in a separate script that takes different arguments.
See
port-modules(5).MULTI_PACKAGES
ONLY_FOR_ARCHS
when some of the packages only
exist for some architectures.NOT_FOR_ARCHS
ONLY_FOR_ARCHS
.NO_BUILD
NO_CCACHE
USE_CCACHE
is set.NO_CHECKSUM
checksum
entirely, as
dpb(1) already deals with
checksums internally.NO_DEPENDS
NO_IGNORE
IGNORE
and
TRY_BROKEN
.NO_TEST
ONLY_FOR_ARCHS
OSREV
PACKAGE_REPOSITORY
package
for details.PARALLEL_MAKE_FLAGS
DPB_PROPERTIES
contains
‘parallel’. Flags to pass to
MAKE_PROGRAM
to yield a parallel build. Defaults
to -j${MAKE_JOBS}
. Mostly set to empty by ports
that use other mechanisms for setting the number of jobs.PARALLEL_MAKE_JOBS
MAKE_JOBS
to use when
building manually a port with DPB_PROPERTIES
containing ‘parallel’. Defaults to the number of online
cpus.PATCH
PATCHORIG
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
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, bzip'ed and lzip'ed patches, so
that the default case is more or less equivalent to the following shell
fragment:
set -e cd ${FULLDISTDIR} for patchfile in ${_LIST_PATCHFILES} do case $$patchfile in *.bz2) bzip2 -dc $$patchfile | ${PATCH} ${PATCH_DIST_ARGS};; *.lz) lunzip -c $$patchfile | ${PATCH} ${PATCH_DIST_ARGS};; *.Z|*.gz) gzcat $$patchfile | ${PATCH} ${PATCH_DIST_ARGS};; *) ${PATCH} ${PATCH_DIST_ARGS} <$$patchfile;; esac done
PATCHDIR
patch
target.
Default: patches.PATCHFILES
DISTFILES
, but serving a different purpose, as
they hold distribution patches that will be applied at the
patch
stage. See also
SUPDISTFILES
.PATCH_ARGS
PATCH_CHECK_ONLY
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
patch
stage
will output extra debug information. This is the default.PATCH_DIST_ARGS
PATCH_DIST_STRIP
PATCH_LIST
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
PERMIT_DISTFILES
,
PERMIT_PACKAGE
If PERMIT_PACKAGE
is set to
‘Yes’, PERMIT_DISTFILES
will
default to ‘Yes’.
PKG_ADD
PKG_ARCH
PKG_ARGS
PKG_CREATE
PKG_CREATE_NO_CHECKS
WANTLIB
(see
wantlib-args
). May result in bogus packages that
mix @depends
lines obtained from the ports tree
with @wantlib
lines that come from the installed
system. Set to ‘Warn’ to have the differences printed as a
warning instead of an error (the default).PKG_DBDIR
PKG_DELETE
PKG_INFO
PKG_TMPDIR
PORTHOME
HOME
for most shell
invocations. Default will trip ports that try to write into $HOME while
building.PORTPATH
PORTSDIR
PORTSDIR_PATH
PORTS_PRIVSEP
BUILD_USER
and fetch distfiles as
FETCH_USER
.
To work fully, this does require the ports tree to be
world-readable, and ${WRKDIR} to be
world-readable as well (update-patches
and
friends won't work otherwise).
Meant to use in concert with dpb(1), which uses the same permissions (see ‘THE SECURITY MODEL OF DPB’ in dpb(1)).
Basically, BUILD_USER
must be able to
write into ${WRKOBJDIR},
${PACKAGE_REPOSITORY},
${PLIST_REPOSITORY} and
FETCH_USER
must be able to write into
${DISTDIR}. The directories and permissions can
be set correctly using fix-permissions
.
The regular user must be allowed to execute commands as
BUILD_USER
and
FETCH_USER
. Running commands as another user can
be achieved with doas(1) by
setting SUDO=doas
in
mk.conf(5) and using the
following minimal
doas.conf(5):
permit keepenv nopass solene as _pbuild permit keepenv nopass solene as _pfetch
It is reasonably safe to allow your user id to run commands as
the BUILD_USER
or
FETCH_USER
and using
nopass
for these can save a lot of password
entry, however it is inadvisable to allow commands like
pkg_add(1) to run as
root without a password.
Note that this also means that doas(1) must be configured to work within the chroot created by proot(1).
As dpb(1) does its
own privilege dropping when run as root, it will automatically override
PORTS_PRIVSEP
.
User settings, defaults to ‘No’.
PKGDIR
update-plist
may create it. Must be a
valid directory. Default: pkg.PKGFILE
PKGFILES
PKGNAME
FULLPKGNAME
for that.
Specific revisions and epoch changes should be handled by
REVISION
and EPOCH
instead.PKGNAMES
FLAVORS
and BUILD_PACKAGES
taken into account. Mostly used as ‘make
show=PKGNAMES
’ to verify that bumped package names are
correct.PKGNAME-foo
PKGPATH
PKGPATHS
FLAVORS
and MULTI_PACKAGES
taken into account. Order matches PKGNAMES
exactly.PKGSPEC
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.PKGSTEM
PKGSTEM-main = php-5.6
PLIST_DB
PLIST_REPOSITORY
.PLIST_REPOSITORY
REVISION
bump. It also knows enough about package
version numbers when something in the package or its dependencies goes
backward, thus catching EPOCH
issues. 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 (plists actually get saved into
${PLIST_REPOSITORY}/${MACHINE_ARCH}). If set to
empty, will not register anything: very much unsafe.PORTS_BUILD_XENOCARA_TOO
PORTROACH
PREFIX
PREPARE_CHECK_ONLY
prepare
stage from
installing anything, let it just check dependencies, and handle [:target]
dependencies. Mostly used by
dpb(1), which already installs
everything before running prepare
.PROGRESS_METER
PROPERTIES
.include <bsd.port.arch.mk> .if ${PROPERTIES:Mapm} # then add build options specific to apm arches ... .if !${PROPERTIES:Mlp64} # build options specific to lp32 arches ...
MULTI_PACKAGES
setup, use of
ONLY_FOR_ARCHS-sub
and
BUILD_PACKAGES
is generally preferred (and
simpler). Possible properties include
PSEUDO_FLAVOR
FLAVOR
that are actually
pseudo-flavors. Only for introspection purposes. Read-only.PSEUDO_FLAVORS
FLAVOR=no_gnome make package
Pseudo-flavors should be named as ‘no_something’
to disable the build of subpackage ‘-something’ (and
possibly some others, by restricting
BUILD_PACKAGES
). Pseudo-flavors should always be
handled through
bsd.port.arch.mk(5).
A pseudo-flavor can remove several subpackages through the following
construct.
# pseudo-flavor no_gui will also remove gtk and gtk3 MULTI_PACKAGES = -main -gtk -gtk3 -gui # ... .include <bsd.port.arch.mk> # remove extra build components .if !${BUILD_PACKAGES:M-gui} BUILD_PACKAGES := ${BUILD_PACKAGES:N-gtk:N-gtk3} .endif # normal configure setup, e.g., .if ${BUILD_PACKAGES:M-gtk} # ...
Caveat: creation of a separate working directory is mandatory for a pseudo-flavor. If, at a later time, a full build with all subpackages is required, all the work will need to be done again.
See also BUILD_ONCE
.
RCDIR
REFETCH
checksum
will
analyze ${CHECKSUM_FILE}, and try retrieving files with the correct
checksum off
https://ftp.openbsd.org,
in the directory
/pub/OpenBSD/distfiles/$cipher/$value/$file.REGISTER_PLIST_OPTS
REORDER_DEPENDENCIES
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
REPORT_PROBLEM_LOGFILE
REVISION
FULLPKGNAME
as ‘p${REVISION}’ to
form a full package-name conforming to
packages-specs(7).RUN_DEPENDS
LIB_DEPENDS
. The corresponding packages
will be built right before the install
stage, and
pkg_add(1) will take care
of installing them.SEPARATE_BUILD
SETENV
/usr/bin/env -i
. Prepended to
every command invocation that requires a clean environment. Do not
override.SHARED_LIBS
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 make sure
MAKE_FLAGS
get propagated to the libtool
invocations. This should be enough in most cases.
SKIPDIR
STATIC_PLIST
STARTAFTER
STARTDIR
SUBPACKAGE
SUBST_CMD
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. This uses pkg_subst(1) with suitable parameters. Read-only.
${SUBST_CMD} can be used like install(1):
${SUBST_CMD}
[-g
group]
[-o
owner]
[-m
mode]
file...
Note that SUBST_CMD
is not really
appropriate when variables have subpackage variations, like
PREFIX
or FULLPKGNAME
.
Use the appropriate SUBST_CMD-sub
instead.
SUBST_CMD-sub
SUBST_CMD
with subpackage-dependent semantics, like packing-list substitution. It
will substitute the right variable depending on the desired subpackage,
e.g., SUBST_CMD-foo
will substitute the value of
FULLPKGNAME-foo
for
${FULLPKGNAME}
.SUBST_DATA
,
SUBST_MAN
,
SUBST_PROGRAM
SUBST_CMD
that use
-c
and appropriate owner/group/mode for data,
manpages and programs respectively.SUBST_VARS
ARCH
,
BASE_PKGPATH
, FLAVOR_EXT
,
FULLPKGNAME
, HOMEPAGE
,
LOCALBASE
, MACHINE_ARCH
,
MAINTAINER
, PREFIX
,
PKGSTEM
, 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.
TRUEPREFIX
is never passed to
pkg_create(1) as it
is identical to PREFIX
.
By default, update-plist(1) is run with the following options:
update-plist -i ARCH -i BASE_PKGPATH -i FULLPKGNAME -i FULLPKGPATH -i LOCALSTATEDIR -i MACHINE_ARCH -s BASE_PKGPATH -s LOCALBASE -s LOCALSTATEDIR -s PREFIX -s RCDIR -s SYSCONFDIR -s X11BASE
SUDO
SUPDISTFILES
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
BASESYSCONFDIR
, which defaults to
/etc. Passed to gnu configure scripts and
substituted in PLISTs.TAR
TARGETS
{pre,do,post}-*
and module hooks). Used by
introspection tools such as the sqlports package.TEMPLATES
readmes
target. User settings. Defaults to
${PORTSDIR}/infrastructure/templates.TEST_DEPENDS
BUILD_DEPENDS
for specification. Test
dependencies are only checked if the test
stage is
invoked.TEST_ENV
TEST_FLAGS
TEST_IS_INTERACTIVE
TEST_LOG
TEST_LOGFILE
TEST_TARGET
CONFIGURE_STYLE
, which default to
‘test’ and ‘check’, respectively.TRUEPREFIX
fake
. Refer to
THE FAKE FRAMEWORK section
for details.TRY_BROKEN
IGNORE
for BROKEN
ports,
so that we will attempt to build them.UNLOCK_CMD
UNMESSAGE
UNZIP
UPDATE_COOKIES_DIR
UPDATE_PLIST_ARGS
UPDATE_PLIST_OPTS
-v
for now.USE_CCACHE
USE_GMAKE
USE_GROFF
USE_LIBTOOL
Many ports using GNU autoconf need an m4 file from the GNU
libtool package but otherwise work with base
libtool(1). In those
cases do not set USE_LIBTOOL
, instead just set
BUILD_DEPENDS = devel/libtool
.
USE_LLD
LLD_ARCHS
in
bsd.port.arch.mk(5)).USE_MFS
WRKOBJDIR_MFS
for configuration.USE_WXNEEDED
patch
to request that the linker adds an
OPENBSD_WXNEEDED ELF section. Use when a port requires memory mappings
that are both executable and writable and cannot be modified to avoid
this.USE_X11
The infrastructure mostly sets USE_X11
automatically based on WANTLIB
values, there are
a few ports (about 20) that require X11 components without any library
telltale.
VARBASE
WANTLIB
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.
wantlib_args
print-package-args
for details.WARNINGS
CDIAGFLAGS
to CFLAGS
and
CXXDIAGFLAGS
to
CXXFLAGS
.WRKBUILD
SEPARATE_BUILD
is involved, in
which case it is set to an appropriate value.WRKCONF
WRKDIR
PATH
.WRKDIR_LINKNAME
WRKDIST
WRKSRC
WRKINST
fake
target).WRKOBJDIR
WRKOBJDIR_MFS
USE_MFS
is ‘Yes’. Defaults to
/tmp/pobj.X11BASE
XAUTHORITY
XMKMF
CONFIGURE_STYLE=imake
port. Defaults to xmkmf -a -DPorts. The -DPorts is specific to
OpenBSD and is always appended.YACC
Note that some of these messages are actually emitted by some other external commands, but grouped here for convenience: easier to look for in dpb(1)'s logs.
generate-readmes
.
${PKGDIR} must point to an existing directory, so
that bsd.port.mk
can be certain there are no
MESSAGEs or other files pertinent to the
package.PKG_ARGS-sub
.PKG_CREATE_NO_CHECKS
instead,
assuming they understand the implications. See
print-package-args
(wantlib-args
) for details.MODULE
or from
Makefile.inc, resulting in a double inclusion.
This would lead to weird results, such as PKG_ARGS
being defined twice.FLAVOR
and SUBPACKAGE
in
pkgpath(7)
specifications.PERMIT_*
values.FLAVOR
must be specified in the environment
instead.SUBPACKAGE
must be specified in the environment
instead.fake
stage. Of course,
ldconfig(8) will later
complain after the directory no longer exists. The bogus tool should be
fixed to conform to OpenBSD usage.Might be intentional sometimes, if some compile flavors create static binaries, for instance. Also, will happen for multi-packages, where one sets LIB_DEPENDS to have a given build dependency (and corresponding WANTLIB for a given SUBPACKAGE).
See print-package-args
(lib-depends-args
) for details.
FULLPKGNAME-sub
has been explicitly defined by the port, instead of relying on the
default, but no value of FULLPKGPATH-sub
has been
given. This is often an error.DEBUG_PACKAGES
so the
build-debug-info(1)
script excepts debug information on all binaries and libraries. Most
probably, the build machinery for that specific port omitted -g somewhere,
or it runs strips during fake anyway. It can also occur if
DEBUG_PACKAGES
includes subpackages with no files
holding debug info.make package
’ is run.REVISION
bumps. Any other version or
FLAVOR
won't conflict. This is generally an error,
apart from very few ports like
devel/autoconf/*.USE_GROFF
is set. The above message denotes an
actual problem while formatting the page, which should be addressed. In
the meantime,
pkg_create(1) still
produces a package, but leaves the manpage unformatted, in the hope that
something will be able to make sense of it.fake
. Variables from
SUBST_VARS
will be expanded. Multi-package ports
will use README${SUBPACKAGE}.fake
. Variables from
SUBST_VARS
will be expanded.CHECKSUM_PACKAGES
.PORTSDIR_PATH
.The fake
target is used to install the
port in a private directory first, ready for packaging by the
package
target, so that the actual 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 mkdir(1)
-p
.
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 port's dependencies were
present).
If {pre,do,post}-install
overrides are
present, they are used with some important changes, listed in
FAKE_SETUP
:
TRUEPREFIX=${PREFIX} PREFIX=${WRKINST}${PREFIX} ${DESTDIRNAME}=${WRKINST}
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} ${FAKE_SETUP} ${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} right after the end of
fake
, during
generate-readmes
(see the
FILES section above for details).
If DEBUG_PACKAGES
is not empty, debug
packages will be built "on the side". Since debug information is
usually large, this is controlled on a per-arch basis with
DEBUGINFO_ARCHS
controlling the behavior (set to
amd64 by default).
During the normal package
target ,
build-debug-info(1)
will be invoked to deduce debug packing-lists from the normal packing-lists,
and some extra makefile rules will be invoked to set aside the debug
information.
Then each normal package will have a "shadow" debug-* package built alongside it, with the exact same package signature, except it will also be tied closely with the normal package.
Figuring out what files contain debug information is entirely
achieved through @bin
, @lib
,
@so
and @static-lib
annotations in the base packing-lists.
Debug packages will be produced for all subpackages in
DEBUG_PACKAGES
. Usually, the heuristics of trimming
arch-independent packages from BUILD_PACKAGES
is
enough. In case this still produces empty debug packages, the
DEBUG_PACKAGES
list should be produced manually.
The actual debug packages are not registered through register-plist(1) since the information was automatically generated.
debug package names and debug package filenames are added to
PKGNAMES
and PKGFILES
respectively for introspection purpose.
egdb(1) from ports can read debug information from a separate file, as long as the original ELF file was annotated with a debuginfo link.
That feature is used to set debug information on the side, in .debug/ subdirectories alongside the normal binaries, shared objects and shared libraries.
For static libraries, the information can't be separated, instead the full static library with debug information is provided in the .debug/ subdirectory, while the normal static library gets stripped.
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.
The arch-dependent part was refined after OpenBSD 5.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:Moption1} # what to do if option1 .endif .if ${FLAVOR: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 bulk package building, flavors can be specified as a comma separated list after the package directory, e.g., SUBDIR+=vim,no_x11 (see pkgpath(7))
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 bulk 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
, PKGFILE
,
PKGNAME
, PKGSTEM
,
FULLPKGNAME
, REVISION
,
EPOCH
, FULLPKGPATH
,
RUN_DEPENDS
, WANTLIB
,
LIB_DEPENDS
, IGNORE
,
ONLY_FOR_ARCHS
,
NOT_FOR_ARCHS
, PKG_ARGS
,
PREFIX
, CATEGORIES
,
MESSAGE
, UNMESSAGE
,
DESCR
, PLIST
,
STATIC_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 the
build, during prepare
, all build dependencies will
be checked, which includes LIB_DEPENDS
,
WANTLIB
for every subpackage. 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, but
FULLPKGPATH-sub
is set automatically to the right
value. In very rare cases, one may 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 using the port, 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
and IGNORE
.
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.
Starting with OpenBSD 5.1,
bsd.port.arch.mk(5)
should be used to simplify the handling of
MULTI_PACKAGES
in arch-dependent setups:
Make sure MULTI_PACKAGES
,
ONLY_FOR_ARCHS*
, and
PSEUDO_FLAVORS
are defined correctly, then
.include <bsd.port.arch.mk>
This will compute BUILD_PACKAGES
, the list
of actual subpackages to build with the current setup, by taking arch
constraints and pseudo-flavors into account. Then test
BUILD_PACKAGES
to set up the right configuration,
e.g., to check if SUBPACKAGE
-mono should be built:
.if ${BUILD_PACKAGES:M-mono}
The lang/gcc/8 or print/poppler ports should provide examples of proper use.
Note that dpb(1) will break if all subpackages are not properly listed.
Starting after OpenBSD 4.1 all package information is processed directly by pkg_create(1) from templates in ${PKG_DIR}.
FLAVORS=no_map gfx qt2
, if
FLAVOR=gfx no_map
, this is
‘-no_map-gfx’.Note that ${COMMENT} is currently not substituted, to speed up
describe
generation.
To avoid substitution, variables can be escaped as follows:
$\{PREFIX}
If FLAVORS
lists flv, then constructs such
as the line %%flv%%
or
!%%flv%%
in the packing-list template trigger the
inclusion of ${PKGDIR}/PFRAG.flv${SUBPACKAGE} or
${PKGDIR}/PFRAG.no-flv${SUBPACKAGE}. Other fragments
can be defined by simply adding -Dfrag=1
or
-Dfrag=0
to PKG_ARGS
.
If libraries are built using bsd.lib.mk,
special care should be taken for mips64* architectures, which do not ever
build *pic.a files (all mips code is pic already).
bsd.port.mk
automatically adds
-Dno_mips64=1
or
-Dno_mips64=0
to PKG_ARGS
,
and the porter only needs to provide the appropriate fragment.
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 the PLIST.
If PLIST_REPOSITORY
points to a directory,
all packing-lists from packages generated by
pkg_create(1) during the
package
stage are saved in
${PLIST_REPOSITORY}/${MACHINE_ARCH} 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.
addsum
SUPDISTFILES
.cdrom-packages
,
ftp-packages
package
target.depends-list
full-build-depends
.describe
dump-vars
provides much more accurate information,
and the indexing role has been taken over by the
sqlports and portslist
packages.{build,run,lib}-depends
BUILD_DEPENDS
,
LIB_DEPENDS
, RUN_DEPENDS,
WANTLIB
and MULTI_PACKAGES
. Refer to
prepare
, install-depends
,
test-depends
.{pre,do}-extract
EXTRACT_ONLY
to nothing and
override post-extract
instead.{pre,do,post}-fetch
{pre,do,post}-package
{pre,do,post}-install
should take care of every
necessity.fetch-list
,
mirror-distfiles
,
fetch-makefile
,
mirror-maker
,
mirror-maker-fetch
dpb
-F
instead, see
mirroring-ports(7).obj
WRKOBJDIR
no longer creates a symlink between the
current directory and a subdirectory of ${WRKOBJDIR}, so
obj
is no longer applicable.print-depends
print-build-depends
and
print-run-depends
instead.print-depends-list
print-build-depends
.print-package-depends
print-run-depends
.print-package-signature
print-update-signature
.readme
,
readmes
BIN_PACKAGES
CATn
CATPREFIX
PREFIX
.CDROM_PACKAGES
COMMENT
CONFIGURE_SHARED
DESCR_SRC
EXTRACT_AFTER_ARGS
EXTRACT_CASES
instead.EXTRACT_BEFORE_ARGS
EXTRACT_CASES
instead.EXTRACT_CMD
EXTRACT_CASES
instead.FETCH_BEFORE_ARGS
,
FETCH_AFTER_ARGS
FETCH_CMD
to point to a script that does any
required special treatment instead.FETCH_DEPENDS
FTP_PACKAGES
GNU_CONFIGURE
CONFIGURE_STYLE
instead.HAS_CONFIGURE
CONFIGURE_STYLE
instead.IGNOREFILES
MANn
MANPREFIX
PREFIX
.MASTERDIR
MASTER_SITE_SUBDIR
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
CHECKSUM_FILE
instead.MIRROR_DISTFILE
PERMIT_DISTFILES
to determine which files can
be mirrored instead. See
mirroring-ports(7).NEED_VERSION
bsd.port.mk
needed by a port. No longer needed as
bsd.port.mk
should always be kept up to date.NO_CONFIGURE
NO_DESCRIBE
NO_EXTRACT
NO_INSTALL_MANPAGES
CONFIGURE_STYLE
instead.NO_MTREE
NO_PACKAGE
NO_PATCH
NO_SHARED_ARCHS
NO_SHARED_LIBS
NO_WRKDIR
NO_WRKSUBDIR
NOCLEANDEPENDS
NOMANCOMPRESS
OBJMACHINE
WRKOBJDIR
creates the whole
WRKDIR
hierarchy under ${WRKOBJDIR}, so
OBJMACHINE
is no longer useful.OLD_WRKDIR_NAME
WRKDIR
in the old
scheme without WRKOBJDIR
.OPSYS
OPSYS_VER
OSREV
instead.PACKAGES
PACKAGE_REPOSITORY
now.PACKAGING
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/
PERMIT_DISTFILES_CDROM
,
PERMIT_DISTFILES_FTP
,
PERMIT_PACKAGE_CDROM
,
PERMIT_PACKAGE_FTP
PERMIT_*_CDROM
variables were dropped, and
PERMIT_DISTFILES_FTP / PERMIT_PACKAGE_FTP
were
shortened to PERMIT_DISTFILES /
PERMIT_PACKAGE
.PKG_CMD
PKG_CREATE
.PKGREPOSITORY
PACKAGE_REPOSITORY
.PKGREPOSITORYBASE
PACKAGE_REPOSITORY
.PLIST_SRC
PKGNAME
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
PREFERRED_CIPHERS
RECURSIVE_FETCH_LIST
RESTRICTED
PERMIT_PACKAGE
instead.SED_PLIST
SIGNING_PARAMETERS
SCRIPTDIR
FILESDIR
for
those.SCRIPTS_ENV
CONFIGURE_ENV
and MAKE_ENV
are enough.SHARED_ONLY
USE_AUTOCONF
CONFIGURE_STYLE
instead.USE_BZIP2
BZIP2
, EXTRACT_CASES
, and
EXTRACT_SUFX
.USE_IMAKE
CONFIGURE_STYLE
instead.USE_ZIP
ZIP
, EXTRACT_CASES
, and
EXTRACT_SUFX
.VARNAME
WRKPKG
PKG_ARGS
and fragment
substitution, or PATCH_LIST
to achieve similar
results.{pre,do,post}-*
target, invoking the script
manually if necessary.do-configure
in the Makefile, or put the script in
${FILESDIR} and invoke it.bsd.port.mk
did not substitute variables in the
packing list unless this special form was used.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.clean-old-distfiles(1), ftp(1), pkg_add(1), pkg_create(1), OpenBSD::Intro(3p), bsd.port.arch.mk(5), mk.conf(5), port-modules(5), library-specs(7), mirroring-ports(7), packages-specs(7), pkgpath(7), ports(7)
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
,
SEPARATE_BUILD
and FAKE are
OpenBSD improvements. Most recent additions do not
come from another BSD.
LOCALBASE
,
X11BASE
, BASESYSCONFDIR
,
VARBASE
and PREFIX
are not
heeded consistently. Using anything but the default values has not been
heavily tested. Some ports may not build if you change them.
May 2, 2021 | OpenBSD-7.0 |