1 |
arfrever |
1.56 |
# Copyright 1999-2009 Gentoo Foundation |
2 |
vapier |
1.4 |
# Distributed under the terms of the GNU General Public License v2 |
3 |
arfrever |
1.64 |
# $Header: /var/cvsroot/gentoo-x86/eclass/distutils.eclass,v 1.63 2009/09/11 12:24:29 arfrever Exp $ |
4 |
dev-zero |
1.46 |
|
5 |
|
|
# @ECLASS: distutils.eclass |
6 |
|
|
# @MAINTAINER: |
7 |
hawking |
1.48 |
# <python@gentoo.org> |
8 |
vapier |
1.5 |
# |
9 |
dev-zero |
1.46 |
# Original author: Jon Nelson <jnelson@gentoo.org> |
10 |
|
|
# @BLURB: This eclass allows easier installation of distutils-based python modules |
11 |
|
|
# @DESCRIPTION: |
12 |
jnelson |
1.1 |
# The distutils eclass is designed to allow easier installation of |
13 |
swegener |
1.28 |
# distutils-based python modules and their incorporation into |
14 |
jnelson |
1.1 |
# the Gentoo Linux system. |
15 |
|
|
|
16 |
arfrever |
1.59 |
inherit eutils multilib python |
17 |
liquidx |
1.16 |
|
18 |
pva |
1.55 |
case "${EAPI:-0}" in |
19 |
|
|
0|1) |
20 |
|
|
EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_postinst pkg_postrm |
21 |
|
|
;; |
22 |
|
|
*) |
23 |
|
|
EXPORT_FUNCTIONS src_unpack src_prepare src_compile src_install pkg_postinst pkg_postrm |
24 |
|
|
;; |
25 |
|
|
esac |
26 |
|
|
|
27 |
arfrever |
1.62 |
if [[ -z "${DISTUTILS_DISABLE_PYTHON_DEPENDENCY}" ]]; then |
28 |
|
|
DEPEND="virtual/python" |
29 |
|
|
RDEPEND="${DEPEND}" |
30 |
|
|
fi |
31 |
arfrever |
1.60 |
python="python" |
32 |
|
|
|
33 |
arfrever |
1.61 |
# @ECLASS-VARIABLE: DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES |
34 |
|
|
# @DESCRIPTION: |
35 |
|
|
# Set this to use separate source directories for each enabled version of Python. |
36 |
|
|
|
37 |
arfrever |
1.60 |
# @ECLASS-VARIABLE: DISTUTILS_GLOBAL_OPTIONS |
38 |
dev-zero |
1.46 |
# @DESCRIPTION: |
39 |
arfrever |
1.60 |
# Global options passed to setup.py. |
40 |
jnelson |
1.1 |
|
41 |
dev-zero |
1.46 |
# @ECLASS-VARIABLE: DOCS |
42 |
|
|
# @DESCRIPTION: |
43 |
|
|
# Additional DOCS |
44 |
|
|
|
45 |
|
|
# @FUNCTION: distutils_src_unpack |
46 |
|
|
# @DESCRIPTION: |
47 |
|
|
# The distutils src_unpack function, this function is exported |
48 |
lucass |
1.41 |
distutils_src_unpack() { |
49 |
arfrever |
1.59 |
if [[ "${EBUILD_PHASE}" != "unpack" ]]; then |
50 |
|
|
die "${FUNCNAME}() can be used only in src_unpack() phase" |
51 |
|
|
fi |
52 |
|
|
|
53 |
lucass |
1.41 |
unpack ${A} |
54 |
|
|
cd "${S}" |
55 |
|
|
|
56 |
arfrever |
1.56 |
has "${EAPI:-0}" 0 1 && distutils_src_prepare |
57 |
pva |
1.55 |
} |
58 |
|
|
|
59 |
|
|
# @FUNCTION: distutils_src_prepare |
60 |
|
|
# @DESCRIPTION: |
61 |
|
|
# The distutils src_prepare function, this function is exported |
62 |
|
|
distutils_src_prepare() { |
63 |
arfrever |
1.59 |
if ! has "${EAPI:-0}" 0 1 && [[ "${EBUILD_PHASE}" != "prepare" ]]; then |
64 |
|
|
die "${FUNCNAME}() can be used only in src_prepare() phase" |
65 |
|
|
fi |
66 |
|
|
|
67 |
arfrever |
1.61 |
# Delete ez_setup files to prevent packages from installing |
68 |
|
|
# setuptools on their own. |
69 |
arfrever |
1.63 |
local ez_setup_existence |
70 |
|
|
[[ -d ez_setup || -f ez_setup.py ]] && ez_setup_existence="1" |
71 |
arfrever |
1.61 |
rm -fr ez_setup* |
72 |
arfrever |
1.63 |
if [[ "${ez_setup_existence}" == "1" ]]; then |
73 |
arfrever |
1.61 |
echo "def use_setuptools(*args, **kwargs): pass" > ez_setup.py |
74 |
|
|
fi |
75 |
|
|
|
76 |
|
|
if [[ -n "${DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES}" ]]; then |
77 |
|
|
python_copy_sources |
78 |
|
|
fi |
79 |
lucass |
1.41 |
} |
80 |
|
|
|
81 |
dev-zero |
1.46 |
# @FUNCTION: distutils_src_compile |
82 |
|
|
# @DESCRIPTION: |
83 |
|
|
# The distutils src_compile function, this function is exported |
84 |
jnelson |
1.1 |
distutils_src_compile() { |
85 |
arfrever |
1.59 |
if [[ "${EBUILD_PHASE}" != "compile" ]]; then |
86 |
|
|
die "${FUNCNAME}() can be used only in src_compile() phase" |
87 |
|
|
fi |
88 |
|
|
|
89 |
arfrever |
1.56 |
if ! has "${EAPI:-0}" 0 1 2 || [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then |
90 |
arfrever |
1.61 |
if [[ -n "${DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES}" ]]; then |
91 |
|
|
building() { |
92 |
|
|
echo "$(PYTHON)" setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" build "$@" |
93 |
|
|
"$(PYTHON)" setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" build "$@" |
94 |
|
|
} |
95 |
|
|
python_execute_function -s building "$@" |
96 |
|
|
else |
97 |
|
|
building() { |
98 |
|
|
echo "$(PYTHON)" setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" build -b "build-${PYTHON_ABI}" "$@" |
99 |
|
|
"$(PYTHON)" setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" build -b "build-${PYTHON_ABI}" "$@" |
100 |
|
|
} |
101 |
|
|
python_execute_function building "$@" |
102 |
|
|
fi |
103 |
arfrever |
1.56 |
else |
104 |
arfrever |
1.60 |
echo ${python} setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" build "$@" |
105 |
|
|
${python} setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" build "$@" || die "Building failed" |
106 |
arfrever |
1.56 |
fi |
107 |
jnelson |
1.1 |
} |
108 |
|
|
|
109 |
dev-zero |
1.46 |
# @FUNCTION: distutils_src_install |
110 |
|
|
# @DESCRIPTION: |
111 |
|
|
# The distutils src_install function, this function is exported. |
112 |
|
|
# It also installs the "standard docs" (CHANGELOG, Change*, KNOWN_BUGS, MAINTAINERS, |
113 |
|
|
# PKG-INFO, CONTRIBUTORS, TODO, NEWS, MANIFEST*, README*, and AUTHORS) |
114 |
jnelson |
1.1 |
distutils_src_install() { |
115 |
arfrever |
1.59 |
if [[ "${EBUILD_PHASE}" != "install" ]]; then |
116 |
|
|
die "${FUNCNAME}() can be used only in src_install() phase" |
117 |
|
|
fi |
118 |
|
|
|
119 |
arfrever |
1.58 |
local pylibdir |
120 |
liquidx |
1.33 |
|
121 |
hawking |
1.53 |
# Mark the package to be rebuilt after a python upgrade. |
122 |
|
|
python_need_rebuild |
123 |
|
|
|
124 |
arfrever |
1.56 |
if ! has "${EAPI:-0}" 0 1 2 || [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then |
125 |
arfrever |
1.61 |
if [[ -n "${DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES}" ]]; then |
126 |
|
|
installation() { |
127 |
|
|
# need this for python-2.5 + setuptools in cases where |
128 |
|
|
# a package uses distutils but does not install anything |
129 |
|
|
# in site-packages. (eg. dev-java/java-config-2.x) |
130 |
|
|
# - liquidx (14/08/2006) |
131 |
|
|
pylibdir="$("$(PYTHON)" -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')" |
132 |
|
|
[[ -n "${pylibdir}" ]] && dodir "${pylibdir}" |
133 |
|
|
|
134 |
|
|
echo "$(PYTHON)" setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" install --root="${D}" --no-compile "$@" |
135 |
|
|
"$(PYTHON)" setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" install --root="${D}" --no-compile "$@" |
136 |
|
|
} |
137 |
|
|
python_execute_function -s installation "$@" |
138 |
|
|
else |
139 |
|
|
installation() { |
140 |
|
|
# need this for python-2.5 + setuptools in cases where |
141 |
|
|
# a package uses distutils but does not install anything |
142 |
|
|
# in site-packages. (eg. dev-java/java-config-2.x) |
143 |
|
|
# - liquidx (14/08/2006) |
144 |
|
|
pylibdir="$("$(PYTHON)" -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')" |
145 |
|
|
[[ -n "${pylibdir}" ]] && dodir "${pylibdir}" |
146 |
|
|
|
147 |
|
|
echo "$(PYTHON)" setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" build -b "build-${PYTHON_ABI}" install --root="${D}" --no-compile "$@" |
148 |
|
|
"$(PYTHON)" setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" build -b "build-${PYTHON_ABI}" install --root="${D}" --no-compile "$@" |
149 |
|
|
} |
150 |
|
|
python_execute_function installation "$@" |
151 |
|
|
fi |
152 |
liquidx |
1.18 |
else |
153 |
arfrever |
1.56 |
# need this for python-2.5 + setuptools in cases where |
154 |
|
|
# a package uses distutils but does not install anything |
155 |
|
|
# in site-packages. (eg. dev-java/java-config-2.x) |
156 |
|
|
# - liquidx (14/08/2006) |
157 |
|
|
pylibdir="$(${python} -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')" |
158 |
|
|
[[ -n "${pylibdir}" ]] && dodir "${pylibdir}" |
159 |
|
|
|
160 |
arfrever |
1.60 |
echo ${python} setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" install --root="${D}" --no-compile "$@" |
161 |
|
|
${python} setup.py "${DISTUTILS_GLOBAL_OPTIONS[@]}" install --root="${D}" --no-compile "$@" || die "Installation failed" |
162 |
swegener |
1.28 |
fi |
163 |
lanius |
1.20 |
|
164 |
arfrever |
1.64 |
if [[ -e "${D}usr/local" ]]; then |
165 |
|
|
die "Illegal installation into /usr/local" |
166 |
|
|
fi |
167 |
|
|
|
168 |
arfrever |
1.62 |
local default_docs |
169 |
|
|
default_docs="AUTHORS Change* CHANGELOG CONTRIBUTORS KNOWN_BUGS MAINTAINERS MANIFEST* NEWS PKG-INFO README* TODO" |
170 |
lanius |
1.20 |
|
171 |
arfrever |
1.56 |
local doc |
172 |
arfrever |
1.62 |
for doc in ${default_docs}; do |
173 |
|
|
[[ -s "${doc}" ]] && dodoc "${doc}" |
174 |
lanius |
1.20 |
done |
175 |
|
|
|
176 |
arfrever |
1.62 |
if [[ -n "${DOCS}" ]]; then |
177 |
|
|
dodoc ${DOCS} || die "dodoc failed" |
178 |
|
|
fi |
179 |
jnelson |
1.1 |
} |
180 |
kutsuya |
1.6 |
|
181 |
arfrever |
1.63 |
# @FUNCTION: distutils_pkg_postinst |
182 |
dev-zero |
1.46 |
# @DESCRIPTION: |
183 |
arfrever |
1.63 |
# This is a generic optimization, you should override it if your package |
184 |
|
|
# installs modules in another directory. This function is exported. |
185 |
|
|
distutils_pkg_postinst() { |
186 |
|
|
if [[ "${EBUILD_PHASE}" != "postinst" ]]; then |
187 |
|
|
die "${FUNCNAME}() can be used only in pkg_postinst() phase" |
188 |
arfrever |
1.59 |
fi |
189 |
|
|
|
190 |
arfrever |
1.56 |
local pylibdir pymod |
191 |
hawking |
1.54 |
if [[ -z "${PYTHON_MODNAME}" ]]; then |
192 |
|
|
for pylibdir in "${ROOT}"/usr/$(get_libdir)/python*; do |
193 |
arfrever |
1.56 |
if [[ -d "${pylibdir}/site-packages/${PN}" ]]; then |
194 |
|
|
PYTHON_MODNAME="${PN}" |
195 |
hawking |
1.54 |
fi |
196 |
|
|
done |
197 |
hawking |
1.49 |
fi |
198 |
liquidx |
1.19 |
|
199 |
arfrever |
1.63 |
if ! has "${EAPI:-0}" 0 1 2 || [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then |
200 |
arfrever |
1.56 |
for pymod in ${PYTHON_MODNAME}; do |
201 |
arfrever |
1.63 |
python_mod_optimize "${pymod}" |
202 |
arfrever |
1.56 |
done |
203 |
|
|
else |
204 |
arfrever |
1.63 |
for pymod in ${PYTHON_MODNAME}; do |
205 |
|
|
python_mod_optimize "$(python_get_sitedir)/${pymod}" |
206 |
|
|
done |
207 |
swegener |
1.28 |
fi |
208 |
liquidx |
1.19 |
} |
209 |
|
|
|
210 |
arfrever |
1.63 |
# @FUNCTION: distutils_pkg_postrm |
211 |
dev-zero |
1.46 |
# @DESCRIPTION: |
212 |
arfrever |
1.63 |
# Generic pyc/pyo cleanup script. This function is exported. |
213 |
|
|
distutils_pkg_postrm() { |
214 |
|
|
if [[ "${EBUILD_PHASE}" != "postrm" ]]; then |
215 |
|
|
die "${FUNCNAME}() can be used only in pkg_postrm() phase" |
216 |
arfrever |
1.59 |
fi |
217 |
|
|
|
218 |
hawking |
1.54 |
local pylibdir pymod |
219 |
|
|
if [[ -z "${PYTHON_MODNAME}" ]]; then |
220 |
|
|
for pylibdir in "${ROOT}"/usr/$(get_libdir)/python*; do |
221 |
arfrever |
1.56 |
if [[ -d "${pylibdir}/site-packages/${PN}" ]]; then |
222 |
|
|
PYTHON_MODNAME="${PN}" |
223 |
hawking |
1.54 |
fi |
224 |
|
|
done |
225 |
hawking |
1.50 |
fi |
226 |
swegener |
1.28 |
|
227 |
arfrever |
1.63 |
if [[ -n "${PYTHON_MODNAME}" ]]; then |
228 |
arfrever |
1.56 |
for pymod in ${PYTHON_MODNAME}; do |
229 |
arfrever |
1.63 |
if ! has "${EAPI:-0}" 0 1 2 || [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then |
230 |
|
|
python_mod_cleanup "${pymod}" |
231 |
|
|
else |
232 |
|
|
for pylibdir in "${ROOT}"/usr/$(get_libdir)/python*; do |
233 |
|
|
if [[ -d "${pylibdir}/site-packages/${pymod}" ]]; then |
234 |
|
|
python_mod_cleanup "${pylibdir#${ROOT}}/site-packages/${pymod}" |
235 |
|
|
fi |
236 |
|
|
done |
237 |
|
|
fi |
238 |
arfrever |
1.56 |
done |
239 |
|
|
else |
240 |
arfrever |
1.63 |
python_mod_cleanup |
241 |
swegener |
1.28 |
fi |
242 |
liquidx |
1.19 |
} |
243 |
|
|
|
244 |
dev-zero |
1.46 |
# @FUNCTION: distutils_python_version |
245 |
|
|
# @DESCRIPTION: |
246 |
|
|
# Calls python_version, so that you can use something like |
247 |
|
|
# e.g. insinto ${ROOT}/usr/include/python${PYVER} |
248 |
liquidx |
1.13 |
distutils_python_version() { |
249 |
liquidx |
1.34 |
python_version |
250 |
liquidx |
1.12 |
} |
251 |
|
|
|
252 |
dev-zero |
1.46 |
# @FUNCTION: distutils_python_tkinter |
253 |
|
|
# @DESCRIPTION: |
254 |
|
|
# Checks for if tkinter support is compiled into python |
255 |
liquidx |
1.12 |
distutils_python_tkinter() { |
256 |
lucass |
1.40 |
python_tkinter_exists |
257 |
vapier |
1.8 |
} |