mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-14 21:57:55 +08:00
118 lines
3.6 KiB
JavaScript
118 lines
3.6 KiB
JavaScript
|
var path = require('path');
|
||
|
var fs = require('fs');
|
||
|
var childProcess = require('child_process');
|
||
|
|
||
|
var pythonExecutable = process.env.PYTHON;
|
||
|
|
||
|
module.exports = function(cb) {
|
||
|
verifyNode(function(error, nodeSuccessMessage) {
|
||
|
if (error) {
|
||
|
cb(error);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
verifyNpm(function(error, npmSuccessMessage) {
|
||
|
if (error) {
|
||
|
cb(error);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
verifyPython27(function(error, pythonSuccessMessage) {
|
||
|
cb(error, (nodeSuccessMessage + "\n" + npmSuccessMessage + "\n" + pythonSuccessMessage).trim());
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
};
|
||
|
|
||
|
function verifyNode(cb) {
|
||
|
var nodeVersion = process.versions.node;
|
||
|
var versionArray = nodeVersion.split('.');
|
||
|
var nodeMajorVersion = +versionArray[0];
|
||
|
var nodeMinorVersion = +versionArray[1];
|
||
|
if (nodeMajorVersion === 0 && nodeMinorVersion < 10) {
|
||
|
error = "node v0.10 is required to build Edgehill, node " + nodeVersion + " is installed.";
|
||
|
cb(error);
|
||
|
}
|
||
|
else {
|
||
|
cb(null, "Node: v" + nodeVersion);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function verifyNpm(cb) {
|
||
|
var localNpmPath = path.resolve(__dirname, '..', '..', 'build', 'node_modules', '.bin', 'npm');
|
||
|
if (process.platform === 'win32')
|
||
|
localNpmPath += ".cmd";
|
||
|
|
||
|
var npmCommand = fs.existsSync(localNpmPath) ? localNpmPath : 'npm';
|
||
|
if (npmCommand === 'npm' && process.platform === 'win32')
|
||
|
npmCommand += ".cmd";
|
||
|
|
||
|
childProcess.execFile(npmCommand, ['-v'], { env: process.env }, function(err, stdout) {
|
||
|
if (err)
|
||
|
return cb("npm 1.4 is required to build Edgehill. An error (" + err + ") occured when checking the version.");
|
||
|
|
||
|
var npmVersion = stdout ? stdout.trim() : '';
|
||
|
var versionArray = npmVersion.split('.');
|
||
|
var npmMajorVersion = +versionArray[0] || 0;
|
||
|
var npmMinorVersion = +versionArray[1] || 0;
|
||
|
if (npmMajorVersion === 1 && npmMinorVersion < 4)
|
||
|
cb("npm v1.4+ is required to build Edgehill.");
|
||
|
else
|
||
|
cb(null, "npm: v" + npmVersion);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
|
||
|
function verifyPython27(cb) {
|
||
|
if (process.platform == 'win32') {
|
||
|
if (!pythonExecutable) {
|
||
|
var systemDrive = process.env.SystemDrive || 'C:\\';
|
||
|
pythonExecutable = path.join(systemDrive, 'Python27', 'python.exe');
|
||
|
|
||
|
if (!fs.existsSync(pythonExecutable)) {
|
||
|
pythonExecutable = 'python';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
checkPythonVersion(pythonExecutable, cb);
|
||
|
}
|
||
|
else {
|
||
|
cb(null, '');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function checkPythonVersion (python, cb) {
|
||
|
var pythonHelpMessage = "Set the PYTHON env var to '/path/to/Python27/python.exe' if your python is installed in a non-default location.";
|
||
|
|
||
|
childProcess.execFile(python, ['-c', 'import platform; print(platform.python_version());'], { env: process.env }, function (err, stdout) {
|
||
|
if (err) {
|
||
|
error = "Python 2.7 is required to build Edgehill. An error (" + err + ") occured when checking the version of '" + python + "'. ";
|
||
|
error += pythonHelpMessage;
|
||
|
cb(error);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var version = stdout.trim();
|
||
|
if (~version.indexOf('+')) {
|
||
|
version = version.replace(/\+/g, '');
|
||
|
}
|
||
|
if (~version.indexOf('rc')) {
|
||
|
version = version.replace(/rc(.*)$/ig, '');
|
||
|
}
|
||
|
|
||
|
// Edgehill requires python 2.7 or higher (but not python 3) for node-gyp
|
||
|
var versionArray = version.split('.').map(function(num) { return +num; });
|
||
|
var goodPythonVersion = (versionArray[0] === 2 && versionArray[1] >= 7);
|
||
|
if (!goodPythonVersion) {
|
||
|
error = "Python 2.7 is required to build Edgehill. '" + python + "' returns version " + version + ". ";
|
||
|
error += pythonHelpMessage;
|
||
|
cb(error);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Finally, if we've gotten this far, callback to resume the install process.
|
||
|
cb(null, "Python: v" + version);
|
||
|
});
|
||
|
}
|