custom_target () для извлечения и построения внешнего источника - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть проект Meson, который будет иметь несколько шагов:

  • Скачать и распаковать архив
  • cd в него, ./configure - это создает определенный файл в верхнем архиве dir
  • Настроить файл в архиве dir
  • Дополнительные шаги сборки

У меня проблема в том, как настроить файлы ввода / вывода и зависимости. Пока что у меня есть:

src_archive = 'extracted-dir' # this is what comes out of the upstream archive

# wget and untar a tarball (produces the 'extracted-dir' dir in the build directory)
dl_tgt = custom_target('download',
  command : [files('scripts/download.sh')],
  output : src_archive
)

# cd to the directory, .configure
# when this is complete, a file 'extracted-dir/docs/Doxyfile' will exist

upstream_doxyfile = 'Doxyfile' # can't set a path on this file
conf_tgt = custom_target('configure_src',
    input : dl_tgt,
    command : [files('scripts/configure.sh'), '@INPUT@'],
    output : doxy_out
)

# Modify the upstream Doxyfile (copy it and append some settings to the copy)

mod_doxyfile = 'Doxyfile.mod'

mod_doxy_tgt = custom_target('configure_doxy',
    build_by_default : true,
    input : conf_tgt,
    command : [files('scripts/configure-doxy.sh'), '@INPUT@'],
    output : mod_doxyfile
)

# ... and so on to run more steps as needed (in reality, some of these steps might be combined)

Причина иметь отдельные шаги, если позволить Meson избежать, скажем, повторения загрузки, если файл уже загружен.

Если вы попытаетесь запустить это, он не сможет найти Doxyfile с (поскольку они находятся в подкаталогах).

Если вы укажете их путями, это ошибка:

ERROR:  Output 'extracted-dir/docs/Doxyfile' must not contain a path segment.

Я также мог бы сделать это вручную, указав пути внутри сценариев, но тогда сборка мезонов - это просто слишком сложный сценарий оболочки без какого-либо управления зависимостями.

Как связать зависимости файлов в каталоге сборки следующим образом?

1 Ответ

0 голосов
/ 08 декабря 2018

В мезонах это ограничение, оно сообщается как проблема и все еще открыто. Однако для вашей пользовательской цели модификации Doxyfile подстановка должна работать:

mod_doxy_tgt = custom_target('configure_doxy',
    input : doxy_out,
    ...
    output : '@BASENAME@.mod'
)

Однако, чтобы решить проблему в целом, рассмотрите возможность создания другого файла meson.build в каком-то каталоге, в который вы извлекаете архив в восходящем направлении и включаете его в основной файл с помощью:

subdir('extracted_docs_dir')

так что Doxyfile находится на том же уровне, что и meson.build . Таким образом, вы можете использовать имена файлов в output : напрямую, и это также может быть полезно для изоляции этой конкретной задачи от основных правил сборки.

...