BSD.PORT.MK man page on OpenBSD

Man page or keyword search:  
man Server   11362 pages
apropos Keyword Search (all sections)
Output format
OpenBSD logo
[printable version]

BSD.PORT.MK(5)		  OpenBSD Programmer's Manual		BSD.PORT.MK(5)

NAME
     bsd.port.mk - ports tree master Makefile fragment

SYNOPSIS
     .include <bsd.port.mk>

DESCRIPTION
     bsd.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 ALSO
     ftp(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
[top]

List of man pages available for OpenBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net