È stato pubblicato il rilascio del sistema di build Meson 1.1.0, utilizzato per la costruzione di progetti come X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME e GTK. Il codice di Meson è scritto in Python e viene fornito con licenza Apache 2.0.
L'obiettivo principale dello sviluppo di Meson è garantire un elevato livello di velocità del processo di build insieme a facilità d'uso e semplicità. Invece dell'utilità make, per impostazione predefinita viene utilizzato lo strumento Ninja, ma è possibile anche utilizzare altri backend come xcode e VisualStudio. Il sistema integra un gestore delle dipendenze multipiattaforma, consentendo di utilizzare Meson per la costruzione di pacchetti per le distribuzioni. Le regole di build sono definite in un linguaggio semplificato e specifico del dominio, caratterizzate da una buona leggibilità e comprensibili per l'utente (secondo le intenzioni degli autori, il programmatore dovrebbe spendere il minimo tempo possibile nella 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.
Key innovations in Meson 1.1:
- A new argument 'objects:' has been added to declare_dependency() to attach objects directly to executables as internal dependencies without needing to apply link_who.
- The 'meson devenv —dump' command has an optional feature to specify a file to write environment variables to, instead of outputting to standard output.
- Aggiunti i metodi FeatureOption.enable_if e FeatureOption.disable_if per semplificare la creazione di costrutti condizionali durante la preparazione dei parametri da passare alla funzione dependency(). opt = get_option('feature').disable_if(not foo, error_message : 'Impossibile abilitare la funzione quando foo non è abilitato'); dep = dependency('foo', required : opt)
- Consentita la trasmissione di oggetti generati tra gli argomenti «objects:».
- Nella funzione project è stata implementata la possibilità di installare file con informazioni sulle licenze dei progetti.
- Durante l'esecuzione di «sudo meson install» è stato garantito il ripristino dei privilegi durante la ricompilazione per le piattaforme target.
- Nel comando «meson install» è stata fornita la possibilità di specificare un gestore separato per l'acquisizione dei diritti di root (ad esempio, è possibile scegliere polkit, sudo, opendoas o $MESON_ROOT_CMD). Durante l'esecuzione di «meson install» non in modalità interattiva non vengono più tentati incrementi di privilegio.
- Aggiunta la supporto per la lettura delle opzioni dal file meson.options invece di meson_options.txt.
- Garantito il reindirizzamento su stderr delle informazioni sullo stato dell'introspezione.
- Aggiunto un nuovo backend «none» (—backend=none) per creare progetti che dispongono solo di regole di installazione e non contengono regole di compilazione.
- È stata aggiunta una nuova dipendenza pybind11, che consente a dependency('pybind11') di funzionare con pkg-config e cmake senza l'uso di uno script pybind11-config.
- È consentito l'uso delle opzioni «—reconfigure» e «—wipe» (meson setup —reconfigure builddir e meson setup —wipe builddir) con un builddir vuoto.
- In meson.add_install_script() è stata aggiunta la supporto per la parola chiave dry_run, che consente l'esecuzione di script di installazione personalizzati quando si chiama «meson install —dry-run».
Fonte: opennet.ru
