Files
gulp-haxetool/haxetool/neko.js
2018-05-02 22:05:05 +03:00

82 lines
1.9 KiB
JavaScript

const os = require('os');
const fs = require('fs');
const path = require('path');
const run = require('../run/index');
const Sdk = require('./sdk');
const Env = require('./env');
class NekoLink {
static get type() {
switch (os.type()) {
case 'Linux': return 'linux';
case 'Windows_NT': return 'win';
}
}
static get arch() {
switch (os.arch()) {
case 'ia32': return '';
case 'x64': return '64';
}
}
static get ext() {
switch (os.type()) {
case 'Linux': return 'tar.gz';
case 'Windows_NT': return 'zip';
}
}
static get(version) {
const vv = version.split('\.').join('-');
const filename = `neko-${version}-${NekoLink.type}${NekoLink.arch}.${NekoLink.ext}`;
return `https://github.com/HaxeFoundation/neko/releases/download/v${vv}/${filename}`;
}
}
class Neko extends Sdk {
constructor(version) {
super(Neko.ID, version || Neko.VERSION);
}
get link() {
return NekoLink.get(this.version);
}
get prepared() {
try {
return fs.existsSync(this.nekoBin);
} catch (e) {
return false;
}
}
activate() {
Env.set('NEKO_INSTPATH', this.path);
Env.addPath(this.path);
Env.addPath(this.path, 'LD_LIBRARY_PATH');
}
get nekoBin() {
let binname = 'neko';
if (os.type() === 'Windows_NT') binname += '.exe';
return path.join(this.path, binname);
}
run(filename, params) {
this.log.i('_run_ *%s*', filename);
this.activate();
return run(`${this.nekoBin} ${filename}`, params).exec();
}
}
Neko.ID = 'neko';
Neko.VERSION_2_2_0 = '2.2.0';
Neko.VERSION = Neko.VERSION_2_2_0;
module.exports = Neko;