Как собрать zstd как подпроект с системой сборки meson

Я хочу использовать библиотеку сжатия zstd для своего проекта библиотеки C ++. Моя система сборки основана на мезоне. Мой файл meson.build выглядит так

project('foo', 'cpp', default_options : 
    ['cpp_std=c++17', 'buildtype=release'], 
    version : '0.1', license: 'MIT')

subproject('zstd', default_options: 'builddir=build/meson')

Я создал файл обертки мезона zstd subprojects / zstd.wrap

[wrap-file]
directory = zstd-1.4.5

source_url = https://github.com/facebook/zstd/releases/download/v1.4.5/zstd-1.4.5.tar.gz
source_filename = zstd-1.4.5.tar.gz
source_hash = 98e91c7c6bf162bf90e4e70fdbc41a8188b9fa8de5ad840c401198014406ce9e

Когда я запускаю meson compile, я получаю эту ошибку

../meson.build:5:0: ERROR: Subproject exists but has no meson.build file

Проблема, похоже, в том, что zstd использует CMAKE в качестве системы сборки по умолчанию, а файл meson находится в подпапке build/meson, а не в корне, где его ожидает. Я пытался:

  • Использование default_options: 'builddir=build/meson' для подпроекта, но это не повлияло
  • Сборка zstd с использованием интеграции CMAKE завершилась неудачно из-за других ошибок, что усложнило настройку.
  • Создание патча для перемещения файлов сборки zstd meson на два каталога вверх в корень zstd, но для этого потребовалось больше зависимостей, а затем не удалось разрешить пути, поскольку zstd ожидает файлы в build/meson, а не в корне.

Могу ли я легко создать zstd как мезонный подпроект для моей библиотеки C ++?


person oleksii    schedule 26.09.2020    source источник


Ответы (1)


В meson нет опции builddir, а с default_options вы в любом случае можете установить только параметры проекта этого подпроекта (zstd / build / meson / meson_options.txt ). Таким образом, я думаю, что единственный способ решить эту проблему - создать патч, и он должен быть довольно простым:

  1. создать meson.build в каталоге корневых подпроектов

  2. переместите проект (...) из zstd / build / meson / meson.build в этот

  3. добавьте подкаталог, чтобы он содержал:

    проект(...)

    subdir ('сборка')

  4. перетащите однострочный файл meson.build в zstd / build

    subdir ('мезон')

person pmod    schedule 26.09.2020
comment
Правильно, я пытался понять это, спасибо за разъяснения. Я не хотел слишком сильно отклоняться от исходного кода zstd и не хотел отслеживать, что меняется в восходящем направлении (во всяком случае). Итак, я сделал патч для официальной базы данных обертывания мезонов, надеюсь, он будет принят, и я могу просто использовать однострочник subproject ('zstd') с файлом обертывания. Между тем, я бы просто использовал старую версию 1.3.3, доступную в базе данных, вот мой PR на github. com / mesonbuild / zstd / pull / 4 для более новой версии, из того, что я вижу, кому-то придется вручную создать заархивированный патч - person oleksii; 27.09.2020
comment
@oleksii, спасибо, вы можете спросить об этом в meson googlegroup, где у вас больше шансов связаться с авторами: Система сборки Meson ‹[email protected]›. Я не работал с оболочками, но из того, что я прочитал, обнаружил, что невозможно изменить каталог - возможно, стоит запросить функцию. Если вы это сделаете, дайте мне знать, мне было бы интересно узнать, какой вариант лучше ... - person pmod; 28.09.2020