remove eclasses we used for old mailman
Hanno Böck

Hanno Böck commited on 2023-10-01 08:44:56
Zeige 3 geänderte Dateien mit 0 Einfügungen und 2369 Löschungen.

... ...
@@ -1,395 +0,0 @@
1
-# Copyright 1999-2020 Gentoo Authors
2
-# Distributed under the terms of the GNU General Public License v2
3
-
4
-# @ECLASS: python-any-r1.eclass
5
-# @MAINTAINER:
6
-# Python team <python@gentoo.org>
7
-# @AUTHOR:
8
-# Author: Michał Górny <mgorny@gentoo.org>
9
-# Based on work of: Krzysztof Pawlik <nelchael@gentoo.org>
10
-# @SUPPORTED_EAPIS: 5 6 7
11
-# @BLURB: An eclass for packages having build-time dependency on Python.
12
-# @DESCRIPTION:
13
-# A minimal eclass for packages which need any Python interpreter
14
-# installed without a need for explicit choice and invariability.
15
-# This usually involves packages requiring Python at build-time
16
-# but having no other relevance to it.
17
-#
18
-# This eclass provides a minimal PYTHON_DEPS variable with a dependency
19
-# string on any of the supported Python implementations. It also exports
20
-# pkg_setup() which finds the best supported implementation and sets it
21
-# as the active one.
22
-#
23
-# Optionally, you can define a python_check_deps() function. It will
24
-# be called by the eclass with EPYTHON set to each matching Python
25
-# implementation and it is expected to check whether the implementation
26
-# fulfills the package requirements. You can use the locally exported
27
-# PYTHON_USEDEP or PYTHON_SINGLE_USEDEP to check USE-dependencies
28
-# of relevant packages. It should return a true value (0) if the Python
29
-# implementation fulfills the requirements, a false value (non-zero)
30
-# otherwise.
31
-#
32
-# Please note that python-any-r1 will always inherit python-utils-r1
33
-# as well. Thus, all the functions defined there can be used in the
34
-# packages using python-any-r1, and there is no need ever to inherit
35
-# both.
36
-#
37
-# For more information, please see the Python Guide:
38
-# https://dev.gentoo.org/~mgorny/python-guide/
39
-
40
-case "${EAPI:-0}" in
41
-	[0-4]) die "Unsupported EAPI=${EAPI:-0} (too old) for ${ECLASS}" ;;
42
-	[5-7]) ;;
43
-	*)     die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}" ;;
44
-esac
45
-
46
-if [[ ! ${_PYTHON_ANY_R1} ]]; then
47
-
48
-if [[ ${_PYTHON_R1} ]]; then
49
-	die 'python-any-r1.eclass can not be used with python-r1.eclass.'
50
-elif [[ ${_PYTHON_SINGLE_R1} ]]; then
51
-	die 'python-any-r1.eclass can not be used with python-single-r1.eclass.'
52
-fi
53
-
54
-inherit python-utils-r1
55
-
56
-fi
57
-
58
-EXPORT_FUNCTIONS pkg_setup
59
-
60
-# @ECLASS-VARIABLE: PYTHON_COMPAT
61
-# @REQUIRED
62
-# @DESCRIPTION:
63
-# This variable contains a list of Python implementations the package
64
-# supports. It must be set before the `inherit' call. It has to be
65
-# an array.
66
-#
67
-# Example:
68
-# @CODE
69
-# PYTHON_COMPAT=( python{2_5,2_6,2_7} )
70
-# @CODE
71
-
72
-# @ECLASS-VARIABLE: PYTHON_COMPAT_OVERRIDE
73
-# @USER_VARIABLE
74
-# @DEFAULT_UNSET
75
-# @DESCRIPTION:
76
-# This variable can be used when working with ebuilds to override
77
-# the in-ebuild PYTHON_COMPAT. It is a string naming the implementation
78
-# which will be used to build the package. It needs to be specified
79
-# in the calling environment, and not in ebuilds.
80
-#
81
-# It should be noted that in order to preserve metadata immutability,
82
-# PYTHON_COMPAT_OVERRIDE does not affect dependencies. The value of
83
-# EPYTHON and eselect-python preferences are ignored. Dependencies need
84
-# to be satisfied manually.
85
-#
86
-# Example:
87
-# @CODE
88
-# PYTHON_COMPAT_OVERRIDE='pypy' emerge -1v dev-python/bar
89
-# @CODE
90
-
91
-# @ECLASS-VARIABLE: PYTHON_REQ_USE
92
-# @DEFAULT_UNSET
93
-# @DESCRIPTION:
94
-# The list of USEflags required to be enabled on the Python
95
-# implementations, formed as a USE-dependency string. It should be valid
96
-# for all implementations in PYTHON_COMPAT, so it may be necessary to
97
-# use USE defaults.
98
-#
99
-# Example:
100
-# @CODE
101
-# PYTHON_REQ_USE="gdbm,ncurses(-)?"
102
-# @CODE
103
-#
104
-# It will cause the Python dependencies to look like:
105
-# @CODE
106
-# || ( dev-lang/python:X.Y[gdbm,ncurses(-)?] ... )
107
-# @CODE
108
-
109
-# @ECLASS-VARIABLE: PYTHON_DEPS
110
-# @OUTPUT_VARIABLE
111
-# @DESCRIPTION:
112
-# This is an eclass-generated Python dependency string for all
113
-# implementations listed in PYTHON_COMPAT.
114
-#
115
-# Any of the supported interpreters will satisfy the dependency.
116
-#
117
-# Example use:
118
-# @CODE
119
-# DEPEND="${RDEPEND}
120
-#	${PYTHON_DEPS}"
121
-# @CODE
122
-#
123
-# Example value:
124
-# @CODE
125
-# || ( dev-lang/python:2.7[gdbm]
126
-# 	dev-lang/python:2.6[gdbm] )
127
-# @CODE
128
-
129
-# @ECLASS-VARIABLE: PYTHON_USEDEP
130
-# @OUTPUT_VARIABLE
131
-# @DESCRIPTION:
132
-# An eclass-generated USE-dependency string for the currently tested
133
-# implementation. It is set locally for python_check_deps() call.
134
-#
135
-# The generated USE-flag list is compatible with packages using
136
-# python-r1 eclass. For python-single-r1 dependencies,
137
-# use PYTHON_SINGLE_USEDEP.
138
-#
139
-# Example use:
140
-# @CODE
141
-# python_check_deps() {
142
-# 	has_version "dev-python/foo[${PYTHON_USEDEP}]"
143
-# }
144
-# @CODE
145
-#
146
-# Example value:
147
-# @CODE
148
-# python_targets_python3_7(-),-python_single_target_python3_7(-)
149
-# @CODE
150
-
151
-# @ECLASS-VARIABLE: PYTHON_SINGLE_USEDEP
152
-# @OUTPUT_VARIABLE
153
-# @DESCRIPTION:
154
-# An eclass-generated USE-dependency string for the currently tested
155
-# implementation. It is set locally for python_check_deps() call.
156
-#
157
-# The generated USE-flag list is compatible with packages using
158
-# python-single-r1 eclass. For python-r1 dependencies,
159
-# use PYTHON_USEDEP.
160
-#
161
-# Example use:
162
-# @CODE
163
-# python_check_deps() {
164
-# 	has_version "dev-python/bar[${PYTHON_SINGLE_USEDEP}]"
165
-# }
166
-# @CODE
167
-#
168
-# Example value:
169
-# @CODE
170
-# python_single_target_python3_7(-)
171
-# @CODE
172
-
173
-_python_any_set_globals() {
174
-	local usestr deps i PYTHON_PKG_DEP
175
-	[[ ${PYTHON_REQ_USE} ]] && usestr="[${PYTHON_REQ_USE}]"
176
-
177
-	_python_set_impls
178
-
179
-	for i in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
180
-		_python_export "${i}" PYTHON_PKG_DEP
181
-
182
-		# note: need to strip '=' slot operator for || deps
183
-		deps="${PYTHON_PKG_DEP/:0=/:0} ${deps}"
184
-	done
185
-	deps="|| ( ${deps})"
186
-
187
-	if [[ ${PYTHON_DEPS+1} ]]; then
188
-		if [[ ${PYTHON_DEPS} != "${deps}" ]]; then
189
-			eerror "PYTHON_DEPS have changed between inherits (PYTHON_REQ_USE?)!"
190
-			eerror "Before: ${PYTHON_DEPS}"
191
-			eerror "Now   : ${deps}"
192
-			die "PYTHON_DEPS integrity check failed"
193
-		fi
194
-	else
195
-		PYTHON_DEPS=${deps}
196
-		readonly PYTHON_DEPS
197
-	fi
198
-
199
-	if [[ ! ${PYTHON_REQUIRED_USE+1} ]]; then
200
-		# fake var to catch mistaken usage
201
-		PYTHON_REQUIRED_USE='I-DO-NOT-EXIST-IN-PYTHON-ANY-R1'
202
-		readonly PYTHON_REQUIRED_USE
203
-	fi
204
-}
205
-_python_any_set_globals
206
-unset -f _python_any_set_globals
207
-
208
-if [[ ! ${_PYTHON_ANY_R1} ]]; then
209
-
210
-# @FUNCTION: python_gen_any_dep
211
-# @USAGE: <dependency-block>
212
-# @DESCRIPTION:
213
-# Generate an any-of dependency that enforces a version match between
214
-# the Python interpreter and Python packages. <dependency-block> needs
215
-# to list one or more dependencies with verbatim '${PYTHON_USEDEP}'
216
-# or '${PYTHON_SINGLE_USEDEP}' references (quoted!) that will get
217
-# expanded inside the function.
218
-#
219
-# This should be used along with an appropriate python_check_deps()
220
-# that checks which of the any-of blocks were matched.
221
-#
222
-# Example use:
223
-# @CODE
224
-# DEPEND="$(python_gen_any_dep '
225
-#	dev-python/foo[${PYTHON_SINGLE_USEDEP}]
226
-#	|| ( dev-python/bar[${PYTHON_USEDEP}]
227
-#		dev-python/baz[${PYTHON_USEDEP}] )')"
228
-#
229
-# python_check_deps() {
230
-#	has_version "dev-python/foo[${PYTHON_SINGLE_USEDEP}]" \
231
-#		&& { has_version "dev-python/bar[${PYTHON_USEDEP}]" \
232
-#			|| has_version "dev-python/baz[${PYTHON_USEDEP}]"; }
233
-# }
234
-# @CODE
235
-#
236
-# Example value:
237
-# @CODE
238
-# || (
239
-#	(
240
-#		dev-lang/python:3.7
241
-#		dev-python/foo[python_single_target_python3_7(-)]
242
-#		|| ( dev-python/bar[python_targets_python3_7(-),-python_single_target_python3_7(-)]
243
-#			dev-python/baz[python_targets_python3_7(-),-python_single_target_python3_7(-)] )
244
-#	)
245
-#	(
246
-#		dev-lang/python:3.8
247
-#		dev-python/foo[python_single_target_python3_8(-)]
248
-#		|| ( dev-python/bar[python_targets_python3_8(-),-python_single_target_python3_8(-)]
249
-#			dev-python/baz[python_targets_python3_8(-),-python_single_target_python3_8(-)] )
250
-#	)
251
-# )
252
-# @CODE
253
-python_gen_any_dep() {
254
-	debug-print-function ${FUNCNAME} "${@}"
255
-
256
-	local depstr=${1}
257
-	[[ ${depstr} ]] || die "No dependency string provided"
258
-
259
-	local i PYTHON_PKG_DEP out=
260
-	for i in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
261
-		local PYTHON_USEDEP="python_targets_${i}(-),-python_single_target_${i}(-)"
262
-		local PYTHON_SINGLE_USEDEP="python_single_target_${i}(-)"
263
-		_python_export "${i}" PYTHON_PKG_DEP
264
-
265
-		local i_depstr=${depstr//\$\{PYTHON_USEDEP\}/${PYTHON_USEDEP}}
266
-		i_depstr=${i_depstr//\$\{PYTHON_SINGLE_USEDEP\}/${PYTHON_SINGLE_USEDEP}}
267
-		# note: need to strip '=' slot operator for || deps
268
-		out="( ${PYTHON_PKG_DEP%=} ${i_depstr} ) ${out}"
269
-	done
270
-	echo "|| ( ${out})"
271
-}
272
-
273
-# @FUNCTION: _python_EPYTHON_supported
274
-# @USAGE: <epython>
275
-# @INTERNAL
276
-# @DESCRIPTION:
277
-# Check whether the specified implementation is supported by package
278
-# (specified in PYTHON_COMPAT). Calls python_check_deps() if declared.
279
-_python_EPYTHON_supported() {
280
-	debug-print-function ${FUNCNAME} "${@}"
281
-
282
-	local EPYTHON=${1}
283
-	local i=${EPYTHON/./_}
284
-
285
-	case "${i}" in
286
-		python*|jython*|pypy*)
287
-			;;
288
-		*)
289
-			ewarn "Invalid EPYTHON: ${EPYTHON}"
290
-			return 1
291
-			;;
292
-	esac
293
-
294
-	if has "${i}" "${_PYTHON_SUPPORTED_IMPLS[@]}"; then
295
-		if python_is_installed "${i}"; then
296
-			if declare -f python_check_deps >/dev/null; then
297
-				local PYTHON_USEDEP="python_targets_${i}(-),-python_single_target_${i}(-)"
298
-				local PYTHON_SINGLE_USEDEP="python_single_target_${i}(-)"
299
-				python_check_deps
300
-				return ${?}
301
-			fi
302
-
303
-			return 0
304
-		fi
305
-	elif ! has "${i}" "${_PYTHON_ALL_IMPLS[@]}"; then
306
-		ewarn "Invalid EPYTHON: ${EPYTHON}"
307
-	fi
308
-	return 1
309
-}
310
-
311
-# @FUNCTION: python_setup
312
-# @DESCRIPTION:
313
-# Determine what the best installed (and supported) Python
314
-# implementation is, and set the Python build environment up for it.
315
-#
316
-# This function will call python_check_deps() if defined.
317
-python_setup() {
318
-	debug-print-function ${FUNCNAME} "${@}"
319
-
320
-	# support developer override
321
-	if [[ ${PYTHON_COMPAT_OVERRIDE} ]]; then
322
-		local impls=( ${PYTHON_COMPAT_OVERRIDE} )
323
-		[[ ${#impls[@]} -eq 1 ]] || die "PYTHON_COMPAT_OVERRIDE must name exactly one implementation for python-any-r1"
324
-
325
-		ewarn "WARNING: PYTHON_COMPAT_OVERRIDE in effect. The following Python"
326
-		ewarn "implementation will be used:"
327
-		ewarn
328
-		ewarn "	${PYTHON_COMPAT_OVERRIDE}"
329
-		ewarn
330
-		ewarn "Dependencies won't be satisfied, and EPYTHON/eselect-python will be ignored."
331
-
332
-		_python_export "${impls[0]}" EPYTHON PYTHON
333
-		_python_wrapper_setup
334
-		einfo "Using ${EPYTHON} to build"
335
-		return
336
-	fi
337
-
338
-	# first, try ${EPYTHON}... maybe it's good enough for us.
339
-	if [[ ${EPYTHON} ]]; then
340
-		if _python_EPYTHON_supported "${EPYTHON}"; then
341
-			_python_export EPYTHON PYTHON
342
-			_python_wrapper_setup
343
-			einfo "Using ${EPYTHON} to build"
344
-			return
345
-		fi
346
-	fi
347
-
348
-	# then, try eselect-python
349
-	local variant i
350
-	for variant in '' '--python2' '--python3'; do
351
-		i=$(eselect python --show ${variant} 2>/dev/null)
352
-
353
-		if [[ ! ${i} ]]; then
354
-			# no eselect-python?
355
-			break
356
-		elif _python_EPYTHON_supported "${i}"; then
357
-			_python_export "${i}" EPYTHON PYTHON
358
-			_python_wrapper_setup
359
-			einfo "Using ${EPYTHON} to build"
360
-			return
361
-		fi
362
-	done
363
-
364
-	# fallback to best installed impl.
365
-	# (reverse iteration over _PYTHON_SUPPORTED_IMPLS)
366
-	for (( i = ${#_PYTHON_SUPPORTED_IMPLS[@]} - 1; i >= 0; i-- )); do
367
-		_python_export "${_PYTHON_SUPPORTED_IMPLS[i]}" EPYTHON PYTHON
368
-		if _python_EPYTHON_supported "${EPYTHON}"; then
369
-			_python_wrapper_setup
370
-			einfo "Using ${EPYTHON} to build"
371
-			return
372
-		fi
373
-	done
374
-
375
-	eerror "No Python implementation found for the build. This is usually"
376
-	eerror "a bug in the ebuild. Please report it to bugs.gentoo.org"
377
-	eerror "along with the build log."
378
-	echo
379
-	die "No supported Python implementation installed."
380
-}
381
-
382
-# @FUNCTION: python-any-r1_pkg_setup
383
-# @DESCRIPTION:
384
-# Runs python_setup during from-source installs.
385
-#
386
-# In a binary package installs is a no-op. If you need Python in pkg_*
387
-# phases of a binary package, call python_setup directly.
388
-python-any-r1_pkg_setup() {
389
-	debug-print-function ${FUNCNAME} "${@}"
390
-
391
-	[[ ${MERGE_TYPE} != binary ]] && python_setup
392
-}
393
-
394
-_PYTHON_ANY_R1=1
395
-fi
... ...
@@ -1,529 +0,0 @@
1
-# Copyright 1999-2021 Gentoo Authors
2
-# Distributed under the terms of the GNU General Public License v2
3
-
4
-# @ECLASS: python-single-r1.eclass
5
-# @MAINTAINER:
6
-# Python team <python@gentoo.org>
7
-# @AUTHOR:
8
-# Author: Michał Górny <mgorny@gentoo.org>
9
-# Based on work of: Krzysztof Pawlik <nelchael@gentoo.org>
10
-# @SUPPORTED_EAPIS: 5 6 7
11
-# @BLURB: An eclass for Python packages not installed for multiple implementations.
12
-# @DESCRIPTION:
13
-# An extension of the python-r1 eclass suite for packages which
14
-# don't support being installed for multiple Python implementations.
15
-# This mostly includes tools embedding Python and packages using foreign
16
-# build systems.
17
-#
18
-# This eclass sets correct IUSE.  It also provides PYTHON_DEPS
19
-# and PYTHON_REQUIRED_USE that need to be added to appropriate ebuild
20
-# metadata variables.
21
-#
22
-# The eclass exports PYTHON_SINGLE_USEDEP that is suitable for depending
23
-# on other packages using the eclass.  Dependencies on packages using
24
-# python-r1 should be created via python_gen_cond_dep() function,
25
-# using PYTHON_USEDEP placeholder.
26
-#
27
-# Please note that packages support multiple Python implementations
28
-# (using python-r1 eclass) can not depend on packages not supporting
29
-# them (using this eclass).
30
-#
31
-# Please note that python-single-r1 will always inherit python-utils-r1
32
-# as well. Thus, all the functions defined there can be used
33
-# in the packages using python-single-r1, and there is no need ever
34
-# to inherit both.
35
-#
36
-# For more information, please see the Python Guide:
37
-# https://dev.gentoo.org/~mgorny/python-guide/
38
-
39
-case "${EAPI:-0}" in
40
-	0|1|2|3|4)
41
-		die "Unsupported EAPI=${EAPI:-0} (too old) for ${ECLASS}"
42
-		;;
43
-	5|6|7)
44
-		# EAPI=5 is required for sane USE_EXPAND dependencies
45
-		;;
46
-	*)
47
-		die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}"
48
-		;;
49
-esac
50
-
51
-if [[ ! ${_PYTHON_SINGLE_R1} ]]; then
52
-
53
-if [[ ${_PYTHON_R1} ]]; then
54
-	die 'python-single-r1.eclass can not be used with python-r1.eclass.'
55
-elif [[ ${_PYTHON_ANY_R1} ]]; then
56
-	die 'python-single-r1.eclass can not be used with python-any-r1.eclass.'
57
-fi
58
-
59
-inherit python-utils-r1
60
-
61
-fi
62
-
63
-EXPORT_FUNCTIONS pkg_setup
64
-
65
-# @ECLASS-VARIABLE: PYTHON_COMPAT
66
-# @REQUIRED
67
-# @DESCRIPTION:
68
-# This variable contains a list of Python implementations the package
69
-# supports. It must be set before the `inherit' call. It has to be
70
-# an array.
71
-#
72
-# Example:
73
-# @CODE
74
-# PYTHON_COMPAT=( python2_7 python3_3 python3_4 )
75
-# @CODE
76
-#
77
-# Please note that you can also use bash brace expansion if you like:
78
-# @CODE
79
-# PYTHON_COMPAT=( python2_7 python3_{3,4} )
80
-# @CODE
81
-
82
-# @ECLASS-VARIABLE: PYTHON_COMPAT_OVERRIDE
83
-# @USER_VARIABLE
84
-# @DEFAULT_UNSET
85
-# @DESCRIPTION:
86
-# This variable can be used when working with ebuilds to override
87
-# the in-ebuild PYTHON_COMPAT. It is a string naming the implementation
88
-# which package will be built for. It needs to be specified
89
-# in the calling environment, and not in ebuilds.
90
-#
91
-# It should be noted that in order to preserve metadata immutability,
92
-# PYTHON_COMPAT_OVERRIDE does not affect IUSE nor dependencies.
93
-# The state of PYTHON_SINGLE_TARGET is ignored, and the implementation
94
-# in PYTHON_COMPAT_OVERRIDE is built instead.  Dependencies need to be
95
-# satisfied manually.
96
-#
97
-# Example:
98
-# @CODE
99
-# PYTHON_COMPAT_OVERRIDE='pypy' emerge -1v dev-python/bar
100
-# @CODE
101
-
102
-# @ECLASS-VARIABLE: PYTHON_REQ_USE
103
-# @DEFAULT_UNSET
104
-# @DESCRIPTION:
105
-# The list of USEflags required to be enabled on the chosen Python
106
-# implementations, formed as a USE-dependency string. It should be valid
107
-# for all implementations in PYTHON_COMPAT, so it may be necessary to
108
-# use USE defaults.
109
-#
110
-# This should be set before calling `inherit'.
111
-#
112
-# Example:
113
-# @CODE
114
-# PYTHON_REQ_USE="gdbm,ncurses(-)?"
115
-# @CODE
116
-#
117
-# It will cause the Python dependencies to look like:
118
-# @CODE
119
-# python_single_target_pythonX_Y? ( dev-lang/python:X.Y[gdbm,ncurses(-)?] )
120
-# @CODE
121
-
122
-# @ECLASS-VARIABLE: PYTHON_DEPS
123
-# @OUTPUT_VARIABLE
124
-# @DESCRIPTION:
125
-# This is an eclass-generated Python dependency string for all
126
-# implementations listed in PYTHON_COMPAT.
127
-#
128
-# The dependency string is conditional on PYTHON_SINGLE_TARGET.
129
-#
130
-# Example use:
131
-# @CODE
132
-# RDEPEND="${PYTHON_DEPS}
133
-#	dev-foo/mydep"
134
-# BDEPEND="${PYTHON_DEPS}"
135
-# @CODE
136
-#
137
-# Example value:
138
-# @CODE
139
-# dev-lang/python-exec:=
140
-# python_single_target_python2_7? ( dev-lang/python:2.7[gdbm] )
141
-# python_single_target_pypy? ( dev-python/pypy[gdbm] )
142
-# @CODE
143
-
144
-# @ECLASS-VARIABLE: PYTHON_SINGLE_USEDEP
145
-# @OUTPUT_VARIABLE
146
-# @DESCRIPTION:
147
-# This is an eclass-generated USE-dependency string which can be used to
148
-# depend on another python-single-r1 package being built for the same
149
-# Python implementations.
150
-#
151
-# If you need to depend on a multi-impl (python-r1) package, use
152
-# python_gen_cond_dep with PYTHON_USEDEP placeholder instead.
153
-#
154
-# Example use:
155
-# @CODE
156
-# RDEPEND="dev-python/foo[${PYTHON_SINGLE_USEDEP}]"
157
-# @CODE
158
-#
159
-# Example value:
160
-# @CODE
161
-# python_single_target_python3_4(-)?
162
-# @CODE
163
-
164
-# @ECLASS-VARIABLE: PYTHON_USEDEP
165
-# @OUTPUT_VARIABLE
166
-# @DESCRIPTION:
167
-# This is a placeholder variable supported by python_gen_cond_dep,
168
-# in order to depend on python-r1 packages built for the same Python
169
-# implementations.
170
-#
171
-# Example use:
172
-# @CODE
173
-# RDEPEND="$(python_gen_cond_dep '
174
-#     dev-python/foo[${PYTHON_USEDEP}]
175
-#   ')"
176
-# @CODE
177
-#
178
-# Example value:
179
-# @CODE
180
-# python_targets_python3_4(-)
181
-# @CODE
182
-
183
-# @ECLASS-VARIABLE: PYTHON_MULTI_USEDEP
184
-# @OUTPUT_VARIABLE
185
-# @DESCRIPTION:
186
-# This is a backwards-compatibility placeholder.  Use PYTHON_USEDEP
187
-# instead.
188
-
189
-# @ECLASS-VARIABLE: PYTHON_REQUIRED_USE
190
-# @OUTPUT_VARIABLE
191
-# @DESCRIPTION:
192
-# This is an eclass-generated required-use expression which ensures
193
-# that exactly one PYTHON_SINGLE_TARGET value has been enabled.
194
-#
195
-# This expression should be utilized in an ebuild by including it in
196
-# REQUIRED_USE, optionally behind a use flag.
197
-#
198
-# Example use:
199
-# @CODE
200
-# REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
201
-# @CODE
202
-#
203
-# Example value:
204
-# @CODE
205
-# ^^ ( python_single_target_python2_7 python_single_target_python3_3 )
206
-# @CODE
207
-
208
-_python_single_set_globals() {
209
-	_python_set_impls
210
-
211
-	local flags=( "${_PYTHON_SUPPORTED_IMPLS[@]/#/python_single_target_}" )
212
-
213
-	if [[ ${#_PYTHON_SUPPORTED_IMPLS[@]} -eq 1 ]]; then
214
-		# if only one implementation is supported, use IUSE defaults
215
-		# to avoid requesting the user to enable it
216
-		IUSE="+${flags[0]}"
217
-	else
218
-		IUSE="${flags[*]}"
219
-	fi
220
-
221
-	local requse="^^ ( ${flags[*]} )"
222
-	local single_flags="${flags[@]/%/(-)?}"
223
-	local single_usedep=${single_flags// /,}
224
-
225
-	local deps= i PYTHON_PKG_DEP
226
-	for i in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
227
-		_python_export "${i}" PYTHON_PKG_DEP
228
-		# 1) well, python-exec would suffice as an RDEP
229
-		# but no point in making this overcomplex, BDEP doesn't hurt anyone
230
-		# 2) python-exec should be built with all targets forced anyway
231
-		# but if new targets were added, we may need to force a rebuild
232
-		deps+="python_single_target_${i}? (
233
-			${PYTHON_PKG_DEP}
234
-			>=dev-lang/python-exec-2:=[python_targets_${i}]
235
-		) "
236
-	done
237
-
238
-	if [[ ${PYTHON_DEPS+1} ]]; then
239
-		if [[ ${PYTHON_DEPS} != "${deps}" ]]; then
240
-			eerror "PYTHON_DEPS have changed between inherits (PYTHON_REQ_USE?)!"
241
-			eerror "Before: ${PYTHON_DEPS}"
242
-			eerror "Now   : ${deps}"
243
-			die "PYTHON_DEPS integrity check failed"
244
-		fi
245
-
246
-		# these two are formality -- they depend on PYTHON_COMPAT only
247
-		if [[ ${PYTHON_REQUIRED_USE} != ${requse} ]]; then
248
-			eerror "PYTHON_REQUIRED_USE have changed between inherits!"
249
-			eerror "Before: ${PYTHON_REQUIRED_USE}"
250
-			eerror "Now   : ${requse}"
251
-			die "PYTHON_REQUIRED_USE integrity check failed"
252
-		fi
253
-
254
-		if [[ ${PYTHON_SINGLE_USEDEP} != "${single_usedep}" ]]; then
255
-			eerror "PYTHON_SINGLE_USEDEP have changed between inherits!"
256
-			eerror "Before: ${PYTHON_SINGLE_USEDEP}"
257
-			eerror "Now   : ${single_usedep}"
258
-			die "PYTHON_SINGLE_USEDEP integrity check failed"
259
-		fi
260
-	else
261
-		PYTHON_DEPS=${deps}
262
-		PYTHON_REQUIRED_USE=${requse}
263
-		PYTHON_USEDEP='%PYTHON_USEDEP-NEEDS-TO-BE-USED-IN-PYTHON_GEN_COND_DEP%'
264
-		PYTHON_SINGLE_USEDEP=${single_usedep}
265
-		readonly PYTHON_DEPS PYTHON_REQUIRED_USE PYTHON_SINGLE_USEDEP \
266
-			PYTHON_USEDEP
267
-	fi
268
-}
269
-_python_single_set_globals
270
-unset -f _python_single_set_globals
271
-
272
-if [[ ! ${_PYTHON_SINGLE_R1} ]]; then
273
-
274
-# @FUNCTION: _python_gen_usedep
275
-# @USAGE: [<pattern>...]
276
-# @INTERNAL
277
-# @DESCRIPTION:
278
-# Output a USE dependency string for Python implementations which
279
-# are both in PYTHON_COMPAT and match any of the patterns passed
280
-# as parameters to the function.
281
-#
282
-# The patterns can be either fnmatch-style patterns (matched via bash
283
-# == operator against PYTHON_COMPAT values) or '-2' / '-3' to indicate
284
-# appropriately all enabled Python 2/3 implementations (alike
285
-# python_is_python3). Remember to escape or quote the fnmatch patterns
286
-# to prevent accidental shell filename expansion.
287
-#
288
-# This is an internal function used to implement python_gen_cond_dep.
289
-_python_gen_usedep() {
290
-	debug-print-function ${FUNCNAME} "${@}"
291
-
292
-	local impl matches=()
293
-
294
-	_python_verify_patterns "${@}"
295
-	for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
296
-		if _python_impl_matches "${impl}" "${@}"; then
297
-			matches+=(
298
-				"python_single_target_${impl}(-)?"
299
-			)
300
-		fi
301
-	done
302
-
303
-	[[ ${matches[@]} ]] || die "No supported implementations match python_gen_usedep patterns: ${@}"
304
-
305
-	local out=${matches[@]}
306
-	echo "${out// /,}"
307
-}
308
-
309
-# @FUNCTION: python_gen_useflags
310
-# @USAGE: [<pattern>...]
311
-# @DESCRIPTION:
312
-# Output a list of USE flags for Python implementations which
313
-# are both in PYTHON_COMPAT and match any of the patterns passed
314
-# as parameters to the function.
315
-#
316
-# The patterns can be either fnmatch-style patterns (matched via bash
317
-# == operator against PYTHON_COMPAT values) or '-2' / '-3' to indicate
318
-# appropriately all enabled Python 2/3 implementations (alike
319
-# python_is_python3). Remember to escape or quote the fnmatch patterns
320
-# to prevent accidental shell filename expansion.
321
-#
322
-# Example:
323
-# @CODE
324
-# PYTHON_COMPAT=( python{2_7,3_4} )
325
-# REQUIRED_USE="doc? ( ^^ ( $(python_gen_useflags 'python2*') ) )"
326
-# @CODE
327
-#
328
-# It will cause the variable to look like:
329
-# @CODE
330
-# REQUIRED_USE="doc? ( ^^ ( python_single_target_python2_7 ) )"
331
-# @CODE
332
-python_gen_useflags() {
333
-	debug-print-function ${FUNCNAME} "${@}"
334
-
335
-	local impl matches=()
336
-
337
-	_python_verify_patterns "${@}"
338
-	for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
339
-		if _python_impl_matches "${impl}" "${@}"; then
340
-			matches+=( "python_single_target_${impl}" )
341
-		fi
342
-	done
343
-
344
-	echo "${matches[@]}"
345
-}
346
-
347
-# @FUNCTION: python_gen_cond_dep
348
-# @USAGE: <dependency> [<pattern>...]
349
-# @DESCRIPTION:
350
-# Output a list of <dependency>-ies made conditional to USE flags
351
-# of Python implementations which are both in PYTHON_COMPAT and match
352
-# any of the patterns passed as the remaining parameters.
353
-#
354
-# The patterns can be either fnmatch-style patterns (matched via bash
355
-# == operator against PYTHON_COMPAT values) or '-2' / '-3' to indicate
356
-# appropriately all enabled Python 2/3 implementations (alike
357
-# python_is_python3). Remember to escape or quote the fnmatch patterns
358
-# to prevent accidental shell filename expansion.
359
-#
360
-# In order to enforce USE constraints on the packages, verbatim
361
-# '${PYTHON_SINGLE_USEDEP}' and '${PYTHON_USEDEP}' (quoted!) may
362
-# be placed in the dependency specification. It will get expanded within
363
-# the function into a proper USE dependency string.
364
-#
365
-# Example:
366
-# @CODE
367
-# PYTHON_COMPAT=( python{2_7,3_{3,4}} pypy )
368
-# RDEPEND="$(python_gen_cond_dep \
369
-#   'dev-python/unittest2[${PYTHON_USEDEP}]' python2_7 pypy )"
370
-# @CODE
371
-#
372
-# It will cause the variable to look like:
373
-# @CODE
374
-# RDEPEND="python_single_target_python2_7? (
375
-#     dev-python/unittest2[python_targets_python2_7(-)?,...] )
376
-#	python_single_target_pypy? (
377
-#     dev-python/unittest2[python_targets_pypy(-)?,...] )"
378
-# @CODE
379
-python_gen_cond_dep() {
380
-	debug-print-function ${FUNCNAME} "${@}"
381
-
382
-	local impl matches=()
383
-
384
-	local dep=${1}
385
-	shift
386
-
387
-	_python_verify_patterns "${@}"
388
-	for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
389
-		if _python_impl_matches "${impl}" "${@}"; then
390
-			# substitute ${PYTHON_SINGLE_USEDEP} if used
391
-			# (since python_gen_usedep() will not return
392
-			#  ${PYTHON_SINGLE_USEDEP}, the code is run at most once)
393
-			if [[ ${dep} == *'${PYTHON_SINGLE_USEDEP}'* ]]; then
394
-				local usedep=$(_python_gen_usedep "${@}")
395
-				dep=${dep//\$\{PYTHON_SINGLE_USEDEP\}/${usedep}}
396
-			fi
397
-			local multi_usedep="python_targets_${impl}(-)"
398
-
399
-			local subdep=${dep//\$\{PYTHON_MULTI_USEDEP\}/${multi_usedep}}
400
-			matches+=( "python_single_target_${impl}? (
401
-				${subdep//\$\{PYTHON_USEDEP\}/${multi_usedep}} )" )
402
-		fi
403
-	done
404
-
405
-	echo "${matches[@]}"
406
-}
407
-
408
-# @FUNCTION: python_gen_impl_dep
409
-# @USAGE: [<requested-use-flags> [<impl-pattern>...]]
410
-# @DESCRIPTION:
411
-# Output a dependency on Python implementations with the specified USE
412
-# dependency string appended, or no USE dependency string if called
413
-# without the argument (or with empty argument). If any implementation
414
-# patterns are passed, the output dependencies will be generated only
415
-# for the implementations matching them.
416
-#
417
-# The patterns can be either fnmatch-style patterns (matched via bash
418
-# == operator against PYTHON_COMPAT values) or '-2' / '-3' to indicate
419
-# appropriately all enabled Python 2/3 implementations (alike
420
-# python_is_python3). Remember to escape or quote the fnmatch patterns
421
-# to prevent accidental shell filename expansion.
422
-#
423
-# Use this function when you need to request different USE flags
424
-# on the Python interpreter depending on package's USE flags. If you
425
-# only need a single set of interpreter USE flags, just set
426
-# PYTHON_REQ_USE and use ${PYTHON_DEPS} globally.
427
-#
428
-# Example:
429
-# @CODE
430
-# PYTHON_COMPAT=( python{2_7,3_{3,4}} pypy )
431
-# RDEPEND="foo? ( $(python_gen_impl_dep 'xml(+)') )"
432
-# @CODE
433
-#
434
-# It will cause the variable to look like:
435
-# @CODE
436
-# RDEPEND="foo? (
437
-#   python_single_target_python2_7? (
438
-#     dev-lang/python:2.7[xml(+)] )
439
-#	python_single_target_pypy? (
440
-#     dev-python/pypy[xml(+)] ) )"
441
-# @CODE
442
-python_gen_impl_dep() {
443
-	debug-print-function ${FUNCNAME} "${@}"
444
-
445
-	local impl
446
-	local matches=()
447
-
448
-	local PYTHON_REQ_USE=${1}
449
-	shift
450
-
451
-	_python_verify_patterns "${@}"
452
-	for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
453
-		if _python_impl_matches "${impl}" "${@}"; then
454
-			local PYTHON_PKG_DEP
455
-			_python_export "${impl}" PYTHON_PKG_DEP
456
-			matches+=( "python_single_target_${impl}? ( ${PYTHON_PKG_DEP} )" )
457
-		fi
458
-	done
459
-
460
-	echo "${matches[@]}"
461
-}
462
-
463
-# @FUNCTION: python_setup
464
-# @DESCRIPTION:
465
-# Determine what the selected Python implementation is and set
466
-# the Python build environment up for it.
467
-python_setup() {
468
-	debug-print-function ${FUNCNAME} "${@}"
469
-
470
-	unset EPYTHON
471
-
472
-	# support developer override
473
-	if [[ ${PYTHON_COMPAT_OVERRIDE} ]]; then
474
-		local impls=( ${PYTHON_COMPAT_OVERRIDE} )
475
-		[[ ${#impls[@]} -eq 1 ]] || die "PYTHON_COMPAT_OVERRIDE must name exactly one implementation for python-single-r1"
476
-
477
-		ewarn "WARNING: PYTHON_COMPAT_OVERRIDE in effect. The following Python"
478
-		ewarn "implementation will be used:"
479
-		ewarn
480
-		ewarn "	${PYTHON_COMPAT_OVERRIDE}"
481
-		ewarn
482
-		ewarn "Dependencies won't be satisfied, and PYTHON_SINGLE_TARGET flags will be ignored."
483
-
484
-		_python_export "${impls[0]}" EPYTHON PYTHON
485
-		_python_wrapper_setup
486
-		einfo "Using ${EPYTHON} to build"
487
-		return
488
-	fi
489
-
490
-	local impl
491
-	for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
492
-		if use "python_single_target_${impl}"; then
493
-			if [[ ${EPYTHON} ]]; then
494
-				eerror "Your PYTHON_SINGLE_TARGET setting lists more than a single Python"
495
-				eerror "implementation. Please set it to just one value. If you need"
496
-				eerror "to override the value for a single package, please use package.env"
497
-				eerror "or an equivalent solution (man 5 portage)."
498
-				echo
499
-				die "More than one implementation in PYTHON_SINGLE_TARGET."
500
-			fi
501
-
502
-			_python_export "${impl}" EPYTHON PYTHON
503
-			_python_wrapper_setup
504
-			einfo "Using ${EPYTHON} to build"
505
-		fi
506
-	done
507
-
508
-	if [[ ! ${EPYTHON} ]]; then
509
-		eerror "No Python implementation selected for the build. Please set"
510
-		eerror "the PYTHON_SINGLE_TARGET variable in your make.conf to one"
511
-		eerror "of the following values:"
512
-		eerror
513
-		eerror "${_PYTHON_SUPPORTED_IMPLS[@]}"
514
-		echo
515
-		die "No supported Python implementation in PYTHON_SINGLE_TARGET."
516
-	fi
517
-}
518
-
519
-# @FUNCTION: python-single-r1_pkg_setup
520
-# @DESCRIPTION:
521
-# Runs python_setup.
522
-python-single-r1_pkg_setup() {
523
-	debug-print-function ${FUNCNAME} "${@}"
524
-
525
-	[[ ${MERGE_TYPE} != binary ]] && python_setup
526
-}
527
-
528
-_PYTHON_SINGLE_R1=1
529
-fi
... ...
@@ -1,1445 +0,0 @@
1
-# Copyright 1999-2021 Gentoo Authors
2
-# Distributed under the terms of the GNU General Public License v2
3
-
4
-# @ECLASS: python-utils-r1.eclass
5
-# @MAINTAINER:
6
-# Python team <python@gentoo.org>
7
-# @AUTHOR:
8
-# Author: Michał Górny <mgorny@gentoo.org>
9
-# Based on work of: Krzysztof Pawlik <nelchael@gentoo.org>
10
-# @SUPPORTED_EAPIS: 5 6 7
11
-# @BLURB: Utility functions for packages with Python parts.
12
-# @DESCRIPTION:
13
-# A utility eclass providing functions to query Python implementations,
14
-# install Python modules and scripts.
15
-#
16
-# This eclass does not set any metadata variables nor export any phase
17
-# functions. It can be inherited safely.
18
-#
19
-# For more information, please see the Python Guide:
20
-# https://dev.gentoo.org/~mgorny/python-guide/
21
-
22
-case "${EAPI:-0}" in
23
-	[0-4]) die "Unsupported EAPI=${EAPI:-0} (too old) for ${ECLASS}" ;;
24
-	[5-7]) ;;
25
-	*)     die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}" ;;
26
-esac
27
-
28
-if [[ ${_PYTHON_ECLASS_INHERITED} ]]; then
29
-	die 'python-r1 suite eclasses can not be used with python.eclass.'
30
-fi
31
-
32
-if [[ ! ${_PYTHON_UTILS_R1} ]]; then
33
-
34
-[[ ${EAPI} == 5 ]] && inherit eutils multilib
35
-inherit toolchain-funcs
36
-
37
-# @ECLASS-VARIABLE: _PYTHON_ALL_IMPLS
38
-# @INTERNAL
39
-# @DESCRIPTION:
40
-# All supported Python implementations, most preferred last.
41
-_PYTHON_ALL_IMPLS=(
42
-	pypy3
43
-	python2_7
44
-	python3_7 python3_8 python3_9
45
-)
46
-readonly _PYTHON_ALL_IMPLS
47
-
48
-# @ECLASS-VARIABLE: _PYTHON_HISTORICAL_IMPLS
49
-# @INTERNAL
50
-# @DESCRIPTION:
51
-# All historical Python implementations that are no longer supported.
52
-_PYTHON_HISTORICAL_IMPLS=(
53
-	jython2_7
54
-	pypy pypy1_{8,9} pypy2_0
55
-	python2_{5,6}
56
-	python3_{1..6}
57
-)
58
-readonly _PYTHON_HISTORICAL_IMPLS
59
-
60
-# @ECLASS-VARIABLE: PYTHON_COMPAT_NO_STRICT
61
-# @INTERNAL
62
-# @DESCRIPTION:
63
-# Set to a non-empty value in order to make eclass tolerate (ignore)
64
-# unknown implementations in PYTHON_COMPAT.
65
-#
66
-# This is intended to be set by the user when using ebuilds that may
67
-# have unknown (newer) implementations in PYTHON_COMPAT. The assumption
68
-# is that the ebuilds are intended to be used within multiple contexts
69
-# which can involve revisions of this eclass that support a different
70
-# set of Python implementations.
71
-
72
-# @FUNCTION: _python_verify_patterns
73
-# @USAGE: <pattern>...
74
-# @INTERNAL
75
-# @DESCRIPTION:
76
-# Verify whether the patterns passed to the eclass function are correct
77
-# (i.e. can match any valid implementation).  Dies on wrong pattern.
78
-_python_verify_patterns() {
79
-	debug-print-function ${FUNCNAME} "${@}"
80
-
81
-	local impl pattern
82
-	for pattern; do
83
-		[[ ${pattern} == -[23] ]] && continue
84
-
85
-		for impl in "${_PYTHON_ALL_IMPLS[@]}" "${_PYTHON_HISTORICAL_IMPLS[@]}"
86
-		do
87
-			[[ ${impl} == ${pattern/./_} ]] && continue 2
88
-		done
89
-
90
-		die "Invalid implementation pattern: ${pattern}"
91
-	done
92
-}
93
-
94
-# @FUNCTION: _python_set_impls
95
-# @INTERNAL
96
-# @DESCRIPTION:
97
-# Check PYTHON_COMPAT for well-formedness and validity, then set
98
-# two global variables:
99
-#
100
-# - _PYTHON_SUPPORTED_IMPLS containing valid implementations supported
101
-#   by the ebuild (PYTHON_COMPAT - dead implementations),
102
-#
103
-# - and _PYTHON_UNSUPPORTED_IMPLS containing valid implementations that
104
-#   are not supported by the ebuild.
105
-#
106
-# Implementations in both variables are ordered using the pre-defined
107
-# eclass implementation ordering.
108
-#
109
-# This function must be called once in global scope by an eclass
110
-# utilizing PYTHON_COMPAT.
111
-_python_set_impls() {
112
-	local i
113
-
114
-	if ! declare -p PYTHON_COMPAT &>/dev/null; then
115
-		die 'PYTHON_COMPAT not declared.'
116
-	fi
117
-	if [[ $(declare -p PYTHON_COMPAT) != "declare -a"* ]]; then
118
-		die 'PYTHON_COMPAT must be an array.'
119
-	fi
120
-	if [[ ! ${PYTHON_COMPAT_NO_STRICT} ]]; then
121
-		for i in "${PYTHON_COMPAT[@]}"; do
122
-			# check for incorrect implementations
123
-			# we're using pattern matching as an optimization
124
-			# please keep them in sync with _PYTHON_ALL_IMPLS
125
-			# and _PYTHON_HISTORICAL_IMPLS
126
-			case ${i} in
127
-				jython2_7|pypy|pypy1_[89]|pypy2_0|pypy3|python2_[5-7]|python3_[1-9])
128
-					;;
129
-				*)
130
-					if has "${i}" "${_PYTHON_ALL_IMPLS[@]}" \
131
-						"${_PYTHON_HISTORICAL_IMPLS[@]}"
132
-					then
133
-						die "Mis-synced patterns in _python_set_impls: missing ${i}"
134
-					else
135
-						die "Invalid implementation in PYTHON_COMPAT: ${i}"
136
-					fi
137
-			esac
138
-		done
139
-	fi
140
-
141
-	local supp=() unsupp=()
142
-
143
-	for i in "${_PYTHON_ALL_IMPLS[@]}"; do
144
-		if has "${i}" "${PYTHON_COMPAT[@]}"; then
145
-			supp+=( "${i}" )
146
-		else
147
-			unsupp+=( "${i}" )
148
-		fi
149
-	done
150
-
151
-	if [[ ! ${supp[@]} ]]; then
152
-		die "No supported implementation in PYTHON_COMPAT."
153
-	fi
154
-
155
-	if [[ ${_PYTHON_SUPPORTED_IMPLS[@]} ]]; then
156
-		# set once already, verify integrity
157
-		if [[ ${_PYTHON_SUPPORTED_IMPLS[@]} != ${supp[@]} ]]; then
158
-			eerror "Supported impls (PYTHON_COMPAT) changed between inherits!"
159
-			eerror "Before: ${_PYTHON_SUPPORTED_IMPLS[*]}"
160
-			eerror "Now   : ${supp[*]}"
161
-			die "_PYTHON_SUPPORTED_IMPLS integrity check failed"
162
-		fi
163
-		if [[ ${_PYTHON_UNSUPPORTED_IMPLS[@]} != ${unsupp[@]} ]]; then
164
-			eerror "Unsupported impls changed between inherits!"
165
-			eerror "Before: ${_PYTHON_UNSUPPORTED_IMPLS[*]}"
166
-			eerror "Now   : ${unsupp[*]}"
167
-			die "_PYTHON_UNSUPPORTED_IMPLS integrity check failed"
168
-		fi
169
-	else
170
-		_PYTHON_SUPPORTED_IMPLS=( "${supp[@]}" )
171
-		_PYTHON_UNSUPPORTED_IMPLS=( "${unsupp[@]}" )
172
-		readonly _PYTHON_SUPPORTED_IMPLS _PYTHON_UNSUPPORTED_IMPLS
173
-	fi
174
-}
175
-
176
-# @FUNCTION: _python_impl_matches
177
-# @USAGE: <impl> [<pattern>...]
178
-# @INTERNAL
179
-# @DESCRIPTION:
180
-# Check whether the specified <impl> matches at least one
181
-# of the patterns following it. Return 0 if it does, 1 otherwise.
182
-# Matches if no patterns are provided.
183
-#
184
-# <impl> can be in PYTHON_COMPAT or EPYTHON form. The patterns can be
185
-# either:
186
-# a) fnmatch-style patterns, e.g. 'python2*', 'pypy'...
187
-# b) '-2' to indicate all Python 2 variants (= !python_is_python3)
188
-# c) '-3' to indicate all Python 3 variants (= python_is_python3)
189
-_python_impl_matches() {
190
-	[[ ${#} -ge 1 ]] || die "${FUNCNAME}: takes at least 1 parameter"
191
-	[[ ${#} -eq 1 ]] && return 0
192
-
193
-	local impl=${1} pattern
194
-	shift
195
-
196
-	for pattern; do
197
-		if [[ ${pattern} == -2 ]]; then
198
-			python_is_python3 "${impl}" || return 0
199
-		elif [[ ${pattern} == -3 ]]; then
200
-			python_is_python3 "${impl}" && return 0
201
-			return
202
-		# unify value style to allow lax matching
203
-		elif [[ ${impl/./_} == ${pattern/./_} ]]; then
204
-			return 0
205
-		fi
206
-	done
207
-
208
-	return 1
209
-}
210
-
211
-# @ECLASS-VARIABLE: PYTHON
212
-# @DEFAULT_UNSET
213
-# @DESCRIPTION:
214
-# The absolute path to the current Python interpreter.
215
-#
216
-# This variable is set automatically in the following contexts:
217
-#
218
-# python-r1: Set in functions called by python_foreach_impl() or after
219
-# calling python_setup().
220
-#
221
-# python-single-r1: Set after calling python-single-r1_pkg_setup().
222
-#
223
-# distutils-r1: Set within any of the python sub-phase functions.
224
-#
225
-# Example value:
226
-# @CODE
227
-# /usr/bin/python2.7
228
-# @CODE
229
-
230
-# @ECLASS-VARIABLE: EPYTHON
231
-# @DEFAULT_UNSET
232
-# @DESCRIPTION:
233
-# The executable name of the current Python interpreter.
234
-#
235
-# This variable is set automatically in the following contexts:
236
-#
237
-# python-r1: Set in functions called by python_foreach_impl() or after
238
-# calling python_setup().
239
-#
240
-# python-single-r1: Set after calling python-single-r1_pkg_setup().
241
-#
242
-# distutils-r1: Set within any of the python sub-phase functions.
243
-#
244
-# Example value:
245
-# @CODE
246
-# python2.7
247
-# @CODE
248
-
249
-# @FUNCTION: python_export
250
-# @USAGE: [<impl>] <variables>...
251
-# @INTERNAL
252
-# @DESCRIPTION:
253
-# Backwards compatibility function.  The relevant API is now considered
254
-# private, please use python_get* instead.
255
-python_export() {
256
-	debug-print-function ${FUNCNAME} "${@}"
257
-
258
-	eqawarn "python_export() is part of private eclass API."
259
-	eqawarn "Please call python_get*() instead."
260
-
261
-	_python_export "${@}"
262
-}
263
-
264
-# @FUNCTION: _python_export
265
-# @USAGE: [<impl>] <variables>...
266
-# @INTERNAL
267
-# @DESCRIPTION:
268
-# Set and export the Python implementation-relevant variables passed
269
-# as parameters.
270
-#
271
-# The optional first parameter may specify the requested Python
272
-# implementation (either as PYTHON_TARGETS value, e.g. python2_7,
273
-# or an EPYTHON one, e.g. python2.7). If no implementation passed,
274
-# the current one will be obtained from ${EPYTHON}.
275
-#
276
-# The variables which can be exported are: PYTHON, EPYTHON,
277
-# PYTHON_SITEDIR. They are described more completely in the eclass
278
-# variable documentation.
279
-_python_export() {
280
-	debug-print-function ${FUNCNAME} "${@}"
281
-
282
-	local impl var
283
-
284
-	case "${1}" in
285
-		python*|jython*)
286
-			impl=${1/_/.}
287
-			shift
288
-			;;
289
-		pypy|pypy3)
290
-			impl=${1}
291
-			shift
292
-			;;
293
-		*)
294
-			impl=${EPYTHON}
295
-			if [[ -z ${impl} ]]; then
296
-				die "_python_export called without a python implementation and EPYTHON is unset"
297
-			fi
298
-			;;
299
-	esac
300
-	debug-print "${FUNCNAME}: implementation: ${impl}"
301
-
302
-	for var; do
303
-		case "${var}" in
304
-			EPYTHON)
305
-				export EPYTHON=${impl}
306
-				debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
307
-				;;
308
-			PYTHON)
309
-				export PYTHON=${EPREFIX}/usr/bin/${impl}
310
-				debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
311
-				;;
312
-			PYTHON_SITEDIR)
313
-				[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it"
314
-				# sysconfig can't be used because:
315
-				# 1) pypy doesn't give site-packages but stdlib
316
-				# 2) jython gives paths with wrong case
317
-				PYTHON_SITEDIR=$("${PYTHON}" -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_lib())') || die
318
-				export PYTHON_SITEDIR
319
-				debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
320
-				;;
321
-			PYTHON_INCLUDEDIR)
322
-				[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it"
323
-				PYTHON_INCLUDEDIR=$("${PYTHON}" -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_inc())') || die
324
-				export PYTHON_INCLUDEDIR
325
-				debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}"
326
-
327
-				# Jython gives a non-existing directory
328
-				if [[ ! -d ${PYTHON_INCLUDEDIR} ]]; then
329
-					die "${impl} does not install any header files!"
330
-				fi
331
-				;;
332
-			PYTHON_LIBPATH)
333
-				[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it"
334
-				PYTHON_LIBPATH=$("${PYTHON}" -c 'import os.path, sysconfig; print(os.path.join(sysconfig.get_config_var("LIBDIR"), sysconfig.get_config_var("LDLIBRARY")) if sysconfig.get_config_var("LDLIBRARY") else "")') || die
335
-				export PYTHON_LIBPATH
336
-				debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}"
337
-
338
-				if [[ ! ${PYTHON_LIBPATH} ]]; then
339
-					die "${impl} lacks a (usable) dynamic library"
340
-				fi
341
-				;;
342
-			PYTHON_CFLAGS)
343
-				local val
344
-
345
-				case "${impl}" in
346
-					python*)
347
-						# python-2.7, python-3.2, etc.
348
-						val=$($(tc-getPKG_CONFIG) --cflags ${impl/n/n-}) || die
349
-						;;
350
-					*)
351
-						die "${impl}: obtaining ${var} not supported"
352
-						;;
353
-				esac
354
-
355
-				export PYTHON_CFLAGS=${val}
356
-				debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}"
357
-				;;
358
-			PYTHON_LIBS)
359
-				local val
360
-
361
-				case "${impl}" in
362
-					python2*|python3.6|python3.7*)
363
-						# python* up to 3.7
364
-						val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}) || die
365
-						;;
366
-					python*)
367
-						# python3.8+
368
-						val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}-embed) || die
369
-						;;
370
-					*)
371
-						die "${impl}: obtaining ${var} not supported"
372
-						;;
373
-				esac
374
-
375
-				export PYTHON_LIBS=${val}
376
-				debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}"
377
-				;;
378
-			PYTHON_CONFIG)
379
-				local flags val
380
-
381
-				case "${impl}" in
382
-					python*)
383
-						[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it"
384
-						flags=$("${PYTHON}" -c 'import sysconfig; print(sysconfig.get_config_var("ABIFLAGS") or "")') || die
385
-						val=${PYTHON}${flags}-config
386
-						;;
387
-					*)
388
-						die "${impl}: obtaining ${var} not supported"
389
-						;;
390
-				esac
391
-
392
-				export PYTHON_CONFIG=${val}
393
-				debug-print "${FUNCNAME}: PYTHON_CONFIG = ${PYTHON_CONFIG}"
394
-				;;
395
-			PYTHON_PKG_DEP)
396
-				local d
397
-				case ${impl} in
398
-					python2.7)
399
-						PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7';;
400
-					python*)
401
-						PYTHON_PKG_DEP="dev-lang/python:${impl#python}";;
402
-					pypy)
403
-						PYTHON_PKG_DEP='>=dev-python/pypy-7.3.0:0=';;
404
-					pypy3)
405
-						PYTHON_PKG_DEP='>=dev-python/pypy3-7.3.0:0=';;
406
-					*)
407
-						die "Invalid implementation: ${impl}"
408
-				esac
409
-
410
-				# use-dep
411
-				if [[ ${PYTHON_REQ_USE} ]]; then
412
-					PYTHON_PKG_DEP+=[${PYTHON_REQ_USE}]
413
-				fi
414
-
415
-				export PYTHON_PKG_DEP
416
-				debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}"
417
-				;;
418
-			PYTHON_SCRIPTDIR)
419
-				local dir
420
-				export PYTHON_SCRIPTDIR=${EPREFIX}/usr/lib/python-exec/${impl}
421
-				debug-print "${FUNCNAME}: PYTHON_SCRIPTDIR = ${PYTHON_SCRIPTDIR}"
422
-				;;
423
-			*)
424
-				die "_python_export: unknown variable ${var}"
425
-		esac
426
-	done
427
-}
428
-
429
-# @FUNCTION: python_get_sitedir
430
-# @USAGE: [<impl>]
431
-# @DESCRIPTION:
432
-# Obtain and print the 'site-packages' path for the given
433
-# implementation. If no implementation is provided, ${EPYTHON} will
434
-# be used.
435
-python_get_sitedir() {
436
-	debug-print-function ${FUNCNAME} "${@}"
437
-
438
-	_python_export "${@}" PYTHON_SITEDIR
439
-	echo "${PYTHON_SITEDIR}"
440
-}
441
-
442
-# @FUNCTION: python_get_includedir
443
-# @USAGE: [<impl>]
444
-# @DESCRIPTION:
445
-# Obtain and print the include path for the given implementation. If no
446
-# implementation is provided, ${EPYTHON} will be used.
447
-python_get_includedir() {
448
-	debug-print-function ${FUNCNAME} "${@}"
449
-
450
-	_python_export "${@}" PYTHON_INCLUDEDIR
451
-	echo "${PYTHON_INCLUDEDIR}"
452
-}
453
-
454
-# @FUNCTION: python_get_library_path
455
-# @USAGE: [<impl>]
456
-# @DESCRIPTION:
457
-# Obtain and print the Python library path for the given implementation.
458
-# If no implementation is provided, ${EPYTHON} will be used.
459
-#
460
-# Please note that this function can be used with CPython only. Use
461
-# in another implementation will result in a fatal failure.
462
-python_get_library_path() {
463
-	debug-print-function ${FUNCNAME} "${@}"
464
-
465
-	_python_export "${@}" PYTHON_LIBPATH
466
-	echo "${PYTHON_LIBPATH}"
467
-}
468
-
469
-# @FUNCTION: python_get_CFLAGS
470
-# @USAGE: [<impl>]
471
-# @DESCRIPTION:
472
-# Obtain and print the compiler flags for building against Python,
473
-# for the given implementation. If no implementation is provided,
474
-# ${EPYTHON} will be used.
475
-#
476
-# Please note that this function can be used with CPython only.
477
-# It requires Python and pkg-config installed, and therefore proper
478
-# build-time dependencies need be added to the ebuild.
479
-python_get_CFLAGS() {
480
-	debug-print-function ${FUNCNAME} "${@}"
481
-
482
-	_python_export "${@}" PYTHON_CFLAGS
483
-	echo "${PYTHON_CFLAGS}"
484
-}
485
-
486
-# @FUNCTION: python_get_LIBS
487
-# @USAGE: [<impl>]
488
-# @DESCRIPTION:
489
-# Obtain and print the compiler flags for linking against Python,
490
-# for the given implementation. If no implementation is provided,
491
-# ${EPYTHON} will be used.
492
-#
493
-# Please note that this function can be used with CPython only.
494
-# It requires Python and pkg-config installed, and therefore proper
495
-# build-time dependencies need be added to the ebuild.
496
-python_get_LIBS() {
497
-	debug-print-function ${FUNCNAME} "${@}"
498
-
499
-	_python_export "${@}" PYTHON_LIBS
500
-	echo "${PYTHON_LIBS}"
501
-}
502
-
503
-# @FUNCTION: python_get_PYTHON_CONFIG
504
-# @USAGE: [<impl>]
505
-# @DESCRIPTION:
506
-# Obtain and print the PYTHON_CONFIG location for the given
507
-# implementation. If no implementation is provided, ${EPYTHON} will be
508
-# used.
509
-#
510
-# Please note that this function can be used with CPython only.
511
-# It requires Python installed, and therefore proper build-time
512
-# dependencies need be added to the ebuild.
513
-python_get_PYTHON_CONFIG() {
514
-	debug-print-function ${FUNCNAME} "${@}"
515
-
516
-	_python_export "${@}" PYTHON_CONFIG
517
-	echo "${PYTHON_CONFIG}"
518
-}
519
-
520
-# @FUNCTION: python_get_scriptdir
521
-# @USAGE: [<impl>]
522
-# @DESCRIPTION:
523
-# Obtain and print the script install path for the given
524
-# implementation. If no implementation is provided, ${EPYTHON} will
525
-# be used.
526
-python_get_scriptdir() {
527
-	debug-print-function ${FUNCNAME} "${@}"
528
-
529
-	_python_export "${@}" PYTHON_SCRIPTDIR
530
-	echo "${PYTHON_SCRIPTDIR}"
531
-}
532
-
533
-# @FUNCTION: _python_ln_rel
534
-# @USAGE: <from> <to>
535
-# @INTERNAL
536
-# @DESCRIPTION:
537
-# Create a relative symlink.
538
-_python_ln_rel() {
539
-	debug-print-function ${FUNCNAME} "${@}"
540
-
541
-	local target=${1}
542
-	local symname=${2}
543
-
544
-	local tgpath=${target%/*}/
545
-	local sympath=${symname%/*}/
546
-	local rel_target=
547
-
548
-	while [[ ${sympath} ]]; do
549
-		local tgseg= symseg=
550
-
551
-		while [[ ! ${tgseg} && ${tgpath} ]]; do
552
-			tgseg=${tgpath%%/*}
553
-			tgpath=${tgpath#${tgseg}/}
554
-		done
555
-
556
-		while [[ ! ${symseg} && ${sympath} ]]; do
557
-			symseg=${sympath%%/*}
558
-			sympath=${sympath#${symseg}/}
559
-		done
560
-
561
-		if [[ ${tgseg} != ${symseg} ]]; then
562
-			rel_target=../${rel_target}${tgseg:+${tgseg}/}
563
-		fi
564
-	done
565
-	rel_target+=${tgpath}${target##*/}
566
-
567
-	debug-print "${FUNCNAME}: ${symname} -> ${target}"
568
-	debug-print "${FUNCNAME}: rel_target = ${rel_target}"
569
-
570
-	ln -fs "${rel_target}" "${symname}"
571
-}
572
-
573
-# @FUNCTION: python_optimize
574
-# @USAGE: [<directory>...]
575
-# @DESCRIPTION:
576
-# Compile and optimize Python modules in specified directories (absolute
577
-# paths). If no directories are provided, the default system paths
578
-# are used (prepended with ${D}).
579
-python_optimize() {
580
-	debug-print-function ${FUNCNAME} "${@}"
581
-
582
-	if [[ ${EBUILD_PHASE} == pre* || ${EBUILD_PHASE} == post* ]]; then
583
-		eerror "The new Python eclasses expect the compiled Python files to"
584
-		eerror "be controlled by the Package Manager. For this reason,"
585
-		eerror "the python_optimize function can be used only during src_* phases"
586
-		eerror "(src_install most commonly) and not during pkg_* phases."
587
-		echo
588
-		die "python_optimize is not to be used in pre/post* phases"
589
-	fi
590
-
591
-	[[ ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'
592
-
593
-	local PYTHON=${PYTHON}
594
-	[[ ${PYTHON} ]] || _python_export PYTHON
595
-	[[ -x ${PYTHON} ]] || die "PYTHON (${PYTHON}) is not executable"
596
-
597
-	# default to sys.path
598
-	if [[ ${#} -eq 0 ]]; then
599
-		local f
600
-		while IFS= read -r -d '' f; do
601
-			# 1) accept only absolute paths
602
-			#    (i.e. skip '', '.' or anything like that)
603
-			# 2) skip paths which do not exist
604
-			#    (python2.6 complains about them verbosely)
605
-
606
-			if [[ ${f} == /* && -d ${D%/}${f} ]]; then
607
-				set -- "${D%/}${f}" "${@}"
608
-			fi
609
-		done < <("${PYTHON}" -c 'import sys; print("".join(x + "\0" for x in sys.path))' || die)
610
-
611
-		debug-print "${FUNCNAME}: using sys.path: ${*/%/;}"
612
-	fi
613
-
614
-	local d
615
-	for d; do
616
-		# make sure to get a nice path without //
617
-		local instpath=${d#${D%/}}
618
-		instpath=/${instpath##/}
619
-
620
-		case "${EPYTHON}" in
621
-			python2.7|python3.[34])
622
-				"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
623
-				"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
624
-				;;
625
-			python*|pypy3)
626
-				# both levels of optimization are separate since 3.5
627
-				"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
628
-				"${PYTHON}" -O -m compileall -q -f -d "${instpath}" "${d}"
629
-				"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
630
-				;;
631
-			*)
632
-				"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
633
-				;;
634
-		esac
635
-	done
636
-}
637
-
638
-# @FUNCTION: python_scriptinto
639
-# @USAGE: <new-path>
640
-# @DESCRIPTION:
641
-# Set the directory to which files passed to python_doexe(),
642
-# python_doscript(), python_newexe() and python_newscript()
643
-# are going to be installed. The new value needs to be relative
644
-# to the installation root (${ED}).
645
-#
646
-# If not set explicitly, the directory defaults to /usr/bin.
647
-#
648
-# Example:
649
-# @CODE
650
-# src_install() {
651
-#   python_scriptinto /usr/sbin
652
-#   python_foreach_impl python_doscript foo
653
-# }
654
-# @CODE
655
-python_scriptinto() {
656
-	debug-print-function ${FUNCNAME} "${@}"
657
-
658
-	python_scriptroot=${1}
659
-}
660
-
661
-# @FUNCTION: python_doexe
662
-# @USAGE: <files>...
663
-# @DESCRIPTION:
664
-# Install the given executables into the executable install directory,
665
-# for the current Python implementation (${EPYTHON}).
666
-#
667
-# The executable will be wrapped properly for the Python implementation,
668
-# though no shebang mangling will be performed.
669
-python_doexe() {
670
-	debug-print-function ${FUNCNAME} "${@}"
671
-
672
-	local f
673
-	for f; do
674
-		python_newexe "${f}" "${f##*/}"
675
-	done
676
-}
677
-
678
-# @FUNCTION: python_newexe
679
-# @USAGE: <path> <new-name>
680
-# @DESCRIPTION:
681
-# Install the given executable into the executable install directory,
682
-# for the current Python implementation (${EPYTHON}).
683
-#
684
-# The executable will be wrapped properly for the Python implementation,
685
-# though no shebang mangling will be performed. It will be renamed
686
-# to <new-name>.
687
-python_newexe() {
688
-	debug-print-function ${FUNCNAME} "${@}"
689
-
690
-	[[ ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'
691
-	[[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} <path> <new-name>"
692
-
693
-	local wrapd=${python_scriptroot:-/usr/bin}
694
-
695
-	local f=${1}
696
-	local newfn=${2}
697
-
698
-	local scriptdir=$(python_get_scriptdir)
699
-	local d=${scriptdir#${EPREFIX}}
700
-
701
-	(
702
-		dodir "${wrapd}"
703
-		exeopts -m 0755
704
-		exeinto "${d}"
705
-		newexe "${f}" "${newfn}" || return ${?}
706
-	)
707
-
708
-	# install the wrapper
709
-	_python_ln_rel "${ED%/}"/usr/lib/python-exec/python-exec2 \
710
-		"${ED%/}/${wrapd}/${newfn}" || die
711
-
712
-	# don't use this at home, just call python_doscript() instead
713
-	if [[ ${_PYTHON_REWRITE_SHEBANG} ]]; then
714
-		python_fix_shebang -q "${ED%/}/${d}/${newfn}"
715
-	fi
716
-}
717
-
718
-# @FUNCTION: python_doscript
719
-# @USAGE: <files>...
720
-# @DESCRIPTION:
721
-# Install the given scripts into the executable install directory,
722
-# for the current Python implementation (${EPYTHON}).
723
-#
724
-# All specified files must start with a 'python' shebang. The shebang
725
-# will be converted, and the files will be wrapped properly
726
-# for the Python implementation.
727
-#
728
-# Example:
729
-# @CODE
730
-# src_install() {
731
-#   python_foreach_impl python_doscript ${PN}
732
-# }
733
-# @CODE
734
-python_doscript() {
735
-	debug-print-function ${FUNCNAME} "${@}"
736
-
737
-	local _PYTHON_REWRITE_SHEBANG=1
738
-	python_doexe "${@}"
739
-}
740
-
741
-# @FUNCTION: python_newscript
742
-# @USAGE: <path> <new-name>
743
-# @DESCRIPTION:
744
-# Install the given script into the executable install directory
745
-# for the current Python implementation (${EPYTHON}), and name it
746
-# <new-name>.
747
-#
748
-# The file must start with a 'python' shebang. The shebang will be
749
-# converted, and the file will be wrapped properly for the Python
750
-# implementation. It will be renamed to <new-name>.
751
-#
752
-# Example:
753
-# @CODE
754
-# src_install() {
755
-#   python_foreach_impl python_newscript foo.py foo
756
-# }
757
-# @CODE
758
-python_newscript() {
759
-	debug-print-function ${FUNCNAME} "${@}"
760
-
761
-	local _PYTHON_REWRITE_SHEBANG=1
762
-	python_newexe "${@}"
763
-}
764
-
765
-# @FUNCTION: python_moduleinto
766
-# @USAGE: <new-path>
767
-# @DESCRIPTION:
768
-# Set the Python module install directory for python_domodule().
769
-# The <new-path> can either be an absolute target system path (in which
770
-# case it needs to start with a slash, and ${ED} will be prepended to
771
-# it) or relative to the implementation's site-packages directory
772
-# (then it must not start with a slash). The relative path can be
773
-# specified either using the Python package notation (separated by dots)
774
-# or the directory notation (using slashes).
775
-#
776
-# When not set explicitly, the modules are installed to the top
777
-# site-packages directory.
778
-#
779
-# In the relative case, the exact path is determined directly
780
-# by each python_doscript/python_newscript function. Therefore,
781
-# python_moduleinto can be safely called before establishing the Python
782
-# interpreter and/or a single call can be used to set the path correctly
783
-# for multiple implementations, as can be seen in the following example.
784
-#
785
-# Example:
786
-# @CODE
787
-# src_install() {
788
-#   python_moduleinto bar
789
-#   # installs ${PYTHON_SITEDIR}/bar/baz.py
790
-#   python_foreach_impl python_domodule baz.py
791
-# }
792
-# @CODE
793
-python_moduleinto() {
794
-	debug-print-function ${FUNCNAME} "${@}"
795
-
796
-	python_moduleroot=${1}
797
-}
798
-
799
-# @FUNCTION: python_domodule
800
-# @USAGE: <files>...
801
-# @DESCRIPTION:
802
-# Install the given modules (or packages) into the current Python module
803
-# installation directory. The list can mention both modules (files)
804
-# and packages (directories). All listed files will be installed
805
-# for all enabled implementations, and compiled afterwards.
806
-#
807
-# Example:
808
-# @CODE
809
-# src_install() {
810
-#   # (${PN} being a directory)
811
-#   python_foreach_impl python_domodule ${PN}
812
-# }
813
-# @CODE
814
-python_domodule() {
815
-	debug-print-function ${FUNCNAME} "${@}"
816
-
817
-	[[ ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'
818
-
819
-	local d
820
-	if [[ ${python_moduleroot} == /* ]]; then
821
-		# absolute path
822
-		d=${python_moduleroot}
823
-	else
824
-		# relative to site-packages
825
-		local sitedir=$(python_get_sitedir)
826
-		d=${sitedir#${EPREFIX}}/${python_moduleroot//.//}
827
-	fi
828
-
829
-	(
830
-		insopts -m 0644
831
-		insinto "${d}"
832
-		doins -r "${@}" || return ${?}
833
-	)
834
-
835
-	python_optimize "${ED%/}/${d}"
836
-}
837
-
838
-# @FUNCTION: python_doheader
839
-# @USAGE: <files>...
840
-# @DESCRIPTION:
841
-# Install the given headers into the implementation-specific include
842
-# directory. This function is unconditionally recursive, i.e. you can
843
-# pass directories instead of files.
844
-#
845
-# Example:
846
-# @CODE
847
-# src_install() {
848
-#   python_foreach_impl python_doheader foo.h bar.h
849
-# }
850
-# @CODE
851
-python_doheader() {
852
-	debug-print-function ${FUNCNAME} "${@}"
853
-
854
-	[[ ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'
855
-
856
-	local includedir=$(python_get_includedir)
857
-	local d=${includedir#${EPREFIX}}
858
-
859
-	(
860
-		insopts -m 0644
861
-		insinto "${d}"
862
-		doins -r "${@}" || return ${?}
863
-	)
864
-}
865
-
866
-# @FUNCTION: python_wrapper_setup
867
-# @USAGE: [<path> [<impl>]]
868
-# @DESCRIPTION:
869
-# Backwards compatibility function.  The relevant API is now considered
870
-# private, please use python_setup instead.
871
-python_wrapper_setup() {
872
-	debug-print-function ${FUNCNAME} "${@}"
873
-
874
-	eqawarn "python_wrapper_setup() is part of private eclass API."
875
-	eqawarn "Please call python_setup() instead."
876
-
877
-	_python_wrapper_setup "${@}"
878
-}
879
-
880
-# @FUNCTION: _python_wrapper_setup
881
-# @USAGE: [<path> [<impl>]]
882
-# @INTERNAL
883
-# @DESCRIPTION:
884
-# Create proper 'python' executable and pkg-config wrappers
885
-# (if available) in the directory named by <path>. Set up PATH
886
-# and PKG_CONFIG_PATH appropriately. <path> defaults to ${T}/${EPYTHON}.
887
-#
888
-# The wrappers will be created for implementation named by <impl>,
889
-# or for one named by ${EPYTHON} if no <impl> passed.
890
-#
891
-# If the named directory contains a python symlink already, it will
892
-# be assumed to contain proper wrappers already and only environment
893
-# setup will be done. If wrapper update is requested, the directory
894
-# shall be removed first.
895
-_python_wrapper_setup() {
896
-	debug-print-function ${FUNCNAME} "${@}"
897
-
898
-	local workdir=${1:-${T}/${EPYTHON}}
899
-	local impl=${2:-${EPYTHON}}
900
-
901
-	[[ ${workdir} ]] || die "${FUNCNAME}: no workdir specified."
902
-	[[ ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON specified."
903
-
904
-	if [[ ! -x ${workdir}/bin/python ]]; then
905
-		_python_check_dead_variables
906
-
907
-		mkdir -p "${workdir}"/{bin,pkgconfig} || die
908
-
909
-		# Clean up, in case we were supposed to do a cheap update.
910
-		rm -f "${workdir}"/bin/python{,2,3}{,-config} || die
911
-		rm -f "${workdir}"/bin/2to3 || die
912
-		rm -f "${workdir}"/pkgconfig/python{2,3}{,-embed}.pc || die
913
-
914
-		local EPYTHON PYTHON
915
-		_python_export "${impl}" EPYTHON PYTHON
916
-
917
-		local pyver pyother
918
-		if python_is_python3; then
919
-			pyver=3
920
-			pyother=2
921
-		else
922
-			pyver=2
923
-			pyother=3
924
-		fi
925
-
926
-		# Python interpreter
927
-		# note: we don't use symlinks because python likes to do some
928
-		# symlink reading magic that breaks stuff
929
-		# https://bugs.gentoo.org/show_bug.cgi?id=555752
930
-		cat > "${workdir}/bin/python" <<-_EOF_ || die
931
-			#!/bin/sh
932
-			exec "${PYTHON}" "\${@}"
933
-		_EOF_
934
-		cp "${workdir}/bin/python" "${workdir}/bin/python${pyver}" || die
935
-		chmod +x "${workdir}/bin/python" "${workdir}/bin/python${pyver}" || die
936
-
937
-		local nonsupp=( "python${pyother}" "python${pyother}-config" )
938
-
939
-		# CPython-specific
940
-		if [[ ${EPYTHON} == python* ]]; then
941
-			cat > "${workdir}/bin/python-config" <<-_EOF_ || die
942
-				#!/bin/sh
943
-				exec "${PYTHON}-config" "\${@}"
944
-			_EOF_
945
-			cp "${workdir}/bin/python-config" \
946
-				"${workdir}/bin/python${pyver}-config" || die
947
-			chmod +x "${workdir}/bin/python-config" \
948
-				"${workdir}/bin/python${pyver}-config" || die
949
-
950
-			# Python 2.6+.
951
-			ln -s "${PYTHON/python/2to3-}" "${workdir}"/bin/2to3 || die
952
-
953
-			# Python 2.7+.
954
-			ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}.pc \
955
-				"${workdir}"/pkgconfig/python${pyver}.pc || die
956
-
957
-			# Python 3.8+.
958
-			if [[ ${EPYTHON} != python[23].[67] ]]; then
959
-				ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}-embed.pc \
960
-					"${workdir}"/pkgconfig/python${pyver}-embed.pc || die
961
-			fi
962
-		else
963
-			nonsupp+=( 2to3 python-config "python${pyver}-config" )
964
-		fi
965
-
966
-		local x
967
-		for x in "${nonsupp[@]}"; do
968
-			cat >"${workdir}"/bin/${x} <<-_EOF_ || die
969
-				#!/bin/sh
970
-				echo "${ECLASS}: ${FUNCNAME}: ${x} is not supported by ${EPYTHON} (PYTHON_COMPAT)" >&2
971
-				exit 127
972
-			_EOF_
973
-			chmod +x "${workdir}"/bin/${x} || die
974
-		done
975
-	fi
976
-
977
-	# Now, set the environment.
978
-	# But note that ${workdir} may be shared with something else,
979
-	# and thus already on top of PATH.
980
-	if [[ ${PATH##:*} != ${workdir}/bin ]]; then
981
-		PATH=${workdir}/bin${PATH:+:${PATH}}
982
-	fi
983
-	if [[ ${PKG_CONFIG_PATH##:*} != ${workdir}/pkgconfig ]]; then
984
-		PKG_CONFIG_PATH=${workdir}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
985
-	fi
986
-	export PATH PKG_CONFIG_PATH
987
-}
988
-
989
-# @FUNCTION: python_is_python3
990
-# @USAGE: [<impl>]
991
-# @DESCRIPTION:
992
-# Check whether <impl> (or ${EPYTHON}) is a Python3k variant
993
-# (i.e. uses syntax and stdlib of Python 3.*).
994
-#
995
-# Returns 0 (true) if it is, 1 (false) otherwise.
996
-python_is_python3() {
997
-	local impl=${1:-${EPYTHON}}
998
-	[[ ${impl} ]] || die "python_is_python3: no impl nor EPYTHON"
999
-
1000
-	[[ ${impl} == python3* || ${impl} == pypy3 ]]
1001
-}
1002
-
1003
-# @FUNCTION: python_is_installed
1004
-# @USAGE: [<impl>]
1005
-# @DESCRIPTION:
1006
-# Check whether the interpreter for <impl> (or ${EPYTHON}) is installed.
1007
-# Uses has_version with a proper dependency string.
1008
-#
1009
-# Returns 0 (true) if it is, 1 (false) otherwise.
1010
-python_is_installed() {
1011
-	local impl=${1:-${EPYTHON}}
1012
-	[[ ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON"
1013
-	local hasv_args=()
1014
-
1015
-	case ${EAPI} in
1016
-		5|6)
1017
-			hasv_args+=( --host-root )
1018
-			;;
1019
-		*)
1020
-			hasv_args+=( -b )
1021
-			;;
1022
-	esac
1023
-
1024
-	local PYTHON_PKG_DEP
1025
-	_python_export "${impl}" PYTHON_PKG_DEP
1026
-	has_version "${hasv_args[@]}" "${PYTHON_PKG_DEP}"
1027
-}
1028
-
1029
-# @FUNCTION: python_fix_shebang
1030
-# @USAGE: [-f|--force] [-q|--quiet] <path>...
1031
-# @DESCRIPTION:
1032
-# Replace the shebang in Python scripts with the current Python
1033
-# implementation (EPYTHON). If a directory is passed, works recursively
1034
-# on all Python scripts.
1035
-#
1036
-# Only files having a 'python*' shebang will be modified. Files with
1037
-# other shebang will either be skipped when working recursively
1038
-# on a directory or treated as error when specified explicitly.
1039
-#
1040
-# Shebangs matching explicitly current Python version will be left
1041
-# unmodified. Shebangs requesting another Python version will be treated
1042
-# as fatal error, unless --force is given.
1043
-#
1044
-# --force causes the function to replace even shebangs that require
1045
-# incompatible Python version. --quiet causes the function not to list
1046
-# modified files verbosely.
1047
-python_fix_shebang() {
1048
-	debug-print-function ${FUNCNAME} "${@}"
1049
-
1050
-	[[ ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)"
1051
-
1052
-	local force quiet
1053
-	while [[ ${@} ]]; do
1054
-		case "${1}" in
1055
-			-f|--force) force=1; shift;;
1056
-			-q|--quiet) quiet=1; shift;;
1057
-			--) shift; break;;
1058
-			*) break;;
1059
-		esac
1060
-	done
1061
-
1062
-	[[ ${1} ]] || die "${FUNCNAME}: no paths given"
1063
-
1064
-	local path f
1065
-	for path; do
1066
-		local any_correct any_fixed is_recursive
1067
-
1068
-		[[ -d ${path} ]] && is_recursive=1
1069
-
1070
-		while IFS= read -r -d '' f; do
1071
-			local shebang i
1072
-			local error= from=
1073
-
1074
-			# note: we can't ||die here since read will fail if file
1075
-			# has no newline characters
1076
-			IFS= read -r shebang <"${f}"
1077
-
1078
-			# First, check if it's shebang at all...
1079
-			if [[ ${shebang} == '#!'* ]]; then
1080
-				local split_shebang=()
1081
-				read -r -a split_shebang <<<${shebang} || die
1082
-
1083
-				# Match left-to-right in a loop, to avoid matching random
1084
-				# repetitions like 'python2.7 python2'.
1085
-				for i in "${split_shebang[@]}"; do
1086
-					case "${i}" in
1087
-						*"${EPYTHON}")
1088
-							debug-print "${FUNCNAME}: in file ${f#${D%/}}"
1089
-							debug-print "${FUNCNAME}: shebang matches EPYTHON: ${shebang}"
1090
-
1091
-							# Nothing to do, move along.
1092
-							any_correct=1
1093
-							from=${EPYTHON}
1094
-							break
1095
-							;;
1096
-						*python|*python[23])
1097
-							debug-print "${FUNCNAME}: in file ${f#${D%/}}"
1098
-							debug-print "${FUNCNAME}: rewriting shebang: ${shebang}"
1099
-
1100
-							if [[ ${i} == *python2 ]]; then
1101
-								from=python2
1102
-								if [[ ! ${force} ]]; then
1103
-									python_is_python3 "${EPYTHON}" && error=1
1104
-								fi
1105
-							elif [[ ${i} == *python3 ]]; then
1106
-								from=python3
1107
-								if [[ ! ${force} ]]; then
1108
-									python_is_python3 "${EPYTHON}" || error=1
1109
-								fi
1110
-							else
1111
-								from=python
1112
-							fi
1113
-							break
1114
-							;;
1115
-						*python[23].[0123456789]|*pypy|*pypy3|*jython[23].[0123456789])
1116
-							# Explicit mismatch.
1117
-							if [[ ! ${force} ]]; then
1118
-								error=1
1119
-							else
1120
-								case "${i}" in
1121
-									*python[23].[0123456789])
1122
-										from="python[23].[0123456789]";;
1123
-									*pypy)
1124
-										from="pypy";;
1125
-									*pypy3)
1126
-										from="pypy3";;
1127
-									*jython[23].[0123456789])
1128
-										from="jython[23].[0123456789]";;
1129
-									*)
1130
-										die "${FUNCNAME}: internal error in 2nd pattern match";;
1131
-								esac
1132
-							fi
1133
-							break
1134
-							;;
1135
-					esac
1136
-				done
1137
-			fi
1138
-
1139
-			if [[ ! ${error} && ! ${from} ]]; then
1140
-				# Non-Python shebang. Allowed in recursive mode,
1141
-				# disallowed when specifying file explicitly.
1142
-				[[ ${is_recursive} ]] && continue
1143
-				error=1
1144
-			fi
1145
-
1146
-			if [[ ! ${quiet} ]]; then
1147
-				einfo "Fixing shebang in ${f#${D%/}}."
1148
-			fi
1149
-
1150
-			if [[ ! ${error} ]]; then
1151
-				# We either want to match ${from} followed by space
1152
-				# or at end-of-string.
1153
-				if [[ ${shebang} == *${from}" "* ]]; then
1154
-					sed -i -e "1s:${from} :${EPYTHON} :" "${f}" || die
1155
-				else
1156
-					sed -i -e "1s:${from}$:${EPYTHON}:" "${f}" || die
1157
-				fi
1158
-				any_fixed=1
1159
-			else
1160
-				eerror "The file has incompatible shebang:"
1161
-				eerror "  file: ${f#${D%/}}"
1162
-				eerror "  current shebang: ${shebang}"
1163
-				eerror "  requested impl: ${EPYTHON}"
1164
-				die "${FUNCNAME}: conversion of incompatible shebang requested"
1165
-			fi
1166
-		done < <(find -H "${path}" -type f -print0 || die)
1167
-
1168
-		if [[ ! ${any_fixed} ]]; then
1169
-			local cmd=eerror
1170
-			[[ ${EAPI} == 5 ]] && cmd=eqawarn
1171
-
1172
-			"${cmd}" "QA warning: ${FUNCNAME}, ${path#${D%/}} did not match any fixable files."
1173
-			if [[ ${any_correct} ]]; then
1174
-				"${cmd}" "All files have ${EPYTHON} shebang already."
1175
-			else
1176
-				"${cmd}" "There are no Python files in specified directory."
1177
-			fi
1178
-
1179
-			[[ ${cmd} == eerror ]] && die "${FUNCNAME} did not match any fixable files (QA warning fatal in EAPI ${EAPI})"
1180
-		fi
1181
-	done
1182
-}
1183
-
1184
-# @FUNCTION: _python_check_locale_sanity
1185
-# @USAGE: <locale>
1186
-# @RETURN: 0 if sane, 1 otherwise
1187
-# @INTERNAL
1188
-# @DESCRIPTION:
1189
-# Check whether the specified locale sanely maps between lowercase
1190
-# and uppercase ASCII characters.
1191
-_python_check_locale_sanity() {
1192
-	local -x LC_ALL=${1}
1193
-	local IFS=
1194
-
1195
-	local lc=( {a..z} )
1196
-	local uc=( {A..Z} )
1197
-	local input="${lc[*]}${uc[*]}"
1198
-
1199
-	local output=$(tr '[:lower:][:upper:]' '[:upper:][:lower:]' <<<"${input}")
1200
-	[[ ${output} == "${uc[*]}${lc[*]}" ]]
1201
-}
1202
-
1203
-# @FUNCTION: python_export_utf8_locale
1204
-# @RETURN: 0 on success, 1 on failure.
1205
-# @DESCRIPTION:
1206
-# Attempts to export a usable UTF-8 locale in the LC_CTYPE variable. Does
1207
-# nothing if LC_ALL is defined, or if the current locale uses a UTF-8 charmap.
1208
-# This may be used to work around the quirky open() behavior of python3.
1209
-python_export_utf8_locale() {
1210
-	debug-print-function ${FUNCNAME} "${@}"
1211
-
1212
-	# If the locale program isn't available, just return.
1213
-	type locale >/dev/null || return 0
1214
-
1215
-	if [[ $(locale charmap) != UTF-8 ]]; then
1216
-		# Try English first, then everything else.
1217
-		local lang locales="C.UTF-8 en_US.UTF-8 en_GB.UTF-8 $(locale -a)"
1218
-
1219
-		for lang in ${locales}; do
1220
-			if [[ $(LC_ALL=${lang} locale charmap 2>/dev/null) == UTF-8 ]]; then
1221
-				if _python_check_locale_sanity "${lang}"; then
1222
-					export LC_CTYPE=${lang}
1223
-					if [[ -n ${LC_ALL} ]]; then
1224
-						export LC_NUMERIC=${LC_ALL}
1225
-						export LC_TIME=${LC_ALL}
1226
-						export LC_COLLATE=${LC_ALL}
1227
-						export LC_MONETARY=${LC_ALL}
1228
-						export LC_MESSAGES=${LC_ALL}
1229
-						export LC_PAPER=${LC_ALL}
1230
-						export LC_NAME=${LC_ALL}
1231
-						export LC_ADDRESS=${LC_ALL}
1232
-						export LC_TELEPHONE=${LC_ALL}
1233
-						export LC_MEASUREMENT=${LC_ALL}
1234
-						export LC_IDENTIFICATION=${LC_ALL}
1235
-						export LC_ALL=
1236
-					fi
1237
-					return 0
1238
-				fi
1239
-			fi
1240
-		done
1241
-
1242
-		ewarn "Could not find a UTF-8 locale. This may trigger build failures in"
1243
-		ewarn "some python packages. Please ensure that a UTF-8 locale is listed in"
1244
-		ewarn "/etc/locale.gen and run locale-gen."
1245
-		return 1
1246
-	fi
1247
-
1248
-	return 0
1249
-}
1250
-
1251
-# @FUNCTION: build_sphinx
1252
-# @USAGE: <directory>
1253
-# @DESCRIPTION:
1254
-# Build HTML documentation using dev-python/sphinx in the specified
1255
-# <directory>.  Takes care of disabling Intersphinx and appending
1256
-# to HTML_DOCS.
1257
-#
1258
-# If <directory> is relative to the current directory, care needs
1259
-# to be taken to run einstalldocs from the same directory
1260
-# (usually ${S}).
1261
-build_sphinx() {
1262
-	debug-print-function ${FUNCNAME} "${@}"
1263
-	[[ ${#} -eq 1 ]] || die "${FUNCNAME} takes 1 arg: <directory>"
1264
-
1265
-	local dir=${1}
1266
-
1267
-	sed -i -e 's:^intersphinx_mapping:disabled_&:' \
1268
-		"${dir}"/conf.py || die
1269
-	# not all packages include the Makefile in pypi tarball
1270
-	sphinx-build -b html -d "${dir}"/_build/doctrees "${dir}" \
1271
-		"${dir}"/_build/html || die
1272
-
1273
-	HTML_DOCS+=( "${dir}/_build/html/." )
1274
-}
1275
-
1276
-# -- python.eclass functions --
1277
-
1278
-_python_check_dead_variables() {
1279
-	local v
1280
-
1281
-	for v in PYTHON_DEPEND PYTHON_USE_WITH{,_OR,_OPT} {RESTRICT,SUPPORT}_PYTHON_ABIS
1282
-	do
1283
-		if [[ ${!v} ]]; then
1284
-			die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Ebuild_head"
1285
-		fi
1286
-	done
1287
-
1288
-	for v in PYTHON_{CPPFLAGS,CFLAGS,CXXFLAGS,LDFLAGS}
1289
-	do
1290
-		if [[ ${!v} ]]; then
1291
-			die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#PYTHON_CFLAGS"
1292
-		fi
1293
-	done
1294
-
1295
-	for v in PYTHON_TESTS_RESTRICTED_ABIS PYTHON_EXPORT_PHASE_FUNCTIONS \
1296
-		PYTHON_VERSIONED_{SCRIPTS,EXECUTABLES} PYTHON_NONVERSIONED_EXECUTABLES
1297
-	do
1298
-		if [[ ${!v} ]]; then
1299
-			die "${v} is invalid for python-r1 suite"
1300
-		fi
1301
-	done
1302
-
1303
-	for v in DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES DISTUTILS_SETUP_FILES \
1304
-		DISTUTILS_GLOBAL_OPTIONS DISTUTILS_SRC_TEST PYTHON_MODNAME
1305
-	do
1306
-		if [[ ${!v} ]]; then
1307
-			die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#${v}"
1308
-		fi
1309
-	done
1310
-
1311
-	if [[ ${DISTUTILS_DISABLE_TEST_DEPENDENCY} ]]; then
1312
-		die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#DISTUTILS_SRC_TEST"
1313
-	fi
1314
-
1315
-	# python.eclass::progress
1316
-	for v in PYTHON_BDEPEND PYTHON_MULTIPLE_ABIS PYTHON_ABI_TYPE \
1317
-		PYTHON_RESTRICTED_ABIS PYTHON_TESTS_FAILURES_TOLERANT_ABIS \
1318
-		PYTHON_CFFI_MODULES_GENERATION_COMMANDS
1319
-	do
1320
-		if [[ ${!v} ]]; then
1321
-			die "${v} is invalid for python-r1 suite"
1322
-		fi
1323
-	done
1324
-}
1325
-
1326
-python_pkg_setup() {
1327
-	die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
1328
-}
1329
-
1330
-python_convert_shebangs() {
1331
-	die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_convert_shebangs"
1332
-}
1333
-
1334
-python_clean_py-compile_files() {
1335
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1336
-}
1337
-
1338
-python_clean_installation_image() {
1339
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1340
-}
1341
-
1342
-python_execute_function() {
1343
-	die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_execute_function"
1344
-}
1345
-
1346
-python_generate_wrapper_scripts() {
1347
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1348
-}
1349
-
1350
-python_merge_intermediate_installation_images() {
1351
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1352
-}
1353
-
1354
-python_set_active_version() {
1355
-	die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
1356
-}
1357
-
1358
-python_need_rebuild() {
1359
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1360
-}
1361
-
1362
-PYTHON() {
1363
-	die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#.24.28PYTHON.29.2C_.24.7BEPYTHON.7D"
1364
-}
1365
-
1366
-python_get_implementation() {
1367
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1368
-}
1369
-
1370
-python_get_implementational_package() {
1371
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1372
-}
1373
-
1374
-python_get_libdir() {
1375
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1376
-}
1377
-
1378
-python_get_library() {
1379
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1380
-}
1381
-
1382
-python_get_version() {
1383
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1384
-}
1385
-
1386
-python_get_implementation_and_version() {
1387
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1388
-}
1389
-
1390
-python_execute_nosetests() {
1391
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1392
-}
1393
-
1394
-python_execute_py.test() {
1395
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1396
-}
1397
-
1398
-python_execute_trial() {
1399
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1400
-}
1401
-
1402
-python_enable_pyc() {
1403
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1404
-}
1405
-
1406
-python_disable_pyc() {
1407
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1408
-}
1409
-
1410
-python_mod_optimize() {
1411
-	die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
1412
-}
1413
-
1414
-python_mod_cleanup() {
1415
-	die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
1416
-}
1417
-
1418
-# python.eclass::progress
1419
-
1420
-python_abi_depend() {
1421
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1422
-}
1423
-
1424
-python_install_executables() {
1425
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1426
-}
1427
-
1428
-python_get_extension_module_suffix() {
1429
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1430
-}
1431
-
1432
-python_byte-compile_modules() {
1433
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1434
-}
1435
-
1436
-python_clean_byte-compiled_modules() {
1437
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1438
-}
1439
-
1440
-python_generate_cffi_modules() {
1441
-	die "${FUNCNAME}() is invalid for python-r1 suite"
1442
-}
1443
-
1444
-_PYTHON_UTILS_R1=1
1445
-fi
1446 0