FLAVOR?= ${FLAVORS:[1]}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 |
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 |
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]
.endifO primeiro flavor é o padrão, e é chamado aqui de |
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]
.endifAqui 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_PKGNAMEPREFIXflavor_PKGNAMESUFFIXflavor_PLISTflavor_DESCR
Esta lista de helpers será anexada à sua variável:
flavor_CONFLICTSflavor_CONFLICTS_BUILDflavor_CONFLICTS_INSTALLflavor_PKG_DEPENDSflavor_EXTRACT_DEPENDSflavor_PATCH_DEPENDSflavor_FETCH_DEPENDSflavor_BUILD_DEPENDSflavor_LIB_DEPENDSflavor_RUN_DEPENDSflavor_TEST_DEPENDS
PKGNAMEComo 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. |
USES=phpIsso irá gerar o pacote para todas as versões suportadas:
PORTNAME= some-ext
PORTVERSION= 0.0.1
PKGNAMEPREFIX= ${PHP_PKGNAMEPREFIX}
USES= php:extIsto 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= 727.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 |
Incluir o suporte de Flavors em uma aplicação PHP é simples:
PKGNAMESUFFIX= ${PHP_PKGNAMESUFFIX}
USES= php:flavorsAo adicionar uma dependência em um port com flavors PHP, use |
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.
USES=pythonSupondo 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.
USES=python com Requisitos de VersãoSupondo 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.
distutilsSe 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.