2 write meson build so that the language server works..
7 public class Meson : Object {
10 public Meson(Gtk project)
12 this.project = project;
17 this.has_resources = false;
18 var project_name = this.project.name;
19 var project_version = this.project.version;
20 var project_licence = this.project.licence;
23 foreach(var p in this.project.packages) {
25 deps += " valac.find_library('" + p + "'),\n";
27 deps += " dependency('" + p + "'),\n";
31 dependency('glib-2.0'),
32 dependency('gobject-2.0'), << for others.. ut will this wrok using find_lib for all?
33 valac.find_library('posix'), << for posix
36 // ?? why use subdir ?? seems pointless?
41 foreach(var p in this.project.vapidirs()) {
42 addvapidir += "add_project_arguments(['--vapidir', meson.current_source_dir() / '" + p + "'], language: 'vala')\n";
44 //vapi_dir = meson.current_source_dir() / 'vapi'
45 //add_project_arguments(['--vapidir', vapi_dir], language: 'vala')
51 var resources = this.addResources();
53 foreach(var cg in this.project.compilegroups.values) {
54 targets += this.addTarget(cg);
55 icons += this.addIcons(cg);
56 desktops += this.addDesktop(cg);
63 @"project('$project_name', 'vala', 'c',
64 version: '$project_version',
65 license: '$project_licence',
67 'default_library=static',
68 'c_std=gnu11' # for C subprojects
71 gnome = import('gnome')
73 valac = meson.get_compiler('vala')
75 extra_vala_sources = []
83 # let Vala add the appropriate defines for GLIB_X_X
84 add_project_arguments(['--target-glib=auto'], language: 'vala')
88 conf = configuration_data()
89 conf.set('PROJECT_NAME', meson.project_name())
102 GLib.debug("write meson : %s" , data);
103 // removed.. add_project_arguments(['--enable-gobject-tracing', '--fatal-warnings'], language: 'vala')
106 FileUtils.set_contents(this.project.path + "/meson.build", data, data.length);
107 } catch (GLib.Error e) {
108 GLib.error("failed to save file %s", e.message);
113 string addTarget(GtkValaSettings cg)
116 var str = cg.name + "_src = files([\n";
117 foreach(var s in cg.sources) {
118 var f= this.project.getByPath(this.project.path + "/" + s);
122 var add = f.relTargetName();
123 if (add.length > 0) {
124 str += " '" + add + "',\n";
129 var resources = this.has_resources ? (", " + this.project.name + "_resources") : "";
132 str += cg.writeMesonExe(resources);
137 string addIcons(GtkValaSettings cg)
141 string[] sizes = { "16x16", "22x22","24x24","32x32", "48x48" } ;
142 foreach(var size in sizes) {
143 GLib.debug("looking for on : %s" , "pixmaps/" + size + "/apps/" + cg.name + ".png");
144 var img = this.project.getByRelPath( "pixmaps/" + size + "/apps/" + cg.name + ".png");
148 var path = img.relpath;
152 install_dir: get_option('datadir') + '/icons/hicolor/$size/apps/'
161 gnome.post_install(gtk_update_icon_cache : true)
166 string addDesktop(GtkValaSettings cg)
168 // we could actually generate this!?!
169 var d = this.project.getByRelPath( cg.name + ".desktop");
173 var path = d.relpath;
177 install_dir : get_option('datadir') + '/applications/'
181 bool has_resources = false;
183 string addResources()
186 if (this.project.findDir(this.project.path + "/resources") == null) {
187 GLib.debug("no resources folder");
190 var ar = this.project.pathsUnder("resources");
192 GLib.debug("no paths under resources");
195 // should probably use DOM (but this is a quick dirty fix
196 var gr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<gresources>";
198 foreach(var dir in ar) {
199 if (dir.childfiles.get_n_items() < 1) {
202 var sp = dir.relpath.substring(10);
203 gr += @" <gresource prefix=\"/$sp\">\n";
204 for (var i = 0; i < dir.childfiles.get_n_items(); i++) {
205 var f = (dir.childfiles.get_item(i) as JsRender.JsRender);
206 if (f.xtype != "PlainFile") {
210 gr += @" <file>$fn</file>\n";
212 paths += ("'" + dir.relpath +"'");
213 gr += " </gresource>\n";
217 gr += "</gresources>\n";
219 FileUtils.set_contents(this.project.path + "/resources/gresources.xml", gr, gr.length);
220 } catch (GLib.Error e) {
226 this.has_resources = true;
229 " + this.project.name + "_resources = gnome.compile_resources(
230 '" + this.project.name + "-resources', 'resources/gresources.xml',
231 source_dir: [ " + string.joinv(", ", paths) + " ],
232 c_name: '" + this.project.name + "_resources'