如何创建一个Debian包作为autotools构建的一部分?

时间:2012-10-09 21:27:27

标签: debian packaging autotools automake

我能找到的所有Debian打包示例都假设用户正在从上游构建重新打包,因此它解压缩源tarball,配置,重建和重新打包。我正在尝试为自己的库构建一个包,它是使用autotools构建的。我尝试了几种不同的方法,我的最新尝试看起来像这样:

DH_PACKAGE_NAME=`echo $(PACKAGE_NAME) | sed s/_/-/g`
dist-hook:
    cd $(distdir) ; \
    export DEBFULLNAME="Some One" ; \
    export DEBEMAIL="someone@foo.com" ; \
    echo -e "\n" | dh_make --copyright blank --library --native \
        --packagename $(DH_PACKAGE_NAME)
    mv $(distdir)/debian $(distdir)/DEBIAN
    dpkg-deb --build $(distdir)

dpkg-deb抱怨dh_makes控件文件。我知道解决方案更简单了吗?

3 个答案:

答案 0 :(得分:4)

整个包装过程简化,将构建过程包装到包装过程中。 因此,尝试将包装过程包装到构建过程中可能并非超级简单,但我认为没有必要不按标准方式进行。

这样:

  • 制作基于autotools的构建系统,就好像你根本不关心debian软件包一样。
  • 创建一个简单的debian / rules文件,它将调用你的构建系统并制作一个deb-package
  • 如果您(或您的软件包的其他一些用户)想要构建deb,请运行dpkg-buildpackage
  • 如果您(或您的软件包的其他一些用户)不想构建deb,只需运行./configure && make && make install

这是更好的做法,因为它将2个独立的阶段(建筑和包装)分开。 它还允许更容易地集成到任何基于Debian的发行版中(如果你决定将你的软件包放在"真正的" Debian中是很好的),因为Debian打包指南对于保持这两个进程非常严格分开(上游 - 发送他们自己的debian /皱眉头和上游的debian /通常被删除)

答案 1 :(得分:4)

不幸的是,我无法让这里的任何一个优秀答案在我的环境中实际工作。关于从源代码构建包,dpkg-buildpackage太过于变幻无常。我终于确定了显示here

的dpkg-deb --build方法

答案 2 :(得分:3)

以下是我如何创建Debian软件包作为autotools构建的一部分的示例。

configure.ac中,我会检查系统上是否安装了dpkg-buildpackage,但是,如果找不到,我就不会中止。

出于各种原因,我要求用户在构建Debian软件包时运行./configure --enable-deb,但在大多数情况下,这不是必需的。如果指定--enable-deb但未找到dpkg-buildpackage,则我中止。

https://github.com/ptomato/gnome-inform7/blob/master/configure.ac

然后在顶级Makefile.am中,代码看起来像这样。

https://github.com/ptomato/gnome-inform7/blob/master/Makefile.am

请注意,我先调用make dist,然后解压缩dist tarball并将debian目录复制到其中。根据Debian包装指南,这是最佳实践;他们说debian目录应该只在源代码控制中,而不是在分发tarball中。