Capítulo 7. Flavors

Esta tradução pode estar desatualizada. Para ajudar com as traduções, acesse a ferramenta de traduções do FreeBSD .

Índice

7.1. Uma Introdução aos Flavors

Os flavors são uma maneira de ter várias variações de um port. O port é construído várias vezes, com variações.

Por exemplo, um port pode ter uma versão normal com muitos recursos e algumas dependências, e uma versão leve "lite" com apenas recursos básicos e dependências mínimas.

Outro exemplo poderia ser, um port pode ter um flavor GTK e um QT, dependendo de qual kit de ferramentas ele usa.

7.2. Usando FLAVORS

Para declarar um port com vários flavors, adicione FLAVORS no seu Makefile . O primeiro flavor em FLAVORS é o flavor padrão.

Isso pode ajudar a simplificar a lógica do Makefile para também definir um FLAVOR como:

FLAVOR?=	${FLAVORS:[1]}

Para distinguir os flavors das opções, que são sempre letras maiúsculas, os nomes dos flavors podem conter apenas letras minúsculas, números e underline _ .

Exemplo 1. Uso Básico de Flavors

Se um port tiver um port slave "lite", o port slave pode ser removido, e o port pode ser convertido em flavors com:

FLAVORS=	default lite
lite_PKGNAMESUFFIX=	-lite
[...]
.if ${FLAVOR:U} != lite
[enable non lite features]
.endif

O primeiro flavor é o padrão, e é chamado aqui de default . Não é uma obrigação e, se possível, use um nome de flavor mais específico, como em Outro Uso Básico de Flavors .

Exemplo 2. Outro Uso Básico de Flavors

Se um port tiver um port slave -nox11 , o port slave pode ser removido, e o port pode ser convertido em flavors com:

FLAVORS=	x11 nox11
FLAVOR?=	${FLAVORS:[1]}
nox11_PKGNAMESUFFIX=	-nox11
[...]
.if ${FLAVOR} == x11
[enable x11 features]
.endif
Exemplo 3. Uso Mais Complexo de Flavors

Aqui está um excerto ligeiramente editado do que está presente em devel/libpeas , um port que usa os flavors Python . Com as versões padrões do Python 2 e 3 sendo 2.7 e 3.6, ele irá automaticamente mudar para FLAVORS=py27 py36

USES=		gnome python
USE_PYTHON=	flavors (1)

.if ${FLAVOR:Upy27:Mpy2*} (2)
USE_GNOME=	pygobject3 (3)

CONFIGURE_ARGS+=	--enable-python2 --disable-python3

BUILD_WRKSRC=	${WRKSRC}/loaders/python (4)
INSTALL_WRKSRC=	${WRKSRC}/loaders/python (5)
.else # py3*
USE_GNOME+=	py3gobject3 (6)

CONFIGURE_ARGS+=	--disable-python2 --enable-python3 \
			ac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config (7)

BUILD_WRKSRC=	${WRKSRC}/loaders/python3 (8)
INSTALL_WRKSRC=	${WRKSRC}/loaders/python3 (9)
.endif

py34_PLIST=	${.CURDIR}/pkg-plist-py3 (10)
py35_PLIST=	${.CURDIR}/pkg-plist-py3 (11)
py36_PLIST=	${.CURDIR}/pkg-plist-py3 (12)
1 Este port não usa o USE_PYTHON=distutils mas precisa do flavor Python de qualquer maneira.
2 Para proteger contra o FLAVOR estar vazio, o que causaria um erro no make(1) , use ${FLAVOR:U} em comparações de strings em vez de ${FLAVOR} .
3 As ligações gobject3 doGnome Python têm dois nomes diferentes, um para Python2, pygobject3 e um para Python3, py3gobject3.
4 O script configure tem que ser executado em ${WRKSRC} , mas estamos interessados ​​apenas em compilar e instalar as partes Python 2 ou Python 3 do software, então configure os diretórios base de compilação e instalação apropriadamente.
5 Sugestão sobre o nome correto do caminho do script de configuração do Python 3.
6 A lista de empacotamento é diferente quando compilada com Python 3. Como existem três possíveis versões do Python3 , defina PLIST para todos os três usando o helper .

7.2.1. Flavors Helpers

Para tornar o Makefile mais fácil de ser escrito, existem alguns flavors helpers.

Esta lista de helpers definirá sua variável:

  • flavor_PKGNAMEPREFIX

  • flavor_PKGNAMESUFFIX

  • flavor_PLIST

  • flavor_DESCR

