txedge-js
Version:
Edge.js: run .NET and Node.js in-process on Windows, Mac OS, and Linux
89 lines (73 loc) • 2.3 kB
JavaScript
var fs = require('fs')
, path = require('path')
, spawn = require('child_process').spawn
, whereis = require('./whereis');
if (process.platform === 'win32') {
var libroot = path.resolve(__dirname, '../lib/native/win32')
, lib32bit = path.resolve(libroot, 'ia32')
, lib64bit = path.resolve(libroot, 'x64');
function copyFile(filePath, filename) {
return function(copyToDir) {
//console.log( 'copy '+filename+' from '+filePath+' to '+ copyToDir );
outFile = path.resolve(copyToDir, filename);
if ( fs.existsSync( outFile ) ) {
// clear readonly: add write permission to ogw (222 octal -> 92 hex -> 146 decimal)
fs.chmodSync( outFile, fs.statSync(outFile).mode | 146 )
}
fs.writeFileSync(path.resolve(copyToDir, filename), fs.readFileSync(filePath));
};
}
function isDirectory(info) {
return info.isDirectory;
}
function getInfo(basedir) {
return function(file) {
var filepath = path.resolve(basedir, file);
return {
path: filepath,
isDirectory: fs.statSync(filepath).isDirectory()
};
}
}
function getPath(info) {
return info.path;
}
var dest32dirs = fs.readdirSync(lib32bit)
.map(getInfo(lib32bit))
.filter(isDirectory)
.map(getPath);
var redist = [
'concrt140.dll',
'msvcp140.dll',
'vccorlib140.dll',
'vcruntime140.dll',
];
redist.forEach(function (dllname) {
var dll32bit = path.resolve(lib32bit, dllname);
dest32dirs.forEach(copyFile(dll32bit, dllname));
});
var dest64dirs = fs.readdirSync(lib64bit)
.map(getInfo(lib64bit))
.filter(isDirectory)
.map(getPath);
redist.forEach(function (dllname) {
var dll64bit = path.resolve(lib64bit, dllname);
dest64dirs.forEach(copyFile(dll64bit, dllname));
});
var dotnetPath = whereis('dotnet', 'dotnet.exe');
if (dotnetPath) {
spawn(dotnetPath, ['restore'], { stdio: 'inherit', cwd: path.resolve(__dirname, '..', 'lib', 'bootstrap') })
.on('close', function() {
spawn(dotnetPath, ['build', '--configuration', 'Release'], { stdio: 'inherit', cwd: path.resolve(__dirname, '..', 'lib', 'bootstrap') })
.on('close', function() {
require('./checkplatform');
});
});
}
else {
require('./checkplatform');
}
}
else {
spawn('node-gyp', ['configure', 'build'], { stdio: 'inherit' });
}