debian/control からビルド依存関係をインストール / 解析するにはどうすればいいですか?

debian/control からビルド依存関係をインストール / 解析するにはどうすればいいですか?

/debian/既存のフォルダーとファイルを含むソース コード フォルダーをダウンロードしたとします/debian/control

問題のパッケージが Debian 公式リポジトリにないため、apt-get build-dep使用できないとします。

行を解析するにはどうすればいいですかBuild-Depends:?

たとえば、 という行が と表示される場合、をエコーするBuild-Depends: debhelper (>= 8), faketimeツールはありますか?control-parse debian/control build-dependsdebhelper faketime

特に複数行の場合はどうでしょうか?

既存の Debian ツールはありますか、それともこれを解析するための独自のコードを書くツールがありますか?

答え1

解析:

のモジュールを使用しますlibdpkg-perldpkg-checkbuilddeps内部的にそれらのモジュールを使用します)

次の行を追加してprint-build-depsprint-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。manページにはこう書かれています

このプログラムは、システムにインストールされているパッケージを、制御ファイルにリストされているビルド依存関係およびビルド競合と照合します。満たされていないものがある場合は、それを表示し、ゼロ以外の戻りコードで終了します。

例えば:

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 

関連情報