Veröffentlichung des Build-Systems , das für den Aufbau von Projekten wie X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME und GTK+ verwendet wird. Der Code von Meson ist in Python geschrieben und unter der Apache 2.0-Lizenz.
Das Hauptziel der Entwicklung von Meson ist es, eine hohe Geschwindigkeit des Build-Prozesses bei gleichzeitigem Benutzerkomfort und einfacher Handhabung zu gewährleisten. Anstelle des Make-Tools wird standardmäßig ein Toolset verwendet , es ist jedoch auch die Verwendung anderer Backend-Systeme wie xcode und VisualStudio möglich. In das System ist ein plattformübergreifender Abhängigkeits-Manager integriert, der es ermöglicht, Meson zum Aufbau von Paketen für Distributionen zu verwenden. Die Build-Regeln werden in einer vereinfachten domänenspezifischen Sprache definiert, die gute Lesbarkeit aufweist und für den Benutzer verständlich ist (laut den Entwicklern sollte der Entwickler nur minimal Zeit für das Schreiben von Regeln aufwenden).
Kreuzkompilierung und Erstellung unter Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS und Windows mit GCC, Clang, Visual Studio und anderen Compilern. Die Erstellung von Projekten in verschiedenen Programmiersprachen, einschließlich C, C++, Fortran, Java und Rust, ist möglich. Es wird ein inkrementeller Build-Modus unterstützt, bei dem nur die Komponenten neu erstellt werden, die direkt mit den Änderungen verbunden sind, die seit dem letzten Build vorgenommen wurden. Meson kann verwendet werden, um reproduzierbare Builds zu erstellen, bei denen der Build-Prozess in verschiedenen Umgebungen zu vollständig identischen ausführbaren Dateien führt.
Haupt Meson 0.52:
- Experimentelle Unterstützung für Webassembly wurde hinzugefügt, wobei Emscripten als Compiler verwendet wird;
- Die Unterstützung für die Plattformen Illumos und Solaris wurde erheblich verbessert und stabilisiert;
- Das Ignorieren von Internationalisierungs-Skripten basierend auf gettext wurde sichergestellt, falls das gettext-Tool nicht im System installiert ist (zuvor wurde bei Verwendung des i18n-Moduls auf Systemen ohne gettext ein Fehler angezeigt);
- Die Unterstützung für statische Bibliotheken wurde verbessert. Viele Probleme bei der Verwendung deinstallierter statischer Bibliotheken wurden gelöst;
- Die Möglichkeit zur Verwendung von Wörterbüchern für die Festlegung von Umgebungsvariablen wurde hinzugefügt. Bei der Aufruf von environment() kann jetzt als erstes Element ein Wörterbuch angegeben werden, in dem die Umgebungsvariablen in Form von Schlüssel/Wert definiert sind. Diese Variablen werden in environment_object übertragen, als ob sie einzeln über die Methode set() festgelegt worden wären. Wörterbücher können nun auch an verschiedene Funktionen übergeben werden, die das Argument „env“ unterstützen.
- Die Funktion „runtarget alias_target(target_name, dep1, …)“ wurde hinzugefügt, die ein neues oberstes Build-Ziel erstellt, das mit dem ausgewählten Build-Backend aufgerufen werden kann (zum Beispiel „ninja target_name“). Dieses Build-Ziel führt keine Befehle aus, sorgt aber dafür, dass alle Abhängigkeiten gebaut werden.
- Die automatische Festlegung der Umgebungsvariablen PKG_CONFIG_SYSROOT_DIR beim Cross-Compiling wird sichergestellt, wenn die Konfiguration sys_root im Abschnitt „[properties]“ vorhanden ist.
- Eine Option „—gdb-path“ wurde hinzugefügt, um den Pfad zum Debugger GDB festzulegen, wenn die Option „—gdb testname“ angegeben wird, um GDB mit dem angegebenen Testskript zu starten.
- Automatische Zieldefinition für clang-tidy hinzugefügt, um diesen Linter mit allen Quelldateien auszuführen. Das Ziel wird erstellt, wenn clang-tidy im System vorhanden ist und eine Datei «.clang-tidy» (oder «_clang-tidy») im Hauptverzeichnis des Projekts definiert ist.
- Abhängigkeit dependency('blocks') zur Verwendung in Clang-Erweiterungen hinzugefügt. ;
- Die Sichtweisen von Linker und Compiler wurden getrennt, was die Verwendung unterschiedlicher Kombinationen von Compilern und Linkern ermöglicht.
- Die Quelle SourceSet erhielt die Methode all_dependencies() zusätzlich zur Methode all_sources();
- Das Skript run_project_tests.py hat die Option «--only» für die selektive Ausführung von Tests erhalten (z.B. «python run_project_tests.py --only fortran python3»);
- In der Funktion find_program() wurde die Möglichkeit hinzugefügt, nur die benötigten Versionen eines Programms zu suchen (die Version wird durch Ausführung des Programms mit der Option «--version» ermittelt);
- Für die Steuerung des Exports von Symbolen in der Funktion shared_module() wurde, analog zu shared_library(), die Option vs_module_defs hinzugefügt;
- Die Funktionalitäten des Moduls kconfig wurden erweitert, das jetzt configure_file() zur Definition der Eingabedatei unterstützt;
- In configure_file() wurde die Möglichkeit hinzugefügt, mehrere Eingabedateien für die Handler «command:» anzugeben;
- Der Befehl «dist» zur Erstellung von Archiven wurde in die Kategorie der Erstbefehle eingeteilt (zuvor war der Befehl an ninja gebunden). Eine Option «—formats» wurde hinzugefügt, um die Typen der erstellten Archive zu definieren (zum Beispiel,
«meson dist —formats=xztar,zip»).
Quelle: opennet.ru
