Выпуск сборочной системы 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.



Источник: http://www.opennet.ru/opennews/art.shtml? num=60148

© OpenNet