0

我正在创建一个 Mapnik 插件(https://github.com/rbuch703/coords-mapnik-plugin),目前正在为 Debian/Ubuntu 打包它。二进制包仅包含一个由 C++ 代码构建的共享库。但是作为一个 Mapnik 插件,这个库遵循与通常的 POSIX 库约定完全不同的约定:

  • 文件名必须<name>.inputlib<name>.so
  • 该文件安装在 Mapnik 插件目录中(通常/usr/lib/mapnik/input
  • 该文件不应该被 找到ldconfig,而是 Mapnik 尝试在运行时自行查找插件

现在插件的构建系统是cmake,这使得 Debian 打包的大部分内容变得简单:该debian/rules文件仅包含基本行:

#!/usr/bin/make -f
%:
    dh $@

但是,我遇到了替换变量 {shlibs:Depends} 的问题:它根本没有设置(特别是debian/<package name>.substvars文件中没有相应的行),而 Lintian 正确地抱怨了这个事实(Lintian 的实际抱怨是missing-dependency-on-libc。但是当我手动添加 libc 依赖项时,Lintian 解释说package-depends-on-hardcoded-libc,这意味着“给定的包直接声明了对 libc 的依赖项,而不是在其 debian/control 节中使用 ${shlibs:Depends}。”)。我想在比尊重上满足林天,但无法做到。

现在我发现我可以添加该行

dpkg-shlibdeps debian/<packagename>/usr/lib/mapnik/input/coords.input

到我的rules档案。这将创建正确的${shlibs:Depends}行,但它会在错误的文件(debian/substvars而不是debian/<package name>.substvars)中创建它,构建系统只是忽略它并且 Lintian 一直抱怨缺少依赖项。

我猜我的问题的根源是我的 Mapnik 插件不符合 POSIX 库命名约定(并且 Mapnik 插件不能这样做),因此包装系统无法正确处理它。但我不知道如何解决这个问题。

补充说明:

  • 这些包是使用debuild. 除了 Lintian 错误消息外,构建过程工作正常并正确创建了.deb包。
  • 我的实际目标是让包在 Launchpad 上干净地构建,这样我就可以将它添加到我的 Ubuntu PPA 中。
4

1 回答 1

0

您可以提供dpkg-shlibdeps带有-T标志的输出文件。就像是:

override_dh_shlibdeps:
        dh_shlibdeps
        dpkg-shlibdeps \
           -Tdebian/<packagename>.substvars \
           debian/<packagename>/usr/lib/mapnik/input/coords.input

如果有多个*.input文件,您还可以执行以下操作:

override_dh_shlibdeps:
        dh_shlibdeps
        find debian/<packagename>/ -name "*.input" -exec \
            dpkg-shlibdeps -Tdebian/<packagename>.substvars {} +
于 2015-02-23T16:05:52.453 回答