Hello, all.

If I recall correctly, jlec lately mentioned he'd like to use
python-any-r1 and python-single-r1. A particularly inevitable use case
for this would be ebuilds using waf, so I'll use that as an example.

The idea is pretty simple. Since the ebuilds in question use waf that
is in Python, the waf-utils.eclass inherits python-any-r1. However,
some of the ebuilds may install Python modules as well, and that asks
for python-single-r1. So the issue is how to make the two work together.


Possible solution: hierarchical eclass overrides
------------------------------------------------

Idea: if both python-any-r1 and python-single-r1 are inherited,
the latter transparently overrides the former. More specifically,
implementation selected for python-single-r1 is used for code designed
for python-any-r1.

Details:

1. PYTHON_COMPAT is declared before the inherits, so it should be always
   set by ebuild. If we feel like the eclass needs to provide
   the default, it may only do so if ebuild doesn't set its own
   PYTHON_COMPAT. The eclass may also need to check ebuild's
   PYTHON_COMPAT for conflicts with own supported impls (and die in that
   case).

2. PYTHON_REQ_USE likewise. The eclass may append to it (but careful
   with that).

3. ${PYTHON_DEPS}:

   a. if python-single-r1 is inherited before python-any-r1 (waf-utils),
      PYTHON_DEPS is set by the former and the latter doesn't change
      it. Both waf-utils and the ebuild add PYTHON_DEPS, so the same
      deps get added twice but there's no functional difference from
      python-single-r1,

   b. if python-single-r1 is inherited after waf-utils, the latter adds
      dependency based on python-any-r1 and then the ebuild adds
      another based on python-single-r1. With a bit of luck or good
      programming, everything works fine. Worst case, additional
      version of Python may get pulled build-time as a result of
      any-of dep.

4. python_setup() gets exported (overriden) by python-single-r1. Since
   it is called after the complete inherit chain, the correct version
   is used.

5. python-any-r1_pkg_setup() just calls python-single-r1_pkg_setup().

6. python_check_deps() is not used.

7. python_gen_any_dep() is an issue I don't know how to solve:

   a. if python-single-r1 is inherited before python-any-r1, it could
      override it so that it generates just a single dependency
      matching the syntax used for python-single-r1,

   b. but if waf-utils is inherited first, the dep strings will be
      generated before python-single-r1 is inherited,

   c. possibly we could just ban python_gen_any_dep() and make it
      export magical variable that will cause python-single-r1 inherit
      to die.


Your thoughts?

-- 
Best regards,
Michał Górny

Attachment: signature.asc
Description: PGP signature

Reply via email to