gettext
iconv
rc
Scripts)There are some more things you have to take into account when you create a port. This section explains the most common of those.
bsd.port.mk
expects ports to work with
a “stage directory”. This means that a
port should not install files directly to the regular
destination directories (that is, under
PREFIX
, for example) but instead into a
separate directory from which the package is then built. In
many cases, this does not require root privileges, making it
possible to build packages as an unprivileged user. With
staging, the port is built and installed into the stage
directory, STAGEDIR
. A package is created
from the stage directory and then installed on the system. Automake tools refer to
this concept as DESTDIR
, but in FreeBSD,
DESTDIR
has a different meaning (see Section 9.4, “PREFIX
and
DESTDIR
”).
When a port still requires system-wide privileges in order
to run the package
target, this
line must be added to the
Makefile
:
NEED_ROOT= yes
Meta ports, or ports that do not install files themselves but only depend on other ports, should avoid needlessly extracting the mtree(8) to the stage directory. This is the basic directory layout of the package, and these empty directories will be seens as orphans. To prevent mtree(8) extraction, add this line:
NO_MTREE= yes
Staging is enabled by prepending the
STAGEDIR
variable to paths used in
the pre-install
,
do-install
, and
post-install
targets (see the examples
through the book). Typically, this includes
PREFIX
, ETCDIR
,
DATADIR
, EXAMPLESDIR
,
MANPREFIX
, DOCSDIR
, and so on.
Directories should be created as part of the
post-install
target. Avoid using
absolute paths whenever possible.
When creating a symlink, STAGEDIR
should
be prepended to the target path only. For example:
${LN} -sf libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so
The source path
${PREFIX}/lib/libfoo.so.42
looks
fine but could, in fact, be incorrect. Absolute paths can
point to a wrong location, like when a remote
file system has been mounted with NFS under a non-root mount point.
Relative paths are less fragile, and often much shorter.
Ports that install kernel modules must prepend the
STAGEDIR
variable to
their destination, by default
/boot/modules
.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.