summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2015-03-24 21:00:12 -0700
committerJeremiah Senkpiel <fishrock123@rocketmail.com>2015-05-23 19:49:18 -0400
commitd144e96fbf94570a6faea8f054c8b99c8adf6b1b (patch)
treef0126177b4ebb5721860f568dafe6fe4fecf449e
parent9e7099fa4e59f4a5c3e22a7b8a14cdccfb27c06d (diff)
downloadnodejs-d144e96fbf94570a6faea8f054c8b99c8adf6b1b.tar.gz
nodejs-d144e96fbf94570a6faea8f054c8b99c8adf6b1b.tar.bz2
nodejs-d144e96fbf94570a6faea8f054c8b99c8adf6b1b.zip
win,node-gyp: enable delay-load hook by default
The delay-load hook allows node.exe/iojs.exe to be renamed. See efadffe for more background. This commit is a combined squash of the following previous patches: ba93c583bca993be9d16d9a1819ecdb23697b73a, 3bda6cbfa4a9bb073790d53bc14e85b6e575bbe5, 0d6d3dda95e3fff30996c224197fac88fba85b5b. PR-URL: https://github.com/nodejs/io.js/pull/1763 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
-rw-r--r--deps/npm/node_modules/node-gyp/addon.gypi25
-rw-r--r--deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c33
2 files changed, 58 insertions, 0 deletions
diff --git a/deps/npm/node_modules/node-gyp/addon.gypi b/deps/npm/node_modules/node-gyp/addon.gypi
index 63fefe3d1..1fe142f70 100644
--- a/deps/npm/node_modules/node-gyp/addon.gypi
+++ b/deps/npm/node_modules/node-gyp/addon.gypi
@@ -1,7 +1,9 @@
{
'target_defaults': {
'type': 'loadable_module',
+ 'win_delay_load_hook': 'true',
'product_prefix': '',
+
'include_dirs': [
'<(node_root_dir)/src',
'<(node_root_dir)/deps/uv/include',
@@ -13,11 +15,34 @@
'product_extension': 'node',
'defines': [ 'BUILDING_NODE_EXTENSION' ],
}],
+
['_type=="static_library"', {
# set to `1` to *disable* the -T thin archive 'ld' flag.
# older linkers don't support this flag.
'standalone_static_library': '<(standalone_static_library)'
}],
+
+ ['_win_delay_load_hook=="true"', {
+ # If the addon specifies `'win_delay_load_hook': 'true'` in its
+ # binding.gyp, link a delay-load hook into the DLL. This hook ensures
+ # that the addon will work regardless of whether the node/iojs binary
+ # is named node.exe, iojs.exe, or something else.
+ 'conditions': [
+ [ 'OS=="win"', {
+ 'sources': [
+ 'src/win_delay_load_hook.c',
+ ],
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'DelayLoadDLLs': [ 'iojs.exe', 'node.exe' ],
+ # Don't print a linker warning when no imports from either .exe
+ # are used.
+ 'AdditionalOptions': [ '/ignore:4199' ],
+ },
+ },
+ }],
+ ],
+ }],
],
'conditions': [
diff --git a/deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c b/deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c
new file mode 100644
index 000000000..f397cfa19
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c
@@ -0,0 +1,33 @@
+/*
+ * When this file is linked to a DLL, it sets up a delay-load hook that
+ * intervenes when the DLL is trying to load 'node.exe' or 'iojs.exe'
+ * dynamically. Instead of trying to locate the .exe file it'll just return
+ * a handle to the process image.
+ *
+ * This allows compiled addons to work when node.exe or iojs.exe is renamed.
+ */
+
+#ifdef _MSC_VER
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#include <delayimp.h>
+#include <string.h>
+
+static FARPROC WINAPI load_exe_hook(unsigned int event, DelayLoadInfo* info) {
+ HMODULE m;
+ if (event != dliNotePreLoadLibrary)
+ return NULL;
+
+ if (_stricmp(info->szDll, "iojs.exe") != 0 &&
+ _stricmp(info->szDll, "node.exe") != 0)
+ return NULL;
+
+ m = GetModuleHandle(NULL);
+ return (FARPROC) m;
+}
+
+PfnDliHook __pfnDliNotifyHook2 = load_exe_hook;
+
+#endif