Welcome to mirror list, hosted at ThFree Co, Russian Federation.

installer.js « tools - github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 487376d83f48e48b1abe88db6c8dbaa850042f68 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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);
}

// Python pprint.pprint() uses single quotes instead of double.
// awful.
options = options.replace(/'/gi, '"')

// 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/');

  // Copy binary file
  copy('out/Release/node', 'bin/node');

  // Install node-waf
  if (variables.node_install_waf == 'true') {
    copy('tools/wafadmin', 'lib/node/');
    copy('tools/node-waf', 'bin/node-waf');
  }

  // Install npm (eventually)
  if (variables.node_install_npm == 'true') {
    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', 'bin/node-waf',
     'include/node/*', 'lib/node_modules', 'lib/node'
  ]);
}

run();