----- Original Message -----
On Thu, Dec 20, 2012 at 04:40:17PM +0100, Vít Ondruch wrote:
Dne 20.12.2012 15:46, Rex Dieter napsal(a):
On 12/20/2012 02:40 AM, Vít Ondruch wrote:
Dne 20.12.2012 01:43, Garrett Holmstrom napsal(a):
On 2012-12-19 5:12, Bill Nottingham wrote:
Vít Ondruch (vondruch@redhat.com) said: >Can somebody enlighten me, what is the purpose of ruby(abi) >(replace >by python(abi) if you wish) virtual provide? Especially, why >Ruby >packaging guidelines mandate "Requires: ruby(abi) = 1.9.1", >i.e. >versioned require? And why in Python packages, python(abi) is >automatically generated?
In the python case, it's because that python extension modules install in a version-specific directory ($libdir/python2.7, for example.) This makes them explicitly tied to that version of python.
There's also the fact that the ABI for the bytecode that gets generated at build time is specific to each x.y series of python releases.
For that, you could have "Require: python-libs = 2.7" instead.
What's the practical difference?
You follow general practices? You don't have to think if {ruby,python}(abi) makes any sense for {JRuby,Jython} and what version it should provide in comparison to {ruby,python}. You don't force people to ask why Ruby 1.9.3 has ruby(abi) = 1.9.1. You don't have to answer such question as what is {ruby,python}(abi) good for?
I don't think I follow your reasoning here:
- If there is no python(abi) and no automatic dependency checking,
then the packager assumes the burden of adding Requires: python-libs = VERSION in all of their packages. They also assume the responsibility of figuring out what VERSION needs to be. This is creating more work that should be done centrally.
- If there is no python(abi) but the automatic dep checking creates
the Provides and Requires on python-libs = VERSION, then there doesn't seem to be any difference in terms of the work done. Someone who maintains the central dep checking still has to figure out what VERSION should be in either case. (And, assuming that your question about Ruby 1.9.3 having ruby(abi) = 1.9.1 was more than hypothetical, it sounds like there might just be a lack of someone performing this duty for Ruby).
-Toshio
I think that one of the questions here is "why 'abi' and not something else?" We currently enforce every Ruby package to have "Requires: ruby(abi)", but JRuby doesn't in fact provide any ABI (I don't think the Java API can be called ABI). Therefore it doesn't make sense for the pure-Ruby packages to require ruby(abi). It'd be better to have something that would explain that all they need is _anything_ that can interpret Ruby, e.g. "ruby(interpreter)". Packages requiring ruby(abi) should IMHO be only these that have C extension or are otherwise bound to cRuby. Similarly, JRuby-only packages should depend on jruby (or its virtual provide, if we choose to create one).