È stato pubblicato il rilascio della build system Meson 1.6.0, utilizzata per la compilazione di progetti come X.Org Server, Mesa, QEMU, Lighttpd, systemd, GStreamer, Wayland, GNOME e GTK. Il codice di Meson è scritto in Python e viene fornito con la licenza Apache 2.0.
L'obiettivo principale dello sviluppo di Meson è garantire un'elevata velocità del processo di build insieme alla facilità d'uso e alla semplicità. Per impostazione predefinita, il sistema utilizza l'utility Ninja invece di make, ma sono supportati anche altri backend come Xcode e Visual Studio. Il sistema include un gestore delle dipendenze multipiattaforma, che consente di utilizzare Meson per la creazione di pacchetti per le distribuzioni. Le regole di build vengono definite in un linguaggio semplificato, orientato agli oggetti, che presenta una buona leggibilità e risulta chiaro all'utente (secondo il design degli autori, lo sviluppatore dovrebbe dedicare il minimo tempo possibile alla scrittura delle regole).
Support for cross-compilation and building on Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS, and Windows using GCC, Clang, Visual Studio, and other compilers. Projects can be built in various programming languages, including C, C++, Fortran, Java, and Rust. An incremental build mode is supported, where only the components directly related to the changes made since the last build are rebuilt. Meson can be used to create reproducible builds, ensuring that running the build in different environments generates completely identical executables.
Novità principali di Meson 1.6:
- Aggiunta la command «meson reprotest» per testare build ripetibili.
- Aggiunto il supporto per il compilatore flang, sviluppato dal progetto LLVM.
- Aggiunta la compatibilità con il SDK DIA (Debug Interface Access), che consente di leggere le informazioni di debug nel formato PDB, utilizzato sulla piattaforma Windows.
- Nei compilatori nvc e nvc++ di NVIDIA è stata introdotta la possibilità di scegliere gli standard C e C++. In nvc: c89, c90, c99, c11, c17, c18, gnu90, gnu89, gnu99, gnu11, gnu17, gnu18. In nvc++: c++98, c++03, c++11, c++14, c++17, c++20, c++23, gnu++98, gnu++03, gnu++11, gnu++14, gnu++17, gnu++20.
- È stata fornita la possibilità di determinare la presenza di strumenti specifici di Qt (moc, uic, rcc e lrelease) tramite la chiamata alla funzione has_tools() per i moduli di costruzione Qt importati.
- Realizzata la possibilità di utilizzare il compilatore OpenXL sulla piattaforma AIX (oltre al GCC già supportato in precedenza).
- Per impostazione predefinita è abilitato l'output degli avvisi su tutte le funzionalità obsolete, se nella funzione project() per il progetto da costruire non è specificata una versione minima di Meson.
- Aggiunta la compatibilità con l'uso di variabili nelle dipendenze di sistema (nella funzione get_variable()).
- Aggiunto un avviso sulla natura sperimentale del supporto per i sottoprogetti Cargo.
- Nelle dipendenze ottenute dai sottoprogetti CMake, ora è consentito l'uso solo di flag di collegamento contrassegnati in CMake come PUBLIC o INTERFACE (i flag contrassegnati come PRIVATE vengono applicati solo durante la compilazione della libreria del sottoprogetto, non quando vengono utilizzati come dipendenze).
- Aggiunta l'opzione default_both_libraries, che consente di sovrascrivere il comportamento predefinito dell'obiettivo di build both_libraries.
- Per le dipendenze interne restituite dalla funzione declare_dependency(), sono stati implementati i metodi as_static e as_shared per convertire l'elenco delle dipendenze tenendo conto del collegamento statico o dinamico.
- Nelle funzioni test() e benchmark() è stata aggiunta la possibilità di definire che l'eseguibile testato è un wrapper per chiamare altri programmi. Ad esempio: test('some_test', find_program('sudo'), args: [find_program('sh'), 'script.sh'])
- Aggiunto il supporto per utilizzare invece di Clang il frontend del compilatore C/C++ fornito nello strumento per il linguaggio Zig 0.11.
Fonte: opennet.ru
