summaryrefslogtreecommitdiff
path: root/.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py
diff options
context:
space:
mode:
Diffstat (limited to '.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py')
-rw-r--r--.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/doxygen.py148
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')