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 }