Version 1.3 du système de construction Meson

La version du système de construction Meson 1.3.0 a été publiée, qui est utilisée pour construire des projets tels que X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME et GTK. Le code Meson est écrit en Python et est sous licence Apache 2.0.

L'objectif de développement clé de Meson est de fournir un processus d'assemblage à grande vitesse combiné à la commodité et à la facilité d'utilisation. Au lieu de make, la construction utilise la boîte à outils Ninja par défaut, mais d'autres backends tels que xcode et VisualStudio peuvent également être utilisés. Le système dispose d'un gestionnaire de dépendances multiplateforme intégré qui vous permet d'utiliser Meson pour créer des packages pour les distributions. Les règles d'assemblage sont définies dans un langage simplifié spécifique au domaine, elles sont bien lisibles et compréhensibles pour l'utilisateur (selon l'idée des auteurs, le développeur devrait passer un minimum de temps à écrire des règles).

La compilation croisée et la construction sur Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS et Windows à l'aide de GCC, Clang, Visual Studio et d'autres compilateurs sont prises en charge. Il est possible de créer des projets dans divers langages de programmation, notamment C, C++, Fortran, Java et Rust. Un mode de génération incrémentielle est pris en charge, dans lequel seuls les composants directement liés aux modifications apportées depuis la dernière génération sont reconstruits. Meson peut être utilisé pour générer des versions reproductibles, où l'exécution de la version dans différents environnements donne des exécutables complètement identiques.

Principales innovations de Meson 1.3 :

  • Ajout de l'option « werror : true » aux méthodes de vérification du compilateur compiler.compiles(), compiler.links() et compiler.run(), qui traite les avertissements du compilateur comme des erreurs (peut être utilisée pour vérifier que le code est construit sans avertissements). ).
  • Ajout de la méthode has_define pour vérifier la définition des symboles par le préprocesseur.
  • Le paramètre macro_name a été ajouté à la fonction configure_file(), ajoutant une protection des macros pour les doubles connexions via « #include » (« include guards »), conçu dans le style des macros du langage C (simplifiant la création de fichiers de configuration avec dynamique noms de macros).
  • Un nouveau format de sortie a été ajouté à configure_file() - JSON ("output_format: json").
  • Ajout de la possibilité d'utiliser des listes de valeurs aux paramètres c_std et cpp_std (par exemple, « default_options : 'c_std=gnu11,c11′’).
  • Dans les modules qui utilisent CustomTarget pour traiter les fichiers, la possibilité de personnaliser les messages générés par l'utilitaire ninja a été ajoutée.
  • Le build_target "jar" est obsolète et l'appel "jar()" est recommandé à la place.
  • Le paramètre 'env' a été ajouté à la méthode generator.process() pour définir la variable d'environnement via laquelle le générateur traitera l'entrée.
  • Lors de la spécification des noms de cibles de build associés aux exécutables, les suffixes tels que "executable('foo', 'main.c', name_suffix: 'bar')" sont autorisés à générer des exécutables supplémentaires dans le même répertoire.
  • Ajout du paramètre « vs_module_defs » à la fonction executable() pour utiliser un fichier def qui définit la liste des fonctions passées à shared_module().
  • Ajout du paramètre 'default_options' à la fonction find_program() pour définir les options par défaut pour le sous-projet de secours.
  • Ajout de la méthode fs.relative_to(), qui renvoie le chemin relatif du premier argument, par rapport au second, si le premier chemin existe. Par exemple, "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • Le paramètre follow_symlinks a été ajouté aux fonctions install_data(), install_headers() et install_subdir() ; lorsqu'il est défini, les liens symboliques sont suivis.
  • Un paramètre « fill » a été ajouté à la méthode int.to_string() pour remplir progressivement la chaîne avec des zéros non significatifs. Par exemple, appeler message(n.to_string(fill: 3)) pour n=4 produira la chaîne « 004 ».
  • Ajout d'une nouvelle cible, clang-tidy-fix, qui spécifie l'exécution de l'utilitaire clang-tidy avec l'indicateur "-fix".
  • La possibilité de spécifier le suffixe (TARGET_SUFFIX) de la cible de l'assembly ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) a été ajoutée à la commande de compilation.
  • Ajout de la variable d'environnement MESON_PACKAGE_CACHE_DIR pour remplacer le chemin d'accès au cache du package (sous-projets/packagecache), par exemple, vous permettant d'utiliser un cache partagé dans plusieurs projets.
  • Ajout de la commande "meson setup --clearcache" pour vider le cache persistant.
  • La prise en charge du mot-clé « requis » a été ajoutée à toutes les méthodes de vérification du compilateur « has_* ». Par exemple, au lieu de « assert(cc.has_function('some_function')) », vous pouvez désormais spécifier « cc.has_function('some_function' , obligatoire : vrai) ».
  • Un nouveau mot-clé, rust_abi, a été ajouté aux fonctions shared_library(), static_library(), library() et shared_module(), qui doit être utilisé à la place du obsolète rust_crate_type.

Source: opennet.ru

Ajouter un commentaire