From a0202559bcaf847bbc2a614e7713724f5e0ab009 Mon Sep 17 00:00:00 2001 From: Adam Snodgrass Date: Fri, 28 Feb 2014 21:16:38 -0600 Subject: [PATCH] Add option to disable node and v8 flags and pass through app flags --- bin/nexe | 6 ++++++ lib/exe.js | 42 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) 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 133604b..78c583a 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; @@ -61,6 +61,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 */ @@ -221,6 +232,7 @@ function _monkeyPatchNodeConfig (compiler, complete) { function (next) { _monkeyPatchMainJs(compiler, next) } + ], complete); } @@ -261,6 +273,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 + ); +} + /** */