Випуск складальної системи Meson 1.3

Опубліковано реліз складальної системи Meson 1.3.0, яка використовується для складання таких проектів, як X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME та GTK. Код Meson написаний мовою Python та постачається під ліцензією Apache 2.0.

Ключовою метою розвитку Meson є забезпечення високої швидкості складального процесу у поєднанні із зручністю та простотою використання. Замість утиліти make при складанні за замовчуванням застосовується інструментарій Ninja, але можливе застосування інших бекендів, таких як xcode і VisualStudio. У систему вбудований багатоплатформний обробник залежностей, що дозволяє використовувати Meson для збирання пакетів для дистрибутивів. Правила складання задаються спрощеною предметно-орієнтованою мовою, відрізняються гарною читальністю і зрозумілі користувачеві (за задумом авторів розробник повинен витрачати мінімум часу на написання правил).

Підтримується крос-компіляція та складання в Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS та Windows з використанням GCC, Clang, Visual Studio та інших компіляторів. Можливе складання проектів різними мовами програмування, включаючи C, C++, Fortran, Java та Rust. Підтримується інкрементальний режим збирання, при якому перезбираються лише компоненти, що безпосередньо пов'язані зі змінами, внесеними з моменту минулого збирання. Meson можна використовувати для формування повторюваних збірок, при яких запуск складання в різних оточеннях призводить до генерації повністю ідентичних файлів, що виконуються.

Основні нововведення Meson 1.3:

  • У методи перевірки компілятора compiler.compiles(), compiler.links() і compiler.run() додано опцію «werror: true», при якій попередження компілятора трактуються як помилки (можна використовувати для перевірки, що код збирається без попереджень).
  • Додано метод has_define для перевірки визначення символу препроцесором.
  • До функції configure_file() додано параметр macro_name, що додає макрозахист подвійного підключення через «#include» («include guards»), оформлену в стилі макросів мовою Сі (спрощує створення configure-файлів з динамічними іменами макросів).
  • До configure_file() додано новий формат виводу — JSON («output_format: json»).
  • У параметри c_std та cpp_std додано можливість використання списків значень (наприклад, "default_options: 'c_std=gnu11,c11'").
  • У модулях, що використовують CustomTarget для обробки файлів, додано можливість кастомізації повідомлень, що виводяться утилітою ninja.
  • Оголошена застаріла збірна мета (build_target) «jar», замість якої рекомендується застосовувати виклик «jar()».
  • У метод generator.process() доданий параметр 'env' для виставлення змінної оточення, через яку генератор оброблятиме введення.
  • При заданні імен цілей збірки, пов'язаних з виконуваними файлами, дозволено вказівку суфіксів, наприклад «exectuable('foo', 'main.c', name_suffix: 'bar')», для генерації додаткових файлів, що виконуються в тому ж каталозі.
  • До функції exectuable() додано параметр «vs_module_defs» для використання def-файлу, що визначає список функцій, що передаються в shared_module().
  • У функцію find_program() додано параметр 'default_options' для завдання параметрів за замовчуванням для запасного субпроекту (fallback).
  • Доданий метод fs.relative_to(), що повертає відносний шлях для першого аргументу щодо другого, якщо перший шлях існує. Наприклад, fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')».
  • У функції install_data(), install_headers() та install_subdir() доданий параметр follow_symlinks, при виставленні якого забезпечується слідування за символічними посиланнями.
  • До методу int.to_string() доданий параметр "fill" для додаткового заповнення рядка початковими нулями. Наприклад, виклик message(n.to_string(fill: 3)) для n=4 сформує рядок "004".
  • Додано нову мету clang-tidy-fix, що визначає запуск утиліти clang-tidy з прапором «-fix».
  • У команду compile додано можливість вказівки суфікса (TARGET_SUFFIX) складальної мети ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]).
  • Додана змінна оточення MESON_PACKAGE_CACHE_DIR для перевизначення шляху до кешу пакетів (subprojects/packagecache), наприклад, дозволяє використовувати спільний кеш у кількох проектах.
  • Додана команда "meson setup-clearcache" для очищення постійного кешу.
  • До всіх методів перевірки компілятора «has_*» додано підтримку ключового слова «required», наприклад замість «assert(cc.has_function('some_function'))» тепер можна вказувати «cc.has_function('some_function', required: true)».
  • До функцій shared_library(), static_library(), library() і shared_module() додано нове ключове слово rust_abi, яке слід використовувати замість застарілого rust_crate_type.

Джерело: opennet.ru

Додати коментар або відгук