mirror of https://gitlab.com/ita1024/waf.git
Create __pycache__ files - Issue 1403
This commit is contained in:
parent
e9ae4cc5b0
commit
f6aca05fdd
|
@ -191,7 +191,7 @@ class formatter(logging.Formatter):
|
||||||
elif rec.levelno >= logging.INFO:
|
elif rec.levelno >= logging.INFO:
|
||||||
c1 = colors.GREEN
|
c1 = colors.GREEN
|
||||||
c2 = getattr(rec, 'c2', colors.NORMAL)
|
c2 = getattr(rec, 'c2', colors.NORMAL)
|
||||||
msg = '%s%s%s' % (c1, msg, c2) # TODO OMG
|
msg = '%s%s%s' % (c1, msg, c2)
|
||||||
else:
|
else:
|
||||||
msg = msg.replace('\r', '\n')
|
msg = msg.replace('\r', '\n')
|
||||||
msg = re.sub(r'\x1B\[(K|.*?(m|h|l))', '', msg)
|
msg = re.sub(r'\x1B\[(K|.*?(m|h|l))', '', msg)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
# Thomas Nagy, 2007-2010 (ita)
|
# Thomas Nagy, 2007-2014 (ita)
|
||||||
# Gustavo Carneiro (gjc), 2007
|
# Gustavo Carneiro (gjc), 2007
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -55,65 +55,70 @@ Piece of Python code used in :py:func:`waflib.Tools.python.pytask` for byte-comp
|
||||||
|
|
||||||
DISTUTILS_IMP = ['from distutils.sysconfig import get_config_var, get_python_lib']
|
DISTUTILS_IMP = ['from distutils.sysconfig import get_config_var, get_python_lib']
|
||||||
|
|
||||||
|
@before_method('process_source')
|
||||||
@feature('py')
|
@feature('py')
|
||||||
def feature_py(self):
|
def feature_py(self):
|
||||||
"""
|
"""
|
||||||
Create tasks to byte-compile .py files and install them, if requested
|
Create tasks to byte-compile .py files and install them, if requested
|
||||||
"""
|
"""
|
||||||
|
self.install_path = getattr(self, 'install_path', '${PYTHONDIR}')
|
||||||
|
install_from = getattr(self, 'install_from', None)
|
||||||
|
if install_from and not isinstance(install_from, Node.Node):
|
||||||
|
install_from = self.path.find_dir(install_from)
|
||||||
|
self.install_from = install_from
|
||||||
|
|
||||||
install_path = getattr (self, 'install_path', '${PYTHONDIR}')
|
ver = self.env.PYTHON_VERSION
|
||||||
install_from = getattr (self, 'install_from', None)
|
if not ver:
|
||||||
if install_from and not isinstance (install_from, Node.Node):
|
self.bld.fatal('Installing python files requires PYTHON_VERSION, try conf.check_python_version')
|
||||||
install_from = self.path.find_dir (install_from)
|
|
||||||
|
|
||||||
inputs = []
|
if int(ver.replace('.', '')) > 31:
|
||||||
for x in Utils.to_list (self.source):
|
self.install_32 = True
|
||||||
if isinstance (x, Node.Node):
|
|
||||||
y = x
|
|
||||||
else:
|
|
||||||
y = self.path.find_resource (x)
|
|
||||||
inputs.append (y)
|
|
||||||
|
|
||||||
if install_path:
|
|
||||||
if install_from:
|
|
||||||
pyd = Utils.subst_vars ("%s/%s" % (install_path, y.path_from (install_from)), self.env)
|
|
||||||
else:
|
|
||||||
pyd = Utils.subst_vars ("%s/%s" % (install_path, y.path_from (self.path)), self.env)
|
|
||||||
else:
|
|
||||||
pyd = y.abspath ()
|
|
||||||
|
|
||||||
for ext in ("pyc", "pyo"):
|
|
||||||
if install_from:
|
|
||||||
pyobj = self.path.get_bld ().make_node (y
|
|
||||||
.change_ext (".%s" % ext)
|
|
||||||
.get_bld ()
|
|
||||||
.path_from (install_from.get_bld ()))
|
|
||||||
else:
|
|
||||||
pyobj = self.path.get_bld ().make_node (y
|
|
||||||
.change_ext (".%s" % ext)
|
|
||||||
.name)
|
|
||||||
pyobj.parent.mkdir ()
|
|
||||||
|
|
||||||
tsk = self.create_task (ext, y, pyobj)
|
|
||||||
tsk.pyd = pyd
|
|
||||||
|
|
||||||
if install_path:
|
|
||||||
self.bld.install_files (install_path, pyobj, cwd = self.path.get_bld (), relative_trick = True)
|
|
||||||
|
|
||||||
if install_path:
|
|
||||||
if install_from:
|
|
||||||
self.bld.install_files (install_path, inputs, cwd = install_from, relative_trick = True)
|
|
||||||
else:
|
|
||||||
self.bld.install_files (install_path, inputs)
|
|
||||||
|
|
||||||
@extension('.py')
|
@extension('.py')
|
||||||
def process_py(self, node):
|
def process_py(self, node):
|
||||||
"""
|
"""
|
||||||
Add signature of .py file, so it will be byte-compiled when necessary
|
Add signature of .py file, so it will be byte-compiled when necessary
|
||||||
"""
|
"""
|
||||||
node.sig = Utils.h_file (node.abspath())
|
assert(node.get_bld_sig())
|
||||||
|
assert(getattr(self, 'install_path')), 'add features="py"'
|
||||||
|
|
||||||
class pyc (Task.Task):
|
# where to install the python file
|
||||||
|
if self.install_path:
|
||||||
|
if self.install_from:
|
||||||
|
self.bld.install_files(self.install_path, [node], cwd=self.install_from, relative_trick=True)
|
||||||
|
else:
|
||||||
|
self.bld.install_files(self.install_path, [node])
|
||||||
|
|
||||||
|
lst = []
|
||||||
|
if self.env.PYC:
|
||||||
|
lst.append('pyc')
|
||||||
|
if self.env.PYO:
|
||||||
|
lst.append('pyo')
|
||||||
|
|
||||||
|
if self.install_path:
|
||||||
|
if self.install_from:
|
||||||
|
pyd = Utils.subst_vars("%s/%s" % (self.install_path, node.path_from(self.install_from)), self.env)
|
||||||
|
else:
|
||||||
|
pyd = Utils.subst_vars("%s/%s" % (self.install_path, node.path_from(self.path)), self.env)
|
||||||
|
else:
|
||||||
|
pyd = node.abspath()
|
||||||
|
|
||||||
|
for ext in lst:
|
||||||
|
if self.env.PYTAG:
|
||||||
|
# __pycache__ installation for python 3.2 - PEP 3147
|
||||||
|
name = node.name[:-3]
|
||||||
|
pyobj = node.parent.get_bld().make_node('__pycache__').make_node("%s.%s.%s" % (name, self.env.PYTAG, ext))
|
||||||
|
pyobj.parent.mkdir()
|
||||||
|
else:
|
||||||
|
pyobj = node.change_ext(".%s" % ext)
|
||||||
|
|
||||||
|
tsk = self.create_task(ext, node, pyobj)
|
||||||
|
tsk.pyd = pyd
|
||||||
|
|
||||||
|
if self.install_path:
|
||||||
|
self.bld.install_files(self.install_path, pyobj, cwd=self.path.get_bld(), relative_trick=True)
|
||||||
|
|
||||||
|
class pyc(Task.Task):
|
||||||
"""
|
"""
|
||||||
Byte-compiling python files
|
Byte-compiling python files
|
||||||
"""
|
"""
|
||||||
|
@ -123,14 +128,13 @@ class pyc (Task.Task):
|
||||||
ret = self.generator.bld.exec_command(cmd)
|
ret = self.generator.bld.exec_command(cmd)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
class pyo (Task.Task):
|
class pyo(Task.Task):
|
||||||
"""
|
"""
|
||||||
Byte-compiling python files
|
Byte-compiling python files
|
||||||
"""
|
"""
|
||||||
color = 'PINK'
|
color = 'PINK'
|
||||||
def run(self):
|
def run(self):
|
||||||
cmd = [Utils.subst_vars('${PYTHON}', self.env),
|
cmd = [Utils.subst_vars('${PYTHON}', self.env), Utils.subst_vars('${PYFLAGS_OPT}', self.env), '-c', INST, self.inputs[0].abspath(), self.outputs[0].abspath(), self.pyd]
|
||||||
Utils.subst_vars('${PYFLAGS_OPT}', self.env), '-c', INST, self.inputs[0].abspath(), self.outputs[0].abspath(), self.pyd]
|
|
||||||
ret = self.generator.bld.exec_command(cmd)
|
ret = self.generator.bld.exec_command(cmd)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -526,13 +530,17 @@ def configure(conf):
|
||||||
|
|
||||||
conf.find_program('python', var='PYTHON')
|
conf.find_program('python', var='PYTHON')
|
||||||
|
|
||||||
v['PYCMD'] = '"import sys, py_compile;py_compile.compile(sys.argv[1], sys.argv[2])"'
|
|
||||||
v['PYFLAGS'] = ''
|
v['PYFLAGS'] = ''
|
||||||
v['PYFLAGS_OPT'] = '-O'
|
v['PYFLAGS_OPT'] = '-O'
|
||||||
|
|
||||||
v['PYC'] = getattr(Options.options, 'pyc', 1)
|
v['PYC'] = getattr(Options.options, 'pyc', 1)
|
||||||
v['PYO'] = getattr(Options.options, 'pyo', 1)
|
v['PYO'] = getattr(Options.options, 'pyo', 1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
v.PYTAG = conf.cmd_and_log(conf.env.PYTHON + ['-c', "import imp;print(imp.get_tag())"]).strip()
|
||||||
|
except Errors.WafError:
|
||||||
|
pass
|
||||||
|
|
||||||
def options(opt):
|
def options(opt):
|
||||||
"""
|
"""
|
||||||
Add python-specific options
|
Add python-specific options
|
||||||
|
@ -548,3 +556,4 @@ def options(opt):
|
||||||
help='Installation path for python modules (py, platform-independent .py and .pyc files)')
|
help='Installation path for python modules (py, platform-independent .py and .pyc files)')
|
||||||
pyopt.add_option('--pythonarchdir', dest='pythonarchdir',
|
pyopt.add_option('--pythonarchdir', dest='pythonarchdir',
|
||||||
help='Installation path for python extension (pyext, platform-dependent .so or .dylib files)')
|
help='Installation path for python extension (pyext, platform-dependent .so or .dylib files)')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue