You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							61 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
	
	
							61 lines
						
					
					
						
							2.3 KiB
						
					
					
				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
 | 
						|
 |