Objavljeno je izdanje Meson 1.3.0 build sistema koji se koristi za izgradnju projekata kao što su X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME i GTK. Meson kod je napisan u Python-u i licenciran je pod licencom Apache 2.0.
Ključni razvojni cilj Meson-a je da obezbedi visoku brzinu procesa montaže u kombinaciji sa praktičnošću i lakoćom upotrebe. Umjesto make, build koristi Ninja komplet alata prema zadanim postavkama, ali se mogu koristiti i drugi backendovi kao što su xcode i VisualStudio. Sistem ima ugrađeni višeplatformski rukovalac zavisnosti koji vam omogućava da koristite Meson za pravljenje paketa za distribucije. Pravila asemblera su postavljena na pojednostavljenom jeziku specifičnom za domenu, dobro su čitljiva i razumljiva korisniku (prema ideji autora, programer bi trebao potrošiti minimum vremena na pisanje pravila).
Podržano je unakrsno kompajliranje i izgradnja na Linuxu, Illumos/Solarisu, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS i Windows koristeći GCC, Clang, Visual Studio i druge kompajlere. Moguće je graditi projekte u različitim programskim jezicima, uključujući C, C++, Fortran, Java i Rust. Podržan je inkrementalni način gradnje, u kojem se ponovo izgrađuju samo komponente koje su direktno povezane s promjenama napravljenim od posljednje izgradnje. Meson se može koristiti za generiranje ponovljivih build-ova, pri čemu pokretanje build-a u različitim okruženjima rezultira potpuno identičnim izvršnim programima.
Glavne inovacije Meson 1.3:
- Dodata opcija “werror: true” metodama provjere kompajlera compiler.compiles(), compiler.links() i compiler.run(), koja tretira upozorenja kompajlera kao greške (može se koristiti za provjeru da je kod napravljen bez upozorenja ).
- Dodana metoda has_define za provjeru definicije simbola od strane pretprocesora.
- Parametar macro_name je dodat funkciji configure_file(), dodajući makro zaštitu za dvostruke veze putem “#include” (“include guards”), dizajniranog u stilu makronaredbi u jeziku C (pojednostavljavajući kreiranje konfiguracijskih datoteka sa dinamičkim imena makroa).
- Novi izlazni format je dodan u configure_file() - JSON ("output_format: json").
- Dodata mogućnost korištenja lista vrijednosti za c_std i cpp_std parametre (na primjer, „default_options: 'c_std=gnu11,c11′’).
- U modulima koji koriste CustomTarget za obradu datoteka, dodana je mogućnost prilagođavanja izlaznih poruka pomoću ninja uslužnog programa.
- build_target "jar" je zastario i umjesto toga se preporučuje poziv "jar()".
- Parametar 'env' je dodan metodi generator.process() da bi se postavila varijabla okruženja kroz koju će generator obraditi ulaz.
- Kada se specificiraju nazivi ciljeva izgradnje povezanih s izvršnim datotekama, sufiksi kao što su "executable('foo', 'main.c', name_suffix: 'bar')" smiju generirati dodatne izvršne datoteke u istom direktoriju.
- Dodan parametar “vs_module_defs” funkciji execuable() za korištenje def datoteke koja definira listu funkcija proslijeđenih shared_module().
- Dodan parametar 'default_options' funkciji find_program() za postavljanje zadanih opcija za rezervni potprojekat.
- Dodata metoda fs.relative_to(), koja vraća relativnu putanju za prvi argument, u odnosu na drugi, ako postoji prva staza. Na primjer, "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
- Sljedeći parametar_symlinks je dodan funkcijama install_data(), install_headers() i install_subdir(); kada je postavljen, prate se simbolične veze.
- Parametar “fill” je dodat metodi int.to_string() za postepeno popunjavanje niza vodećim nulama. Na primjer, pozivanje poruke(n.to_string(fill: 3)) za n=4 će proizvesti niz "004".
- Dodan je novi cilj, clang-tidy-fix, koji specificira pokretanje uslužnog programa clang-tidy sa zastavicom "-fix".
- Mogućnost specificiranja sufiksa (TARGET_SUFFIX) cilja sklopa ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) je dodana naredbi kompajliranja.
- Dodata varijabla okruženja MESON_PACKAGE_CACHE_DIR kako bi se nadjačala putanja do keša paketa (podprojekti/keš memorije paketa), na primjer, omogućavajući vam da koristite dijeljenu keš memoriju u nekoliko projekata.
- Dodata naredba "meson setup --clearcache" za brisanje trajnog keša.
- Podrška za "potrebnu" ključnu riječ je dodana svim metodama provjere kompajlera "has_*", na primjer, umjesto "assert(cc.has_function('some_function'))" sada možete specificirati "cc.has_function('some_function' , obavezno: tačno)”.
- Nova ključna riječ, rust_abi, dodana je funkcijama shared_library(), static_library(), library() i shared_module(), koje treba koristiti umjesto zastarjele rust_crate_type.
izvor: opennet.ru