Meson bouwsysteem release 1.3

De release van het Meson 1.3.0 build-systeem is gepubliceerd, dat wordt gebruikt om projecten te bouwen zoals X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME en GTK. De Meson-code is geschreven in Python en valt onder de Apache 2.0-licentie.

Het belangrijkste ontwikkelingsdoel van Meson is om een ​​snel assemblageproces te bieden in combinatie met gemak en gebruiksgemak. In plaats van make gebruikt de build standaard de Ninja-toolkit, maar ook andere backends zoals xcode en VisualStudio kunnen worden gebruikt. Het systeem heeft een ingebouwde multi-platform afhankelijkheidshandler waarmee u Meson kunt gebruiken om pakketten voor distributies te bouwen. Assemblageregels zijn opgesteld in een vereenvoudigde domeinspecifieke taal, ze zijn goed leesbaar en begrijpelijk voor de gebruiker (volgens het idee van de auteurs zou de ontwikkelaar een minimum aan tijd moeten besteden aan het schrijven van regels).

Cross-compileren en bouwen op Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS en Windows met behulp van GCC, Clang, Visual Studio en andere compilers wordt ondersteund. Het is mogelijk om projecten te bouwen in verschillende programmeertalen, waaronder C, C++, Fortran, Java en Rust. Er wordt een incrementele bouwmodus ondersteund, waarin alleen componenten worden herbouwd die rechtstreeks verband houden met wijzigingen die zijn aangebracht sinds de laatste bouw. Meson kan worden gebruikt om herhaalbare builds te genereren, waarbij het uitvoeren van de build in verschillende omgevingen resulteert in volledig identieke uitvoerbare bestanden.

Belangrijkste innovaties van Meson 1.3:

  • De optie “werror: true” toegevoegd aan de compilercontrolemethoden compiler.compiles(), compiler.links() en compiler.run(), die compilerwaarschuwingen als fouten behandelt (kan worden gebruikt om te controleren of de code zonder waarschuwingen is gebouwd ).
  • Methode has_define toegevoegd om de symbooldefinitie door de preprocessor te controleren.
  • De parameter macro_name is toegevoegd aan de functie configure_file(), waardoor macrobescherming voor dubbele verbindingen wordt toegevoegd via “#include” (“include guards”), ontworpen in de stijl van macro’s in de C-taal (wat het maken van configuratiebestanden met dynamische macronamen).
  • Er is een nieuw uitvoerformaat toegevoegd aan configure_file() - JSON ("output_format: json").
  • De mogelijkheid toegevoegd om zoeklijsten te gebruiken voor de parameters c_std en cpp_std (bijvoorbeeld “default_options: 'c_std=gnu11,c11′’).
  • In modules die CustomTarget gebruiken om bestanden te verwerken, is de mogelijkheid toegevoegd om de berichtenuitvoer door het ninjahulpprogramma aan te passen.
  • De build_target "jar" is verouderd en in plaats daarvan wordt de aanroep "jar()" aanbevolen.
  • De parameter 'env' is toegevoegd aan de methode generator.process() om de omgevingsvariabele in te stellen waarmee de generator invoer verwerkt.
  • Bij het opgeven van build-doelnamen die zijn gekoppeld aan uitvoerbare bestanden, mogen achtervoegsels zoals "executable('foo', 'main.c', name_suffix: 'bar')" aanvullende uitvoerbare bestanden in dezelfde map genereren.
  • De parameter “vs_module_defs” toegevoegd aan de functie executable() om een ​​def-bestand te gebruiken dat de lijst met functies definieert die worden doorgegeven aan shared_module().
  • Parameter 'default_options' toegevoegd aan de functie find_program() om standaardopties in te stellen voor een fallback-subproject.
  • Methode fs.relative_to() toegevoegd, die het relatieve pad voor het eerste argument retourneert, relatief ten opzichte van het tweede, als het eerste pad bestaat. Bijvoorbeeld: "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • De volgende_symlinks parameter is toegevoegd aan de install_data(), install_headers() en install_subdir() functies; indien ingesteld, worden symbolische links gevolgd.
  • Er is een parameter “fill” toegevoegd aan de methode int.to_string() om de tekenreeks stapsgewijs te vullen met voorloopnullen. Als u bijvoorbeeld message(n.to_string(fill: 3)) aanroept voor n=4, wordt de tekenreeks "004" geproduceerd.
  • Een nieuw doel toegevoegd, clang-tidy-fix, dat specificeert dat het clang-tidy-hulpprogramma moet worden uitgevoerd met de vlag "-fix".
  • De mogelijkheid om het achtervoegsel (TARGET_SUFFIX) van het assemblagedoel ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) op te geven is toegevoegd aan de compileeropdracht.
  • Omgevingsvariabele MESON_PACKAGE_CACHE_DIR toegevoegd om het pad naar de pakketcache (subprojecten/pakketcache) te overschrijven, zodat u bijvoorbeeld een gedeelde cache in verschillende projecten kunt gebruiken.
  • De opdracht "meson setup --clearcache" toegevoegd om de persistente cache te wissen.
  • Ondersteuning voor het trefwoord “required” is toegevoegd aan alle “has_*”-compilercontrolemethoden. In plaats van “assert(cc.has_function('some_function'))” kunt u nu bijvoorbeeld “cc.has_function('some_function') opgeven , vereist: waar)”.
  • Een nieuw trefwoord, rust_abi, is toegevoegd aan de functies shared_library(), static_library(), bibliotheek() en shared_module(), die moeten worden gebruikt in plaats van het verouderde rust_crate_type.

Bron: opennet.ru

Voeg een reactie