7.3. Includes do make do projeto de documentação do FreeBSD

Isto é melhor explicado pela inspeção no código. Aqui estão os arquivos include do sistema:

7.3.1. doc.project.mk

Por inspeção:

DOCFORMAT?=    docbook
MAINTAINER?=    doc@FreeBSD.org

PREFIX?=        /usr/local
PRI_LANG?=      en_US.ISO8859-1

.if defined(DOC)
.if ${DOCFORMAT} == "docbook"
.include "doc.docbook.mk"
.endif
.endif

.include "doc.subdir.mk"
.include "doc.install.mk"

7.3.1.1. Variáveis

DOCFORMAT e MAINTAINER serão atribuídos valores padrão, se estes não forem configuradores pelo arquivo de documento do make.

PREFIX é o caminho que os aplicativos de construção da documentação estão instalados. Para uma instalação normal de pacotes e port, este caminho também é /usr/local.

PRI_LANG deve ser configurado para qualquer linguagem e codificar é natural entre usuários destes documentos em sua construção. US English (Inglês) é o padrão.

Nota: PRI_LANG de maneira alguma pode afetar os documentos, ou se forem, é para serem criados. Seu uso principal é criar links de referências comuns aos documentos no projeto de documentação do FreeBSD instalado na raíz.

7.3.1.2. Condicionais

A linha .if defined(DOC) é um exemplo da condicional do make, como em outros programas, define o comportamento se algumas condições é verdadeira ou se é falsa. defined é a função que retorna se a variável passada está definida ou não.

A seguir, .if ${DOCFORMAT} == "docbook", teste se a variável DOCFORMAT é "docbook", e neste caso, inclue o doc.docbook.mk.

Os dois .endifs fecham as duas condições anteriores, marcando o fim da sua aplicação.

7.3.2. doc.subdir.mk

Isto é muito longo para ser explicado por inspeção, você deverá estar apto a trabalhar com isto com o conhecimento adquirido nos capítulos anteriores, e uma pequena ajuda será dada aqui.

7.3.2.1. Variáveis

  • SUBDIR é a lista de subdiretórios em que o processo de construção deve feito abaixo.

  • ROOT_SYMLINKS é o nome dos diretórios que devem ser linkados a raíz de instalação do documento em sua localização atual, se a linguagem atual é a linguagem primária (especificado por PRI_LANG).

  • COMPAT_SYMLINK é descrito na seção Subdiretório Makefiles.

7.3.2.2. Targets e macros

Dependências são descritas por target: dependência1 dependência2 ... , onde para construir o target, você necessita primeiramente construir as dependências dadas.

Em seguida a tupla descritiva, instruções em como construir o target pode ser dada, se o processo de conversão entre o target e estas dependências não forem previamente definidas, ou se esta conversão particular não for a mesma que o método de conversão padrão.

A dependência especial .USE define o equivalente ao macro.

_SUBDIRUSE: .USE
.for entry in ${SUBDIR}
        @${ECHO} "===> ${DIRPRFX}${entry}"
        @(cd ${.CURDIR}/${entry} && \
        ${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
.endfor

Acima, _SUBDIRUSE é agora um macro que irá executar comandos passados quando for listado como dependência.

O que configura este macro a parte de outros targets? Basicamente, é executado após as instruções passadas no processo de construção, são listados como uma dependência, e não o configura o .TARGET, que é a variável que contém o nome do target atual está sendo construído.

clean: _SUBDIRUSE
        rm -f ${CLEANFILES}

Acima, o clean irá usar o macro _SUBDIRUSE depois de ter executado a instrução rm -f ${CLEANFILES}. De fato, isto causa um clean na árvore de diretório, deletando arquivos construídos enquanto vai descendo aos subdiretórios.

7.3.2.2.1. Targets fornecidos

  • install e package, ambos vão abaixo na árvore de diretório requisitando a real versão deles nos subdiretórios. (realinstall e realpackage respectivamente)

  • O clean remove arquivos criados pelo processo de compilação (e também desce na árvore de diretórios também). O cleandir faz a mesma coisa, e também remove o diretório de objetos se este existir.

7.3.2.3. Mais condicionais

  • exists é outra função condicional que retorna verdadeiro se o arquivo dado existir.

  • empty retorna verdadeiro se a variável passada estiver vazia.

  • target retorna verdadeiro se o target passado já não existir.

7.3.2.4. Construção de Looping no make (.for)

.for fornece uma maneira de repetir instruções definidas para cada elemente separado por espaço em uma variável. Ele faz isso atribuíndo uma variável para conter o elemento atual na lista que está sendo examinada.

_SUBDIRUSE: .USE
.for entry in ${SUBDIR}
        @${ECHO} "===> ${DIRPRFX}${entry}"
        @(cd ${.CURDIR}/${entry} && \
        ${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
.endfor

Acima, se o SUBDIR está vazio, nenhuma ação é feita; se ele tiver um ou mais elementos, as instruções entre o .for e o .endfor repetiria para cada elemento, com o entry sendo substituída com o valor do elemento atual.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.