1#! /usr/bin/env python 2# encoding: UTF-8 3# Nicolas Joseph 2009 4 5""" 6ported from waf 1.5: 7TODO: tabs vs spaces 8""" 9 10from waflib import Task, Utils, Errors, Logs 11from waflib.TaskGen import feature 12 13VALADOC_STR = '${VALADOC}' 14 15class valadoc(Task.Task): 16 vars = ['VALADOC', 'VALADOCFLAGS'] 17 color = 'BLUE' 18 after = ['cprogram', 'cstlib', 'cshlib', 'cxxprogram', 'cxxstlib', 'cxxshlib'] 19 quiet = True # no outputs .. this is weird 20 21 def __init__(self, *k, **kw): 22 Task.Task.__init__(self, *k, **kw) 23 self.output_dir = '' 24 self.doclet = '' 25 self.package_name = '' 26 self.package_version = '' 27 self.files = [] 28 self.vapi_dirs = [] 29 self.protected = True 30 self.private = False 31 self.inherit = False 32 self.deps = False 33 self.vala_defines = [] 34 self.vala_target_glib = None 35 self.enable_non_null_experimental = False 36 self.force = False 37 38 def run(self): 39 if not self.env['VALADOCFLAGS']: 40 self.env['VALADOCFLAGS'] = '' 41 cmd = [Utils.subst_vars(VALADOC_STR, self.env)] 42 cmd.append ('-o %s' % self.output_dir) 43 if getattr(self, 'doclet', None): 44 cmd.append ('--doclet %s' % self.doclet) 45 cmd.append ('--package-name %s' % self.package_name) 46 if getattr(self, 'package_version', None): 47 cmd.append ('--package-version %s' % self.package_version) 48 if getattr(self, 'packages', None): 49 for package in self.packages: 50 cmd.append ('--pkg %s' % package) 51 if getattr(self, 'vapi_dirs', None): 52 for vapi_dir in self.vapi_dirs: 53 cmd.append ('--vapidir %s' % vapi_dir) 54 if not getattr(self, 'protected', None): 55 cmd.append ('--no-protected') 56 if getattr(self, 'private', None): 57 cmd.append ('--private') 58 if getattr(self, 'inherit', None): 59 cmd.append ('--inherit') 60 if getattr(self, 'deps', None): 61 cmd.append ('--deps') 62 if getattr(self, 'vala_defines', None): 63 for define in self.vala_defines: 64 cmd.append ('--define %s' % define) 65 if getattr(self, 'vala_target_glib', None): 66 cmd.append ('--target-glib=%s' % self.vala_target_glib) 67 if getattr(self, 'enable_non_null_experimental', None): 68 cmd.append ('--enable-non-null-experimental') 69 if getattr(self, 'force', None): 70 cmd.append ('--force') 71 cmd.append (' '.join ([x.abspath() for x in self.files])) 72 return self.generator.bld.exec_command(' '.join(cmd)) 73 74@feature('valadoc') 75def process_valadoc(self): 76 """ 77 Generate API documentation from Vala source code with valadoc 78 79 doc = bld( 80 features = 'valadoc', 81 output_dir = '../doc/html', 82 package_name = 'vala-gtk-example', 83 package_version = '1.0.0', 84 packages = 'gtk+-2.0', 85 vapi_dirs = '../vapi', 86 force = True 87 ) 88 89 path = bld.path.find_dir ('../src') 90 doc.files = path.ant_glob (incl='**/*.vala') 91 """ 92 93 task = self.create_task('valadoc') 94 if getattr(self, 'output_dir', None): 95 task.output_dir = self.path.find_or_declare(self.output_dir).abspath() 96 else: 97 Errors.WafError('no output directory') 98 if getattr(self, 'doclet', None): 99 task.doclet = self.doclet 100 else: 101 Errors.WafError('no doclet directory') 102 if getattr(self, 'package_name', None): 103 task.package_name = self.package_name 104 else: 105 Errors.WafError('no package name') 106 if getattr(self, 'package_version', None): 107 task.package_version = self.package_version 108 if getattr(self, 'packages', None): 109 task.packages = Utils.to_list(self.packages) 110 if getattr(self, 'vapi_dirs', None): 111 vapi_dirs = Utils.to_list(self.vapi_dirs) 112 for vapi_dir in vapi_dirs: 113 try: 114 task.vapi_dirs.append(self.path.find_dir(vapi_dir).abspath()) 115 except AttributeError: 116 Logs.warn('Unable to locate Vala API directory: %r', vapi_dir) 117 if getattr(self, 'files', None): 118 task.files = self.files 119 else: 120 Errors.WafError('no input file') 121 if getattr(self, 'protected', None): 122 task.protected = self.protected 123 if getattr(self, 'private', None): 124 task.private = self.private 125 if getattr(self, 'inherit', None): 126 task.inherit = self.inherit 127 if getattr(self, 'deps', None): 128 task.deps = self.deps 129 if getattr(self, 'vala_defines', None): 130 task.vala_defines = Utils.to_list(self.vala_defines) 131 if getattr(self, 'vala_target_glib', None): 132 task.vala_target_glib = self.vala_target_glib 133 if getattr(self, 'enable_non_null_experimental', None): 134 task.enable_non_null_experimental = self.enable_non_null_experimental 135 if getattr(self, 'force', None): 136 task.force = self.force 137 138def configure(conf): 139 conf.find_program('valadoc', errmsg='You must install valadoc <http://live.gnome.org/Valadoc> for generate the API documentation') 140 141