aboutsummaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/node-gyp/lib
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/node-gyp/lib')
-rw-r--r--deps/npm/node_modules/node-gyp/lib/build.js12
-rw-r--r--deps/npm/node_modules/node-gyp/lib/configure.js74
-rw-r--r--deps/npm/node_modules/node-gyp/lib/node-gyp.js1
-rw-r--r--deps/npm/node_modules/node-gyp/lib/process-release.js2
4 files changed, 69 insertions, 20 deletions
diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js
index 3a3edccf87..22f2583694 100644
--- a/deps/npm/node_modules/node-gyp/lib/build.js
+++ b/deps/npm/node_modules/node-gyp/lib/build.js
@@ -125,19 +125,19 @@ function build (gyp, argv, callback) {
function findMsbuild () {
log.verbose('could not find "msbuild.exe" in PATH - finding location in registry')
- var notfoundErr = new Error('Can\'t find "msbuild.exe". Do you have Microsoft Visual Studio C++ 2008+ installed?')
+ var notfoundErr = 'Can\'t find "msbuild.exe". Do you have Microsoft Visual Studio C++ 2008+ installed?'
var cmd = 'reg query "HKLM\\Software\\Microsoft\\MSBuild\\ToolsVersions" /s'
if (process.arch !== 'ia32')
cmd += ' /reg:32'
exec(cmd, function (err, stdout, stderr) {
+ if (err) {
+ return callback(new Error(err.message + '\n' + notfoundErr))
+ }
var reVers = /ToolsVersions\\([^\\]+)$/i
, rePath = /\r\n[ \t]+MSBuildToolsPath[ \t]+REG_SZ[ \t]+([^\r]+)/i
, msbuilds = []
, r
, msbuildPath
- if (err) {
- return callback(notfoundErr)
- }
stdout.split('\r\n\r\n').forEach(function(l) {
if (!l) return
l = l.trim()
@@ -157,7 +157,7 @@ function build (gyp, argv, callback) {
return (x.version < y.version ? -1 : 1)
})
;(function verifyMsbuild () {
- if (!msbuilds.length) return callback(notfoundErr)
+ if (!msbuilds.length) return callback(new Error(notfoundErr))
msbuildPath = path.resolve(msbuilds.pop().path, 'msbuild.exe')
fs.stat(msbuildPath, function (err, stat) {
if (err) {
@@ -165,7 +165,7 @@ function build (gyp, argv, callback) {
if (msbuilds.length) {
return verifyMsbuild()
} else {
- callback(notfoundErr)
+ callback(new Error(notfoundErr))
}
} else {
callback(err)
diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js
index 4e0652961e..4543bce7d7 100644
--- a/deps/npm/node_modules/node-gyp/lib/configure.js
+++ b/deps/npm/node_modules/node-gyp/lib/configure.js
@@ -1,5 +1,6 @@
module.exports = exports = configure
-module.exports.test = { findPython: findPython }
+module.exports.test = { findAccessibleSync: findAccessibleSync,
+ findPython: findPython }
/**
* Module dependencies.
@@ -7,7 +8,6 @@ module.exports.test = { findPython: findPython }
var fs = require('graceful-fs')
, path = require('path')
- , glob = require('glob')
, log = require('npmlog')
, osenv = require('osenv')
, which = require('which')
@@ -21,6 +21,7 @@ var fs = require('graceful-fs')
, execFile = cp.execFile
, win = process.platform == 'win32'
, findNodeDirectory = require('./find-node-directory')
+ , msgFormat = require('util').format
exports.usage = 'Generates ' + (win ? 'MSVC project files' : 'a Makefile') + ' for the current module'
@@ -227,22 +228,21 @@ function configure (gyp, argv, callback) {
// - the out/Release directory
// - the out/Debug directory
// - the root directory
- var node_exp_file = ''
+ var node_exp_file = undefined
if (process.platform === 'aix') {
var node_root_dir = findNodeDirectory()
var candidates = ['include/node/node.exp',
'out/Release/node.exp',
'out/Debug/node.exp',
'node.exp']
- for (var next = 0; next < candidates.length; next++) {
- node_exp_file = path.resolve(node_root_dir, candidates[next])
- try {
- fs.accessSync(node_exp_file, fs.R_OK)
- // exp file found, stop looking
- break
- } catch (exception) {
- // this candidate was not found or not readable, do nothing
- }
+ var logprefix = 'find exports file'
+ node_exp_file = findAccessibleSync(logprefix, node_root_dir, candidates)
+ if (node_exp_file !== undefined) {
+ log.verbose(logprefix, 'Found exports file: %s', node_exp_file)
+ } else {
+ var msg = msgFormat('Could not find node.exp file in %s', node_root_dir)
+ log.error(logprefix, 'Could not find exports file')
+ return callback(new Error(msg))
}
}
@@ -311,6 +311,29 @@ function configure (gyp, argv, callback) {
}
+/**
+ * Returns the first file or directory from an array of candidates that is
+ * readable by the current user, or undefined if none of the candidates are
+ * readable.
+ */
+function findAccessibleSync (logprefix, dir, candidates) {
+ for (var next = 0; next < candidates.length; next++) {
+ var candidate = path.resolve(dir, candidates[next])
+ try {
+ var fd = fs.openSync(candidate, 'r')
+ } catch (e) {
+ // this candidate was not found or not readable, do nothing
+ log.silly(logprefix, 'Could not open %s: %s', candidate, e.message)
+ continue
+ }
+ fs.closeSync(fd)
+ log.silly(logprefix, 'Found readable %s', candidate)
+ return candidate
+ }
+
+ return undefined
+}
+
function findPython (python, callback) {
checkPython()
@@ -325,7 +348,7 @@ function findPython (python, callback) {
return checkPython()
}
if (win) {
- guessPython()
+ checkPythonLauncher()
} else {
failNoPython()
}
@@ -340,6 +363,31 @@ function findPython (python, callback) {
})
}
+ // Distributions of Python on Windows by default install with the "py.exe"
+ // Python launcher which is more likely to exist than the Python executable
+ // being in the $PATH.
+ // Because the Python launcher supports all versions of Python, we have to
+ // explicitly request a Python 2 version. This is done by supplying "-2" as
+ // the first command line argument. Since "py.exe -2" would be an invalid
+ // executable for "execFile", we have to use the launcher to figure out
+ // where the actual "python.exe" executable is located.
+ function checkPythonLauncher () {
+ log.verbose('could not find "' + python + '". checking python launcher')
+ var env = extend({}, process.env)
+ env.TERM = 'dumb'
+
+ var launcherArgs = ['-2', '-c', 'import sys; print sys.executable']
+ execFile('py.exe', launcherArgs, { env: env }, function (err, stdout) {
+ if (err) {
+ guessPython()
+ return
+ }
+ python = stdout.trim()
+ log.verbose('check python launcher', 'python executable found: %j', python)
+ checkPythonVersion()
+ })
+ }
+
// Called on Windows when "python" isn't available in the current $PATH.
// We're gonna check if "%SystemDrive%\python27\python.exe" exists.
function guessPython () {
diff --git a/deps/npm/node_modules/node-gyp/lib/node-gyp.js b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
index a5a3328855..3b8f5b0a1c 100644
--- a/deps/npm/node_modules/node-gyp/lib/node-gyp.js
+++ b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
@@ -112,6 +112,7 @@ proto.shorthands = {
, j: '--jobs'
, silly: '--loglevel=silly'
, verbose: '--loglevel=verbose'
+ , silent: '--loglevel=silent'
}
/**
diff --git a/deps/npm/node_modules/node-gyp/lib/process-release.js b/deps/npm/node_modules/node-gyp/lib/process-release.js
index f5a3cca635..89eaf9be36 100644
--- a/deps/npm/node_modules/node-gyp/lib/process-release.js
+++ b/deps/npm/node_modules/node-gyp/lib/process-release.js
@@ -9,7 +9,7 @@ var semver = require('semver')
, bitsreV3 = /\/win-(x86|ia32|x64)\// // io.js v3.x.x shipped with "ia32" but should
// have been "x86"
-// Captures all the logic required to determine download URLs, local directory and
+// Captures all the logic required to determine download URLs, local directory and
// file names. Inputs come from command-line switches (--target, --dist-url),
// `process.version` and `process.release` where it exists.
function processRelease (argv, gyp, defaultVersion, defaultRelease) {