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