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

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

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

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

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

  • Додано підтримку прозорого складання існуючих проектів, в яких використовуються складальні сценарії CMake. Meson тепер може безпосередньо збирати прості субпроекти (такі як одиночні бібліотеки) з використанням модуля CMake за аналогією зі штатними субпроектами (у тому числі субпроекти на CMake можуть розміщуватися в каталозі subprojects );
  • Для всіх застосовуваних компіляторів включено попереднє тестування через складання та виконання найпростіших тестових файлів (sanity check), не обмежуючись тестуванням вказаних користувачем прапорів для крос-компіляторів (відтепер перевіряються й для поточної платформи компілятори).
  • Додано можливість визначення опцій командного рядка, які застосовуються при крос-компіляції, з прив'язкою через завдання префікса платформи перед опцією. Раніше опції командного рядка охоплювали лише збірку для рідної платформи та не могли вказуватись для крос-компіляції. Тепер опції командного рядка застосовуються незалежно від того здійснюється нативне складання або крос-компіляція, гарантуючи, що для нативних та крос-складання буде отримано ідентичний результат;
  • Додано можливість вказати прапор «cross-file» більше одного разу в командному рядку для перерахування декількох cross-файлів;
  • Додано підтримку компілятора ICL (Intel C/C++ Compiler) для платформи Windows (ICL.EXE та ifort);
  • Додано початкову підтримку інструментарію для CPU Xtensa (xt-xcc, xt-xc++, xt-nm);
  • До об'єкта «dependency» додано метод «get_variable», що дозволяє отримати значення змінної без урахування типу поточної залежності (наприклад, dep.get_variable(pkg-config : 'var-name', cmake : 'COP_VAR_NAME));
  • Додано новий аргумент параметрів цільової збірки - "link_language" для явного визначення мови, що використовується при виклику компонувальника. Наприклад, основна програма на Fortran може викликати код на C/C++, що призведе до автоматичного вибору C/C++, в той час як потрібно використовувати компонувальник від Fortran;
  • Змінено обробку прапорів препроцесора CPPFLAGS. Якщо раніше Meson окремо зберігав CPPFLAGS та специфічні для мов прапори компіляції (CFLAGS, CXXFLAGS), то тепер вони обробляються нероздільно і перелічені у CPPFLAGS прапори застосовуються як ще одне джерело прапорів компіляції для мов, що їх підтримують;
  • Висновок custom_target і custom_target[i] тепер може використовуватися як аргументи в операціях link_with і link_whole;
  • У генераторах додано можливість завдання додаткових залежностей за допомогою опції «depends» (наприклад, generator(program_runner, output: ['@[захищено електронною поштою]'], depends: exe));
  • У find_library додано опцію static для охоплення пошуком тільки статично пов'язаних бібліотек;
  • Для python.find_installation додано можливість визначення наявності заданого Python-модуля для конкретної версії Python;
  • Додано новий модуль unstable-kconfig для аналізу файлів kconfig;
  • Додано нову команду «subprojects foreach», яка приймає команду з аргументами і запускає її у всіх каталогах субпроектів;

Джерело: opennet.ru

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