一、dpkg-checkbuilddeps(man手册)
作用:该命令行工具是用来检查依赖和冲突的。
大纲:dpkg-checkbuilddeps [option ...] [control file]
描述:
该程序用来检查列举在控制文件中的依赖和冲突,如果这当中的任何一个依赖未满足,它将列出这些包的名称并且返回一个非零的返回值。
默认情况下,debian/control文件被读取,但是你同样可以在命令行中指定一个可替代的配置文件名。
选项:
--admin-dir = dir
这里用来改变dpkg数据库的默认位置,当前默认位置是在/var/lib/dpkg位置处。
-A
忽略Build-Depends-Arch和 Build-Conflicts-Arch行,当架构独立的包被构建的时候可以使用这个参数,或者当源码包需要被构建时和-B参数一起使用。
-B
忽略Build-Depends-Indep 和 Build-Conflicts-Indep行,使用当架构依赖的包被建立的时候使用,或者当源码包需要被编译时和-A参数一起使用
-d
用户手动指定建依赖包的列表
-c
用户手动指定冲突字符串的列表
使用给定的构建依赖和冲突而不是包含在debian/control文件中的依赖和冲突。
-a arch
假设用户想要检查指定架构系统的依赖和冲突而不是本机系统架构所缺少的依赖和冲突,用户可以使用-a参数来检查构建依赖和冲突列表。
-p profile []
caveats:该参数选项没有理解,日后理解会进一步补充~
-? --help
显示使用信息并退出
--version
显示版本号,并且退出
说明:该部分主要为man手册的理解翻译部分
二、dpkg-checkbuilddeps执行流程
注意:该部分为查看dpkg-checkbuilddeps的执行过程,但是为了流程图的美观中间执行步骤做了简单的修饰(并不影响主要的执行流程)。
可能仅仅看流程图还是有点晦涩难懂,我下面举个简单的例子来说明一下这个过程:
三、dpkg-checkbuilddeps执行流程
dpkg-checkbuilddeps示例说明
Debian/control文件内容如下:
Source: dpkg
Section: admin
Priority: required
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
XSBC-Original-Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
Uploaders: Guillem Jover <guillem@debian.org>, Raphaël Hertzog <hertzog@debian.org>
Origin: debian
Bugs: debbugs://bugs.debian.org
Homepage: https://wiki.debian.org/Teams/Dpkg
Vcs-Browser: http://anonscm.debian.org/gitweb/?p=dpkg/dpkg.git
Vcs-Git: git://anonscm.debian.org/dpkg/dpkg.git
Standards-Version: 3.9.5
Build-Depends: debhelper (>= 7), pkg-config, flex,
gettext (>= 0.18), po4a (>= 0.41),
zlib1g-dev, libbz2-dev, liblzma-dev,
libselinux1-dev (>= 1.28-4) [linux-any],
libncursesw5-dev,
libtimedate-perl, libio-string-perl
下面说明一下通常情况下(dpkg-checkbuilddeps debian/checkbuilddeps )的处理步骤:
1)首先会去默认读取debian/control文件,如果未读取到,那么终止,反之,进入步骤2,此时能读取到,那么进入步骤2;
2)读取长参数内容,检查是否bd_value(依赖字符串)并且bc_value(冲突字符串),用户已经自定义,如果都已经自定义,那么进入步骤步骤8和步骤9,反之,进入步骤3,这里很明显长参数中并未指定-d和-c参数,那么此处进入步骤3;
3)获得build-depends字段的字符串,获得build-conflicts字段的字符串;
4)判断长参数列表中参数-A是否指定,如果-A,已经指定,那么忽略build-depends-arch的内容,如果没有指定-A参数,那么进入步骤5,此时未指定-A参数,那么进入步骤5;
5)将build-depends-arch字段连接到build-depends中去,将build-conflicts-arch字段连接到build-conflicts中去;
6)判断长参数列表中参数-B是否指定,如果-B,已经指定,那么忽略build-depends-indep字段的内容,反之,进入步骤7;此时未指定-B,那么进入步骤7;
7)将build-depends-indep字段连接到build-depends中,形成依赖列表,将build-depends-indep连接到build-conflicts字段中,形成冲突列表;
8) 判断依赖列表是否为空,如果为空,那么进入步骤 ,反之,从包名和版本号对比/var/lib/dpkg数据库中已经安装二进制包的列表,列出缺少的依赖包;
9) 判断冲突列表是否为空,如果为空,那么进入步骤, 反之,从包名和版本号对比/var/lib/dpkg数据库中已经安装的二进制包的列表,列出冲突包;
10) 结束
Caveats:另外如果以后在dpkg-checkbuilddeps 长选项的时候,可以参照流程图去推理。