Chapter 15. Ordem das Variáveis ​​nos Makefiles de Port

As primeiras seções do Makefile devem sempre vir na mesma ordem. Este padrão faz com que todos possam ler facilmente qualquer port sem ter que procurar variáveis em uma ordem aleatória.

A primeira linha de um Makefile é sempre um comentário contendo o ID de controle de versão do Subversion, seguido por uma linha vazia. Em novos ports, parece assim:

# $FreeBSD: head/pt_BR.ISO8859-1/books/porters-handbook/book.xml 54410 2020-08-05 22:13:01Z dbaio $

Nos ports existentes, o Subversion expandiu essa entrada ficando assim:

# $FreeBSD: head/pt_BR.ISO8859-1/books/porters-handbook/book.xml 54410 2020-08-05 22:13:01Z dbaio $

As seções e variáveis descritas aqui são obrigatórias em um port comum. Em um port slave, muitas seções e variáveis podem ser ignoradas.

Cada bloco seguinte deve ser separado do bloco anterior por uma única linha em branco.

Nos blocos a seguir, apenas defina as variáveis ​​que são requeridas pelo port. Defina essas variáveis ​​na ordem em que são mostradas aqui.

15.1. Bloco PORTNAME

Este bloco é o mais importante. Ele define o nome do port, a versão, o local do arquivo de distribuição e a categoria. As variáveis ​​devem estar nesta ordem:

15.2. Bloco PATCHFILES

Este bloco é opcional. As variáveis ​​são:

15.3. Bloco MAINTAINER

Este bloco é obrigatório. As variáveis ​​são:

15.4. Bloco LICENSE

Este bloco é opcional, embora seja altamente recomendado. As variáveis ​​são:

Se houver várias licenças, ordene as variáveis LICENSE_VAR_NOME pelo nome de licença.

15.5. Mensagens Genéricas BROKEN/IGNORE/DEPRECATED

Este bloco é opcional. As variáveis ​​são:

BROKEN_* e IGNORE_* podem ser qualquer variável genérica, por exemplo, IGNORE_amd64, BROKEN_FreeBSD_10, etc. Com exceção das variáveis ​​que dependem de uma variável USES, coloque essas em USES e USE_x. Por exemplo, IGNORE_WITH_PHP só funciona se php estiver definido e a variável BROKEN_SSL somente se ssl estiver definido.

Se o port estiver marcado como BROKEN quando algumas condições forem atendidas, e tais condições puderem ser testadas somente após incluir o bsd.port.options.mk ou bsd.port.pre.mk, então essas variáveis ​​devem ser definidas mais tarde, em O Restante das Variáveis.

15.6. O Bloco de Dependências

Este bloco é opcional. As variáveis ​​são:

15.7. Flavors

Este bloco é opcional.

Comece esta seção com as definições de FLAVORS. Continue com as possíveis variáveis assistentes de Flavors. Veja Usando FLAVORS para maiores informações.

Variáveis ​​de definição de construção não disponíveis como assistentes, usando .if ${FLAVOR:U} == foo devem ir em abaixo de suas respectivas seções.

15.8. USES e USE_x

Comece esta seção com a definição da variável USES e, em seguida, possíveis variáveis USE_x.

Mantenha as variáveis ​​relacionadas juntas. Por exemplo, se estiver usando a variável USE_GITHUB, coloque sempre as variáveis GH_* ​​logo após ela.

15.9. Variáveis ​​Padrão bsd.port.mk

Este bloco de seção é para variáveis ​​que podem ser definidas em bsd.port.mk que não pertencem a nenhum dos blocos de seção anteriores.

A ordem não é importante, no entanto, tente manter variáveis ​​semelhantes juntas. Por exemplo, variáveis ​​USERS e GROUPS. Variáveis ​​de configuração CONFIGURE* e *CONFIGURE. Lista de arquivos e diretórios PORTDOCS e PORTEXAMPLES.

15.10. Opções e Assistentes

Se o port usa o framework de opções, defina OPTIONS_DEFINE e OPTIONS_DEFAULT, então as outras variáveis OPTIONS*, depois as de descrições *DESC, e então os assistentes de opções. Tente e ordene todas essas variáveis alfabeticamente.

Exemplo 1. Exemplo de Ordenamento das Variáveis ​​de Opções

As opções FOO e BAR não possuem uma descrição padrão, portanto, é necessário escrever uma. As outras opções já possuem em Mk/bsd.options.desc.mk então escrever uma não é necessário. Opções DOCS e EXAMPLES usam os assistentes de destino para instalar seus arquivos, eles são mostrados aqui por completo, apesar de pertencerem a Os Targets, então outras variáveis ​​e destinos podem ser inseridos antes deles.

OPTIONS_DEFINE=	DOCS EXAMPLES FOO BAR
OPTIONS_DEFAULT=	FOO
OPTIONS_RADIO=	SSL
OPTIONS_RADIO_SSL=    OPENSSL GNUTLS
OPTIONS_SUB=	yes

BAR_DESC=		Enable bar support
FOO_DESC=		Enable foo support

BAR_CONFIGURE_WITH=	bar=${LOCALBASE}
FOO_CONFIGURE_ENABLE=	foo
GNUTLS_CONFIGURE_ON=	--with-ssl=gnutls
OPENSSL_CONFIGURE_ON=	--with-ssl=openssl

post-install-DOCS-on:
      ${MKDIR} ${STAGEDIR}${DOCSDIR}
      cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}

post-install-EXAMPLES-on:
      ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
      cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}

15.11. O Restante das Variáveis

E então, o restante das variáveis ​​que não são mencionadas nos blocos anteriores.

15.12. Os Targets

Depois que todas as variáveis ​​são definidas, targets opcionais make(1) podem ser definidos. Mantenha pre-* antes de post-* e na mesma ordem em que as diferentes etapas são executadas:

  • fetch

  • extract

  • patch

  • configure

  • build

  • install

  • test

Ao usar os assistentes de opções, os targets são classificados alfabeticamente, mas mantenha *-on antes do *-off. Quando também estiver usando o target principal, mantenha o target principal antes dos opcionais:

post-install:
	# install generic bits

post-install-DOCS-on:
	# Install documentation

post-install-X11-on:
	# Install X11 related bits

post-install-X11-off:
	# Install bits that should be there if X11 is disabled

Última alteração em: 1 de março de 2022 por Martin Waschbüsch