You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.5 KiB
64 lines
1.5 KiB
#!/usr/bin/env node
|
|
|
|
var proc = require('child_process')
|
|
var os = require('os')
|
|
var path = require('path')
|
|
|
|
if (!buildFromSource()) {
|
|
proc.exec('node-gyp-build-test', function (err) {
|
|
if (err) preinstall()
|
|
})
|
|
} else {
|
|
preinstall()
|
|
}
|
|
|
|
function buildFromSource () {
|
|
if (!process.env.npm_config_argv) return false
|
|
|
|
try {
|
|
return JSON.parse(process.env.npm_config_argv).cooked.indexOf('--build-from-source') !== -1
|
|
} catch (_) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
function build () {
|
|
var args = [ os.platform() === 'win32' ? 'node-gyp.cmd' : 'node-gyp', 'rebuild' ]
|
|
|
|
try {
|
|
args = [
|
|
process.execPath,
|
|
path.join(require.resolve('node-gyp/package.json'), '..', require('node-gyp/package.json').bin['node-gyp']),
|
|
'rebuild'
|
|
]
|
|
} catch (_) {}
|
|
|
|
proc.spawn(args[0], args.slice(1), {stdio: 'inherit'}).on('exit', function (code) {
|
|
if (code || !process.argv[3]) process.exit(code)
|
|
exec(process.argv[3]).on('exit', function (code) {
|
|
process.exit(code)
|
|
})
|
|
})
|
|
}
|
|
|
|
function preinstall () {
|
|
if (!process.argv[2]) return build()
|
|
exec(process.argv[2]).on('exit', function (code) {
|
|
if (code) process.exit(code)
|
|
build()
|
|
})
|
|
}
|
|
|
|
function exec (cmd) {
|
|
if (process.platform !== 'win32') {
|
|
var shell = os.platform() === 'android' ? 'sh' : '/bin/sh'
|
|
return proc.spawn(shell, ['-c', cmd], {
|
|
stdio: 'inherit'
|
|
})
|
|
}
|
|
|
|
return proc.spawn(process.env.comspec || 'cmd.exe', ['/s', '/c', '"' + cmd + '"'], {
|
|
windowsVerbatimArguments: true,
|
|
stdio: 'inherit'
|
|
})
|
|
}
|