If your port needs to build slightly different versions of
packages by having a variable (for instance, resolution, or paper
size) take different values, create one subdirectory per package to
make it easier for users to see what to do, but try to share as many
files as possible between ports. Typically you only need a very short
Makefile
in all but one of the directories if you
use variables cleverly. In the sole Makefile
,
you can use MASTERDIR
to specify the directory
where the rest of the files are. Also, use a variable as part of
PKGNAMESUFFIX
so
the packages will have different names.
This will be best demonstrated by an example. This is part of
japanese/xdvi300/Makefile
;
PORTNAME= xdvi PORTVERSION= 17 PKGNAMEPREFIX= ja- PKGNAMESUFFIX= ${RESOLUTION} : # default RESOLUTION?= 300 .if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \ ${RESOLUTION} != 300 && ${RESOLUTION} != 400 @${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\"" @${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400." @${FALSE} .endif
japanese/xdvi300 also has all the regular
patches, package files, etc. If you type make
there, it will take the default value for the resolution (300) and
build the port normally.
As for other resolutions, this is the entire
xdvi118/Makefile
:
RESOLUTION= 118 MASTERDIR= ${.CURDIR}/../xdvi300 .include "${MASTERDIR}/Makefile"
(xdvi240/Makefile
and
xdvi400/Makefile
are similar). The
MASTERDIR
definition tells
bsd.port.mk
that the regular set of
subdirectories like FILESDIR
and
SCRIPTDIR
are to be found under
xdvi300
. The RESOLUTION=118
line will override the RESOLUTION=300
line in
xdvi300/Makefile
and the port will be built with
resolution set to 118.
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>.