rilascio del sistema di build , utilizzato per costruire progetti come X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME e GTK+. Il codice di Meson è scritto in Python e sotto licenza Apache 2.0.
l'obiettivo principale dello sviluppo di Meson è garantire un'elevata velocità di build insieme a facilità e semplicità d'uso. Per impostazione predefinita, viene utilizzato lo strumento , ma è possibile anche utilizzare altri backend, come xcode e VisualStudio. Il sistema include un gestore di dipendenze multipiattaforma, che consente di utilizzare Meson per costruire pacchetti per diverse distribuzioni. Le regole di build sono scritte in un linguaggio semplificato orientato agli oggetti, che si distingue per la buona leggibilità e risulta comprensibile all'utente (secondo le intenzioni degli autori, lo sviluppatore dovrebbe dedicare il minimo tempo alla scrittura delle regole).
Supporta la cross-compilazione e la build su Linux, macOS e Windows utilizzando GCC, Clang, Visual Studio e altri compilatori. È possibile compilare progetti in vari linguaggi di programmazione, tra cui C, C++, Fortran, Java e Rust. Supporta la modalità di build incrementale, in cui vengono ricompilati solo i componenti direttamente correlati alle modifiche apportate dall'ultima build. Meson può essere utilizzato per generare build ripetibili, dove l'avvio della build in ambienti diversi produce file eseguibili completamente identici.
Principali Meson 0.51:
- È stata aggiunta la supporto per la build trasparente di progetti esistenti che utilizzano script di build CMake. Meson ora può direttamente costruire sotto-progetti semplici (come librerie singole) utilizzando il modulo CMake, in modo simile ai sotto-progetti standard (i sotto-progetti CMake possono anche trovarsi nella cartella subprojects);
- Per tutti i compilatori utilizzati, è stata inclusa una fase di test preliminare attraverso la compilazione e l'esecuzione di semplici file di test (sanity check), senza limitarsi a testare i flag forniti dall'utente per i compilatori cross (da ora in poi verranno testati anche i compilatori nativi per la piattaforma corrente).
- Aggiunta la possibilità di definire le opzioni della riga di comando utilizzate durante la cross-compilazione, con l'associazione tramite l'assegnazione di un prefisso della piattaforma prima dell'opzione. In precedenza, le opzioni della riga di comando coprivano solo la compilazione per la piattaforma nativa e non potevano essere specificate per la cross-compilazione. Ora le opzioni della riga di comando vengono applicate indipendentemente dal fatto che si stia eseguendo una compilazione nativa o cross, garantendo che per le compilationi native e cross venga ottenuto un risultato identico;
- Aggiunta la possibilità di specificare il flag "--cross-file" più di una volta nella riga di comando per elencare più cross-file;
- Aggiunto il supporto per il compilatore ICL (Intel C/C++ Compiler) per la piattaforma Windows (ICL.EXE e ifort);
- Aggiunto il supporto iniziale per gli strumenti per CPU Xtensa (xt-xcc, xt-xc++, xt-nm);
- Nel oggetto «dependency» è stato aggiunto il metodo «get_variable», che consente di ottenere il valore di una variabile senza considerare il tipo della dipendenza attuale (ad esempio, dep.get_variable(pkg-config : ‘var-name’, cmake : ‘COP_VAR_NAME’));
- È stato aggiunto un nuovo argomento per le opzioni di compilazione target — «link_language» per definire esplicitamente il linguaggio utilizzato durante la chiamata del linker. Ad esempio, un programma principale in Fortran può chiamare codice in C/C++, il che porterà a una selezione automatica di C/C++, mentre sarà necessario utilizzare il linker di Fortran;
- È stata modificata la gestione dei flag del preprocessore CPPFLAGS. Se prima Meson memorizzava separatamente CPPFLAGS e i flag di compilazione specifici per i linguaggi (CFLAGS, CXXFLAGS), ora vengono gestiti insieme e i flag elencati in CPPFLAGS vengono applicati come un'ulteriore fonte di flag di compilazione per i linguaggi che li supportano;
- L'output di custom_target e custom_target[i] può ora essere utilizzato come argomenti nelle operazioni link_with e link_whole;
- Nei generatori è stata aggiunta la possibilità di specificare dipendenze aggiuntive tramite l'opzione «depends» (ad esempio, generator(program_runner, output: [‘@BASENAME@.c’], depends: exe));
- In find_library è stata aggiunta l'opzione static per cercare solo le librerie collegate staticamente;
- Per python.find_installation è stata aggiunta la possibilità di verificare la presenza di un dato modulo Python per una specifica versione di Python;
- È stato aggiunto un nuovo modulo unstable-kconfig per analizzare i file kconfig;
- È stato aggiunto un nuovo comando «subprojects foreach», che accetta un comando con argomenti e lo esegue in tutte le directory dei sotto-progetti;
Fonte: opennet.ru
