debhelper dh在预期的时候不会重新运行

时间:2014-07-17 17:09:51

标签: debian packaging deb debhelper

当我注意到它不支持重新运行目标时,我正在将我的一些软件包转换为使用debhelper软件包中的dh。

例如:

  1. 我运行debian/rules build来检查构建。
  2. 进行小规模的更改。
  3. 再次运行debian/rules build,它什么都不做。
  4. 或者我做的另一个常见例子:

    1. 我运行fakeroot debian/rules binary以检查我是否正确安装了包中的所有内容。
    2. 找不到的东西;纠正问题。
    3. 运行fakeroot debian/rules binary以测试更改,但它什么也没做。
    4. 这是我以前使用的CDBS行为的重大变化。有没有解决这个问题?在这些情况下,我不想要跑步debian/rules clean

      的Debian /规则:

          #!/usr/bin/make -f
      
          export DEB_CXXFLAGS_MAINT_APPEND+=-std=gnu++0x
      
          %:
             dh $@
      

1 个答案:

答案 0 :(得分: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

这将从任何* .debhelper.log构建状态中删除“dh_auto_build”条目及其后的所有内容,以便dh认为它们尚未完成。它所采取的任何步骤仍将被视为已完成。