Do not apply PATCHES and user patches (either via the EAPI 6 default or pre-EAPI 5 code) when DISTUTILS_OPTIONAL is being used. In this case, distutils functions are usually called conditionally, in a subdirectory, while both PATCHES and user patches are usually intended to be applied top-level.
There is no ebuild relying on distutils-r1_src_prepare applying patches with DISTUTILS_OPTIONAL. In fact, there are ebuilds which work around this behavior. --- eclass/distutils-r1.eclass | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass index e8de5ad..afd29ed 100644 --- a/eclass/distutils-r1.eclass +++ b/eclass/distutils-r1.eclass @@ -315,11 +315,13 @@ _distutils-r1_disable_ez_setup() { distutils-r1_python_prepare_all() { debug-print-function ${FUNCNAME} "${@}" - if [[ ${EAPI} != [45] ]]; then - default - else - [[ ${PATCHES} ]] && epatch "${PATCHES[@]}" - epatch_user + if [[ ! ${DISTUTILS_OPTIONAL} ]]; then + if [[ ${EAPI} != [45] ]]; then + default + else + [[ ${PATCHES} ]] && epatch "${PATCHES[@]}" + epatch_user + fi fi # by default, use in-source build if python_prepare() is used -- 2.8.2