Udgivelsen af Meson 1.3.0 byggesystemet er blevet offentliggjort, som bruges til at bygge projekter som X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME og GTK. Meson-koden er skrevet i Python og er licenseret under Apache 2.0-licensen.
Det vigtigste udviklingsmål for Meson er at levere en højhastigheds monteringsproces kombineret med bekvemmelighed og brugervenlighed. I stedet for at lave bruger buildet Ninja-værktøjssættet som standard, men andre backends såsom xcode og VisualStudio kan også bruges. Systemet har en indbygget multi-platform afhængighedshandler, der giver dig mulighed for at bruge Meson til at bygge pakker til distributioner. Samlingsregler er sat i et forenklet domænespecifikt sprog, de er letlæselige og forståelige for brugeren (ifølge forfatternes idé skal udvikleren bruge minimum tid på at skrive regler).
Krydskompilering og assembly understøttes. Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS и Windows Brug af GCC, Clang, Visual Studio og andre compilere. Projekter kan bygges i forskellige programmeringssprog, herunder C, C++, Fortran, Java og Rust. Trinvis byggetilstand understøttes, som kun genopbygger komponenter, der er direkte relateret til ændringer foretaget siden den forrige build. Meson kan bruges til at oprette gentagelige builds, hvor kørsel af buildet i forskellige miljøer resulterer i generering af fuldstændig identiske eksekverbare filer.
Vigtigste innovationer i Meson 1.3:
- Compiler-kontrolmetoderne compiler.compiles(), compiler.links() og compiler.run() har nu en "werror: true"-indstilling, som behandler compiler-advarsler som fejl (kan bruges til at kontrollere, at kode bygger uden advarsler).
- Tilføjet has_define-metoden til at kontrollere, om et symbol er defineret af præprocessoren.
- Funktionen configure_file() har en macro_name-parameter, der tilføjer dobbeltindsættelsesbeskyttelse af makroer via "#include" ("include guards"), formateret i stil med C-makroer (forenkler oprettelsen af configure-filer med dynamiske makronavne).
- Et nyt outputformat er blevet tilføjet til configure_file() - JSON ("output_format: json").
- Parametrene c_std og cpp_std understøtter nu brugen af lister over værdier (f.eks. "default_options: 'c_std=gnu11,c11'").
- I moduler, der bruger CustomTarget til at behandle filer, er muligheden for at tilpasse meddelelser, der sendes fra ninja-værktøjet, blevet tilføjet.
- `build_target`-funktionen `jar` er blevet udfaset, og `jar()`-kaldet anbefales i stedet.
- Metoden generator.process() har en ny parameter 'env' til at indstille den miljøvariabel, hvorigennem generatoren behandler inputtet.
- Når byggemål tilknyttet eksekverbare filer navngives, er det tilladt at angive suffikser som "exectuable('foo', 'main.c', name_suffix: 'bar')" for at generere yderligere eksekverbare filer i samme mappe.
- Tilføjede parameteren "vs_module_defs" til exectuable() for at bruge en def-fil, der definerer listen over funktioner, der sendes til shared_module().
- Tilføjet parameteren 'default_options' til funktionen find_program() for at indstille standardindstillinger for fallback-delprojekt.
- Tilføjet fs.relative_to() metode, som returnerer den relative sti for det første argument, i forhold til det andet, hvis den første sti findes. For eksempel "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
- Parameteren follow_symlinks er blevet tilføjet til funktionerne install_data(), install_headers() og install_subdir(); når den er indstillet, sikrer den, at symbolske links følges.
- Metoden int.to_string() har nu en "fill"-parameter til yderligere at udfylde strengen med indledende nuller. For eksempel vil et kald af message(n.to_string(fill: 3)) for n=4 generere strengen "004".
- Tilføjet et nyt mål clang-tidy-fix, som specificerer kørsel af clang-tidy-værktøjet med "-fix"-flaget.
- Kompileringskommandoen giver dig nu mulighed for at angive et suffiks (TARGET_SUFFIX) for byggemålet ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]).
- Tilføjet miljøvariabel MESON_PACKAGE_CACHE_DIR for at tilsidesætte pakkens cache-sti (underprojekter/pakkecache), for eksempel for at tillade brug af en fælles cache i flere projekter.
- Tilføjede kommandoen "meson setup --clearchache" for at rydde den persistente cache.
- Alle "has_*" compiler-kontrolmetoder understøtter nu nøgleordet "required". For eksempel kan du i stedet for "assert(cc.has_function('some_function'))" nu angive "cc.has_function('some_function', required: true)".
- Et nyt nøgleord rust_abi er blevet tilføjet til funktionerne shared_library(), static_library(), library() og shared_module(), som skal bruges i stedet for den forældede rust_crate_type.
Kilde: opennet.ru
