initial commit
This commit is contained in:
216
node_modules/node-gyp/lib/node-gyp.js
generated
vendored
Normal file
216
node_modules/node-gyp/lib/node-gyp.js
generated
vendored
Normal file
@@ -0,0 +1,216 @@
|
||||
|
||||
/**
|
||||
* Module exports.
|
||||
*/
|
||||
|
||||
module.exports = exports = gyp
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var fs = require('graceful-fs')
|
||||
, path = require('path')
|
||||
, nopt = require('nopt')
|
||||
, log = require('npmlog')
|
||||
, child_process = require('child_process')
|
||||
, EE = require('events').EventEmitter
|
||||
, inherits = require('util').inherits
|
||||
, commands = [
|
||||
// Module build commands
|
||||
'build'
|
||||
, 'clean'
|
||||
, 'configure'
|
||||
, 'rebuild'
|
||||
// Development Header File management commands
|
||||
, 'install'
|
||||
, 'list'
|
||||
, 'remove'
|
||||
]
|
||||
, aliases = {
|
||||
'ls': 'list'
|
||||
, 'rm': 'remove'
|
||||
}
|
||||
|
||||
// differentiate node-gyp's logs from npm's
|
||||
log.heading = 'gyp'
|
||||
|
||||
/**
|
||||
* The `gyp` function.
|
||||
*/
|
||||
|
||||
function gyp () {
|
||||
return new Gyp()
|
||||
}
|
||||
|
||||
function Gyp () {
|
||||
var self = this
|
||||
|
||||
this.devDir = ''
|
||||
this.commands = {}
|
||||
|
||||
commands.forEach(function (command) {
|
||||
self.commands[command] = function (argv, callback) {
|
||||
log.verbose('command', command, argv)
|
||||
return require('./' + command)(self, argv, callback)
|
||||
}
|
||||
})
|
||||
}
|
||||
inherits(Gyp, EE)
|
||||
exports.Gyp = Gyp
|
||||
var proto = Gyp.prototype
|
||||
|
||||
/**
|
||||
* Export the contents of the package.json.
|
||||
*/
|
||||
|
||||
proto.package = require('../package')
|
||||
|
||||
/**
|
||||
* nopt configuration definitions
|
||||
*/
|
||||
|
||||
proto.configDefs = {
|
||||
help: Boolean // everywhere
|
||||
, arch: String // 'configure'
|
||||
, cafile: String // 'install'
|
||||
, debug: Boolean // 'build'
|
||||
, directory: String // bin
|
||||
, make: String // 'build'
|
||||
, msvs_version: String // 'configure'
|
||||
, ensure: Boolean // 'install'
|
||||
, solution: String // 'build' (windows only)
|
||||
, proxy: String // 'install'
|
||||
, devdir: String // everywhere
|
||||
, nodedir: String // 'configure'
|
||||
, loglevel: String // everywhere
|
||||
, python: String // 'configure'
|
||||
, 'dist-url': String // 'install'
|
||||
, 'tarball': String // 'install'
|
||||
, jobs: String // 'build'
|
||||
, thin: String // 'configure'
|
||||
}
|
||||
|
||||
/**
|
||||
* nopt shorthands
|
||||
*/
|
||||
|
||||
proto.shorthands = {
|
||||
release: '--no-debug'
|
||||
, C: '--directory'
|
||||
, debug: '--debug'
|
||||
, j: '--jobs'
|
||||
, silly: '--loglevel=silly'
|
||||
, verbose: '--loglevel=verbose'
|
||||
, silent: '--loglevel=silent'
|
||||
}
|
||||
|
||||
/**
|
||||
* expose the command aliases for the bin file to use.
|
||||
*/
|
||||
|
||||
proto.aliases = aliases
|
||||
|
||||
/**
|
||||
* Parses the given argv array and sets the 'opts',
|
||||
* 'argv' and 'command' properties.
|
||||
*/
|
||||
|
||||
proto.parseArgv = function parseOpts (argv) {
|
||||
this.opts = nopt(this.configDefs, this.shorthands, argv)
|
||||
this.argv = this.opts.argv.remain.slice()
|
||||
|
||||
var commands = this.todo = []
|
||||
|
||||
// create a copy of the argv array with aliases mapped
|
||||
argv = this.argv.map(function (arg) {
|
||||
// is this an alias?
|
||||
if (arg in this.aliases) {
|
||||
arg = this.aliases[arg]
|
||||
}
|
||||
return arg
|
||||
}, this)
|
||||
|
||||
// process the mapped args into "command" objects ("name" and "args" props)
|
||||
argv.slice().forEach(function (arg) {
|
||||
if (arg in this.commands) {
|
||||
var args = argv.splice(0, argv.indexOf(arg))
|
||||
argv.shift()
|
||||
if (commands.length > 0) {
|
||||
commands[commands.length - 1].args = args
|
||||
}
|
||||
commands.push({ name: arg, args: [] })
|
||||
}
|
||||
}, this)
|
||||
if (commands.length > 0) {
|
||||
commands[commands.length - 1].args = argv.splice(0)
|
||||
}
|
||||
|
||||
// support for inheriting config env variables from npm
|
||||
var npm_config_prefix = 'npm_config_'
|
||||
Object.keys(process.env).forEach(function (name) {
|
||||
if (name.indexOf(npm_config_prefix) !== 0) return
|
||||
var val = process.env[name]
|
||||
if (name === npm_config_prefix + 'loglevel') {
|
||||
log.level = val
|
||||
} else {
|
||||
// add the user-defined options to the config
|
||||
name = name.substring(npm_config_prefix.length)
|
||||
// gyp@741b7f1 enters an infinite loop when it encounters
|
||||
// zero-length options so ensure those don't get through.
|
||||
if (name) this.opts[name] = val
|
||||
}
|
||||
}, this)
|
||||
|
||||
if (this.opts.loglevel) {
|
||||
log.level = this.opts.loglevel
|
||||
}
|
||||
log.resume()
|
||||
}
|
||||
|
||||
/**
|
||||
* Spawns a child process and emits a 'spawn' event.
|
||||
*/
|
||||
|
||||
proto.spawn = function spawn (command, args, opts) {
|
||||
if (!opts) opts = {}
|
||||
if (!opts.silent && !opts.stdio) {
|
||||
opts.stdio = [ 0, 1, 2 ]
|
||||
}
|
||||
var cp = child_process.spawn(command, args, opts)
|
||||
log.info('spawn', command)
|
||||
log.info('spawn args', args)
|
||||
return cp
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the usage instructions for node-gyp.
|
||||
*/
|
||||
|
||||
proto.usage = function usage () {
|
||||
var str = [
|
||||
''
|
||||
, ' Usage: node-gyp <command> [options]'
|
||||
, ''
|
||||
, ' where <command> is one of:'
|
||||
, commands.map(function (c) {
|
||||
return ' - ' + c + ' - ' + require('./' + c).usage
|
||||
}).join('\n')
|
||||
, ''
|
||||
, 'node-gyp@' + this.version + ' ' + path.resolve(__dirname, '..')
|
||||
, 'node@' + process.versions.node
|
||||
].join('\n')
|
||||
return str
|
||||
}
|
||||
|
||||
/**
|
||||
* Version number getter.
|
||||
*/
|
||||
|
||||
Object.defineProperty(proto, 'version', {
|
||||
get: function () {
|
||||
return this.package.version
|
||||
}
|
||||
, enumerable: true
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user