12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #!/usr/bin/env node
- var proc = require('child_process')
- var os = require('os')
- var path = require('path')
- if (!buildFromSource()) {
- proc.exec('node-gyp-build-optional-packages-test', function (err, stdout, stderr) {
- if (err) {
- console.error(stderr)
- console.error('The failure above indicates the primary issue with the native builds which are included for all' +
- ' major platforms. Will now attempt to build the package locally in case this can be resolved by' +
- ' re-compiling.')
- preinstall()
- }
- })
- } else {
- preinstall()
- }
- function build () {
- var win32 = os.platform() === 'win32'
- var args = [win32 ? 'node-gyp.cmd' : 'node-gyp', 'rebuild']
- try {
- var pkg = require('node-gyp/package.json')
- args = [
- process.execPath,
- path.join(require.resolve('node-gyp/package.json'), '..', typeof pkg.bin === 'string' ? pkg.bin : pkg.bin['node-gyp']),
- 'rebuild'
- ]
- } catch (_) {}
- proc.spawn(args[0], args.slice(1), { stdio: 'inherit', shell: win32, windowsHide: true }).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' : true
- return proc.spawn(cmd, [], {
- shell,
- stdio: 'inherit'
- })
- }
- return proc.spawn(cmd, [], {
- windowsVerbatimArguments: true,
- stdio: 'inherit',
- shell: true,
- windowsHide: true
- })
- }
- function buildFromSource () {
- return hasFlag('--build-from-source') || process.env.npm_config_build_from_source === 'true'
- }
- // TODO (next major): remove in favor of env.npm_config_* which works since npm
- // 0.1.8 while npm_config_argv will stop working in npm 7. See npm/rfcs#90
- function hasFlag (flag) {
- if (!process.env.npm_config_argv) return false
- try {
- return JSON.parse(process.env.npm_config_argv).original.indexOf(flag) !== -1
- } catch (_) {
- return false
- }
- }
|