Jump to content

# 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: 2022-08-03. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

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:

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:

    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)

Category:

- Arch package guidelines (Português)

Meson package guidelines (Português)
Add topic