**Meson** on järjestelmä tietokoneohjelman konfigurointiin lähdekoodista ja käännösautomaatioon. Meson tukee useita hakemistoja eri käännöksiä varten samasta lähdekoodista. Meson on toteutettu Python 3:lla ja julkaistu Apache 2.0 -lisenssillä.

Järjestelmässä on oma konfiguraatiokieli, joka tukee ehtolauseita. Meson tukee C-, C++-, D-, Java- ja Vala-kielillä tehtyä lähdekoodia.

Projektin on aloittanut suomalainen fyysikko Jussi Pakkanen jouluna 2012 ja ensimmäinen julkaisu oli kaksi kuukautta myöhemmin. Järjestelmä on nimetty mesonihiukkasen mukaan. Kriteerinä nimelle oli, että vastaavalla nimellä ei saanut ennestään olla Debian-pakettia tai SourceForge-projektia ja esimerkiksi *Gluon* ei siksi kelvannut nimeksi.

Taustaa
-------

Aikaisempi make oli hidas ja Makefile-syntaksi on ylläpidolle hankala. Evan Martin toteutti Ninja-työkalun make-ohjelman ongelmien vuoksi. Ninja ei toteuta eräitä asioita joita make-ohjelma toteutti vaan luottaa toisen ohjelman kuten Mesonin tuottamiin konfiguraatiotiedostoihin.

Mesonin konfiguraatiokieli ei ole Turing-täydellinen useiden syiden vuoksi, joista on yksi on mahdollinen työkalujen toteutuskielen vaihtaminen mikäli se osoittautuu pullonkaulaksi.

Meson pyrkii toistettaviin käännöksiin.

Esimerkki
---------

Esimerkki käännöksestä Meson-työkaluilla komentorivillä:

```
 $ cd ohjelma
 $ meson builddir
 $ cd builddir
 $ ninja

```

.. jossa *ohjelma* on hakemisto, jossa käännettävä ohjelma sijaitsee ja *builddir* on nimi käännöksen aikana käytettävälle hakemistolle.

`meson` tarkistaa saatavilla olevat riippuvuudet ja tekee tarvittavan konfiguraation käännöstä varten. Meson-järjestelmä ei salli käännöstä lähdekoodihakemistossa. `ninja` suorittaa varsinaisen käännöksen. Uudelleen kääntämiseen riittää komennon `ninja` ajaminen.

Oletuksena Meson käyttää Ninja-järjestelmää taustatyökaluna projektin kääntämiseen, mutta se tukee myös muita kuten Visual Studiota.
Ohjelmointiympäristö voi suorittaa kääntämisen Ninjan sijaan.

Käännöskonfiguraatio Mesonille voi olla seuraavankaltainen:

```
project('simple', 'c')
src = ['source1.c', 'source2.c', 'source3.c']
executable('myexe', src)

```

Tuki
----

Muun muassa X.Org-ohjelmisto on lisännyt tuen Meson-käännösjärjestelmälle vaihtoehtona GNU Autotoolsille. GNOME-projektilla on tavoitteena siirtyä Autotoolsista Meson-järjestelmään.

Muita Meson-järjestelmää käyttäviä projekteja ovat muun muassa Mesa 3D ja Wayland-projekti.

Kirjallisuutta
--------------

* Pakkanen, Jussi: *The Meson Manual*. Diffraction Labs, 2020. ISBN 978-952-94-2892-2. (englanniksi)

Lähteet
-------

1. ↑ . Tieto on haettu Wikidatasta.
2. 1 2 3 4 5 6 7  Tim Schürmann: A Better Builder *admin-magazine.com*. Viitattu 1.2.2020. (englanniksi)
3. 1 2 3  Meson/ The Meson build system *sourceforge.net*. Viitattu 1.2.2020. (englanniksi)[vanhentunut linkki]
4. ↑  Compiling D applications *mesonbuild.com*. Viitattu 1.2.2020. (englanniksi)
5. 1 2 3 4  Meson Frequently Asked Questions *mesonbuild.com*. Viitattu 1.2.2020. (englanniksi)
6. ↑  Ninja, a new build system *neugierig.org*.  6.2.2011. Viitattu 1.2.2020. (englanniksi)
7. ↑  David Röthlisberger: The Ninja build tool *lwn.net*.  16.11.2016. Viitattu 1.2.2020. (englanniksi)
8. ↑  Against The Use Of Programming Languages in Configuration Files *taint.org*.  18.2.2011. Viitattu 1.2.2020. (englanniksi)
9. ↑
10. ↑  Using Meson *mesonbuild.com*. Viitattu 1.2.2020. (englanniksi)
11. ↑  Meson sample *mesonbuild.com*. Viitattu 1.2.2020. (englanniksi)
12. ↑  The Meson Build System Is Being Fitted For The X.Org Server *phoronix.com*.  27.3.2017. Viitattu 19.10.2019. (englanniksi)
13. ↑  GNOME Goal: Port modules to use Meson build system *wiki.gnome.org*. Viitattu 19.10.2019. (englanniksi)
14. ↑  List of projects using Meson *mesonbuild.com*. Viitattu 1.2.2020. (englanniksi)