gettexticonvrc
Scripts)This section explains the most common things to consider when creating a port.
bsd.port.mk expects ports to work
with a “stage directory”. This means that a port
must 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 節 9.4, “PREFIX 以及 DESTDIR”).
No port really needs to be root. It
can mostly be avoided by using USES=uidfix.
If the port still runs commands like chown(8),
chgrp(1), or forces owner or group with install(1)
then use USES=fakeroot
to fake those calls. Some patching of the port's
Makefiles will be needed.
Meta ports, or ports that do not install files themselves but only depend on other ports, must 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 seen as orphans. To prevent mtree(8) extraction, add this line:
NO_MTREE= yes
Metaports should use USES=metaport.
It sets up defaults for ports that do not fetch, build, or
install anything.
Staging is enabled by prepending
STAGEDIR 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
is prepended to the target path only. For
example:
${LN} -sf libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.soThe source path
${PREFIX}/lib/
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.libfoo.so.42
Ports that install kernel modules must prepend
STAGEDIR to their destination, by default
/boot/modules.
本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。
若有 FreeBSD 方面疑問,請先閱讀
FreeBSD 相關文件,如不能解決的話,再洽詢
<questions@FreeBSD.org>。
關於本文件的問題,請洽詢
<doc@FreeBSD.org>。