2015-02-23 27 views
0

我正在創建一個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的嘗試本身在運行時

現在這個插件的構建SYSTE找到插件m是cmake,這使得Debian打包直截了當的大部分部位:debian/rules文件只包含基本行:

#!/usr/bin/make -f 
%: 
    dh [email protected] 

然而,我正在與替換變量{shlibs中:取決於}:問題是根本沒有設置(特別是debian/<package name>.substvars文件中沒有相應的行),林田正確地抱怨這個事實(林田的實際投訴是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中。

回答

0

您可以使用-T標誌提供dpkg-shlibdeps的輸出文件。 類似:

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

如果有多個*。輸入文件,你也可以這樣做:

override_dh_shlibdeps: 
     dh_shlibdeps 
     find debian/<packagename>/ -name "*.input" -exec \ 
      dpkg-shlibdeps -Tdebian/<packagename>.substvars {} + 
+0

大,工程完全按照預期,並且擺脫了林田警告。 – Dreamer 2015-02-24 08:18:36

+0

你的第一個代碼塊中有一個小的錯字(你寫的是「dh_slibdeps」而不是「dh_s ** h ** libdeps」)。 – Dreamer 2015-02-24 08:19:32

相關問題