On Thu, 2023-02-23 at 08:01 +0100, Mihai Moldovan wrote:
This is also true and nobody did object. That's clearly a case of missing run-time dependencies. This said, getting run-time dependencies right/complete is an extremely difficult task and maintainers often get them wrong. Fortunately, the build environments are pretty good at scanning for run-time dependencies and automatically add them, but the capabilities are mostly limited to shared libraries. In the special case discussed here, dependencies on packages providing interpreted scripts were missing and that was obviously not caught at build time - either because the build does not need the packages in the first place (which is naturally different from normal usage) or because the dependency was transitive, i.e., pulled in by a different build dependency.
Transitive dependencies are especially difficult to track. Image an explicit dependency graph such as:
A -dep-> B -dep-> C
I'm afraid it is even more complex than what you describe. Let's look at exactly the YaST case reported in this thread: OP started 'yast2 sw_single' - which in fact is yast2-packager packege. In yast2-packager, there is a dependency: ruby-solv yast2-ruby-bindings >= 1.0.0 Now, this is true - BUT 'incomplete' - as in fact, yast2-packager would require a yast2-ruby-bindings that was built with the same ruby interpreter version. Of course we're just talking rebuilds, so the version of the package did not change (in fact there was not even a source change). The dependency was thus fullfilled with the 'old' Ruby 3.1 built package, but could not work, as yast2-storage is a ruby3.2 code, trying to load modules. For this to work, the yast packages would need to simulate what all gem-packages do, namely: Provides: rubygem(ruby:3.2.0:yast2-ruby-bindings) Then yast2-sw_single could require this symbol and replace 3.2.0 API- version used to build yast2-packager. The format for the provides could be different of course - that one is just for visualization as it is used exactly by this by all ruby modules This is a speciality of interpreted languages to take into account - but does make sense. (same issue happens with python fwiw) Cheers, Dominique