Line
Link Here
|
0 |
-- python.eclass |
0 |
++ python.eclass |
Lines 9-14
Link Here
|
9 |
# @DESCRIPTION: |
9 |
# @DESCRIPTION: |
10 |
# Some useful functions for dealing with Python. |
10 |
# Some useful functions for dealing with Python. |
11 |
|
11 |
|
|
|
12 |
# Prefix note: |
13 |
# have python_get* return WITHOUT EPREFIX, since they should be relative to |
14 |
# EROOT, and sometimes are used with helpers |
15 |
|
12 |
inherit multilib |
16 |
inherit multilib |
13 |
|
17 |
|
14 |
if ! has "${EAPI:-0}" 0 1 2; then |
18 |
if ! has "${EAPI:-0}" 0 1 2; then |
Lines 145-159
Link Here
|
145 |
fi |
150 |
fi |
146 |
|
151 |
|
147 |
# Ensure that /usr/bin/python and /usr/bin/python-config are valid. |
152 |
# Ensure that /usr/bin/python and /usr/bin/python-config are valid. |
148 |
if [[ "$(readlink /usr/bin/python)" != "python-wrapper" ]]; then |
153 |
if [[ "$(readlink "${EPREFIX}"/usr/bin/python)" != "python-wrapper" ]]; then |
149 |
eerror "'/usr/bin/python' is not valid symlink." |
154 |
eerror "'${EPREFIX}/usr/bin/python' is not valid symlink." |
150 |
eerror "Use \`eselect python set \${python_interpreter}\` to fix this problem." |
155 |
eerror "Use \`eselect python set \${python_interpreter}\` to fix this problem." |
151 |
die "'/usr/bin/python' is not valid symlink" |
156 |
die "'${EPREFIX}/usr/bin/python' is not valid symlink" |
152 |
fi |
157 |
fi |
153 |
if [[ "$(</usr/bin/python-config)" != *"Gentoo python-config wrapper script"* ]]; then |
158 |
if [[ "$(<"${EPREFIX}"/usr/bin/python-config)" != *"Gentoo python-config wrapper script"* ]]; then |
154 |
eerror "'/usr/bin/python-config' is not valid script" |
159 |
eerror "'${EPREFIX}/usr/bin/python-config' is not valid script" |
155 |
eerror "Use \`eselect python set \${python_interpreter}\` to fix this problem." |
160 |
eerror "Use \`eselect python set \${python_interpreter}\` to fix this problem." |
156 |
die "'/usr/bin/python-config' is not valid script" |
161 |
die "'${EPREFIX}/usr/bin/python-config' is not valid script" |
157 |
fi |
162 |
fi |
158 |
|
163 |
|
159 |
# USE_${ABI_TYPE^^} and RESTRICT_${ABI_TYPE^^}_ABIS variables hopefully will be included in EAPI >= 5. |
164 |
# USE_${ABI_TYPE^^} and RESTRICT_${ABI_TYPE^^}_ABIS variables hopefully will be included in EAPI >= 5. |
Lines 205-218
Link Here
|
205 |
else |
210 |
else |
206 |
local python_version python2_version= python3_version= support_python_major_version |
211 |
local python_version python2_version= python3_version= support_python_major_version |
207 |
|
212 |
|
208 |
python_version="$(/usr/bin/python -c 'from sys import version_info; print(".".join([str(x) for x in version_info[:2]]))')" |
213 |
python_version="$("${EPREFIX}"/usr/bin/python -c 'from sys import version_info; print(".".join([str(x) for x in version_info[:2]]))')" |
209 |
|
214 |
|
210 |
if has_version "=dev-lang/python-2*"; then |
215 |
if has_version "=dev-lang/python-2*"; then |
211 |
if [[ "$(readlink /usr/bin/python2)" != "python2."* ]]; then |
216 |
if [[ "$(readlink "${EPREFIX}"/usr/bin/python2)" != "python2."* ]]; then |
212 |
die "'/usr/bin/python2' is not valid symlink" |
217 |
die "'${EPREFIX}/usr/bin/python2' is not valid symlink" |
213 |
fi |
218 |
fi |
214 |
|
219 |
|
215 |
python2_version="$(/usr/bin/python2 -c 'from sys import version_info; print(".".join([str(x) for x in version_info[:2]]))')" |
220 |
python2_version="$("${EPREFIX}"/usr/bin/python2 -c 'from sys import version_info; print(".".join([str(x) for x in version_info[:2]]))')" |
216 |
|
221 |
|
217 |
for PYTHON_ABI in ${python2_supported_versions}; do |
222 |
for PYTHON_ABI in ${python2_supported_versions}; do |
218 |
support_python_major_version="1" |
223 |
support_python_major_version="1" |
Lines 235-245
Link Here
|
235 |
fi |
240 |
fi |
236 |
|
241 |
|
237 |
if has_version "=dev-lang/python-3*"; then |
242 |
if has_version "=dev-lang/python-3*"; then |
238 |
if [[ "$(readlink /usr/bin/python3)" != "python3."* ]]; then |
243 |
if [[ "$(readlink "${EPREFIX}"/usr/bin/python3)" != "python3."* ]]; then |
239 |
die "'/usr/bin/python3' is not valid symlink" |
244 |
die "'${EPREFIX}/usr/bin/python3' is not valid symlink" |
240 |
fi |
245 |
fi |
241 |
|
246 |
|
242 |
python3_version="$(/usr/bin/python3 -c 'from sys import version_info; print(".".join([str(x) for x in version_info[:2]]))')" |
247 |
python3_version="$("${EPREFIX}"/usr/bin/python3 -c 'from sys import version_info; print(".".join([str(x) for x in version_info[:2]]))')" |
243 |
|
248 |
|
244 |
for PYTHON_ABI in ${python3_supported_versions}; do |
249 |
for PYTHON_ABI in ${python3_supported_versions}; do |
245 |
support_python_major_version="1" |
250 |
support_python_major_version="1" |
Lines 262-273
Link Here
|
262 |
fi |
267 |
fi |
263 |
|
268 |
|
264 |
if [[ -n "${python2_version}" && "${python_version}" == "2."* && "${python_version}" != "${python2_version}" ]]; then |
269 |
if [[ -n "${python2_version}" && "${python_version}" == "2."* && "${python_version}" != "${python2_version}" ]]; then |
265 |
eerror "Python wrapper is configured incorrectly or /usr/bin/python2 symlink" |
270 |
eerror "Python wrapper is configured incorrectly or ${EPREFIX}/usr/bin/python2 symlink" |
266 |
eerror "is set incorrectly. Use \`eselect python\` to fix configuration." |
271 |
eerror "is set incorrectly. Use \`eselect python\` to fix configuration." |
267 |
die "Incorrect configuration of Python" |
272 |
die "Incorrect configuration of Python" |
268 |
fi |
273 |
fi |
269 |
if [[ -n "${python3_version}" && "${python_version}" == "3."* && "${python_version}" != "${python3_version}" ]]; then |
274 |
if [[ -n "${python3_version}" && "${python_version}" == "3."* && "${python_version}" != "${python3_version}" ]]; then |
270 |
eerror "Python wrapper is configured incorrectly or /usr/bin/python3 symlink" |
275 |
eerror "Python wrapper is configured incorrectly or ${EPREFIX}/usr/bin/python3 symlink" |
271 |
eerror "is set incorrectly. Use \`eselect python\` to fix configuration." |
276 |
eerror "is set incorrectly. Use \`eselect python\` to fix configuration." |
272 |
die "Incorrect configuration of Python" |
277 |
die "Incorrect configuration of Python" |
273 |
fi |
278 |
fi |
Lines 395-400
Link Here
|
395 |
elif [[ "${EBUILD_PHASE}" == "install" ]]; then |
400 |
elif [[ "${EBUILD_PHASE}" == "install" ]]; then |
396 |
python_default_function() { |
401 |
python_default_function() { |
397 |
emake DESTDIR="${D}" install |
402 |
emake DESTDIR="${D}" install |
|
|
403 |
# Remove .py[co] files from the installed image, |
404 |
# python_mod_optimize will (re)generate them. Removing |
405 |
# them here makes sure they don't end up in binpkgs, and |
406 |
# fixes Bad Marshalling Data in Prefix when the offset |
407 |
# was changed with a binpkg installation to match the |
408 |
# target offset. We aim for consistency: bug #301915 |
409 |
find "${D}" -name "*.py[co]" -delete |
398 |
} |
410 |
} |
399 |
else |
411 |
else |
400 |
die "${FUNCNAME}(): '--default-function' option cannot be used in this ebuild phase" |
412 |
die "${FUNCNAME}(): '--default-function' option cannot be used in this ebuild phase" |
Lines 681-687
Link Here
|
681 |
sys.exit(1) |
693 |
sys.exit(1) |
682 |
else: |
694 |
else: |
683 |
try: |
695 |
try: |
684 |
eselect_process = subprocess.Popen(["/usr/bin/eselect", "python", "show"${eselect_python_option:+, $(echo "\"")}${eselect_python_option}${eselect_python_option:+$(echo "\"")}], stdout=subprocess.PIPE) |
696 |
eselect_process = subprocess.Popen(["${EPREFIX}/usr/bin/eselect", "python", "show"${eselect_python_option:+, $(echo "\"")}${eselect_python_option}${eselect_python_option:+$(echo "\"")}], stdout=subprocess.PIPE) |
685 |
if eselect_process.wait() != 0: |
697 |
if eselect_process.wait() != 0: |
686 |
raise ValueError |
698 |
raise ValueError |
687 |
except (OSError, ValueError): |
699 |
except (OSError, ValueError): |
Lines 706-712
Link Here
|
706 |
else |
718 |
else |
707 |
cat << EOF >> "${file}" |
719 |
cat << EOF >> "${file}" |
708 |
try: |
720 |
try: |
709 |
eselect_process = subprocess.Popen(["/usr/bin/eselect", "python", "show"${eselect_python_option:+, $(echo "\"")}${eselect_python_option}${eselect_python_option:+$(echo "\"")}], stdout=subprocess.PIPE) |
721 |
eselect_process = subprocess.Popen(["${EPREFIX}/usr/bin/eselect", "python", "show"${eselect_python_option:+, $(echo "\"")}${eselect_python_option}${eselect_python_option:+$(echo "\"")}], stdout=subprocess.PIPE) |
710 |
if eselect_process.wait() != 0: |
722 |
if eselect_process.wait() != 0: |
711 |
raise ValueError |
723 |
raise ValueError |
712 |
except (OSError, ValueError): |
724 |
except (OSError, ValueError): |
Lines 742-748
Link Here
|
742 |
if [[ "$?" != "0" ]]; then |
754 |
if [[ "$?" != "0" ]]; then |
743 |
die "${FUNCNAME}(): Generation of '$1' failed" |
755 |
die "${FUNCNAME}(): Generation of '$1' failed" |
744 |
fi |
756 |
fi |
745 |
fperms +x "${file#${D%/}}" || die "fperms '${file}' failed" |
757 |
fperms +x "${file#${ED%/}}" || die "fperms '${file}' failed" |
746 |
done |
758 |
done |
747 |
} |
759 |
} |
748 |
|
760 |
|
Lines 860-866
Link Here
|
860 |
if [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then |
872 |
if [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then |
861 |
die "${FUNCNAME}(): '--active' option cannot be used in ebuilds of packages supporting installation for multiple versions of Python" |
873 |
die "${FUNCNAME}(): '--active' option cannot be used in ebuilds of packages supporting installation for multiple versions of Python" |
862 |
fi |
874 |
fi |
863 |
slot="$(/usr/bin/python -c 'from sys import version_info; print(".".join([str(x) for x in version_info[:2]]))')" |
875 |
slot="$("${EPREFIX}"/usr/bin/python -c 'from sys import version_info; print(".".join([str(x) for x in version_info[:2]]))')" |
864 |
elif [[ "${final_ABI}" == "1" ]]; then |
876 |
elif [[ "${final_ABI}" == "1" ]]; then |
865 |
if has "${EAPI:-0}" 0 1 2 3 4 && [[ -z "${SUPPORT_PYTHON_ABIS}" ]]; then |
877 |
if has "${EAPI:-0}" 0 1 2 3 4 && [[ -z "${SUPPORT_PYTHON_ABIS}" ]]; then |
866 |
die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple versions of Python" |
878 |
die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple versions of Python" |
Lines 910-916
Link Here
|
910 |
echo -n "${slot}" |
922 |
echo -n "${slot}" |
911 |
return |
923 |
return |
912 |
elif [[ "${absolute_path_output}" == "1" ]]; then |
924 |
elif [[ "${absolute_path_output}" == "1" ]]; then |
913 |
echo -n "/usr/bin/python${slot}" |
925 |
echo -n "${EPREFIX}/usr/bin/python${slot}" |
914 |
else |
926 |
else |
915 |
echo -n "python${slot}" |
927 |
echo -n "python${slot}" |
916 |
fi |
928 |
fi |
Lines 1123-1129
Link Here
|
1123 |
if ! python -c "import Tkinter" >/dev/null 2>&1; then |
1135 |
if ! python -c "import Tkinter" >/dev/null 2>&1; then |
1124 |
eerror "You need to recompile python with Tkinter support." |
1136 |
eerror "You need to recompile python with Tkinter support." |
1125 |
eerror "Try adding: 'dev-lang/python tk'" |
1137 |
eerror "Try adding: 'dev-lang/python tk'" |
1126 |
eerror "in to /etc/portage/package.use" |
1138 |
eerror "in to ${EPREFIX}/etc/portage/package.use" |
1127 |
echo |
1139 |
echo |
1128 |
die "missing tkinter support with installed python" |
1140 |
die "missing tkinter support with installed python" |
1129 |
fi |
1141 |
fi |
Lines 1172-1178
Link Here
|
1172 |
local dir file options=() other_dirs=() other_files=() previous_PYTHON_ABI="${PYTHON_ABI}" PYTHON_ABI return_code root site_packages_absolute_dirs=() site_packages_dirs=() site_packages_absolute_files=() site_packages_files=() |
1184 |
local dir file options=() other_dirs=() other_files=() previous_PYTHON_ABI="${PYTHON_ABI}" PYTHON_ABI return_code root site_packages_absolute_dirs=() site_packages_dirs=() site_packages_absolute_files=() site_packages_files=() |
1173 |
|
1185 |
|
1174 |
# Strip trailing slash from ROOT. |
1186 |
# Strip trailing slash from ROOT. |
1175 |
root="${ROOT%/}" |
1187 |
root="${EROOT%/}" |
1176 |
|
1188 |
|
1177 |
# Respect ROOT and options passed to compileall.py. |
1189 |
# Respect ROOT and options passed to compileall.py. |
1178 |
while (($#)); do |
1190 |
while (($#)); do |
Lines 1188-1194
Link Here
|
1188 |
ewarn "${FUNCNAME}: Ignoring option '$1'" |
1200 |
ewarn "${FUNCNAME}: Ignoring option '$1'" |
1189 |
;; |
1201 |
;; |
1190 |
*) |
1202 |
*) |
1191 |
if ! _python_implementation && [[ "$1" =~ ^/usr/lib(32|64)?/python[[:digit:]]+\.[[:digit:]]+ ]]; then |
1203 |
if ! _python_implementation && [[ "$1" =~ ^"${EPREFIX}"/usr/lib(32|64)?/python[[:digit:]]+\.[[:digit:]]+ ]]; then |
1192 |
die "${FUNCNAME} does not support absolute paths of directories/files in site-packages directories" |
1204 |
die "${FUNCNAME} does not support absolute paths of directories/files in site-packages directories" |
1193 |
elif [[ "$1" =~ ^/ ]]; then |
1205 |
elif [[ "$1" =~ ^/ ]]; then |
1194 |
if [[ -d "${root}/$1" ]]; then |
1206 |
if [[ -d "${root}/$1" ]]; then |
Lines 1270-1276
Link Here
|
1270 |
local myroot mydirs=() myfiles=() myopts=() return_code="0" |
1282 |
local myroot mydirs=() myfiles=() myopts=() return_code="0" |
1271 |
|
1283 |
|
1272 |
# strip trailing slash |
1284 |
# strip trailing slash |
1273 |
myroot="${ROOT%/}" |
1285 |
myroot="${EROOT%/}" |
1274 |
|
1286 |
|
1275 |
# respect ROOT and options passed to compileall.py |
1287 |
# respect ROOT and options passed to compileall.py |
1276 |
while (($#)); do |
1288 |
while (($#)); do |
Lines 1336-1347
Link Here
|
1336 |
[[ ${EBUILD_PHASE} != "postrm" ]] && die "${FUNCNAME} should only be run in pkg_postrm()" |
1348 |
[[ ${EBUILD_PHASE} != "postrm" ]] && die "${FUNCNAME} should only be run in pkg_postrm()" |
1337 |
|
1349 |
|
1338 |
# Strip trailing slash from ROOT. |
1350 |
# Strip trailing slash from ROOT. |
1339 |
root="${ROOT%/}" |
1351 |
root="${EROOT%/}" |
1340 |
|
1352 |
|
1341 |
if (($#)); then |
1353 |
if (($#)); then |
1342 |
if ! has "${EAPI:-0}" 0 1 2 || [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then |
1354 |
if ! has "${EAPI:-0}" 0 1 2 || [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then |
1343 |
while (($#)); do |
1355 |
while (($#)); do |
1344 |
if ! _python_implementation && [[ "$1" =~ ^/usr/lib(32|64)?/python[[:digit:]]+\.[[:digit:]]+ ]]; then |
1356 |
if ! _python_implementation && [[ "$1" =~ ^"${EPREFIX}"/usr/lib(32|64)?/python[[:digit:]]+\.[[:digit:]]+ ]]; then |
1345 |
die "${FUNCNAME} does not support absolute paths of directories/files in site-packages directories" |
1357 |
die "${FUNCNAME} does not support absolute paths of directories/files in site-packages directories" |
1346 |
elif [[ "$1" =~ ^/ ]]; then |
1358 |
elif [[ "$1" =~ ^/ ]]; then |
1347 |
SEARCH_PATH+=("${root}/${1#/}") |
1359 |
SEARCH_PATH+=("${root}/${1#/}") |
Lines 1411-1417
Link Here
|
1411 |
python_version() { |
1423 |
python_version() { |
1412 |
[[ -n "${PYVER}" ]] && return 0 |
1424 |
[[ -n "${PYVER}" ]] && return 0 |
1413 |
local tmpstr |
1425 |
local tmpstr |
1414 |
python="${python:-/usr/bin/python}" |
1426 |
python="${python:-${EPREFIX}/usr/bin/python}" |
1415 |
tmpstr="$(EPYTHON= ${python} -V 2>&1 )" |
1427 |
tmpstr="$(EPYTHON= ${python} -V 2>&1 )" |
1416 |
export PYVER_ALL="${tmpstr#Python }" |
1428 |
export PYVER_ALL="${tmpstr#Python }" |
1417 |
export PYVER_MAJOR="${PYVER_ALL:0:1}" |
1429 |
export PYVER_MAJOR="${PYVER_ALL:0:1}" |
Lines 1443-1449
Link Here
|
1443 |
die "${FUNCNAME} should only be run in pkg_postinst()" |
1455 |
die "${FUNCNAME} should only be run in pkg_postinst()" |
1444 |
|
1456 |
|
1445 |
# strip trailing slash |
1457 |
# strip trailing slash |
1446 |
myroot="${ROOT%/}" |
1458 |
myroot="${EROOT%/}" |
1447 |
|
1459 |
|
1448 |
# respect ROOT |
1460 |
# respect ROOT |
1449 |
for f in "$@"; do |
1461 |
for f in "$@"; do |