mirror of
https://github.com/openwrt/openwrt.git
synced 2026-10-13 15:28:21 +04:00
Based on: -218aad6e2fre-emit a provider's depends -38824a1351fold the select condition onto re-emitted deps -47d6b05ad3provides-based dep resolution(%vpackage/@vdeps machinery) -1fd50531ca"<" rank comparison on provider selection The provider-selection rank ('A<B', born in1fd50531) is RHS-anchored on the stanza owner. When a consumer +selects a provider of a PROVIDES target served by >=2 providers, the provider's dependencies are re-emitted into the consumer's kconfig block under this rank. A bare @() arch/feature dep folded under it becomes: depends on !(PACKAGE_librespeed-cli-rust<PACKAGE_librespeed-common) || (aarch64||arm||i386||i686||loongarch64||mips||...) Kconfig treats any occurrence of a symbol in a dependency edge as an edge, even negated under '!() ||', so PACKAGE_librespeed-common lands in its own dir_dep: a recursive dependency self-loop. The self-reference reaches the owner's stanza through any re-emitted dependency emitted as depends-on: provider '@()' arch gates, plain deps on a second virtual that '||'-expand, and plain deps on ordinary packages inheriting the rank-bearing parent. Rank is therefore generated only for select emission: it is built into a separate variable and folded into the select gate alone, while re-emission carries the pre-rank negation instead (!OTHER / !(A||B) over all leftovers, exactly as before1fd50531). Within a stanza no depends-on gate can therefore self-reference, except for self-providing consumers (provide and depend on the same name), which keep historical behavior; user conditions, parent conditions and all select arbitration remain untouched. Fixes:1fd50531ca("metadata: ensure one dependency provider to be y if a package is y") Signed-off-by: Mario Andrés Pérez <mapb_@outlook.com>