Generator.hx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. class Generator {
  2. static function compile() {
  3. var errored = [];
  4. Sys.setCwd("build");
  5. var cwd = Sys.getCwd();
  6. for( f in sys.FileSystem.readDirectory(".") ) {
  7. if( !sys.FileSystem.isDirectory(f) )
  8. continue;
  9. var dir = cwd+"/"+f;
  10. Sys.setCwd(dir);
  11. for( d in sys.FileSystem.readDirectory(dir) ) {
  12. if( !StringTools.endsWith(d,".hxml") ) continue;
  13. var name = d.substr(0,-5);
  14. if( f != name ) name = f+"/"+name;
  15. var pass = false;
  16. Sys.println(name);
  17. if( StringTools.endsWith(name,"_hl") )
  18. d = "-lib hlsdl "+d;
  19. try {
  20. if( Sys.command("haxe "+d) == 0 ) pass = true;
  21. } catch( e : Dynamic ) {
  22. Sys.println(e);
  23. }
  24. if( !pass ) errored.push(name);
  25. }
  26. Sys.setCwd(cwd);
  27. }
  28. if( errored.length > 0 ) {
  29. Sys.println(errored.length+" ERRORED : "+errored);
  30. Sys.exit(1);
  31. }
  32. Sys.println("DONE");
  33. }
  34. #if hscript
  35. static function generateProjects() {
  36. var templates = [];
  37. for( f in sys.FileSystem.readDirectory("templates") )
  38. templates.push({ file : f, data : sys.io.File.getContent("templates/" + f) });
  39. try sys.FileSystem.createDirectory("build") catch( e : Dynamic ) {};
  40. sys.io.File.saveContent("build/README.txt","This directory is automatically generated by samples/Script.hx using samples/templates");
  41. var hasHxBit = Sys.command("haxelib path hxbit") == 0;
  42. for( f in sys.FileSystem.readDirectory(".") ) {
  43. if( sys.FileSystem.isDirectory(f) || !StringTools.endsWith(f,".hx") )
  44. continue;
  45. var title = f.split(".").shift();
  46. if( title == "Generator" || title == "SampleApp" ) continue;
  47. var name = title.charAt(0).toLowerCase() + title.substr(1);
  48. var params = [];
  49. if( sys.FileSystem.exists(name+"_res") )
  50. params.push("-D resourcesPath=../../"+name+"_res");
  51. if( hasHxBit )
  52. params.push("-lib hxbit");
  53. var content = sys.io.File.getContent(f);
  54. ~/\/\/PARAM=(.*)/g.map(content,function(r) { params.push(StringTools.trim(r.matched(1))); return ""; });
  55. var context = {
  56. main : title,
  57. name : name,
  58. params : params.join("\n"),
  59. StringTools : StringTools,
  60. };
  61. try sys.FileSystem.createDirectory("build/"+name) catch( e : Dynamic ) {};
  62. #if !silent
  63. Sys.println(name);
  64. #end
  65. var interp = new hscript.Interp();
  66. for( f in Reflect.fields(context) )
  67. interp.variables.set(f, Reflect.field(context, f));
  68. for( t in templates ) {
  69. var data = ~/::([^:]+)::/g.map(t.data, function(r) {
  70. var script = r.matched(1);
  71. var expr = new hscript.Parser().parseString(script);
  72. return "" + interp.execute(expr);
  73. });
  74. var file = t.file.split("__name").join(name);
  75. sys.io.File.saveContent("build/" + name + "/" + file, data);
  76. }
  77. }
  78. }
  79. #end
  80. }