我正在创建一个Mapnik插件(https://github.com/rbuch703/coords-mapnik-plugin),目前我正在为Debian / Ubuntu打包它。二进制包只包含一个由C ++代码构建的共享库。但作为Mapnik插件,该库遵循与通常的POSIX库约定完全不同的约定:
<name>.input
,而不是lib<name>.so
/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
,这意味着&#34;给定的包直接声明了对libc的依赖而不是在debian / control节中使用$ {shlibs:Depends}。&#34;)。我想在满意的情况下满足林田,但却无法满足。
现在我发现我可以添加一行
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
包。答案 0 :(得分: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 {} +