# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Generate IDL bindings for modules, plus aggregate bindings files.
#
# Design doc: http://www.chromium.org/developers/design-documents/idl-build

{
  'includes': [
    # ../../.. == Source
    '../../../bindings/bindings.gypi',
    '../../../bindings/modules/idl.gypi',
    '../../../bindings/modules/modules.gypi',
    '../../../bindings/scripts/scripts.gypi',
    # Need to know core idl files list to generate parital interfaces
    # defined in modules.
    '../../../core/core.gypi',
    '../../../modules/modules.gypi',
    'generated.gypi',
  ],

  'targets': [
################################################################################
  {
    'target_name': 'bindings_modules_v8_generated_individual',
    'type': 'none',
    # The 'binding' rule generates .h files, so mark as hard_dependency, per:
    # https://code.google.com/p/gyp/wiki/InputFormatReference#Linking_Dependencies
    'hard_dependency': 1,
    'dependencies': [
      '../../core/generated.gyp:core_global_constructors_idls',
      '../generated.gyp:modules_global_constructors_idls',
      '../generated.gyp:interfaces_info',
      '<(bindings_scripts_dir)/scripts.gyp:cached_jinja_templates',
      '<(bindings_scripts_dir)/scripts.gyp:cached_lex_yacc_tables',
    ],
    'sources': [
      '<@(modules_interface_idl_files)',
    ],
    'rules': [{
      'rule_name': 'binding',
      'extension': 'idl',
      'msvs_external_rule': 1,
      'inputs': [
        '<@(idl_lexer_parser_files)',  # to be explicit (covered by parsetab)
        '<@(idl_cache_files)',
        '<@(idl_compiler_files)',
        '<(bindings_dir)/IDLExtendedAttributes.txt',
        # If the dependency structure or public interface info (e.g.,
        # [ImplementedAs]) changes, we rebuild all files, since we're not
        # computing dependencies file-by-file in the build.
        # This data is generally stable.
        '<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
        # Further, if any dependency (partial interface or implemented
        # interface) changes, rebuild everything, since every IDL potentially
        # depends on them, because we're not computing dependencies
        # file-by-file.
        # FIXME: This is too conservative, and causes excess rebuilds:
        # compute this file-by-file.  http://crbug.com/341748
        '<@(all_dependency_idl_files)',
      ],
      'outputs': [
        '<(bindings_modules_v8_output_dir)/V8<(RULE_INPUT_ROOT).cpp',
        '<(bindings_modules_v8_output_dir)/V8<(RULE_INPUT_ROOT).h',
      ],
      # sanitize-win-build-log.sed uses a regex which matches this command
      # line (Python script + .idl file being processed).
      # Update that regex if command line changes (other than changing flags)
      'action': [
        'python',
        '<(bindings_scripts_dir)/idl_compiler.py',
        '--cache-dir',
        '<(bindings_scripts_output_dir)',
        '--output-dir',
        '<(bindings_modules_v8_output_dir)',
        '--interfaces-info',
        '<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
        '--write-file-only-if-changed',
        '<(write_file_only_if_changed)',
        '<(RULE_INPUT_PATH)',
      ],
      'message': 'Generating binding from <(RULE_INPUT_PATH)',
    }],
  },
################################################################################
  {
    'target_name': 'bindings_modules_v8_generated_aggregate',
    'type': 'none',
    'actions': [{
      'action_name': 'generate_aggregate_bindings_modules_v8',
      'inputs': [
        '<(bindings_scripts_dir)/aggregate_generated_bindings.py',
        '<(modules_idl_files_list)',
      ],
      'outputs': [
        '<@(bindings_modules_v8_generated_aggregate_files)',
      ],
      'action': [
        'python',
        '<(bindings_scripts_dir)/aggregate_generated_bindings.py',
        'modules',
        '<(modules_idl_files_list)',
        '--',
        '<@(bindings_modules_v8_generated_aggregate_files)',
      ],
      'message': 'Generating aggregate generated modules V8 bindings files',
    }],
  },
################################################################################
  {
    # GN version: //third_party/WebKit/Source/bindings/modules/v8:bindings_modules_impl_generated
    # http://crbug.com/358074; See comments on
    # 'bindings_core_v8_generated_individual' target
    'target_name': 'bindings_modules_impl_generated',
    'type': 'none',
    'hard_dependency': 1,
    'dependencies': [
      '<(bindings_scripts_dir)/scripts.gyp:cached_jinja_templates',
      '<(bindings_scripts_dir)/scripts.gyp:cached_lex_yacc_tables',
      '../../modules/generated.gyp:interfaces_info',
      '../../modules/generated.gyp:interfaces_info_individual_modules',
    ],
    'sources': [
      '<@(modules_dictionary_idl_files)',
    ],
    'actions': [{
      'action_name': 'idl_dictionary',
      # See comment on bindings_core_impl_generated
      'explicit_idl_action': 1,
      'msvs_cygwin_shell': 0,
      'inputs': [
        '<@(modules_dictionary_idl_files)',
        '<@(idl_lexer_parser_files)',
        '<@(idl_cache_files)',
        '<@(idl_compiler_files)',
        '<(bindings_dir)/IDLExtendedAttributes.txt',
        '<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
        '<(bindings_modules_output_dir)/ComponentInfoModules.pickle',
      ],
      'outputs': [
        '<@(bindings_modules_v8_generated_union_type_files)',
        '<@(generated_modules_dictionary_files)',
      ],
      'action': [
        'python',
        '<(bindings_scripts_dir)/idl_compiler.py',
        '--cache-dir',
        '<(bindings_scripts_output_dir)',
        '--output-dir',
        '<(bindings_modules_v8_output_dir)',
        '--impl-output-dir',
        '<(SHARED_INTERMEDIATE_DIR)/blink/',
        '--interfaces-info',
        '<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
        '--component-info',
        '<(bindings_modules_output_dir)/ComponentInfoModules.pickle',
        '--target-component',
        'modules',
        '--write-file-only-if-changed',
        '<(write_file_only_if_changed)',
        '--generate-impl',
        '<(modules_dictionary_idl_files_list)',
      ],
      'message': 'Generating modules IDL dictionary impl classes',
    }],
  },
################################################################################
  {
    'target_name': 'bindings_modules_v8_generated_partial_individual',
    'type': 'none',
    # The 'partial_binding' rule generates .h files, so mark as hard_dependency, per:
    # https://code.google.com/p/gyp/wiki/InputFormatReference#Linking_Dependencies
    'hard_dependency': 1,
    'dependencies': [
      '../../core/generated.gyp:core_global_constructors_idls',
      '../generated.gyp:modules_global_constructors_idls',
      '../generated.gyp:interfaces_info',
      '<(bindings_scripts_dir)/scripts.gyp:cached_jinja_templates',
      '<(bindings_scripts_dir)/scripts.gyp:cached_lex_yacc_tables',
    ],
    # We need to generate partial interface code for normal modules and also for testing.
    # i.e. parital interface Internals.
    'sources': [
      '<@(core_idl_with_modules_dependency_files)',
      '<@(webcore_testing_idl_with_modules_dependency_files)',
    ],
    'rules': [{
      'rule_name': 'partial_binding',
      'extension': 'idl',
      'msvs_external_rule': 1,
      'inputs': [
        '<@(idl_lexer_parser_files)',  # to be explicit (covered by parsetab)
        '<@(idl_compiler_files)',
        '<(bindings_scripts_output_dir)/lextab.py',
        '<(bindings_scripts_output_dir)/parsetab.pickle',
        '<(bindings_scripts_output_dir)/cached_jinja_templates.stamp',
        '<(bindings_dir)/IDLExtendedAttributes.txt',
        # If the dependency structure or public interface info (e.g.,
        # [ImplementedAs]) changes, we rebuild all files, since we're not
        # computing dependencies file-by-file in the build.
        # This data is generally stable.
        '<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
        # Further, if any dependency (partial interface or implemented
        # interface) changes, rebuild everything, since every IDL potentially
        # depends on them, because we're not computing dependencies
        # file-by-file.
        # FIXME: This is too conservative, and causes excess rebuilds:
        # compute this file-by-file.  http://crbug.com/341748
        '<@(all_dependency_idl_files)',
        '<@(webcore_testing_idl_files)',
      ],
      'outputs': [
        '<(bindings_modules_v8_output_dir)/V8<(RULE_INPUT_ROOT)Partial.cpp',
        '<(bindings_modules_v8_output_dir)/V8<(RULE_INPUT_ROOT)Partial.h',
      ],
      # sanitize-win-build-log.sed uses a regex which matches this command
      # line (Python script + .idl file being processed).
      # Update that regex if command line changes (other than changing flags)
      'action': [
        'python',
        '<(bindings_scripts_dir)/idl_compiler.py',
        '--cache-dir',
        '<(bindings_scripts_output_dir)',
        '--output-dir',
        '<(bindings_modules_v8_output_dir)',
        '--interfaces-info',
        '<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
        '--write-file-only-if-changed',
        '<(write_file_only_if_changed)',
        '--target-component',
        'modules',
        '<(RULE_INPUT_PATH)',
      ],
      'message': 'Generating partial binding from <(RULE_INPUT_PATH)',
    }],
  },
################################################################################
  {
    'target_name': 'bindings_modules_v8_generated_partial_aggregate',
    'type': 'none',
    'actions': [{
      'action_name': 'generate_aggregate_bindings_modules_v8_partial',
      'inputs': [
        '<(bindings_scripts_dir)/aggregate_generated_bindings.py',
        '<(core_idl_with_modules_dependency_files_list)',
      ],
      'outputs': [
        '<@(bindings_modules_v8_generated_partial_aggregate_files)',
      ],
      'action': [
        'python',
        '<(bindings_scripts_dir)/aggregate_generated_bindings.py',
        'modules',
        '<(core_idl_with_modules_dependency_files_list)',
        '--',
        '<@(bindings_modules_v8_generated_partial_aggregate_files)',
      ],
      'message': 'Generating aggregate generated modules V8 partial bindings files',
    }],
  },
################################################################################
  {
    'target_name': 'bindings_modules_v8_generated_init_partial',
    'type': 'none',
    'actions': [{
      'action_name': 'generate_bindings_modules_v8_init_partial',
      'inputs': [
        '<(bindings_scripts_dir)/generate_init_partial_interfaces.py',
        '<(core_idl_with_modules_dependency_files_list)',
        '<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
      ],
      'outputs': [
        '<(bindings_modules_v8_output_dir)/initPartialInterfacesInModules.cpp',
      ],
      'action': [
        'python',
        '<(bindings_scripts_dir)/generate_init_partial_interfaces.py',
        '--idl-files-list',
        '<(core_idl_with_modules_dependency_files_list)',
        '--output',
        '<(bindings_modules_v8_output_dir)/initPartialInterfacesInModules.cpp',
        '--write-file-only-if-changed',
        '<(write_file_only_if_changed)',
      ],
    }],
  },
################################################################################
  {
    'target_name': 'bindings_modules_v8_generated',
    'type': 'none',
    'dependencies': [
      'bindings_modules_impl_generated',
      'bindings_modules_v8_generated_aggregate',
      'bindings_modules_v8_generated_individual',
      'bindings_modules_v8_generated_init_partial',
      'bindings_modules_v8_generated_partial_aggregate',
      'bindings_modules_v8_generated_partial_individual',
    ],
  },
################################################################################
  ],  # targets
}
