| "use strict"; |
| |
| module.exports = exports = _package; |
| |
| exports.usage = 'Packs binary (and enclosing directory) into locally staged tarball'; |
| |
| var fs = require('fs'); |
| var path = require('path'); |
| var log = require('npmlog'); |
| var versioning = require('./util/versioning.js'); |
| var napi = require('./util/napi.js'); |
| var write = require('fs').createWriteStream; |
| var existsAsync = fs.exists || path.exists; |
| var mkdirp = require('mkdirp'); |
| var tar = require('tar'); |
| |
| function _package(gyp, argv, callback) { |
| var packlist = require('npm-packlist'); |
| var package_json = JSON.parse(fs.readFileSync('./package.json')); |
| var napi_build_version = napi.get_napi_build_version_from_command_args(argv); |
| var opts = versioning.evaluate(package_json, gyp.opts, napi_build_version); |
| var from = opts.module_path; |
| var binary_module = path.join(from,opts.module_name + '.node'); |
| existsAsync(binary_module,function(found) { |
| if (!found) { |
| return callback(new Error("Cannot package because " + binary_module + " missing: run `node-pre-gyp rebuild` first")); |
| } |
| var tarball = opts.staged_tarball; |
| var filter_func = function(entry) { |
| // ensure directories are +x |
| // https://github.com/mapnik/node-mapnik/issues/262 |
| log.info('package','packing ' + entry.path); |
| return true; |
| }; |
| mkdirp(path.dirname(tarball),function(err) { |
| if (err) return callback(err); |
| packlist({ path: from }).then(function(files) { |
| var base = path.basename(from); |
| files = files.map(function(file) { |
| return path.join(base, file); |
| }); |
| tar.create({ |
| portable: true, |
| gzip: true, |
| onentry: filter_func, |
| file: tarball, |
| cwd: path.dirname(from) |
| }, files, function(err) { |
| if (err) console.error('['+package_json.name+'] ' + err.message); |
| else log.info('package','Binary staged at "' + tarball + '"'); |
| return callback(err); |
| }); |
| }, callback); |
| }); |
| }); |
| } |