Resolviendo dependencias de construcción de paquetes Debian …

… más sencillo de lo que pensaba. Y, como es habitual, gracias a la red StackOverflow.

En realidad la duda me surge cuando intento empaquetar en Debian un programa que tiene estructura para ello (directorio /debian) pero no está en los repositorios oficiales. En ese caso usar apt-get build-dep no sirve de nada porque trabaja sobre lo que ya está registrado por apt y no sobre el directorio fuente.

Luego el problema tiene dos caras: saber de qué paquetes se depende para construirlo y ver además cuáles están instalados.

Para ver qué paquetes de los que depende están instalados:

$ cd cups-1.4.6/
$ dpkg-checkbuilddeps 
dpkg-checkbuilddeps: Dependencias de construcción no satisfechas: libpam0g-dev libslp-dev libgnutls-dev libpaper-dev libldap2-dev libavahi-compat-libdnssd-dev libpoppler-dev (>= 0.12.2-2) po4a (>= 0.31) libijs-dev hardening-wrapper liblcms1-dev libusb-dev

o si simplemente queremos ver todos los paquetes de los que depende sin más comprobaciones podemos emplear el siguiente programa Perl:

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

# 
#   Evgeny Vereshchagin
#   http://unix.stackexchange.com/a/211319
#
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";

Fácil, ¿ verdad ? E incluso nos presenta los módulos Perl para gestionar información de paquetes con los que aún podemos obtener y hacer más cosas.

Pero eso para otro día …