Muitas aplicações podem ser compiladas com configurações opcionais ou diferentes. Exemplos podem ser a escolha de linguagem natural (humana), GUI versus linha de comando ou qual tipo de banco de dados será suportado. Os usuários podem precisar de uma configuração diferente do padrão, portanto o sistema de ports fornece ganchos em que o autor do port pode usar para controlar qual variante será compilada. Suportar essas opções corretamente fará com que os usuários fiquem felizes, e efetivamente forneça dois ou mais ports pelo preço de um.
OPTIONS_
fornece ao usuário que está instalando o port uma caixa de diálogo mostrando as opções disponíveis e, em seguida, salva essas opções em *
${PORT_DBDIR}/${OPTIONS_NAME}/options
. Na próxima vez que o port for compilado, as opções serão reutilizadas. O padrão de PORT_DBDIR
é /var/db/ports
. OPTIONS_NAME
é a origem do port com um underline como o separador de espaço, por exemplo, dns/bind99 será dns_bind99
.
Quando o usuário executa make config
(ou executa make build
pela primeira vez), o framework verifica ${PORT_DBDIR}/${OPTIONS_NAME}/options
. Se esse arquivo não existir, os valores de OPTIONS_
são usados e uma caixa de diálogo é exibida onde as opções podem ser ativadas ou desativadas. Então as *
options
são salvas e as variáveis configuradas são utilizadas ao compilar o port.
Se uma nova versão do port adicionar novas OPTIONS
, a caixa de diálogo será apresentada ao usuário, já preenchido com os valores salvos das antigas OPTIONS
.
make showconfig
mostra a configuração salva. Use make rmconfig
para remover a configuração salva.
OPTIONS_DEFINE
contém uma lista de OPTIONS
para serem utilizadas. Elas são independentes umas das outras e não são agrupadas:
OPTIONS_DEFINE= OPT1 OPT2
Uma vez definido, as OPTIONS
são descritas (opcionalmente, mas fortemente recomendado):
OPT1_DESC= Describe OPT1 OPT2_DESC= Describe OPT2 OPT3_DESC= Describe OPT3 OPT4_DESC= Describe OPT4 OPT5_DESC= Describe OPT5 OPT6_DESC= Describe OPT6
ports/Mk/bsd.options.desc.mk
possui descrições para muitas OPTIONS
comuns. Geralmente são úteis, mas podem ser substituas se a descrição for insuficiente para o port.
Ao descrever as opções, visualize-as da perspectiva do usuário: “Qual funcionalidade ela muda?” e “Por que eu iria querer habilitar ela?” Não repita apenas o nome. Por exemplo, descrever a opção NLS
como “incluir suporte NLS” não ajuda o usuário, que já pode ver o nome da opção, mas pode não saber o que isso significa. Descrevendo-a como “Suporte a idiomas nativos por meio de utilitários gettext” é muito mais útil.
Os nomes das opções são sempre em letras maiúsculas. Não podem estar misturadas ou apenas em minúsculo.
OPTIONS
podem ser agrupadas como opções radio, onde apenas uma escolha de cada grupo é permitida:
OPTIONS_SINGLE= SG1 OPTIONS_SINGLE_SG1= OPT3 OPT4
Deve estar sempre selecionada uma de cada OPTIONS_SINGLE
para as opções serem válidas. Uma opção de cada grupo deve ser adicionada a OPTIONS_DEFAULT
.
OPTIONS
podem ser agrupadas como opções radio, onde nenhuma ou apenas uma escolha de cada grupo é permitida:
OPTIONS_RADIO= RG1 OPTIONS_RADIO_RG1= OPT7 OPT8
OPTIONS
também pode ser agrupadas como listas de “múltipla-escolha”, onde pelo menos uma opção deve estar habilitada:
OPTIONS_MULTI= MG1 OPTIONS_MULTI_MG1= OPT5 OPT6
OPTIONS
também pode ser agrupadas como listas de “múltipla-escolha”, onde nenhuma ou qualquer opção pode ser ativada:
OPTIONS_GROUP= GG1 OPTIONS_GROUP_GG1= OPT9 OPT10
OPTIONS
são desativadas por padrão, a menos que estejam listadas em OPTIONS_DEFAULT
:
OPTIONS_DEFAULT= OPT1 OPT3 OPT6
Definições de OPTIONS
devem aparecer antes da inclusão de bsd.port.options.mk
. Valores de PORT_OPTIONS
só podem ser testados após a inclusão de bsd.port.options.mk
. Inclusão de bsd.port.pre.mk
pode ser usado também, e ainda é amplamente usado em ports escritos antes da introdução de bsd.port.options.mk
. Mas esteja ciente de que algumas variáveis não funcionarão como esperado após a inclusão de bsd.port.pre.mk
, tipicamente algumas flags USE_
.*
OPTIONS
OPTIONS_DEFINE= FOO BAR OPTIONS_DEFAULT=FOO FOO_DESC= Option foo support BAR_DESC= Feature bar support # Will add --with-foo / --without-foo FOO_CONFIGURE_WITH= foo BAR_RUN_DEPENDS= bar:bar/bar .include <bsd.port.mk>
OPTIONS
Desmacadas.if ! ${PORT_OPTIONS:MEXAMPLES} CONFIGURE_ARGS+=--without-examples .endif
O formato acima não é recomendado. O método preferido é usar um configure knob para realmente ativar e desativar o recurso coincidindo com a opção:
# Will add --with-examples / --without-examples EXAMPLES_CONFIGURE_WITH= examples
OPTIONS
OPTIONS_DEFINE= EXAMPLES OPTIONS_DEFAULT= PGSQL LDAP SSL OPTIONS_SINGLE= BACKEND OPTIONS_SINGLE_BACKEND= MYSQL PGSQL BDB OPTIONS_MULTI= AUTH OPTIONS_MULTI_AUTH= LDAP PAM SSL EXAMPLES_DESC= Install extra examples MYSQL_DESC= Use MySQL as backend PGSQL_DESC= Use PostgreSQL as backend BDB_DESC= Use Berkeley DB as backend LDAP_DESC= Build with LDAP authentication support PAM_DESC= Build with PAM support SSL_DESC= Build with OpenSSL support # Will add USE_PGSQL=yes PGSQL_USE= pgsql=yes # Will add --enable-postgres / --disable-postgres PGSQL_CONFIGURE_ENABLE= postgres ICU_LIB_DEPENDS= libicuuc.so:devel/icu # Will add --with-examples / --without-examples EXAMPLES_CONFIGURE_WITH= examples # Check other OPTIONS .include <bsd.port.mk>
Essas opções estão sempre ativadas por padrão.
DOCS
— build and install documentation.
NLS
— Native Language Support.
EXAMPLES
— build and install examples.
IPV6
— IPv6 protocol support.
Não há necessidade de adicioná-las em OPTIONS_DEFAULT
. Para ativá-las e mostra-las na caixa de diálogo de seleção de opções, elas devem ser adicionadas em OPTIONS_DEFINE
.
Ao usar um script configure GNU, fique de olho em quais recursos opcionais são ativados por detecção automática. Desative explicitamente os recursos opcionais que não são necessários, adicionando --without-xxx
ou --disable-xxx
em CONFIGURE_ARGS
.
.if ${PORT_OPTIONS:MFOO} LIB_DEPENDS+= libfoo.so:devel/foo CONFIGURE_ARGS+= --enable-foo .endif
No exemplo acima, imagine que uma biblioteca libfoo está instalada no sistema. O usuário não quer que este aplicativo use libfoo, então ele desabilitou a opção na caixa de diálogo do make config
. Mas o script configure do aplicativo detecta a biblioteca presente no sistema e inclui seu suporte no executável resultante. Agora, quando o usuário decide remover libfoo do sistema, o sistema de ports não protesta (nenhuma dependência de libfoo foi registrada), e então o aplicativo quebra.
FOO_LIB_DEPENDS= libfoo.so:devel/foo # Will add --enable-foo / --disable-foo FOO_CONFIGURE_ENABLE= foo
Sob algumas circunstâncias, a sintaxe condicional abreviada pode causar problemas com construções complexas. Os erros são geralmente Malformed conditional
, e uma sintaxe alternativa pode ser usada.
.if !empty(VARIABLE:MVALUE)
como uma alternativa para
.if ${VARIABLE:MVALUE}
Existem algumas macros para ajudar a simplificar valores condicionais que diferem com base nas opções definidas. Para facilitar o acesso, é fornecida uma lista abrangente:
PLIST_SUB
, SUB_LIST
Para geração automática de %%
e OPT
%%%%NO_
, veja Seção 5.13.3.1, “OPT
%%OPTIONS_SUB
”.
Para uso mais complexo, veja Seção 5.13.3.11, “Substituição de Variáveis Genéricas,
e OPT
_VARIABLE
”.OPT
_VARIABLE
_OFF
CONFIGURE_ARGS
Para --enable-
e x
--disable-
, veja Seção 5.13.3.3.1, “x
”.OPT
_CONFIGURE_ENABLE
Para --with-
e x
--without-
, veja Seção 5.13.3.3.2, “x
”.OPT
_CONFIGURE_WITH
Para todos os outros casos, veja Seção 5.13.3.3.3, “
e OPT
_CONFIGURE_ON
”.OPT
_CONFIGURE_OFF
CMAKE_ARGS
Para argumentos que são booleanos (on
, off
, true
, false
, 0
, 1
) veja Seção 5.13.3.4.2, “
e OPT
_CMAKE_BOOL
”.OPT
_CMAKE_BOOL_OFF
Para todos os outros casos, veja Seção 5.13.3.4.1, “
e OPT
_CMAKE_ON
”.OPT
_CMAKE_OFF
MESON_ARGS
Para argumentos que precisam de true
ou false
, veja Seção 5.13.3.5.2, “
e OPT
_MESON_TRUE
”.OPT
_MESON_FALSE
Para argumentos que precisam de yes
ou no
, use Seção 5.13.3.5.3, “
e OPT
_MESON_YES
”.OPT
_MESON_NO
Para argumentos que precisam de true
ou false
, veja Seção 5.13.3.5.4, “
e OPT
_MESON_ENABLED
”.OPT
_MESON_DISABLED
Para todos os outros casos, use Seção 5.13.3.5.1, “
e OPT
_MESON_ON
”.OPT
_MESON_OFF
QMAKE_ARGS
USE_*
*
_DEPENDS
Veja Seção 5.13.3.10, “Dependências,
e OPT
_DEPTYPE
”.OPT
_DEPTYPE
_OFF
*
(Qualquer variável)As variáveis mais usadas possuem assistentes diretos, veja Seção 5.13.3.11, “Substituição de Variáveis Genéricas,
e OPT
_VARIABLE
”.OPT
_VARIABLE
_OFF
Para qualquer variável sem um assistente específico, veja Seção 5.13.3.9, “
e OPT
_VARS
”.OPT
_VARS_OFF
Quando uma opção precisa de outra opção para funcionar, veja Seção 5.13.3.7, “
”.OPT
_IMPLIES
Quando uma opção não funciona se outra também estiver ativada, consulte Seção 5.13.3.8, “
e OPT
_PREVENTS
”.OPT
_PREVENTS_MSG
Quando uma opção precisa de algum processamento extra, veja Seção 5.13.3.12, “Targets Adicionais de Compilação,
e target
-OPT
-on
”.target
-OPT
-off
Se OPTIONS_SUB
está definido com yes
então cada uma das opções adicionadas a OPTIONS_DEFINE
será adicionada em PLIST_SUB
e SUB_LIST
, por exemplo:
OPTIONS_DEFINE= OPT1 OPTIONS_SUB= yes
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} PLIST_SUB+= OPT1="" NO_OPT1="@comment " SUB_LIST+= OPT1="" NO_OPT1="@comment " .else PLIST_SUB+= OPT1="@comment " NO_OPT1="" SUB_LIST+= OPT1="@comment " NO_OPT1="" .endif
O valor de OPTIONS_SUB
é ignorado. Definindo-o com qualquer valor irá adicionar entradas PLIST_SUB
e SUB_LIST
para todas as opções.
Quando a opção OPT
é selecionada, para cada par
em key
=value
, OPT
_USEvalue
é anexado ao USE_
correspondente. E se KEY
value
tiver espaços, substitua-os por vírgulas e eles serão alterados de volta para espaços durante o processamento.
funciona da mesma maneira, quando OPT
_USE_OFFOPT
não for selecionada. Por exemplo:
OPTIONS_DEFINE= OPT1 OPT1_USE= mysql=yes xorg=x11,xextproto,xext,xrandr OPT1_USE_OFF= openssl=yes
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} USE_MYSQL= yes USE_XORG= x11 xextproto xext xrandr .else USE_OPENSSL= yes .endif
Quando a opção OPT
é selecionada, para cada valor
em
, OPT
_CONFIGURE_ENABLE--enable-
será anexado a valor
CONFIGURE_ARGS
. Quando a opção OPT
não for selecionada, --disable-
será anexado a valor
CONFIGURE_ARGS
. Um argumento opcional pode ser especificado com um símbolo =
. Este argumento é apenas anexado na entrada de opção do script configure --enable-
. Por exemplo:valor
OPTIONS_DEFINE= OPT1 OPT2 OPT1_CONFIGURE_ENABLE= test1 test2 OPT2_CONFIGURE_ENABLE= test2=exhaustive
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} CONFIGURE_ARGS+= --enable-test1 --enable-test2 .else CONFIGURE_ARGS+= --disable-test1 --disable-test2 .endif .if ${PORT_OPTIONS:MOPT2} CONFIGURE_ARGS+= --enable-test2=exhaustive .else CONFIGURE_ARGS+= --disable-test2 .endif
Quando a opção OPT
é selecionada, para cada valor
em
, OPT
_CONFIGURE_WITH--with-
será anexado a valor
CONFIGURE_ARGS
. Quando a opção OPT
não for selecionada, --without-
será anexado a valor
CONFIGURE_ARGS
. Um argumento opcional pode ser especificado com um símbolo =
. Este argumento é apenas anexado na entrada de opção do script configure --with-
. Por exemplo:valor
OPTIONS_DEFINE= OPT1 OPT2 OPT1_CONFIGURE_WITH= test1 OPT2_CONFIGURE_WITH= test2=exhaustive
é equivalente a:
OPTIONS_DEFINE= OPT1 OPT2 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} CONFIGURE_ARGS+= --with-test1 .else CONFIGURE_ARGS+= --without-test1 .endif .if ${PORT_OPTIONS:MOPT2} CONFIGURE_ARGS+= --with-test2=exhaustive .else CONFIGURE_ARGS+= --without-test2 .endif
Quando a opção OPT
é selecionada, o valor de
, se definido, é anexado a OPT
_CONFIGURE_ONCONFIGURE_ARGS
.
funciona da mesma maneira, quando OPT
_CONFIGURE_OFFOPT
não for selecionada. Por exemplo:
OPTIONS_DEFINE= OPT1 OPT1_CONFIGURE_ON= --add-test OPT1_CONFIGURE_OFF= --no-test
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} CONFIGURE_ARGS+= --add-test .else CONFIGURE_ARGS+= --no-test .endif
Na maioria das vezes, os assistentes em Seção 5.13.3.3.1, “
” e Seção 5.13.3.3.2, “OPT
_CONFIGURE_ENABLE
” fornecem uma funcionalidade mais curta e abrangente. OPT
_CONFIGURE_WITH
Quando a opção OPT
é selecionada, o valor de
, se definido, é anexado a OPT
_CMAKE_ONCMAKE_ARGS
.
funciona da mesma maneira, mas quando OPT
_CMAKE_OFFOPT
não for selecionada. Por exemplo:
OPTIONS_DEFINE= OPT1 OPT1_CMAKE_ON= -DTEST:BOOL=true -DDEBUG:BOOL=true OPT1_CMAKE_OFF= -DOPTIMIZE:BOOL=true
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} CMAKE_ARGS+= -DTEST:BOOL=true -DDEBUG:BOOL=true .else CMAKE_ARGS+= -DOPTIMIZE:BOOL=true .endif
Veja Seção 5.13.3.4.2, “
e OPT
_CMAKE_BOOL
” para um assistente mais curto quando o valor for booleano. OPT
_CMAKE_BOOL_OFF
Quando a opção OPT
é selecionada, para cada valor
em
, OPT
_CMAKE_BOOL-D
será anexado a valor
:BOOL=trueCMAKE_ARGS
. Quando a opção OPT
não for selecionada, -D
será anexado a valor
:BOOL=falseCONFIGURE_ARGS
. O
é o oposto, OPT
_CMAKE_BOOL_OFF-D
será anexado a valor
:BOOL=falseCMAKE_ARGS
quando a opção é selecionada, e a entrada -D
quando a opção não for selecionada. Por exemplo:valor
:BOOL=true
OPTIONS_DEFINE= OPT1 OPT1_CMAKE_BOOL= TEST DEBUG OPT1_CMAKE_BOOL_OFF= OPTIMIZE
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} CMAKE_ARGS+= -DTEST:BOOL=true -DDEBUG:BOOL=true \ -DOPTIMIZE:BOOL=false .else CMAKE_ARGS+= -DTEST:BOOL=false -DDEBUG:BOOL=false \ -DOPTIMIZE:BOOL=true .endif
Quando a opção OPT
é selecionada, o valor de
, se definido, é anexado a OPT
_MESON_ONMESON_ARGS
.
funciona da mesma maneira, quando OPT
_MESON_OFFOPT
não for selecionada. Por exemplo:
OPTIONS_DEFINE= OPT1 OPT1_MESON_ON= -Dopt=1 OPT1_MESON_OFF= -Dopt=2
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} MESON_ARGS+= -Dopt=1 .else MESON_ARGS+= -Dopt=2 .endif
Quando a opção OPT
é selecionada, para cada valor
em
, OPT
_MESON_TRUE-D
será anexado a valor
=trueMESON_ARGS
. Quando a opção OPT
não for selecionada, -D
será anexado a valor
=falseMESON_ARGS
. O
é o oposto, a entrada OPT
_MESON_FALSE-D
será anexado a valor
=falseMESON_ARGS
quando a opção for selecionada e a entrada -D
quando a opção não for selecionada. Por exemplo:valor
=true
OPTIONS_DEFINE= OPT1 OPT1_MESON_TRUE= test debug OPT1_MESON_FALSE= optimize
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} MESON_ARGS+= -Dtest=true -Ddebug=true \ -Doptimize=false .else MESON_ARGS+= -Dtest=false -Ddebug=false \ -Doptimize=true .endif
Quando a opção OPT
é selecionada, para cada entrada
dentro da variável
a entrada OPT
_MESON_YES-D
é anexada a variável =yes
MESON_ARGS
. Quando a opção OPT
não é selecionada, então a entrada -D
é anexada a variável =no
MESON_ARGS
. O
é o oposto, a entrada OPT
_MESON_NO-D
é anexada a variável =no
MESON_ARGS
quando a opção é selecionada e a entrada -D
quando a opção não é selecionada. Por exemplo:=yes
OPTIONS_DEFINE= OPT1 OPT1_MESON_YES= test debug OPT1_MESON_NO= optimize
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} MESON_ARGS+= -Dtest=yes -Ddebug=yes \ -Doptimize=no .else MESON_ARGS+= -Dtest=no -Ddebug=no \ -Doptimize=yes .endif
Quando a opção OPT
é selecionada, para cada valor
em
, OPT
_MESON_ENABLED-D
será anexado a valor
=enabledMESON_ARGS
. Quando a opção OPT
não for selecionada, -D
será anexado a valor
=disabledMESON_ARGS
. O
é o oposto, a entrada OPT
_MESON_DISABLED-D
será anexado a valor
=disabledMESON_ARGS
quando a opção for selecionada e a entrada -D
quando a opção não for selecionada. Por exemplo:valor
=enabled
OPTIONS_DEFINE= OPT1 OPT1_MESON_ENABLED= test OPT1_MESON_DISABLED= debug
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} MESON_ARGS+= -Dtest=enabled -Ddebug=disabled .else MESON_ARGS+= -Dtest=disabled -Ddebug=enabled .endif
Quando a opção OPT
é selecionada, o valor de
, se definido, é anexado a OPT
_QMAKE_ONQMAKE_ARGS
.
funciona da mesma maneira, quando OPT
_QMAKE_OFFOPT
não for selecionada. Por exemplo:
OPTIONS_DEFINE= OPT1 OPT1_QMAKE_ON= -DTEST:BOOL=true OPT1_QMAKE_OFF= -DPRODUCTION:BOOL=true
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} QMAKE_ARGS+= -DTEST:BOOL=true .else QMAKE_ARGS+= -DPRODUCTION:BOOL=true .endif
Fornece uma maneira de adicionar dependências entre as opções.
Quando OPT
for selecionada, todas as opções listadas nesta variável também serão selecionadas. Usando o
descrito anteriormente para demonstrar: OPT
_CONFIGURE_ENABLE
OPTIONS_DEFINE= OPT1 OPT2 OPT1_IMPLIES= OPT2 OPT1_CONFIGURE_ENABLE= opt1 OPT2_CONFIGURE_ENABLE= opt2
É equivalente a:
OPTIONS_DEFINE= OPT1 OPT2 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} CONFIGURE_ARGS+= --enable-opt1 .else CONFIGURE_ARGS+= --disable-opt1 .endif .if ${PORT_OPTIONS:MOPT2} || ${PORT_OPTIONS:MOPT1} CONFIGURE_ARGS+= --enable-opt2 .else CONFIGURE_ARGS+= --disable-opt2 .endif
OPT
_IMPLIES
Este port tem uma opção X11
e uma opção GNOME
que precisa da opção X11
selecionada para poder compilar.
OPTIONS_DEFINE= X11 GNOME OPTIONS_DEFAULT= X11 X11_USE= xorg=xi,xextproto GNOME_USE= gnome=gtk30 GNOME_IMPLIES= X11
Fornece uma maneira de adicionar conflitos entre as opções.
Quando OPT
for selecionada, todas as opções listadas em
devem estar desmarcadas. Se OPT
_PREVENTS
estiver definido e um conflito for acionado, seu conteúdo será exibido explicando o por que do conflito. Por exemplo:OPT
_PREVENTS_MSG
OPTIONS_DEFINE= OPT1 OPT2 OPT1_PREVENTS= OPT2 OPT1_PREVENTS_MSG= OPT1 and OPT2 enable conflicting options
É aproximadamente equivalente a:
OPTIONS_DEFINE= OPT1 OPT2 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1} BROKEN= Option OPT1 conflicts with OPT2 (select only one) .endif
A única diferença é que o primeiro irá apresentar um erro depois de executar make config
, sugerindo alterar as opções selecionadas.
OPT
_PREVENTS
Este port tem as opções X509
e SCTP
. Ambas as opções adicionam patches, mas os patches entram em conflito uns com os outros, então eles não podem ser selecionados ao mesmo tempo.
OPTIONS_DEFINE= X509 SCTP SCTP_PATCHFILES= ${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1 SCTP_CONFIGURE_WITH= sctp X509_PATCH_SITES= http://www.roumenpetrov.info/openssh/x509/:x509 X509_PATCHFILES= ${PORTNAME}-7.0p1+x509-8.5.diff.gz:-p1:x509 X509_PREVENTS= SCTP X509_PREVENTS_MSG= X509 and SCTP patches conflict
Fornece uma maneira genérica de definir e acrescentar valores em variáveis.
Antes de usar
e OPT
_VARS
, veja se já não existe um assistente mais específico disponível em Seção 5.13.3.11, “Substituição de Variáveis Genéricas, OPT
_VARS_OFF
e OPT
_VARIABLE
”.OPT
_VARIABLE
_OFF
Quando a opção OPT
está selecionada e
definido, os pares OPT
_VARS
e chave
=valor
são avaliados a partir da variável chave
+=valor
. Um OPT
_VARS=
sobrescreve o valor existente da CHAVE
, um +=
acrescenta o valor a chave.
funciona da mesma maneira, quando a opção OPT
_VARS_OFFOPT
não for selecionada.
OPTIONS_DEFINE= OPT1 OPT2 OPT3 OPT1_VARS= also_build+=bin1 OPT2_VARS= also_build+=bin2 OPT3_VARS= bin3_build=yes OPT3_VARS_OFF= bin3_build=no MAKE_ARGS= ALSO_BUILD="${ALSO_BUILD}" BIN3_BUILD="${BIN3_BUILD}"
é equivalente a:
OPTIONS_DEFINE= OPT1 OPT2 MAKE_ARGS= ALSO_BUILD="${ALSO_BUILD}" BIN3_BUILD="${BIN3_BUILD}" .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} ALSO_BUILD+= bin1 .endif .if ${PORT_OPTIONS:MOPT2} ALSO_BUILD+= bin2 .endif .if ${PORT_OPTIONS:MOPT2} BIN3_BUILD= yes .else BIN3_BUILD= no .endif
Valores contendo espaços em branco devem ser colocados entre aspas:
OPT_VARS= foo="bar baz"
Isso se deve ao jeito que a variável de expansão make(1) lida com espaço em branco. Quando a opção OPT_VARS=foo=bar baz
é expandida, a variável acaba contendo duas strings, foo=bar
e baz
. Mas quem está submetendo o código provavelmente pretendia que houvesse apenas uma string, foo=bar baz
. Inserir o valor entre aspas impede que o espaço em branco seja usado como um delimitador.
Além disso, não adicione espaços extras após o símbolo
e antes do valor, pois assim também seria dividido o valor em duas strings. Isso não irá funcionar:var
=
OPT_VARS= foo= bar
Para qualquer um desses tipos de dependência:
PKG_DEPENDS
EXTRACT_DEPENDS
PATCH_DEPENDS
FETCH_DEPENDS
BUILD_DEPENDS
LIB_DEPENDS
RUN_DEPENDS
Quando opção OPT
é selecionada, o valor de
, se definido, é anexado a OPT
_DEPTYPE
. DEPTYPE
funciona da mesma forma, quando OPT
_DEPTYPE
_OFFOPT
não for selecionada. Por exemplo:
OPTIONS_DEFINE= OPT1 OPT1_LIB_DEPENDS= liba.so:devel/a OPT1_LIB_DEPENDS_OFF= libb.so:devel/b
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} LIB_DEPENDS+= liba.so:devel/a .else LIB_DEPENDS+= libb.so:devel/b .endif
Para qualquer uma destas variáveis:
ALL_TARGET
BINARY_ALIAS
BROKEN
CATEGORIES
CFLAGS
CONFIGURE_ENV
CONFLICTS
CONFLICTS_BUILD
CONFLICTS_INSTALL
CPPFLAGS
CXXFLAGS
DESKTOP_ENTRIES
DISTFILES
EXTRACT_ONLY
EXTRA_PATCHES
GH_ACCOUNT
GH_PROJECT
GH_SUBDIR
GH_TAGNAME
GH_TUPLE
GL_ACCOUNT
GL_COMMIT
GL_PROJECT
GL_SITE
GL_SUBDIR
GL_TUPLE
IGNORE
INFO
INSTALL_TARGET
LDFLAGS
LIBS
MAKE_ARGS
MAKE_ENV
MASTER_SITES
PATCHFILES
PATCH_SITES
PLIST_DIRS
PLIST_FILES
PLIST_SUB
PORTDOCS
PORTEXAMPLES
SUB_FILES
SUB_LIST
TEST_TARGET
USES
Quando a opção OPT
é selecionada, o valor da variável
, se definido, é anexado a OPT
_ABOVEVARIABLE
. ABOVEVARIABLE
funciona da mesma maneira, quando OPT
_ABOVEVARIABLE
_OFFOPT
não for selecionada. Por exemplo:
OPTIONS_DEFINE= OPT1 OPT1_USES= gmake OPT1_CFLAGS_OFF= -DTEST
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} USES+= gmake .else CFLAGS+= -DTEST .endif
Algumas variáveis não estão nesta lista, em particular PKGNAMEPREFIX
e PKGNAMESUFFIX
. Isso é intencional. Um port não deve mudar seu nome quando alguma de suas opções forem alteradas.
Algumas dessas variáveis, pelo menos ALL_TARGET
, DISTFILES
e INSTALL_TARGET
, tem seus valores padrão definidos depois das opções serem processadas.
Com estas linhas no Makefile
:
ALL_TARGET= all DOCS_ALL_TARGET= doc
Se a opção DOCS
estiver ativada, ALL_TARGET
terá o valor all doc
; se a opção estiver desativada, ela terá o valor all
.
Com apenas a linha do assistente de opções no Makefile
:
DOCS_ALL_TARGET= doc
Se a opção DOCS
estiver ativada, ALL_TARGET
terá o valor doc
; se a opção estiver desativada, ela terá o valor all
.
Estes targets de Makefile
podem aceitar targets extras de compilação:
pre-fetch
do-fetch
post-fetch
pre-extract
do-extract
post-extract
pre-patch
do-patch
post-patch
pre-configure
do-configure
post-configure
pre-build
do-build
post-build
pre-install
do-install
post-install
post-stage
pre-package
do-package
post-package
Quando a opção OPT
é selecionada, o target
, se definido, é executado após TARGET
-OPT
-on
. TARGET
funciona da mesma maneira, quando TARGET
-OPT
-offOPT
não for selecionada. Por exemplo:
OPTIONS_DEFINE= OPT1 post-patch: @${REINPLACE_CMD} -e 's/echo/true/' ${WRKSRC}/Makefile post-patch-OPT1-on: @${REINPLACE_CMD} -e '/opt1/d' ${WRKSRC}/Makefile post-patch-OPT1-off: @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${LOCALBASE}/bin/|' ${WRKSRC}/Makefile
é equivalente a:
OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> post-patch: @${REINPLACE_CMD} -e 's/echo/true/' ${WRKSRC}/Makefile .if ${PORT_OPTIONS:MOPT1} @${REINPLACE_CMD} -e '/opt1/d' ${WRKSRC}/Makefile .else @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${LOCALBASE}/bin/|' ${WRKSRC}/Makefile .endif
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.