Skip to content

Commit 49ab79d

Browse files
refackrvagg
authored andcommitted
python: more informative error
PR-URL: #1269 Refs: #1582 Reviewed-By: Rod Vagg <rod@vagg.org> Reviewed-By: João Reis <reis@janeasystems.com>
1 parent d3b2122 commit 49ab79d

File tree

5 files changed

+44
-23
lines changed

5 files changed

+44
-23
lines changed

.eslintrc.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
env:
33
node: true
4+
es6: true
45
rules:
56
no-unused-vars: error

.jshintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"asi": true,
33
"laxcomma": true,
4-
"es5": true,
4+
"esversion": 6,
55
"node": true,
66
"strict": false
77
}

bin/node-gyp.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,12 @@ function run () {
7979
prog.commands[command.name](command.args, function (err) {
8080
if (err) {
8181
log.error(command.name + ' error')
82-
log.error('stack', err.stack)
83-
errorMessage()
82+
if (err.noPython) {
83+
log.error(err.message)
84+
} else {
85+
log.error('stack', err.stack)
86+
errorMessage()
87+
}
8488
log.error('not ok')
8589
return process.exit(1)
8690
}

lib/configure.js

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ PythonFinder.prototype = {
449449
'`%s -c "' + args[1] + '"` returned: %j',
450450
this.python, stdout)
451451
var version = stdout.trim()
452-
var range = semver.Range('>=2.5.0 <3.0.0')
452+
var range = semver.Range('>=2.6.0 <3.0.0')
453453
var valid = false
454454
try {
455455
valid = range.test(version)
@@ -467,19 +467,32 @@ PythonFinder.prototype = {
467467
},
468468

469469
failNoPython: function failNoPython () {
470-
var errmsg =
471-
'Can\'t find Python executable "' + this.python +
472-
'", you can set the PYTHON env variable.'
473-
this.callback(new Error(errmsg))
470+
const err = new Error(
471+
'\n******************************************************************\n' +
472+
`node-gyp can't use "${this.python}",\n` +
473+
'It is recommended that you install python 2.7, set the PYTHON env,\n' +
474+
'or use the --python switch to point to a Python >= v2.6.0 & < 3.0.0.\n' +
475+
'For more information consult the documentation at:\n' +
476+
'https://github.com/nodejs/node-gyp#installation\n' +
477+
'***********************************************************************'
478+
);
479+
err.noPython = true;
480+
this.callback(err)
474481
},
475482

476483
failPythonVersion: function failPythonVersion (badVersion) {
477-
var errmsg =
478-
'Python executable "' + this.python +
479-
'" is v' + badVersion + ', which is not supported by gyp.\n' +
480-
'You can pass the --python switch to point to ' +
481-
'Python >= v2.5.0 & < 3.0.0.'
482-
this.callback(new Error(errmsg))
484+
const err = new Error(
485+
'\n******************************************************************\n' +
486+
`Python executable "${this.python}" is v${badVersion}\n` +
487+
'this version is not supported by GYP and hence by node-gyp.\n' +
488+
'It is recommended that you install python 2.7, set the PYTHON env,\n' +
489+
'or use the --python switch to point to a Python >= v2.6.0 & < 3.0.0.\n' +
490+
'For more information consult the documentation at:\n' +
491+
'https://github.com/nodejs/node-gyp#installation\n' +
492+
'***********************************************************************'
493+
);
494+
err.noPython = true;
495+
this.callback(err)
483496
},
484497

485498
// Called on Windows when "python" isn't available in the current $PATH.

test/test-find-python.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ test('find python - python', function (t) {
7474
})
7575

7676
test('find python - python too old', function (t) {
77-
t.plan(4)
77+
t.plan(5)
7878

7979
var f = new TestPythonFinder('python', done)
8080
f.which = function(program, cb) {
@@ -89,12 +89,13 @@ test('find python - python too old', function (t) {
8989
f.checkPython()
9090

9191
function done(err) {
92-
t.ok(/is not supported by gyp/.test(err))
92+
t.ok(/this version is not supported by GYP/.test(err))
93+
t.ok(/For more information consult the documentation/.test(err))
9394
}
9495
})
9596

9697
test('find python - python too new', function (t) {
97-
t.plan(4)
98+
t.plan(5)
9899

99100
var f = new TestPythonFinder('python', done)
100101
f.which = function(program, cb) {
@@ -109,7 +110,8 @@ test('find python - python too new', function (t) {
109110
f.checkPython()
110111

111112
function done(err) {
112-
t.ok(/is not supported by gyp/.test(err))
113+
t.ok(/this version is not supported by GYP/.test(err))
114+
t.ok(/For more information consult the documentation/.test(err))
113115
}
114116
})
115117

@@ -124,7 +126,7 @@ test('find python - no python', function (t) {
124126
f.checkPython()
125127

126128
function done(err) {
127-
t.ok(/Can't find Python executable/.test(err))
129+
t.ok(/For more information consult the documentation/.test(err))
128130
}
129131
})
130132

@@ -171,7 +173,7 @@ test('find python - no python2, no python, unix', function (t) {
171173
f.checkPython()
172174

173175
function done(err) {
174-
t.ok(/Can't find Python executable/.test(err))
176+
t.ok(/For more information consult the documentation/.test(err))
175177
}
176178
})
177179

@@ -242,7 +244,7 @@ test('find python - python 3, use python launcher', function (t) {
242244

243245
test('find python - python 3, use python launcher, python 2 too old',
244246
function (t) {
245-
t.plan(9)
247+
t.plan(10)
246248

247249
var f = new TestPythonFinder('python', done)
248250
f.checkedPythonLauncher = false
@@ -272,7 +274,8 @@ test('find python - python 3, use python launcher, python 2 too old',
272274
f.checkPython()
273275

274276
function done(err) {
275-
t.ok(/is not supported by gyp/.test(err))
277+
t.ok(/this version is not supported by GYP/.test(err))
278+
t.ok(/For more information consult the documentation/.test(err))
276279
}
277280
})
278281

@@ -334,6 +337,6 @@ test('find python - no python, no python launcher, bad guess', function (t) {
334337
f.checkPython()
335338

336339
function done(err) {
337-
t.ok(/Can't find Python executable/.test(err))
340+
t.ok(/For more information consult the documentation/.test(err))
338341
}
339342
})

0 commit comments

Comments
 (0)