Files
nexe/lib/compiler.js
T
2017-06-26 20:01:53 -05:00

111 lines
3.7 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NexeCompiler = undefined;
var _path = require('path');
var _bluebird = require('bluebird');
var _fs = require('fs');
var _child_process = require('child_process');
var _logger = require('./logger');
var logger = _interopRequireWildcard(_logger);
var _util = require('./util');
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new _bluebird.Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return _bluebird.Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
const isWindows = process.platform === 'win32';
const isBsd = Boolean(~process.platform.indexOf('bsd'));
const make = isWindows ? 'vcbuild.bat' : isBsd ? 'gmake' : 'make';
const configure = isWindows ? 'configure' : './configure';
class NexeCompiler {
constructor(options) {
var _this = this;
this.options = options;
logger.setLevel(options.loglevel);
this.log = logger;
this.python = options.python;
this.configure = options.configure;
this.make = isWindows ? options.vcBuild : options.make;
this.src = (0, _path.join)(options.temp, options.version);
this.env = Object.assign({}, process.env);
this.files = [];
this.readFileAsync = (() => {
var _ref = _asyncToGenerator(function* (file) {
let cachedFile = _this.files.find(function (x) {
return (0, _path.normalize)(x.filename) === (0, _path.normalize)(file);
});
if (!cachedFile) {
cachedFile = {
filename: file,
contents: yield (0, _util.readFileAsync)((0, _path.join)(_this.src, file), 'utf-8').catch({ code: 'ENOENT' }, function () {
return '';
})
};
_this.files.push(cachedFile);
}
return cachedFile;
});
return function (_x) {
return _ref.apply(this, arguments);
};
})();
this.writeFileAsync = (file, contents) => (0, _util.writeFileAsync)((0, _path.join)(this.src, file), contents);
}
set python(pythonPath) {
if (!pythonPath) {
return;
}
if (isWindows) {
this.env.PATH = this.env.PATH + ';"' + (0, _util.dequote)((0, _path.normalize)(pythonPath)) + '"';
} else {
this.env.PYTHON = pythonPath;
}
}
get _deliverableLocation() {
return isWindows ? (0, _path.join)(this.src, 'Release', 'node.exe') : (0, _path.join)(this.src, 'out', 'Release', 'node');
}
_runBuildCommandAsync(command, args) {
return new _bluebird.Promise((resolve, reject) => {
(0, _child_process.spawn)(command, args, {
cwd: this.src,
env: this.env,
stdio: 'ignore'
}).once('error', reject).once('close', resolve);
});
}
_configureAsync() {
return this._runBuildCommandAsync(this.env.PYTHON || 'python', [configure, ...this.configure]);
}
buildAsync() {
var _this2 = this;
return _asyncToGenerator(function* () {
yield _this2._configureAsync();
return _this2._runBuildCommandAsync(make, _this2.make);
})();
}
getDeliverableAsync() {
return _bluebird.Promise.resolve((0, _fs.createReadStream)(this._deliverableLocation));
}
}
exports.NexeCompiler = NexeCompiler;