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

Опубликован релиз сборочной системы Meson 1.6.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.6:

  • Добавлена команда “meson reprotest” для тестирования повторяемых сборок.
  • Добавлена поддержка компилятора flang, развиваемого проектом LLVM.
  • Добавлена поддержка SDK DIA (Debug Interface Access), позволяющего читать отладочную информацию в формате PDB, используемом на платформе Windows.
  • В компиляторах nvc и nvc++ от компании NVIDIA обеспечена возможность выбора стандартов Си и Си++. В nvc: c89, c90, c99, c11, c17, c18, gnu90, gnu89, gnu99, gnu11, gnu17, gnu18. В 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.
  • Предоставлена возможность определения наличия специфичных для Qt утилит (moc, uic, rcc и lrelease) через вызов функции has_tools() для импортированных модулей сборки Qt.
  • Реализована возможность использования компилятора OpenXL на платформе AIX (помимо ранее поддерживаемого GCC).
  • По умолчанию включён вывод предупреждений о всех устаревших возможностях, если в функции project() для собираемого проекта не указана минимальная версия Meson.
  • Добавлена поддержка использования переменных в системных зависимостях (в методе get_variable()).
  • Добавлено предупреждение об экспериментальном характере поддержки субпроектов Cargo.
  • В зависимостях, полученных из субпроектов CMake, теперь разрешено использование только флагов компоновки, помеченных в CMake как PUBLIC или INTERFACE (флаги помеченные как PRIVATE применяются только при сборке библиотеки субпроекта, а не при использовании в роли зависимости).
  • Добавлена опция default_both_libraries, позволяющая переопределить поведение по умолчанию сборочной цели both_libraries.
  • Для внутренних зависимостей, возвращаемых функцией declare_dependency(), реализованы методы as_static и as_shared для преобразования списка зависимостей с учётом статического или динамического связывания.
  • В функциях test() и benchmark() добавлена возможность определения того, что проверяемый исполняемый файл является обёрткой для вызова других программ. Например: test(‘some_test’, find_program(‘sudo’), args : [ find_program(‘sh’), ‘script.sh’ ])
  • Добавлена поддержка использования вместо Clang фронтэнда компилятора C/C++, предоставляемого в инструментарии к языку Zig 0.11.
Release. Ссылка here.