nativa

Reportar um problema Ver a fonte Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Um módulo integrado para oferecer suporte a regras nativas e outras funções auxiliares de pacote. Todas as regras nativas aparecem como funções neste módulo, por exemplo, native.cc_library. O módulo nativo só está disponível na fase de carregamento (ou seja, para macros, não para implementações de regras). Os atributos vão ignorar os valores None e tratá-los como se o atributo não estivesse definido.
As seguintes funções também estão disponíveis:

Membros

existing_rule

unknown native.existing_rule(name)

Retorna um objeto imutável semelhante a um dicionário que descreve os atributos de uma regra instanciada no pacote desta linha de execução ou None se não houver uma instância de regra com esse nome.

Aqui, um objeto imutável semelhante a um dicionário significa um objeto profundamente imutável x que oferece suporte à iteração semelhante a um dicionário, len(x), name in x, x[name], x.get(name), x.items(), x.keys() e x.values().

O resultado contém uma entrada para cada atributo, exceto os particulares (cujos nomes não começam com uma letra) e alguns tipos de atributos legados não representáveis. Além disso, o dicionário contém entradas para name e kind da instância da regra (por exemplo, 'cc_binary').

Os valores do resultado representam valores de atributos da seguinte forma:

  • Atributos do tipo str, int e bool são representados como estão.
  • Os rótulos são convertidos em strings do formato ':foo' para destinos no mesmo pacote ou '//pkg:name' para destinos em um pacote diferente.
  • As listas são representadas como tuplas, e os dicionários são convertidos em novos dicionários mutáveis. Os elementos deles são convertidos recursivamente da mesma forma.
  • Os valores de select são retornados com o conteúdo transformado conforme descrito acima.
  • Os atributos para os quais nenhum valor foi especificado durante a instanciação da regra e cujo valor padrão é calculado são excluídos do resultado. Os padrões calculados só podem ser computados na fase de análise.

Se possível, evite usar essa função. Isso torna os arquivos BUILD frágeis e dependentes da ordem. Além disso, ele difere sutilmente das outras duas conversões de valores de atributos de regra do formulário interno para Starlark: uma usada por padrões calculados e a outra usada por ctx.attr.foo.

Parâmetros

Parâmetro Descrição
name string; required
O nome do destino.

existing_rules

unknown native.existing_rules()

Retorna um objeto imutável semelhante a um dicionário que descreve as regras instanciadas até agora no pacote desta linha de execução. Cada entrada do objeto semelhante a um dicionário mapeia o nome da instância da regra para o resultado que seria retornado por existing_rule(name).

Aqui, um objeto imutável semelhante a um dicionário significa um objeto profundamente imutável x que oferece suporte à iteração semelhante a um dicionário, len(x), name in x, x[name], x.get(name), x.items(), x.keys() e x.values().

Observação: se possível, evite usar essa função. Isso torna os arquivos BUILD frágeis e dependentes da ordem.

exports_files

None native.exports_files(srcs, visibility=None, licenses=None)

Especifica uma lista de arquivos pertencentes a este pacote que são exportados para outros pacotes.

Parâmetros

Parâmetro Descrição
srcs sequence de strings; required
A lista de arquivos a serem exportados.
visibility sequence ou None. O padrão é None
. Uma declaração de visibilidade pode ser especificada. Os arquivos vão ficar visíveis para os destinos especificados. Se nenhuma visibilidade for especificada, os arquivos vão ficar visíveis para todos os pacotes.
licenses sequência de strings ou None. O padrão é None
. Licenças a serem especificadas.

glob

sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

O glob retorna uma lista nova, mutável e classificada de todos os arquivos no pacote atual que:
  • Corresponde a pelo menos um padrão em include.
  • Não corresponde a nenhum dos padrões em exclude (padrão []).
Se o argumento exclude_directories estiver ativado (definido como 1), os arquivos do tipo diretório serão omitidos dos resultados (padrão 1).

Parâmetros

Parâmetro Descrição
include sequence de strings; o padrão é []
A lista de padrões glob a serem incluídos.
exclude sequence de strings; o padrão é []
A lista de padrões glob a serem excluídos.
exclude_directories int; o padrão é 1
Uma flag que indica se os diretórios devem ser excluídos ou não.
allow_empty O padrão é unbound
Define se permitimos que padrões glob não correspondam a nada. Se `allow_empty` for False, cada padrão de inclusão individual precisará corresponder a algo, e o resultado final não poderá estar vazio (depois que as correspondências dos padrões de exclusão forem excluídas).

module_name

string native.module_name()

