¿Cómo instalar/analizar dependencias de compilación desde Debian/control?

¿Cómo instalar/analizar dependencias de compilación desde Debian/control?

Supongamos que descargó una carpeta de código fuente que contiene una /debian/carpeta y /debian/controlun archivo existentes.

Supongamos que el paquete en cuestión no se encuentra en el repositorio oficial de Debian, por lo que apt-get build-depno se puede utilizar.

¿Cómo analizar la Build-Depends:línea?

Por ejemplo, si la línea dijera Build-Depends: debhelper (>= 8), faketime, ¿hay alguna herramienta control-parse debian/control build-dependsque haga eco debhelper faketime?

¿Especialmente cuando es de varias líneas?

¿Existen herramientas Debian o tiene alguna para escribir su propio código para analizar esto?

Respuesta1

Análisis:

Utilice módulos de libdpkg-perl( dpkg-checkbuilddepsutiliza esos módulos internamente)

Agregue las siguientes líneas print-build-depsy ejecútelas print-build-depsen la raíz del paquete fuente.

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

Ver también:

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

Instalación:

Puedes utilizar mk-build-depsdesde devscripts:

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

man mk-build-depsdice:

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

Respuesta2

Podrías usar dpkg-checkbuilddeps. La página de manual dice

Este programa compara los paquetes instalados en el sistema con las dependencias de compilación y los conflictos de compilación enumerados en el archivo de control. Si alguno no se cumple, los muestra y sale con un código de retorno distinto de cero.

Por ejemplo:

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

Sin embargo, también puedes intentar compilar el paquete, usando (por ejemplo) debuild, por ejemplo

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

Lo cual da la misma información (ya que usa dpkg-checkbuilddeps), pero es un poco más ruidoso.

Respuesta3

Este resumen de Perl se puede utilizar para analizar dependencias de construcción desde debian/control:

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

o departamentos de ejecución para paquetes creados:

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

información relacionada