var promisify = require("promisify-node"); var path = require("path"); var fs = require("fs"); var prepareForBuild = require("./prepareForBuild"); var exec = promisify(function(command, opts, callback) { return require("child_process").exec(command, opts, callback); }); var fromRegistry; try { fs.statSync(path.join(__dirname, "..", "include")); fs.statSync(path.join(__dirname, "..", "src")); fromRegistry = true; } catch(e) { fromRegistry = false; } if (!fromRegistry) { console.info("[nodegit] Local install, no fetching allowed."); return prepareAndBuild(); } if (process.env.BUILD_DEBUG) { console.info("[nodegit] Doing a debug build, no fetching allowed."); return prepareAndBuild(); } if (process.env.BUILD_ONLY) { console.info("[nodegit] BUILD_ONLY is set to true, no fetching allowed."); return prepareAndBuild(); } return installPrebuilt(); function installPrebuilt() { console.info("[nodegit] Fetching binary from S3."); var npg = pathForTool("node-pre-gyp"); return exec(npg + " install --fallback-to-build=false") .then( function() { console.info("[nodegit] Completed installation successfully."); }, function(err) { console.info("[nodegit] Failed to install prebuilt binary:"); console.error(err); console.info("[nodegit] Building manually. (You'll be here a while.)"); return prepareAndBuild(); } ); } function pathForTool(name) { var toolPath = path.resolve(".", "node_modules", ".bin", name); toolPath = "\"" + toolPath + "\""; return toolPath; } function prepareAndBuild() { console.info("[nodegit] Regenerating and configuring code"); return prepareForBuild() .then(function() { return build(); }); } function build() { console.info("[nodegit] Everything is ready to go, attempting compilation"); var electronVersion = process.env.ELECTRON_VERSION; var nwjsVersion = process.env.NWJS_VERSION; var opts = { cwd: ".", maxBuffer: Number.MAX_VALUE, env: process.env }; var builder = "node-gyp"; var debug = (process.env.BUILD_DEBUG ? " --debug" : ""); var target = ""; var distUrl; process.argv.forEach(function(arg) { if (~arg.indexOf("electronVersion")) { electronVersion = arg.split("=")[1].trim(); } else if (~arg.indexOf("nsjwVersion")) { nwjsVersion = arg.split("=")[1].trim(); } }); if (electronVersion) { target = "--target=" + electronVersion; distUrl = "--dist-url=https://gh-contractor-zcbenz.s3." + "amazonaws.com/atom-shell/dist"; } else if (nwjsVersion) { builder = "nw-gyp"; target = "--target=" + nwjsVersion; } var home = process.platform == "win32" ? process.env.USERPROFILE : process.env.HOME; opts.env.HOME = path.join(home, ".nodegit-gyp"); var cmd = [ pathForTool(builder), "rebuild", debug, target, distUrl ] .join(" ") .trim(); return exec(cmd, opts) .then(function() { console.info("[nodegit] Compilation complete."); console.info("[nodegit] Completed installation successfully."); process.exitCode = 0; }, function(err, stderr) { console.error(err); console.error(stderr); process.exitCode = 13; } ); }