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

时间:2015-02-23 09:49:15

标签: cmake debian packaging mapnik

我正在创建一个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,这意味着&#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包。
  • 我的实际目标是让程序包在Launchpad上干净利落地构建,以便我可以将它添加到我的Ubuntu PPA中。

1 个答案:

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