Michał Górny
10 years ago
Hello,
The current design for getting the 'best implementation' is far from
pretty. It pretty much relies on constant preference order, setting
Python 2.7 over other implementations for practical reasons. As a side
effect, various ebuilds rely on that particular order, e.g.:
DEPEND="doc? ( dev-python/epydoc[$(python_gen_usedep 'python2*')] )"
REQUIRED_USE="doc? ( $(python_gen_useflags 'python2*') )"
which pretty much assumes that *if python2 is enabled*, then any
version of it will be the best impl. I find this disgusting, and I'd
like to replace it with something more explicit.
Specifically:
1. python_export_best becomes deprecated for good,
2. python_setup changes API to:
python_setup [<impl-wildcard>...]
alike python_gen_* functions, defaulting to '*'. Now it chooses
the best impl from implementations matching the specified patterns,
e.g.:
python_setup 'python2*'
would get the best version of CPython 2.
3. we introduce extra variable for distutils-r1 (oh cruel world, how
should we name it?!) that applies wildcards to python_*_all() phases.
As for the choice within the list the algo needs to stay as-is for now.
However, in the future we could either:
a. respect EPYTHON and fallback to the other algo,
b. respect pre-defined order i.e. 3.4 > 2.7,
c. respect the order in PYTHON_COMPAT -- however that could be a little
surprising to devs.
What are your thoughts?
The current design for getting the 'best implementation' is far from
pretty. It pretty much relies on constant preference order, setting
Python 2.7 over other implementations for practical reasons. As a side
effect, various ebuilds rely on that particular order, e.g.:
DEPEND="doc? ( dev-python/epydoc[$(python_gen_usedep 'python2*')] )"
REQUIRED_USE="doc? ( $(python_gen_useflags 'python2*') )"
which pretty much assumes that *if python2 is enabled*, then any
version of it will be the best impl. I find this disgusting, and I'd
like to replace it with something more explicit.
Specifically:
1. python_export_best becomes deprecated for good,
2. python_setup changes API to:
python_setup [<impl-wildcard>...]
alike python_gen_* functions, defaulting to '*'. Now it chooses
the best impl from implementations matching the specified patterns,
e.g.:
python_setup 'python2*'
would get the best version of CPython 2.
3. we introduce extra variable for distutils-r1 (oh cruel world, how
should we name it?!) that applies wildcards to python_*_all() phases.
As for the choice within the list the algo needs to stay as-is for now.
However, in the future we could either:
a. respect EPYTHON and fallback to the other algo,
b. respect pre-defined order i.e. 3.4 > 2.7,
c. respect the order in PYTHON_COMPAT -- however that could be a little
surprising to devs.
What are your thoughts?
--
Best regards,
MichaŠGórny
Best regards,
MichaŠGórny