Como instalar/analisar dependências de compilação do debian/control?

Como instalar/analisar dependências de compilação do debian/control?

Suponhamos que você baixou uma pasta de código-fonte, que contém uma /debian/pasta existente e também /debian/controlum arquivo.

Suponhamos que o pacote em questão não esteja no repositório oficial do Debian, portanto apt-get build-depnão pode ser usado.

Como analisar a Build-Depends:linha?

Por exemplo, se a linha fosse lida Build-Depends: debhelper (>= 8), faketime, existe alguma ferramenta control-parse debian/control build-dependsque ecoaria debhelper faketime?

Especialmente quando é multilinha?

Existem ferramentas Debian existentes ou existe uma para escrever seu próprio código para analisar isso?

Responder1

Análise:

Use módulos do libdpkg-perl( dpkg-checkbuilddepsusa esses módulos internamente)

Adicione as seguintes linhas print-build-depse execute print-build-depsna raiz do pacote de origem.

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

Veja também:

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

Instalação:

Você pode usar mk-build-depsde devscripts:

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

man mk-build-depsdiz:

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

Responder2

Você poderia usar dpkg-checkbuilddeps. A página de manual diz

Este programa verifica os pacotes instalados no sistema em relação às dependências e conflitos de construção listados no arquivo de controle. Se algum não for atendido, ele os exibe e sai com um código de retorno diferente de zero.

Por exemplo:

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

No entanto, você também pode tentar construir o pacote, usando (por exemplo) debuild, por exemplo

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

O que dá a mesma informação (já que usa dpkg-checkbuilddeps), mas é um pouco mais barulhento.

Responder3

Este one-liner Perl pode ser usado para analisar dependências de construção de debian/control:

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

ou dependências de tempo de execução para pacotes compilados:

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

informação relacionada