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 bygning på Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS og Windows ved hjælp af GCC, Clang, Visual Studio og andre compilere understøttes. Det er muligt at bygge projekter i forskellige programmeringssprog, herunder C, C++, Fortran, Java og Rust. En inkrementel build-tilstand er understøttet, hvor kun komponenter, der er direkte relateret til ændringer foretaget siden den sidste build, genopbygges. Meson kan bruges til at generere gentagelige builds, hvor kørsel af build i forskellige miljøer resulterer i fuldstændig identiske eksekverbare filer.
Vigtigste innovationer i Meson 1.3:
- Tilføjede muligheden "werror: true" til compiler check-metoderne compiler.compiles(), compiler.links() og compiler.run(), som behandler compileradvarsler som fejl (kan bruges til at kontrollere, at koden er bygget uden advarsler ).
- Tilføjet has_define-metode til at kontrollere symboldefinition af præprocessor.
- Parameteren macro_name er blevet tilføjet til funktionen configure_file() og tilføjer makrobeskyttelse for dobbeltforbindelser gennem "#include" ("inkluder vagter"), designet i stil med makroer på C-sproget (som forenkler oprettelsen af konfigurationsfiler med dynamisk makronavne).
- Et nyt outputformat er blevet tilføjet til configure_file() - JSON ("output_format: json").
- Tilføjet muligheden for at bruge værdilister til parametrene c_std og cpp_std (for eksempel "default_options: 'c_std=gnu11,c11′').
- I moduler, der bruger CustomTarget til at behandle filer, er muligheden for at tilpasse beskeder, der udlæses af ninja-værktøjet, blevet tilføjet.
- build_target "jar" er blevet forældet, og "jar()" kaldet anbefales i stedet.
- Parameteren 'env' er blevet tilføjet til generator.process()-metoden for at indstille miljøvariablen, som generatoren vil behandle input gennem.
- Når du angiver build-målnavne forbundet med eksekverbare filer, tillades suffikser såsom "executable('foo', 'main.c', name_suffix: 'bar')" til at generere yderligere eksekverbare filer i samme mappe.
- Tilføjede "vs_module_defs"-parameteren til funktionen exectuable() for at bruge en def-fil, der definerer listen over funktioner, der sendes til shared_module().
- Tilføjet 'default_options'-parameter til find_program()-funktionen for at indstille standardindstillinger for fallback-underprojekt.
- 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')".
- Følgende_symlinks-parameter er blevet tilføjet til funktionerne install_data(), install_headers() og install_subdir(); når den er indstillet, følges symbolske links.
- En "fill"-parameter er blevet tilføjet til int.to_string()-metoden for trinvist at udfylde strengen med indledende nuller. For eksempel vil kald af message(n.to_string(fill: 3)) for n=4 producere strengen "004".
- Tilføjet et nyt mål, clang-tidy-fix, der specificerer at køre clang-tidy-værktøjet med flaget "-fix".
- Muligheden for at angive suffikset (TARGET_SUFFIX) for samlingsmålet ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) er blevet tilføjet til kompileringskommandoen.
- Tilføjet miljøvariabel MESON_PACKAGE_CACHE_DIR for at tilsidesætte stien til pakkecachen (subprojects/packagecache), for eksempel, hvilket giver dig mulighed for at bruge en delt cache i flere projekter.
- Tilføjet "meson setup --clearcache" kommando for at rydde vedvarende cache.
- Understøttelse af det "påkrævede" nøgleord er blevet tilføjet til alle "has_*"-kompilerkontrolmetoder, for eksempel, i stedet for "assert(cc.has_function('some_function'))" kan du nu angive "cc.has_function('some_function' , påkrævet: sand)”.
- 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