| 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 |