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 docu-
     mented here.

     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 informa-
     tion.

     Binary package details are mostly covered in pkg_create(1) for the pack-
     ing-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 out-
                   put 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 in-
                   voked 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 any-
                   thing 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 in-
                   stall 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 invok-
                   ing patch(1).

     checksum      Check distribution archives and distribution patches con-
                   trol 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.  Invok-
                   ing 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 subpack-
                             ages.

                   readmes   Clean files generated through the readme targets
                             (html files).

                   sub       With install or package, clean subpackages as
                             well.

                   packages  Short-hand for `sub package'.

     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 meth-
                   ods 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 de-
                   scription.  Do not use pre-extract and do-extract hooks.

     fake          Do a fake port installation, that is, simulate the port in-
                   stallation 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.  De-
                   scribed 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' ex-
                   tension, 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 supple-
                   mentary distribution files which are not needed for every
                   configuration.  Use of {pre,do,post}-fetch hooks is strong-
                   ly discouraged, and will probably be removed in the near
                   future, as this makes mirroring of distfiles very compli-
                   cated.  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 actu-
                   ally 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 depen-
                   dency 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 de-
                   tails.

     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.  Arch-indepen-
                   dent 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}/${MA-
                   CHINE_ARCH}/ftp, using hard links if possible.  If ${PER-
                   MIT_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 in-
                   vokes 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 un-
                   der 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 di-
                   rectory, 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 li-
                   braries 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, 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 in-
                   formation 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-with-depends
                   Like print-plist, but slower.  It also handles LIB_DEPENDS,
                   RUN_DEPENDS, and WANTLIB, so that the packing-list is com-
                   plete.

     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 regres-
                   sion tests, use REGRESS_DEPENDS.  If a port needs special
                   configuration or build options to enable regression test-
                   ing, 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.  In-
                   voked 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 af-
                   fected 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 mul-
                   ti-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 installa-
                   tion, 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-pack-
                   ages ports.  See UPDATE_COOKIES_DIR and FORCE_UPDATE as
                   well.

     update-plist  Update the packing lists for a port, using the fake instal-
                   lation 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 di-
                   rectories that shouldn't be included, comment these like
                   this:

                   @comment unwanted-file
                   @comment @dirrm unwanted-dir

                   Subsequent calls to update-plist will automatically recog-
                   nize and handle such lines correctly.

                   update-plist does not handle flavor situations yet, so be-
                   ware.

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 pro-
                   cess.  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.

     ARCH          Current machine architecture.  Read-only.

     AUTOCONF      Location of the autoconf binary if needed.  Defaults to au-
                   toconf (though make autoreconf might be more appropriate).

     AUTOCONF_DIR  Where to invoke autoconf if ${CONFIGURE_STYLE} includes au-
                   toconf.  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 spec-
                   ify which one to use.  If autoconf must be run manually,
                   MODGNU_AUTOCONF_DEPENDS can be used to specify what pack-
                   ages to depend upon.

     BASE_PKGPATH  Full pkgpath to the current port, taking flavors into ac-
                   count.  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.

     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 cor-
                   rectly.  Each item has the form
                   `[legacy]:[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 sub-
                   package name, to install instead of the default main pack-
                   age name.  `flavor ...' is a comma separated list of fla-
                   vors.  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 pseu-
                   do-flavors into account.  Mostly useful to write dependen-
                   cies for subpackages like this: LIB_DEPENDS-
                   foo=::${BUILD_PKGPATH} and avoid starting to build a pack-
                   age with some other flavor combination.  Read-only.

     BULK          User settings.  If set to `Yes', successful package builds
                   and installations will clean their working directories, af-
                   ter invoking any targets mentioned in BULK_TARGETS, and
                   commands mentioned in BULK_DO.  Can be set on a per-${PKG-
                   PATH} 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 clean-
                   ing 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 clean-
                   ing up the working directory.  Empty defaults.  Can be set
                   on a per-${PKGPATH} basis, e.g., BULK_TARGETS_${PKG-
                   PATH}=...

     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.  De-
                   faults 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 exten-
                   sion 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 pack-
                   age, 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 stan-
                   dard 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 vari-
                   ables.

     CONFIGURE_SCRIPT
                   Set to name of script invoked by configure target, if ap-
                   propriate.  Should be either an absolute path, or relative
                   to ${WRKSRC}.

     CONFIGURE_SHARED
                   Set by default to --enable-shared or --disable-shared, de-
                   pending on whether the architecture supports shared li-
                   braries.  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 DEST-
                   DIR 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.  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 Imake-
                   file should try installing.  If `simple', there is a con-
                   figure script, but it does not fit the normal GNU configure
                   conventions.

     COPTS         User settings.  Supplementary options appended to ${CFLAGS}
                   for building.  Since most ports ignore the COPTS conven-
                   tion, 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.  Usual-
                   ly DESTDIR.  To be used in the rare cases where a port
                   heeds DESTDIR in a few directories and needs to be config-
                   ured 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 extract-
                   ed (see checksum, extract).  DISTFILES normally holds a
                   list of files, possibly with `:0' to `:9' appended to se-
                   lect 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.  De-
                   faults to .bak.orig.  Distinct from .orig to avoid confus-
                   ing 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 infor-
                   mation 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.

     ERRORS        List of errors found while parsing the port's Makefile.
                   Display the errors before making any target, and if any er-
                   ror starts with "Fatal:", do not make anything.  For in-
                   stance:

                         .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 ex-
                   tract 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-ex-
                   tract stage.  Default value is ${DISTFILES}.

     EXTRACT_SUFX  Used to set DISTFILES default value to ${DISTNAME}${EX-
                   TRACT_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.  De-
                   faults 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 FAKEOB-
                   JDIR_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 loca-
                   tions 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.  (de-
                   fault: 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 validi-
                   ty 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 al-
                   ways 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 ${PATCH-
                   FILES} will be located, to be used in hand-crafted extrac-
                   tion targets.  Read-only.

     FULLPKGNAME   Full name of the created package, taking flavors into ac-
                   count.  Defaults to ${PKGNAME}${FLAVOR_EXT}.

     FULLPKGPATH   Path to the current port's directory, relative to ${PORTS-
                   DIR}, including flavors and subpackages.

     GMAKE         Location of the GNU make binary, if needed.  Defaults to
                   gmake.

     HOMEPAGE      Set to a link to the homepage of the software, if applica-
                   ble.

     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,
                   USE_X11.

     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 instal-
                   lation.  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 mul-
                   tiple choice ports, and by postponing human intervention to
                   package installation time.

     LIB_DEPENDS   Libraries this port depends upon.  Each item has the form
                   `lib_specs:[pkgspec]:directory[,-subpackage][,flavor
                   ...][:target]'.  Similar to BUILD_DEPENDS, except for
                   `lib_specs', which is a comma-separated list of `lib_spec'
                   of the form: `libname.[version.[subversion]]'.  See
                   library-specs(7) for more details.

                   On architectures that use dynamic libraries, LIB_DEPENDS is
                   also used as a run-time dependency, and recorded in the
                   package as such.

     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.  If set, points to a directory common for
                   all instances of concurrent ports builds.

     LOCK_CMD      User settings.  If set, expands to a command that will ac-
                   quire a lock.  This lock will reside in ${LOCKDIR}.  See
                   also ports(7).

     LP64_ARCHS    Set to the list of 64-bit architectures.  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 installa-
                   tion.  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 append-
                   ed.  These specifications are rooted at ${WRKINST}, and are
                   subject to SUBST_VARS substitution, to ease ${PREFIX} inde-
                   pendence.  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.

     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 ba-
                   sic 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 li-
                   braries.  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).

     OPSYS         Always OpenBSD.  Read-only.

     OPSYS_VER     Revision number of OpenBSD.  Read-only.

     PACKAGE_REPOSITORY
                   User settings.  Default location for built packages.  De-
                   faults 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 emp-
                   ty), this is the contents of a case statement, used to ap-
                   ply distribution patches.  Fragments are automatically ap-
                   pended 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.  Ide-
                   ally, user-defined patch subtargets ought to test check-
                   patch.  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 ab-
                   solute pathnames, for instance to share patches among simi-
                   lar 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 al-
                   lowed 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_ARCH      Comma-separated list of architectures on which this package
                   may install.  Defaults to ${MACHINE_ARCH},${ARCH}.  Use *
                   to mean any arch.

     PKG_DBDIR     Path to package installation records.  Defaults to
                   /var/db/pkg.  User settings.

     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 de-
                   scription, port short description).  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.

     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 ${PORTS-
                   DIR}.  Read-only.

     PLIST_DB      User settings.  Directory used to save generated packing-
                   lists, for further processing, such as looking for unregis-
                   tered conflicts.  Defaults to empty.

     PREFERRED_CIPHERS
                   List of cryptographic ciphers to use, in order of prefer-
                   ence.  Default is `sha256 sha1 rmd160 md5'.  The first ci-
                   pher 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 sever-
                   al locations.

     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 re-
                   quired, all the work will need to be done again.

     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 dis-
                   play 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', ex-
                   cept 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_re-
                   cent 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).

     RUN_DEPENDS   Specification of ports this port needs installed to be
                   functional.  Same format as BUILD_DEPENDS.  The correspond-
                   ing 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 dis-
                   tinct 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 sepa-
                   rate ${WRKBUILD} directory in which the port will be con-
                   figured 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 sub-
                   stitution 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 con-
                   trol 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).

     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 dependen-
                   cies or to adjust the package name.

     SUBST_CMD     A command that can be used to perform SUBST_VARS substitu-
                   tion 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_VARS    Make variables whose values get substituted to create the
                   actual package information.  Always holds ARCH,
                   BASE_PKGPATH, FLAVOR_EXT, HOMEPAGE, MACHINE_ARCH,
                   MAINTAINER, PREFIX, and SYSCONFDIR.  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 be-
                   tween 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.

     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 re-
                   lease a lock.  This lock will reside in ${LOCKDIR}.

     UNMESSAGE     File recorded in the package and displayed during deinstal-
                   lation.  Defaults to ${PKGDIR}/UNMESSAGE if this file ex-
                   ists.  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_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 cre-
                   ates an extra flavor choice of `lesstif'.  See also
                   MOTIFLIB

     USE_SYSTRACE  User settings.  Set to `Yes' to protect port building with
                   systrace.

     USE_X11       Set to `Yes' if port requires X11 to work.

     VMEM_WARNING  Set to `Yes' if the port requires a lot of memory to com-
                   pile, 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.

                   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.

     WRKDIST       Subdirectory of ${WRKDIR} in which the distribution files
                   normally unpacks.  Base for all patches (default:
                   ${WRKDIR}/${DISTNAME}).  Note that WRKDIST may be a symbol-
                   ic 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 (de-
                   fault: ${PORTSDIR}/pobj).  The real working directory
                   ${WRKDIR} is created there.  Can be set on a per-${PKGPATH}
                   basis.  For instance, setting WRKOBJDIR_www/mozil-
                   la=/tmp/obj will affect only the mozilla port.  If explic-
                   itly 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.  De-
                   faults 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 other-
                   wise, which leads to unreproducible builds.)  Set to bison
                   if needed.

