-->>举例说明mconf_depends
接下来看一下对这个片段的具体使用,即mconf_depends
提取出关键元素
$pkg->{depends}=+libc+USE_EGLIBC:librt +USE_EGLIBC:libpthread
处理+libc
第一次进入mconf_depends
my $pkgname=shift;即$pkg->{name},即libpcap
my$depends=shift;即$pkg->{depends}
my$only_dep = 0;
$dep= {};
$seen={};
$depend=libc
$flag=’+’
$package{$depend}and mconf_depends($pkgname, $package{$depend}->{depends}, 1, $dep, $seen,$condition);
即$package{libc}存在然后mconf_depends{libpcap,$package{libc}->{depends}, 1, {}, {}, $condition}
第二次进入mconf_depends
my$pkgname=shift;即$pkgname=libpcap
my$depends=shift;即$depends=${package{libc}->{depends}}
my$only_dep=shift;即$only_dep=1
my$dep=shift;即$dep={}
my $seen=shift;即$seen={}
my$parent_condition=shift;即undef
$depnd=libgcc
$flag=+
$package{libgcc}and mconf_depends{libpcap, $package{libgcc}->{depends}, 1, {}, {},$condition}
第三次进入mconf_depends
发现${package{libgcc}->{depends}}为空,故直接返回;
然后回到上一次,也就是第二次执行mconf_depends,
$m=”select”
nextif $only_dep;跳出该次循环
由于$dep为空,返回$res为空
然后回到第一次进入
$m=”select”
由于$package{libc}->{vdepends}为空,
$flags=~ /@/ or $depend = "PACKAGE_$depend";
$depend=”PACKAGE_libc”
又$condition为空,故直接执行
$dep->{$depend}=~ /select/ or $dep->{$depend} = $m;
$dep->{PACKAGE_libc}=”select”
最后在输出的时候应该是$res.=”\t\tselect PACKAGE_libc\n”
然后开始处理+USE_EGLIBC:librt
$depend= USE_EGLIBC:librt
$flag=’+’
进入到if($depend =~ /^(.+):(.+)$/)条件内
$condition=”USE_EGLIBC”
$depend=librt
进入到$flags=~ /\+/ and do {……}
$package{librt}and mconf_depends{libpcap, $package{librt}->{depends}, 1, {}, {}, “USE_EGLIBC”}
第二次进入mconf_depend
$pkgname=libpcap
$depends=$package{librt}->{depends}
$only_dep=1
$parent_condition=”USE_EGLIBC”
$depend=”libpthread”
$flag=’+’
$co