Die Version 1.6.0 des Build-Systems Meson wurde veröffentlicht, das für Projekte wie X.Org Server, Mesa, QEMU, 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 Ziel der Entwicklung von Meson ist es, einen schnellen Build-Prozess zu gewährleisten, kombiniert mit Benutzerfreundlichkeit und Einfachheit. Anstelle des Tools make wird standardmäßig das Ninja-Tooling verwendet, jedoch können auch andere Backends wie Xcode und Visual Studio eingesetzt werden. Das System enthält einen plattformübergreifenden Abhängigkeitsmanager, der es ermöglicht, Meson zur Erstellung von Paketen für verschiedene Distributionen zu verwenden. Die Build-Regeln werden in einer vereinfachten, domänenspezifischen Sprache festgelegt, die eine gute Lesbarkeit aufweist und für den Benutzer verständlich ist (die Autoren beabsichtigen, dass Entwickler möglichst wenig Zeit 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 wesentlichen Neuerungen von Meson 1.6:
- Der Befehl „meson reprotest“ wurde zur Testung von reproduzierbaren Builds hinzugefügt.
- Unterstützung für den Compiler flang, der im LLVM-Projekt entwickelt wird, wurde hinzugefügt.
- Unterstützung für das SDK DIA (Debug Interface Access) hinzugefügt, das das Lesen von Debug-Informationen im PDB-Format ermöglicht, das auf der Windows-Plattform verwendet wird.
- In den Compilern nvc und nvc++ von NVIDIA wurde die Auswahl der C- und C++-Standards ermöglicht. In nvc: c89, c90, c99, c11, c17, c18, gnu90, gnu89, gnu99, gnu11, gnu17, gnu18. In nvc++: c++98, c++03, c++11, c++14, c++17, c++20, c++23, gnu++98, gnu++03, gnu++11, gnu++14, gnu++17, gnu++20.
- Die Möglichkeit zur Bestimmung der Verfügbarkeit spezifischer Qt-Utilities (moc, uic, rcc und lrelease) wurde durch den Aufruf der Funktion has_tools() für importierte Qt-Bauteile bereitgestellt.
- Die Verwendung des OpenXL-Compilers auf der AIX-Plattform ermöglicht, neben dem zuvor unterstützten GCC.
- Standardmäßig werden Warnungen über alle veralteten Funktionen ausgegeben, es sei denn, es wird in der Funktion project() für das zu erstellende Projekt eine Mindestversion von Meson angegeben.
- Unterstützung für die Verwendung von Variablen in Systemabhängigkeiten (in der Methode get_variable()) hinzugefügt.
- Eine Warnung über den experimentellen Charakter der Unterstützung von Cargo-Subprojekten wurde hinzugefügt.
- In den Abhängigkeiten, die aus CMake-Unterprojekten abgeleitet werden, ist nun die Verwendung von Linker-Flags erlaubt, die in CMake als PUBLIC oder INTERFACE gekennzeichnet sind (Flags, die als PRIVATE bezeichnet werden, gelten nur beim Erstellen der Unterbibliothek und nicht bei der Verwendung als Abhängigkeit).
- Die Option default_both_libraries wurde hinzugefügt, um das Standardverhalten des Build-Ziels both_libraries zu überschreiben.
- Für interne Abhängigkeiten, die von der Funktion declare_dependency() zurückgegeben werden, wurden die Methoden as_static und as_shared implementiert, um die Abhängigkeitsliste unter Berücksichtigung der statischen oder dynamischen Verlinkung zu transformieren.
- In den Funktionen test() und benchmark() wurde die Möglichkeit hinzugefügt, anzugeben, dass die getestete ausführbare Datei eine Wrapper für den Aufruf anderer Programme ist. Zum Beispiel: test('some_test', find_program('sudo'), args : [ find_program('sh'), 'script.sh' ])
- Die Unterstützung für die Verwendung des C/C++-Frontend-Compilers, das im Zig 0.11-Toolset bereitgestellt wird, anstelle von Clang wurde hinzugefügt.
Quelle: opennet.ru
