# Obtendo o Meson

Meson é implementado em Python 3, e requer a versão 3.10 ou mais nova.
se o seu sistema operacional provê um gerenciador de pacotes, você deve
instalar o Meson com ele. Para plataformas que não tem um gerenciador de
pacotes, você precisa baixa-lo da [página inicial do Python]. Veja abaixo
[peculiaridades do Python3 específicas de plataformas](#platformspecific-install-quirks).

## Baixando o Meson

*Releases* do Meson podem ser baixadas da [página de releases do GitHub]
e você pode executar `./meson.py` de dentro do *release* ou do próprio repositório
do git sem fazer nada de especial.

No Windows, se você não instalar o Python com a opção do instalador que fazem
os *scripts* Python executáveis, você vai ter que executar `python
/path/to/meson.py`, onde `python` é o Python 3.10 ou mais novo.

O código de desenvolvimento mais recente pode ser obtido diretamente do [Git],
e nós lutamos para garatir que ele vai estar sempre funcionando e usável. Todos
*commits* passam por um processo de *pull-request* que executa CI e testam diversas
plataformas.

## Instalando o Meson com o pip

O Meson está disponível no [Indice de Pacotes do Python] e pode ser instalado com
`sudo pip3 install meson` que requer root e vai instala-lo para todo o sistema.

Se você já baixou uma cópia do código do Meson, você pode instalar com
`sudo pip3 install path/to/source/root/`.

Como alternativa, você pode usar o `pip3 install --user meson` que vai instalar
o Meson para o seu usuário e não requer nenhum privilégio especial. Esse comando
vai instalar o pacote em `~/.local/`, então você terá que adicionar `~/.local/bin`
para o seu `PATH`, e `sudo meson install` vai estar completamente quebrado já que
o programa não vai estar disponível para o root. Apeas use uma cópia de usuário do Meson
se você não se importa sobre instalar os projetos como root.

## Instalando o Meson e o Ninja com o instalador MSI

Nós provemos um instalador MSI na [página de *release* do GitHub] que pode ser usada
para instalar tanto o Meson quanto o Ninja de uma vez para o Windows. O instalador também
contém uma cópia integrada do Python, então scripts que usam o [módulo Python](Python-module.md)
e não tem nenhuma dependência externa vão continuar funcionando como esperado.

Por favor, note que essa é uma funcionalidade nova, então relatórios de bugs são esperados e bem-vindos!

## Dependências

Na maioria dos casos comums, você vai precisar do [executável do Ninja] para usar o *backend* do `ninja`,
que é o padrão no Meson. Esse *backend* pode ser usado em todas plataformas e com todas **toolchains**, incluindo o GCC,
Clang, Visual Studio, MinGW, ICC, ARMCC, etc.

Você deve usar a versão provida pelo seu gerenciador de pacotes se possível, caso contrário,
baixe o binário executável da [página de *release* do projeto Ninja](https://github.com/ninja-build/ninja/releases).

Se você apenas usa o *backend* do Visual Studio (`--backend=vs`) para gerar soluções do Visual Studio no Windows ou o
*backend* do XCode (`--backend=xcode`) para gerar projetos no macOS, você não precisa do Ninja.



# Peculiaridades de instalação específicas de plataformas

## Peculiaridades do Python 3 no Windows

Quando estiver instalando o Python 3, é altamente recomendável (mas não obrigatório)
que você selecione as opções do instalador como a seguir:

![passo 1 do instalador](images/py3-install-1.png "Ative 'Add Python 3.6 to PATH' e clique em 'Customize installation'")

![passo 2 do instalador](images/py3-install-2.png "Funcionalidade Opcional: garanta que 'pip' está ativado")

![passo 3 do instalador](images/py3-install-3.png "Opções Avançadas: ative 'Instalar para todos usuários'")

Com isso, você terá o `python` e o `pip` no `PATH`, e você poderá instalar o Meson com o pip. Você também vai poder
executar o comando `meson` em qualquer shell no Windows ao invés de ter que executar `py -3` com o caminho completo para
o *script* `meson.py`.

## Peculiaridades do Python 3 no MSYS2

Se você está usando o MSYS2 no Windows como seu ambiente de desenvolvimento,
por favor se certifique que você não esteja usando o pacote `msys/python` para
fornecer o Python 3. Uso o `mingw32/mingw-w64-i686-python3` ou o
If you are using MSYS2 on Windows as your development environment,
please make sure that you **do not use** the `msys/python` package to
provide Python 3. Use either `mingw32/mingw-w64-i686-python3` or `mingw64/mingw-w64-x86_64-python3`
dependendo de para qual *target* do MinGW você está compilando.

  [página de *release* do GitHub]: https://github.com/mesonbuild/meson/releases
  [Indice de Pacotes do Python]: https://pypi.python.org/pypi/meson/
  [Git]: https://github.com/mesonbuild/meson
  [página inicial do Python]: https://www.python.org/downloads/
  [executável do Ninja]: https://ninja-build.org/
