
Предположим, вы загрузили папку с исходным кодом, которая содержит существующую /debian/
папку и /debian/control
файл.
Предположим, что рассматриваемый пакет отсутствует в официальном репозитории Debian, поэтому его apt-get build-dep
нельзя использовать.
Как разобрать Build-Depends:
строку?
Например, если строка выглядит так Build-Depends: debhelper (>= 8), faketime
, есть ли какой-нибудь инструмент control-parse debian/control build-depends
, который выведет ее на экран debhelper faketime
?
Особенно, если он многострочный?
Существуют ли инструменты Debian или нужно написать собственный код для анализа?
решение1
Анализ:
Использовать модули из libdpkg-perl
( dpkg-checkbuilddeps
использует эти модули внутри)
Добавьте следующие строки print-build-deps
и запустите их print-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
. На странице руководства написано
Эта программа проверяет установленные в системе пакеты на предмет зависимостей сборки и конфликтов сборки, перечисленных в файле управления. Если какие-либо из них не выполнены, она отображает их и завершает работу с ненулевым кодом возврата.
Например:
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