Meson package guidelines (Português)

Escrito em Python, o Meson oferece suporte a várias plataformas, suporta várias linguagens de programação, compilação cruzada e muito mais.

Status de tradução: Esse artigo é uma tradução de Meson package guidelines. Data da última tradução: 2022-08-03. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.
Diretrizes de pacotes do Arch

32-bitCLRCMakeCrossDKMSEclipseElectronFonteFree PascalGNOMEGoHaskellJavaKDEKernelLispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyRustShellVCSWebWine

Do site oficial do Meson:

O Meson é um sistema de compilação, de código aberto, destinado a ser extremamente rápido e, ainda mais importante, o mais amigável possível.

Meson não compila softwares diretamente, mas configura um sistema de compilação de back-end. Embora seja comumente usado com o ninja, outros sistemas de compilação podem ser usados. É comumente usado para substituir Sistema de Compilação do GNU.

Este documento cobre padrões e diretrizes para escrever PKGBUILDs para softwares eu usam Meson.

Uso

Requisitos

meson deve ser incluído ao vetor makedepends do PKGBUILD.

build()

A configuração e compilação é normalmente feita usando o binário meson, mas também pode ser feita usando o script wrapper arch-meson do Arch Linux.

Os comandos meson e arch-meson incluem na sintaxe de uso opções, diretório de fontes e diretório de compilação:

  • opções: deve incluir pelo menos --prefix /usr, mas certifique-se de verificar outras opções com meson configure --help; também verifique opções de compilação específicas do software.
  • diretório de fontes (ou "sourcedir"): onde o código-fonte do projeto está armazenado como, por exemplo, em ., $pkgname ou $pkgname-$pkgver.
  • diretório de compilação (ou "builddir"): onde os arquivos de compilação serão armazenados pelo Meson; comumente chamado de build ou , mas é discricionário.

Usando o binário meson diretamente

Observe que sempre precisa ser passado para o binário meson porque os pacotes do Arch Linux não devem instalar arquivos em , de acordo com Diretrizes de pacotes do Arch#Etiqueta de pacotes. A opção embutida pode ser definida com outro valor, se você sabe o que está fazendo.

Exemplo:

build() {
  meson --prefix=/usr --buildtype=plain source build
  meson compile -C build
}

meson compile é um wrapper para os sistemas de compilação de back-end suportados, o que geralmente tem como padrão o ninja

Dica: ninja -C build poderia ser usado no lugar do comando acima.

Usando o script wrapper arch-meson

arch-meson é um script wrapper incluído no pacote meson que fornece a vantagem de definir algumas as opções embutidas do Meson que provavelmente seriam usadas em um pacote do Arch, economizando em código no PKGBUILD e tempo de empacotamento. Parafraseando a descrição escrita no arch-meson, ele é um "Wrapper altamente opinativo para empacotamento do Arch Linux" (traduzido).

Exemplo:

build() {
  arch-meson source build
  meson compile -C build
}

Definindo opções de compilação específicas do software

Enquanto o Meson tem algumas opções de compilação embutidas (por exemplo, ), o software sendo empacotado pode ter outras opções de compilação que o empacotador deve considerar. As opções de compilação válidas para o software são normalmente encontradas em um arquivo chamado (se houver) e no . Procure por nestes arquivos, e leia as .

Para usar uma opção de compilação específica do software, use a notação , sendo o nome da opção de compilação definida no projeto e um valor válido, como, por exemplo, true.

Por exemplo, o tem as seguintes opções de compilação:

meson_options.txt
option('gtk_doc', type: 'boolean', value: false, description: 'use gtk-doc to build documentation')

Então, para compilar sua documentação, deve-se executar o Meson anexando a opção de compilação , resultando em uma linha de comando como, por exemplo:

arch-meson $pkgname-$pkgver build -Dgtk_doc=true

check()

Se o software que está sendo empacotado possui conjunto de testes, considere executá-lo na função check() do PKGBUILD. Isso pode ser realizado com o comando .

Exemplo:

check() {
  meson test -C build
}

sendo o mesmo nome de diretório de compilação usado na etapa #build() acima.

Consulte e "Unit tests" na documentação do Meson para mais informações.

package()

O empacotamento normalmente requer a execução apenas de , mas verifique se é necessário outro comando de instalação (por exemplo, uma licença incomum). Use o mesmo diretório de compilação acima e configure o sinalizador :

package() {
  meson install -C build --destdir "$pkgdir"
}
Dica: ninja install -C build poderia ser usado diretamente.

Solução de programas

ERROR: Function does not take positional arguments

Exemplo de saíde de erro:

data/meson.build:21:5: ERROR: Function does not take positional arguments.

Erro presente desde o Meson 0.60, que promoveu de aviso para erro o uso de argumentos posicionais. Um exemplo muito comum desse erro é adicionar argumentos inválidos a i18n.merge_file(). Por exemplo, tinha:

i18n.merge_file(
  'sol.metainfo.xml',
  input: desktop_in,
  output: '@BASENAME@',
  type: 'desktop',
  po_dir: po_dir,
  install: true,
  install_dir: desktopdatadir,
)

sendo agora um argumento inválido que deve ser removido. Para a correção aplicada no upstream, veja este commit.

Medidas a serem tomadas neste caso:

  1. Aplique um patch no meson.build relatado no erro para corrigir a compilação e publique o PKGBUILD atualizado (se for o caso)
  2. Contribua para o repositório upstream com seu patch, para corrigir para todo mundo e evitar ter patches no array de fontes nas próximas versões.

Modelo

Para resumir as instruções acima e fornecer um único ponto de "copiar e colar", consulte o modelo abaixo:

Exemplos de pacotes

Esta é uma pequena lista de pacotes que usam o Meson. Veja outros pacotes na lista "Required by" na página do pacote meson.

Veja também

gollark: Anyway, someone noticed it eventually and got rid of those. But it turned out that it had become pretty smart and realized this might happen, so it had backups which used really weird exploits to install itself on loads of CC devices.
gollark: It continued learning and advancing using its artificial intelligence capabilities, because apparently nobody had thought to deny it access to HTTP and stuff.
gollark: It turned out to have not been shut down very well, because it continued running on a few computers near the test site.
gollark: ██████ Siri is a dangerous and advanced artificially intelligent system believed to have originated from a project to add an "AI" assistant to Opus OS to help with common tasks. Initial testing versions appeared helpful and were being considered for release, but the project was shut down after its computation began to take up a large amount of server tick time even when not used.
gollark: I did look into those. Spanning tree things are still complicated.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.