Die Version 1.4.0 des Build-Systems Meson wurde veröffentlicht, das für die Erstellung solcher Projekte wie X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME und GTK verwendet wird. Der Code von Meson ist in Python geschrieben und wird unter der Apache 2.0-Lizenz bereitgestellt.
Ein zentrales Entwicklungsziel von Meson ist es, eine hohe Geschwindigkeit des Build-Prozesses zu gewährleisten, gepaart mit Benutzerfreundlichkeit und Einfachheit. Anstelle des Tools make wird standardmäßig das Ninja-Toolset verwendet, jedoch können auch andere Backends wie xcode und VisualStudio eingesetzt werden. Das System enthält einen plattformübergreifenden Abhängigkeitsmanager, der es ermöglicht, Meson zur Erstellung von Paketen für Distributionen zu verwenden. Die Build-Regeln werden in einer vereinfachten, domänenorientierten Sprache festgelegt, die eine gute Lesbarkeit aufweist und für den Benutzer verständlich ist (laut den Autoren sollte der Entwickler so wenig Zeit wie möglich mit dem Schreiben von Regeln verbringen).
Cross-Compilation und Builds werden für Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS und Windows mit GCC, Clang, Visual Studio und anderen Compilern unterstützt. Es ist möglich, Projekte in verschiedenen Programmiersprachen, einschließlich C, C++, Fortran, Java und Rust, zu kompilieren. Der inkrementelle Build-Modus wird unterstützt, bei dem nur die Komponenten neu kompiliert werden, die direkt mit den seit dem letzten Build vorgenommenen Änderungen verbunden sind. Meson kann verwendet werden, um reproduzierbare Builds zu erstellen, bei denen das Ausführen des Builds in verschiedenen Umgebungen die Erzeugung vollständig identischer ausführbarer Dateien zur Folge hat.
Die wichtigsten Neuerungen in Meson 1.4:
- Die Funktionen fs.name, fs.parent, fs.replace_suffix und fs.stem des FS-Moduls unterstützen nun die Build-Objekte build_tgt und custom_tgt sowie den Index der Build-Ziele (custom_idx).
- Es wurde die Möglichkeit hinzugefügt, die Versionsnummer des Projekts aus CMake-basierten Unterprojekten zu lesen.
- Die Kontrolle über die Assert-Überprüfungen (GLIBCXX_ASSERTIONS) in der C++ Standardbibliothek kann jetzt über die Einstellung ndebug vorgenommen werden.
- Die Unterstützung für Clang wurde in stldebug hinzugefügt (bei Aktivierung von debugstl werden jetzt "-D_GLIBCXX_DEBUG=1" und "-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG" gesetzt).
- Der Methode unset() wurde zum Objekt env hinzugefügt.
- Zur Objektklasse File wurde die Methode full_path() hinzugefügt, um den vollständigen Pfad zu einer Datei zu erhalten.
- Die Möglichkeit, eigene Abhängigkeiten für numpy anzugeben (dependency('numpy')).
- Der Methode compiler.preprocess() wurde der Parameter "depends" hinzugefügt, um ein abhängiges Build-Ziel für compiler.preprocess() festzulegen.
- In den Funktionen compile_ui, compile_moc und preprocess der Module qt4, qt5 und qt6 wurde ein Argument preserve_paths hinzugefügt, um die Variante der Verzeichnisstruktur für die geschriebenen Dateien auszuwählen (wenn der Wert true ist – „{target private directory}/subdir/one.out“, und wenn false – „{target private directory}/one.out“).
- Im Bindungs-Generator bindgen wird die Meson-Heuristik zur Bestimmung von C++-Headerdateien verwendet.
- Die Möglichkeit zur Überschreibung der Spracheinstellungen für bindgen wurde hinzugefügt (z. B. zur Verarbeitung von Dateien mit der Endung .h als Headerdateien für C++).
- Die Ausführung der Tests wird nun standardmäßig nach Fehlern, die beim Ausführen von Sanitizern wie MemorySanitizer festgestellt wurden, beendet.
- Unterstützung für den C/C++-Compiler von Texas Instruments für die CPU-Familie C6000 wurde hinzugefügt.
Quelle: opennet.ru
