Die Veröffentlichung von Meson 1.3.0, einem Build-System, das fĂŒr Projekte wie X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME und GTK verwendet wird, ist erfolgt. 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 Hauptneuheiten in Meson 1.3:
- In die Compiler-ĂberprĂŒfungsfunktionen compiler.compiles(), compiler.links() und compiler.run() wurde die Option âwerror: trueâ hinzugefĂŒgt, bei der Compiler-Warnungen als Fehler behandelt werden (dies kann verwendet werden, um zu ĂŒberprĂŒfen, dass der Code ohne Warnungen kompiliert).
- Die Methode has_define wurde hinzugefĂŒgt, um zu ĂŒberprĂŒfen, ob ein Symbol vom PrĂ€prozessor definiert ist.
- Der Funktion configure_file() wurde der Parameter macro_name hinzugefĂŒgt, der einen Makroschutz gegen doppelte Einbindung ĂŒber â#includeâ (âinclude guardsâ) im Stil von C-Makros einfĂŒhrt (vereinfacht die Erstellung von Konfigurationsdateien mit dynamischen Makronamen).
- In configure_file() wurde ein neues Ausgabeformat â JSON (âoutput_format: jsonâ) hinzugefĂŒgt.
- In den Parametern c_std und cpp_std wurde die Möglichkeit zur Verwendung von Wertelisten hinzugefĂŒgt (z. B. âdefault_options: 'c_std=gnu11,c11'â).
- In Modulen, die CustomTarget zur Verarbeitung von Dateien verwenden, wurde die Möglichkeit zur Anpassung von Nachrichten, die von der Ninja-Utility ausgegeben werden, hinzugefĂŒgt.
- Die veraltete Build-Ziel (build_target) âjarâ wurde deklariert, stattdessen wird empfohlen, den Aufruf âjar()â zu verwenden.
- Im Methodeneintrag generator.process() wurde der Parameter âenvâ hinzugefĂŒgt, um eine Umgebungsvariable zu setzen, ĂŒber die der Generator Eingaben verarbeiten wird.
- Bei der Angabe von Build-Zielnamen, die mit ausfĂŒhrbaren Dateien verbunden sind, ist es erlaubt, Suffixe anzugeben, z.B. âexectuable(âfooâ, âmain.câ, name_suffix: âbarâ)â, um zusĂ€tzliche ausfĂŒhrbare Dateien im gleichen Verzeichnis zu generieren.
- In die Funktion exectuable() wurde der Parameter âvs_module_defsâ hinzugefĂŒgt, um eine Def-Datei zu verwenden, die eine Liste von Funktionen definiert, die an shared_module() ĂŒbergeben werden.
- In die Funktion find_program() wurde der Parameter âdefault_optionsâ hinzugefĂŒgt, um Standardoptionen fĂŒr das Fallback-Subprojekt festzulegen.
- Die Methode fs.relative_to() wurde hinzugefĂŒgt, die einen relativen Pfad fĂŒr das erste Argument relativ zum zweiten zurĂŒckgibt, falls der erste Pfad existiert. Zum Beispiel: âfs.relative_to(â/prefix/libâ, â/prefix/binâ) == â../libâ)â.
- In den Funktionen install_data(), install_headers() und install_subdir() wurde der Parameter follow_symlinks hinzugefĂŒgt, der dafĂŒr sorgt, dass symbolischen Links gefolgt wird, wenn er gesetzt ist.
- In die Methode int.to_string() wurde der Parameter âfillâ hinzugefĂŒgt, um die Zeichenkette mit vorangestellten Nullen aufzufĂŒllen. Zum Beispiel erzeugt der Aufruf message(n.to_string(fill: 3)) fĂŒr n=4 die Zeichenkette â004â.
- Ein neues Ziel clang-tidy-fix wurde hinzugefĂŒgt, das den Start des clang-tidy-Werkzeugs mit dem Flag â-fixâ definiert.
- Der Befehl compile ermöglicht nun die Angabe eines Suffix (TARGET_SUFFIX) fĂŒr das Build-Ziel ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]).
- Umgebungsvariable MESON_PACKAGE_CACHE_DIR hinzugefĂŒgt, um den Pfad zum Paket-Cache (subprojects/packagecache) zu ĂŒberschreiben, sodass beispielsweise ein gemeinsamer Cache fĂŒr mehrere Projekte verwendet werden kann.
- Der Befehl âmeson setup âclearcacheâ wurde hinzugefĂŒgt, um den permanenten Cache zu leeren.
- In alle Methoden zur ĂberprĂŒfung des Compilers âhas_*â wurde die UnterstĂŒtzung fĂŒr das SchlĂŒsselwort ârequiredâ hinzugefĂŒgt. Statt âassert(cc.has_function(âsome_functionâ))â kann jetzt âcc.has_function(âsome_functionâ, required: true)â angegeben werden.
- In den Funktionen shared_library(), static_library(), library() und shared_module() wurde das neue SchlĂŒsselwort rust_abi hinzugefĂŒgt, das anstelle des veralteten rust_crate_type verwendet werden sollte.
Quelle: opennet.ru
