Rilascio del sistema di build Meson 1.3

È stato pubblicato il rilascio del sistema di build Meson 1.3.0, utilizzato per costruire progetti come X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME e GTK. Il codice di Meson è scritto in Python e distribuito sotto 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.

Novità principali di Meson 1.3:

  • È stata aggiunta l'opzione 'werror: true' ai metodi di verifica del compilatore compiler.compiles(), compiler.links() e compiler.run(), che fa sì che gli avvisi del compilatore siano trattati come errori (utile per verificare che il codice si compili senza avvisi).
  • È stato aggiunto il metodo has_define per verificare la definizione di un simbolo da parte del pre-processore.
  • È stato aggiunto il parametro macro_name alla funzione configure_file(), che fornisce protezione per includere macro attraverso '#include' ('include guards'), formattata nel modo tipico delle macro in C (semplifica la creazione di file di configurazione con nomi di macro dinamici).
  • È stato aggiunto un nuovo formato di output a configure_file() — JSON ('output_format: json').
  • È stata introdotta la possibilità di utilizzare liste di valori nei parametri c_std e cpp_std (ad esempio, 'default_options: ‘c_std=gnu11,c11’').
  • Nei moduli che utilizzano CustomTarget per elaborare i file, è stata aggiunta la possibilità di personalizzare i messaggi visualizzati dall'utilità ninja.
  • È stato deprecato il target di build 'jar', si raccomanda di utilizzare la chiamata 'jar()'.
  • È stato aggiunto il parametro 'env' al metodo generator.process() per impostare una variabile d'ambiente attraverso la quale il generatore gestirà l'input.
  • Quando si definiscono nomi di target di build correlati ai file eseguibili, è ora consentito specificare suffissi, come 'executable('foo', 'main.c', name_suffix: 'bar')', per generare file eseguibili aggiuntivi nella stessa directory.
  • È stato aggiunto il parametro 'vs_module_defs' alla funzione executable() per utilizzare un file def che definisce un elenco di funzioni passate a shared_module().
  • È stato aggiunto il parametro 'default_options' alla funzione find_program() per specificare le opzioni predefinite per un sotto-progetto di riserva (fallback).
  • È stato aggiunto il metodo fs.relative_to(), che restituisce un percorso relativo per il primo argomento, rispetto al secondo, se il primo percorso esiste. Ad esempio, 'fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib'.
  • Nelle funzioni install_data(), install_headers() e install_subdir() è stato aggiunto il parametro follow_symlinks, per assicurare il follow delle symlink quando impostato.
  • È stato aggiunto il parametro 'fill' al metodo int.to_string() per riempire la stringa con zero iniziali. Ad esempio, la chiamata message(n.to_string(fill: 3)) per n=4 produrrà la stringa '004'.
  • È stato aggiunto un nuovo target clang-tidy-fix, che definisce l'esecuzione dell'utilità clang-tidy con il flag '-fix'.
  • È stata aggiunta la possibilità di specificare un suffisso (TARGET_SUFFIX) per il target di build nel comando compile ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]).
  • È stata aggiunta la variabile d'ambiente MESON_PACKAGE_CACHE_DIR per sovrascrivere il percorso della cache dei pacchetti (subprojects/packagecache), permettendo ad esempio di utilizzare una cache condivisa in più progetti.
  • È stato aggiunto il comando 'meson setup --clearcache' per pulire la cache permanente.
  • Tutti i metodi di verifica del compilatore 'has_*' ora supportano la parola chiave 'required', ad esempio invece di 'assert(cc.has_function('some_function'))' ora si può scrivere 'cc.has_function('some_function', required: true)'.
  • Nella funzione shared_library(), static_library(), library() e shared_module() è stata aggiunta una nuova parola chiave rust_abi, da utilizzare al posto dell'obsoleta rust_crate_type.

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster