blob: 25300fddda90c01e4f9b8a2d875661804069248f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# 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 )
if has entry-point "${expected[@]}"; then
if [[ ${DISTUTILS_STRICT_ENTRY_POINTS} ]]; then
# option for devs to future-proof their packages
# please don't let ago enable it
expected=( bdepend )
else
# accept either rdepend or bdepend for the time being
# but suggest bdepend as the future-proof option
expected=( bdepend rdepend )
fi
fi
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
|