Meson package guidelines (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Meson package guidelines. Data da última tradução: 2020-09-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.jsNonfreeOCamlPerlPHPPythonRRubyRustVCSWebWine

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.

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

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, nesta ordem, 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: onde o código-fonte do projeto está armazenado como, por exemplo, em $pkgname ou $pkgname-$pkgver.
  • diretório de compilação: onde os arquivos de compilação serão armazenados pelo Meson; comumente chamado de build ou _build, mas é discricionário.

Usando o binário meson diretamente

Observe que --prefix=/usr sempre precisa ser passado para o binário meson porque os pacotes do Arch Linux não devem instalar arquivos em /usr/local, de acordo com Diretrizes de pacotes do Arch#Etiqueta de pacotes. A opção embutida --buildtype=plain 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[1]

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, --prefix), 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 meson_options.txt (se houver) e no meson.build. Procure por option(configurações) nestes arquivos, e leia as configurações.

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

Por exemplo, o gtranslator 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 -D gtk_doc=true, 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 meson test.

Exemplo:

check() {
  meson test -C build
}

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

Dica: ninja test -C build poderia ser usado diretamente.

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

package()

O empacotamento normalmente requer a execução apenas de meson install, 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 a variável de ambiente DESTDIR:

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

Modelo

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

makedepends=(meson)

build() {
  arch-meson $pkgname-$pkgver build
  meson compile -C build
}

check() {
  meson test -C build
}

package() {
  DESTDIR="$pkgdir" meson install -C build
}

Exemplos de pacotes

Esta é uma pequena lista de pacotes que usam o Meson. Veja outros pacotes na lista "Required by" no meson.

Veja também