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

如何创建Debian包作为autotools构建的一部分?,debian,packaging,autotools,automake,Debian,Packaging,Autotools,Automake,我能找到的所有Debian打包示例都假设用户是从上游构建重新打包的,因此它会解压缩源tarball、配置、重建和重新打包。我正在尝试为我自己的库构建一个包,它是使用autotools构建的。我尝试了几种不同的方法,我最近的尝试如下: DH_PACKAGE_NAME=`echo $(PACKAGE_NAME) | sed s/_/-/g` dist-hook: cd $(distdir) ; \ export DEBFULLNAME="Some One" ; \ expor

我能找到的所有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_制作的
控制文件。我觉得解决方案要简单得多?

下面是一个例子,说明我是如何创建Debian包作为autotools构建的一部分的

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

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

然后在顶级
Makefile.am
中,代码如下所示


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

整个打包过程都经过了优化,可以将构建过程打包到打包过程中。 因此,尝试将打包过程封装到构建过程中可能不是非常容易,但我认为没有必要不采用标准方式

因此:

  • 让您的基于autotools的构建系统看起来好像您根本不关心debian软件包
  • 创建一个简单的debian/rules文件,该文件将调用您的构建系统并生成一个deb包
  • 如果您(或包的其他用户)希望生成deb,请运行
    dpkg buildpackage
  • 如果您(或软件包的其他用户)不想构建deb,只需运行
    /configure&&make&&makeinstall
这是一种更好的做法,因为它将两个独立的阶段(构建和打包)分开。
它还允许更容易地集成到任何基于Debian的发行版中(例如,如果您决定让您的软件包使用“真正的”Debian会很好),因为Debian的打包指南对于将这两个过程分开非常严格(上游来源发送自己的debian/不受欢迎,上游的debian/通常被删除)

不幸的是,我无法在我的环境中做出任何一个非常好的答案。dpkg buildpackage在从源代码构建包方面过于易变。我最终决定采用dpkg deb--构建方法,如图所示

我注意到您没有使用DHU make获取debain目录和控制文件。可能是DHU make只对deb_helper有意义?您可以发布控制文件的副本吗?谢谢。控制文件和debian目录在同一个存储库中,只需浏览它们…;-)请注意,我不再建议在configure.ac和Makefile.am中执行此操作,因为它通常需要重新配置构建目录。相反,我建议使用一个单独的脚本来执行所有打包操作。我建议不要在dist hook中构建包,而是创建单独的目标:
make rpm
make pkg
make deb
,等等。不要设置DEBFULLNAME/DEBEMAIL,但需要用户设置它们(可能在shell.rcs中). 在配置期间构建整个debian/control目录。一些关于如何使用
dpkg buildpackage
及其规则的示例将非常有帮助……无论如何,我可以看出,在运行多个阶段时,需要编写一些模板,最终看起来非常复杂。建议使用
dpkg-deb
的方法更简单:只需创建一个
deb/debian/
dir,放一个描述包的
control
文件,然后运行
DESTDIR=$(pwd)/deb-make-install
(或者
ninja-install
,不管怎样,它也支持
DESTDIR
),最后执行
dpkgdeb--builddeb/