Permalink
Browse files

gyp: install node-gyp

* fixes #2480
  • Loading branch information...
1 parent d5047f5 commit 3d1476a3168effe3edb32510f56cf9b00bce8392 @indutny indutny committed Jan 16, 2012
Showing with 25 additions and 11 deletions.
  1. +11 −6 tools/addon.gypi
  2. +9 −2 tools/installer.js
  3. +5 −3 tools/{gyp_addon → node-gyp}
View
@@ -3,15 +3,20 @@
'type': 'loadable_module',
'product_extension': 'node',
'product_prefix': '',
- 'include_dirs': [
- '../src',
- '../deps/uv/include',
- '../deps/v8/include'
- ],
@TooTallNate

TooTallNate Jan 16, 2012

Why not just leave these? That way node-gyp will still work when run relative to the source dir, as well as when installed. Or if there's some other way to distinguish that, idk.

'conditions': [
[ 'OS=="mac"', {
- 'libraries': [ '-undefined dynamic_lookup' ],
+ 'libraries': [ '-undefined dynamic_lookup' ]
+ }],
+ [ 'OS=="win"', {
+ 'include_dirs': [
+ '../src',
+ '../deps/uv/include',
+ '../deps/v8/include'
+ ],
+ 'libraries': [ '-l<(node_root_dir>/Debug/node.lib' ],
+ }, {
+ 'include_dirs': ['../../../include/node']
@TooTallNate

TooTallNate Jan 16, 2012

So this is the include path post-installation? Just clarifying...

}]
]
}
View
@@ -93,7 +93,13 @@ if (cmd === 'install') {
copy([
'deps/uv/include/ares.h',
'deps/uv/include/ares_version.h'
- ], 'include/node/c-ares/');
+ ], 'include/node/');
+
+ // Copy node-gyp files
+ copy('common.gypi', 'lib/node/');
+ copy('tools/*', 'lib/node/tools/');
+ queue.push('ln -sf ../lib/node/tools/node-gyp ' +
@TooTallNate

TooTallNate Jan 16, 2012

Does this file only get run on Unix? ln -s won't be on Windows, of course.

+ path.join(node_prefix, 'bin/node-gyp'));
// Copy binary file
copy('out/Release/node', 'bin/node');
@@ -106,7 +112,8 @@ if (cmd === 'install') {
}
} else {
remove([
- 'bin/node', 'bin/npm', 'include/node/*', 'lib/node_modules'
+ 'bin/node', 'bin/npm', 'bin/node-gyp', 'include/node/*',
+ 'lib/node', 'lib/node_modules'
]);
}
@@ -4,18 +4,20 @@ import sys
script_dir = os.path.dirname(__file__)
node_root = os.path.normpath(os.path.join(script_dir, os.pardir))
+node_tools = os.path.join(node_root, 'lib', 'node', 'tools')
@TooTallNate

TooTallNate Jan 16, 2012

I don't think this one is right. node/lib/node/tools does not exist.

@TooTallNate

TooTallNate Jan 16, 2012

Ok I understand now; this is a post-installation path?

-sys.path.insert(0, os.path.join(node_root, 'tools', 'gyp', 'pylib'))
+sys.path.insert(0, os.path.join(node_tools, 'gyp', 'pylib'))
@TooTallNate

TooTallNate Jan 16, 2012

On OS X, this causes:

∞ ~/node-ffi (master) $ ../node/tools/node-gyp -f make
Traceback (most recent call last):
  File "../node/tools/node-gyp", line 10, in <module>
    import gyp
ImportError: No module named gyp
@TooTallNate

TooTallNate Jan 16, 2012

That's when run relative to the source dir. I haven't yet tried after running make install, but I am kinda reluctant to since I'd rather not install dev versions.

import gyp
if __name__ == '__main__':
args = sys.argv[1:]
- addon_gypi = os.path.join(node_root, 'tools', 'addon.gypi')
- common_gypi = os.path.join(node_root, 'common.gypi')
+ addon_gypi = os.path.join(node_tools, 'addon.gypi')
+ common_gypi = os.path.join(node_root, 'lib', 'node', 'common.gypi')
args.extend(['-I', addon_gypi])
args.extend(['-I', common_gypi])
args.extend(['-Dlibrary=shared_library'])
args.extend(['-Dvisibility=default'])
+ args.extend(['-Dnode_root_dir=%s' % node_root])
args.extend(['--depth=.']);
gyp_args = list(args)

1 comment on commit 3d1476a

ry commented on 3d1476a Jan 17, 2012

reverted in next commit. Addon building via GYP to depend on the node source tree. NPM will support binary uploads.

Please sign in to comment.