为 Debian/Ubuntu 使用基于 cmake 的构建系统打包 Mapnik 插件时清空 ${shlibs:Depends}

Empty ${shlibs:Depends} while packaging a Mapnik plugin with cmake-based build system for Debian/Ubuntu

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

现在插件的构建系统是 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,这意味着 "The given package declares a dependency on libc directly instead of using ${shlibs:Depends} in its debian/control stanza.")。很想满足林天的敬意,却做不到。

现在我发现我可以添加行

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

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

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

补充说明:

您可以使用 -T 标志为 dpkg-shlibdeps 提供输出文件。 类似于:

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 {} +