1 module gen.dxxtool.autogen;
2 
3 private import std.path : dirName;
4 private import std.file : mkdirRecurse;
5 
6 private import dxx.util.minitemplt;
7 private import dxx.util.log;
8 private import dxx.app.properties;
9 private import dxx.app.vaynetmplt;
10 private import dxx.app.resource;
11 private import dxx.app.resource.resource;
12 private import dxx.app.resource.project;
13 
14 enum _autogenerator = [
15   "runtime","generator","shellTarget","libraryTarget","autogen","appmodel",
16 ];
17 
18 alias _lookup=Properties.__;
19 
20 string _expand(alias x)() {
21   // Expand identifiers in single braces, in the output filename, at runtime
22   //return miniInterpreter!(_lookup,"{","}")(x);
23   return miniInterpreter!(_lookup)(x);
24   //return x;
25 }
26 
27 
28 
29 // Generator runtime
30 
31 mixin template gen_runtime(Vars...) {
32   auto gen_runtime() {
33     
34     /* {{app.genSourceDir}}/{{app.ID}}build.d */
35     MsgLog.info("gen:",_expand!"{{app.genSourceDir}}/{{app.ID}}build.d");
36     dirName(_expand!"{{app.genSourceDir}}/{{app.ID}}build.d").mkdirRecurse;
37     renderVayneToFile!("resources/templates/model/runtime/{{app.genSourceDir}}/{{app.ID}}build.d.vayne",Vars)(_expand!"{{app.genSourceDir}}/{{app.ID}}build.d");
38     
39     /* {{app.genSourceDir}}/{{app.ID}}base.d */
40     MsgLog.info("gen:",_expand!"{{app.genSourceDir}}/{{app.ID}}base.d");
41     dirName(_expand!"{{app.genSourceDir}}/{{app.ID}}base.d").mkdirRecurse;
42     renderVayneToFile!("resources/templates/model/runtime/{{app.genSourceDir}}/{{app.ID}}base.d.vayne",Vars)(_expand!"{{app.genSourceDir}}/{{app.ID}}base.d");
43     
44     /* {{app.sourceDir}}/{{app.ID}}mod.d */
45     MsgLog.info("gen:",_expand!"{{app.sourceDir}}/{{app.ID}}mod.d");
46     dirName(_expand!"{{app.sourceDir}}/{{app.ID}}mod.d").mkdirRecurse;
47     renderVayneToFile!("resources/templates/model/runtime/{{app.sourceDir}}/{{app.ID}}mod.d.vayne",Vars)(_expand!"{{app.sourceDir}}/{{app.ID}}mod.d");
48     
49   }
50 }
51 
52 
53 
54 // Generator generator
55 
56 mixin template gen_generator(Vars...) {
57   auto gen_generator() {
58     
59     /* {{app.genSourceDir}}/{{app.generatorModuleName}}.d */
60     MsgLog.info("gen:",_expand!"{{app.genSourceDir}}/{{app.generatorModuleName}}.d");
61     dirName(_expand!"{{app.genSourceDir}}/{{app.generatorModuleName}}.d").mkdirRecurse;
62     renderVayneToFile!("resources/templates/model/generator/{{app.genSourceDir}}/{{app.generatorModuleName}}.d.vayne",Vars)(_expand!"{{app.genSourceDir}}/{{app.generatorModuleName}}.d");
63     
64     /* {{app.workflowDir}}/autogen.wf */
65     MsgLog.info("gen:",_expand!"{{app.workflowDir}}/autogen.wf");
66     dirName(_expand!"{{app.workflowDir}}/autogen.wf").mkdirRecurse;
67     renderVayneToFile!("resources/templates/model/generator/{{app.workflowDir}}/autogen.wf.vayne",Vars)(_expand!"{{app.workflowDir}}/autogen.wf");
68     
69   }
70 }
71 
72 
73 
74 // Generator shellTarget
75 
76 mixin template gen_shellTarget(Vars...) {
77   auto gen_shellTarget() {
78     
79     /* dub.json */
80     MsgLog.info("gen:",_expand!"dub.json");
81     dirName(_expand!"dub.json").mkdirRecurse;
82     renderVayneToFile!("resources/templates/targets/shell/dub.json.vayne",Vars)(_expand!"dub.json");
83     
84     /* source/{app.packageDir}/{app.ID}.d */
85     MsgLog.info("gen:",_expand!"source/{app.packageDir}/{app.ID}.d");
86     dirName(_expand!"source/{app.packageDir}/{app.ID}.d").mkdirRecurse;
87     renderVayneToFile!("resources/templates/targets/shell/source/{app.packageDir}/{app.ID}.d.vayne",Vars)(_expand!"source/{app.packageDir}/{app.ID}.d");
88     
89   }
90 }
91 
92 
93 
94 // Generator libraryTarget
95 
96 mixin template gen_libraryTarget(Vars...) {
97   auto gen_libraryTarget() {
98     
99     /* {app.resourceDir}/{app.ID}-dev.ini */
100     MsgLog.info("gen:",_expand!"{app.resourceDir}/{app.ID}-dev.ini");
101     dirName(_expand!"{app.resourceDir}/{app.ID}-dev.ini").mkdirRecurse;
102     renderVayneToFile!("resources/templates/targets/library/{app.resourceDir}/{app.ID}-dev.ini.vayne",Vars)(_expand!"{app.resourceDir}/{app.ID}-dev.ini");
103     
104     /* dale.d */
105     MsgLog.info("gen:",_expand!"dale.d");
106     dirName(_expand!"dale.d").mkdirRecurse;
107     renderVayneToFile!("resources/templates/targets/library/dale.d.vayne",Vars)(_expand!"dale.d");
108     
109     /* {app.resourceDir}/{app.ID}.ini */
110     MsgLog.info("gen:",_expand!"{app.resourceDir}/{app.ID}.ini");
111     dirName(_expand!"{app.resourceDir}/{app.ID}.ini").mkdirRecurse;
112     renderVayneToFile!("resources/templates/targets/library/{app.resourceDir}/{app.ID}.ini.vayne",Vars)(_expand!"{app.resourceDir}/{app.ID}.ini");
113     
114     /* {app.resourceDir}/{app.ID}.json */
115     MsgLog.info("gen:",_expand!"{app.resourceDir}/{app.ID}.json");
116     dirName(_expand!"{app.resourceDir}/{app.ID}.json").mkdirRecurse;
117     renderVayneToFile!("resources/templates/targets/library/{app.resourceDir}/{app.ID}.json.vayne",Vars)(_expand!"{app.resourceDir}/{app.ID}.json");
118     
119     /* dub.json */
120     MsgLog.info("gen:",_expand!"dub.json");
121     dirName(_expand!"dub.json").mkdirRecurse;
122     renderVayneToFile!("resources/templates/targets/library/dub.json.vayne",Vars)(_expand!"dub.json");
123     
124     /* {app.resourceDir}/{app.ID}-dev.json */
125     MsgLog.info("gen:",_expand!"{app.resourceDir}/{app.ID}-dev.json");
126     dirName(_expand!"{app.resourceDir}/{app.ID}-dev.json").mkdirRecurse;
127     renderVayneToFile!("resources/templates/targets/library/{app.resourceDir}/{app.ID}-dev.json.vayne",Vars)(_expand!"{app.resourceDir}/{app.ID}-dev.json");
128     
129     /* {app.resourceDir}/{app.ID}-enGB.ini */
130     MsgLog.info("gen:",_expand!"{app.resourceDir}/{app.ID}-enGB.ini");
131     dirName(_expand!"{app.resourceDir}/{app.ID}-enGB.ini").mkdirRecurse;
132     renderVayneToFile!("resources/templates/targets/library/{app.resourceDir}/{app.ID}-enGB.ini.vayne",Vars)(_expand!"{app.resourceDir}/{app.ID}-enGB.ini");
133     
134   }
135 }
136 
137 
138 
139 // Generator autogen
140 
141 mixin template gen_autogen(Vars...) {
142   auto gen_autogen() {
143     
144     /* autogen.d */
145     MsgLog.info("gen:",_expand!"autogen.d");
146     dirName(_expand!"autogen.d").mkdirRecurse;
147     renderVayneToFile!("resources/templates/dxx/autogen/autogen.d.vayne",Vars)(_expand!"autogen.d");
148     
149   }
150 }
151 
152 
153 
154 // Generator appmodel
155 
156 mixin template gen_appmodel(Vars...) {
157   auto gen_appmodel() {
158     
159     /* {app.resourceDir}/{app.ID}.json */
160     MsgLog.info("gen:",_expand!"{app.resourceDir}/{app.ID}.json");
161     dirName(_expand!"{app.resourceDir}/{app.ID}.json").mkdirRecurse;
162     renderVayneToFile!("resources/templates/model/application/{app.resourceDir}/{app.ID}.json.vayne",Vars)(_expand!"{app.resourceDir}/{app.ID}.json");
163     
164     /* {app.sourceDir}/{app.ID}/app.d */
165     MsgLog.info("gen:",_expand!"{app.sourceDir}/{app.ID}/app.d");
166     dirName(_expand!"{app.sourceDir}/{app.ID}/app.d").mkdirRecurse;
167     renderVayneToFile!("resources/templates/model/application/{app.sourceDir}/{app.ID}/app.d.vayne",Vars)(_expand!"{app.sourceDir}/{app.ID}/app.d");
168     
169     /* {app.resourceDir}/dxx-dev.json */
170     MsgLog.info("gen:",_expand!"{app.resourceDir}/dxx-dev.json");
171     dirName(_expand!"{app.resourceDir}/dxx-dev.json").mkdirRecurse;
172     renderVayneToFile!("resources/templates/model/application/{app.resourceDir}/dxx-dev.json.vayne",Vars)(_expand!"{app.resourceDir}/dxx-dev.json");
173     
174     /* {app.resourceDir}/{app.ID}-enGB.ini */
175     MsgLog.info("gen:",_expand!"{app.resourceDir}/{app.ID}-enGB.ini");
176     dirName(_expand!"{app.resourceDir}/{app.ID}-enGB.ini").mkdirRecurse;
177     renderVayneToFile!("resources/templates/model/application/{app.resourceDir}/{app.ID}-enGB.ini.vayne",Vars)(_expand!"{app.resourceDir}/{app.ID}-enGB.ini");
178     
179     /* .gitignore */
180     MsgLog.info("gen:",_expand!".gitignore");
181     dirName(_expand!".gitignore").mkdirRecurse;
182     renderVayneToFile!("resources/templates/model/application/.gitignore.vayne",Vars)(_expand!".gitignore");
183     
184     /* dub.json */
185     MsgLog.info("gen:",_expand!"dub.json");
186     dirName(_expand!"dub.json").mkdirRecurse;
187     renderVayneToFile!("resources/templates/model/application/dub.json.vayne",Vars)(_expand!"dub.json");
188     
189     /* dale.d */
190     MsgLog.info("gen:",_expand!"dale.d");
191     dirName(_expand!"dale.d").mkdirRecurse;
192     renderVayneToFile!("resources/templates/model/application/dale.d.vayne",Vars)(_expand!"dale.d");
193     
194     /* {app.resourceDir}/dxx.json */
195     MsgLog.info("gen:",_expand!"{app.resourceDir}/dxx.json");
196     dirName(_expand!"{app.resourceDir}/dxx.json").mkdirRecurse;
197     renderVayneToFile!("resources/templates/model/application/{app.resourceDir}/dxx.json.vayne",Vars)(_expand!"{app.resourceDir}/dxx.json");
198     
199     /* {app.resourceDir}/{app.ID}.ini */
200     MsgLog.info("gen:",_expand!"{app.resourceDir}/{app.ID}.ini");
201     dirName(_expand!"{app.resourceDir}/{app.ID}.ini").mkdirRecurse;
202     renderVayneToFile!("resources/templates/model/application/{app.resourceDir}/{app.ID}.ini.vayne",Vars)(_expand!"{app.resourceDir}/{app.ID}.ini");
203     
204   }
205 }
206 
207 
208 
209 mixin template _dxxtool_autogen(alias _id,Vars...) {
210   auto _dxxtool_autogen() {
211   
212     /* runtime */
213     static if (_id == "runtime") {
214       mixin gen_runtime!vars;
215       return gen_runtime();
216     }
217   
218     /* generator */
219     static if (_id == "generator") {
220       mixin gen_generator!vars;
221       return gen_generator();
222     }
223   
224     /* shellTarget */
225     static if (_id == "shellTarget") {
226       mixin gen_shellTarget!vars;
227       return gen_shellTarget();
228     }
229   
230     /* libraryTarget */
231     static if (_id == "libraryTarget") {
232       mixin gen_libraryTarget!vars;
233       return gen_libraryTarget();
234     }
235   
236     /* autogen */
237     static if (_id == "autogen") {
238       mixin gen_autogen!vars;
239       return gen_autogen();
240     }
241   
242     /* appmodel */
243     static if (_id == "appmodel") {
244       mixin gen_appmodel!vars;
245       return gen_appmodel();
246     }
247   
248   }
249 }
250 
251 template dxxtool_autogen(Vars...) {
252   auto dxxtool_autogen(string _id) {
253     
254       /* runtime */
255       if (_id == "runtime") {
256         MsgLog.info("gen: runtime");
257         mixin gen_runtime!Vars;
258         return gen_runtime();
259       }
260     
261       /* generator */
262       if (_id == "generator") {
263         MsgLog.info("gen: generator");
264         mixin gen_generator!Vars;
265         return gen_generator();
266       }
267     
268       /* shellTarget */
269       if (_id == "shellTarget") {
270         MsgLog.info("gen: shellTarget");
271         mixin gen_shellTarget!Vars;
272         return gen_shellTarget();
273       }
274     
275       /* libraryTarget */
276       if (_id == "libraryTarget") {
277         MsgLog.info("gen: libraryTarget");
278         mixin gen_libraryTarget!Vars;
279         return gen_libraryTarget();
280       }
281     
282       /* autogen */
283       if (_id == "autogen") {
284         MsgLog.info("gen: autogen");
285         mixin gen_autogen!Vars;
286         return gen_autogen();
287       }
288     
289       /* appmodel */
290       if (_id == "appmodel") {
291         MsgLog.info("gen: appmodel");
292         mixin gen_appmodel!Vars;
293         return gen_appmodel();
294       }
295     
296   }
297 }