Skip to content

Commit

Permalink
Generate all file lists and build target lists in binding.gyp from bu…
Browse files Browse the repository at this point in the history
…ild.yaml
  • Loading branch information
murgatroid99 committed Nov 5, 2015
1 parent d67b356 commit 879bc4f
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 17 deletions.
7 changes: 4 additions & 3 deletions binding.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -346,11 +346,12 @@
"src/node/ext/node_grpc.cc",
"src/node/ext/server.cc",
"src/node/ext/server_credentials.cc",
"src/node/ext/timeval.cc"
"src/node/ext/timeval.cc",
],
"dependencies": [
"grpc"
"grpc",
"gpr",
]
}
},
]
}
16 changes: 16 additions & 0 deletions build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2232,3 +2232,19 @@ vspackages:
props: false
redist: false
version: 1.7.0.1
node_modules:
- deps:
- grpc
- gpr
name: grpc_node
src:
- src/node/ext/byte_buffer.cc
- src/node/ext/call.cc
- src/node/ext/call_credentials.cc
- src/node/ext/channel.cc
- src/node/ext/channel_credentials.cc
- src/node/ext/completion_queue_async_worker.cc
- src/node/ext/node_grpc.cc
- src/node/ext/server.cc
- src/node/ext/server_credentials.cc
- src/node/ext/timeval.cc
25 changes: 11 additions & 14 deletions templates/binding.gyp.template
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@
]
},
'targets': [
% for module in node_modules:
% for lib in libs:
% if lib.name == 'gpr' or lib.name == 'grpc':
% if lib.name in module.transitive_deps:
{
'target_name': '${lib.name}',
'product_prefix': 'lib',
Expand Down Expand Up @@ -142,22 +143,18 @@
}
}]
],
"target_name": "grpc_node",
"target_name": "${module.name}",
"sources": [
"src/node/ext/byte_buffer.cc",
"src/node/ext/call.cc",
"src/node/ext/call_credentials.cc",
"src/node/ext/channel.cc",
"src/node/ext/channel_credentials.cc",
"src/node/ext/completion_queue_async_worker.cc",
"src/node/ext/node_grpc.cc",
"src/node/ext/server.cc",
"src/node/ext/server_credentials.cc",
"src/node/ext/timeval.cc"
% for source in module.src:
"${source}",
% endfor
],
"dependencies": [
"grpc"
% for dep in getattr(module, 'deps', []):
"${dep}",
% endfor
]
}
},
% endfor
]
}
63 changes: 63 additions & 0 deletions tools/buildgen/plugins/transitive_dependencies.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Copyright 2015, Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

"""Buildgen transitive dependencies
This takes the list of libs, node_modules, and targets from our
yaml dictionary, and adds to each the transitive closure
of the list of dependencies.
"""

def get_lib(libs, name):
return next(lib for lib in libs if lib['name']==name)

def transitive_deps(lib, libs):
if 'deps' in lib:
# Recursively call transitive_deps on each dependency, and take the union
return set.union(set(lib['deps']),
*[set(transitive_deps(get_lib(libs, dep), libs))
for dep in lib['deps']])
else:
return set()

def mako_plugin(dictionary):
"""The exported plugin code for transitive_dependencies.
Each item in libs, node_modules, and targets can have a deps list.
We add a transitive_deps property to each with the transitive closure
of those dependency lists.
"""
libs = dictionary.get('libs')
node_modules = dictionary.get('node_modules')
targets = dictionary.get('targets')

for target_list in (libs, node_modules, targets):
for target in target_list:
target['transitive_deps'] = transitive_deps(target, libs)

0 comments on commit 879bc4f

Please sign in to comment.