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.
63 lines
2.0 KiB
63 lines
2.0 KiB
var fs = require('fs') |
|
var async = require('async') |
|
var getAbi = require('./abi') |
|
var getTarPath = require('./util').getTarPath |
|
var build = require('./build') |
|
var strip = require('./strip') |
|
var pack = require('./pack') |
|
|
|
function prebuild (opts, target, callback) { |
|
var pkg = opts.pkg |
|
var log = opts.log |
|
var buildLog = opts.buildLog || function () {} |
|
|
|
if (target[0] !== 'v') target = 'v' + target |
|
var buildLogMessage = 'Preparing to prebuild ' + pkg.name + '@' + pkg.version + ' for ' + target + ' on ' + opts.platform + '-' + opts.arch + ' using ' + opts.backend |
|
if (opts.libc && opts.libc.length > 0) buildLogMessage += 'using libc ' + opts.libc |
|
buildLog(buildLogMessage) |
|
getAbi(opts, target, function (err, abi) { |
|
if (err) return log.error('build', err.message) |
|
var tarPath = getTarPath(opts, abi) |
|
fs.stat(tarPath, function (err, st) { |
|
if (!err && !opts.force) { |
|
buildLog(tarPath + ' exists, skipping build') |
|
return callback(null, tarPath) |
|
} |
|
var tasks = [ |
|
function (cb) { |
|
build(opts, target, function (err, filename) { |
|
if (err) return cb(err) |
|
cb(null, filename) |
|
}) |
|
}, |
|
function (filename, cb) { |
|
buildLog('Packing ' + filename + ' into ' + tarPath) |
|
pack(filename, tarPath, function (err) { |
|
if (err) return cb(err) |
|
cb(null) |
|
}) |
|
} |
|
] |
|
|
|
if (opts.strip) { |
|
tasks.splice(1, 0, function (filename, cb) { |
|
buildLog('Stripping debug information from ' + filename) |
|
strip(filename, function (err) { |
|
if (err) return cb(err) |
|
cb(null, filename) |
|
}) |
|
}) |
|
} |
|
|
|
// TODO if we can move out buildLog() to the caller, we can simply do |
|
// async.waterfall(tasks, callback) |
|
async.waterfall(tasks, function (err) { |
|
if (err) return callback(err) |
|
buildLog('Prebuild written to ' + tarPath) |
|
callback(null, tarPath) |
|
}) |
|
}) |
|
}) |
|
} |
|
|
|
module.exports = prebuild
|
|
|