The eclass code in distutils-r1_python_install makes some assumptions specific to _distutils-r1_post_python_compile being called, and scriptdir not being modified since. Make them more explicit by:
1) explicitly removing the files that we expect to have been created, 2) verifying that both the copied and the original scriptdir have the same list of files. Signed-off-by: Michał Górny <mgo...@gentoo.org> --- eclass/distutils-r1.eclass | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) Changes in v2: - use diff instead of cksum -- which makes the code both simpler and gives users clear info what's mismatched diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass index f3d224a51224..3d5f0791baaf 100644 --- a/eclass/distutils-r1.eclass +++ b/eclass/distutils-r1.eclass @@ -1514,13 +1514,37 @@ distutils-r1_python_install() { local merge_root= if [[ ${DISTUTILS_USE_PEP517} ]]; then local root=${BUILD_DIR}/install + local reg_scriptdir=${root}/${scriptdir} + local wrapped_scriptdir=${root}$(python_get_scriptdir) + + # we are assuming that _distutils-r1_post_python_compile + # has been called and ${root} has not been altered since + # let's explicitly verify these assumptions + + # remove files that we've created explicitly + rm "${reg_scriptdir}"/{"${EPYTHON}",python3,python,pyvenv.cfg} || die + # verify that scriptdir & wrapped_scriptdir both contain + # the same files + ( + cd "${reg_scriptdir}" && find . -mindepth 1 + ) | sort > "${T}"/files-bin + assert "listing ${reg_scriptdir} failed" + ( + if [[ -d ${wrapped_scriptdir} ]]; then + cd "${wrapped_scriptdir}" && find . -mindepth 1 + fi + ) | sort > "${T}"/files-wrapped + assert "listing ${wrapped_scriptdir} failed" + if ! diff -U 0 "${T}"/files-{bin,wrapped}; then + die "File lists for ${reg_scriptdir} and ${wrapped_scriptdir} differ (see diff above)" + fi + # remove the altered bindir, executables from the package # are already in scriptdir - rm -r "${root}${scriptdir}" || die + rm -r "${reg_scriptdir}" || die if [[ ${DISTUTILS_SINGLE_IMPL} ]]; then - local wrapped_scriptdir=${root}$(python_get_scriptdir) if [[ -d ${wrapped_scriptdir} ]]; then - mv "${wrapped_scriptdir}" "${root}${scriptdir}" || die + mv "${wrapped_scriptdir}" "${reg_scriptdir}" || die fi fi # prune empty directories to see if ${root} contains anything -- 2.35.1