oops typo
[roobuilder] / src / Project / Meson.vala
1 /**
2  write meson build so that the language server works..
3 */
4
5 namespace Project {
6
7         public class Meson : Object {
8         
9                 Gtk project;
10                 public Meson(Gtk project) 
11                 {
12                         this.project = project;
13                 }
14                 
15                 public void save()
16                 {
17                 
18                         var project_name = this.project.name;
19                         var project_version = "1.0"; //this.project.version;
20                         var project_licence = "LGPL"; // this.project.licence
21
22                         var deps = "";
23                         foreach(var p in this.project.packages) {
24                                 if (p == "posix" ) {
25                                         deps += "   valac.find_library('" + p  + "'),\n";
26                                 } else {
27                                         deps += "   dependency('" + p  + "'),\n";                               
28                                 }
29                         }
30                         /*
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
34                         */
35
36                         // ?? why use subdir ?? seems pointless?
37                         
38                         //subdir('src')
39
40                         var addvapidir = "";
41                         foreach(var p in this.project.vapidirs()) {
42                                 addvapidir += "add_project_arguments(['--vapidir',  meson.current_source_dir() / '" + p + "'], language: 'vala')\n";
43                         }
44                         //vapi_dir = meson.current_source_dir() / 'vapi'
45                         //add_project_arguments(['--vapidir', vapi_dir], language: 'vala')
46
47                         var targets = "";
48                         var icons = "";
49                         var desktops = "";
50                         foreach(var cg in this.project.compilegroups.values) {
51                                 targets += this.addTarget(cg);
52                                 icons += this.addIcons(cg);
53                                 desktops += this.addDesktop(cg);
54                         }
55                         var data = 
56
57 @"project('$project_name', 'vala', 'c',
58   version: '$project_version',
59   license: '$project_licence',
60   default_options: [
61     'default_library=static',
62     'c_std=gnu11'       # for C subprojects
63   ]
64 )
65
66 valac = meson.get_compiler('vala')
67
68 extra_vala_sources = []
69
70 $addvapidir
71
72 deps = [
73 $deps
74 ]
75  
76 # let Vala add the appropriate defines for GLIB_X_X
77 add_project_arguments(['--target-glib=auto'], language: 'vala')
78
79  
80
81 conf = configuration_data()
82 conf.set('PROJECT_NAME', meson.project_name())
83
84 $addvapidir
85
86 $icons
87
88 $desktops
89
90 $targets
91 ";              
92
93 GLib.debug("write meson : %s" , data);
94 // removed.. add_project_arguments(['--enable-gobject-tracing', '--fatal-warnings'], language: 'vala')
95
96                         try {
97                                 FileUtils.set_contents(this.project.path + "/meson.build", data, data.length);
98                         } catch (GLib.Error e) {
99                                 GLib.error("failed  to save file %s", e.message);
100                         }
101                                 
102                 }
103                 
104                 string addTarget(GtkValaSettings cg)
105                 {
106                         
107                         var str = cg.name + "_src = files([\n";
108                         foreach(var s in cg.sources) {
109                                 var f= this.project.getByPath(this.project.path + "/" +  s);
110                                 if (f == null) {
111                                         continue;
112                                 }
113                                 var add =  f.relTargetName();
114                                 if (add.length  > 0) {
115                                         str += "   '" + add + "',\n";
116                                 }
117                         }
118                         str += "])\n\n";
119                         
120                         str += cg.name +" = executable('" + cg.name + "',\n"+
121                           "   dependencies: deps,\n"+
122                           "   sources: [ " + cg.name + "_src ],\n"+
123                           "   install: true\n" +
124                           ")\n\n";
125
126                         return str;
127                 }
128                 
129                 string addIcons(GtkValaSettings cg)
130                 {
131                          
132                         var ret = "";
133                         string[] sizes = { "16x16", "22x22","24x24","32x32", "48x48" } ;
134                         foreach(var size in sizes) {
135                                 GLib.debug("looking for on : %s" ,  "pixmaps/" + size + "/apps/" + cg.name  + ".png");
136                                 var img = this.project.getByRelPath( "pixmaps/" + size + "/apps/" + cg.name  + ".png");
137                                 if (img == null) {
138                                         continue;
139                                 }
140                                 var path = img.relpath;
141                                 ret += @"
142 install_data(
143         '$path',
144         install_dir:  get_option('datadir') + '/icons/hicolor/$size/apps/'
145 )
146 ";
147                         }
148                         if (ret == "") {
149                                 return "";
150                         }
151                         ret += "
152 gnome = import('gnome')
153 gnome.post_install(gtk_update_icon_cache : true)
154 ";
155                         return ret;
156                 }
157                 
158                 string addDesktop(GtkValaSettings cg)
159                 {
160                         // we could actually generate this!?!
161                         var d  = this.project.getByRelPath(   cg.name  + ".desktop");
162                         if (d == null) {
163                                 return "";
164                         }
165                         var path = d.relpath;
166                         return @"
167 install_data(
168         '$path',
169         install_dir : get_option('datadir') + '/applications/'
170 )
171 ";
172                 }
173         } 
174 }