mirror of
https://github.com/electron/node-gyp.git
synced 2025-08-15 12:58:19 +02:00
src: implement standard.js linting
In addition: * moved module.exports to the bottom * no single-line if statements * no if statements without a { * const for requires * array declarations get spaces inside [ ] * 'use strict' in all .js files PR-URL: https://github.com/nodejs/node-gyp/pull/1794 Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: João Reis <reis@janeasystems.com>
This commit is contained in:
parent
7e8127068f
commit
e40c99e283
28 changed files with 739 additions and 661 deletions
290
lib/configure.js
290
lib/configure.js
|
@ -1,35 +1,29 @@
|
|||
module.exports = exports = configure
|
||||
module.exports.test = {
|
||||
PythonFinder: PythonFinder,
|
||||
findAccessibleSync: findAccessibleSync,
|
||||
findPython: findPython,
|
||||
}
|
||||
'use strict'
|
||||
|
||||
var fs = require('graceful-fs')
|
||||
, path = require('path')
|
||||
, log = require('npmlog')
|
||||
, os = require('os')
|
||||
, semver = require('semver')
|
||||
, mkdirp = require('mkdirp')
|
||||
, cp = require('child_process')
|
||||
, extend = require('util')._extend
|
||||
, processRelease = require('./process-release')
|
||||
, win = process.platform === 'win32'
|
||||
, findNodeDirectory = require('./find-node-directory')
|
||||
, msgFormat = require('util').format
|
||||
, logWithPrefix = require('./util').logWithPrefix
|
||||
if (win)
|
||||
const fs = require('graceful-fs')
|
||||
const path = require('path')
|
||||
const log = require('npmlog')
|
||||
const os = require('os')
|
||||
const semver = require('semver')
|
||||
const mkdirp = require('mkdirp')
|
||||
const cp = require('child_process')
|
||||
const extend = require('util')._extend // eslint-disable-line
|
||||
const processRelease = require('./process-release')
|
||||
const win = process.platform === 'win32'
|
||||
const findNodeDirectory = require('./find-node-directory')
|
||||
const msgFormat = require('util').format
|
||||
const logWithPrefix = require('./util').logWithPrefix
|
||||
if (win) {
|
||||
var findVisualStudio = require('./find-visualstudio')
|
||||
|
||||
exports.usage = 'Generates ' + (win ? 'MSVC project files' : 'a Makefile') + ' for the current module'
|
||||
}
|
||||
|
||||
function configure (gyp, argv, callback) {
|
||||
var python
|
||||
, buildDir = path.resolve('build')
|
||||
, configNames = [ 'config.gypi', 'common.gypi' ]
|
||||
, configs = []
|
||||
, nodeDir
|
||||
, release = processRelease(argv, gyp, process.version, process.release)
|
||||
var buildDir = path.resolve('build')
|
||||
var configNames = [ 'config.gypi', 'common.gypi' ]
|
||||
var configs = []
|
||||
var nodeDir
|
||||
var release = processRelease(argv, gyp, process.version, process.release)
|
||||
|
||||
findPython(gyp.opts.python, function (err, found) {
|
||||
if (err) {
|
||||
|
@ -67,10 +61,12 @@ function configure (gyp, argv, callback) {
|
|||
|
||||
// If the tarball option is set, always remove and reinstall the headers
|
||||
// into devdir. Otherwise only install if they're not already there.
|
||||
gyp.opts.ensure = gyp.opts.tarball ? false : true
|
||||
gyp.opts.ensure = !gyp.opts.tarball
|
||||
|
||||
gyp.commands.install([ release.version ], function (err) {
|
||||
if (err) return callback(err)
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
log.verbose('get node dir', 'target node version installed:', release.versionDir)
|
||||
nodeDir = path.resolve(gyp.devDir, release.versionDir)
|
||||
createBuildDir()
|
||||
|
@ -81,7 +77,9 @@ function configure (gyp, argv, callback) {
|
|||
function createBuildDir () {
|
||||
log.verbose('build dir', 'attempting to create "build" dir: %s', buildDir)
|
||||
mkdirp(buildDir, function (err, isNew) {
|
||||
if (err) return callback(err)
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
log.verbose('build dir', '"build" dir needed to be created?', isNew)
|
||||
if (win) {
|
||||
findVisualStudio(release.semver, gyp.opts.msvs_version,
|
||||
|
@ -93,7 +91,9 @@ function configure (gyp, argv, callback) {
|
|||
}
|
||||
|
||||
function createConfigFile (err, vsInfo) {
|
||||
if (err) return callback(err)
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
|
||||
var configFilename = 'config.gypi'
|
||||
var configPath = path.resolve(buildDir, configFilename)
|
||||
|
@ -101,14 +101,18 @@ function configure (gyp, argv, callback) {
|
|||
log.verbose('build/' + configFilename, 'creating config file')
|
||||
|
||||
var config = process.config || {}
|
||||
, defaults = config.target_defaults
|
||||
, variables = config.variables
|
||||
var defaults = config.target_defaults
|
||||
var variables = config.variables
|
||||
|
||||
// default "config.variables"
|
||||
if (!variables) variables = config.variables = {}
|
||||
if (!variables) {
|
||||
variables = config.variables = {}
|
||||
}
|
||||
|
||||
// default "config.defaults"
|
||||
if (!defaults) defaults = config.target_defaults = {}
|
||||
if (!defaults) {
|
||||
defaults = config.target_defaults = {}
|
||||
}
|
||||
|
||||
// don't inherit the "defaults" from node's `process.config` object.
|
||||
// doing so could cause problems in cases where the `node` executable was
|
||||
|
@ -123,13 +127,14 @@ function configure (gyp, argv, callback) {
|
|||
if ('debug' in gyp.opts) {
|
||||
defaults.default_configuration = gyp.opts.debug ? 'Debug' : 'Release'
|
||||
}
|
||||
|
||||
if (!defaults.default_configuration) {
|
||||
defaults.default_configuration = 'Release'
|
||||
}
|
||||
|
||||
// set the target_arch variable
|
||||
variables.target_arch = gyp.opts.arch || process.arch || 'ia32'
|
||||
if (variables.target_arch == 'arm64') {
|
||||
if (variables.target_arch === 'arm64') {
|
||||
defaults['msvs_configuration_platform'] = 'ARM64'
|
||||
}
|
||||
|
||||
|
@ -146,7 +151,7 @@ function configure (gyp, argv, callback) {
|
|||
if (vsInfo.sdk) {
|
||||
defaults['msvs_windows_target_platform_version'] = vsInfo.sdk
|
||||
}
|
||||
if (variables.target_arch == 'arm64') {
|
||||
if (variables.target_arch === 'arm64') {
|
||||
if (vsInfo.versionMajor > 15 ||
|
||||
(vsInfo.versionMajor === 15 && vsInfo.versionMajor >= 9)) {
|
||||
defaults['msvs_enable_marmasm'] = 1
|
||||
|
@ -163,15 +168,20 @@ function configure (gyp, argv, callback) {
|
|||
//
|
||||
// $ node-gyp configure --shared-libxml2
|
||||
Object.keys(gyp.opts).forEach(function (opt) {
|
||||
if (opt === 'argv') return
|
||||
if (opt in gyp.configDefs) return
|
||||
if (opt === 'argv') {
|
||||
return
|
||||
}
|
||||
if (opt in gyp.configDefs) {
|
||||
return
|
||||
}
|
||||
variables[opt.replace(/-/g, '_')] = gyp.opts[opt]
|
||||
})
|
||||
|
||||
// ensures that any boolean values from `process.config` get stringified
|
||||
function boolsToString (k, v) {
|
||||
if (typeof v === 'boolean')
|
||||
if (typeof v === 'boolean') {
|
||||
return String(v)
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
|
@ -179,21 +189,28 @@ function configure (gyp, argv, callback) {
|
|||
|
||||
// now write out the config.gypi file to the build/ dir
|
||||
var prefix = '# Do not edit. File was generated by node-gyp\'s "configure" step'
|
||||
, json = JSON.stringify(config, boolsToString, 2)
|
||||
|
||||
var json = JSON.stringify(config, boolsToString, 2)
|
||||
log.verbose('build/' + configFilename, 'writing out config file: %s', configPath)
|
||||
configs.push(configPath)
|
||||
fs.writeFile(configPath, [prefix, json, ''].join('\n'), findConfigs)
|
||||
fs.writeFile(configPath, [ prefix, json, '' ].join('\n'), findConfigs)
|
||||
}
|
||||
|
||||
function findConfigs (err) {
|
||||
if (err) return callback(err)
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
|
||||
var name = configNames.shift()
|
||||
if (!name) return runGyp()
|
||||
if (!name) {
|
||||
return runGyp()
|
||||
}
|
||||
var fullPath = path.resolve(name)
|
||||
|
||||
log.verbose(name, 'checking for gypi file: %s', fullPath)
|
||||
fs.stat(fullPath, function (err) {
|
||||
if (err) {
|
||||
if (err.code == 'ENOENT') {
|
||||
if (err.code === 'ENOENT') {
|
||||
findConfigs() // check next gypi filename
|
||||
} else {
|
||||
callback(err)
|
||||
|
@ -207,7 +224,9 @@ function configure (gyp, argv, callback) {
|
|||
}
|
||||
|
||||
function runGyp (err) {
|
||||
if (err) return callback(err)
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
|
||||
if (!~argv.indexOf('-f') && !~argv.indexOf('--format')) {
|
||||
if (win) {
|
||||
|
@ -228,63 +247,68 @@ function configure (gyp, argv, callback) {
|
|||
|
||||
// For AIX and z/OS we need to set up the path to the exports file
|
||||
// which contains the symbols needed for linking.
|
||||
var node_exp_file = undefined
|
||||
var nodeExpFile
|
||||
if (process.platform === 'aix' || process.platform === 'os390') {
|
||||
var ext = process.platform === 'aix' ? 'exp' : 'x'
|
||||
var node_root_dir = findNodeDirectory()
|
||||
var candidates = undefined
|
||||
var nodeRootDir = findNodeDirectory()
|
||||
var candidates
|
||||
|
||||
if (process.platform === 'aix') {
|
||||
candidates = ['include/node/node',
|
||||
'out/Release/node',
|
||||
'out/Debug/node',
|
||||
'node'
|
||||
].map(function(file) {
|
||||
return file + '.' + ext
|
||||
})
|
||||
candidates = [
|
||||
'include/node/node',
|
||||
'out/Release/node',
|
||||
'out/Debug/node',
|
||||
'node'
|
||||
].map(function (file) {
|
||||
return file + '.' + ext
|
||||
})
|
||||
} else {
|
||||
candidates = ['out/Release/obj.target/libnode',
|
||||
'out/Debug/obj.target/libnode',
|
||||
'lib/libnode'
|
||||
].map(function(file) {
|
||||
return file + '.' + ext
|
||||
})
|
||||
candidates = [
|
||||
'out/Release/obj.target/libnode',
|
||||
'out/Debug/obj.target/libnode',
|
||||
'lib/libnode'
|
||||
].map(function (file) {
|
||||
return file + '.' + ext
|
||||
})
|
||||
}
|
||||
|
||||
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)
|
||||
nodeExpFile = findAccessibleSync(logprefix, nodeRootDir, candidates)
|
||||
if (nodeExpFile !== undefined) {
|
||||
log.verbose(logprefix, 'Found exports file: %s', nodeExpFile)
|
||||
} else {
|
||||
var msg = msgFormat('Could not find node.%s file in %s', ext, node_root_dir)
|
||||
var msg = msgFormat('Could not find node.%s file in %s', ext, nodeRootDir)
|
||||
log.error(logprefix, 'Could not find exports file')
|
||||
return callback(new Error(msg))
|
||||
}
|
||||
}
|
||||
|
||||
// this logic ported from the old `gyp_addon` python file
|
||||
var gyp_script = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py')
|
||||
var addon_gypi = path.resolve(__dirname, '..', 'addon.gypi')
|
||||
var common_gypi = path.resolve(nodeDir, 'include/node/common.gypi')
|
||||
fs.stat(common_gypi, function (err) {
|
||||
if (err)
|
||||
common_gypi = path.resolve(nodeDir, 'common.gypi')
|
||||
var gypScript = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py')
|
||||
var addonGypi = path.resolve(__dirname, '..', 'addon.gypi')
|
||||
var commonGypi = path.resolve(nodeDir, 'include/node/common.gypi')
|
||||
fs.stat(commonGypi, function (err) {
|
||||
if (err) {
|
||||
commonGypi = path.resolve(nodeDir, 'common.gypi')
|
||||
}
|
||||
|
||||
var output_dir = 'build'
|
||||
var outputDir = 'build'
|
||||
if (win) {
|
||||
// Windows expects an absolute path
|
||||
output_dir = buildDir
|
||||
outputDir = buildDir
|
||||
}
|
||||
var nodeGypDir = path.resolve(__dirname, '..')
|
||||
var nodeLibFile = path.join(nodeDir,
|
||||
!gyp.opts.nodedir ? '<(target_arch)' : '$(Configuration)',
|
||||
release.name + '.lib')
|
||||
|
||||
argv.push('-I', addon_gypi)
|
||||
argv.push('-I', common_gypi)
|
||||
argv.push('-I', addonGypi)
|
||||
argv.push('-I', commonGypi)
|
||||
argv.push('-Dlibrary=shared_library')
|
||||
argv.push('-Dvisibility=default')
|
||||
argv.push('-Dnode_root_dir=' + nodeDir)
|
||||
if (process.platform === 'aix' || process.platform === 'os390') {
|
||||
argv.push('-Dnode_exp_file=' + node_exp_file)
|
||||
argv.push('-Dnode_exp_file=' + nodeExpFile)
|
||||
}
|
||||
argv.push('-Dnode_gyp_dir=' + nodeGypDir)
|
||||
argv.push('-Dnode_lib_file=' + nodeLibFile)
|
||||
|
@ -295,7 +319,7 @@ function configure (gyp, argv, callback) {
|
|||
argv.push('--no-parallel')
|
||||
|
||||
// tell gyp to write the Makefile/Solution files into output_dir
|
||||
argv.push('--generator-output', output_dir)
|
||||
argv.push('--generator-output', outputDir)
|
||||
|
||||
// tell make to write its output into the same dir
|
||||
argv.push('-Goutput_dir=.')
|
||||
|
@ -304,10 +328,10 @@ function configure (gyp, argv, callback) {
|
|||
argv.unshift('binding.gyp')
|
||||
|
||||
// execute `gyp` from the current target nodedir
|
||||
argv.unshift(gyp_script)
|
||||
argv.unshift(gypScript)
|
||||
|
||||
// make sure python uses files that came with this particular node package
|
||||
var pypath = [path.join(__dirname, '..', 'gyp', 'pylib')]
|
||||
var pypath = [ path.join(__dirname, '..', 'gyp', 'pylib') ]
|
||||
if (process.env.PYTHONPATH) {
|
||||
pypath.push(process.env.PYTHONPATH)
|
||||
}
|
||||
|
@ -326,7 +350,6 @@ function configure (gyp, argv, callback) {
|
|||
callback()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -336,23 +359,23 @@ function configure (gyp, argv, callback) {
|
|||
*/
|
||||
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
|
||||
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 PythonFinder(configPython, callback) {
|
||||
function PythonFinder (configPython, callback) {
|
||||
this.callback = callback
|
||||
this.configPython = configPython
|
||||
this.errorLog = []
|
||||
|
@ -360,8 +383,8 @@ function PythonFinder(configPython, callback) {
|
|||
|
||||
PythonFinder.prototype = {
|
||||
log: logWithPrefix(log, 'find Python'),
|
||||
argsExecutable: ['-c', 'import sys; print(sys.executable);'],
|
||||
argsVersion: ['-c', 'import sys; print("%s.%s.%s" % sys.version_info[:3]);'],
|
||||
argsExecutable: [ '-c', 'import sys; print(sys.executable);' ],
|
||||
argsVersion: [ '-c', 'import sys; print("%s.%s.%s" % sys.version_info[:3]);' ],
|
||||
semverRange: '>=2.6.0 <3.0.0',
|
||||
|
||||
// These can be overridden for testing:
|
||||
|
@ -370,20 +393,19 @@ PythonFinder.prototype = {
|
|||
win: win,
|
||||
pyLauncher: 'py.exe',
|
||||
defaultLocation: path.join(process.env.SystemDrive || 'C:', 'Python27',
|
||||
'python.exe'),
|
||||
'python.exe'),
|
||||
|
||||
// Logs a message at verbose level, but also saves it to be displayed later
|
||||
// at error level if an error occurs. This should help diagnose the problem.
|
||||
addLog: function addLog(message) {
|
||||
addLog: function addLog (message) {
|
||||
this.log.verbose(message)
|
||||
this.errorLog.push(message)
|
||||
},
|
||||
|
||||
|
||||
// Find Python by trying a sequence of possibilities.
|
||||
// Ignore errors, keep trying until Python is found.
|
||||
findPython: function findPython() {
|
||||
const SKIP=0, FAIL=1
|
||||
findPython: function findPython () {
|
||||
const SKIP = 0; const FAIL = 1
|
||||
const toCheck = [
|
||||
{
|
||||
before: () => {
|
||||
|
@ -398,7 +420,7 @@ PythonFinder.prototype = {
|
|||
`"${this.configPython}"`)
|
||||
},
|
||||
check: this.checkCommand,
|
||||
arg: this.configPython,
|
||||
arg: this.configPython
|
||||
},
|
||||
{
|
||||
before: () => {
|
||||
|
@ -411,17 +433,17 @@ PythonFinder.prototype = {
|
|||
this.addLog(`- process.env.PYTHON is "${this.env.PYTHON}"`)
|
||||
},
|
||||
check: this.checkCommand,
|
||||
arg: this.env.PYTHON,
|
||||
arg: this.env.PYTHON
|
||||
},
|
||||
{
|
||||
before: () => { this.addLog('checking if "python2" can be used') },
|
||||
check: this.checkCommand,
|
||||
arg: 'python2',
|
||||
arg: 'python2'
|
||||
},
|
||||
{
|
||||
before: () => { this.addLog('checking if "python" can be used') },
|
||||
check: this.checkCommand,
|
||||
arg: 'python',
|
||||
arg: 'python'
|
||||
},
|
||||
{
|
||||
before: () => {
|
||||
|
@ -432,7 +454,7 @@ PythonFinder.prototype = {
|
|||
this.addLog(
|
||||
'checking if the py launcher can be used to find Python 2')
|
||||
},
|
||||
check: this.checkPyLauncher,
|
||||
check: this.checkPyLauncher
|
||||
},
|
||||
{
|
||||
before: () => {
|
||||
|
@ -440,12 +462,12 @@ PythonFinder.prototype = {
|
|||
'checking if Python 2 is installed in the default location')
|
||||
},
|
||||
check: this.checkExecPath,
|
||||
arg: this.defaultLocation,
|
||||
},
|
||||
arg: this.defaultLocation
|
||||
}
|
||||
]
|
||||
|
||||
function runChecks(err) {
|
||||
this.log.silly('runChecks: err = %j', err && err.stack || err)
|
||||
function runChecks (err) {
|
||||
this.log.silly('runChecks: err = %j', (err && err.stack) || err)
|
||||
|
||||
const check = toCheck.shift()
|
||||
if (!check) {
|
||||
|
@ -470,7 +492,6 @@ PythonFinder.prototype = {
|
|||
runChecks.apply(this)
|
||||
},
|
||||
|
||||
|
||||
// Check if command is a valid Python to use.
|
||||
// Will exit the Python finder on success.
|
||||
// If on Windows, run in a CMD shell to support BAT/CMD launchers.
|
||||
|
@ -513,17 +534,17 @@ PythonFinder.prototype = {
|
|||
checkPyLauncher: function checkPyLauncher (errorCallback) {
|
||||
this.log.verbose(
|
||||
`- executing "${this.pyLauncher}" to get Python 2 executable path`)
|
||||
this.run(this.pyLauncher, ['-2', ...this.argsExecutable], false,
|
||||
function (err, execPath) {
|
||||
this.run(this.pyLauncher, [ '-2', ...this.argsExecutable ], false,
|
||||
function (err, execPath) {
|
||||
// Possible outcomes: same as checkCommand
|
||||
if (err) {
|
||||
this.addLog(
|
||||
`- "${this.pyLauncher}" is not in PATH or produced an error`)
|
||||
return errorCallback(err)
|
||||
}
|
||||
this.addLog(`- executable path is "${execPath}"`)
|
||||
this.checkExecPath(execPath, errorCallback)
|
||||
}.bind(this))
|
||||
if (err) {
|
||||
this.addLog(
|
||||
`- "${this.pyLauncher}" is not in PATH or produced an error`)
|
||||
return errorCallback(err)
|
||||
}
|
||||
this.addLog(`- executable path is "${execPath}"`)
|
||||
this.checkExecPath(execPath, errorCallback)
|
||||
}.bind(this))
|
||||
},
|
||||
|
||||
// Check if a Python executable is the correct version to use.
|
||||
|
@ -565,7 +586,7 @@ PythonFinder.prototype = {
|
|||
},
|
||||
|
||||
// Run an executable or shell command, trimming the output.
|
||||
run: function run(exec, args, shell, callback) {
|
||||
run: function run (exec, args, shell, callback) {
|
||||
var env = extend({}, this.env)
|
||||
env.TERM = 'dumb'
|
||||
const opts = { env: env, shell: shell }
|
||||
|
@ -580,8 +601,8 @@ PythonFinder.prototype = {
|
|||
return callback(err)
|
||||
}
|
||||
|
||||
function execFileCallback(err, stdout, stderr) {
|
||||
this.log.silly('execFile result: err = %j', err && err.stack || err)
|
||||
function execFileCallback (err, stdout, stderr) {
|
||||
this.log.silly('execFile result: err = %j', (err && err.stack) || err)
|
||||
this.log.silly('execFile result: stdout = %j', stdout)
|
||||
this.log.silly('execFile result: stderr = %j', stderr)
|
||||
if (err) {
|
||||
|
@ -592,17 +613,16 @@ PythonFinder.prototype = {
|
|||
}
|
||||
},
|
||||
|
||||
|
||||
succeed: function succeed(execPath, version) {
|
||||
succeed: function succeed (execPath, version) {
|
||||
this.log.info(`using Python version ${version} found at "${execPath}"`)
|
||||
process.nextTick(this.callback.bind(null, null, execPath))
|
||||
},
|
||||
|
||||
fail: function fail() {
|
||||
fail: function fail () {
|
||||
const errorLog = this.errorLog.join('\n')
|
||||
|
||||
const pathExample = this.win ? 'C:\\Path\\To\\python.exe' :
|
||||
'/path/to/pythonexecutable'
|
||||
const pathExample = this.win ? 'C:\\Path\\To\\python.exe'
|
||||
: '/path/to/pythonexecutable'
|
||||
// For Windows 80 col console, use up to the column before the one marked
|
||||
// with X (total 79 chars including logger prefix, 58 chars usable here):
|
||||
// X
|
||||
|
@ -618,16 +638,24 @@ PythonFinder.prototype = {
|
|||
` npm config set python "${pathExample}"`,
|
||||
'For more information consult the documentation at:',
|
||||
'https://github.com/nodejs/node-gyp#installation',
|
||||
'**********************************************************',
|
||||
'**********************************************************'
|
||||
].join('\n')
|
||||
|
||||
this.log.error(`\n${errorLog}\n\n${info}\n`)
|
||||
process.nextTick(this.callback.bind(null, new Error (
|
||||
process.nextTick(this.callback.bind(null, new Error(
|
||||
'Could not find any Python 2 installation to use')))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
function findPython (configPython, callback) {
|
||||
var finder = new PythonFinder(configPython, callback)
|
||||
finder.findPython()
|
||||
}
|
||||
|
||||
module.exports = configure
|
||||
module.exports.test = {
|
||||
PythonFinder: PythonFinder,
|
||||
findAccessibleSync: findAccessibleSync,
|
||||
findPython: findPython
|
||||
}
|
||||
module.exports.usage = 'Generates ' + (win ? 'MSVC project files' : 'a Makefile') + ' for the current module'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue