Meson package guidelines (Português)

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-bit
–
CLR
–
CMake
–
Cross
–
DKMS
–
Eclipse
–
Electron
–
Fonte
–
Free Pascal
–
GNOME
–
Go
–
Haskell
–
Java
–
KDE
–
Kernel
–
Lisp
–
Meson
–
MinGW
–
Node.js
–
Nonfree
–
OCaml
–
Perl
–
PHP
–
Python
–
R
–
Ruby
–
Rust
–
Shell
–
VCS
–
Web
–
Wine
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
.
prepare()
O Meson inclui uma utilidade para gerir subprojects, permitindo fazer download dos subprojects antes da configuração.
Correr esta utilidade em prepare() permite que build() e as etapas seguintes possam correr inteiramente offline.
Exemplo:
prepare() {
  meson subprojects download --sourcedir=
source
}
Note
Este passo não é necessário se o projeto não inclui subprojects ou quando estes são dados apenas como redundância a bibliotecas disponibilizadas pelo sistema.
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
_build
, mas é discricionário.
Nota
Não importa se o diretório de fontes é passado para o
meson
antes do diretório de compilação, e vice-versa, pois o Meson vai saber qual é qual e vai configurar o ambiente corretamente.
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.
O parâmetro
--print-errorlogs
pode ser adicionado ao
meson test
para relatar a saída produzida pelos testes que falharam junto com outras informações úteis como as variáveis de ambiente.
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 o sinalizador
--destdir
:
package() {
  meson install -C
build
--destdir "$pkgdir"
}
Nota
Anexar
DESTDIR="$pkgdir"
também uma alternativa válida ao
--destdir
.
[2]
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,
aisleriot
tinha:
i18n.merge_file(
  'sol.metainfo.xml',
  input: desktop_in,
  output: '@BASENAME@',
  type: 'desktop',
  po_dir: po_dir,
  install: true,
  install_dir: desktopdatadir,
)
sendo
'sol.metainfo.xml'
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:
Aplique um patch no meson.build relatado no erro para corrigir a compilação e publique o PKGBUILD atualizado (se for o caso)
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:
makedepends=(meson)

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

check() {
  meson test -C build --print-errorlogs
}

package() {
  meson install -C build --destdir "$pkgdir"
}
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
.
gstreamer
gnome-desktop
switchboard
cinnamon-desktop
networkmanager
xorg-server
Veja também
Site oficial do Meson
Lista de opções embutidas do Meson
Repositório de código-fonte do Meson no GitHub
Artigo do Meson no Wikipedia
meson(1)