build: fix inspector dependency resolution

It was reported that parallel builds on Windows sometimes error because
of missing intermediate files.

On closer inspection I noticed that some files are copied from src/ to
the intermediate build directory in a way where they don't participate
in dependency resolution. Put another way, the build system doesn't
know to wait for the copy to complete because we don't tell it to.

Fix that by not copying around files but instead making the script that
processes them a little smarter about where to find them and where to
store the results.

PR-URL: https://github.com/nodejs/node/pull/27026
Fixes: https://github.com/nodejs/node/issues/27025
Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
This commit is contained in:
Ben Noordhuis 2019-03-31 10:50:44 +02:00 committed by Ruben Bridgewater
parent 04355eff5b
commit 608878c956
No known key found for this signature in database
GPG Key ID: F07496B3EB3C1762
2 changed files with 9 additions and 20 deletions

View File

@ -1,7 +1,6 @@
{
'variables': {
'protocol_tool_path': '../../tools/inspector_protocol',
'node_inspector_path': '../../src/inspector',
'node_inspector_generated_sources': [
'<(SHARED_INTERMEDIATE_DIR)/src/node/inspector/protocol/Forward.h',
'<(SHARED_INTERMEDIATE_DIR)/src/node/inspector/protocol/Protocol.cpp',
@ -67,23 +66,14 @@
'<(SHARED_INTERMEDIATE_DIR)',
'<(SHARED_INTERMEDIATE_DIR)/src', # for inspector
],
'copies': [
{
'files': [
'<(node_inspector_path)/node_protocol_config.json',
'<(node_inspector_path)/node_protocol.pdl'
],
'destination': '<(SHARED_INTERMEDIATE_DIR)',
}
],
'actions': [
{
'action_name': 'convert_node_protocol_to_json',
'inputs': [
'<(SHARED_INTERMEDIATE_DIR)/node_protocol.pdl',
'node_protocol.pdl',
],
'outputs': [
'<(SHARED_INTERMEDIATE_DIR)/node_protocol.json',
'<(SHARED_INTERMEDIATE_DIR)/src/node_protocol.json',
],
'action': [
'python',
@ -95,8 +85,8 @@
{
'action_name': 'node_protocol_generated_sources',
'inputs': [
'<(SHARED_INTERMEDIATE_DIR)/node_protocol_config.json',
'<(SHARED_INTERMEDIATE_DIR)/node_protocol.json',
'node_protocol_config.json',
'<(SHARED_INTERMEDIATE_DIR)/src/node_protocol.json',
'<@(node_protocol_files)',
],
'outputs': [
@ -108,7 +98,7 @@
'tools/inspector_protocol/code_generator.py',
'--jinja_dir', '<@(protocol_tool_path)/..',
'--output_base', '<(SHARED_INTERMEDIATE_DIR)/src/',
'--config', '<(SHARED_INTERMEDIATE_DIR)/node_protocol_config.json',
'--config', 'src/inspector/node_protocol_config.json',
],
'message': 'Generating node protocol sources from protocol json',
},
@ -116,7 +106,7 @@
'action_name': 'concatenate_protocols',
'inputs': [
'../../deps/v8/src/inspector/js_protocol.pdl',
'<(SHARED_INTERMEDIATE_DIR)/node_protocol.json',
'<(SHARED_INTERMEDIATE_DIR)/src/node_protocol.json',
],
'outputs': [
'<(SHARED_INTERMEDIATE_DIR)/concatenated_protocol.json',

View File

@ -29,9 +29,9 @@ module_path, module_filename = os.path.split(os.path.realpath(__file__))
def read_config():
# pylint: disable=W0703
def json_to_object(data, output_base, config_base):
def json_to_object(data, output_base):
def json_object_hook(object_dict):
items = [(k, os.path.join(config_base, v) if k == "path" else v) for (k, v) in object_dict.items()]
items = [(k, os.path.join(output_base, v) if k == "path" else v) for (k, v) in object_dict.items()]
items = [(k, os.path.join(output_base, v) if k == "output" else v) for (k, v) in items]
keys, values = list(zip(*items))
return collections.namedtuple('X', keys)(*values)
@ -71,7 +71,6 @@ def read_config():
if not config_file:
raise Exception("Config file name must be specified")
config_file = config_file.decode('utf8')
config_base = os.path.dirname(config_file)
config_values = arg_options.config_value
if not config_values:
config_values = []
@ -84,7 +83,7 @@ def read_config():
try:
config_json_file = open(config_file, "r")
config_json_string = config_json_file.read()
config_partial = json_to_object(config_json_string, output_base, config_base)
config_partial = json_to_object(config_json_string, output_base)
config_json_file.close()
defaults = {
".use_snake_file_names": False,