Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP? tools: add update-dep.sh #1688

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 170 additions & 0 deletions deps/floating-patches/patches-npm/deps-make-node-gyp-work-with
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
deps: make node-gyp work with io.js

From: cjihrig <cjihrig@gmail.com>

Every npm version bump requires a few patches to be floated on
node-gyp for io.js compatibility. These patches are found in
03d199276e21c1fa08d8df14eeb654c90cc5aa20,
5de334c23096492014a097ff487f07ad8eaee6d2, and
da730c76e98fb9fd18dac445dafbbec74d79f802. This commit squashes
them into a single commit.

PR-URL: https://github.com/iojs/io.js/pull/990
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
---
deps/npm/node_modules/node-gyp/addon.gypi | 2 +
deps/npm/node_modules/node-gyp/lib/build.js | 8 +++--
deps/npm/node_modules/node-gyp/lib/install.js | 40 +++++++++++++------------
3 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/deps/npm/node_modules/node-gyp/addon.gypi b/deps/npm/node_modules/node-gyp/addon.gypi
index 0b81fab..63fefe3 100644
--- a/deps/npm/node_modules/node-gyp/addon.gypi
+++ b/deps/npm/node_modules/node-gyp/addon.gypi
@@ -42,7 +42,7 @@
'-luuid.lib',
'-lodbc32.lib',
'-lDelayImp.lib',
- '-l"<(node_root_dir)/$(ConfigurationName)/node.lib"'
+ '-l"<(node_root_dir)/$(ConfigurationName)/iojs.lib"'
],
# warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent<T>'
# needs to have dll-interface to be used by clients of class 'node::ObjectWrap'
diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js
index df24aaf..f9722ae 100644
--- a/deps/npm/node_modules/node-gyp/lib/build.js
+++ b/deps/npm/node_modules/node-gyp/lib/build.js
@@ -173,7 +173,7 @@ function build (gyp, argv, callback) {
}

/**
- * Copies the node.lib file for the current target architecture into the
+ * Copies the iojs.lib file for the current target architecture into the
* current proper dev dir location.
*/

