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).
compilazione incrociata e build su Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS e Windows utilizzando GCC, Clang, Visual Studio e altri compilatori. È possibile costruire progetti in diversi linguaggi di programmazione, inclusi C, C++, Fortran, Java e Rust. È supportata la modalità di build incrementale, che ricompila solo i componenti direttamente collegati alle modifiche apportate dall'ultima build. Meson può essere utilizzato per generare build ripetibili, dove l'esecuzione della build in ambienti diversi produce file eseguibili completamente identici.
Principali Meson 0.52:
- Aggiunta la supporto sperimentale per Webassembly utilizzando Emscripten come compilatore;
- Migliorato sostanzialmente e portato a uno stato operativo il supporto per le piattaforme Illumos e Solaris;
- Ignorati gli script di internazionalizzazione basati su gettext in assenza di strumenti gettext installati nel sistema (in precedenza, utilizzando il modulo i18n su sistemi senza gettext, veniva restituito un errore);
- Migliorato il supporto per le librerie statiche. Risolti molti problemi nell'uso di librerie statiche disinstallate;
- È stata aggiunta la possibilità di utilizzare dizionari per l'assegnazione di variabili d'ambiente. Quando si chiama environment(), come primo elemento ora è possibile specificare un dizionario in cui le variabili d'ambiente sono definite in forma chiave/valore. Queste variabili saranno trasferite in environment_object come se fossero state impostate singolarmente tramite il metodo set(). I dizionari possono ora anche essere passati a diverse funzioni che supportano l'argomento "env";
- È stata aggiunta la funzione "runtarget alias_target(target_name, dep1, …)", che crea un nuovo obiettivo di build di primo livello, che può essere invocato con il backend di build selezionato (ad esempio, "ninja target_name"). Questo obiettivo di build non esegue alcun comando, ma assicura la costruzione di tutte le dipendenze;
- È stata garantita l'impostazione automatica della variabile d'ambiente PKG_CONFIG_SYSROOT_DIR durante la cross-compilazione se è presente la configurazione sys_root nella sezione "[properties]";
- È stata aggiunta l'opzione "—gdb-path" per specificare il percorso del debugger GDB quando si utilizza l'opzione "—gdb testname" per avviare GDB con lo scenario di test specificato;
- Aggiunta la rilevazione automatica dell'obiettivo di assemblaggio clang-tidy per eseguire questo linter su tutti i file sorgente. L'obiettivo viene creato se clang-tidy è presente nel sistema e se nel root del progetto è presente un file " .clang-tidy" (o " _clang-tidy");
- Aggiunta la dipendenza dependency(‘blocks’) per l'uso nelle estensioni Clang ;
- Separati i moduli di linkaggio e compilazione, consentendo l'uso di diverse combinazioni di compilatori e linkatori;
- Nella classe SourceSet è stato aggiunto il metodo all_dependencies() oltre al metodo all_sources();
- Nel file run_project_tests.py è stata aggiunta l'opzione «—only» per eseguire selettivamente i test (ad esempio, «python run_project_tests.py —only fortran python3»);
- Nella funzione find_program() è stata aggiunta la possibilità di cercare solo le versioni richieste del programma (la versione viene determinata tramite l'esecuzione del programma con l'opzione «—version»);
- Per gestire l'esportazione dei simboli, nella funzione shared_module() è stata aggiunta l'opzione vs_module_defs, analogamente a shared_library();
- Ampliate le funzionalità del modulo kconfig, che ora supporta configure_file() per determinare il file di input;
- Nella funzione configure_file() è stata aggiunta la possibilità di specificare più file di input per i gestori «command:»;
- Il comando «dist» per creare archivi è stato elevato al rango di comando di primo livello (in precedenza il comando era associato a ninja). È stata aggiunta l'opzione «—formats» per definire i tipi di archivi creati (ad esempio,
«meson dist —formats=xztar,zip»).
Fonte: opennet.ru