Esta lista de helpers será anexada à sua variável:

  • flavor_CONFLICTS

  • flavor_CONFLICTS_BUILD

  • flavor_CONFLICTS_INSTALL

  • flavor_PKG_DEPENDS

  • flavor_EXTRACT_DEPENDS

  • flavor_PATCH_DEPENDS

  • flavor_FETCH_DEPENDS

  • flavor_BUILD_DEPENDS

  • flavor_LIB_DEPENDS

  • flavor_RUN_DEPENDS

  • flavor_TEST_DEPENDS

Exemplo 4. Flavor Específico PKGNAME

Como todos os pacotes devem ter um nome de pacote diferente, os flavors devem mudar os seus, usando flavor_PKGNAMEPREFIX e o flavor_PKGNAMESUFFIX torna isso fácil:

FLAVORS=	normal lite
lite_PKGNAMESUFFIX=	-lite

7.3. USES=php e Flavors

Ao usar o USES=php com um destes argumentos, phpize , ext , zend ou pecl , o port terá automaticamente o FLAVORS preenchido com a versão PHP que ele suporta.

Todos os exemplos assumem que as versões PHP suportadas atualmente são 5.6, 7.0, 7.1 e 7.2.

Exemplo 5. Extensão Simples USES=php

Isso irá gerar o pacote para todas as versões suportadas:

PORTNAME=	some-ext
PORTVERSION=	0.0.1
PKGNAMEPREFIX=	${PHP_PKGNAMEPREFIX}

USES=		php:ext

Isto irá gerar pacotes para todas as versões suportadas, menos a 7.2:

PORTNAME=	some-ext
PORTVERSION=	0.0.1
PKGNAMEPREFIX=	${PHP_PKGNAMEPREFIX}

USES=		php:ext
IGNORE_WITH_PHP=	72

7.3.1. Flavors PHP com Aplicações PHP

Aplicações PHP também podem ter flavors.

Isso permite gerar pacotes para todas as versões do PHP, para que os usuários possam usá-los com qualquer versão que precisarem em seus servidores.

Aplicações PHP que são acrescidas de flavors devem acrescentar PHP_PKGNAMESUFFIX aos nomes dos pacotes.

Exemplo 6. Adicionando Flavors em uma Aplicação PHP

Incluir o suporte de Flavors em uma aplicação PHP é simples:

PKGNAMESUFFIX=	${PHP_PKGNAMESUFFIX}

USES=	php:flavors

Ao adicionar uma dependência em um port com flavors PHP, use @${PHP_FLAVOR} . Nunca use FLAVOR diretamente.

7.4. USES=python e Flavors

Ao usar USES=python e USE_PYTHON=distutils , o port irá automaticamente preencher FLAVORS com a versão Python que suporta.

Exemplo 7. Simples USES=python

Supondo que as versões suportadas do Python são 2.7, 3.4, 3.5 e 3.6, e a versão padrão do Python 2 e 3 são 2.7 e 3.6, um port com:

USES=	python
USE_PYTHON=	distutils

Receberá esses flavors: py27 e py36 .

USES=	python
USE_PYTHON=	distutils allflavors

Receberá esses flavors: py27 , py34 , py35 e py36 .

Exemplo 8. USES=python com Requisitos de Versão

Supondo que as versões suportadas do Python são 2.7, 3.4, 3.5 e 3.6, e a versão padrão do Python 2 e 3 são 2.7 e 3.6, um port com:

USES=	python:-3.5
USE_PYTHON=	distutils

Vai ter esse flavor: py27 .

USES=	python:-3.5
USE_PYTHON=	distutils allflavors

Receberá esses flavors: py27 , py34 e py35 .

USES=	python:3.4+
USE_PYTHON=	distutils

Vai ter esse flavor: py36 .

USES=	python:3.4+
USE_PYTHON=	distutils allflavors

Receberá esses flavors: py34 , py35 e py36 .

A variável PY_FLAVOR é disponibilizada para depender da versão correta dos módulos Python. Todas as dependências em ports Python com flavors devem usar PY_FLAVOR , e não FLAVOR diretamente.

Exemplo 9. Para um port que não usa distutils

Se a versão padrão do Python3 é 3.6, o seguinte irá definir a variável PY_FLAVOR para py36 :

RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}

USES=	python:3.5+

7.5. USES=lua e Flavors

Ao usar lua:module ou lua:flavors , o port terá automaticamente FLAVORS preenchidos com as versões Lua que suporta. No entanto, não se espera que aplicativos comuns (em vez de módulos Lua) usem este recurso; a maioria das aplicações que incorporam ou usam Lua simplesmente devem usar USES=lua .

LUA_FLAVOR está disponível (e deve ser usado) para depender da versão correta das dependências, independentemente do port usar os parâmetros flavors ou module .

Veja Usando Lua para maiores informações.


Última alteração em : 18 de fevereiro de 2025 por Fernando Apesteguía