HostCommon.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. var os = require('os');
  2. var path = require('path');
  3. var config = require("./BuildConfig");
  4. // get the root folder
  5. var atomicRoot = config.atomicRoot;
  6. var nodeBinary;
  7. switch(os.platform()) {
  8. case "win32":
  9. nodeBinary = atomicRoot + "Build\\Windows\\node\\node.exe";
  10. break;
  11. case "darwin":
  12. nodeBinary = atomicRoot + "Build/Mac/node/node";
  13. break;
  14. case "linux":
  15. nodeBinary = atomicRoot + "Build/Linux/node/node";
  16. break;
  17. }
  18. // patch in our local node_modules
  19. var fs = require('fs-extra');
  20. /// Returns a list of all script packages
  21. function getScriptPackages() {
  22. var srcpath = atomicRoot + "Script/Packages/";
  23. return fs.readdirSync(srcpath).filter(function(file) {
  24. return fs.statSync(path.join(srcpath, file)).isDirectory() && fs.existsSync(srcpath + "/" + file + "/Package.json");
  25. });
  26. }
  27. // return an object with package name keys and module name lists as values
  28. function getScriptModules() {
  29. modules = {};
  30. var packages = getScriptPackages();
  31. for (var i in packages) {
  32. var pkg = JSON.parse(fs.readFileSync(atomicRoot + "Script/Packages/" + packages[i] + "/Package.json"));
  33. for (var j in pkg.modules) {
  34. var moduleName = pkg.modules[j];
  35. if (!modules[pkg.name]) {
  36. modules[pkg.name] = {
  37. moduleNames: [],
  38. bindings: pkg.bindings
  39. };
  40. }
  41. modules[pkg.name].moduleNames.push(moduleName);
  42. }
  43. }
  44. return modules;
  45. }
  46. function getGenScriptRootDir() {
  47. return atomicRoot + "Artifacts/Build/Source/Generated/";
  48. }
  49. // Get a list of script source filenames
  50. function getGenScriptFilenames() {
  51. var filenames = [];
  52. var scriptGenRoot = getGenScriptRootDir();
  53. var modules = getScriptModules();
  54. for (var pkgName in modules) {
  55. var module = modules[pkgName];
  56. // handle JS bindings
  57. if (!module.bindings || module.bindings.indexOf("JavaScript") != -1) {
  58. var jsPackageFolder = scriptGenRoot + "Javascript/Packages/" + pkgName + "/";
  59. // the JS package sources
  60. filenames.push(jsPackageFolder + "JSPackage" + pkgName + ".cpp");
  61. for (var i in module.moduleNames) {
  62. filenames.push(jsPackageFolder + "JSModule" + module.moduleNames[i] + ".cpp");
  63. }
  64. }
  65. // C#
  66. if (!module.bindings || module.bindings.indexOf("CSharp") != -1) {
  67. var csPackageFolder = scriptGenRoot + "CSharp/Packages/" + pkgName + "/";
  68. var csPackageNativeFolder = csPackageFolder + "Native/";
  69. var csPackageManagedFolder = csPackageFolder + "Managed/";
  70. // Native Package sources
  71. filenames.push(csPackageNativeFolder + "CSPackage" + pkgName + ".cpp");
  72. filenames.push(csPackageNativeFolder + "CSPackage" + pkgName + ".h");
  73. for (var i in module.moduleNames) {
  74. filenames.push(csPackageNativeFolder + "CSModule" + module.moduleNames[i] + ".cpp");
  75. }
  76. }
  77. }
  78. return filenames;
  79. }
  80. function createGenScriptFiles() {
  81. var scriptFiles = getGenScriptFilenames();
  82. for (var i in scriptFiles) {
  83. fs.ensureFileSync(scriptFiles[i]);
  84. }
  85. }
  86. function cleanCreateDir(directory) {
  87. testRemoveDir(directory);
  88. testCreateDir(directory);
  89. }
  90. function testCreateDir(directory) {
  91. if (fs.existsSync(directory)) {
  92. fail("Path already exists: " + directory);
  93. }
  94. jake.mkdirP(directory);
  95. if (!fs.existsSync(directory)) {
  96. fail("Unable to create path: " + directory);
  97. }
  98. }
  99. function setupDirs(clean, createDirs, removeDirs) {
  100. if (createDirs) {
  101. for (var i = 0; i < createDirs.length; i++) {
  102. var path = createDirs[i];
  103. if (!fs.existsSync(path) || clean) {
  104. cleanCreateDir(path);
  105. }
  106. }
  107. }
  108. if (removeDirs) {
  109. for (var i = 0; i < removeDirs.length; i++) {
  110. var path = removeDirs[i];
  111. if (fs.existsSync(path) && clean) {
  112. testRemoveDir(path);
  113. }
  114. }
  115. }
  116. }
  117. function testRemoveDir(path) {
  118. if (fs.existsSync(path)) {
  119. jake.rmRf(path);
  120. }
  121. if (fs.existsSync(path)) {
  122. fail("Unable to remove path: " + path);
  123. }
  124. }
  125. exports.atomicRoot = atomicRoot;
  126. exports.artifactsRoot = atomicRoot + "Artifacts/";
  127. exports.node = nodeBinary;
  128. exports.cleanCreateDir = cleanCreateDir;
  129. exports.testCreateDir = testCreateDir;
  130. exports.testRemoveDir = testRemoveDir;
  131. exports.getScriptPackages = getScriptPackages;
  132. exports.getScriptModules = getScriptModules;
  133. exports.getGenScriptFilenames = getGenScriptFilenames;
  134. exports.createGenScriptFiles = createGenScriptFiles;
  135. exports.getGenScriptRootDir = getGenScriptRootDir;
  136. exports.setupDirs = setupDirs;