You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.3 KiB

# Copyright 2020-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# QA check: verify correctness of DISTUTILS_USE_SETUPTOOLS
# Maintainer: Python project <python@gentoo.org>
distutils_use_setuptools_check() {
# applicable only to ebuilds inheriting distutils-r1
[[ ${_DISTUTILS_R1} ]] || return
# 'manual' means no checking
[[ ${DISTUTILS_USE_SETUPTOOLS} == manual ]] && return
# pyproject.toml is verified by using it
[[ ${DISTUTILS_USE_SETUPTOOLS} == pyproject.toml ]] && return
# setuptools dep is not set if distutils is optional
if [[ ${DISTUTILS_OPTIONAL} ]]; then
if [[ ${DISTUTILS_USE_SETUPTOOLS} != bdepend ]]; then
eerror "QA Notice: DISTUTILS_USE_SETUPTOOLS is not used when DISTUTILS_OPTIONAL"
eerror "is enabled."
fi
return
fi
local expected=()
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
local EPYTHON PYTHON
_python_export "${impl}" EPYTHON PYTHON
[[ -x ${PYTHON} ]] || continue
local sitedir=${D}$(python_get_sitedir)
if [[ -d ${sitedir} ]]; then
local egg new_expected
while read -d $'\0' -r egg; do
if [[ -f ${egg} ]]; then
# if .egg-info is a file, it's plain distutils
new_expected=no
elif [[ -f ${egg}/requires.txt ]] &&
grep -q -s '^setuptools' \
<(sed -e '/^\[/,$d' "${egg}"/requires.txt)
then
# explicit *unconditional* rdepend in package metadata
new_expected=rdepend
elif grep -q -s '\[\(console\|gui\)_scripts\]' \
"${egg}"/entry_points.txt
then
new_expected=entry-point
else
new_expected=bdepend
fi
if ! has "${new_expected}" "${expected[@]}"; then
expected+=( "${new_expected[@]}" )
fi
done < <(find "${sitedir}" -name '*.egg-info' -print0)
fi
done
if [[ ${#expected[@]} -gt 1 ]] && has no "${expected[@]}"; then
# 'no' and '[rb]depend' are mutually exclusive
eerror "QA Notice: The package seems to have used distutils and setuptools"
eerror "simultaneously"
eerror ""
eerror "This could mean the package has bad conditions:"
eerror "https://dev.gentoo.org/~mgorny/python-guide/distutils.html#conditional-distutils-setuptools-use-in-packages"
eerror "Please report a bug about this and CC python@"
else
# if we did not find anything, also assume 'no' is desired,
# we do not want the setuptools dep
[[ ${#expected[@]} -eq 0 ]] && expected=( no )
# *+rdepend=rdepend
has rdepend "${expected[@]}" && expected=( rdepend )
# NB: note that expected is overwritten above, so this implies !rdepend
# if the package is using entry points, modern versions of setuptools
# use built-in importlib.metadata module, so no rdep needed anymore
# NB2: this is incorrect for pypy3.7 but we ignore this for the time
# being
has entry-point "${expected[@]}" && expected=( bdepend )
if ! has ${DISTUTILS_USE_SETUPTOOLS} "${expected[@]}"; then
local def=
[[ ${DISTUTILS_USE_SETUPTOOLS} == bdepend ]] && def=' (or unset)'
eqawarn "QA Notice: DISTUTILS_USE_SETUPTOOLS value is probably incorrect"
eqawarn " have: DISTUTILS_USE_SETUPTOOLS=${DISTUTILS_USE_SETUPTOOLS}${def}"
if [[ ${expected[0]} == bdepend ]]; then
eqawarn " expected: (unset)"
else
eqawarn " expected: DISTUTILS_USE_SETUPTOOLS=${expected[0]}"
fi
fi
fi
}
distutils_use_setuptools_check
: # guarantee successful exit
# vim:ft=ebuild