关于Openwrt metadata.pl脚本的几个函数说明_part2

本文深入探讨OpenWrt元数据脚本`metadata.pl`中的`mconf_depends`函数,解析其在处理依赖关系时的工作原理。通过对示例的详细分析,揭示了函数如何处理`+`、`: `和`@`等符号,以及如何构建配置文件`.config-package.in`中的依赖选择。函数递归处理包间的依赖关系,确保所有依赖项被正确处理。文章适合对OpenWrt和配置管理感兴趣的读者。
摘要由CSDN通过智能技术生成

-->>举例说明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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值