Как использовать мезон для сборки glib

Мне нужно обновить glib для конкретного проекта. В настоящее время он использует glib 2.28.8. У меня три проблемы.

  1. Я никогда раньше не использовал meson и ninja, поэтому я проверил INSTALL.in glib, и он просто сказал запустить meson _build, а затем ninja -C _build. Итак, я запустил meson _build и получил следующий результат:
$ meson _build
The Meson build system
Version: 0.47.2
Source dir: /srv/devel/build/glib-2.65.0
Build dir: /srv/devel/build/glib-2.65.0/_build
Build type: native build
meson.build:227: WARNING: Identifier 'in' will become a reserved keyword in a future release. Please rename it.

meson.build:227:14: ERROR:  Expecting eol got id.
if vs_crt_opt in ['mdd', 'mtd']

Итак, базовая сборка не работает. Почему?

  1. Для наших целей мы используем следующую команду configure:
PKG_CONFIG_PATH=$(OUTPUT_DIR)/lib/pkgconfig ./configure --prefix=$(OUTPUT_DIR) --disable-dtrace --disable-selinux ac_cv_path_MSGFMT=/bin/true CPPFLAGS="-fPIC -I$(OUTPUT_DIR)/include" LDFLAGS="-L$(OUTPUT_DIR)/lib" --enable-static --disable-shared

Как мне указать это в мезоне?

  1. Мне также нужно будет встроить Windows. Есть какие-то ошибки?

Спасибо!

РЕДАКТИРОВАТЬ: Я пробовал более старые версии glib, вернувшись к 2.62.0, и когда я запускаю meson _build, я получаю сообщение об ошибке meson.build:1:0: ERROR: Meson version is 0.47.2 but project requires >= 0.49.2.. Так что, вероятно, это большая часть проблемы для вопроса (1). Это работает на CentOS 6 и 7, поэтому мне, вероятно, придется получить и установить текущий мезонный пакет.


person John Frickson    schedule 27.06.2020    source источник


Ответы (1)


Итак, базовая сборка не работает. Почему?

Вы правильно поняли это в своей редакции: GLib 2.64 требует Meson 0.49.2, и кажется, что Meson 0.47.2 настолько стар, что не может правильно анализировать meson.build GLib.

Судя по выходным данным вашей сборки, вы пытаетесь собрать GLib 2.65.0. Обратите внимание, что 2.65 - это нестабильная серия релизов. Даже минорные версии GLib (2.62.x, 2.64.x и т. Д.) Стабильны; нечетные нестабильны. Использование нестабильного выпуска - это нормально, если вы знаете, на что подписались: он может содержать ошибки, а новые API, представленные в этой нестабильной серии, могут быть изменены или удалены до первого стабильного выпуска (в случае 2.65. x, соответствующий первый стабильный выпуск будет 2.66.0).

Для наших целей мы используем следующую команду configure:

Вам понадобится что-то вроде: meson --prefix $ (OUTPUT_DIR) -Dselinux = disabled -Ddefault_library = static _build

Из значения b_staticpic параметра по умолчанию можно увидеть, что -fPIC является значением по умолчанию для статических библиотеки, поэтому (я считаю) не нужно явно указывать.

Нет необходимости отключать поддержку dtrace, поскольку это по умолчанию отключено. Если вам нужно отключить его, вы сделаете это с помощью -Ddtrace=false.

Пользовательские аргументы -L и -I должны быть охвачены использованием --prefix.

Переопределение инструмента msgfmt для отключения интернационализации не является поддерживаемым способом создания GLib, и вы можете использовать его самостоятельно.

Есть хорошая документация по встроенным параметрам в Meson здесь и здесь.

Мне также нужно будет встроить Windows. Есть какие-то ошибки?

Это слишком общий вопрос, чтобы на него можно было ответить в StackOverflow.

person Philip Withnall    schedule 27.06.2020
comment
Обновил meson и перешел на glib 2.64.3. Теперь получаю ошибку meson.py, line 26, in from mesonbuild import mesonmain ImportError: No module named mesonbuild - person John Frickson; 28.06.2020
comment
Похоже, вы неправильно построили / установили мезон. См. mesonbuild.com/Getting-meson.html. - person Philip Withnall; 28.06.2020