10 from waflib
import Task
, Utils
, Errors
, Logs
11 from waflib
.TaskGen
import feature
13 VALADOC_STR
= '${VALADOC}'
15 class valadoc(Task
.Task
):
16 vars = ['VALADOC', 'VALADOCFLAGS']
18 after
= ['cprogram', 'cstlib', 'cshlib', 'cxxprogram', 'cxxstlib', 'cxxshlib']
19 quiet
= True # no outputs .. this is weird
21 def __init__(self
, *k
, **kw
):
22 Task
.Task
.__init
__(self
, *k
, **kw
)
25 self
.package_name
= ''
26 self
.package_version
= ''
33 self
.vala_defines
= []
34 self
.vala_target_glib
= None
35 self
.enable_non_null_experimental
= False
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):
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
))
75 def process_valadoc(self
):
77 Generate API documentation from Vala source code with 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',
89 path = bld.path.find_dir ('../src')
90 doc.files = path.ant_glob (incl='**/*.vala')
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()
97 Errors
.WafError('no output directory')
98 if getattr(self
, 'doclet', None):
99 task
.doclet
= self
.doclet
101 Errors
.WafError('no doclet directory')
102 if getattr(self
, 'package_name', None):
103 task
.package_name
= self
.package_name
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
:
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
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
139 conf
.find_program('valadoc', errmsg
='You must install valadoc <http://live.gnome.org/Valadoc> for generate the API documentation')