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
signature.asc
Description: Digital signature