Files
openwrt/scripts
Mario Andrés Pérez 87215b42ce package-metadata: drop self-referencing rank from depends-on gates
Based on:
- 218aad6e2f re-emit a provider's depends
- 38824a1351 fold the select condition onto re-emitted deps
- 47d6b05ad3 provides-based dep resolution(%vpackage/@vdeps machinery)
- 1fd50531ca "<" rank comparison on provider selection

The provider-selection rank ('A<B', born in 1fd50531) 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 before 1fd50531). 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>
2026-10-02 14:13:40 +01:00
..
…
…
…
…
…
…
…
…
…