使用非标准选项构建 Debian 软件包

Mar*_*ter 6 compiling debian dpkg package-management configure

我想从源代码构建 Debian 软件包,使用dpkg-buildpackage. 我已经下载了包源:

apt-get -t wheezy-backports source gnucash
Run Code Online (Sandbox Code Playgroud)

gnucash-2.6.9/configure我看到的文件中,有一些选项可以在构建包时选择/取消选择。

Debian 维护者已经为我做出了决定。但是如果我想禁用某些选项,我该怎么做?

可以说,我想编译没有--enable-aqbanking. 这个选项出现在几个配置文件中:

$ grep -rl enable-aqbanking gnucash-2.6.9/
gnucash-2.6.9/packaging/gnucash.spec
gnucash-2.6.9/packaging/gnucash.spec.in
gnucash-2.6.9/configure.ac
gnucash-2.6.9/configure
Run Code Online (Sandbox Code Playgroud)

我应该编辑哪些?

什么是正确的方法呢?

Fah*_*tha 6

gnucash-2.6.9/packaging/gnucash.spec并且gnucash-2.6.9/packaging/gnucash.spec.in不是 Debian 包装的一部分。它们是项目自己的规范文件(第二个是模板),用于以 RPM 形式打包 gnucash。

gnucash-2.6.9/configure.ac也是上游的一部分。这是一个 Autoconf 文件,用于生成gnucash-2.6.9/configure. 这个autoconf.ac文件被 Debian 打包使用,但不是它的一部分。

所有 Debian 软件包都位于debian/子目录中。

实际的构建脚本(实际上只是一个 Makefile)是debian/rules,所以这就是您在这里需要关心的全部内容。大多数 Debian 软件包都使用该debhelper程序。这个包碰巧使用了更新和现代的dh变体,它是debhelper.

简而言之,“传统”的debhelper工作方式是提供一套可用于构建包的标准命令,而不必从头开始做所有事情。dh是一个较新的变体,它对每个标准debhelper步骤都有默认值,如有必要可以覆盖。哪个链接到 AP 所说的内容。在这种情况下,规则文件将覆盖默认配置步骤。因此。您需要修改此override_dh_auto_configure目标以更改配置步骤的作用。这是override_dh_auto_configure目标:

override_dh_auto_configure:
        dh_auto_configure -- \
                --libdir=/usr/lib/$(DEB_HOST_MULTIARCH)/gnucash \
                --infodir=/noinst \
                --mandir=/noinst \
                --docdir=/noinst \
                --disable-static \
                --enable-dbi \
                --enable-ofx \
                --enable-aqbanking \
                --enable-locale-specific-tax \
                --enable-python
Run Code Online (Sandbox Code Playgroud)

所以,这是覆盖dh_auto_configure debhelper目标。查看man dh_auto_configure有关该目标的更多信息。

在这种情况下,默认值dh_auto_configureconfigure不带参数运行,即./configure. 覆盖仅configure使用给定的参数/选项运行。因此,您需要在--enable-aqbanking此处删除参数/选项。

这里有一些关于 dh 的幻灯片:Not Your Grandpa's Debhelper。网络上还有其他信息。


A.P*_*.P. 5

好的,看一下gnucash-2.6.x/debian/rules

找到说的那一行override_dh_auto_configure:(在我的例子中是第 23 行),然后在它下面添加你的覆盖。

在你的情况下--enable-aqbanking已经存在(至少对于 wheezy-backports),所以只需删除它。

更多信息可以在手册页中找到。

更新:此外,有时文件中有一个变量rules负责将自定义内容传递给configure. 它通常位于文件的顶部,称为DEB_CONFIGURE_EXTRA_FLAGS.