mirror of https://github.com/lukechilds/node.git
committed by
Ryan Dahl
2 changed files with 115 additions and 4 deletions
@ -0,0 +1,109 @@ |
|||||
|
var fs = require('fs'), |
||||
|
path = require('path'), |
||||
|
exec = require('child_process').exec, |
||||
|
options = fs.readFileSync(process.argv[2]).toString(), |
||||
|
cmd = process.argv[3]; |
||||
|
|
||||
|
if (cmd !== 'install' && cmd !== 'uninstall') { |
||||
|
console.error('Unknown command: ' + cmd); |
||||
|
process.exit(1); |
||||
|
} |
||||
|
|
||||
|
// Parse options file and remove first comment line
|
||||
|
options = JSON.parse(options.split('\n').slice(1).join('')); |
||||
|
var variables = options.variables, |
||||
|
node_prefix = variables.node_prefix || '/usr/local'; |
||||
|
|
||||
|
// Execution queue
|
||||
|
var queue = [], |
||||
|
dirs = []; |
||||
|
|
||||
|
// Copy file from src to dst
|
||||
|
function copy(src, dst, callback) { |
||||
|
// If src is array - copy each file separately
|
||||
|
if (Array.isArray(src)) { |
||||
|
src.forEach(function(src) { |
||||
|
copy(src, dst, callback); |
||||
|
}); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
dst = path.join(node_prefix, dst); |
||||
|
var dir = dst.replace(/\/[^\/]*$/, '/'); |
||||
|
|
||||
|
// Create directory if hasn't done this yet
|
||||
|
if (dirs.indexOf(dir) === -1) { |
||||
|
dirs.push(dir); |
||||
|
queue.push('mkdir -p ' + dir); |
||||
|
} |
||||
|
|
||||
|
// Queue file/dir copy
|
||||
|
queue.push('cp -rf ' + src + ' ' + dst); |
||||
|
} |
||||
|
|
||||
|
// Remove files
|
||||
|
function remove(files) { |
||||
|
files.forEach(function(file) { |
||||
|
file = path.join(node_prefix, file); |
||||
|
queue.push('rm -rf ' + file); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// Run every command in queue, one-by-one
|
||||
|
function run() { |
||||
|
var cmd = queue.shift(); |
||||
|
if (!cmd) return; |
||||
|
|
||||
|
console.log(cmd); |
||||
|
exec(cmd, function(err, stdout, stderr) { |
||||
|
if (stderr) console.error(stderr); |
||||
|
if (err) process.exit(1); |
||||
|
|
||||
|
run(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
if (cmd === 'install') { |
||||
|
// Copy includes
|
||||
|
copy([ |
||||
|
// Node
|
||||
|
'src/node.h', 'src/node_buffer.h', 'src/node_object_wrap.h', |
||||
|
'src/node_version.h', |
||||
|
// v8
|
||||
|
'deps/v8/include/v8-debug.h', 'deps/v8/include/v8-preparser.h', |
||||
|
'deps/v8/include/v8-profiler.h', 'deps/v8/include/v8-testing.h', |
||||
|
'deps/v8/include/v8.h', 'deps/v8/include/v8stdint.h', |
||||
|
// uv
|
||||
|
'deps/uv/include/uv.h' |
||||
|
], 'include/node/'); |
||||
|
|
||||
|
// Private uv headers
|
||||
|
copy([ |
||||
|
'deps/uv/include/uv-private/eio.h', 'deps/uv/include/uv-private/ev.h', |
||||
|
'deps/uv/include/uv-private/ngx-queue.h', |
||||
|
'deps/uv/include/uv-private/tree.h', |
||||
|
'deps/uv/include/uv-private/uv-unix.h', |
||||
|
'deps/uv/include/uv-private/uv-win.h', |
||||
|
], 'include/node/uv-private/'); |
||||
|
|
||||
|
copy([ |
||||
|
'deps/uv/include/ares.h', |
||||
|
'deps/uv/include/ares_version.h' |
||||
|
], 'include/node/c-ares/'); |
||||
|
|
||||
|
// Copy binary file
|
||||
|
copy('out/Release/node', 'bin/node'); |
||||
|
|
||||
|
// Install npm (eventually)
|
||||
|
if (variables.node_install_npm) { |
||||
|
copy('deps/npm', 'lib/node_modules/npm'); |
||||
|
queue.push('ln -sF ../lib/node_modules/npm/bin/npm-cli.js ' + |
||||
|
path.join(node_prefix, 'bin/npm')); |
||||
|
} |
||||
|
} else { |
||||
|
remove([ |
||||
|
'bin/node', 'bin/npm', 'include/node/*', 'lib/node_modules' |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
run(); |
Loading…
Reference in new issue