mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 15:37:46 +03:00
86 lines
2.6 KiB
JavaScript
86 lines
2.6 KiB
JavaScript
'use strict';
|
|
|
|
const childProcess = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const CONFIG = require('../config');
|
|
|
|
module.exports = function(ci) {
|
|
verifyNode();
|
|
verifyNpm(ci);
|
|
if (process.platform === 'win32') {
|
|
verifyPython();
|
|
}
|
|
};
|
|
|
|
function verifyNode() {
|
|
const fullVersion = process.versions.node;
|
|
const majorVersion = fullVersion.split('.')[0];
|
|
if (majorVersion >= 6) {
|
|
console.log(`Node:\tv${fullVersion}`);
|
|
} else if (majorVersion >= 4) {
|
|
console.log(`Node:\tv${fullVersion}`);
|
|
console.warn(
|
|
'\tWarning: Building on Node below version 6 is deprecated. Please use Node 6.x+ to build Atom.'
|
|
);
|
|
} else {
|
|
throw new Error(
|
|
`node v4+ is required to build Atom. node v${fullVersion} is installed.`
|
|
);
|
|
}
|
|
}
|
|
|
|
function verifyNpm(ci) {
|
|
const stdout = childProcess.execFileSync(
|
|
CONFIG.getNpmBinPath(ci),
|
|
['--version'],
|
|
{ env: process.env }
|
|
);
|
|
const fullVersion = stdout.toString().trim();
|
|
const majorVersion = fullVersion.split('.')[0];
|
|
const oldestMajorVersionSupported = ci ? 6 : 3;
|
|
if (majorVersion >= oldestMajorVersionSupported) {
|
|
console.log(`Npm:\tv${fullVersion}`);
|
|
} else {
|
|
throw new Error(
|
|
`npm v${oldestMajorVersionSupported}+ is required to build Atom. npm v${fullVersion} was detected.`
|
|
);
|
|
}
|
|
}
|
|
|
|
function verifyPython() {
|
|
const systemDrive = process.env.SystemDrive || 'C:\\';
|
|
let pythonExecutable;
|
|
if (process.env.PYTHON) {
|
|
pythonExecutable = process.env.PYTHON;
|
|
} else {
|
|
const pythonBinPath = path.join(systemDrive, 'Python27', 'python.exe');
|
|
if (fs.existsSync(pythonBinPath)) {
|
|
pythonExecutable = pythonBinPath;
|
|
} else {
|
|
pythonExecutable = 'python';
|
|
}
|
|
}
|
|
|
|
let stdout = childProcess.execFileSync(
|
|
pythonExecutable,
|
|
['-c', 'import platform\nprint(platform.python_version())'],
|
|
{ env: process.env }
|
|
);
|
|
if (stdout.indexOf('+') !== -1) stdout = stdout.replace(/\+/g, '');
|
|
if (stdout.indexOf('rc') !== -1) stdout = stdout.replace(/rc(.*)$/gi, '');
|
|
const fullVersion = stdout.toString().trim();
|
|
const versionComponents = fullVersion.split('.');
|
|
const majorVersion = Number(versionComponents[0]);
|
|
const minorVersion = Number(versionComponents[1]);
|
|
if (majorVersion === 2 && minorVersion === 7) {
|
|
console.log(`Python:\tv${fullVersion}`);
|
|
} else {
|
|
throw new Error(
|
|
`Python 2.7 is required to build Atom. ${pythonExecutable} returns version ${fullVersion}.\n` +
|
|
`Set the PYTHON env var to '/path/to/Python27/python.exe' if your python is installed in a non-default location.`
|
|
);
|
|
}
|
|
}
|