#ninja #meson-build
Вопрос:
Meson/Ninja предоставляют простой способ запуска скрипта во время установки.
Например, в этой строке Мезону будет предложено выполнить glib-compile-schemas
команду для компиляции GSettings в Linux (параметры конфигурации системы).
meson.add_install_script('glib-compile-schemas', schemas_dir)
(эта команда будет автоматически запущена при выполнении пользователем ninja install
)
Как я могу сказать Meson, чтобы он запустил пользовательскую команду при удалении?
В этом конкретном случае я хотел бы удалить (или, по крайней мере, сбросить значение по умолчанию) пары ключ-значение в GSettings. Чтобы сбросить их, я обнаружил, что команда gsettings reset-recursively <path>
выполнена (успешно протестирована в терминале).
Ответ №1:
Добавление пользовательского сценария удаления все еще обсуждается, он был предложен довольно давно, но еще не реализован. Похоже, что эта задача обычно остается для менеджера пакетов (и, следовательно, для соответствующих упакованных сценариев).
Но я согласен, что в случае команды meson install существует некоторая нелогичная асимметрия. В качестве обходного пути вы можете создать свою собственную цель:
run_target('my-uninstall', command : ['scripts/uninstall.sh'])
Недостатки, конечно, заключаются в том, что он должен вызываться явно, не может переопределять, добавлять или переименовывать внутреннюю цель удаления, а сценарий должен иметь разрешения на выполнение.
Однако внутренняя зарезервированная цель удаления отменяет все явные операции установки:
Meson позволяет удалить шаг установки, вызвав цель удаления. Это приведет к удалению всех файлов, установленных в рамках установки. Обратите внимание, что это не приведет к восстановлению исходных файлов. Это также не отменяет изменения, внесенные пользовательскими сценариями установки (поскольку они могут выполнять произвольные операции установки).
Комментарии:
1. Большое вам спасибо за ваш точный ответ и за то, что нашли время поделиться своими знаниями!! Я думаю, что на этом этапе я создам пользовательский
uninstall.py
скрипт, который будет выполнятьсяninja uninstall
плюс другие пользовательские команды2. Я не думаю, что это возможно, у мезона и, следовательно, у ниндзя уже есть цель удаления, которая отменяет все операции установки, но, очевидно, не отменяет никаких операций, выполненных из add_install_script (), проверьте это mesonbuild.com/Release-notes-for-0-38-0.html (сверху)
3. Решение (ожидание официальной функции Мезона): Я создал скрипт bash
uninstall.sh
, который вызывает,sudo ninja uninstall
а также выполняет другие пользовательские операции, которые необходимо выполнить. Я протестировал его, и он работает. Спасибо вам за то, что помогли мне лучше понять проблему.4. ладно, я вижу, все наоборот, я рад, что это помогло!