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

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRod Vagg <rod@vagg.org>2016-06-28 05:07:36 +0300
committerKat Marchán <kzm@sykosomatic.org>2016-07-01 01:50:09 +0300
commit900a5b7f18b277786397faac05853c030263feb8 (patch)
tree1fc672743a0ca55c01125fac3db6f2fdd5d279ce /node_modules/node-gyp/lib/configure.js
parent69267f4fbd1467ce576f173909ced361f8fe2a9d (diff)
node-gyp@3.4.0
Headline items: * Fix for Visual Studio 2015 __pfnDliNotifyHook2 failures https://github.com/nodejs/node-gyp/pull/952 * Fix for AIX using fs.statSync https://github.com/nodejs/node-gyp/pull/955 * More verbose msbuild.exe missing error output https://github.com/nodejs/node-gyp/pull/930/files * Added --silent for --loglevel=silent https://github.com/nodejs/node-gyp/pull/937 * Enable V8 deprecation warnings for native addons https://github.com/nodejs/node-gyp/pull/920 Full changelog at https://github.com/nodejs/node-gyp/blob/master/CHANGELOG.md Credit: @rvagg PR-URL: https://github.com/npm/npm/pull/13199 Reviewed-By: @zkat
Diffstat (limited to 'node_modules/node-gyp/lib/configure.js')
-rw-r--r--node_modules/node-gyp/lib/configure.js74
1 files changed, 61 insertions, 13 deletions
diff --git a/node_modules/node-gyp/lib/configure.js b/node_modules/node-gyp/lib/configure.js
index 4e0652961..4543bce7d 100644
--- a/node_modules/node-gyp/lib/configure.js
+++ b/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 () {