Выпуск сборочной системы Meson 0.52
9 октября 2019 года
Опубликован релиз сборочной системы Meson 0.52, которая используется для сборки таких проектов, как 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 0.52:
- Добавлена экспериментальная поддержка Webassembly с использованием в качестве компилятора Emscripten;
- Существенно улучшена и доведена до рабочего состояния поддержка платформ Illumos и Solaris;
- Обеспечено игнорирование сценариев интернационализации на базе gettext в случае отсутствия в системе установленного инструментария gettext (ранее при использовании модуля i18n на системах без gettext выводилась ошибка);
- Улучшена поддержка статических библиотек. Решены многие проблемы при использовании деинсталлированных статических библиотек;
- Добавлена возможность использования словарей для назначения переменных окружения. При вызове environment() в качестве первого элемента теперь можно указать словарь, в котором переменные окружения определены в форме ключ/значение. Данные переменные будут перенесены в environment_object как если бы они по отдельности устанавливались через метод set(). Словари также теперь могут передаваться в различные функции, поддерживающие аргумент "env";
- Добавлена функция "runtarget alias_target(target_name, dep1, ...)", создающая новую сборочную цель первого уровня, которую можно вызывать с выбранным сборочным бэкендом (например, "ninja target_name"). Данная сборочная цель не запускает никакие команды, но обеспечивает сборку всех зависимостей;
- Обеспечена автоматическая установка переменной окружения PKG_CONFIG_SYSROOT_DIR при кросс-компиляции при наличии настройки sys_root в секции "[properties]";
- Добавлена опция "--gdb-path" для определения пути к отладчику GDB при указании опции "--gdb testname" для запуска GDB с указанным тестовым сценарием;
- Добавлено автоматическое определение сборочной цели clang-tidy для запуска этого linter-а со всеми исходными файлами. Цель создаётся при наличии в системе clang-tidy и определении в корне проекта файла ".clang-tidy" (или "_clang-tidy");
- Добавлена зависимость dependency('blocks') для использования в Clang расширения Blocks;
- Разделены представления компоновщика и компилятора, что позволяет использовать разные сочетания компиляторов и компоновщиков;
- В объекты SourceSet добавлен метод all_dependencies() в дополнение к методу all_sources();
- В run_project_tests.py появилась опция "--only" для выборочного запуска тестов (например, "python run_project_tests.py --only fortran python3");
- В функции find_program() добавлена возможность поиска только требуемых версий программы (версия определяется через запуск программы с опцией "--version");
- Для управления экспортом символов в функцию shared_module() по аналогии с shared_library() добавлена опция vs_module_defs;
- Расширены возможности модуля kconfig, который теперь поддерживает configure_file() для определения входного файла;
- В configure_file() добавлена возможность указания нескольких входных файлов для обработчиков "command:";
- Команда "dist" для создания архива переведена в разряд команд первого уровня (ранее команда была привязана к ninja). Добавлена опция "--formats" для определения типов создаваемых архивов (например,
"meson dist --formats=xztar,zip").
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.