diff options
| author | yo mama <pepper@scannerjammer.com> | 2015-01-25 23:46:43 -0800 |
|---|---|---|
| committer | yo mama <pepper@scannerjammer.com> | 2015-01-25 23:46:43 -0800 |
| commit | e49ddd41e5549c1c6abab8005edd2e8b18ee0e09 (patch) | |
| tree | 017a97ce4f17c9a4422e80f56f4e638c629438d4 /.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py | |
working copy...first push
Diffstat (limited to '.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py')
| -rw-r--r-- | .waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py b/.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py new file mode 100644 index 0000000..7b7846e --- /dev/null +++ b/.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py @@ -0,0 +1,148 @@ +#! /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() + if getattr(self.generator,'pars',None): + for k,v in self.generator.pars.iteritems(): + self.pars[k]=v + 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') |
