Fix #7962 - meson write
[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                         foreach(var cg in this.project.compilegroups.values) {
49                                 targets += this.addTarget(cg);
50                         }
51                         var data = 
52
53 @"project('$project_name', 'vala', 'c',
54   version: '$project_version',
55   license: '$project_licence',
56   default_options: [
57     'default_library=static',
58     'c_std=gnu11'       # for C subprojects
59   ]
60 )
61
62 valac = meson.get_compiler('vala')
63
64 extra_vala_sources = []
65
66 $addvapidir
67
68 deps = [
69 $deps
70 ]
71  
72 # let Vala add the appropriate defines for GLIB_X_X
73 add_project_arguments(['--target-glib=auto'], language: 'vala')
74
75  
76
77 conf = configuration_data()
78 conf.set('PROJECT_NAME', meson.project_name())
79
80 $addvapidir
81
82
83 $targets
84 ";              
85
86
87 // removed.. add_project_arguments(['--enable-gobject-tracing', '--fatal-warnings'], language: 'vala')
88
89                         try {
90                                 FileUtils.set_contents(this.project.path + "/meson.build", data, data.length);
91                         } catch (GLib.Error e) {
92                                 GLib.error("failed  to save file %s", e.message);
93                         }
94                                 
95                 }
96                 
97                 string addTarget(GtkValaSettings cg)
98                 {
99                         
100                         var str = cg.name + "_src = files([\n";
101                         foreach(var s in cg.sources) {
102                                 var f= this.project.getByPath(this.project.path + "/" +  s);
103                                 if (f == null) {
104                                         continue;
105                                 }
106                                 var add =  f.relTargetName();
107                                 if (add.length  > 0) {
108                                         str += "   '" + add + "',\n";
109                                 }
110                         }
111                         str += "])\n\n";
112                         
113                         str += cg.name +" = executable('" + cg.name + "',\n"+
114                           "   dependencies: deps,\n"+
115                           "   sources: [ " + cg.name + "_src ],\n"+
116                           "   install: true\n" +
117                           ")\n\n";
118
119                         return str;
120                 }
121         }
122 }