Выпуск сборочной системы Meson 1.7.0

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

Ключевой целью развития Meson является обеспечение высокой скорости сборочного процесса в сочетании с удобством и простотой использования. Вместо утилиты make при сборке по умолчанию применяется инструментарий Ninja, но возможно применение и других бэкендов, таких как Xcode и Visual Studio. В систему встроен многоплатформенный обработчик зависимостей, позволяющий использовать Meson для сборки пакетов для дистрибутивов. Правила сборки задаются на упрощённом предметно-ориентированном языке, отличаются хорошей читаемостью и понятны пользователю (по задумке авторов разработчик должен тратить минимум времени на написание правил).

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

Основные новшества Meson 1.7:

  • Добавлена конструкция “dependency(‘atomic’)” для проверки наличия библиотеки atomic с атомарными операциями для C++.
  • Добавлен новый язык программирования “Linear Asm” (диалект TI asm, поддерживаемый компилятором TI C6000).
  • Добавлена поддержка редакции языка Rust 2024 (rust_std=2024), которая будет зафиксирована в релизе компилятора Rust 1.85.0.
  • Добавлена поддержка компилятора TASKING VX-Toolset, используемого для семейства CPU Tricore.
  • Добавлена возможность запуска lint-ера clippy для проектов на языке Rust.
  • При настройке зависимостей для Cargo обеспечено определение всего дерева зависимостей и всех доступных возможностей. Данная операция выполняется на этапе до генерации AST (абстрактное синтаксическое дерево) для подпроекта, что избавляет от проблем с игнорированием для подпроекта возможностей, включённых для основного проекта через параметр “default_options”.
  • В модуле external_project обеспечено выставление переменных окружения PATH и LD_LIBRARY_PATH для корректного запуска программ.
  • В команду “format” добавлена поддержка аргумента “stdin” для чтения данных из стандартного входного потока, а не из файла.
  • Выполнение “meson test” теперь по умолчанию не приводит к инициированию полной сборки (не вызывает “ninja all”), а “ninja all” не выполняет пересборку всех тестов.
  • В команду vcs_tag() добавлена поддержка аргументов “install”, “install_dir”, “install_tag” и “install_mode” для установки сгенерированого файла.
  • Добавлена переменная окружения MESON_NUM_PROCESSES, отражающая число дочерних процессов, запущенных для распараллеливания сборки. Переменная может использоваться, например, в meson test, модуле external_project и в обработчиках Ninja, запускающих clang-tidy, clang-format и clippy.
Release. Ссылка here.