O nome do módulo do Bazel associado ao repositório em que o pacote está. Se o pacote for de um repositório definido em WORKSPACE em vez de MODULE.bazel, esse campo vai ficar vazio. Para repositórios gerados por extensões de módulo, esse é o nome do módulo que hospeda a extensão. É o mesmo que o campo module.name visto em module_ctx.modules. Pode retornar None.

module_version

string native.module_version()

A versão do módulo do Bazel associada ao repositório em que este pacote está. Se o pacote for de um repositório definido em WORKSPACE em vez de MODULE.bazel, esse campo vai ficar vazio. Para repositórios gerados por extensões de módulo, essa é a versão do módulo que hospeda a extensão. É o mesmo que o campo module.version visto em module_ctx.modules. Pode retornar None.

package_group

None native.package_group(name, packages=[], includes=[])

Essa função define um conjunto de pacotes e atribui um rótulo ao grupo. O rótulo pode ser referenciado em atributos visibility.

Parâmetros

Parâmetro Descrição
name string; required
O nome exclusivo dessa regra.
packages sequência de strings; o padrão é []
Uma enumeração completa de pacotes neste grupo.
includes sequence de strings; o padrão é []
Outros grupos de pacotes incluídos neste.

package_name

string native.package_name()

O nome do pacote que está sendo avaliado, sem o nome do repositório. Por exemplo, no arquivo BUILD some/package/BUILD, o valor será some/package. Se o arquivo BUILD chamar uma função definida em um arquivo .bzl, package_name() vai corresponder ao pacote do arquivo BUILD de chamada.

package_relative_label

Label native.package_relative_label(input)

Converte a string de entrada em um objeto Label, no contexto do pacote que está sendo inicializado (ou seja, o arquivo BUILD para o qual a macro atual está sendo executada). Se a entrada já for um Label, ela será retornada sem alterações.

Essa função só pode ser chamada ao avaliar um arquivo BUILD e as macros que ele chama direta ou indiretamente. Ela não pode ser chamada, por exemplo, em uma função de implementação de regra.

O resultado dessa função é o mesmo valor Label que seria produzido ao transmitir a string especificada a um atributo com valor de rótulo de um destino declarado no arquivo BUILD.

Observação de uso:a diferença entre essa função e Label() é que Label() usa o contexto do pacote do arquivo .bzl que o chamou, não o pacote do arquivo BUILD. Use Label() quando precisar se referir a uma meta fixa codificada na macro, como um compilador. Use package_relative_label() quando precisar normalizar uma string de rótulo fornecida pelo arquivo BUILD para um objeto Label. Não há como converter uma string em um Label no contexto de um pacote que não seja o arquivo BUILD ou o arquivo .bzl de chamada. Por isso, as macros externas sempre preferem transmitir objetos de rótulo para macros internas em vez de strings de rótulo.)

Parâmetros

Parâmetro Descrição
input string ou Label; required
A string de rótulo de entrada ou o objeto Label. Se um objeto de rótulo for transmitido, ele será retornado como está.

repo_name

string native.repo_name()

O nome canônico do repositório que contém o pacote em avaliação, sem arrobas iniciais.

repository_name

string native.repository_name()

Experimental. Essa API é experimental e pode mudar a qualquer momento. Não dependa dele. É possível ativar em caráter experimental definindo --+incompatible_enable_deprecated_label_apis
Descontinuado. Prefira usar repo_name, que não contém o sinal de arroba inicial espúrio, mas se comporta de maneira idêntica.

O nome canônico do repositório que contém o pacote em avaliação, com um único arroba (@) como prefixo. Por exemplo, em pacotes que são chamados pela estrofe WORKSPACE local_repository(name='local', path=...), ele será definido como @local. Em pacotes no repositório principal, ele será definido como @.

subpacotes

sequence native.subpackages(include, exclude=[], allow_empty=False)

Retorna uma nova lista mutável de todos os subpacotes diretos do pacote atual, independente da profundidade do diretório do sistema de arquivos. A lista retornada é classificada e contém os nomes dos subpacotes relativos ao pacote atual. Recomendamos usar os métodos no módulo bazel_skylib.subpackages em vez de chamar essa função diretamente.

Parâmetros

Parâmetro Descrição
include sequence de strings; required
A lista de padrões glob a serem incluídos na verificação de subpacotes.
exclude sequence de strings; o padrão é []
A lista de padrões glob a serem excluídos da verificação de subpacotes.
allow_empty bool; o padrão é False
Se vamos falhar se a chamada retornar uma lista vazia. Por padrão, uma lista vazia indica um possível erro no arquivo BUILD, em que a chamada para subpackages() é supérflua. Definir como "true" permite que essa função seja bem-sucedida nesse caso.