summaryrefslogtreecommitdiff
path: root/deps/npm
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2015-03-24 21:00:12 -0700
committerForrest L Norvell <forrest@npmjs.com>2015-05-30 08:16:18 -0400
commit53e98cc1b44203147c0abdc03eb0e57e34c4274d (patch)
tree7ae495fbd7910c66fb0aeccf8691f529c7738864 /deps/npm
parentf9fd554500508f94a414ee43ee91b8f554eee76e (diff)
downloadandroid-node-v8-53e98cc1b44203147c0abdc03eb0e57e34c4274d.tar.gz
android-node-v8-53e98cc1b44203147c0abdc03eb0e57e34c4274d.tar.bz2
android-node-v8-53e98cc1b44203147c0abdc03eb0e57e34c4274d.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>
Diffstat (limited to 'deps/npm')
-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 63fefe3d16..1fe142f70d 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 0000000000..f397cfa195
--- /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