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_.*
OPTIONSOPTIONS_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
.endifO 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
OPTIONSOPTIONS_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
.endifNo 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_LISTPara 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_ARGSPara --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_ARGSPara 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_ARGSPara 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_ARGSUSE_**_DEPENDSVeja 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=""
.endifO 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 KEYvalue 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_USES= xorg 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
USES+= xorg
USE_XORG= x11 xextproto xext xrandr
.else
USE_OPENSSL= yes
.endifQuando a opção OPT é selecionada, para cada valor em , OPT_CONFIGURE_ENABLE--enable- será anexado a valorCONFIGURE_ARGS. Quando a opção OPT não for selecionada, --disable- será anexado a valorCONFIGURE_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
.endifQuando a opção OPT é selecionada, para cada valor em , OPT_CONFIGURE_WITH--with- será anexado a valorCONFIGURE_ARGS. Quando a opção OPT não for selecionada, --without- será anexado a valorCONFIGURE_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
.endifQuando a opção OPT é selecionada, o valor de , se definido, é anexado a OPT_CONFIGURE_ONCONFIGURE_ARGS. funciona da mesma maneira, quando OPT_CONFIGURE_OFFOPTnã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
.endifNa 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
.endifVeja 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
.endifQuando 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
.endifQuando 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
.endifQuando a opção OPT é selecionada, para cada entrada dentro da variável a entrada OPT_MESON_YES-D é anexada a variável =yesMESON_ARGS. Quando a opção OPTnão é selecionada, então a entrada -D é anexada a variável =noMESON_ARGS. O é o oposto, a entrada OPT_MESON_NO-D é anexada a variável =noMESON_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
.endifQuando 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
.endifQuando 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
.endifFornece 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
.endifOPT_IMPLIESEste 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_USES= xorg 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)
.endifA única diferença é que o primeiro irá apresentar um erro depois de executar make config, sugerindo alterar as opções selecionadas.
OPT_PREVENTSEste 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 conflictFornece 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
.endifValores 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
.endifPara 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
.endifAlgumas 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-OPT1-on:
@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile
post-patch-OPT1-off:
@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefileé equivalente a:
OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
post-patch:
.if ${PORT_OPTIONS:MOPT1}
@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile
.else
@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile
.endifAll 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>.