build.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env node
  2. /**
  3. * Base script for invoking a build. Call with
  4. *
  5. * > build <target>
  6. */
  7. var Builder = require("./builder.js"),
  8. sys = require("sys"),
  9. path = require("path"),
  10. util = require("util"),
  11. fs = require("fs");
  12. /**
  13. * Parse arguments array
  14. * @param {Array} args optional arguments arrray.
  15. * @return {Object} opts key value hash.
  16. * @export
  17. */
  18. parse = function(args) {
  19. // args is optional, default is process.argv
  20. args = args || process.argv;
  21. var opts = {}, curSwitch;
  22. args.forEach(function(arg) {
  23. // its a switch
  24. if (/^(-|--)/.test(arg) || !curSwitch) {
  25. opts[arg] = true;
  26. curSwitch = arg;
  27. // this arg is a data
  28. } else {
  29. if (arg === 'false') {
  30. arg = false;
  31. } else if (arg === 'true') {
  32. arg = true;
  33. } else if (!isNaN(arg)) {
  34. arg = Number(arg);
  35. }
  36. // it was a boolean switch per default,
  37. // now it has got a val
  38. if (typeof opts[curSwitch] === 'boolean') {
  39. opts[curSwitch] = arg;
  40. } else if (Array.isArray(opts[curSwitch])) {
  41. opts[curSwitch].push(arg);
  42. } else {
  43. opts[curSwitch] = [opts[curSwitch], arg];
  44. }
  45. }
  46. });
  47. return opts;
  48. };
  49. var args = parse();
  50. //sys.puts("args: " + sys.inspect(args));
  51. var configPath = fs.realpathSync((args['--config'] != undefined) ? args['--config'] : "./builder/config.js"),
  52. logfile = (args['--logfile'] != undefined) ? args['--logfile'] : "./build.log",
  53. config = require(configPath),
  54. target = (args['--target'] != undefined) ? args['--target'] : config.project["default"];
  55. var logfileBase = path.basename(logfile),
  56. logfilePath = path.dirname(logfile)
  57. logfile = fs.realpathSync(logfilePath) + "/" + logfileBase;
  58. logfile = path.normalize(logfile);
  59. config.logfilePath = logfile;
  60. config.filepath = configPath;
  61. config.targets = fs.realpathSync(path.dirname(configPath) + "/targets");
  62. sys.puts("config: " + util.inspect(config, true, null));
  63. new Builder(config, logfile).build(target);