12.6 Writing Something After bsd.port.mk

Do not write anything after the .include <bsd.port.mk> line. It usually can be avoided by including bsd.port.pre.mk somewhere in the middle of your Makefile and bsd.port.post.mk at the end.

Note: Include either the bsd.port.pre.mk/bsd.port.post.mk pair or bsd.port.mk only; do not mix these two usages.

bsd.port.pre.mk only defines a few variables, which can be used in tests in the Makefile, bsd.port.post.mk defines the rest.

Here are some important variables defined in bsd.port.pre.mk (this is not the complete list, please read bsd.port.mk for the complete list).

Variable Description
ARCH The architecture as returned by uname -m (e.g., i386)
OPSYS The operating system type, as returned by uname -s (e.g., FreeBSD)
OSREL The release version of the operating system (e.g., 2.1.5 or 2.2.7)
OSVERSION The numeric version of the operating system; the same as __FreeBSD_version.
LOCALBASE The base of the ``local'' tree (e.g., /usr/local/)
PREFIX Where the port installs itself (see more on PREFIX).

Note: If you have to define the variables USE_IMAKE or MASTERDIR, do so before including bsd.port.pre.mk.

Here are some examples of things you can write after bsd.port.pre.mk:

# no need to compile lang/perl5 if perl5 is already in system
.if ${OSVERSION} > 300003
BROKEN=	perl is in system
.endif

# only one shlib version number for ELF
.if ${PORTOBJFORMAT} == "elf"
TCL_LIB_FILE=	${TCL_LIB}.${SHLIB_MAJOR}
.else
TCL_LIB_FILE=	${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif

# software already makes link for ELF, but not for a.out
post-install:
.if ${PORTOBJFORMAT} == "aout"
	${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endif

You did remember to use tab instead of spaces after BROKEN= and TCL_LIB_FILE=, did you not? :-).

For questions about the FreeBSD ports system, e-mail <ports@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.