All,

there is an ongoing discussion about how we handle eclass phase
functions by default [1].

Currently, EXPORT_FUNCTIONS is called in eclasses, and because of the
way this works, the phase function that is exported last in the chain of
inherited eclasses is the one that is called for a given phase,
overriding the PMS default phase function.

The initial proposal is to change this behaviour so that the PMS default
phase functions call all matching phase functions from inherited
eclasses in sequence.

For example:

- your ebuild inherits foo and bar and each of them have src_unpack
  functions. With this new behaviour, the default src_unpack would run
  foo_src_unpack, bar_src_unpack, then perform its own actions.

I strongly oppose this change, because I feel it will make our
entire tree very unpredictable at best. I realize this might eliminate
boilerplating from our tree. Weighing that against the possible
ramifications in this big of a change in automagic behaviour, I think
the cost is much higher than the gain.

I am also not very comfortable with our current state, because it has
a lot of uncertainty in terms of how the eclass phase functions are
called.

My counter proposal to this is that we stop calling eclass phase
functions automatically, and to minimize the amount of boilerplating
  we would have to do, we use a variable, such as ECLASS_PHASES  which
  would be defined at the ebuild level and contain a list of the eclass
  phase functions we want to run automatically.

Going back to my previous example, say your ebuild does the following:

-- code begins here --

inherit foo bar

# Foo and bar both have src_unpack and src_install functions.
# we want foo's src_unpack and bar's src_install:

ECLASS_PHASES="foo_src_unpack
        bar_src_install"

-- code ends here ---

If ECLASS_PHASES is undefined, I think the default should be to not run
the eclass phase functions.

Yes, this means there is some boilerplating. However, there are some
strong advantages:

- this is no longer dependent on order of inheritance.
- The ebuild author knows exactly which eclass phase functions will
  be run.

Thoughts?

William

[1] https://bugs.gentoo.org/show_bugs.cgi?id=516014

Attachment: signature.asc
Description: Digital signature

Reply via email to