nativa

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 ignoram valores None e os tratam como se o atributo não estivesse definido.
As seguintes funções também estão disponíveis:

Participantes

existing_rule

unknown native.existing_rule(name)

Retorna um objeto do tipo "dict" imutável que descreve os atributos de uma regra instanciada no pacote dessa linha de execução, ou None se não houver uma instância de regra com esse nome.

Aqui, um objeto imutável do tipo dict significa um objeto profundamente imutável x compatível com iteração semelhante a dict, len(x), name in x, x[name], x.get(name), x.items(), x.keys() e x.values().

Se a flag --noincompatible_existing_rules_immutable_view estiver definida, um novo dict mutável com o mesmo conteúdo será retornado.

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

Os valores do resultado representam os valores dos atributos da seguinte forma:

  • Os atributos do tipo str, int e bool são representados no estado em que se encontram.
  • Os rótulos são convertidos em strings no 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 dicts são convertidos em novos e mutáveis. Os elementos deles são convertidos recursivamente da mesma maneira.
  • Os valores select são retornados com o conteúdo transformado conforme descrito acima.
  • Os atributos sem valor especificado durante a instanciação da regra e com valor padrão calculado são excluídos do resultado. Os padrões calculados não podem ser calculados até a fase de análise.

Se possível, evite usar essa função. Isso torna os arquivos BUILD instáveis e dependentes da ordem. Além disso, saiba que ela difere sutilmente das outras duas conversões de valores de atributo de regra do formato interno para o Starlark: uma usada por padrões computados e outra usada por ctx.attr.foo.

Parâmetros

Parâmetro Descrição
name obrigatório
O nome do destino.

existing_rules

unknown native.existing_rules()

Retorna um objeto do tipo "dict" imutável que descreve as regras instanciadas até o momento no pacote dessa linha de execução. Cada entrada do objeto do tipo dict mapeia o nome da instância da regra para o resultado que seria retornado por existing_rule(name).

Aqui, um objeto imutável do tipo dict significa um objeto profundamente imutável x compatível com iteração semelhante a dict, len(x), name in x, x[name], x.get(name), x.items(), x.keys() e x.values().

Se a flag --noincompatible_existing_rules_immutable_view estiver definida, um novo dict mutável com o mesmo conteúdo será retornado.

Observação: se possível, evite usar essa função. Isso torna os arquivos BUILD instáveis e dependentes da ordem. Além disso, se a flag --noincompatible_existing_rules_immutable_view estiver definida, essa função poderá ser muito cara, especialmente se for chamada dentro de uma repetição.

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.

Parâmetros

Parâmetro Descrição
srcs sequence of strings; obrigatório
A lista de arquivos a serem exportados.
visibility sequence; or None; default = None
É possível especificar uma declaração de visibilidade. Os arquivos ficarão visíveis para os destinos especificados. Se nenhuma visibilidade for especificada, os arquivos vão ficar visíveis para todos os pacotes.
licenses sequence of strings; or None; padrão = None
Licenças a serem especificadas.

Globo

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

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

Parâmetros

Parâmetro Descrição
include sequence of strings; padrão = []
A lista de padrões glob a serem incluídos.
exclude sequence of strings; padrão = []
A lista de padrões glob a serem excluídos.
exclude_directories default = 1
Uma sinalização para excluir diretórios ou não.
allow_empty default = unbound
Indica se os padrões glob não correspondem 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 "excluir" 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 esse pacote for de um repositório definido no WORKSPACE em vez de MODULE.bazel, ele vai estar 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. Poderá voltar em None.

module_version

string native.module_version()

A versão do módulo Bazel associado ao repositório em que o pacote está. Se esse pacote for de um repositório definido no WORKSPACE em vez de MODULE.bazel, ele vai estar 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. Poderá voltar em 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 nos atributos visibility.

Parâmetros

Parâmetro Descrição
name obrigatório
O nome exclusivo desta regra.
packages sequence of strings; default = []
Uma enumeração completa de pacotes neste grupo.
includes sequence of strings; default = []
Outros grupos de pacotes incluídos neste.

package_name

string native.package_name()

O nome do pacote que está sendo avaliado. Por exemplo, no arquivo BUILD some/package/BUILD, o valor dele será some/package. Se o arquivo BUILD chamar uma função definida em um arquivo .bzl, package_name() corresponderá ao pacote de arquivo BUILD do autor da chamada. Essa função é equivalente à variável descontinuada PACKAGE_NAME.

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 inalterada.

Essa função só pode ser chamada durante a avaliação de um arquivo BUILD e as macros chamadas direta ou indiretamente; ela não pode ser chamada em (por exemplo) uma função de implementação de regra.

O resultado dessa função é o mesmo valor Label que seria produzido se a string fornecida fosse transmitida para um atributo com valor de rótulo de um destino declarado no arquivo BUILD.

Observação sobre o uso:a diferença entre essa função e Label() é que Label() usa o contexto do pacote do arquivo .bzl que a chamou, não o pacote do arquivo BUILD. Use Label() quando precisar se referir a um destino fixo que está fixado no código 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 é possível converter uma string em um Label no contexto de um pacote diferente do arquivo BUILD ou do arquivo .bzl de chamada. Por esse motivo, é recomendado que as macros externas sempre passem objetos Rótulo para macros internas em vez de strings de rótulos.

Parâmetros

Parâmetro Descrição
input string; or Label; obrigatório
A string do rótulo de entrada ou o objeto "Label". Se um objeto "Label" for passado, ele será retornado no estado em que se encontra.

repository_name

string native.repository_name()

O nome do repositório de onde a regra ou a extensão de build é chamada. Por exemplo, em pacotes que são chamados à existência pela estrofe local_repository(name='local', path=...) do WORKSPACE, ela será definida como @local. Em pacotes no repositório principal, ele será definido como @. Essa função é equivalente à variável descontinuada REPOSITORY_NAME.

subpacotes

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

Retorna uma nova lista mutável de cada subpacote direto do pacote atual, independentemente da profundidade do diretório do sistema de arquivos. A lista retornada é classificada e contém os nomes dos subpacotes relativos ao pacote atual. É recomendável 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 of strings; obrigatório
A lista de padrões glob a serem incluídos na verificação de subpacotes.
exclude sequence of strings; padrão = []
A lista de padrões glob a serem excluídos da verificação de subpacotes.
allow_empty default = False
Indica se falharemos se a chamada retornar uma lista vazia. Por padrão, a lista vazia indica um possível erro no arquivo BUILD em que a chamada para subpackages() é superflousa. Definir como verdadeiro permite que a função seja bem-sucedida nesse caso.