@sencha/cmd-linux-64
Version:
Productivity and performance optimization tool for building applications with Sencha Ext JS
96 lines (89 loc) • 3.99 kB
JavaScript
const fs = require('fs-extra');
const os = require("os");
const path = require('path');
const pkg = require('./package.json');
const app = `\x1b[32m\x1b[1mℹ 「ext」\x1b[0m install:`;
let log = (() => {
if (["silent", "error", "warn", "http", "info", "verbose", "silly"].indexOf(process.env.npm_config_loglevel) > 3) {
return (m) => {console.log(`${app} ${m}`)}
} else {
return (m) => {console.log(`${app} ${m}`)}
//return () => {};
}
})();
module.exports = (pkgHome) => {
let pkgJsonPath = path.join(pkgHome, 'package.json');
let distDir = path.join(pkgHome, 'dist');
let pkgJson = require(pkgJsonPath);
if (pkg.isInstaller) {
log('This package contains an installer');
let installerPath;
let toRemove;
log(`platform is ${process.platform}`);
if (process.platform === "darwin") {
toRemove = path.join(__dirname, 'dist', `SenchaCmd-${pkg.version_full}-osx.app`);
installerPath = path.join(toRemove, 'Contents', 'MacOS');
if (pkg.version[0] < 6) {
installerPath = path.join(installerPath, 'installbuilder.sh');
} else {
installerPath = path.join(installerPath, 'JavaApplicationStub');
}
} else { // Assume windows, since there's no installer version for linux
var is64Bit = process.arch === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432');
installerPath = path.join(__dirname, 'dist', `SenchaCmd-${pkg.version_full}-windows-${is64Bit ? '64' : '32'}bit.exe`);
toRemove = installerPath;
}
log(`Installer is at ${installerPath}`);
log(`After installed, should remove ${toRemove}`);
let installerArgs = [];
if (pkg.version[0] < 6) {
log(`BitRock mode`)
installerArgs.push('--mode');
installerArgs.push('unattended');
installerArgs.push('--prefix');
installerArgs.push(distDir);
} else {
log(`install4j mode`)
// installerArgs.push('-Djava.awt.headless=true');
installerArgs.push('-Dinstall4j.nolaf=true');
installerArgs.push('-Dinstall4j.logToStderr=true');
installerArgs.push('-q');
installerArgs.push('-dir');
installerArgs.push(distDir);
installerArgs.push('-Dall=true');
installerArgs.push('-VnpmMode=true');
installerArgs.push('-VaddToPath=1'); // Confusingly, addToPath is not a boolean but an array index: 0=yes, 1=no
}
log(`Invoking ${installerPath}`);
log(`With arguments: '${installerArgs.join(' ')}'`)
fs.chmodSync(installerPath, '755')
log(`chmodsync`)
try {
log(require('child_process').execFileSync(installerPath, installerArgs).toString());
} catch (spawnRet) {
console.log(spawnRet)
//mjg
// if (spawnRet.error) {
// log('\x1b[31m\x1b[1m[ERR]\x1b[0m' + spawnRet.error.message);
// }
// if (spawnRet.stderr) {
// log('\x1b[31m\x1b[1m[ERR]\x1b[0m' + spawnRet.stderr.trim());
// }
// if (spawnRet.message) {
// log('\x1b[31m\x1b[1m[ERR]\x1b[0m' + spawnRet.message.trim());
// }
}
} else {
// log(`Install for Sencha tooling completed`);
fs.moveSync(path.join(__dirname, 'dist'), distDir, { overwrite: true });
}
// log(`Removing installation files`);
//log(`Removing ${__dirname}/install.js`);
fs.removeSync(path.join(__dirname, "install.js"));
//log(`Removing ${pkgHome}/platform-install.js`);
fs.removeSync(path.join(pkgHome, 'platform-install.js'));
//log(`Removing install hook in main package`);
delete pkgJson.scripts.install;
pkgJson.platformPkg = pkg.name;
fs.outputFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));
};