Мезонный эквивалент CONFIG_STATUS_DEPENDENCIES автопроизводителя?

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

В настоящее время в проекте используются Autotools, и я могу выразить это требование с помощью CONFIG_STATUS_DEPENDENCIES переменная. Я экспериментирую с переносом процесса сборки на Meson и не могу найти аналога. Есть ли в настоящее время эквивалент или мне нужно подать запрос на добавление функции?

Для конкретности приведем фрагмент meson.build в процессе:

pymod = import('python')
python = pymod.find_installation('python3')
svf_script = files('scripts/compute-symver-floor')
svf = run_command(python, svf_script, files('lib'),
                  host_machine.system())
if svf.returncode() == 0
  svf_results = svf.stdout().split('\n')
  SYMVER_FLOOR = svf_results[0].strip()
  SYMVER_FILE  = svf_results[2].strip()

else
  error(svf.stderr())
endif

# next line is a fake API expressing the thing I can't figure out how to do
meson.rerun_configuration_if_files_change(svf_script, SYMVER_FILE)

person zwol    schedule 29.11.2019    source источник


Ответы (1)


Для этого нужен custom_target().

Минимальный пример

svf_script = files('svf_script.sh')
svf_depends = files('config_data_1', 'config_data_2') # files that svf_script.sh reads

svf = custom_target('svf_config', command: svf_script, depend_files: svf_depends, build_by_default: true, output: 'fake')

Это создает настраиваемую цель с именем svf_config. Когда устарело, запускает команду svf_script. Это зависит от файлов в объекте svf_depends file, а также от всех файлов, перечисленных в аргументе ключевого слова command (т. Е. От самого скрипта).

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


output установлен в 'fake', чтобы Мезон не жаловался на отсутствующий аргумент ключевого слова вывода. Убедитесь, что в соответствующем каталоге сборки есть файл с таким же именем, чтобы целевой объект не всегда считался устаревшим. В качестве альтернативы, если ваш сценарий (-ы) конфигурации генерирует выходные файлы, вы можете перечислить их в этом массиве.

person bool3max    schedule 31.12.2019
comment
Извините, я не думаю, что вы поняли вопрос. Я не ищу способ заставить svf_script работать в каждой сборке. Я ищу способ сообщить Meson, что ему нужно повторить процесс конфигурации (то, что происходит, когда вы делаете meson <builddir> в новом дереве исходного кода), если svf_script изменяется. Другими словами, он должен обрабатывать svf_script как meson.build. - person zwol; 01.01.2020
comment
Я не понимаю, зачем тебе это нужно. Не могли бы вы уточнить? Вы можете сделать практически любой аспект meson.build динамическим и зависящим от вывода определенного скрипта. Зависимости, новые цели, выходы, входы - все это может быть динамическим без повторного запуска настройки. - person bool3max; 02.01.2020