Meson 1.3.0 -koontijärjestelmän julkaisu on julkaistu, jolla rakennetaan projekteja, kuten X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME ja GTK. Meson-koodi on kirjoitettu Pythonilla ja lisensoitu Apache 2.0 -lisenssillä.
Mesonin tärkein kehitystavoite on tarjota nopea kokoonpanoprosessi yhdistettynä mukavuuteen ja helppokäyttöisyyteen. Maken sijaan koontiversio käyttää oletusarvoisesti Ninja-työkalupakkia, mutta myös muita taustaohjelmia, kuten xcode ja VisualStudio, voidaan käyttää. Järjestelmässä on sisäänrakennettu usean alustan riippuvuuskäsittelijä, jonka avulla voit käyttää Mesonia jakelupakettien rakentamiseen. Kokoonpanosäännöt on asetettu yksinkertaistetulla verkkotunnuskohtaisella kielellä, ne ovat käyttäjälle hyvin luettavia ja ymmärrettäviä (tekijöiden idean mukaan kehittäjän tulee käyttää sääntöjen kirjoittamiseen mahdollisimman vähän aikaa).
Ristikääntämistä ja rakentamista Linuxille, Illumos/Solarisille, FreeBSD:lle, NetBSD:lle, DragonFly BSD:lle, Haikulle, macOS:lle ja Windowsille GCC:n, Clangin, Visual Studion ja muiden kääntäjien avulla tuetaan. On mahdollista rakentaa projekteja eri ohjelmointikielillä, mukaan lukien C, C++, Fortran, Java ja Rust. Inkrementaalinen rakennustila on tuettu, jossa vain komponentit, jotka liittyvät suoraan edellisen koontiversion jälkeen tehtyihin muutoksiin, rakennetaan uudelleen. Mesonilla voidaan luoda toistettavia koontiversioita, joissa koontiversion suorittaminen eri ympäristöissä johtaa täysin identtisiin suoritettaviin tiedostoihin.
Meson 1.3:n tärkeimmät innovaatiot:
- Kääntäjän tarkistusmetodeilla compiler.compiles(), compiler.links() ja compiler.run() on nyt "werror: true" -asetus, joka käsittelee kääntäjän varoituksia virheinä (tätä voidaan käyttää varmistamaan, että koodi rakentuu ilman varoituksia).
- Lisätty has_define-metodi tarkistamaan, onko esikäsittelijä määritellyt symbolin.
- configure_file()-funktiolla on nyt macro_name-parametri, joka lisää makrosuojauksen kaksinkertaisen sisällyttämisen kautta "#include"-valitsimella ("include guards"), joka on muotoiltu C-makrojen tyyliin (tämä yksinkertaistaa dynaamisilla makronimillä varustettujen configure-tiedostojen luomista).
- configure_file()-funktioon on lisätty uusi tulostusmuoto: JSON ("output_format: json").
- c_std- ja cpp_std-parametrit tukevat nyt arvolistojen käyttöä (esim. "default_options: 'c_std=gnu11,c11'").
- Moduuleihin, jotka käyttävät CustomTargetia tiedostojen käsittelyyn, on lisätty mahdollisuus mukauttaa ninja-apuohjelman tuottamia viestejä.
- build_target "jar" on vanhentunut ja tilalle on tilalle tullut "jar()"-kutsu.
- 'env'-parametri on lisätty generator.process()-metodiin asettamaan ympäristömuuttuja, jonka kautta generaattori käsittelee syötettä.
- Kun nimetään suoritettaviin tiedostoihin liittyviä koontikohteita, päätteet, kuten "exectuable('foo', 'main.c', name_suffix: 'bar')", voivat luoda lisää suoritettavia tiedostoja samaan hakemistoon.
- Lisätty "vs_module_defs"-parametri exectuable()-funktioon, jotta voidaan käyttää def-tiedostoa, joka määrittelee shared_module()-funktiolle välitettävien funktioiden luettelon.
- Lisätty find_program()-funktioon 'default_options'-parametri vara-aliprojektin oletusasetusten asettamiseksi.
- Lisätty fs.relative_to()-metodi, joka palauttaa ensimmäisen argumentin suhteellisen polun suhteessa toiseen, jos ensimmäinen polku on olemassa. Esimerkiksi "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
- Funktioihin install_data()-, install_headers()- ja install_subdir() on lisätty parametri follow_symlinks. Kun se on asetettu, se varmistaa, että symbolisia linkkejä seurataan.
- int.to_string()-metodi sisältää nyt "fill"-parametrin merkkijonon täyttämiseksi etunollilla. Esimerkiksi message(n.to_string(fill: 3)) -funktion kutsuminen arvolla n=4 luo merkkijonon "004".
- Lisätty uusi kohde clang-tidy-fix, joka määrittää clang-tidy-apuohjelman suoritettavaksi "-fix"-lipulla.
- Käännöskomennon avulla voit nyt määrittää koontikohteelle loppuliitteen (TARGET_SUFFIX) ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]).
- Lisätty ympäristömuuttuja MESON_PACKAGE_CACHE_DIR korvaamaan pakettivälimuistin polun (subprojects/packagecache), esimerkiksi mahdollistaen yhteisen välimuistin käytön useissa projekteissa.
- Lisätty komento "meson setup --clearcache" pysyvän välimuistin tyhjentämiseksi.
- Kaikki kääntäjän tarkistusmetodit "has_*" tukevat nyt avainsanaa "required". Esimerkiksi avainsanan "assert(cc.has_function('joku_toiminto'))" sijaan voit nyt määrittää "cc.has_function('joku_toiminto', required: true)".
- Uusi avainsana rust_abi on lisätty shared_library()-, static_library()-, library()- ja shared_module()-funktioihin, jota tulisi käyttää vanhentuneen rust_crate_type-avainsanan sijaan.
Lähde: opennet.ru
