diff --git a/bin/nexe b/bin/nexe index 8f9f7ac..960e5c7 100755 --- a/bin/nexe +++ b/bin/nexe @@ -26,6 +26,11 @@ options('t', { default: '/tmp/nexe', description: 'The path to store node.js sources' }). +options('f', { + alias: 'flags', + description: 'Don\'t parse node and v8 flags, pass through app flags', + default: false +}). options('v', { alias: 'version', description: 'Display version number' @@ -54,6 +59,7 @@ function toRelative(pt) { require('../lib').compile({ input : toRelative(argv.i), output : toRelative(argv.o), + flags : argv.f, nodeVersion : argv.r, nodeTempDir : toRelative(argv.t) }, function(error) { diff --git a/lib/exe.js b/lib/exe.js index 4558863..3271bfe 100644 --- a/lib/exe.js +++ b/lib/exe.js @@ -9,7 +9,7 @@ ProgressBar = require("progress"), child_process = require("child_process"), glob = require("glob"), sardines = require("sardines"), -os = require("os"), +os = require("os"), spawn = child_process.spawn; @@ -63,6 +63,17 @@ exports.compile = function (options, complete) { _monkeyPatchNodeConfig(nodeCompiler, next); }, + /** + * monkeypatch node.cc to prevent v8 and node from processing CLI flags + */ + function monkeyPatchNodeCc (next) { + if (options.flags) { + _monkeyPatchMainCc(nodeCompiler, next); + } else { + next(); + } + }, + /** * compile the node application */ @@ -223,6 +234,7 @@ function _monkeyPatchNodeConfig (compiler, complete) { function (next) { _monkeyPatchMainJs(compiler, next) } + ], complete); } @@ -263,6 +275,34 @@ function _monkeyPatchMainJs (compiler, complete) { ); } +/** + */ + +function _monkeyPatchMainCc(compiler, complete) { + var mainPath = path.join(compiler.dir, "src", "node.cc"); + _monkeypatch( + mainPath, + function (content) { + return ~content.indexOf('// // TODO use parse opts'); + }, + function (content, next) { + var lines = content.split('\n'); + /* These lines exist until v0.11.6 */ + var startLine = lines.indexOf(' // TODO use parse opts'); + var endLine = lines.indexOf(' option_end_index = i;'); + + for (var i = startLine; i < endLine; i++) { + lines[i] = '//' + lines[i]; + } + + lines[endLine] = ' option_end_index = 1;'; + lines = lines.join('\n'); + next(null, lines); + }, + complete + ); +} + /** */ diff --git a/lib/monkeypatch.js b/lib/monkeypatch.js index be57993..7140b17 100644 --- a/lib/monkeypatch.js +++ b/lib/monkeypatch.js @@ -2,6 +2,8 @@ var async = require("async"), fs = require("fs"), _log = require("./log"); +var _log = require('./log'); + module.exports = _monkeypatch; diff --git a/package.json b/package.json index ae7dbd5..ad62889 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "sardines": "~0.4.5", "async": "~0.2.10", "colors": "~0.6.2", - "glob": "~3.2.9" + "glob": "~3.2.9", + "progress": "~1.1.3" }, "preferGlobal": "true", "bin": {