Meson (система сборки) (Meson (vnvmybg vQkjtn))

Перейти к навигации Перейти к поиску
Meson
Логотип программы Meson
Скриншот программы Meson
Процесс сборки dav1d (кодек-декодер из проекта VideoLAN) с помощью Meson
Тип система сборки[вд]
Разработчик Юсси Пакканен[вд][2]
Написана на Python[3]
Операционные системы Unix-подобная операционная система[4] и Windows
Языки интерфейса английский
Первый выпуск 2 марта 2012
Аппаратная платформа кроссплатформенность[4]
Последняя версия
Репозиторий github.com/mesonbuild/me…
Состояние активное
Лицензия Apache License 2.0[5][2]
Сайт mesonbuild.com (англ.)
Логотип Викисклада Медиафайлы на Викискладе

Meson (МФА [ˈmiːzɒn]; с англ. — «мезон») — это кроссплатформенная консольная утилита, автоматизирующая процесс сборки программного обеспечения из исходного кода. Meson имеет открытый исходный код и распространяется под лицензией Apache. Основная идея Meson — совершать максимально быструю сборку и не затрачивать ни капли времени на отладку и тестирование, а так же на ожидание начала самого процесса компиляции. Утилита также имеет и более длинное, полное название — «The Meson build system» (Система сборки Мезон). Но, несмотря на то, что Meson официально позиционируется как система сборки, на самом деле таковой не является, так как в своей основе использует другую утилиту — систему сборки Ninja и ряд некоторых других утилит[6][7].

Первая версия Meson появилась в период рождественских праздников 2012 года и была разработана финским физиком-программистом Юсси Пакканеном. Разработчик был удручён тем, в каком состоянии пребывали на тот период времени системы автоматизации сборки. Многие не понравились ему тем, что работали слишком медленно, некоторые были слишком сложны в практическом применении, а другие имели слишком переусложнённый и неясный синтаксис. Не найдя желаемой системы сборки, Юсси решился потратить своё свободное время в эти праздничные выходные и создать свою собственную систему сборки, которая удовлетворяла бы его потребности[8][9].

Этимология

[править | править код]

Название утилиты подбиралось с учётом того, что оно не должно было совпадать с названием какого-либо пакета из базы пакетного менеджера системы Debian или с каким-либо проектом в базе SourceForge. Так как Юсси физик-программист, в какой-то момент он решил использовать в качестве названия имя элементарной частицы — Глюон (англ. Gluon, от слова glue — клей), подразумевая, что «глюоны — это элементарные частицы, которые удерживают протоны и нейтроны вместе, подобно тому, как задача системы сборки состоит в том, чтобы взять фрагменты исходного кода и компилятора, а затем связать их в единое целое». Но, увы, данное имя уже было занято, затем, перебрав несколько оставшихся субатомных частиц, он выяснил, что имя частицы мезон оказалось свободным[10].

Возможности

[править | править код]

Заявленной целью Meson является содействие современным методам разработки. Таким как использование метода «единой сборки[англ.]», сборки с покрытием кода тестами, LTO оптимизации (link time optimization) и т. д. Без необходимости программиста писать для этого поддержку.

Переносимость

[править | править код]

Будучи написанным на Python, Meson изначально работает в Unix-подобных операционных системах, включая macOS, а также Microsoft Windows и в ряде других операционных систем.

Meson поддерживает языки Си, C++, CUDA, D, Objective-C, Фортран, Java, C#, Rust, Vala[11] и имеет механизм обработки зависимостей, так называемый «Wrap»[12].

Meson поддерживает GNU Compiler Collection, Clang, Microsoft Visual C++ и другие компиляторы, включая нетрадиционные компиляторы, такие как Emscripten и Cython[13][14]. При этом, Meson самостоятельно принимает решение о том, какой компилятор и с какими параметрами следует использовать. А кросс-компиляция проектов требует дополнительной конфигурации, которую Meson поддерживает в виде отдельного файла, который может быть внешним по отношению к проекту Meson[15].

Meson использует Ninja в качестве основной системы сборки, но также может использовать Microsoft Visual Studio или Xcode.

Подпроекты

[править | править код]

Meson может автоматически находить и использовать внешние зависимости с помощью pkg-config, CMake и поиска по конкретным проектам[16], но это позволяет находить только установленные зависимости, с которыми Meson ничего не может поделать. В качестве альтернативы или в качестве запасного варианта, зависимость может быть предоставлена в виде подпроекта — проекта Meson внутри другого, либо содержащегося в виде ссылки для внешней загрузки, возможно с патчами[12]. Это позволяет Meson разрешить «ад зависимостей» ради удобства обыкновенных пользователей, которые хотят скомпилировать проект, но также может способствовать раздуванию ПО в размерах, если вместо этого можно было использовать общую установленную зависимость. Таким образом, предпочтительный режим использования пакетов Linux уходит на второй план.

