如何從 debian/control 安裝/解析建置依賴項?

如何從 debian/control 安裝/解析建置依賴項?

假設您下載了一個原始碼資料夾,其中包含現有/debian/資料夾和/debian/control檔案。

假設有問題的軟體包不在 Debian 官方儲存庫中,因此apt-get build-dep無法使用。

如何解析該Build-Depends:行?

例如,如果該行顯示為Build-Depends: debhelper (>= 8), faketime,是否有某種工具control-parse debian/control build-depends可以回顯debhelper faketime

特別是當它是多線的時候?

是否有現有的 Debian 工具或可以編寫自己的程式碼來解析它?

答案1

解析:

libdpkg-perl使用來自(dpkg-checkbuilddeps內部使用這些模組)的模組

將以下行新增至來源包根目錄並在來源包根目錄下print-build-deps執行。print-build-deps

#!/usr/bin/perl
use strict;
use warnings;

use Dpkg::Control::Info;
use Dpkg::Deps;

my $control = Dpkg::Control::Info->new();
my $fields = $control->get_source();
my $build_depends = deps_parse($fields->{'Build-Depends'});
print deps_concat($build_depends) . "\n";

也可以看看:

perldoc Dpkg::Control::Info
perldoc Dpkg::Deps

安裝:

您可以mk-build-deps使用devscripts

apt-get install devscripts
apt-get install equivs
cd project-root # project-root contains debian/control
mk-build-deps -i

man mk-build-deps說:

mk-build-deps - build a package satisfying a package's build-dependencies
-i, --install
       Install the generated packages and its build-dependencies

答案2

你可以使用dpkg-checkbuilddeps.手冊頁說

該程式根據控製文件中列出的構建依賴項和構建衝突檢查系統中已安裝的軟體包。如果有任何不滿足,它會顯示它們並以非零返回代碼退出。

例如:

faheem@orwell:/usr/local/src/julia/julia-0.3.2$ dpkg-checkbuilddeps
dpkg-checkbuilddeps: Unmet build dependencies: libopenblas-dev (>= 0.2.10-1~) libopenlibm-dev libopenspecfun-dev (>= 0.4~) patchelf python-sphinx-rtd-theme

但是,您也可以嘗試使用(例如)建置包debuild,例如

faheem@orwell:/usr/local/src/julia/julia-0.3.2$ debuild -uc -us
 dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage: source package julia
dpkg-buildpackage: source version 0.3.2-1
dpkg-buildpackage: source changed by Sébastien Villemot <[email protected]>
 dpkg-source --before-build julia-0.3.2
dpkg-buildpackage: host architecture amd64
dpkg-checkbuilddeps: Unmet build dependencies: libopenblas-dev (>= 0.2.10-1~) libopenlibm-dev libopenspecfun-dev (>= 0.4~) patchelf python-sphinx-rtd-theme
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
debuild: fatal error at line 1357:
dpkg-buildpackage -rfakeroot -D -us -uc failed

它提供了相同的資訊(因為它使用dpkg-checkbuilddeps),但噪音有點大。

答案3

這個 Perl 單行程式碼可用來解析以下內容的建置依賴關係debian/control

perl -ne 'next if /^#/; $p=(s/^Build-Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control 

或建置包的運行時依賴:

perl -ne 'next if /^#/; $p=(s/^Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control 

相關內容