Как построить zstd как подпроект с помощью meson build system

#c #dependency-management #meson-build #zstd

#c #управление зависимостями #meson-build #zstd

Вопрос:

Я хочу использовать библиотеку сжатия zstd для моего проекта библиотеки C . Моя система сборки основана на meson. Мой файл 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 meson wrap 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 вложенной папке, а не в корне, где его ожидает meson. Я пытался:

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

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

Ответ №1:

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

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

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

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

    проект (…)

    subdir(‘build’)

  4. поместите однострочный meson.build в zstd / build

    subdir(‘meson’)

Комментарии:

1. Верно, я пытался разобраться в этом, спасибо за разъяснение. Я не хотел слишком сильно отклоняться от исходного кода zstd и не хотел отслеживать, что меняется вверх по течению (если что-нибудь). Итак, я сделал исправление для официальной базы данных meson wrap, надеюсь, это можно принять, и я могу просто использовать однострочный subproject ('zstd') файл с файлом переноса. Между тем, я бы просто использовал более старую версию 1.3.3, доступную в базе данных, вот мой ПИАР github.com/mesonbuild/zstd/pull/4 для более новой версии, судя по тому, что я вижу, кому-то придется создавать архивированный патч вручную

2. @oleksii спасибо, вы можете попробовать задать этот вопрос в meson googlegroup, где у вас больше шансов связаться с авторами: система сборки Meson <mesonbuild@googlegroups.com >. Я не работал с переносами, но из того, что я прочитал, и обнаружил, что изменить каталог невозможно — возможно, стоит запросить функцию. Если вы это сделаете, пожалуйста, дайте мне знать, мне было бы интересно узнать, какой вариант лучше…