Meson помимо собственной системы подпроектов, поддерживает и систему подпроектов CMake. Файл сборки Meson может также ссылаться на службу Wrap DB[17].

Интеграция с ИСР

[править | править код]

Meson изначально имеет встроенную поддержку Visual Studio и XCode, но для упрощения интеграции с самыми разными ИСР, было разработано специальное API решающие данную проблему. Для этого, каждый раз при запуске сборки Meson создаёт папку «meson-info» и помещает в ней информационные файлы формата JSON. С помощью данных файлов любая программа может получит подробную информацию о собираемых проектах[18].

Синтаксис файлов описания сборки Meson (язык Meson) заимствован от Python, но сам не является языком Python. Он был создан таким образом, что его можно повторно реализовать на любом другом языке[19][20]. Например, Meson++[21] является реализацией на языке C++, зависимость от языка Python является лишь деталью реализации.

Язык Meson целенаправленно не является тьюринг-полным и следовательно не может выражать произвольную программу[22]. Вместо этого произвольные этапы сборки, выходящие за рамки компиляции поддерживаемых языков, могут быть представлены в виде пользовательских целей[23].

Язык Meson строго типизирован, так что встроенные типы, такие как библиотека, исполняемый файл, строки и их списки, не являются взаимозаменяемыми[24]. Переменные не имеют видимого типа, что также делает Meson динамически типизированным. В отличие от того же Make, тип списка не разделяет строки на пробелы[25].

Создадим «Hello, World!» проект на языке Си, файл будет называться «main.c».

#include <stdio.h>

int main()
{
    puts("Hello, World!");
    return 0;
}

Далее рядом с ним создаём файл — «meson.build».

project('tutorial', 'c')      # tutorial — имя проекта,
                              # c — язык программирования

executable('demo', 'main.c')  # demo — имя исполняемого файла,
                              # «main.c» — файл исходного кода

Для начала инициализируем проект.

$ meson setup builddir

Появится каталог «builddir», перейдём в него и соберём наш проект.

$ cd builddir
$ meson compile

Исполняемый файл готов, осталось лишь запустить.

$ ./demo

Программные проекты использующие Meson

[править | править код]

Из списка программных проектов можно отметить наиболее значимые и влиятельные[26]:

Примечания

[править | править код]
  1. Release 1.6.0 — 2024.
  2. 1 2 The Meson Build system: Legal information (англ.)
  3. Meson build system on Open Hub: Languages Page (англ.)
  4. 1 2 The Meson Build system (англ.)
  5. GitHub: COPYING (англ.)
  6. Выпуск сборочной системы Meson 0.58. Проект по созданию реализации Meson на языке Си. OpenNET (2 мая 2021). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  7. Meson manual: Running Meson — Building from the source. Building directory with ninja (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  8. Tim Schürmann. Meson — новая система сборки программного обеспечения. rus-linux.net (18 апреля 2017). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  9. Tim Schürmann. Meson — a new build system (англ.). Linux Magazine (1 сентября 2014). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  10. Why is it called Meson? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  11. The Meson Build System: Functions — project() (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 10 февраля 2022 года.
  12. 1 2 The Meson Build System: Wrap dependency system manual (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  13. The Meson Build System: Compiler ids (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 21 февраля 2022 года.
  14. Jussi Pakkanen. How compilation works (англ.) (PDF). meson-manual.com (2020). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  15. The Meson Build System: Cross compilation (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  16. The Meson Build System: Dependencies — Dependencies with custom lookup functionality (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 21 февраля 2022 года.
  17. The Meson Build System: Meson WrapDB packages (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  18. The Meson Build System: Manual — IDE integration (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  19. The Meson Build System: FAQ — Why is Meson implemented in Python (rather than programming language X)? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  20. The Meson Build System: FAQ — But I really want a version of Meson that doesn't use python! (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  21. Meson++ (англ.). GitHub. Дата обращения: 22 января 2022. Архивировано 6 января 2022 года.
  22. The Meson Build System: FAQ — Why is Meson not just a Python module so I could code my build setup in Python? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  23. The Meson Build System: FAQ — I have proprietary compiler toolchain X that does not work with Meson, how can I make it work? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  24. The Meson Build System: Syntax (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  25. The Meson Build System: FAQ — Why is there not a Make backend? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  26. The Meson Build System: Additional documentation — List of projects using Meson (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.