/[gentoo-x86]/eclass/python.eclass
Gentoo

Contents of /eclass/python.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations) (download)
Thu Oct 9 08:41:40 2003 UTC (10 years, 11 months ago) by liquidx
Branch: MAIN
Changes since 1.1: +5 -1 lines
adding hook to disable runtime compiling of pyc

1 # Copyright 1999-2003 Gentoo Technologies, Inc.
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /home/cvsroot/gentoo-x86/eclass/python.eclass,v 1.1 2003/10/08 14:07:38 liquidx Exp $
4 #
5 # Author: Alastair Tse <liquidx@gentoo.org>
6 #
7 # A Utility Eclass that should be inherited by anything that deals with
8 # Python or Python modules.
9 #
10 # - Features:
11 # python_version() - sets PYVER/PYVER_MAJOR/PYVER_MINOR
12 # python_tkinter_exists() - Checks for tkinter support in python
13 # python_mod_exists() - Checks if a python module exists
14 # python_mod_compile() - Compiles a .py file to a .pyc/.pyo
15 # python_mod_optimize() - Generates .pyc/.pyo precompiled scripts
16 # python_mod_cleanup() - Goes through /usr/lib/python* to remove
17 # orphaned *.pyc *.pyo
18 # python_makesym() - Makes /usr/bin/python symlinks
19
20 inherit alternatives
21
22 ECLASS="python"
23 INHERITED="$INHERITED $ECLASS"
24
25 python_disable_pyc() {
26 PYTHON_DONTCOMPILE=1
27 }
28
29 #
30 # name: python_version
31 # desc: run without arguments and it will export the version of python
32 # currently in use as $PYVER
33 #
34 python_version() {
35 local tmpstr
36 python=${python:-/usr/bin/python}
37 tmpstr="$(${python} -V 2>&1 )"
38 export PYVER_ALL="${tmpstr#Python }"
39
40 export PYVER_MAJOR=$(echo ${PYVER_ALL} | cut -d. -f1)
41 export PYVER_MINOR=$(echo ${PYVER_ALL} | cut -d. -f2)
42 export PYVER_MICRO=$(echo ${PYVER_ALL} | cut -d. -f3-)
43 export PYVER="${PYVER_MAJOR}.${PYVER_MINOR}"
44 }
45
46 #
47 # name: python_makesym
48 # desc: run without arguments, it will create the /usr/bin/python symlinks
49 # to the latest installed version
50 #
51 python_makesym() {
52 alternatives_auto_makesym "/usr/bin/python" "/usr/bin/python[0-9].[0-9]"
53 alternatives_auto_makesym "/usr/bin/python2" "/usr/bin/python[0-9].[0-9]"
54 }
55
56 #
57 # name: python_tkinter_exists
58 # desc: run without arguments, it will return TRUE(0) if python is compiled
59 # with tkinter or FALSE(1) if python is compiled without tkinter.
60 #
61 python_tkinter_exists() {
62 if ! python -c "import Tkinter" >/dev/null 2>&1; then
63 eerror "You need to recompile python with Tkinter support."
64 eerror "That means: USE='tcltk' emerge python"
65 echo
66 die "missing tkinter support with installed python"
67 fi
68 }
69
70 #
71 # name: python_mod_exists
72 # desc: run with the module name as an argument. it will check if a
73 # python module is installed and loadable. it will return
74 # TRUE(0) if the module exists, and FALSE(1) if the module does
75 # not exist.
76 # exam:
77 # if python_mod_exists gtk; then
78 # echo "gtk support enabled
79 # fi
80 #
81 python_mod_exists() {
82 if ! python -c "import $1" >/dev/null 2>&1; then
83 return 1
84 fi
85 return 0
86 }
87
88 #
89 # name: python_mod_compile
90 # desc: given a filename, it will pre-compile the module's .pyc and .pyo.
91 # should only be run in pkg_postinst()
92 # exam:
93 # python_mod_compile ${ROOT}usr/lib/python2.3/site-packages/pygoogle.py
94 #
95 python_mod_compile() {
96 if [ -f "$1" ]; then
97 python -c "import py_compile; py_compile.compile('${1}')" || \
98 ewarn "Failed to compile ${1}"
99 python -O -c "import py_compile; py_compile.compile('${1}')" || \
100 ewarn "Failed to compile ${1}"
101 else
102 ewarn "Unable to find ${1}"
103 fi
104 }
105
106 #
107 # name: python_mod_optimize
108 # desc: if no arguments supplied, it will recompile all modules under
109 # sys.path (eg. /usr/lib/python2.3, /usr/lib/python2.3/site-packages/ ..)
110 # no recursively
111 #
112 # if supplied with arguments, it will recompile all modules recursively
113 # in the supplied directory
114 # exam:
115 # python_mod_optimize ${ROOT}usr/share/codegen
116 #
117 python_mod_optimize() {
118 einfo "Byte Compiling Python modules .."
119 python_version
120 echo ${PYVER}
121 python ${ROOT}usr/lib/python${PYVER}/compileall.py $@
122 }
123
124 #
125 # name: python_mod_cleanup
126 # desc: run with optional arguments, where arguments are directories of
127 # python modules. if none given, it will look in /usr/lib/python[0-9].[0-9]
128 #
129 # it will recursively scan all compiled python modules in the directories
130 # and determine if they are orphaned (eg. their corresponding .py is missing.)
131 # if they are, then it will remove their corresponding .pyc and .pyo
132 #
133 python_mod_cleanup() {
134 local SEARCH_PATH
135
136 for path in $@; do
137 SEARCH_PATH="${SEARCH_PATH} ${ROOT}${dir}"
138 done
139
140 for path in ${ROOT}usr/lib/python*/site-packages; do
141 SEARCH_PATH="${SEARCH_PATH} ${path}"
142 done
143
144 for path in ${SEARCH_PATH}; do
145 einfo "Searching ${path} .."
146 for obj in $(find ${path} -name *.pyc); do
147 src_py="$(echo $obj | sed 's:c$::')"
148 if [ ! -f "${src_py}" ]; then
149 einfo "Purging ${src_py}[co]"
150 rm -f ${src_py}[co]
151 fi
152 done
153 done
154 }

  ViewVC Help
Powered by ViewVC 1.1.20