Debhelper DH не повторяется, когда ожидается

Я конвертировал некоторые из моих пакетов для использования dh из пакета debhelper, когда заметил, что он не поддерживает повторные цели.

Например:

  1. я бегу debian/rules build проверить сборку.
  2. Сделайте небольшое изменение кода.
  3. Бежать debian/rules build снова, и это ничего не делает.

Или другой общий пример, который я делаю:

  1. я бегу fakeroot debian/rules binary проверить, правильно ли все установлено в пакете.
  2. Найти что-то не хватает; исправить проблему.
  3. Бежать fakeroot debian/rules binary проверить изменения, и это ничего не делает.

Это большое изменение в поведении по сравнению с CDBS, который я ранее использовал. Есть ли обходной путь для этого? Мне не хочется бегать debian/rules clean должны быть необходимы в этих ситуациях.

Debian/ правила:

    #!/usr/bin/make -f

    export DEB_CXXFLAGS_MAINT_APPEND+=-std=gnu++0x

    %:
       dh $@

1 ответ

Решение

Да, это намеренное и необходимое поведение для dh (он должен отслеживать, какие шаги он уже предпринял, потому что он обычно вызывается несколько раз в течение полной сборки пакета, и он не может использовать внутренние компоненты make сохранить состояние. Это своего рода ужасный взлом, но это достойное решение, учитывая ужасные ограничения проблемы).

Чтобы быть справедливым, это никогда не было четко определено, что debian/rules build должен делать, когда уже есть частичная сборка. Если сборка ранее была успешной, и ни одно состояние не было очищено, для Debhelper вполне разумно считать сборку выполненной.

Это может быть решение вашей проблемы просто использовать dh_clean когда вы хотите начать сборку заново. Это не будет ссылаться dh_auto_clean, так что если ваш код создается за пределами debian/ каталог, он не будет затронут, но состояние Debhelper будет очищено.

Если вместо этого вы хотите иметь возможность "перемотать" частичную сборку debhelper так, чтобы она думала, что сборка еще не выполнена, вы можете попробовать использовать скрипт, который выполняет что-то вроде

#!/bin/bash
sed -i -e '/dh_auto_build/,$ d' debian/*.debhelper.log

Это удалитdh_auto_build"запись и все после нее из любого состояния сборки *.debhelper.log, так что dh будет думать, что они не были сделаны. Любые шаги, предпринятые до этого момента, все равно будут считаться выполненными.

Другие вопросы по тегам