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

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

Meson

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

История

Создание

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

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.