Wie installiere/analysiere ich Build-Abhängigkeiten von Debian/Control?

Wie installiere/analysiere ich Build-Abhängigkeiten von Debian/Control?

Nehmen wir an, Sie haben einen Quellcodeordner heruntergeladen, der sowohl einen vorhandenen /debian/Ordner als auch /debian/controleine Datei enthält.

Nehmen wir an, das betreffende Paket befindet sich nicht im offiziellen Debian-Repository und apt-get build-depkann daher nicht verwendet werden.

Wie analysiert man die Build-Depends:Zeile?

Wenn die Zeile beispielsweise lauten würde Build-Depends: debhelper (>= 8), faketime, gibt es ein Tool control-parse debian/control build-depends, das dies ausgibt debhelper faketime?

Insbesondere wenn es mehrere Zeilen umfasst?

Gibt es bereits Debian-Tools oder muss eines seinen eigenen Code zum Parsen schreiben?

Antwort1

Parsing:

Verwende Module aus libdpkg-perl( dpkg-checkbuilddepsverwendet diese Module intern)

Fügen Sie die folgenden Zeilen hinzu print-build-depsund führen Sie sie print-build-depsim Stammverzeichnis des Quellpakets aus.

#!/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";

Siehe auch:

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

Installation:

Sie können mk-build-depsFolgendes verwenden devscripts:

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

man mk-build-depssagt:

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

Antwort2

Sie könnten verwenden dpkg-checkbuilddeps. Die Manpage sagt

Dieses Programm prüft die im System installierten Pakete anhand der in der Steuerdatei aufgeführten Build-Abhängigkeiten und Build-Konflikte. Wenn einige davon nicht erfüllt sind, zeigt es sie an und beendet das Programm mit einem Rückgabewert ungleich Null.

Zum Beispiel:

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

Sie können jedoch auch einfach versuchen, das Paket zu erstellen, indem Sie beispielsweise verwenden 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

Das ergibt die gleichen Informationen (da es verwendet dpkg-checkbuilddeps), ist aber etwas verrauschter.

Antwort3

Mit diesem Perl-Einzeiler können Sie Aufbauabhängigkeiten analysieren von debian/control:

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

oder Laufzeitabhängigkeiten für erstellte Pakete:

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

verwandte Informationen