第16章.MASTERDIR

如果你的port可以根据一些参数(如,纸张大小)的不同生成不同的包,为每个包创建一个目录是较好的,但应该尽可能的共享较多的文件.通常你只需要每个目录有一个简单的Makefile而不是每个目录都有一个完整的Makefile.在这个Makefile中,你可以使用MASTERDIR变量指定要共享的文件.也要定义一个PKGNAMESUFFIX 来表明不同的包.

这里有一个很好的范例,是japanese/xdvi300/Makefile的一部分:

    PORTNAME=       xdvi
    PORTVERSION=    17
    PKGNAMEPREFIX=  ja-
    PKGNAMESUFFIX=  ${RESOLUTION}
     :
    # default
    RESOLUTION?=   300
    .if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
           ${RESOLUTION} != 300 && ${RESOLUTION} != 400
           @${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
           @${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
           @${FALSE}
    .endif

japanese/xdvi300 也使用通常的patch等等.如果你输入make命令,会按照缺省的变量值resolution=300编译这个port.

对于其他的resolution值,这里是完整的xdvi118/Makefile:

    RESOLUTION=     118
    MASTERDIR=      ${.CURDIR}/../xdvi300
    
    .include "${MASTERDIR}/Makefile"

MASTERDIR告诉bsd.port.mk像FILEDIR和SCRIPTDIR可以在xdvi300中找到.RESOLUTION=118将覆盖RESOLUTION=300的定义,生成resolution=118的包.