# Capítulo 7. Flavors

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

## 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

Anterior
Início
Próximo