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

Contents of /eclass/python.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations) (download)
Thu Oct 9 08:57:20 2003 UTC (10 years, 9 months ago) by liquidx
Branch: MAIN
Changes since 1.2: +2 -2 lines
chage disable_pyc to export

1 liquidx 1.1 # Copyright 1999-2003 Gentoo Technologies, Inc.
2     # Distributed under the terms of the GNU General Public License v2
3 liquidx 1.3 # $Header: /home/cvsroot/gentoo-x86/eclass/python.eclass,v 1.2 2003/10/09 08:41:40 liquidx Exp $
4 liquidx 1.1 #
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 liquidx 1.2
25     python_disable_pyc() {
26 liquidx 1.3 export PYTHON_DONTCOMPILE=1
27 liquidx 1.2 }
28 liquidx 1.1
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