diff --git a/deps/npm/node_modules/node-gyp/addon.gypi b/deps/npm/node_modules/node-gyp/addon.gypi index b4ac369a..4f866859 100644 --- a/deps/npm/node_modules/node-gyp/addon.gypi +++ b/deps/npm/node_modules/node-gyp/addon.gypi @@ -71,7 +71,7 @@ # that the addon will work regardless of whether the node/iojs binary # is named node.exe, iojs.exe, or something else. 'conditions': [ - [ 'OS=="win"', { + [ 'OS=="msvc"', { 'defines': [ 'HOST_BINARY=\"<(node_host_binary)<(EXECUTABLE_SUFFIX)\"', ], 'sources': [ '<(node_gyp_dir)/src/win_delay_load_hook.cc', @@ -167,20 +167,21 @@ } }] ], + 'library_dirs': [ '<(node_root_dir)/lib' ], 'libraries': [ - '-lkernel32.lib', - '-luser32.lib', - '-lgdi32.lib', - '-lwinspool.lib', - '-lcomdlg32.lib', - '-ladvapi32.lib', - '-lshell32.lib', - '-lole32.lib', - '-loleaut32.lib', - '-luuid.lib', - '-lodbc32.lib', - '-lDelayImp.lib', - '-l"<(node_lib_file)"' + '-lkernel32', + '-luser32', + '-lgdi32', + '-lwinspool', + '-lcomdlg32', + '-ladvapi32', + '-lshell32', + '-lole32', + '-loleaut32', + '-luuid', + '-lodbc32', + '-ldelayimp', + '-lnode' ], 'msvs_disabled_warnings': [ # warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent' diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py index 77800661..3f35afd9 100755 --- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py @@ -533,7 +533,7 @@ def gyp_main(args): # Nothing in the variable, default based on platform. elif sys.platform == "darwin": options.formats = ["xcode"] - elif sys.platform in ("win32", "cygwin"): + elif sys.platform in ("win32", "cygwin") and not "GCC" in sys.version: options.formats = ["msvs"] else: options.formats = ["make"] diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py index e8604790..e199821f 100644 --- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py @@ -103,6 +103,8 @@ def CalculateVariables(default_variables, params): elif flavor == "zos": default_variables.setdefault("SHARED_LIB_SUFFIX", ".x") COMPILABLE_EXTENSIONS.update({".pli": "pli"}) + elif flavor == "win": + default_variables.setdefault("SHARED_LIB_SUFFIX", ".dll") else: default_variables.setdefault("SHARED_LIB_SUFFIX", ".so") default_variables.setdefault("SHARED_LIB_DIR", "$(builddir)/lib.$(TOOLSET)") @@ -145,6 +147,26 @@ def CalculateGeneratorInputInfo(params): SPACE_REPLACEMENT = "?" +LINK_COMMANDS_WINMINGW = """\ +quiet_cmd_alink = AR($(TOOLSET)) $@ +cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) + +quiet_cmd_alink_thin = AR($(TOOLSET)) $@ +cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) + +# Due to circular dependencies between libraries :(, we wrap the +# special "figure out circular dependencies" flags around the entire +# input list during linking. +quiet_cmd_link = LINK($(TOOLSET)) $@ +cmd_link = $(LINK.$(TOOLSET)) -o $@ $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,--start-group $(LD_INPUTS) $(LIBS) -Wl,--end-group + +quiet_cmd_solink = SOLINK($(TOOLSET)) $@ +cmd_solink = $(LINK.$(TOOLSET)) -o $@ -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,--out-implib,$(builddir)/$(@F).a -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) + +quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ +cmd_solink_module = $(LINK.$(TOOLSET)) -o $@ -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) $(filter-out FORCE_DO_CMD, $^) -Wl,--start-group $(LD_INPUTS) $(LIBS) -Wl,--end-group +""" + LINK_COMMANDS_LINUX = """\ quiet_cmd_alink = AR($(TOOLSET)) $@ cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) @@ -1585,6 +1607,8 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD target_ext = ".a" elif self.flavor == "zos": target_ext = ".x" + elif self.flavor == "win": + target_ext = ".dll" else: target_ext = ".so" elif self.type == "none": @@ -2558,6 +2582,13 @@ def GenerateOutput(target_list, target_dicts, data, params): elif flavor == "openbsd": copy_archive_arguments = "-pPRf" header_params.update({"copy_archive_args": copy_archive_arguments}) + elif flavor == "win": + copy_archive_arguments = "-pPRf" + header_params.update( + { + "link_commands": LINK_COMMANDS_WINMINGW, + } + ) elif flavor == "aix": copy_archive_arguments = "-pPRf" header_params.update( diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js index 9c0cca8f..081c57bd 100644 --- a/deps/npm/node_modules/node-gyp/lib/build.js +++ b/deps/npm/node_modules/node-gyp/lib/build.js @@ -6,7 +6,7 @@ const path = require('path') const { glob } = require('tinyglobby') const log = require('./log') const which = require('which') -const win = process.platform === 'win32' +const win = require('os').type() === 'Windows_NT' async function build (gyp, argv) { let platformMake = 'make' @@ -193,7 +193,7 @@ async function build (gyp, argv) { } } - if (!win) { + if (!process.platform === 'win32') { // Add build-time dependency symlinks (such as Python) to PATH buildBinsDir = path.resolve('build', 'node_gyp_bins') process.env.PATH = `${buildBinsDir}:${process.env.PATH}` diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js index ee672cfb..eb71df4f 100644 --- a/deps/npm/node_modules/node-gyp/lib/configure.js +++ b/deps/npm/node_modules/node-gyp/lib/configure.js @@ -5,7 +5,7 @@ const path = require('path') const log = require('./log') const os = require('os') const processRelease = require('./process-release') -const win = process.platform === 'win32' +const win = require('os').type() === 'Windows_NT' const findNodeDirectory = require('./find-node-directory') const { createConfigGypi } = require('./create-config-gypi') const { format: msgFormat } = require('util') @@ -18,7 +18,7 @@ const minorRe = /^#define NODE_MINOR_VERSION (\d+)/m const patchRe = /^#define NODE_PATCH_VERSION (\d+)/m async function configure (gyp, argv) { - const buildDir = path.resolve('build') + const buildDir = path.resolve('build').replace(/\\/g, '/') const configNames = ['config.gypi', 'common.gypi'] const configs = [] let nodeDir @@ -79,7 +79,7 @@ async function configure (gyp, argv) { await gyp.commands.install([release.version]) log.verbose('get node dir', 'target node version installed:', release.versionDir) - nodeDir = path.resolve(gyp.devDir, release.versionDir) + nodeDir = path.resolve(path.dirname(path.dirname(process.execPath))).replace(/\\/g, '/') } return createBuildDir() @@ -132,7 +132,7 @@ async function configure (gyp, argv) { return runGyp() } - const fullPath = path.resolve(name) + const fullPath = path.resolve(name).replace(/\\/g, '/') log.verbose(name, 'checking for gypi file: %s', fullPath) try { await fs.stat(fullPath) @@ -163,7 +163,7 @@ async function configure (gyp, argv) { // include all the ".gypi" files that were found configs.forEach(function (config) { - argv.push('-I', config) + argv.push('-I', config.replace(/\\/g, '/')) }) // For AIX and z/OS we need to set up the path to the exports file @@ -246,9 +246,9 @@ async function configure (gyp, argv) { } // this logic ported from the old `gyp_addon` python file - const gypScript = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py') - const addonGypi = path.resolve(__dirname, '..', 'addon.gypi') - let commonGypi = path.resolve(nodeDir, 'include/node/common.gypi') + const gypScript = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py').replace(/\\/g, '/') + const addonGypi = path.resolve(__dirname, '..', 'addon.gypi').replace(/\\/g, '/') + let commonGypi = path.resolve(nodeDir, 'include/node/common.gypi').replace(/\\/g, '/') try { await fs.stat(commonGypi) } catch (err) { @@ -260,11 +260,11 @@ async function configure (gyp, argv) { // Windows expects an absolute path outputDir = buildDir } - const nodeGypDir = path.resolve(__dirname, '..') + const nodeGypDir = path.resolve(__dirname, '..').replace(/\\/g, '/') let nodeLibFile = path.join(nodeDir, - !gyp.opts.nodedir ? '<(target_arch)' : '$(Configuration)', - release.name + '.lib') + !gyp.opts.nodedir ? 'lib' : 'lib', + 'lib' + release.name + '.dll.a').replace(/\\/g, '/') argv.push('-I', addonGypi) argv.push('-I', commonGypi) @@ -285,7 +285,7 @@ async function configure (gyp, argv) { nodeLibFile = nodeLibFile.replace(/\\/g, '\\\\') } argv.push('-Dnode_lib_file=' + nodeLibFile) - argv.push('-Dmodule_root_dir=' + process.cwd()) + argv.push('-Dmodule_root_dir=' + process.cwd().replace(/\\/g, '/')) argv.push('-Dnode_engine=' + (gyp.opts.node_engine || process.jsEngine || 'v8')) argv.push('--depth=.') @@ -304,7 +304,7 @@ async function configure (gyp, argv) { argv.unshift(gypScript) // make sure python uses files that came with this particular node package - const pypath = [path.join(__dirname, '..', 'gyp', 'pylib')] + const pypath = [path.join(__dirname, '..', 'gyp', 'pylib').replace(/\\/g, '/')] if (process.env.PYTHONPATH) { pypath.push(process.env.PYTHONPATH) } diff --git a/deps/npm/node_modules/node-gyp/lib/create-config-gypi.js b/deps/npm/node_modules/node-gyp/lib/create-config-gypi.js index 01a820e9..7309d04d 100644 --- a/deps/npm/node_modules/node-gyp/lib/create-config-gypi.js +++ b/deps/npm/node_modules/node-gyp/lib/create-config-gypi.js @@ -3,6 +3,7 @@ const fs = require('graceful-fs').promises const log = require('./log') const path = require('path') +const win = require('os').type() === 'Windows_NT' function parseConfigGypi (config) { // translated from tools/js2c.py of Node.js @@ -81,7 +82,7 @@ async function getCurrentConfigGypi ({ gyp, nodeDir, vsInfo, python }) { // disable -T "thin" static archives by default variables.standalone_static_library = gyp.opts.thin ? 0 : 1 - if (process.platform === 'win32') { + if (win) { defaults.msbuild_toolset = vsInfo.toolset if (vsInfo.sdk) { defaults.msvs_windows_target_platform_version = vsInfo.sdk @@ -140,7 +141,7 @@ async function createConfigGypi ({ gyp, buildDir, nodeDir, vsInfo, python }) { const prefix = '# Do not edit. File was generated by node-gyp\'s "configure" step' const json = JSON.stringify(config, boolsToString, 2) - log.verbose('build/' + configFilename, 'writing out config file: %s', configPath) + log.verbose('build/' + configFilename, 'writing out config file: %s', configPath.replace(/\\/g, '/')) await fs.writeFile(configPath, [prefix, json, ''].join('\n')) return configPath diff --git a/deps/npm/node_modules/node-gyp/lib/find-node-directory.js b/deps/npm/node_modules/node-gyp/lib/find-node-directory.js index 8838b81d..12b6d64e 100644 --- a/deps/npm/node_modules/node-gyp/lib/find-node-directory.js +++ b/deps/npm/node_modules/node-gyp/lib/find-node-directory.js @@ -2,6 +2,7 @@ const path = require('path') const log = require('./log') +const win = require('os').type() === 'Windows_NT' function findNodeDirectory (scriptLocation, processObj) { // set dirname and process if not passed in @@ -31,7 +32,7 @@ function findNodeDirectory (scriptLocation, processObj) { // lib/node_modules/npm/node_modules/node-gyp/lib or // node_modules/npm/node_modules/node-gyp/lib depending on the // platform - if (processObj.platform === 'win32') { + if (win) { nodeRootDir = path.join(npmParentDirectory, '..') } else { nodeRootDir = path.join(npmParentDirectory, '../..') @@ -49,7 +50,7 @@ function findNodeDirectory (scriptLocation, processObj) { // If we are a recently built node, and the directory structure // is that of a repository. If we are on Windows then we only need // to go one level up, everything else, two - if (processObj.platform === 'win32') { + if (win) { nodeRootDir = path.join(nodeDir, '..') } else { nodeRootDir = path.join(nodeDir, '../..') diff --git a/deps/npm/node_modules/node-gyp/lib/find-python.js b/deps/npm/node_modules/node-gyp/lib/find-python.js index a71c00c2..2bf245ba 100644 --- a/deps/npm/node_modules/node-gyp/lib/find-python.js +++ b/deps/npm/node_modules/node-gyp/lib/find-python.js @@ -3,7 +3,7 @@ const log = require('./log') const semver = require('semver') const { execFile } = require('./util') -const win = process.platform === 'win32' +const win = require('os').type() === 'Windows_NT' function getOsUserInfo () { try { diff --git a/deps/npm/node_modules/node-gyp/lib/install.js b/deps/npm/node_modules/node-gyp/lib/install.js index 90be86c8..158778d8 100644 --- a/deps/npm/node_modules/node-gyp/lib/install.js +++ b/deps/npm/node_modules/node-gyp/lib/install.js @@ -12,7 +12,7 @@ const semver = require('semver') const { download } = require('./download') const processRelease = require('./process-release') -const win = process.platform === 'win32' +const win = require('os').type() === 'Windows_NT' async function install (gyp, argv) { log.stdout()