@@ -181,15 +181,15 @@ function build (gyp, argv, callback) {
if (!win || !copyDevLib) return doBuild()

var buildDir = path.resolve(nodeDir, buildType)
- , archNodeLibPath = path.resolve(nodeDir, arch, 'node.lib')
- , buildNodeLibPath = path.resolve(buildDir, 'node.lib')
+ , archNodeLibPath = path.resolve(nodeDir, arch, 'iojs.lib')
+ , buildNodeLibPath = path.resolve(buildDir, 'iojs.lib')

mkdirp(buildDir, function (err, isNew) {
if (err) return callback(err)
log.verbose('"' + buildType + '" dir needed to be created?', isNew)
var rs = fs.createReadStream(archNodeLibPath)
, ws = fs.createWriteStream(buildNodeLibPath)
- log.verbose('copying "node.lib" for ' + arch, buildNodeLibPath)
+ log.verbose('copying "iojs.lib" for ' + arch, buildNodeLibPath)
rs.pipe(ws)
rs.on('error', callback)
ws.on('error', callback)
diff --git a/deps/npm/node_modules/node-gyp/lib/install.js b/deps/npm/node_modules/node-gyp/lib/install.js
index 6f72e6a..f9176b3 100644
--- a/deps/npm/node_modules/node-gyp/lib/install.js
+++ b/deps/npm/node_modules/node-gyp/lib/install.js
@@ -39,7 +39,7 @@ function install (gyp, argv, callback) {
}
}

- var distUrl = gyp.opts['dist-url'] || gyp.opts.disturl || 'http://nodejs.org/dist'
+ var distUrl = gyp.opts['dist-url'] || gyp.opts.disturl || 'https://iojs.org/dist'


// Determine which node dev files version we are installing
@@ -185,7 +185,7 @@ function install (gyp, argv, callback) {

// now download the node tarball
var tarPath = gyp.opts['tarball']
- var tarballUrl = tarPath ? tarPath : distUrl + '/v' + version + '/node-v' + version + '.tar.gz'
+ var tarballUrl = tarPath ? tarPath : distUrl + '/v' + version + '/iojs-v' + version + '.tar.gz'
, badDownload = false
, extractCount = 0
, gunzip = zlib.createGunzip()
@@ -267,7 +267,7 @@ function install (gyp, argv, callback) {
var async = 0

if (win) {
- // need to download node.lib
+ // need to download iojs.lib
async++
downloadNodeLib(deref)
}
@@ -343,36 +343,36 @@ function install (gyp, argv, callback) {
}

function downloadNodeLib (done) {
- log.verbose('on Windows; need to download `node.lib`...')
+ log.verbose('on Windows; need to download `iojs.lib`...')
var dir32 = path.resolve(devDir, 'ia32')
, dir64 = path.resolve(devDir, 'x64')
- , nodeLibPath32 = path.resolve(dir32, 'node.lib')
- , nodeLibPath64 = path.resolve(dir64, 'node.lib')
- , nodeLibUrl32 = distUrl + '/v' + version + '/node.lib'
- , nodeLibUrl64 = distUrl + '/v' + version + '/x64/node.lib'
+ , nodeLibPath32 = path.resolve(dir32, 'iojs.lib')
+ , nodeLibPath64 = path.resolve(dir64, 'iojs.lib')
+ , nodeLibUrl32 = distUrl + '/v' + version + '/win-x86/iojs.lib'
+ , nodeLibUrl64 = distUrl + '/v' + version + '/win-x64/iojs.lib'

- log.verbose('32-bit node.lib dir', dir32)
- log.verbose('64-bit node.lib dir', dir64)
- log.verbose('`node.lib` 32-bit url', nodeLibUrl32)
- log.verbose('`node.lib` 64-bit url', nodeLibUrl64)
+ log.verbose('32-bit iojs.lib dir', dir32)
+ log.verbose('64-bit iojs.lib dir', dir64)
+ log.verbose('`iojs.lib` 32-bit url', nodeLibUrl32)
+ log.verbose('`iojs.lib` 64-bit url', nodeLibUrl64)

var async = 2
mkdir(dir32, function (err) {
if (err) return done(err)
- log.verbose('streaming 32-bit node.lib to:', nodeLibPath32)
+ log.verbose('streaming 32-bit iojs.lib to:', nodeLibPath32)

var req = download(nodeLibUrl32)
if (!req) return
req.on('error', done)
req.on('response', function (res) {
if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading 32-bit node.lib'))
+ done(new Error(res.statusCode + ' status code downloading 32-bit iojs.lib'))
return
}

getContentSha(res, function (_, checksum) {
- contentShasums['node.lib'] = checksum
- log.verbose('content checksum', 'node.lib', checksum)
+ contentShasums['win-x86/iojs.lib'] = checksum
+ log.verbose('content checksum', 'win-x86/iojs.lib', checksum)
})

var ws = fs.createWriteStream(nodeLibPath32)
@@ -385,20 +385,20 @@ function install (gyp, argv, callback) {
})
mkdir(dir64, function (err) {
if (err) return done(err)
- log.verbose('streaming 64-bit node.lib to:', nodeLibPath64)
+ log.verbose('streaming 64-bit iojs.lib to:', nodeLibPath64)

var req = download(nodeLibUrl64)
if (!req) return
req.on('error', done)
req.on('response', function (res) {
if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading 64-bit node.lib'))
+ done(new Error(res.statusCode + ' status code downloading 64-bit iojs.lib'))
return
}

getContentSha(res, function (_, checksum) {
- contentShasums['x64/node.lib'] = checksum
- log.verbose('content checksum', 'x64/node.lib', checksum)
+ contentShasums['win-x64/iojs.lib'] = checksum
+ log.verbose('content checksum', 'win-x64/iojs.lib', checksum)
})

var ws = fs.createWriteStream(nodeLibPath64)
3 changes: 3 additions & 0 deletions deps/floating-patches/patches-npm/series
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# This series applies on GIT commit 56e4255382ad4d2426e034624b41bbe97d18bca0
deps-make-node-gyp-work-with
win-node-gyp-enable-delay-load
112 changes: 112 additions & 0 deletions deps/floating-patches/patches-npm/win-node-gyp-enable-delay-load
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
win,node-gyp: enable delay-load hook by default

From: Bert Belder <bertbelder@gmail.com>

The delay-load hook allows node.exe/iojs.exe to be renamed. See efadffe
for more background.

Bug: https://github.com/iojs/io.js/issues/751
Bug: https://github.com/iojs/io.js/issues/965
Upstream PR: https://github.com/TooTallNate/node-gyp/pull/599

PR-URL: https://github.com/iojs/io.js/pull/1251
Reviewed-By: Rod Vagg <rod@vagg.org>

PR-URL: https://github.com/iojs/io.js/pull/1266
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>

PR-URL: https://github.com/iojs/io.js/pull/1433
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
---
deps/npm/node_modules/node-gyp/addon.gypi | 25 ++++++++++++++++
.../node-gyp/src/win_delay_load_hook.c | 32 ++++++++++++++++++++
2 files changed, 57 insertions(+)
create mode 100644 deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c

diff --git a/deps/npm/node_modules/node-gyp/addon.gypi b/deps/npm/node_modules/node-gyp/addon.gypi
index 63fefe3..1fe142f 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 0000000..05c4c39
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c
@@ -0,0 +1,32 @@
+/*
+ * 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) {
+ if (event != dliNotePreLoadLibrary)
+ return NULL;
+
+ if (_stricmp(info->szDll, "iojs.exe") != 0 &&
+ _stricmp(info->szDll, "node.exe") != 0)
+ return NULL;
+
+ HMODULE m = GetModuleHandle(NULL);
+ return (FARPROC) m;
+}
+
+PfnDliHook __pfnDliNotifyHook2 = load_exe_hook;
+
+#endif
Loading