mirror of
https://github.com/zap-proto/node-capnp.git
synced 2026-10-30 15:04:25 +00:00
118 lines
3.5 KiB
JavaScript
Executable File
118 lines
3.5 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
// build.js copied from node-fibers package under MIT license.
|
|
// License for node-fibers is as follows:
|
|
//
|
|
// Copyright 2011 Marcel Laverdet
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to
|
|
// deal in the Software without restriction, including without limitation the
|
|
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
// sell copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
// IN THE SOFTWARE.
|
|
|
|
var cp = require('child_process'),
|
|
fs = require('fs'),
|
|
path = require('path');
|
|
|
|
// Parse args
|
|
var force = false, debug = false;
|
|
var
|
|
arch = process.arch,
|
|
platform = process.platform,
|
|
v8 = /[0-9]+\.[0-9]+/.exec(process.versions.v8)[0];
|
|
var args = process.argv.slice(2).filter(function(arg) {
|
|
if (arg === '-f') {
|
|
force = true;
|
|
return false;
|
|
} else if (arg.substring(0, 13) === '--target_arch') {
|
|
arch = arg.substring(14);
|
|
} else if (arg === '--debug') {
|
|
debug = true;
|
|
}
|
|
return true;
|
|
});
|
|
if (!{ia32: true, x64: true, arm: true}.hasOwnProperty(arch)) {
|
|
console.error('Unsupported (?) architecture: `'+ arch+ '`');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Test for pre-built library
|
|
var modPath = platform+ '-'+ arch+ '-v8-'+ v8;
|
|
if (!force) {
|
|
try {
|
|
fs.statSync(path.join(__dirname, 'bin', modPath, 'zap.node'));
|
|
console.log('`'+ modPath+ '` exists; testing');
|
|
cp.execFile(process.execPath, ['src/node-zap/zap-test'], function(err, stdout, stderr) {
|
|
if (err || stdout.trim() !== 'pass' || stderr) {
|
|
console.log('Problem with the binary; manual build incoming');
|
|
build();
|
|
} else {
|
|
console.log('Binary is fine; exiting');
|
|
}
|
|
});
|
|
} catch (ex) {
|
|
// Stat failed
|
|
build();
|
|
}
|
|
} else {
|
|
build();
|
|
}
|
|
|
|
// Build it
|
|
function build() {
|
|
var sp = cp.spawn(
|
|
process.platform === 'win32' ? 'node-gyp.cmd' : 'node-gyp',
|
|
['rebuild'].concat(args),
|
|
{customFds: [0, 1, 2]});
|
|
|
|
sp
|
|
.on('close', function(){ afterBuild(); })
|
|
.on('exit', function(err) {
|
|
if (err) {
|
|
if (err === 127) {
|
|
console.error(
|
|
'node-gyp not found! Please upgrade your install of npm! You need at least 1.1.5 (I think) '+
|
|
'and preferably 1.1.30.'
|
|
);
|
|
} else {
|
|
console.error('Build failed');
|
|
}
|
|
return process.exit(err);
|
|
}
|
|
});
|
|
sp.stdout.pipe(process.stdout);
|
|
sp.stderr.pipe(process.stderr);
|
|
}
|
|
|
|
// Move it to expected location
|
|
function afterBuild() {
|
|
var targetPath = path.join(__dirname, 'build', debug ? 'Debug' : 'Release', 'zap.node');
|
|
var installPath = path.join(__dirname, 'bin', modPath, 'zap.node');
|
|
|
|
try {
|
|
fs.mkdirSync(path.join(__dirname, 'bin', modPath));
|
|
} catch (ex) {}
|
|
|
|
try {
|
|
fs.statSync(targetPath);
|
|
} catch (ex) {
|
|
console.error('Build succeeded but target not found');
|
|
process.exit(1);
|
|
}
|
|
fs.renameSync(targetPath, installPath);
|
|
console.log('Installed in `'+ installPath+ '`');
|
|
}
|
|
|