mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-21 14:02:57 +02:00
Unpack the waf scripts.
See http://lintian.debian.org/tags/source-contains-waf-binary.html for details.
This commit is contained in:
145
lib-src/lv2/lilv/waflib/extras/doxygen.py
Normal file
145
lib-src/lv2/lilv/waflib/extras/doxygen.py
Normal file
@@ -0,0 +1,145 @@
|
||||
#! /usr/bin/env python
|
||||
# encoding: utf-8
|
||||
# WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
|
||||
|
||||
from fnmatch import fnmatchcase
|
||||
import os,os.path,re,stat
|
||||
from waflib import Task,Utils,Node,Logs
|
||||
from waflib.TaskGen import feature
|
||||
DOXY_STR='${DOXYGEN} - '
|
||||
DOXY_FMTS='html latex man rft xml'.split()
|
||||
DOXY_FILE_PATTERNS='*.'+' *.'.join('''
|
||||
c cc cxx cpp c++ java ii ixx ipp i++ inl h hh hxx hpp h++ idl odl cs php php3
|
||||
inc m mm py f90c cc cxx cpp c++ java ii ixx ipp i++ inl h hh hxx
|
||||
'''.split())
|
||||
re_rl=re.compile('\\\\\r*\n',re.MULTILINE)
|
||||
re_nl=re.compile('\r*\n',re.M)
|
||||
def parse_doxy(txt):
|
||||
tbl={}
|
||||
txt=re_rl.sub('',txt)
|
||||
lines=re_nl.split(txt)
|
||||
for x in lines:
|
||||
x=x.strip()
|
||||
if not x or x.startswith('#')or x.find('=')<0:
|
||||
continue
|
||||
if x.find('+=')>=0:
|
||||
tmp=x.split('+=')
|
||||
key=tmp[0].strip()
|
||||
if key in tbl:
|
||||
tbl[key]+=' '+'+='.join(tmp[1:]).strip()
|
||||
else:
|
||||
tbl[key]='+='.join(tmp[1:]).strip()
|
||||
else:
|
||||
tmp=x.split('=')
|
||||
tbl[tmp[0].strip()]='='.join(tmp[1:]).strip()
|
||||
return tbl
|
||||
class doxygen(Task.Task):
|
||||
vars=['DOXYGEN','DOXYFLAGS']
|
||||
color='BLUE'
|
||||
def runnable_status(self):
|
||||
'''
|
||||
self.pars are populated in runnable_status - because this function is being
|
||||
run *before* both self.pars "consumers" - scan() and run()
|
||||
|
||||
set output_dir (node) for the output
|
||||
'''
|
||||
for x in self.run_after:
|
||||
if not x.hasrun:
|
||||
return Task.ASK_LATER
|
||||
if not getattr(self,'pars',None):
|
||||
txt=self.inputs[0].read()
|
||||
self.pars=parse_doxy(txt)
|
||||
if not self.pars.get('OUTPUT_DIRECTORY'):
|
||||
self.pars['OUTPUT_DIRECTORY']=self.inputs[0].parent.get_bld().abspath()
|
||||
self.doxy_inputs=getattr(self,'doxy_inputs',[])
|
||||
if not self.pars.get('INPUT'):
|
||||
self.doxy_inputs.append(self.inputs[0].parent)
|
||||
else:
|
||||
for i in self.pars.get('INPUT').split():
|
||||
if os.path.isabs(i):
|
||||
node=self.generator.bld.root.find_node(i)
|
||||
else:
|
||||
node=self.generator.path.find_node(i)
|
||||
if not node:
|
||||
self.generator.bld.fatal('Could not find the doxygen input %r'%i)
|
||||
self.doxy_inputs.append(node)
|
||||
if not getattr(self,'output_dir',None):
|
||||
bld=self.generator.bld
|
||||
self.output_dir=bld.root.find_dir(self.pars['OUTPUT_DIRECTORY'])
|
||||
if not self.output_dir:
|
||||
self.output_dir=bld.path.find_or_declare(self.pars['OUTPUT_DIRECTORY'])
|
||||
self.signature()
|
||||
return Task.Task.runnable_status(self)
|
||||
def scan(self):
|
||||
if self.pars.get('RECURSIVE')=='YES':
|
||||
Logs.warn("Doxygen RECURSIVE dependencies are not supported")
|
||||
exclude_patterns=self.pars.get('EXCLUDE_PATTERNS','').split()
|
||||
file_patterns=self.pars.get('FILE_PATTERNS','').split()
|
||||
if not file_patterns:
|
||||
file_patterns=DOXY_FILE_PATTERNS
|
||||
nodes=[]
|
||||
names=[]
|
||||
for node in self.doxy_inputs:
|
||||
if os.path.isdir(node.abspath()):
|
||||
for m in node.ant_glob(file_patterns):
|
||||
nodes.append(m)
|
||||
else:
|
||||
nodes.append(node)
|
||||
return(nodes,names)
|
||||
def run(self):
|
||||
dct=self.pars.copy()
|
||||
dct['INPUT']=' '.join([x.abspath()for x in self.doxy_inputs])
|
||||
code='\n'.join(['%s = %s'%(x,dct[x])for x in self.pars])
|
||||
code=code
|
||||
cmd=Utils.subst_vars(DOXY_STR,self.env)
|
||||
env=self.env.env or None
|
||||
proc=Utils.subprocess.Popen(cmd,shell=True,stdin=Utils.subprocess.PIPE,env=env,cwd=self.generator.bld.path.get_bld().abspath())
|
||||
proc.communicate(code)
|
||||
return proc.returncode
|
||||
def post_run(self):
|
||||
nodes=self.output_dir.ant_glob('**/*',quiet=True)
|
||||
for x in nodes:
|
||||
x.sig=Utils.h_file(x.abspath())
|
||||
self.outputs+=nodes
|
||||
return Task.Task.post_run(self)
|
||||
class tar(Task.Task):
|
||||
run_str='${TAR} ${TAROPTS} ${TGT} ${SRC}'
|
||||
color='RED'
|
||||
after=['doxygen']
|
||||
def runnable_status(self):
|
||||
for x in getattr(self,'input_tasks',[]):
|
||||
if not x.hasrun:
|
||||
return Task.ASK_LATER
|
||||
if not getattr(self,'tar_done_adding',None):
|
||||
self.tar_done_adding=True
|
||||
for x in getattr(self,'input_tasks',[]):
|
||||
self.set_inputs(x.outputs)
|
||||
if not self.inputs:
|
||||
return Task.SKIP_ME
|
||||
return Task.Task.runnable_status(self)
|
||||
def __str__(self):
|
||||
tgt_str=' '.join([a.nice_path(self.env)for a in self.outputs])
|
||||
return'%s: %s\n'%(self.__class__.__name__,tgt_str)
|
||||
@feature('doxygen')
|
||||
def process_doxy(self):
|
||||
if not getattr(self,'doxyfile',None):
|
||||
self.generator.bld.fatal('no doxyfile??')
|
||||
node=self.doxyfile
|
||||
if not isinstance(node,Node.Node):
|
||||
node=self.path.find_resource(node)
|
||||
if not node:
|
||||
raise ValueError('doxygen file not found')
|
||||
dsk=self.create_task('doxygen',node)
|
||||
if getattr(self,'doxy_tar',None):
|
||||
tsk=self.create_task('tar')
|
||||
tsk.input_tasks=[dsk]
|
||||
tsk.set_outputs(self.path.find_or_declare(self.doxy_tar))
|
||||
if self.doxy_tar.endswith('bz2'):
|
||||
tsk.env['TAROPTS']=['cjf']
|
||||
elif self.doxy_tar.endswith('gz'):
|
||||
tsk.env['TAROPTS']=['czf']
|
||||
else:
|
||||
tsk.env['TAROPTS']=['cf']
|
||||
def configure(conf):
|
||||
conf.find_program('doxygen',var='DOXYGEN')
|
||||
conf.find_program('tar',var='TAR')
|
Reference in New Issue
Block a user