Blame view

node_modules/node-gyp/lib/find-node-directory.js 2.33 KB
aaac7fed   liuqimichale   add
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
  var path = require('path')
    , log = require('npmlog')
  
  function findNodeDirectory(scriptLocation, processObj) {
    // set dirname and process if not passed in
    // this facilitates regression tests
    if (scriptLocation === undefined) {
      scriptLocation = __dirname
    }
    if (processObj === undefined) {
      processObj = process
    }
  
    // Have a look to see what is above us, to try and work out where we are
    npm_parent_directory = path.join(scriptLocation, '../../../..')
    log.verbose('node-gyp root', 'npm_parent_directory is '
                + path.basename(npm_parent_directory))
    node_root_dir = ""
  
    log.verbose('node-gyp root', 'Finding node root directory')
    if (path.basename(npm_parent_directory) === 'deps') {
      // We are in a build directory where this script lives in
      // deps/npm/node_modules/node-gyp/lib
      node_root_dir = path.join(npm_parent_directory, '..')
      log.verbose('node-gyp root', 'in build directory, root = '
                  + node_root_dir)
    } else if (path.basename(npm_parent_directory) === 'node_modules') {
      // We are in a node install directory where this script lives in
      // lib/node_modules/npm/node_modules/node-gyp/lib or
      // node_modules/npm/node_modules/node-gyp/lib depending on the
      // platform
      if (processObj.platform === 'win32') {
        node_root_dir = path.join(npm_parent_directory, '..')
      } else {
        node_root_dir = path.join(npm_parent_directory, '../..')
      }
      log.verbose('node-gyp root', 'in install directory, root = '
                  + node_root_dir)
    } else {
      // We don't know where we are, try working it out from the location
      // of the node binary
      var node_dir = path.dirname(processObj.execPath)
      var directory_up = path.basename(node_dir)
      if (directory_up === 'bin') {
        node_root_dir = path.join(node_dir, '..')
      } else if (directory_up === 'Release' || directory_up === 'Debug') {
        // If we are a recently built node, and the directory structure
        // is that of a repository. If we are on Windows then we only need
        // to go one level up, everything else, two
        if (processObj.platform === 'win32') {
          node_root_dir = path.join(node_dir, '..')
        } else {
          node_root_dir = path.join(node_dir, '../..')
        }
      }
      // Else return the default blank, "".
    }
    return node_root_dir
  }
  
  module.exports = findNodeDirectory