Index: node_modules/node-gyp/test/process-exec-sync.js
===================================================================
--- node_modules/node-gyp/test/process-exec-sync.js	(revision 81bc7da776d8cda42939ef4ab350c88d13b4941f)
+++ node_modules/node-gyp/test/process-exec-sync.js	(revision 81bc7da776d8cda42939ef4ab350c88d13b4941f)
@@ -0,0 +1,140 @@
+'use strict'
+
+const fs = require('graceful-fs')
+const childProcess = require('child_process')
+
+function startsWith (str, search, pos) {
+  if (String.prototype.startsWith) {
+    return str.startsWith(search, pos)
+  }
+
+  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search
+}
+
+function processExecSync (file, args, options) {
+  var child, error, timeout, tmpdir, command
+  command = makeCommand(file, args)
+
+  /*
+    this function emulates child_process.execSync for legacy node <= 0.10.x
+    derived from https://github.com/gvarsanyi/sync-exec/blob/master/js/sync-exec.js
+  */
+
+  options = options || {}
+  // init timeout
+  timeout = Date.now() + options.timeout
+  // init tmpdir
+  var osTempBase = '/tmp'
+  var os = determineOS()
+  osTempBase = '/tmp'
+
+  if (process.env.TMP) {
+    osTempBase = process.env.TMP
+  }
+
+  if (osTempBase[osTempBase.length - 1] !== '/') {
+    osTempBase += '/'
+  }
+
+  tmpdir = osTempBase + 'processExecSync.' + Date.now() + Math.random()
+  fs.mkdirSync(tmpdir)
+
+  // init command
+  if (os === 'linux') {
+    command = '(' + command + ' > ' + tmpdir + '/stdout 2> ' + tmpdir +
+      '/stderr); echo $? > ' + tmpdir + '/status'
+  } else {
+    command = '(' + command + ' > ' + tmpdir + '/stdout 2> ' + tmpdir +
+      '/stderr) | echo %errorlevel% > ' + tmpdir + '/status | exit'
+  }
+
+  // init child
+  child = childProcess.exec(command, options)
+
+  var maxTry = 100000 // increases the test time by 6 seconds on win-2016-node-0.10
+  var tryCount = 0
+  while (tryCount < maxTry) {
+    try {
+      var x = fs.readFileSync(tmpdir + '/status')
+      if (x.toString() === '0') {
+        break
+      }
+    } catch (ignore) {}
+    tryCount++
+    if (Date.now() > timeout) {
+      error = child
+      break
+    }
+  }
+
+  ['stdout', 'stderr', 'status'].forEach(function (file) {
+    child[file] = fs.readFileSync(tmpdir + '/' + file, options.encoding)
+    setTimeout(unlinkFile, 500, tmpdir + '/' + file)
+  })
+
+  child.status = Number(child.status)
+  if (child.status !== 0) {
+    error = child
+  }
+
+  try {
+    fs.rmdirSync(tmpdir)
+  } catch (ignore) {}
+  if (error) {
+    throw error
+  }
+  return child.stdout
+}
+
+function makeCommand (file, args) {
+  var command, quote
+  command = file
+  if (args.length > 0) {
+    for (var i in args) {
+      command = command + ' '
+      if (args[i][0] === '-') {
+        command = command + args[i]
+      } else {
+        if (!quote) {
+          command = command + '"'
+          quote = true
+        }
+        command = command + args[i]
+        if (quote) {
+          if (args.length === (parseInt(i) + 1)) {
+            command = command + '"'
+          }
+        }
+      }
+    }
+  }
+  return command
+}
+
+function determineOS () {
+  var os = ''
+  var tmpVar = ''
+  if (process.env.OSTYPE) {
+    tmpVar = process.env.OSTYPE
+  } else if (process.env.OS) {
+    tmpVar = process.env.OS
+  } else {
+    // default is linux
+    tmpVar = 'linux'
+  }
+
+  if (startsWith(tmpVar, 'linux')) {
+    os = 'linux'
+  }
+  if (startsWith(tmpVar, 'win')) {
+    os = 'win'
+  }
+
+  return os
+}
+
+function unlinkFile (file) {
+  fs.unlinkSync(file)
+}
+
+module.exports = processExecSync
