1 /* doclet.c generated by valac, the Vala compiler
2  * generated from doclet.vala, do not modify */
3 
4 /* doclet.vala
5  *
6  * Copyright (C) 2010 Luca Bruno
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
21  *
22  * Author:
23  * 	Luca Bruno <lethalman88@gmail.com>
24  */
25 
26 #include <glib.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <valadoc.h>
30 #include <vala.h>
31 #include <glib-object.h>
32 #include <glib/gstdio.h>
33 #include <valagee.h>
34 
35 #define _g_free0(var) (var = (g_free (var), NULL))
36 #define _g_option_context_free0(var) ((var == NULL) ? NULL : (var = (g_option_context_free (var), NULL)))
37 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
38 
39 #define GTKDOC_TYPE_DIRECTOR (gtkdoc_director_get_type ())
40 #define GTKDOC_DIRECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTKDOC_TYPE_DIRECTOR, GtkdocDirector))
41 #define GTKDOC_DIRECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTKDOC_TYPE_DIRECTOR, GtkdocDirectorClass))
42 #define GTKDOC_IS_DIRECTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTKDOC_TYPE_DIRECTOR))
43 #define GTKDOC_IS_DIRECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTKDOC_TYPE_DIRECTOR))
44 #define GTKDOC_DIRECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTKDOC_TYPE_DIRECTOR, GtkdocDirectorClass))
45 
46 typedef struct _GtkdocDirector GtkdocDirector;
47 typedef struct _GtkdocDirectorClass GtkdocDirectorClass;
48 typedef struct _GtkdocDirectorPrivate GtkdocDirectorPrivate;
49 
50 #define GTKDOC_TYPE_GENERATOR (gtkdoc_generator_get_type ())
51 #define GTKDOC_GENERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTKDOC_TYPE_GENERATOR, GtkdocGenerator))
52 #define GTKDOC_GENERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTKDOC_TYPE_GENERATOR, GtkdocGeneratorClass))
53 #define GTKDOC_IS_GENERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTKDOC_TYPE_GENERATOR))
54 #define GTKDOC_IS_GENERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTKDOC_TYPE_GENERATOR))
55 #define GTKDOC_GENERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTKDOC_TYPE_GENERATOR, GtkdocGeneratorClass))
56 
57 typedef struct _GtkdocGenerator GtkdocGenerator;
58 typedef struct _GtkdocGeneratorClass GtkdocGeneratorClass;
59 enum  {
60 	GTKDOC_DIRECTOR_0_PROPERTY,
61 	GTKDOC_DIRECTOR_NUM_PROPERTIES
62 };
63 static GParamSpec* gtkdoc_director_properties[GTKDOC_DIRECTOR_NUM_PROPERTIES];
64 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
65 #define _valadoc_api_tree_unref0(var) ((var == NULL) ? NULL : (var = (valadoc_api_tree_unref (var), NULL)))
66 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
67 #define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))
68 #define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
69 #define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
70 typedef struct _GtkdocGeneratorPrivate GtkdocGeneratorPrivate;
71 
72 #define GTKDOC_DBUS_TYPE_INTERFACE (gtkdoc_dbus_interface_get_type ())
73 #define GTKDOC_DBUS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTKDOC_DBUS_TYPE_INTERFACE, GtkdocDBusInterface))
74 #define GTKDOC_DBUS_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTKDOC_DBUS_TYPE_INTERFACE, GtkdocDBusInterfaceClass))
75 #define GTKDOC_DBUS_IS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTKDOC_DBUS_TYPE_INTERFACE))
76 #define GTKDOC_DBUS_IS_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTKDOC_DBUS_TYPE_INTERFACE))
77 #define GTKDOC_DBUS_INTERFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTKDOC_DBUS_TYPE_INTERFACE, GtkdocDBusInterfaceClass))
78 
79 typedef struct _GtkdocDBusInterface GtkdocDBusInterface;
80 typedef struct _GtkdocDBusInterfaceClass GtkdocDBusInterfaceClass;
81 typedef struct _GtkdocDBusInterfacePrivate GtkdocDBusInterfacePrivate;
82 
83 #define GTKDOC_DBUS_TYPE_MEMBER (gtkdoc_dbus_member_get_type ())
84 #define GTKDOC_DBUS_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTKDOC_DBUS_TYPE_MEMBER, GtkdocDBusMember))
85 #define GTKDOC_DBUS_MEMBER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTKDOC_DBUS_TYPE_MEMBER, GtkdocDBusMemberClass))
86 #define GTKDOC_DBUS_IS_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTKDOC_DBUS_TYPE_MEMBER))
87 #define GTKDOC_DBUS_IS_MEMBER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTKDOC_DBUS_TYPE_MEMBER))
88 #define GTKDOC_DBUS_MEMBER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTKDOC_DBUS_TYPE_MEMBER, GtkdocDBusMemberClass))
89 
90 typedef struct _GtkdocDBusMember GtkdocDBusMember;
91 typedef struct _GtkdocDBusMemberClass GtkdocDBusMemberClass;
92 #define _gtkdoc_dbus_interface_unref0(var) ((var == NULL) ? NULL : (var = (gtkdoc_dbus_interface_unref (var), NULL)))
93 
94 struct _GtkdocDirector {
95 	GObject parent_instance;
96 	GtkdocDirectorPrivate * priv;
97 };
98 
99 struct _GtkdocDirectorClass {
100 	GObjectClass parent_class;
101 };
102 
103 struct _GtkdocDirectorPrivate {
104 	ValadocErrorReporter* reporter;
105 	ValadocSettings* settings;
106 	ValadocApiTree* tree;
107 	GtkdocGenerator* generator;
108 	gchar** vala_headers;
109 	gint vala_headers_length1;
110 	gint _vala_headers_size_;
111 	gchar** c_headers;
112 	gint c_headers_length1;
113 	gint _c_headers_size_;
114 };
115 
116 struct _GtkdocGenerator {
117 	ValadocApiVisitor parent_instance;
118 	ValaList* dbus_interfaces;
119 	GtkdocGeneratorPrivate * priv;
120 };
121 
122 struct _GtkdocGeneratorClass {
123 	ValadocApiVisitorClass parent_class;
124 };
125 
126 struct _GtkdocDBusInterface {
127 	GTypeInstance parent_instance;
128 	volatile int ref_count;
129 	gchar* package_name;
130 	gchar* name;
131 	gchar* purpose;
132 	gchar* description;
133 	ValaList* methods;
134 	ValaList* signals;
135 	GtkdocDBusInterfacePrivate * priv;
136 };
137 
138 struct _GtkdocDBusInterfaceClass {
139 	GTypeClass parent_class;
140 	void (*finalize) (GtkdocDBusInterface *self);
141 };
142 
143 extern gboolean gtkdoc_config_nohtml;
144 gboolean gtkdoc_config_nohtml = FALSE;
145 extern gchar** gtkdoc_config_library_filenames;
146 gchar** gtkdoc_config_library_filenames = NULL;
147 extern gchar** gtkdoc_config_ignore_headers;
148 gchar** gtkdoc_config_ignore_headers = NULL;
149 extern gchar** gtkdoc_config_source_files;
150 gchar** gtkdoc_config_source_files = NULL;
151 extern gchar* gtkdoc_config_deprecated_guards;
152 gchar* gtkdoc_config_deprecated_guards = NULL;
153 extern gchar* gtkdoc_config_ignore_decorators;
154 gchar* gtkdoc_config_ignore_decorators = NULL;
155 static gint GtkdocDirector_private_offset;
156 static gpointer gtkdoc_director_parent_class = NULL;
157 static ValadocDocletIface * gtkdoc_director_valadoc_doclet_parent_iface = NULL;
158 
159 gboolean gtkdoc_config_parse (gchar** rargs,
160                               gint rargs_length1,
161                               ValadocErrorReporter* reporter);
162 static void _vala_array_add3 (gchar** * array,
163                        gint* length,
164                        gint* size,
165                        gchar* value);
166 GType gtkdoc_director_get_type (void) G_GNUC_CONST;
167 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GtkdocDirector, g_object_unref)
168 GType gtkdoc_generator_get_type (void) G_GNUC_CONST;
169 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GtkdocGenerator, g_object_unref)
170 static gchar** gtkdoc_director_combine_string_arrays (gchar** a,
171                                                gint a_length1,
172                                                gchar** b,
173                                                gint b_length1,
174                                                gint* result_length1);
175 static gchar** _vala_array_dup3 (gchar** self,
176                           gint length);
177 static void _vala_array_add4 (gchar** * array,
178                        gint* length,
179                        gint* size,
180                        gchar* value);
181 static void gtkdoc_director_real_process (ValadocDoclet* base,
182                                    ValadocSettings* settings,
183                                    ValadocApiTree* tree,
184                                    ValadocErrorReporter* reporter);
185 static gboolean gtkdoc_director_prepare_files (GtkdocDirector* self,
186                                         gchar** files,
187                                         gint files_length1,
188                                         const gchar* comments_dir);
189 static gboolean gtkdoc_director_scan (GtkdocDirector* self,
190                                const gchar* output_dir,
191                                gchar** headers,
192                                gint headers_length1);
193 GtkdocGenerator* gtkdoc_generator_new (void);
194 GtkdocGenerator* gtkdoc_generator_construct (GType object_type);
195 gboolean gtkdoc_generator_execute (GtkdocGenerator* self,
196                                    ValadocSettings* settings,
197                                    ValadocApiTree* tree,
198                                    ValadocErrorReporter* reporter);
199 static gboolean gtkdoc_director_scangobj (GtkdocDirector* self);
200 static gboolean gtkdoc_director_mkdb (GtkdocDirector* self);
201 static gboolean gtkdoc_director_mkhtml (GtkdocDirector* self);
202 static void gtkdoc_director_prepare_c_file (GtkdocDirector* self,
203                                      const gchar* filename,
204                                      const gchar* comments_dir);
205 gboolean gtkdoc_is_generated_by_vala (const gchar* filename);
206 static void gtkdoc_director_prepare_h_file (GtkdocDirector* self,
207                                      const gchar* filename);
208 static gboolean _vala_string_array_contains (gchar* * stack,
209                                       gint stack_length,
210                                       const gchar* needle);
211 static void _vala_array_add5 (gchar** * array,
212                        gint* length,
213                        gint* size,
214                        gchar* value);
215 static void _vala_array_add6 (gchar** * array,
216                        gint* length,
217                        gint* size,
218                        gchar* value);
219 static void _vala_array_add7 (gchar** * array,
220                        gint* length,
221                        gint* size,
222                        gchar* value);
223 static void _vala_array_add8 (gchar** * array,
224                        gint* length,
225                        gint* size,
226                        gchar* value);
227 static void _vala_array_add9 (gchar** * array,
228                        gint* length,
229                        gint* size,
230                        gchar* value);
231 static void _vala_array_add10 (gchar** * array,
232                         gint* length,
233                         gint* size,
234                         gchar* value);
235 static void _vala_array_add11 (gchar** * array,
236                         gint* length,
237                         gint* size,
238                         gchar* value);
239 static void _vala_array_add12 (gchar** * array,
240                         gint* length,
241                         gint* size,
242                         gchar* value);
243 gboolean gtkdoc_package_exists (const gchar* package_name,
244                                 ValadocErrorReporter* reporter);
245 static void _vala_array_add13 (gchar** * array,
246                         gint* length,
247                         gint* size,
248                         gchar* value);
249 static void _vala_array_add14 (gchar** * array,
250                         gint* length,
251                         gint* size,
252                         gchar* value);
253 static void _vala_array_add15 (gchar** * array,
254                         gint* length,
255                         gint* size,
256                         gchar* value);
257 static void _vala_array_add16 (gchar** * array,
258                         gint* length,
259                         gint* size,
260                         gchar* value);
261 static void _vala_array_add17 (gchar** * array,
262                         gint* length,
263                         gint* size,
264                         gchar* value);
265 static void _vala_array_add18 (gchar** * array,
266                         gint* length,
267                         gint* size,
268                         gchar* value);
269 gpointer gtkdoc_dbus_interface_ref (gpointer instance);
270 void gtkdoc_dbus_interface_unref (gpointer instance);
271 GParamSpec* gtkdoc_dbus_param_spec_interface (const gchar* name,
272                                               const gchar* nick,
273                                               const gchar* blurb,
274                                               GType object_type,
275                                               GParamFlags flags);
276 void gtkdoc_dbus_value_set_interface (GValue* value,
277                                       gpointer v_object);
278 void gtkdoc_dbus_value_take_interface (GValue* value,
279                                        gpointer v_object);
280 gpointer gtkdoc_dbus_value_get_interface (const GValue* value);
281 GType gtkdoc_dbus_interface_get_type (void) G_GNUC_CONST;
282 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GtkdocDBusInterface, gtkdoc_dbus_interface_unref)
283 gchar* gtkdoc_to_docbook_id (const gchar* name);
284 gpointer gtkdoc_dbus_member_ref (gpointer instance);
285 void gtkdoc_dbus_member_unref (gpointer instance);
286 GParamSpec* gtkdoc_dbus_param_spec_member (const gchar* name,
287                                            const gchar* nick,
288                                            const gchar* blurb,
289                                            GType object_type,
290                                            GParamFlags flags);
291 void gtkdoc_dbus_value_set_member (GValue* value,
292                                    gpointer v_object);
293 void gtkdoc_dbus_value_take_member (GValue* value,
294                                     gpointer v_object);
295 gpointer gtkdoc_dbus_value_get_member (const GValue* value);
296 GType gtkdoc_dbus_member_get_type (void) G_GNUC_CONST;
297 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GtkdocDBusMember, gtkdoc_dbus_member_unref)
298 GtkdocDirector* gtkdoc_director_new (void);
299 GtkdocDirector* gtkdoc_director_construct (GType object_type);
300 static void gtkdoc_director_finalize (GObject * obj);
301 static GType gtkdoc_director_get_type_once (void);
302 GType register_plugin (ValadocModuleLoader* module_loader);
303 static void _vala_array_destroy (gpointer array,
304                           gint array_length,
305                           GDestroyNotify destroy_func);
306 static void _vala_array_free (gpointer array,
307                        gint array_length,
308                        GDestroyNotify destroy_func);
309 static gint _vala_array_length (gpointer array);
310 
311 const GOptionEntry GTKDOC_CONFIG_options[7] = {{"library", 'l', 0, G_OPTION_ARG_FILENAME_ARRAY, &gtkdoc_config_library_filenames, "Shared library path", "FILENAME"}, {"ignore-headers", 'x', 0, G_OPTION_ARG_FILENAME_ARRAY, &gtkdoc_config_ignore_headers, "A list of header files to not scan", "FILES"}, {"deprecated-guards", 'd', 0, G_OPTION_ARG_STRING, &gtkdoc_config_deprecated_guards, "A |-separated list of symbols used as deprecation guards", "GUARDS"}, {"ignore-decorators", (gchar) 0, 0, G_OPTION_ARG_STRING, &gtkdoc_config_ignore_decorators, "A |-separated list of addition decorators in declarations that should " \
312 "be ignored", "DECS"}, {"no-html", (gchar) 0, 0, G_OPTION_ARG_NONE, &gtkdoc_config_nohtml, "Disable HTML generation", NULL}, {G_OPTION_REMAINING, (gchar) 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &gtkdoc_config_source_files, NULL, "FILE..."}, {NULL}};
313 
314 static void
_vala_array_add3(gchar *** array,gint * length,gint * size,gchar * value)315 _vala_array_add3 (gchar** * array,
316                   gint* length,
317                   gint* size,
318                   gchar* value)
319 {
320 	if ((*length) == (*size)) {
321 		*size = (*size) ? (2 * (*size)) : 4;
322 		*array = g_renew (gchar*, *array, (*size) + 1);
323 	}
324 	(*array)[(*length)++] = value;
325 	(*array)[*length] = NULL;
326 }
327 
328 gboolean
gtkdoc_config_parse(gchar ** rargs,gint rargs_length1,ValadocErrorReporter * reporter)329 gtkdoc_config_parse (gchar** rargs,
330                      gint rargs_length1,
331                      ValadocErrorReporter* reporter)
332 {
333 	gchar** args = NULL;
334 	gchar* _tmp0_;
335 	gchar** _tmp1_;
336 	gint args_length1;
337 	gint _args_size_;
338 	GError* _inner_error0_ = NULL;
339 	gboolean result = FALSE;
340 	g_return_val_if_fail (reporter != NULL, FALSE);
341 	_tmp0_ = g_strdup ("gtkdoc");
342 	_tmp1_ = g_new0 (gchar*, 1 + 1);
343 	_tmp1_[0] = _tmp0_;
344 	args = _tmp1_;
345 	args_length1 = 1;
346 	_args_size_ = args_length1;
347 	{
348 		gchar** arg_collection = NULL;
349 		gint arg_collection_length1 = 0;
350 		gint _arg_collection_size_ = 0;
351 		gint arg_it = 0;
352 		arg_collection = rargs;
353 		arg_collection_length1 = rargs_length1;
354 		for (arg_it = 0; arg_it < arg_collection_length1; arg_it = arg_it + 1) {
355 			gchar* _tmp2_;
356 			gchar* arg = NULL;
357 			_tmp2_ = g_strdup (arg_collection[arg_it]);
358 			arg = _tmp2_;
359 			{
360 				const gchar* _tmp3_;
361 				gchar* _tmp4_;
362 				_tmp3_ = arg;
363 				_tmp4_ = g_strdup (_tmp3_);
364 				_vala_array_add3 (&args, &args_length1, &_args_size_, _tmp4_);
365 				_g_free0 (arg);
366 			}
367 		}
368 	}
369 	{
370 		GOptionContext* opt_context = NULL;
371 		GOptionContext* _tmp5_;
372 		GOptionContext* _tmp6_;
373 		GOptionContext* _tmp7_;
374 		gchar** gtkdoc_args = NULL;
375 		gchar** _tmp8_;
376 		gint _tmp8__length1;
377 		gint gtkdoc_args_length1;
378 		gint _gtkdoc_args_size_;
379 		GOptionContext* _tmp9_;
380 		_tmp5_ = g_option_context_new ("- Vala GTK-Doc");
381 		opt_context = _tmp5_;
382 		_tmp6_ = opt_context;
383 		g_option_context_set_help_enabled (_tmp6_, TRUE);
384 		_tmp7_ = opt_context;
385 		g_option_context_add_main_entries (_tmp7_, GTKDOC_CONFIG_options, NULL);
386 		_tmp8_ = args;
387 		_tmp8__length1 = args_length1;
388 		gtkdoc_args = _tmp8_;
389 		gtkdoc_args_length1 = _tmp8__length1;
390 		_gtkdoc_args_size_ = gtkdoc_args_length1;
391 		_tmp9_ = opt_context;
392 		g_option_context_parse (_tmp9_, (gint*) (&gtkdoc_args_length1), &gtkdoc_args, &_inner_error0_);
393 		_gtkdoc_args_size_ = gtkdoc_args_length1;
394 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
395 			gboolean _tmp10_ = FALSE;
396 			_g_option_context_free0 (opt_context);
397 			if (_inner_error0_->domain == G_OPTION_ERROR) {
398 				goto __catch0_g_option_error;
399 			}
400 			args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
401 			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
402 			g_clear_error (&_inner_error0_);
403 			return _tmp10_;
404 		}
405 		_g_option_context_free0 (opt_context);
406 	}
407 	goto __finally0;
408 	__catch0_g_option_error:
409 	{
410 		GError* e = NULL;
411 		GError* _tmp11_;
412 		const gchar* _tmp12_;
413 		e = _inner_error0_;
414 		_inner_error0_ = NULL;
415 		_tmp11_ = e;
416 		_tmp12_ = _tmp11_->message;
417 		valadoc_error_reporter_simple_error (reporter, "GtkDoc", "%s\n" \
418 "Run '-X --help' to see a full list of available command line options.", _tmp12_);
419 		result = FALSE;
420 		_g_error_free0 (e);
421 		args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
422 		return result;
423 	}
424 	__finally0:
425 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
426 		gboolean _tmp13_ = FALSE;
427 		args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
428 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
429 		g_clear_error (&_inner_error0_);
430 		return _tmp13_;
431 	}
432 	{
433 		gint i = 0;
434 		i = 0;
435 		{
436 			gboolean _tmp14_ = FALSE;
437 			_tmp14_ = TRUE;
438 			while (TRUE) {
439 				gchar** _tmp16_;
440 				gint _tmp16__length1;
441 				gchar* realheader = NULL;
442 				gchar** _tmp17_;
443 				gint _tmp17__length1;
444 				const gchar* _tmp18_;
445 				gchar* _tmp19_;
446 				const gchar* _tmp20_;
447 				if (!_tmp14_) {
448 					gint _tmp15_;
449 					_tmp15_ = i;
450 					i = _tmp15_ + 1;
451 				}
452 				_tmp14_ = FALSE;
453 				_tmp16_ = gtkdoc_config_ignore_headers;
454 				_tmp16__length1 = _vala_array_length (gtkdoc_config_ignore_headers);
455 				if (!(i < _tmp16__length1)) {
456 					break;
457 				}
458 				_tmp17_ = gtkdoc_config_ignore_headers;
459 				_tmp17__length1 = _vala_array_length (gtkdoc_config_ignore_headers);
460 				_tmp18_ = _tmp17_[i];
461 				_tmp19_ = vala_code_context_realpath (_tmp18_);
462 				realheader = _tmp19_;
463 				_tmp20_ = realheader;
464 				if (_tmp20_ != NULL) {
465 					gchar** _tmp21_;
466 					gint _tmp21__length1;
467 					const gchar* _tmp22_;
468 					gchar* _tmp23_;
469 					_tmp21_ = gtkdoc_config_ignore_headers;
470 					_tmp21__length1 = _vala_array_length (gtkdoc_config_ignore_headers);
471 					_tmp22_ = realheader;
472 					_tmp23_ = g_strdup (_tmp22_);
473 					_g_free0 (_tmp21_[i]);
474 					_tmp21_[i] = _tmp23_;
475 				}
476 				_g_free0 (realheader);
477 			}
478 		}
479 	}
480 	result = TRUE;
481 	args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
482 	return result;
483 }
484 
485 static inline gpointer
gtkdoc_director_get_instance_private(GtkdocDirector * self)486 gtkdoc_director_get_instance_private (GtkdocDirector* self)
487 {
488 	return G_STRUCT_MEMBER_P (self, GtkdocDirector_private_offset);
489 }
490 
491 static gchar**
_vala_array_dup3(gchar ** self,gint length)492 _vala_array_dup3 (gchar** self,
493                   gint length)
494 {
495 	if (length >= 0) {
496 		gchar** result;
497 		gint i;
498 		result = g_new0 (gchar*, length + 1);
499 		for (i = 0; i < length; i++) {
500 			gchar* _tmp0_;
501 			_tmp0_ = g_strdup (self[i]);
502 			result[i] = _tmp0_;
503 		}
504 		return result;
505 	}
506 	return NULL;
507 }
508 
509 static void
_vala_array_add4(gchar *** array,gint * length,gint * size,gchar * value)510 _vala_array_add4 (gchar** * array,
511                   gint* length,
512                   gint* size,
513                   gchar* value)
514 {
515 	if ((*length) == (*size)) {
516 		*size = (*size) ? (2 * (*size)) : 4;
517 		*array = g_renew (gchar*, *array, (*size) + 1);
518 	}
519 	(*array)[(*length)++] = value;
520 	(*array)[*length] = NULL;
521 }
522 
523 static gchar**
gtkdoc_director_combine_string_arrays(gchar ** a,gint a_length1,gchar ** b,gint b_length1,gint * result_length1)524 gtkdoc_director_combine_string_arrays (gchar** a,
525                                        gint a_length1,
526                                        gchar** b,
527                                        gint b_length1,
528                                        gint* result_length1)
529 {
530 	gchar** _result_ = NULL;
531 	gchar** _tmp0_;
532 	gint _tmp0__length1;
533 	gint _result__length1;
534 	gint __result__size_;
535 	gchar** _tmp4_;
536 	gint _tmp4__length1;
537 	gchar** result = NULL;
538 	_tmp0_ = (a != NULL) ? _vala_array_dup3 (a, a_length1) : a;
539 	_tmp0__length1 = a_length1;
540 	_result_ = _tmp0_;
541 	_result__length1 = _tmp0__length1;
542 	__result__size_ = _result__length1;
543 	{
544 		gchar** e_collection = NULL;
545 		gint e_collection_length1 = 0;
546 		gint _e_collection_size_ = 0;
547 		gint e_it = 0;
548 		e_collection = b;
549 		e_collection_length1 = b_length1;
550 		for (e_it = 0; e_it < e_collection_length1; e_it = e_it + 1) {
551 			gchar* _tmp1_;
552 			gchar* e = NULL;
553 			_tmp1_ = g_strdup (e_collection[e_it]);
554 			e = _tmp1_;
555 			{
556 				const gchar* _tmp2_;
557 				gchar* _tmp3_;
558 				_tmp2_ = e;
559 				_tmp3_ = g_strdup (_tmp2_);
560 				_vala_array_add4 (&_result_, &_result__length1, &__result__size_, _tmp3_);
561 				_g_free0 (e);
562 			}
563 		}
564 	}
565 	_tmp4_ = _result_;
566 	_tmp4__length1 = _result__length1;
567 	if (result_length1) {
568 		*result_length1 = _tmp4__length1;
569 	}
570 	result = _tmp4_;
571 	return result;
572 }
573 
574 static gpointer
_g_object_ref0(gpointer self)575 _g_object_ref0 (gpointer self)
576 {
577 	return self ? g_object_ref (self) : NULL;
578 }
579 
580 static gpointer
_valadoc_api_tree_ref0(gpointer self)581 _valadoc_api_tree_ref0 (gpointer self)
582 {
583 	return self ? valadoc_api_tree_ref (self) : NULL;
584 }
585 
586 static void
gtkdoc_director_real_process(ValadocDoclet * base,ValadocSettings * settings,ValadocApiTree * tree,ValadocErrorReporter * reporter)587 gtkdoc_director_real_process (ValadocDoclet* base,
588                               ValadocSettings* settings,
589                               ValadocApiTree* tree,
590                               ValadocErrorReporter* reporter)
591 {
592 	GtkdocDirector * self;
593 	gchar** _tmp0_;
594 	gint _tmp0__length1;
595 	ValadocSettings* _tmp1_;
596 	ValadocErrorReporter* _tmp2_;
597 	ValadocApiTree* _tmp3_;
598 	gchar* ccomments_dir = NULL;
599 	const gchar* _tmp4_;
600 	gchar* _tmp5_;
601 	gchar* cscan_dir = NULL;
602 	const gchar* _tmp6_;
603 	gchar* _tmp7_;
604 	const gchar* _tmp8_;
605 	const gchar* _tmp9_;
606 	const gchar* _tmp10_;
607 	gchar** files = NULL;
608 	gchar** _tmp11_;
609 	gint _tmp11__length1;
610 	ValaCollection* _tmp12_;
611 	ValaCollection* _tmp13_;
612 	gint _tmp14_ = 0;
613 	gpointer* _tmp15_;
614 	gchar** _tmp16_;
615 	gint _tmp16__length1;
616 	gint _tmp17_ = 0;
617 	gchar** _tmp18_;
618 	gchar** _tmp19_;
619 	gint _tmp19__length1;
620 	gint files_length1;
621 	gint _files_size_;
622 	gchar** _tmp20_;
623 	gint _tmp20__length1;
624 	const gchar* _tmp21_;
625 	gchar** all_headers = NULL;
626 	gchar** _tmp22_;
627 	gint _tmp22__length1;
628 	gchar** _tmp23_;
629 	gint _tmp23__length1;
630 	gint _tmp24_ = 0;
631 	gchar** _tmp25_;
632 	gint all_headers_length1;
633 	gint _all_headers_size_;
634 	const gchar* _tmp26_;
635 	gchar** _tmp27_;
636 	gint _tmp27__length1;
637 	const gchar* _tmp28_;
638 	gchar** _tmp29_;
639 	gint _tmp29__length1;
640 	const gchar* _tmp30_;
641 	const gchar* _tmp31_;
642 	gchar* _tmp32_;
643 	gchar* _tmp33_;
644 	gchar* _tmp34_;
645 	gchar* _tmp35_;
646 	const gchar* _tmp36_;
647 	const gchar* _tmp37_;
648 	gchar* _tmp38_;
649 	gchar* _tmp39_;
650 	gchar* _tmp40_;
651 	gchar* _tmp41_;
652 	GtkdocGenerator* _tmp42_;
653 	GtkdocGenerator* _tmp43_;
654 	self = (GtkdocDirector*) base;
655 	g_return_if_fail (settings != NULL);
656 	g_return_if_fail (tree != NULL);
657 	g_return_if_fail (reporter != NULL);
658 	_tmp0_ = settings->pluginargs;
659 	_tmp0__length1 = settings->pluginargs_length1;
660 	if (!gtkdoc_config_parse (_tmp0_, (gint) _tmp0__length1, reporter)) {
661 		return;
662 	}
663 	_tmp1_ = _g_object_ref0 (settings);
664 	_g_object_unref0 (self->priv->settings);
665 	self->priv->settings = _tmp1_;
666 	_tmp2_ = _g_object_ref0 (reporter);
667 	_g_object_unref0 (self->priv->reporter);
668 	self->priv->reporter = _tmp2_;
669 	_tmp3_ = _valadoc_api_tree_ref0 (tree);
670 	_valadoc_api_tree_unref0 (self->priv->tree);
671 	self->priv->tree = _tmp3_;
672 	_tmp4_ = settings->path;
673 	_tmp5_ = g_build_filename (_tmp4_, "ccomments", NULL);
674 	ccomments_dir = _tmp5_;
675 	_tmp6_ = settings->path;
676 	_tmp7_ = g_build_filename (_tmp6_, "cscan", NULL);
677 	cscan_dir = _tmp7_;
678 	_tmp8_ = settings->path;
679 	g_mkdir_with_parents (_tmp8_, 0755);
680 	_tmp9_ = ccomments_dir;
681 	g_mkdir_with_parents (_tmp9_, 0755);
682 	_tmp10_ = cscan_dir;
683 	g_mkdir_with_parents (_tmp10_, 0755);
684 	_tmp11_ = gtkdoc_config_source_files;
685 	_tmp11__length1 = _vala_array_length (gtkdoc_config_source_files);
686 	_tmp12_ = valadoc_api_tree_get_external_c_files (tree);
687 	_tmp13_ = _tmp12_;
688 	_tmp15_ = vala_collection_to_array (_tmp13_, &_tmp14_);
689 	_tmp16_ = _tmp15_;
690 	_tmp16__length1 = _tmp14_;
691 	_tmp18_ = gtkdoc_director_combine_string_arrays (_tmp11_, (gint) _tmp11__length1, _tmp16_, (gint) _tmp14_, &_tmp17_);
692 	_tmp19_ = _tmp18_;
693 	_tmp19__length1 = _tmp17_;
694 	_tmp16_ = (_vala_array_free (_tmp16_, _tmp16__length1, (GDestroyNotify) g_free), NULL);
695 	_vala_iterable_unref0 (_tmp13_);
696 	files = _tmp19_;
697 	files_length1 = _tmp19__length1;
698 	_files_size_ = files_length1;
699 	_tmp20_ = files;
700 	_tmp20__length1 = files_length1;
701 	_tmp21_ = ccomments_dir;
702 	if (!gtkdoc_director_prepare_files (self, _tmp20_, (gint) _tmp20__length1, _tmp21_)) {
703 		files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
704 		_g_free0 (cscan_dir);
705 		_g_free0 (ccomments_dir);
706 		return;
707 	}
708 	_tmp22_ = self->priv->vala_headers;
709 	_tmp22__length1 = self->priv->vala_headers_length1;
710 	_tmp23_ = self->priv->c_headers;
711 	_tmp23__length1 = self->priv->c_headers_length1;
712 	_tmp25_ = gtkdoc_director_combine_string_arrays (_tmp22_, (gint) _tmp22__length1, _tmp23_, (gint) _tmp23__length1, &_tmp24_);
713 	all_headers = _tmp25_;
714 	all_headers_length1 = _tmp24_;
715 	_all_headers_size_ = all_headers_length1;
716 	_tmp26_ = settings->path;
717 	_tmp27_ = all_headers;
718 	_tmp27__length1 = all_headers_length1;
719 	if (!gtkdoc_director_scan (self, _tmp26_, _tmp27_, (gint) _tmp27__length1)) {
720 		all_headers = (_vala_array_free (all_headers, all_headers_length1, (GDestroyNotify) g_free), NULL);
721 		files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
722 		_g_free0 (cscan_dir);
723 		_g_free0 (ccomments_dir);
724 		return;
725 	}
726 	_tmp28_ = cscan_dir;
727 	_tmp29_ = self->priv->c_headers;
728 	_tmp29__length1 = self->priv->c_headers_length1;
729 	if (!gtkdoc_director_scan (self, _tmp28_, _tmp29_, (gint) _tmp29__length1)) {
730 		all_headers = (_vala_array_free (all_headers, all_headers_length1, (GDestroyNotify) g_free), NULL);
731 		files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
732 		_g_free0 (cscan_dir);
733 		_g_free0 (ccomments_dir);
734 		return;
735 	}
736 	_tmp30_ = cscan_dir;
737 	_tmp31_ = settings->pkg_name;
738 	_tmp32_ = g_strdup_printf ("%s-sections.txt", _tmp31_);
739 	_tmp33_ = _tmp32_;
740 	_tmp34_ = g_build_filename (_tmp30_, _tmp33_, NULL);
741 	_tmp35_ = _tmp34_;
742 	_tmp36_ = settings->path;
743 	_tmp37_ = settings->pkg_name;
744 	_tmp38_ = g_strdup_printf ("%s-sections.txt", _tmp37_);
745 	_tmp39_ = _tmp38_;
746 	_tmp40_ = g_build_filename (_tmp36_, _tmp39_, NULL);
747 	_tmp41_ = _tmp40_;
748 	g_rename (_tmp35_, _tmp41_);
749 	_g_free0 (_tmp41_);
750 	_g_free0 (_tmp39_);
751 	_g_free0 (_tmp35_);
752 	_g_free0 (_tmp33_);
753 	_tmp42_ = gtkdoc_generator_new ();
754 	_g_object_unref0 (self->priv->generator);
755 	self->priv->generator = _tmp42_;
756 	_tmp43_ = self->priv->generator;
757 	if (!gtkdoc_generator_execute (_tmp43_, settings, tree, reporter)) {
758 		all_headers = (_vala_array_free (all_headers, all_headers_length1, (GDestroyNotify) g_free), NULL);
759 		files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
760 		_g_free0 (cscan_dir);
761 		_g_free0 (ccomments_dir);
762 		return;
763 	}
764 	if (!gtkdoc_director_scangobj (self)) {
765 		all_headers = (_vala_array_free (all_headers, all_headers_length1, (GDestroyNotify) g_free), NULL);
766 		files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
767 		_g_free0 (cscan_dir);
768 		_g_free0 (ccomments_dir);
769 		return;
770 	}
771 	if (!gtkdoc_director_mkdb (self)) {
772 		all_headers = (_vala_array_free (all_headers, all_headers_length1, (GDestroyNotify) g_free), NULL);
773 		files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
774 		_g_free0 (cscan_dir);
775 		_g_free0 (ccomments_dir);
776 		return;
777 	}
778 	if (!gtkdoc_director_mkhtml (self)) {
779 		all_headers = (_vala_array_free (all_headers, all_headers_length1, (GDestroyNotify) g_free), NULL);
780 		files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
781 		_g_free0 (cscan_dir);
782 		_g_free0 (ccomments_dir);
783 		return;
784 	}
785 	all_headers = (_vala_array_free (all_headers, all_headers_length1, (GDestroyNotify) g_free), NULL);
786 	files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
787 	_g_free0 (cscan_dir);
788 	_g_free0 (ccomments_dir);
789 }
790 
791 static void
gtkdoc_director_prepare_c_file(GtkdocDirector * self,const gchar * filename,const gchar * comments_dir)792 gtkdoc_director_prepare_c_file (GtkdocDirector* self,
793                                 const gchar* filename,
794                                 const gchar* comments_dir)
795 {
796 	gchar* _tmp0_;
797 	gchar* _tmp1_;
798 	gchar* _tmp2_;
799 	gchar* _tmp3_;
800 	gboolean _tmp4_;
801 	g_return_if_fail (self != NULL);
802 	g_return_if_fail (filename != NULL);
803 	g_return_if_fail (comments_dir != NULL);
804 	if (gtkdoc_is_generated_by_vala (filename)) {
805 		return;
806 	}
807 	_tmp0_ = g_path_get_basename (filename);
808 	_tmp1_ = _tmp0_;
809 	_tmp2_ = g_build_filename (comments_dir, _tmp1_, NULL);
810 	_tmp3_ = _tmp2_;
811 	_tmp4_ = !valadoc_copy_file (filename, _tmp3_);
812 	_g_free0 (_tmp3_);
813 	_g_free0 (_tmp1_);
814 	if (_tmp4_) {
815 		ValadocErrorReporter* _tmp5_;
816 		_tmp5_ = self->priv->reporter;
817 		valadoc_error_reporter_simple_error (_tmp5_, "GtkDoc", "Can't copy '%s'", filename);
818 	}
819 }
820 
821 static gboolean
_vala_string_array_contains(gchar ** stack,gint stack_length,const gchar * needle)822 _vala_string_array_contains (gchar* * stack,
823                              gint stack_length,
824                              const gchar* needle)
825 {
826 	gint i;
827 	for (i = 0; i < stack_length; i++) {
828 		if (g_strcmp0 (stack[i], needle) == 0) {
829 			return TRUE;
830 		}
831 	}
832 	return FALSE;
833 }
834 
835 static void
_vala_array_add5(gchar *** array,gint * length,gint * size,gchar * value)836 _vala_array_add5 (gchar** * array,
837                   gint* length,
838                   gint* size,
839                   gchar* value)
840 {
841 	if ((*length) == (*size)) {
842 		*size = (*size) ? (2 * (*size)) : 4;
843 		*array = g_renew (gchar*, *array, (*size) + 1);
844 	}
845 	(*array)[(*length)++] = value;
846 	(*array)[*length] = NULL;
847 }
848 
849 static void
_vala_array_add6(gchar *** array,gint * length,gint * size,gchar * value)850 _vala_array_add6 (gchar** * array,
851                   gint* length,
852                   gint* size,
853                   gchar* value)
854 {
855 	if ((*length) == (*size)) {
856 		*size = (*size) ? (2 * (*size)) : 4;
857 		*array = g_renew (gchar*, *array, (*size) + 1);
858 	}
859 	(*array)[(*length)++] = value;
860 	(*array)[*length] = NULL;
861 }
862 
863 static void
gtkdoc_director_prepare_h_file(GtkdocDirector * self,const gchar * filename)864 gtkdoc_director_prepare_h_file (GtkdocDirector* self,
865                                 const gchar* filename)
866 {
867 	gchar** _tmp0_;
868 	gint _tmp0__length1;
869 	g_return_if_fail (self != NULL);
870 	g_return_if_fail (filename != NULL);
871 	_tmp0_ = gtkdoc_config_ignore_headers;
872 	_tmp0__length1 = _vala_array_length (gtkdoc_config_ignore_headers);
873 	if (_vala_string_array_contains (_tmp0_, _tmp0__length1, filename)) {
874 		return;
875 	}
876 	if (gtkdoc_is_generated_by_vala (filename)) {
877 		gchar* _tmp1_;
878 		_tmp1_ = g_strdup (filename);
879 		_vala_array_add5 (&self->priv->vala_headers, &self->priv->vala_headers_length1, &self->priv->_vala_headers_size_, _tmp1_);
880 	} else {
881 		gchar* _tmp2_;
882 		_tmp2_ = g_strdup (filename);
883 		_vala_array_add6 (&self->priv->c_headers, &self->priv->c_headers_length1, &self->priv->_c_headers_size_, _tmp2_);
884 	}
885 }
886 
887 static void
_vala_array_add7(gchar *** array,gint * length,gint * size,gchar * value)888 _vala_array_add7 (gchar** * array,
889                   gint* length,
890                   gint* size,
891                   gchar* value)
892 {
893 	if ((*length) == (*size)) {
894 		*size = (*size) ? (2 * (*size)) : 4;
895 		*array = g_renew (gchar*, *array, (*size) + 1);
896 	}
897 	(*array)[(*length)++] = value;
898 	(*array)[*length] = NULL;
899 }
900 
901 static gboolean
gtkdoc_director_prepare_files(GtkdocDirector * self,gchar ** files,gint files_length1,const gchar * comments_dir)902 gtkdoc_director_prepare_files (GtkdocDirector* self,
903                                gchar** files,
904                                gint files_length1,
905                                const gchar* comments_dir)
906 {
907 	gchar** _tmp0_;
908 	gchar** _tmp1_;
909 	gchar** prepared = NULL;
910 	gchar** _tmp2_;
911 	gint prepared_length1;
912 	gint _prepared_size_;
913 	gchar** _tmp19_;
914 	gint _tmp19__length1;
915 	ValadocErrorReporter* _tmp21_;
916 	gint _tmp22_;
917 	gint _tmp23_;
918 	gboolean result = FALSE;
919 	g_return_val_if_fail (self != NULL, FALSE);
920 	g_return_val_if_fail (comments_dir != NULL, FALSE);
921 	_tmp0_ = g_new0 (gchar*, 0 + 1);
922 	self->priv->vala_headers = (_vala_array_free (self->priv->vala_headers, self->priv->vala_headers_length1, (GDestroyNotify) g_free), NULL);
923 	self->priv->vala_headers = _tmp0_;
924 	self->priv->vala_headers_length1 = 0;
925 	self->priv->_vala_headers_size_ = self->priv->vala_headers_length1;
926 	_tmp1_ = g_new0 (gchar*, 0 + 1);
927 	self->priv->c_headers = (_vala_array_free (self->priv->c_headers, self->priv->c_headers_length1, (GDestroyNotify) g_free), NULL);
928 	self->priv->c_headers = _tmp1_;
929 	self->priv->c_headers_length1 = 0;
930 	self->priv->_c_headers_size_ = self->priv->c_headers_length1;
931 	_tmp2_ = g_new0 (gchar*, 0 + 1);
932 	prepared = _tmp2_;
933 	prepared_length1 = 0;
934 	_prepared_size_ = prepared_length1;
935 	{
936 		gchar** relative_filename_collection = NULL;
937 		gint relative_filename_collection_length1 = 0;
938 		gint _relative_filename_collection_size_ = 0;
939 		gint relative_filename_it = 0;
940 		relative_filename_collection = files;
941 		relative_filename_collection_length1 = files_length1;
942 		for (relative_filename_it = 0; relative_filename_it < relative_filename_collection_length1; relative_filename_it = relative_filename_it + 1) {
943 			gchar* _tmp3_;
944 			gchar* relative_filename = NULL;
945 			_tmp3_ = g_strdup (relative_filename_collection[relative_filename_it]);
946 			relative_filename = _tmp3_;
947 			{
948 				gchar* filename = NULL;
949 				const gchar* _tmp4_;
950 				gchar* _tmp5_;
951 				const gchar* _tmp6_;
952 				gchar** _tmp7_;
953 				gint _tmp7__length1;
954 				const gchar* _tmp8_;
955 				gchar* _tmp9_;
956 				const gchar* _tmp10_;
957 				const gchar* _tmp13_;
958 				_tmp4_ = relative_filename;
959 				_tmp5_ = vala_code_context_realpath (_tmp4_);
960 				filename = _tmp5_;
961 				_tmp6_ = filename;
962 				_tmp7_ = prepared;
963 				_tmp7__length1 = prepared_length1;
964 				if (_vala_string_array_contains (_tmp7_, _tmp7__length1, _tmp6_)) {
965 					_g_free0 (filename);
966 					_g_free0 (relative_filename);
967 					continue;
968 				}
969 				_tmp8_ = filename;
970 				_tmp9_ = g_strdup (_tmp8_);
971 				_vala_array_add7 (&prepared, &prepared_length1, &_prepared_size_, _tmp9_);
972 				_tmp10_ = filename;
973 				if (!g_file_test (_tmp10_, G_FILE_TEST_EXISTS)) {
974 					ValadocErrorReporter* _tmp11_;
975 					const gchar* _tmp12_;
976 					_tmp11_ = self->priv->reporter;
977 					_tmp12_ = relative_filename;
978 					valadoc_error_reporter_simple_error (_tmp11_, "GtkDoc", "'%s' not found", _tmp12_);
979 					_g_free0 (filename);
980 					_g_free0 (relative_filename);
981 					continue;
982 				}
983 				_tmp13_ = filename;
984 				if (g_str_has_suffix (_tmp13_, ".c")) {
985 					const gchar* _tmp14_;
986 					_tmp14_ = filename;
987 					gtkdoc_director_prepare_c_file (self, _tmp14_, comments_dir);
988 				} else {
989 					const gchar* _tmp15_;
990 					_tmp15_ = filename;
991 					if (g_str_has_suffix (_tmp15_, ".h")) {
992 						const gchar* _tmp16_;
993 						_tmp16_ = filename;
994 						gtkdoc_director_prepare_h_file (self, _tmp16_);
995 					} else {
996 						ValadocErrorReporter* _tmp17_;
997 						const gchar* _tmp18_;
998 						_tmp17_ = self->priv->reporter;
999 						_tmp18_ = relative_filename;
1000 						valadoc_error_reporter_simple_error (_tmp17_, "GtkDoc", "'%s' is not a supported source file type. Only .h, and .c files are su" \
1001 "pported.", _tmp18_);
1002 					}
1003 				}
1004 				_g_free0 (filename);
1005 				_g_free0 (relative_filename);
1006 			}
1007 		}
1008 	}
1009 	_tmp19_ = self->priv->vala_headers;
1010 	_tmp19__length1 = self->priv->vala_headers_length1;
1011 	if (_tmp19__length1 <= 0) {
1012 		ValadocErrorReporter* _tmp20_;
1013 		_tmp20_ = self->priv->reporter;
1014 		valadoc_error_reporter_simple_error (_tmp20_, "GtkDoc", "No vala header found");
1015 	}
1016 	_tmp21_ = self->priv->reporter;
1017 	_tmp22_ = valadoc_error_reporter_get_errors (_tmp21_);
1018 	_tmp23_ = _tmp22_;
1019 	result = _tmp23_ == 0;
1020 	prepared = (_vala_array_free (prepared, prepared_length1, (GDestroyNotify) g_free), NULL);
1021 	return result;
1022 }
1023 
1024 static void
_vala_array_add8(gchar *** array,gint * length,gint * size,gchar * value)1025 _vala_array_add8 (gchar** * array,
1026                   gint* length,
1027                   gint* size,
1028                   gchar* value)
1029 {
1030 	if ((*length) == (*size)) {
1031 		*size = (*size) ? (2 * (*size)) : 4;
1032 		*array = g_renew (gchar*, *array, (*size) + 1);
1033 	}
1034 	(*array)[(*length)++] = value;
1035 	(*array)[*length] = NULL;
1036 }
1037 
1038 static void
_vala_array_add9(gchar *** array,gint * length,gint * size,gchar * value)1039 _vala_array_add9 (gchar** * array,
1040                   gint* length,
1041                   gint* size,
1042                   gchar* value)
1043 {
1044 	if ((*length) == (*size)) {
1045 		*size = (*size) ? (2 * (*size)) : 4;
1046 		*array = g_renew (gchar*, *array, (*size) + 1);
1047 	}
1048 	(*array)[(*length)++] = value;
1049 	(*array)[*length] = NULL;
1050 }
1051 
1052 static void
_vala_array_add10(gchar *** array,gint * length,gint * size,gchar * value)1053 _vala_array_add10 (gchar** * array,
1054                    gint* length,
1055                    gint* size,
1056                    gchar* value)
1057 {
1058 	if ((*length) == (*size)) {
1059 		*size = (*size) ? (2 * (*size)) : 4;
1060 		*array = g_renew (gchar*, *array, (*size) + 1);
1061 	}
1062 	(*array)[(*length)++] = value;
1063 	(*array)[*length] = NULL;
1064 }
1065 
1066 static void
_vala_array_add11(gchar *** array,gint * length,gint * size,gchar * value)1067 _vala_array_add11 (gchar** * array,
1068                    gint* length,
1069                    gint* size,
1070                    gchar* value)
1071 {
1072 	if ((*length) == (*size)) {
1073 		*size = (*size) ? (2 * (*size)) : 4;
1074 		*array = g_renew (gchar*, *array, (*size) + 1);
1075 	}
1076 	(*array)[(*length)++] = value;
1077 	(*array)[*length] = NULL;
1078 }
1079 
1080 static void
_vala_array_add12(gchar *** array,gint * length,gint * size,gchar * value)1081 _vala_array_add12 (gchar** * array,
1082                    gint* length,
1083                    gint* size,
1084                    gchar* value)
1085 {
1086 	if ((*length) == (*size)) {
1087 		*size = (*size) ? (2 * (*size)) : 4;
1088 		*array = g_renew (gchar*, *array, (*size) + 1);
1089 	}
1090 	(*array)[(*length)++] = value;
1091 	(*array)[*length] = NULL;
1092 }
1093 
1094 static gboolean
gtkdoc_director_scan(GtkdocDirector * self,const gchar * output_dir,gchar ** headers,gint headers_length1)1095 gtkdoc_director_scan (GtkdocDirector* self,
1096                       const gchar* output_dir,
1097                       gchar** headers,
1098                       gint headers_length1)
1099 {
1100 	gchar** args = NULL;
1101 	gchar* _tmp0_;
1102 	gchar* _tmp1_;
1103 	ValadocSettings* _tmp2_;
1104 	const gchar* _tmp3_;
1105 	gchar* _tmp4_;
1106 	gchar* _tmp5_;
1107 	gchar* _tmp6_;
1108 	gchar* _tmp7_;
1109 	gchar* _tmp8_;
1110 	gchar** _tmp9_;
1111 	gint args_length1;
1112 	gint _args_size_;
1113 	const gchar* _tmp13_;
1114 	const gchar* _tmp17_;
1115 	GError* _inner_error0_ = NULL;
1116 	gboolean result = FALSE;
1117 	g_return_val_if_fail (self != NULL, FALSE);
1118 	g_return_val_if_fail (output_dir != NULL, FALSE);
1119 	if (headers == NULL) {
1120 		result = TRUE;
1121 		return result;
1122 	}
1123 	_tmp0_ = g_strdup ("gtkdoc-scan");
1124 	_tmp1_ = g_strdup ("--module");
1125 	_tmp2_ = self->priv->settings;
1126 	_tmp3_ = _tmp2_->pkg_name;
1127 	_tmp4_ = g_strdup (_tmp3_);
1128 	_tmp5_ = g_strdup ("--output-dir");
1129 	_tmp6_ = g_strdup (output_dir);
1130 	_tmp7_ = g_strdup ("--rebuild-sections");
1131 	_tmp8_ = g_strdup ("--rebuild-types");
1132 	_tmp9_ = g_new0 (gchar*, 7 + 1);
1133 	_tmp9_[0] = _tmp0_;
1134 	_tmp9_[1] = _tmp1_;
1135 	_tmp9_[2] = _tmp4_;
1136 	_tmp9_[3] = _tmp5_;
1137 	_tmp9_[4] = _tmp6_;
1138 	_tmp9_[5] = _tmp7_;
1139 	_tmp9_[6] = _tmp8_;
1140 	args = _tmp9_;
1141 	args_length1 = 7;
1142 	_args_size_ = args_length1;
1143 	{
1144 		gchar** header_collection = NULL;
1145 		gint header_collection_length1 = 0;
1146 		gint _header_collection_size_ = 0;
1147 		gint header_it = 0;
1148 		header_collection = headers;
1149 		header_collection_length1 = headers_length1;
1150 		for (header_it = 0; header_it < header_collection_length1; header_it = header_it + 1) {
1151 			gchar* _tmp10_;
1152 			gchar* header = NULL;
1153 			_tmp10_ = g_strdup (header_collection[header_it]);
1154 			header = _tmp10_;
1155 			{
1156 				const gchar* _tmp11_;
1157 				gchar* _tmp12_;
1158 				_tmp11_ = header;
1159 				_tmp12_ = g_strdup (_tmp11_);
1160 				_vala_array_add8 (&args, &args_length1, &_args_size_, _tmp12_);
1161 				_g_free0 (header);
1162 			}
1163 		}
1164 	}
1165 	_tmp13_ = gtkdoc_config_deprecated_guards;
1166 	if (_tmp13_ != NULL) {
1167 		gchar* _tmp14_;
1168 		const gchar* _tmp15_;
1169 		gchar* _tmp16_;
1170 		_tmp14_ = g_strdup ("--deprecated-guards");
1171 		_vala_array_add9 (&args, &args_length1, &_args_size_, _tmp14_);
1172 		_tmp15_ = gtkdoc_config_deprecated_guards;
1173 		_tmp16_ = g_strdup (_tmp15_);
1174 		_vala_array_add10 (&args, &args_length1, &_args_size_, _tmp16_);
1175 	}
1176 	_tmp17_ = gtkdoc_config_ignore_decorators;
1177 	if (_tmp17_ != NULL) {
1178 		gchar* _tmp18_;
1179 		const gchar* _tmp19_;
1180 		gchar* _tmp20_;
1181 		_tmp18_ = g_strdup ("--ignore-decorators");
1182 		_vala_array_add11 (&args, &args_length1, &_args_size_, _tmp18_);
1183 		_tmp19_ = gtkdoc_config_ignore_decorators;
1184 		_tmp20_ = g_strdup (_tmp19_);
1185 		_vala_array_add12 (&args, &args_length1, &_args_size_, _tmp20_);
1186 	}
1187 	{
1188 		ValadocSettings* _tmp21_;
1189 		const gchar* _tmp22_;
1190 		gchar** _tmp23_;
1191 		gint _tmp23__length1;
1192 		_tmp21_ = self->priv->settings;
1193 		_tmp22_ = _tmp21_->path;
1194 		_tmp23_ = args;
1195 		_tmp23__length1 = args_length1;
1196 		g_spawn_sync (_tmp22_, _tmp23_, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, NULL, &_inner_error0_);
1197 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1198 			goto __catch0_g_error;
1199 		}
1200 	}
1201 	goto __finally0;
1202 	__catch0_g_error:
1203 	{
1204 		GError* e = NULL;
1205 		ValadocErrorReporter* _tmp24_;
1206 		GError* _tmp25_;
1207 		const gchar* _tmp26_;
1208 		e = _inner_error0_;
1209 		_inner_error0_ = NULL;
1210 		_tmp24_ = self->priv->reporter;
1211 		_tmp25_ = e;
1212 		_tmp26_ = _tmp25_->message;
1213 		valadoc_error_reporter_simple_error (_tmp24_, "gtkdoc-scan", "%s", _tmp26_);
1214 		result = FALSE;
1215 		_g_error_free0 (e);
1216 		args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
1217 		return result;
1218 	}
1219 	__finally0:
1220 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
1221 		gboolean _tmp27_ = FALSE;
1222 		args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
1223 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
1224 		g_clear_error (&_inner_error0_);
1225 		return _tmp27_;
1226 	}
1227 	result = TRUE;
1228 	args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
1229 	return result;
1230 }
1231 
1232 static void
_vala_array_add13(gchar *** array,gint * length,gint * size,gchar * value)1233 _vala_array_add13 (gchar** * array,
1234                    gint* length,
1235                    gint* size,
1236                    gchar* value)
1237 {
1238 	if ((*length) == (*size)) {
1239 		*size = (*size) ? (2 * (*size)) : 4;
1240 		*array = g_renew (gchar*, *array, (*size) + 1);
1241 	}
1242 	(*array)[(*length)++] = value;
1243 	(*array)[*length] = NULL;
1244 }
1245 
1246 static void
_vala_array_add14(gchar *** array,gint * length,gint * size,gchar * value)1247 _vala_array_add14 (gchar** * array,
1248                    gint* length,
1249                    gint* size,
1250                    gchar* value)
1251 {
1252 	if ((*length) == (*size)) {
1253 		*size = (*size) ? (2 * (*size)) : 4;
1254 		*array = g_renew (gchar*, *array, (*size) + 1);
1255 	}
1256 	(*array)[(*length)++] = value;
1257 	(*array)[*length] = NULL;
1258 }
1259 
1260 static void
_vala_array_add15(gchar *** array,gint * length,gint * size,gchar * value)1261 _vala_array_add15 (gchar** * array,
1262                    gint* length,
1263                    gint* size,
1264                    gchar* value)
1265 {
1266 	if ((*length) == (*size)) {
1267 		*size = (*size) ? (2 * (*size)) : 4;
1268 		*array = g_renew (gchar*, *array, (*size) + 1);
1269 	}
1270 	(*array)[(*length)++] = value;
1271 	(*array)[*length] = NULL;
1272 }
1273 
1274 static void
_vala_array_add16(gchar *** array,gint * length,gint * size,gchar * value)1275 _vala_array_add16 (gchar** * array,
1276                    gint* length,
1277                    gint* size,
1278                    gchar* value)
1279 {
1280 	if ((*length) == (*size)) {
1281 		*size = (*size) ? (2 * (*size)) : 4;
1282 		*array = g_renew (gchar*, *array, (*size) + 1);
1283 	}
1284 	(*array)[(*length)++] = value;
1285 	(*array)[*length] = NULL;
1286 }
1287 
1288 static void
_vala_array_add17(gchar *** array,gint * length,gint * size,gchar * value)1289 _vala_array_add17 (gchar** * array,
1290                    gint* length,
1291                    gint* size,
1292                    gchar* value)
1293 {
1294 	if ((*length) == (*size)) {
1295 		*size = (*size) ? (2 * (*size)) : 4;
1296 		*array = g_renew (gchar*, *array, (*size) + 1);
1297 	}
1298 	(*array)[(*length)++] = value;
1299 	(*array)[*length] = NULL;
1300 }
1301 
1302 static gchar*
string_strip(const gchar * self)1303 string_strip (const gchar* self)
1304 {
1305 	gchar* _result_ = NULL;
1306 	gchar* _tmp0_;
1307 	gchar* result = NULL;
1308 	g_return_val_if_fail (self != NULL, NULL);
1309 	_tmp0_ = g_strdup (self);
1310 	_result_ = _tmp0_;
1311 	g_strstrip (_result_);
1312 	result = _result_;
1313 	return result;
1314 }
1315 
1316 static void
_vala_array_add18(gchar *** array,gint * length,gint * size,gchar * value)1317 _vala_array_add18 (gchar** * array,
1318                    gint* length,
1319                    gint* size,
1320                    gchar* value)
1321 {
1322 	if ((*length) == (*size)) {
1323 		*size = (*size) ? (2 * (*size)) : 4;
1324 		*array = g_renew (gchar*, *array, (*size) + 1);
1325 	}
1326 	(*array)[(*length)++] = value;
1327 	(*array)[*length] = NULL;
1328 }
1329 
1330 static gboolean
gtkdoc_director_scangobj(GtkdocDirector * self)1331 gtkdoc_director_scangobj (GtkdocDirector* self)
1332 {
1333 	gchar** _tmp0_;
1334 	gint _tmp0__length1;
1335 	GString* library_paths = NULL;
1336 	GString* _tmp1_;
1337 	GString* library_dirs = NULL;
1338 	GString* _tmp2_;
1339 	gchar** _tmp3_;
1340 	gint _tmp3__length1;
1341 	gchar** pc = NULL;
1342 	gchar* _tmp15_;
1343 	gchar** _tmp16_;
1344 	gint pc_length1;
1345 	gint _pc_size_;
1346 	gchar** pc_cflags = NULL;
1347 	gchar** _tmp37_;
1348 	gint pc_cflags_length1;
1349 	gint _pc_cflags_size_;
1350 	gchar** _tmp38_;
1351 	gint _tmp38__length1;
1352 	gchar* _tmp42_;
1353 	gchar** pc_libs = NULL;
1354 	gchar** _tmp43_;
1355 	gint pc_libs_length1;
1356 	gint _pc_libs_size_;
1357 	gchar** _tmp44_;
1358 	gint _tmp44__length1;
1359 	gchar* _tmp48_;
1360 	GError* _inner_error0_ = NULL;
1361 	gboolean result = FALSE;
1362 	g_return_val_if_fail (self != NULL, FALSE);
1363 	_tmp0_ = gtkdoc_config_library_filenames;
1364 	_tmp0__length1 = _vala_array_length (gtkdoc_config_library_filenames);
1365 	if (_tmp0_ == NULL) {
1366 		result = TRUE;
1367 		return result;
1368 	}
1369 	_tmp1_ = g_string_new ("");
1370 	library_paths = _tmp1_;
1371 	_tmp2_ = g_string_new ("");
1372 	library_dirs = _tmp2_;
1373 	_tmp3_ = gtkdoc_config_library_filenames;
1374 	_tmp3__length1 = _vala_array_length (gtkdoc_config_library_filenames);
1375 	{
1376 		gchar** library_collection = NULL;
1377 		gint library_collection_length1 = 0;
1378 		gint _library_collection_size_ = 0;
1379 		gint library_it = 0;
1380 		library_collection = _tmp3_;
1381 		library_collection_length1 = _tmp3__length1;
1382 		for (library_it = 0; library_it < library_collection_length1; library_it = library_it + 1) {
1383 			gchar* _tmp4_;
1384 			gchar* library = NULL;
1385 			_tmp4_ = g_strdup (library_collection[library_it]);
1386 			library = _tmp4_;
1387 			{
1388 				gchar* so_path = NULL;
1389 				const gchar* _tmp5_;
1390 				gchar* _tmp6_;
1391 				gchar* name = NULL;
1392 				const gchar* _tmp7_;
1393 				gchar* _tmp8_;
1394 				GString* _tmp9_;
1395 				const gchar* _tmp10_;
1396 				GString* _tmp11_;
1397 				const gchar* _tmp12_;
1398 				GString* _tmp13_;
1399 				GString* _tmp14_;
1400 				_tmp5_ = library;
1401 				_tmp6_ = vala_code_context_realpath (_tmp5_);
1402 				so_path = _tmp6_;
1403 				_tmp7_ = so_path;
1404 				_tmp8_ = g_path_get_dirname (_tmp7_);
1405 				name = _tmp8_;
1406 				_tmp9_ = library_dirs;
1407 				_tmp10_ = name;
1408 				g_string_append (_tmp9_, _tmp10_);
1409 				_tmp11_ = library_paths;
1410 				_tmp12_ = so_path;
1411 				g_string_append (_tmp11_, _tmp12_);
1412 				_tmp13_ = library_paths;
1413 				g_string_append_c (_tmp13_, ' ');
1414 				_tmp14_ = library_dirs;
1415 				g_string_append_c (_tmp14_, ':');
1416 				_g_free0 (name);
1417 				_g_free0 (so_path);
1418 				_g_free0 (library);
1419 			}
1420 		}
1421 	}
1422 	_tmp15_ = g_strdup ("pkg-config");
1423 	_tmp16_ = g_new0 (gchar*, 1 + 1);
1424 	_tmp16_[0] = _tmp15_;
1425 	pc = _tmp16_;
1426 	pc_length1 = 1;
1427 	_pc_size_ = pc_length1;
1428 	{
1429 		ValaIterator* _package_it = NULL;
1430 		ValadocApiTree* _tmp17_;
1431 		ValaCollection* _tmp18_;
1432 		ValaCollection* _tmp19_;
1433 		ValaIterator* _tmp20_;
1434 		ValaIterator* _tmp21_;
1435 		_tmp17_ = self->priv->tree;
1436 		_tmp18_ = valadoc_api_tree_get_package_list (_tmp17_);
1437 		_tmp19_ = _tmp18_;
1438 		_tmp20_ = vala_iterable_iterator ((ValaIterable*) _tmp19_);
1439 		_tmp21_ = _tmp20_;
1440 		_vala_iterable_unref0 (_tmp19_);
1441 		_package_it = _tmp21_;
1442 		while (TRUE) {
1443 			ValaIterator* _tmp22_;
1444 			ValadocApiPackage* package = NULL;
1445 			ValaIterator* _tmp23_;
1446 			gpointer _tmp24_;
1447 			gboolean _tmp25_ = FALSE;
1448 			ValadocApiPackage* _tmp26_;
1449 			gboolean _tmp27_;
1450 			gboolean _tmp28_;
1451 			_tmp22_ = _package_it;
1452 			if (!vala_iterator_next (_tmp22_)) {
1453 				break;
1454 			}
1455 			_tmp23_ = _package_it;
1456 			_tmp24_ = vala_iterator_get (_tmp23_);
1457 			package = (ValadocApiPackage*) _tmp24_;
1458 			_tmp26_ = package;
1459 			_tmp27_ = valadoc_api_package_get_is_package (_tmp26_);
1460 			_tmp28_ = _tmp27_;
1461 			if (_tmp28_) {
1462 				ValadocApiPackage* _tmp29_;
1463 				const gchar* _tmp30_;
1464 				const gchar* _tmp31_;
1465 				ValadocErrorReporter* _tmp32_;
1466 				_tmp29_ = package;
1467 				_tmp30_ = valadoc_api_node_get_name ((ValadocApiNode*) _tmp29_);
1468 				_tmp31_ = _tmp30_;
1469 				_tmp32_ = self->priv->reporter;
1470 				_tmp25_ = gtkdoc_package_exists (_tmp31_, _tmp32_);
1471 			} else {
1472 				_tmp25_ = FALSE;
1473 			}
1474 			if (_tmp25_) {
1475 				ValadocApiPackage* _tmp33_;
1476 				const gchar* _tmp34_;
1477 				const gchar* _tmp35_;
1478 				gchar* _tmp36_;
1479 				_tmp33_ = package;
1480 				_tmp34_ = valadoc_api_node_get_name ((ValadocApiNode*) _tmp33_);
1481 				_tmp35_ = _tmp34_;
1482 				_tmp36_ = g_strdup (_tmp35_);
1483 				_vala_array_add13 (&pc, &pc_length1, &_pc_size_, _tmp36_);
1484 			}
1485 			_g_object_unref0 (package);
1486 		}
1487 		_vala_iterator_unref0 (_package_it);
1488 	}
1489 	_tmp37_ = g_new0 (gchar*, 0 + 1);
1490 	pc_cflags = _tmp37_;
1491 	pc_cflags_length1 = 0;
1492 	_pc_cflags_size_ = pc_cflags_length1;
1493 	_tmp38_ = pc;
1494 	_tmp38__length1 = pc_length1;
1495 	{
1496 		gchar** name_collection = NULL;
1497 		gint name_collection_length1 = 0;
1498 		gint _name_collection_size_ = 0;
1499 		gint name_it = 0;
1500 		name_collection = _tmp38_;
1501 		name_collection_length1 = _tmp38__length1;
1502 		for (name_it = 0; name_it < name_collection_length1; name_it = name_it + 1) {
1503 			gchar* _tmp39_;
1504 			gchar* name = NULL;
1505 			_tmp39_ = g_strdup (name_collection[name_it]);
1506 			name = _tmp39_;
1507 			{
1508 				const gchar* _tmp40_;
1509 				gchar* _tmp41_;
1510 				_tmp40_ = name;
1511 				_tmp41_ = g_strdup (_tmp40_);
1512 				_vala_array_add14 (&pc_cflags, &pc_cflags_length1, &_pc_cflags_size_, _tmp41_);
1513 				_g_free0 (name);
1514 			}
1515 		}
1516 	}
1517 	_tmp42_ = g_strdup ("--cflags");
1518 	_vala_array_add15 (&pc_cflags, &pc_cflags_length1, &_pc_cflags_size_, _tmp42_);
1519 	_tmp43_ = g_new0 (gchar*, 0 + 1);
1520 	pc_libs = _tmp43_;
1521 	pc_libs_length1 = 0;
1522 	_pc_libs_size_ = pc_libs_length1;
1523 	_tmp44_ = pc;
1524 	_tmp44__length1 = pc_length1;
1525 	{
1526 		gchar** name_collection = NULL;
1527 		gint name_collection_length1 = 0;
1528 		gint _name_collection_size_ = 0;
1529 		gint name_it = 0;
1530 		name_collection = _tmp44_;
1531 		name_collection_length1 = _tmp44__length1;
1532 		for (name_it = 0; name_it < name_collection_length1; name_it = name_it + 1) {
1533 			gchar* _tmp45_;
1534 			gchar* name = NULL;
1535 			_tmp45_ = g_strdup (name_collection[name_it]);
1536 			name = _tmp45_;
1537 			{
1538 				const gchar* _tmp46_;
1539 				gchar* _tmp47_;
1540 				_tmp46_ = name;
1541 				_tmp47_ = g_strdup (_tmp46_);
1542 				_vala_array_add16 (&pc_libs, &pc_libs_length1, &_pc_libs_size_, _tmp47_);
1543 				_g_free0 (name);
1544 			}
1545 		}
1546 	}
1547 	_tmp48_ = g_strdup ("--libs");
1548 	_vala_array_add17 (&pc_libs, &pc_libs_length1, &_pc_libs_size_, _tmp48_);
1549 	{
1550 		gchar* stderr_buf = NULL;
1551 		gint status = 0;
1552 		gchar* cflags = NULL;
1553 		gchar** _tmp49_;
1554 		gint _tmp49__length1;
1555 		gchar* _tmp50_ = NULL;
1556 		gchar* _tmp51_ = NULL;
1557 		gint _tmp52_ = 0;
1558 		const gchar* _tmp55_;
1559 		gchar* _tmp56_;
1560 		gchar* libs = NULL;
1561 		gchar** _tmp57_;
1562 		gint _tmp57__length1;
1563 		gchar* _tmp58_ = NULL;
1564 		gchar* _tmp59_ = NULL;
1565 		gint _tmp60_ = 0;
1566 		const gchar* _tmp63_;
1567 		gchar* _tmp64_;
1568 		gchar** args = NULL;
1569 		gchar* _tmp65_;
1570 		gchar* _tmp66_;
1571 		ValadocSettings* _tmp67_;
1572 		const gchar* _tmp68_;
1573 		gchar* _tmp69_;
1574 		gchar* _tmp70_;
1575 		ValadocSettings* _tmp71_;
1576 		const gchar* _tmp72_;
1577 		gchar* _tmp73_;
1578 		gchar* _tmp74_;
1579 		ValadocSettings* _tmp75_;
1580 		const gchar* _tmp76_;
1581 		gchar* _tmp77_;
1582 		gchar** _tmp78_;
1583 		gint args_length1;
1584 		gint _args_size_;
1585 		const gchar* _tmp79_ = NULL;
1586 		const gchar* _tmp80_;
1587 		const gchar* _tmp81_ = NULL;
1588 		const gchar* _tmp82_;
1589 		const gchar* _tmp83_ = NULL;
1590 		const gchar* _tmp84_;
1591 		gchar** env = NULL;
1592 		const gchar* _tmp85_;
1593 		gchar* _tmp86_;
1594 		const gchar* _tmp87_;
1595 		GString* _tmp88_;
1596 		const gchar* _tmp89_;
1597 		gchar* _tmp90_;
1598 		GString* _tmp91_;
1599 		const gchar* _tmp92_;
1600 		gchar* _tmp93_;
1601 		gchar** _tmp94_;
1602 		gint env_length1;
1603 		gint _env_size_;
1604 		gchar** _tmp95_;
1605 		gchar** _tmp96_;
1606 		ValadocSettings* _tmp107_;
1607 		const gchar* _tmp108_;
1608 		gchar** _tmp109_;
1609 		gint _tmp109__length1;
1610 		gchar** _tmp110_;
1611 		gint _tmp110__length1;
1612 		_tmp49_ = pc_cflags;
1613 		_tmp49__length1 = pc_cflags_length1;
1614 		g_spawn_sync (NULL, _tmp49_, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &_tmp50_, &_tmp51_, &_tmp52_, &_inner_error0_);
1615 		_g_free0 (cflags);
1616 		cflags = _tmp50_;
1617 		_g_free0 (stderr_buf);
1618 		stderr_buf = _tmp51_;
1619 		status = _tmp52_;
1620 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1621 			_g_free0 (cflags);
1622 			_g_free0 (stderr_buf);
1623 			goto __catch0_g_error;
1624 		}
1625 		if (status != 0) {
1626 			ValadocErrorReporter* _tmp53_;
1627 			const gchar* _tmp54_;
1628 			_tmp53_ = self->priv->reporter;
1629 			_tmp54_ = stderr_buf;
1630 			valadoc_error_reporter_simple_error (_tmp53_, "GtkDoc", "pkg-config cflags error: %s", _tmp54_);
1631 			result = FALSE;
1632 			_g_free0 (cflags);
1633 			_g_free0 (stderr_buf);
1634 			pc_libs = (_vala_array_free (pc_libs, pc_libs_length1, (GDestroyNotify) g_free), NULL);
1635 			pc_cflags = (_vala_array_free (pc_cflags, pc_cflags_length1, (GDestroyNotify) g_free), NULL);
1636 			pc = (_vala_array_free (pc, pc_length1, (GDestroyNotify) g_free), NULL);
1637 			_g_string_free0 (library_dirs);
1638 			_g_string_free0 (library_paths);
1639 			return result;
1640 		}
1641 		_tmp55_ = cflags;
1642 		_tmp56_ = string_strip (_tmp55_);
1643 		_g_free0 (cflags);
1644 		cflags = _tmp56_;
1645 		_tmp57_ = pc_libs;
1646 		_tmp57__length1 = pc_libs_length1;
1647 		g_spawn_sync (NULL, _tmp57_, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &_tmp58_, &_tmp59_, &_tmp60_, &_inner_error0_);
1648 		_g_free0 (libs);
1649 		libs = _tmp58_;
1650 		_g_free0 (stderr_buf);
1651 		stderr_buf = _tmp59_;
1652 		status = _tmp60_;
1653 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1654 			_g_free0 (libs);
1655 			_g_free0 (cflags);
1656 			_g_free0 (stderr_buf);
1657 			goto __catch0_g_error;
1658 		}
1659 		if (status != 0) {
1660 			ValadocErrorReporter* _tmp61_;
1661 			const gchar* _tmp62_;
1662 			_tmp61_ = self->priv->reporter;
1663 			_tmp62_ = stderr_buf;
1664 			valadoc_error_reporter_simple_error (_tmp61_, "GtkDoc", "pkg-config libs error: %s", _tmp62_);
1665 			result = FALSE;
1666 			_g_free0 (libs);
1667 			_g_free0 (cflags);
1668 			_g_free0 (stderr_buf);
1669 			pc_libs = (_vala_array_free (pc_libs, pc_libs_length1, (GDestroyNotify) g_free), NULL);
1670 			pc_cflags = (_vala_array_free (pc_cflags, pc_cflags_length1, (GDestroyNotify) g_free), NULL);
1671 			pc = (_vala_array_free (pc, pc_length1, (GDestroyNotify) g_free), NULL);
1672 			_g_string_free0 (library_dirs);
1673 			_g_string_free0 (library_paths);
1674 			return result;
1675 		}
1676 		_tmp63_ = libs;
1677 		_tmp64_ = string_strip (_tmp63_);
1678 		_g_free0 (libs);
1679 		libs = _tmp64_;
1680 		_tmp65_ = g_strdup ("gtkdoc-scangobj");
1681 		_tmp66_ = g_strdup ("--module");
1682 		_tmp67_ = self->priv->settings;
1683 		_tmp68_ = _tmp67_->pkg_name;
1684 		_tmp69_ = g_strdup (_tmp68_);
1685 		_tmp70_ = g_strdup ("--types");
1686 		_tmp71_ = self->priv->settings;
1687 		_tmp72_ = _tmp71_->pkg_name;
1688 		_tmp73_ = g_strdup_printf ("%s.types", _tmp72_);
1689 		_tmp74_ = g_strdup ("--output-dir");
1690 		_tmp75_ = self->priv->settings;
1691 		_tmp76_ = _tmp75_->path;
1692 		_tmp77_ = g_strdup (_tmp76_);
1693 		_tmp78_ = g_new0 (gchar*, 7 + 1);
1694 		_tmp78_[0] = _tmp65_;
1695 		_tmp78_[1] = _tmp66_;
1696 		_tmp78_[2] = _tmp69_;
1697 		_tmp78_[3] = _tmp70_;
1698 		_tmp78_[4] = _tmp73_;
1699 		_tmp78_[5] = _tmp74_;
1700 		_tmp78_[6] = _tmp77_;
1701 		args = _tmp78_;
1702 		args_length1 = 7;
1703 		_args_size_ = args_length1;
1704 		_tmp80_ = g_getenv ("CFLAGS");
1705 		_tmp79_ = _tmp80_;
1706 		if (_tmp79_ == NULL) {
1707 			_tmp79_ = "";
1708 		}
1709 		_tmp82_ = g_getenv ("LDFLAGS");
1710 		_tmp81_ = _tmp82_;
1711 		if (_tmp81_ == NULL) {
1712 			_tmp81_ = "";
1713 		}
1714 		_tmp84_ = g_getenv ("LD_LIBRARY_PATH");
1715 		_tmp83_ = _tmp84_;
1716 		if (_tmp83_ == NULL) {
1717 			_tmp83_ = "";
1718 		}
1719 		_tmp85_ = cflags;
1720 		_tmp86_ = g_strdup_printf ("CFLAGS=%s %s", _tmp85_, _tmp79_);
1721 		_tmp87_ = libs;
1722 		_tmp88_ = library_paths;
1723 		_tmp89_ = _tmp88_->str;
1724 		_tmp90_ = g_strdup_printf ("LDFLAGS=%s %s %s", _tmp87_, _tmp89_, _tmp81_);
1725 		_tmp91_ = library_dirs;
1726 		_tmp92_ = _tmp91_->str;
1727 		_tmp93_ = g_strdup_printf ("LD_LIBRARY_PATH=%s%s", _tmp92_, _tmp83_);
1728 		_tmp94_ = g_new0 (gchar*, 3 + 1);
1729 		_tmp94_[0] = _tmp86_;
1730 		_tmp94_[1] = _tmp90_;
1731 		_tmp94_[2] = _tmp93_;
1732 		env = _tmp94_;
1733 		env_length1 = 3;
1734 		_env_size_ = env_length1;
1735 		_tmp96_ = _tmp95_ = g_listenv ();
1736 		{
1737 			gchar** evar_collection = NULL;
1738 			gint evar_collection_length1 = 0;
1739 			gint _evar_collection_size_ = 0;
1740 			gint evar_it = 0;
1741 			evar_collection = _tmp96_;
1742 			evar_collection_length1 = _vala_array_length (_tmp95_);
1743 			for (evar_it = 0; evar_it < evar_collection_length1; evar_it = evar_it + 1) {
1744 				gchar* _tmp97_;
1745 				gchar* evar = NULL;
1746 				_tmp97_ = g_strdup (evar_collection[evar_it]);
1747 				evar = _tmp97_;
1748 				{
1749 					gboolean _tmp98_ = FALSE;
1750 					gboolean _tmp99_ = FALSE;
1751 					const gchar* _tmp100_;
1752 					_tmp100_ = evar;
1753 					if (g_strcmp0 (_tmp100_, "CFLAGS") != 0) {
1754 						const gchar* _tmp101_;
1755 						_tmp101_ = evar;
1756 						_tmp99_ = g_strcmp0 (_tmp101_, "LDFLAGS") != 0;
1757 					} else {
1758 						_tmp99_ = FALSE;
1759 					}
1760 					if (_tmp99_) {
1761 						const gchar* _tmp102_;
1762 						_tmp102_ = evar;
1763 						_tmp98_ = g_strcmp0 (_tmp102_, "LD_LIBRARY_PATH") != 0;
1764 					} else {
1765 						_tmp98_ = FALSE;
1766 					}
1767 					if (_tmp98_) {
1768 						const gchar* _tmp103_;
1769 						const gchar* _tmp104_;
1770 						const gchar* _tmp105_;
1771 						gchar* _tmp106_;
1772 						_tmp103_ = evar;
1773 						_tmp104_ = evar;
1774 						_tmp105_ = g_getenv (_tmp104_);
1775 						_tmp106_ = g_strdup_printf ("%s=%s", _tmp103_, _tmp105_);
1776 						_vala_array_add18 (&env, &env_length1, &_env_size_, _tmp106_);
1777 					}
1778 					_g_free0 (evar);
1779 				}
1780 			}
1781 			evar_collection = (_vala_array_free (evar_collection, evar_collection_length1, (GDestroyNotify) g_free), NULL);
1782 		}
1783 		_tmp107_ = self->priv->settings;
1784 		_tmp108_ = _tmp107_->path;
1785 		_tmp109_ = args;
1786 		_tmp109__length1 = args_length1;
1787 		_tmp110_ = env;
1788 		_tmp110__length1 = env_length1;
1789 		g_spawn_sync (_tmp108_, _tmp109_, _tmp110_, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, NULL, &_inner_error0_);
1790 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1791 			env = (_vala_array_free (env, env_length1, (GDestroyNotify) g_free), NULL);
1792 			args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
1793 			_g_free0 (libs);
1794 			_g_free0 (cflags);
1795 			_g_free0 (stderr_buf);
1796 			goto __catch0_g_error;
1797 		}
1798 		env = (_vala_array_free (env, env_length1, (GDestroyNotify) g_free), NULL);
1799 		args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
1800 		_g_free0 (libs);
1801 		_g_free0 (cflags);
1802 		_g_free0 (stderr_buf);
1803 	}
1804 	goto __finally0;
1805 	__catch0_g_error:
1806 	{
1807 		GError* e = NULL;
1808 		ValadocErrorReporter* _tmp111_;
1809 		GError* _tmp112_;
1810 		const gchar* _tmp113_;
1811 		e = _inner_error0_;
1812 		_inner_error0_ = NULL;
1813 		_tmp111_ = self->priv->reporter;
1814 		_tmp112_ = e;
1815 		_tmp113_ = _tmp112_->message;
1816 		valadoc_error_reporter_simple_error (_tmp111_, "gtkdoc-scangobj", "%s", _tmp113_);
1817 		result = FALSE;
1818 		_g_error_free0 (e);
1819 		pc_libs = (_vala_array_free (pc_libs, pc_libs_length1, (GDestroyNotify) g_free), NULL);
1820 		pc_cflags = (_vala_array_free (pc_cflags, pc_cflags_length1, (GDestroyNotify) g_free), NULL);
1821 		pc = (_vala_array_free (pc, pc_length1, (GDestroyNotify) g_free), NULL);
1822 		_g_string_free0 (library_dirs);
1823 		_g_string_free0 (library_paths);
1824 		return result;
1825 	}
1826 	__finally0:
1827 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
1828 		gboolean _tmp114_ = FALSE;
1829 		pc_libs = (_vala_array_free (pc_libs, pc_libs_length1, (GDestroyNotify) g_free), NULL);
1830 		pc_cflags = (_vala_array_free (pc_cflags, pc_cflags_length1, (GDestroyNotify) g_free), NULL);
1831 		pc = (_vala_array_free (pc, pc_length1, (GDestroyNotify) g_free), NULL);
1832 		_g_string_free0 (library_dirs);
1833 		_g_string_free0 (library_paths);
1834 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
1835 		g_clear_error (&_inner_error0_);
1836 		return _tmp114_;
1837 	}
1838 	result = TRUE;
1839 	pc_libs = (_vala_array_free (pc_libs, pc_libs_length1, (GDestroyNotify) g_free), NULL);
1840 	pc_cflags = (_vala_array_free (pc_cflags, pc_cflags_length1, (GDestroyNotify) g_free), NULL);
1841 	pc = (_vala_array_free (pc, pc_length1, (GDestroyNotify) g_free), NULL);
1842 	_g_string_free0 (library_dirs);
1843 	_g_string_free0 (library_paths);
1844 	return result;
1845 }
1846 
1847 static gchar*
string_replace(const gchar * self,const gchar * old,const gchar * replacement)1848 string_replace (const gchar* self,
1849                 const gchar* old,
1850                 const gchar* replacement)
1851 {
1852 	gboolean _tmp0_ = FALSE;
1853 	gboolean _tmp1_ = FALSE;
1854 	GError* _inner_error0_ = NULL;
1855 	gchar* result = NULL;
1856 	g_return_val_if_fail (self != NULL, NULL);
1857 	g_return_val_if_fail (old != NULL, NULL);
1858 	g_return_val_if_fail (replacement != NULL, NULL);
1859 	if ((*((gchar*) self)) == '\0') {
1860 		_tmp1_ = TRUE;
1861 	} else {
1862 		_tmp1_ = (*((gchar*) old)) == '\0';
1863 	}
1864 	if (_tmp1_) {
1865 		_tmp0_ = TRUE;
1866 	} else {
1867 		_tmp0_ = g_strcmp0 (old, replacement) == 0;
1868 	}
1869 	if (_tmp0_) {
1870 		gchar* _tmp2_;
1871 		_tmp2_ = g_strdup (self);
1872 		result = _tmp2_;
1873 		return result;
1874 	}
1875 	{
1876 		GRegex* regex = NULL;
1877 		gchar* _tmp3_;
1878 		gchar* _tmp4_;
1879 		GRegex* _tmp5_;
1880 		GRegex* _tmp6_;
1881 		gchar* _tmp7_ = NULL;
1882 		GRegex* _tmp8_;
1883 		gchar* _tmp9_;
1884 		gchar* _tmp10_;
1885 		_tmp3_ = g_regex_escape_string (old, -1);
1886 		_tmp4_ = _tmp3_;
1887 		_tmp5_ = g_regex_new (_tmp4_, 0, 0, &_inner_error0_);
1888 		_tmp6_ = _tmp5_;
1889 		_g_free0 (_tmp4_);
1890 		regex = _tmp6_;
1891 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1892 			if (_inner_error0_->domain == G_REGEX_ERROR) {
1893 				goto __catch0_g_regex_error;
1894 			}
1895 			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
1896 			g_clear_error (&_inner_error0_);
1897 			return NULL;
1898 		}
1899 		_tmp8_ = regex;
1900 		_tmp9_ = g_regex_replace_literal (_tmp8_, self, (gssize) -1, 0, replacement, 0, &_inner_error0_);
1901 		_tmp7_ = _tmp9_;
1902 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1903 			_g_regex_unref0 (regex);
1904 			if (_inner_error0_->domain == G_REGEX_ERROR) {
1905 				goto __catch0_g_regex_error;
1906 			}
1907 			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
1908 			g_clear_error (&_inner_error0_);
1909 			return NULL;
1910 		}
1911 		_tmp10_ = _tmp7_;
1912 		_tmp7_ = NULL;
1913 		result = _tmp10_;
1914 		_g_free0 (_tmp7_);
1915 		_g_regex_unref0 (regex);
1916 		return result;
1917 	}
1918 	goto __finally0;
1919 	__catch0_g_regex_error:
1920 	{
1921 		g_clear_error (&_inner_error0_);
1922 		g_assert_not_reached ();
1923 	}
1924 	__finally0:
1925 	g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
1926 	g_clear_error (&_inner_error0_);
1927 	return NULL;
1928 }
1929 
1930 static gpointer
_vala_iterable_ref0(gpointer self)1931 _vala_iterable_ref0 (gpointer self)
1932 {
1933 	return self ? vala_iterable_ref (self) : NULL;
1934 }
1935 
1936 static gboolean
gtkdoc_director_mkdb(GtkdocDirector * self)1937 gtkdoc_director_mkdb (GtkdocDirector* self)
1938 {
1939 	gchar* main_file = NULL;
1940 	ValadocSettings* _tmp0_;
1941 	const gchar* _tmp1_;
1942 	ValadocSettings* _tmp2_;
1943 	const gchar* _tmp3_;
1944 	gchar* _tmp4_;
1945 	gchar* _tmp5_;
1946 	gchar* _tmp6_;
1947 	gchar* _tmp7_;
1948 	gchar* code_dir = NULL;
1949 	ValadocSettings* _tmp8_;
1950 	const gchar* _tmp9_;
1951 	gchar* _tmp10_;
1952 	gboolean must_update_main_file = FALSE;
1953 	const gchar* _tmp11_;
1954 	gchar** args = NULL;
1955 	gchar* _tmp12_;
1956 	gchar* _tmp13_;
1957 	ValadocSettings* _tmp14_;
1958 	const gchar* _tmp15_;
1959 	gchar* _tmp16_;
1960 	gchar* _tmp17_;
1961 	const gchar* _tmp18_;
1962 	gchar* _tmp19_;
1963 	gchar* _tmp20_;
1964 	gchar* _tmp21_;
1965 	gchar* _tmp22_;
1966 	gchar* _tmp23_;
1967 	ValadocSettings* _tmp24_;
1968 	const gchar* _tmp25_;
1969 	gchar* _tmp26_;
1970 	gchar* _tmp27_;
1971 	ValadocSettings* _tmp28_;
1972 	const gchar* _tmp29_;
1973 	gchar* _tmp30_;
1974 	gchar** _tmp31_;
1975 	gint args_length1;
1976 	gint _args_size_;
1977 	GError* _inner_error0_ = NULL;
1978 	gboolean result = FALSE;
1979 	g_return_val_if_fail (self != NULL, FALSE);
1980 	_tmp0_ = self->priv->settings;
1981 	_tmp1_ = _tmp0_->path;
1982 	_tmp2_ = self->priv->settings;
1983 	_tmp3_ = _tmp2_->pkg_name;
1984 	_tmp4_ = g_strdup_printf ("%s-docs.xml", _tmp3_);
1985 	_tmp5_ = _tmp4_;
1986 	_tmp6_ = g_build_filename (_tmp1_, _tmp5_, NULL);
1987 	_tmp7_ = _tmp6_;
1988 	_g_free0 (_tmp5_);
1989 	main_file = _tmp7_;
1990 	_tmp8_ = self->priv->settings;
1991 	_tmp9_ = _tmp8_->path;
1992 	_tmp10_ = g_build_filename (_tmp9_, "ccomments", NULL);
1993 	code_dir = _tmp10_;
1994 	_tmp11_ = main_file;
1995 	must_update_main_file = !g_file_test (_tmp11_, G_FILE_TEST_EXISTS);
1996 	_tmp12_ = g_strdup ("gtkdoc-mkdb");
1997 	_tmp13_ = g_strdup ("--module");
1998 	_tmp14_ = self->priv->settings;
1999 	_tmp15_ = _tmp14_->pkg_name;
2000 	_tmp16_ = g_strdup (_tmp15_);
2001 	_tmp17_ = g_strdup ("--source-dir");
2002 	_tmp18_ = code_dir;
2003 	_tmp19_ = g_strdup (_tmp18_);
2004 	_tmp20_ = g_strdup ("--output-format");
2005 	_tmp21_ = g_strdup ("xml");
2006 	_tmp22_ = g_strdup ("--sgml-mode");
2007 	_tmp23_ = g_strdup ("--main-sgml-file");
2008 	_tmp24_ = self->priv->settings;
2009 	_tmp25_ = _tmp24_->pkg_name;
2010 	_tmp26_ = g_strdup_printf ("%s-docs.xml", _tmp25_);
2011 	_tmp27_ = g_strdup ("--name-space");
2012 	_tmp28_ = self->priv->settings;
2013 	_tmp29_ = _tmp28_->pkg_name;
2014 	_tmp30_ = g_strdup (_tmp29_);
2015 	_tmp31_ = g_new0 (gchar*, 12 + 1);
2016 	_tmp31_[0] = _tmp12_;
2017 	_tmp31_[1] = _tmp13_;
2018 	_tmp31_[2] = _tmp16_;
2019 	_tmp31_[3] = _tmp17_;
2020 	_tmp31_[4] = _tmp19_;
2021 	_tmp31_[5] = _tmp20_;
2022 	_tmp31_[6] = _tmp21_;
2023 	_tmp31_[7] = _tmp22_;
2024 	_tmp31_[8] = _tmp23_;
2025 	_tmp31_[9] = _tmp26_;
2026 	_tmp31_[10] = _tmp27_;
2027 	_tmp31_[11] = _tmp30_;
2028 	args = _tmp31_;
2029 	args_length1 = 12;
2030 	_args_size_ = args_length1;
2031 	{
2032 		ValadocSettings* _tmp32_;
2033 		const gchar* _tmp33_;
2034 		gchar** _tmp34_;
2035 		gint _tmp34__length1;
2036 		_tmp32_ = self->priv->settings;
2037 		_tmp33_ = _tmp32_->path;
2038 		_tmp34_ = args;
2039 		_tmp34__length1 = args_length1;
2040 		g_spawn_sync (_tmp33_, _tmp34_, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, NULL, &_inner_error0_);
2041 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2042 			goto __catch0_g_error;
2043 		}
2044 	}
2045 	goto __finally0;
2046 	__catch0_g_error:
2047 	{
2048 		GError* e = NULL;
2049 		ValadocErrorReporter* _tmp35_;
2050 		GError* _tmp36_;
2051 		const gchar* _tmp37_;
2052 		e = _inner_error0_;
2053 		_inner_error0_ = NULL;
2054 		_tmp35_ = self->priv->reporter;
2055 		_tmp36_ = e;
2056 		_tmp37_ = _tmp36_->message;
2057 		valadoc_error_reporter_simple_error (_tmp35_, "gtkdoc-mkdb", "%s", _tmp37_);
2058 		result = FALSE;
2059 		_g_error_free0 (e);
2060 		args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
2061 		_g_free0 (code_dir);
2062 		_g_free0 (main_file);
2063 		return result;
2064 	}
2065 	__finally0:
2066 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
2067 		gboolean _tmp38_ = FALSE;
2068 		args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
2069 		_g_free0 (code_dir);
2070 		_g_free0 (main_file);
2071 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
2072 		g_clear_error (&_inner_error0_);
2073 		return _tmp38_;
2074 	}
2075 	if (must_update_main_file) {
2076 		gchar* contents = NULL;
2077 		ValadocSettings* _tmp46_;
2078 		const gchar* _tmp47_;
2079 		const gchar* _tmp52_;
2080 		ValadocSettings* _tmp53_;
2081 		const gchar* _tmp54_;
2082 		gchar* _tmp55_;
2083 		gchar* _tmp56_;
2084 		gchar* _tmp57_;
2085 		GtkdocGenerator* _tmp58_;
2086 		ValaList* _tmp59_;
2087 		gint _tmp60_;
2088 		gint _tmp61_;
2089 		{
2090 			const gchar* _tmp39_;
2091 			gchar* _tmp40_ = NULL;
2092 			_tmp39_ = main_file;
2093 			g_file_get_contents (_tmp39_, &_tmp40_, NULL, &_inner_error0_);
2094 			_g_free0 (contents);
2095 			contents = _tmp40_;
2096 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2097 				goto __catch1_g_error;
2098 			}
2099 		}
2100 		goto __finally1;
2101 		__catch1_g_error:
2102 		{
2103 			GError* e = NULL;
2104 			ValadocErrorReporter* _tmp41_;
2105 			const gchar* _tmp42_;
2106 			GError* _tmp43_;
2107 			const gchar* _tmp44_;
2108 			e = _inner_error0_;
2109 			_inner_error0_ = NULL;
2110 			_tmp41_ = self->priv->reporter;
2111 			_tmp42_ = main_file;
2112 			_tmp43_ = e;
2113 			_tmp44_ = _tmp43_->message;
2114 			valadoc_error_reporter_simple_error (_tmp41_, "GtkDoc", "Error while reading main file '%s' contents: %s", _tmp42_, _tmp44_);
2115 			result = FALSE;
2116 			_g_error_free0 (e);
2117 			_g_free0 (contents);
2118 			args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
2119 			_g_free0 (code_dir);
2120 			_g_free0 (main_file);
2121 			return result;
2122 		}
2123 		__finally1:
2124 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2125 			gboolean _tmp45_ = FALSE;
2126 			_g_free0 (contents);
2127 			args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
2128 			_g_free0 (code_dir);
2129 			_g_free0 (main_file);
2130 			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
2131 			g_clear_error (&_inner_error0_);
2132 			return _tmp45_;
2133 		}
2134 		_tmp46_ = self->priv->settings;
2135 		_tmp47_ = _tmp46_->pkg_version;
2136 		if (_tmp47_ != NULL) {
2137 			const gchar* _tmp48_;
2138 			ValadocSettings* _tmp49_;
2139 			const gchar* _tmp50_;
2140 			gchar* _tmp51_;
2141 			_tmp48_ = contents;
2142 			_tmp49_ = self->priv->settings;
2143 			_tmp50_ = _tmp49_->pkg_version;
2144 			_tmp51_ = string_replace (_tmp48_, "[VERSION]", _tmp50_);
2145 			_g_free0 (contents);
2146 			contents = _tmp51_;
2147 		}
2148 		_tmp52_ = contents;
2149 		_tmp53_ = self->priv->settings;
2150 		_tmp54_ = _tmp53_->pkg_name;
2151 		_tmp55_ = g_strdup_printf ("%s API Reference", _tmp54_);
2152 		_tmp56_ = _tmp55_;
2153 		_tmp57_ = string_replace (_tmp52_, "[Insert title here]", _tmp56_);
2154 		_g_free0 (contents);
2155 		contents = _tmp57_;
2156 		_g_free0 (_tmp56_);
2157 		_tmp58_ = self->priv->generator;
2158 		_tmp59_ = _tmp58_->dbus_interfaces;
2159 		_tmp60_ = vala_collection_get_size ((ValaCollection*) _tmp59_);
2160 		_tmp61_ = _tmp60_;
2161 		if (_tmp61_ > 0) {
2162 			GString* builder = NULL;
2163 			GString* _tmp62_;
2164 			GString* _tmp63_;
2165 			ValadocSettings* _tmp64_;
2166 			const gchar* _tmp65_;
2167 			gchar* hierarchy_file = NULL;
2168 			ValadocSettings* _tmp81_;
2169 			const gchar* _tmp82_;
2170 			ValadocSettings* _tmp83_;
2171 			const gchar* _tmp84_;
2172 			gchar* _tmp85_;
2173 			gchar* _tmp86_;
2174 			gchar* _tmp87_;
2175 			gchar* _tmp88_;
2176 			const gchar* _tmp89_;
2177 			_tmp62_ = g_string_new ("");
2178 			builder = _tmp62_;
2179 			_tmp63_ = builder;
2180 			_tmp64_ = self->priv->settings;
2181 			_tmp65_ = _tmp64_->pkg_name;
2182 			g_string_append_printf (_tmp63_, "\n<chapter>\n<title>%s D-Bus API Reference</title>\n", _tmp65_);
2183 			{
2184 				ValaList* _iface_list = NULL;
2185 				GtkdocGenerator* _tmp66_;
2186 				ValaList* _tmp67_;
2187 				ValaList* _tmp68_;
2188 				gint _iface_size = 0;
2189 				ValaList* _tmp69_;
2190 				gint _tmp70_;
2191 				gint _tmp71_;
2192 				gint _iface_index = 0;
2193 				_tmp66_ = self->priv->generator;
2194 				_tmp67_ = _tmp66_->dbus_interfaces;
2195 				_tmp68_ = _vala_iterable_ref0 (_tmp67_);
2196 				_iface_list = _tmp68_;
2197 				_tmp69_ = _iface_list;
2198 				_tmp70_ = vala_collection_get_size ((ValaCollection*) _tmp69_);
2199 				_tmp71_ = _tmp70_;
2200 				_iface_size = _tmp71_;
2201 				_iface_index = -1;
2202 				while (TRUE) {
2203 					gint _tmp72_;
2204 					gint _tmp73_;
2205 					GtkdocDBusInterface* iface = NULL;
2206 					ValaList* _tmp74_;
2207 					gpointer _tmp75_;
2208 					GString* _tmp76_;
2209 					GtkdocDBusInterface* _tmp77_;
2210 					const gchar* _tmp78_;
2211 					gchar* _tmp79_;
2212 					gchar* _tmp80_;
2213 					_iface_index = _iface_index + 1;
2214 					_tmp72_ = _iface_index;
2215 					_tmp73_ = _iface_size;
2216 					if (!(_tmp72_ < _tmp73_)) {
2217 						break;
2218 					}
2219 					_tmp74_ = _iface_list;
2220 					_tmp75_ = vala_list_get (_tmp74_, _iface_index);
2221 					iface = (GtkdocDBusInterface*) _tmp75_;
2222 					_tmp76_ = builder;
2223 					_tmp77_ = iface;
2224 					_tmp78_ = _tmp77_->name;
2225 					_tmp79_ = gtkdoc_to_docbook_id (_tmp78_);
2226 					_tmp80_ = _tmp79_;
2227 					g_string_append_printf (_tmp76_, "<xi:include href=\"xml/%s.xml\"/>\n", _tmp80_);
2228 					_g_free0 (_tmp80_);
2229 					_gtkdoc_dbus_interface_unref0 (iface);
2230 				}
2231 				_vala_iterable_unref0 (_iface_list);
2232 			}
2233 			_tmp81_ = self->priv->settings;
2234 			_tmp82_ = _tmp81_->path;
2235 			_tmp83_ = self->priv->settings;
2236 			_tmp84_ = _tmp83_->pkg_name;
2237 			_tmp85_ = g_strdup_printf ("%s.hierarchy", _tmp84_);
2238 			_tmp86_ = _tmp85_;
2239 			_tmp87_ = g_build_filename (_tmp82_, _tmp86_, NULL);
2240 			_tmp88_ = _tmp87_;
2241 			_g_free0 (_tmp86_);
2242 			hierarchy_file = _tmp88_;
2243 			_tmp89_ = hierarchy_file;
2244 			if (g_file_test (_tmp89_, G_FILE_TEST_EXISTS)) {
2245 				GString* _tmp90_;
2246 				const gchar* _tmp91_;
2247 				GString* _tmp92_;
2248 				const gchar* _tmp93_;
2249 				gchar* _tmp94_;
2250 				_tmp90_ = builder;
2251 				g_string_append (_tmp90_, "</chapter>\n<chapter id=\"object-tree\">");
2252 				_tmp91_ = contents;
2253 				_tmp92_ = builder;
2254 				_tmp93_ = _tmp92_->str;
2255 				_tmp94_ = string_replace (_tmp91_, "<chapter id=\"object-tree\">", _tmp93_);
2256 				_g_free0 (contents);
2257 				contents = _tmp94_;
2258 			} else {
2259 				GString* _tmp95_;
2260 				const gchar* _tmp96_;
2261 				GString* _tmp97_;
2262 				const gchar* _tmp98_;
2263 				gchar* _tmp99_;
2264 				_tmp95_ = builder;
2265 				g_string_append (_tmp95_, "</chapter>\n<index id=\"api-index-full\">");
2266 				_tmp96_ = contents;
2267 				_tmp97_ = builder;
2268 				_tmp98_ = _tmp97_->str;
2269 				_tmp99_ = string_replace (_tmp96_, "<index id=\"api-index-full\">", _tmp98_);
2270 				_g_free0 (contents);
2271 				contents = _tmp99_;
2272 			}
2273 			_g_free0 (hierarchy_file);
2274 			_g_string_free0 (builder);
2275 		}
2276 		{
2277 			const gchar* _tmp100_;
2278 			const gchar* _tmp101_;
2279 			_tmp100_ = main_file;
2280 			_tmp101_ = contents;
2281 			g_file_set_contents (_tmp100_, _tmp101_, (gssize) -1, &_inner_error0_);
2282 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2283 				goto __catch2_g_error;
2284 			}
2285 		}
2286 		goto __finally2;
2287 		__catch2_g_error:
2288 		{
2289 			GError* e = NULL;
2290 			ValadocErrorReporter* _tmp102_;
2291 			const gchar* _tmp103_;
2292 			GError* _tmp104_;
2293 			const gchar* _tmp105_;
2294 			e = _inner_error0_;
2295 			_inner_error0_ = NULL;
2296 			_tmp102_ = self->priv->reporter;
2297 			_tmp103_ = main_file;
2298 			_tmp104_ = e;
2299 			_tmp105_ = _tmp104_->message;
2300 			valadoc_error_reporter_simple_error (_tmp102_, "GtkDoc", "Error while writing main file '%s' contents: %s", _tmp103_, _tmp105_);
2301 			result = FALSE;
2302 			_g_error_free0 (e);
2303 			_g_free0 (contents);
2304 			args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
2305 			_g_free0 (code_dir);
2306 			_g_free0 (main_file);
2307 			return result;
2308 		}
2309 		__finally2:
2310 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2311 			gboolean _tmp106_ = FALSE;
2312 			_g_free0 (contents);
2313 			args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
2314 			_g_free0 (code_dir);
2315 			_g_free0 (main_file);
2316 			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
2317 			g_clear_error (&_inner_error0_);
2318 			return _tmp106_;
2319 		}
2320 		_g_free0 (contents);
2321 	}
2322 	result = TRUE;
2323 	args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
2324 	_g_free0 (code_dir);
2325 	_g_free0 (main_file);
2326 	return result;
2327 }
2328 
2329 static gboolean
gtkdoc_director_mkhtml(GtkdocDirector * self)2330 gtkdoc_director_mkhtml (GtkdocDirector* self)
2331 {
2332 	gchar* html_dir = NULL;
2333 	ValadocSettings* _tmp0_;
2334 	const gchar* _tmp1_;
2335 	gchar* _tmp2_;
2336 	const gchar* _tmp3_;
2337 	GError* _inner_error0_ = NULL;
2338 	gboolean result = FALSE;
2339 	g_return_val_if_fail (self != NULL, FALSE);
2340 	if (gtkdoc_config_nohtml) {
2341 		result = TRUE;
2342 		return result;
2343 	}
2344 	_tmp0_ = self->priv->settings;
2345 	_tmp1_ = _tmp0_->path;
2346 	_tmp2_ = g_build_filename (_tmp1_, "html", NULL);
2347 	html_dir = _tmp2_;
2348 	_tmp3_ = html_dir;
2349 	g_mkdir_with_parents (_tmp3_, 0755);
2350 	{
2351 		const gchar* _tmp4_;
2352 		gchar* _tmp5_;
2353 		ValadocSettings* _tmp6_;
2354 		const gchar* _tmp7_;
2355 		gchar* _tmp8_;
2356 		ValadocSettings* _tmp9_;
2357 		const gchar* _tmp10_;
2358 		gchar* _tmp11_;
2359 		gchar** _tmp12_;
2360 		gchar** _tmp13_;
2361 		gint _tmp13__length1;
2362 		_tmp4_ = html_dir;
2363 		_tmp5_ = g_strdup ("gtkdoc-mkhtml");
2364 		_tmp6_ = self->priv->settings;
2365 		_tmp7_ = _tmp6_->pkg_name;
2366 		_tmp8_ = g_strdup (_tmp7_);
2367 		_tmp9_ = self->priv->settings;
2368 		_tmp10_ = _tmp9_->pkg_name;
2369 		_tmp11_ = g_strdup_printf ("../%s-docs.xml", _tmp10_);
2370 		_tmp12_ = g_new0 (gchar*, 3 + 1);
2371 		_tmp12_[0] = _tmp5_;
2372 		_tmp12_[1] = _tmp8_;
2373 		_tmp12_[2] = _tmp11_;
2374 		_tmp13_ = _tmp12_;
2375 		_tmp13__length1 = 3;
2376 		g_spawn_sync (_tmp4_, _tmp13_, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, NULL, &_inner_error0_);
2377 		_tmp13_ = (_vala_array_free (_tmp13_, _tmp13__length1, (GDestroyNotify) g_free), NULL);
2378 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2379 			goto __catch0_g_error;
2380 		}
2381 	}
2382 	goto __finally0;
2383 	__catch0_g_error:
2384 	{
2385 		GError* e = NULL;
2386 		ValadocErrorReporter* _tmp14_;
2387 		GError* _tmp15_;
2388 		const gchar* _tmp16_;
2389 		e = _inner_error0_;
2390 		_inner_error0_ = NULL;
2391 		_tmp14_ = self->priv->reporter;
2392 		_tmp15_ = e;
2393 		_tmp16_ = _tmp15_->message;
2394 		valadoc_error_reporter_simple_error (_tmp14_, "gtkdoc-mkhtml", "%s", _tmp16_);
2395 		result = FALSE;
2396 		_g_error_free0 (e);
2397 		_g_free0 (html_dir);
2398 		return result;
2399 	}
2400 	__finally0:
2401 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
2402 		gboolean _tmp17_ = FALSE;
2403 		_g_free0 (html_dir);
2404 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
2405 		g_clear_error (&_inner_error0_);
2406 		return _tmp17_;
2407 	}
2408 	{
2409 		ValadocSettings* _tmp18_;
2410 		const gchar* _tmp19_;
2411 		gchar* _tmp20_;
2412 		gchar* _tmp21_;
2413 		ValadocSettings* _tmp22_;
2414 		const gchar* _tmp23_;
2415 		gchar* _tmp24_;
2416 		gchar* _tmp25_;
2417 		const gchar* _tmp26_;
2418 		gchar* _tmp27_;
2419 		gchar* _tmp28_;
2420 		const gchar* _tmp29_;
2421 		gchar* _tmp30_;
2422 		gchar** _tmp31_;
2423 		gchar** _tmp32_;
2424 		gint _tmp32__length1;
2425 		_tmp18_ = self->priv->settings;
2426 		_tmp19_ = _tmp18_->path;
2427 		_tmp20_ = g_strdup ("gtkdoc-fixxref");
2428 		_tmp21_ = g_strdup ("--module");
2429 		_tmp22_ = self->priv->settings;
2430 		_tmp23_ = _tmp22_->pkg_name;
2431 		_tmp24_ = g_strdup (_tmp23_);
2432 		_tmp25_ = g_strdup ("--module-dir");
2433 		_tmp26_ = html_dir;
2434 		_tmp27_ = g_strdup (_tmp26_);
2435 		_tmp28_ = g_strdup ("--html-dir");
2436 		_tmp29_ = html_dir;
2437 		_tmp30_ = g_strdup (_tmp29_);
2438 		_tmp31_ = g_new0 (gchar*, 7 + 1);
2439 		_tmp31_[0] = _tmp20_;
2440 		_tmp31_[1] = _tmp21_;
2441 		_tmp31_[2] = _tmp24_;
2442 		_tmp31_[3] = _tmp25_;
2443 		_tmp31_[4] = _tmp27_;
2444 		_tmp31_[5] = _tmp28_;
2445 		_tmp31_[6] = _tmp30_;
2446 		_tmp32_ = _tmp31_;
2447 		_tmp32__length1 = 7;
2448 		g_spawn_sync (_tmp19_, _tmp32_, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, NULL, &_inner_error0_);
2449 		_tmp32_ = (_vala_array_free (_tmp32_, _tmp32__length1, (GDestroyNotify) g_free), NULL);
2450 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2451 			goto __catch1_g_error;
2452 		}
2453 	}
2454 	goto __finally1;
2455 	__catch1_g_error:
2456 	{
2457 		GError* e = NULL;
2458 		ValadocErrorReporter* _tmp33_;
2459 		GError* _tmp34_;
2460 		const gchar* _tmp35_;
2461 		e = _inner_error0_;
2462 		_inner_error0_ = NULL;
2463 		_tmp33_ = self->priv->reporter;
2464 		_tmp34_ = e;
2465 		_tmp35_ = _tmp34_->message;
2466 		valadoc_error_reporter_simple_error (_tmp33_, "gtkdoc-fixxref", "%s", _tmp35_);
2467 		result = FALSE;
2468 		_g_error_free0 (e);
2469 		_g_free0 (html_dir);
2470 		return result;
2471 	}
2472 	__finally1:
2473 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
2474 		gboolean _tmp36_ = FALSE;
2475 		_g_free0 (html_dir);
2476 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
2477 		g_clear_error (&_inner_error0_);
2478 		return _tmp36_;
2479 	}
2480 	result = TRUE;
2481 	_g_free0 (html_dir);
2482 	return result;
2483 }
2484 
2485 GtkdocDirector*
gtkdoc_director_construct(GType object_type)2486 gtkdoc_director_construct (GType object_type)
2487 {
2488 	GtkdocDirector * self = NULL;
2489 	self = (GtkdocDirector*) g_object_new (object_type, NULL);
2490 	return self;
2491 }
2492 
2493 GtkdocDirector*
gtkdoc_director_new(void)2494 gtkdoc_director_new (void)
2495 {
2496 	return gtkdoc_director_construct (GTKDOC_TYPE_DIRECTOR);
2497 }
2498 
2499 static void
gtkdoc_director_class_init(GtkdocDirectorClass * klass,gpointer klass_data)2500 gtkdoc_director_class_init (GtkdocDirectorClass * klass,
2501                             gpointer klass_data)
2502 {
2503 	gtkdoc_director_parent_class = g_type_class_peek_parent (klass);
2504 	g_type_class_adjust_private_offset (klass, &GtkdocDirector_private_offset);
2505 	G_OBJECT_CLASS (klass)->finalize = gtkdoc_director_finalize;
2506 }
2507 
2508 static void
gtkdoc_director_valadoc_doclet_interface_init(ValadocDocletIface * iface,gpointer iface_data)2509 gtkdoc_director_valadoc_doclet_interface_init (ValadocDocletIface * iface,
2510                                                gpointer iface_data)
2511 {
2512 	gtkdoc_director_valadoc_doclet_parent_iface = g_type_interface_peek_parent (iface);
2513 	iface->process = (void (*) (ValadocDoclet*, ValadocSettings*, ValadocApiTree*, ValadocErrorReporter*)) gtkdoc_director_real_process;
2514 }
2515 
2516 static void
gtkdoc_director_instance_init(GtkdocDirector * self,gpointer klass)2517 gtkdoc_director_instance_init (GtkdocDirector * self,
2518                                gpointer klass)
2519 {
2520 	self->priv = gtkdoc_director_get_instance_private (self);
2521 }
2522 
2523 static void
gtkdoc_director_finalize(GObject * obj)2524 gtkdoc_director_finalize (GObject * obj)
2525 {
2526 	GtkdocDirector * self;
2527 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTKDOC_TYPE_DIRECTOR, GtkdocDirector);
2528 	_g_object_unref0 (self->priv->reporter);
2529 	_g_object_unref0 (self->priv->settings);
2530 	_valadoc_api_tree_unref0 (self->priv->tree);
2531 	_g_object_unref0 (self->priv->generator);
2532 	self->priv->vala_headers = (_vala_array_free (self->priv->vala_headers, self->priv->vala_headers_length1, (GDestroyNotify) g_free), NULL);
2533 	self->priv->c_headers = (_vala_array_free (self->priv->c_headers, self->priv->c_headers_length1, (GDestroyNotify) g_free), NULL);
2534 	G_OBJECT_CLASS (gtkdoc_director_parent_class)->finalize (obj);
2535 }
2536 
2537 static GType
gtkdoc_director_get_type_once(void)2538 gtkdoc_director_get_type_once (void)
2539 {
2540 	static const GTypeInfo g_define_type_info = { sizeof (GtkdocDirectorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtkdoc_director_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GtkdocDirector), 0, (GInstanceInitFunc) gtkdoc_director_instance_init, NULL };
2541 	static const GInterfaceInfo valadoc_doclet_info = { (GInterfaceInitFunc) gtkdoc_director_valadoc_doclet_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
2542 	GType gtkdoc_director_type_id;
2543 	gtkdoc_director_type_id = g_type_register_static (G_TYPE_OBJECT, "GtkdocDirector", &g_define_type_info, 0);
2544 	g_type_add_interface_static (gtkdoc_director_type_id, VALADOC_TYPE_DOCLET, &valadoc_doclet_info);
2545 	GtkdocDirector_private_offset = g_type_add_instance_private (gtkdoc_director_type_id, sizeof (GtkdocDirectorPrivate));
2546 	return gtkdoc_director_type_id;
2547 }
2548 
2549 GType
gtkdoc_director_get_type(void)2550 gtkdoc_director_get_type (void)
2551 {
2552 	static volatile gsize gtkdoc_director_type_id__volatile = 0;
2553 	if (g_once_init_enter (&gtkdoc_director_type_id__volatile)) {
2554 		GType gtkdoc_director_type_id;
2555 		gtkdoc_director_type_id = gtkdoc_director_get_type_once ();
2556 		g_once_init_leave (&gtkdoc_director_type_id__volatile, gtkdoc_director_type_id);
2557 	}
2558 	return gtkdoc_director_type_id__volatile;
2559 }
2560 
2561 GType
register_plugin(ValadocModuleLoader * module_loader)2562 register_plugin (ValadocModuleLoader* module_loader)
2563 {
2564 	GType result = 0UL;
2565 	g_return_val_if_fail (module_loader != NULL, 0UL);
2566 	result = GTKDOC_TYPE_DIRECTOR;
2567 	return result;
2568 }
2569 
2570 static void
_vala_array_destroy(gpointer array,gint array_length,GDestroyNotify destroy_func)2571 _vala_array_destroy (gpointer array,
2572                      gint array_length,
2573                      GDestroyNotify destroy_func)
2574 {
2575 	if ((array != NULL) && (destroy_func != NULL)) {
2576 		gint i;
2577 		for (i = 0; i < array_length; i = i + 1) {
2578 			if (((gpointer*) array)[i] != NULL) {
2579 				destroy_func (((gpointer*) array)[i]);
2580 			}
2581 		}
2582 	}
2583 }
2584 
2585 static void
_vala_array_free(gpointer array,gint array_length,GDestroyNotify destroy_func)2586 _vala_array_free (gpointer array,
2587                   gint array_length,
2588                   GDestroyNotify destroy_func)
2589 {
2590 	_vala_array_destroy (array, array_length, destroy_func);
2591 	g_free (array);
2592 }
2593 
2594 static gint
_vala_array_length(gpointer array)2595 _vala_array_length (gpointer array)
2596 {
2597 	gint length;
2598 	length = 0;
2599 	if (array) {
2600 		while (((gpointer*) array)[length]) {
2601 			length++;
2602 		}
2603 	}
2604 	return length;
2605 }
2606 
2607