aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/pt-br/books/porters-handbook/flavors/_index.adoc
blob: 28bca6a0c585b1919162c4866ae894b6d1f56c59 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
---
title: Capítulo 7. Flavors
prev: books/porters-handbook/special
next: books/porters-handbook/plist
showBookMenu: true
weight: 7
path: "/books/porters-handbook/flavors/"
---

[[flavors]]
= Flavors
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 7
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/porters-handbook/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[flavors-intro]]
== 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.

[[flavors-using]]
== Usando FLAVORS

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

[TIP]
====
Isso pode ajudar a simplificar a lógica do [.filename]#Makefile# para também definir um `FLAVOR` como:

[.programlisting]
....
FLAVOR?=	${FLAVORS:[1]}
....

====

[IMPORTANT]
====
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 `_`.
====

[[flavors-using-ex1]]
.Uso Básico de Flavors
[example]
====
Se um port tiver um port slave "lite", o port slave pode ser removido, e o port pode ser convertido em flavors com:

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

[NOTE]
======
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 <<flavors-using-ex2>>.
======

====

[[flavors-using-ex2]]
.Outro Uso Básico de Flavors
[example]
====
Se um port tiver um port slave `-nox11`, o port slave pode ser removido, e o port pode ser convertido em flavors com:

[.programlisting]
....
FLAVORS=	x11 nox11
FLAVOR?=	${FLAVORS:[1]}
nox11_PKGNAMESUFFIX=	-nox11
[...]
.if ${FLAVOR} == x11
[enable x11 features]
.endif
....

====

[[flavors-using-ex3]]
.Uso Mais Complexo de Flavors
[example]
====
Aqui está um excerto ligeiramente editado do que está presente em package:devel/libpeas[], um port que usa os <<flavors-auto-python,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`

[.programlisting]
....
USES=		gnome python
USE_PYTHON=	flavors <.>

.if ${FLAVOR:Upy27:Mpy2*} <.>
USE_GNOME=	pygobject3 <.>

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

BUILD_WRKSRC=	${WRKSRC}/loaders/python <.>
INSTALL_WRKSRC=	${WRKSRC}/loaders/python <.>
.else # py3*
USE_GNOME+=	py3gobject3 <.>

CONFIGURE_ARGS+=	--disable-python2 --enable-python3 \
			ac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config <.>

BUILD_WRKSRC=	${WRKSRC}/loaders/python3 <.>
INSTALL_WRKSRC=	${WRKSRC}/loaders/python3 <.>
.endif

py34_PLIST=	${.CURDIR}/pkg-plist-py3 <.>
py35_PLIST=	${.CURDIR}/pkg-plist-py3 <.>
py36_PLIST=	${.CURDIR}/pkg-plist-py3 <.>
....

<.> Este port não usa o `USE_PYTHON=distutils` mas precisa do flavor Python de qualquer maneira.
<.> Para proteger contra o `FLAVOR` estar vazio, o que causaria um erro no man:make[1], use `${FLAVOR:U}` em comparações de strings em vez de `${FLAVOR}`.
<.> As ligações gobject3 doGnome Python têm dois nomes diferentes, um para Python2, pygobject3 e um para Python3, py3gobject3.
<.> O script `configure` tem que ser executado em [.filename]#${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.
<.> Sugestão sobre o nome correto do caminho do script de configuração do Python 3.
<.> 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 <<flavors-using-helpers,helper>>.
====

[[flavors-using-helpers]]
=== Flavors Helpers

Para tornar o [.filename]#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`

[[flavors-helpers-ex1]]
.Flavor Específico `PKGNAME`
[example]
====
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:

[.programlisting]
....
FLAVORS=	normal lite
lite_PKGNAMESUFFIX=	-lite
....

====

[[flavors-auto-php]]
== `USES=php` e Flavors

Ao usar o <<uses-php,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.

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

[[flavors-auto-php-ex1]]
.Extensão Simples `USES=php`
[example]
====
Isso irá gerar o pacote para todas as versões suportadas:

[.programlisting]
....
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:

[.programlisting]
....
PORTNAME=	some-ext
PORTVERSION=	0.0.1
PKGNAMEPREFIX=	${PHP_PKGNAMEPREFIX}

USES=		php:ext
IGNORE_WITH_PHP=	72
....

====

[[flavors-auto-php-app]]
=== 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.

[IMPORTANT]
====
Aplicações PHP que são acrescidas de flavors _devem_ acrescentar `PHP_PKGNAMESUFFIX` aos nomes dos pacotes.
====

[[flavors-auto-php-app-ex1]]
.Adicionando Flavors em uma Aplicação PHP
[example]
====
Incluir o suporte de Flavors em uma aplicação PHP é simples:

[.programlisting]
....
PKGNAMESUFFIX=	${PHP_PKGNAMESUFFIX}

USES=	php:flavors
....

====

[TIP]
====
Ao adicionar uma dependência em um port com flavors PHP, use `@${PHP_FLAVOR}`. _Nunca_ use `FLAVOR` diretamente.
====

[[flavors-auto-python]]
== `USES=python` e Flavors

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

[[flavors-auto-python-ex1]]
.Simples `USES=python`
[example]
====
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:

[.programlisting]
....
USES=	python
USE_PYTHON=	distutils
....

Receberá esses flavors: `py27` e `py36`.

[.programlisting]
....
USES=	python
USE_PYTHON=	distutils allflavors
....

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

[[flavors-auto-python-ex2]]
.`USES=python` com Requisitos de Versão
[example]
====
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:

[.programlisting]
....
USES=	python:-3.5
USE_PYTHON=	distutils
....

Vai ter esse flavor: `py27`.

[.programlisting]
....
USES=	python:-3.5
USE_PYTHON=	distutils allflavors
....

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

[.programlisting]
....
USES=	python:3.4+
USE_PYTHON=	distutils
....

Vai ter esse flavor: `py36`.

[.programlisting]
....
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.

[[flavors-auto-python-ex3]]
.Para um port que não usa `distutils`
[example]
====
Se a versão padrão do Python3 é 3.6, o seguinte irá definir a variável `PY_FLAVOR` para `py36`:

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

USES=	python:3.5+
....

====

[[flavors-auto-lua]]
== `USES=lua` e Flavors

Ao usar crossref:uses[uses-lua,`lua:module`] ou crossref:uses[uses-lua,`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 crossref:special[using-lua,Usando Lua] para maiores informações.