FILES
     ../Makefile.inc
                Common Makefile fragment for a set of ports, included automat-
                ically.

     /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 ${PRE-
                FERRED_CIPHERS}, for the port's ${DISTFILES} and ${PATCH-
                FILES}, 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-pack-
                age ports will use DESCR${SUBPACKAGE}.

     ${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 automati-
                cally.

     systrace.policy
                List of additional port specific policies, included automati-
                cally.

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 cre-
                   ates a symlink between the current directory and a subdi-
                   rectory 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 spe-
                   cific 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_AF-
                   TER_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 distribu-
                   tion 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: talk-
                   ing to the software author and getting him to provide ver-
                   sioned archives.

     MANn          List of unformatted manpages, per section.

     MANPREFIX     Location for storing unformatted manpages.  Derived direct-
                   ly 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 oc-
                   cur 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 de-
                   termine 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 config-
                   uration 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 installa-
                   tion script runs the /usr/local specification globally, in-
                   stead 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 in-
                   stall.

     NO_PATCH      The absence of a patches directory does the same.  Use
                   PATCHDIR and PATCH_LIST if patches need to be changed dy-
                   namically.

     NO_WRKDIR     All ports should have a working directory, as this is nec-
                   essary 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.

     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/

     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 spe-
                   cific 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 fla-
                   vors 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_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 tem-
                   plates 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 neces-
                sary.

     ${SCRIPTDIR}/configure
                No longer invoked automatically.  Just inline the instructions
                in do-configure in the Makefile, or put the script in ${FILES-
                DIR} 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 un-
                der ${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 patch-
                es.

     /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 in-
     stance, 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 PRE-
     FIX 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 in-
     stall-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.

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 sepa-
     rated list after the package directory, e.g., SUBDIR+=vim,no_x11.

     Finally, package information will use templates with the canonical pack-
     age extension if they are available: if FLAVOR='option1 option2' and both
     COMMENT and COMMENT-option1-option2 are available, COMMENT-option1-op-
     tion2 will be used.

     If one build of a port can generate several distinct packages, set MUL-
     TI_PACKAGES accordingly.  Each extension of a MULTI_PACKAGES name should
     start with a dash, so that they cannot be confused with FLAVORS.  In de-
     pendency checking and recursive builds, a subpackage can be specified af-
     ter a comma, e.g., SUBDIR+=quake,-server.  MULTI_PACKAGES only affects
     the actual package building step (and the describe step, since a MUL-
     TI_PACKAGES port will produce several descriptions).

     If MULTI_PACKAGES is set, the packaging stage happens once for every sub-
     package, using subpackage-specific variables.  For instance, if MUL-
     TI_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 FULLP-
     KGNAME-lib must be in PLIST-lib.

     The following variables are subpackage dependent: COMMENT, PKG_ARCH,
     PERMIT_PACKAGE_FTP, PERMIT_PACKAGE_CDROM, PKGNAME, FULLPKGNAME,
     FULLPKGPATH, RUN_DEPENDS, WANTLIB, LIB_DEPENDS, PREFIX, CATEGORIES,
     MESSAGE, UNMESSAGE, DESCR, PLIST.

     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 subup-
     date for all subpackages.

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${SUBPACK-
         AGE}}, ${MESSAGE${SUBPACKAGE}}, ${UNMESSAGE${SUBPACKAGE}} according-
         ly.
     o   Detect the existence of ${PKGDIR}/{REQ,INSTALL,DEINSTALL}${SUBPACK-
         AGE}.  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.  Li-
     braries 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 gener-
     ated by pkg_create(1) during the package stage are saved in that location
     by a script: ${PORTSDIR}/infrastructure/packages/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 ver-
     sion 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 reorga-
     nized to remove bugs.  New features have been carefully introduced, try-
     ing 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.7                    February 26, 2010                            29
