# 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.

{
  'variables': {
    # When including this gypi, the following variables must be set:
    #   schema_files:
    #     An array of json or idl files that comprise the api model.
    #   impl_dir_:
    #     The root path of API implementations; also used for the
    #     output location. (N.B. Named as such to prevent gyp from
    #     expanding it as a relative path.)
    #   root_namespace:
    #     A Python string substituion pattern used to generate the C++
    #     namespace for each API. Use %(namespace)s to replace with the API
    #     namespace, like "toplevel::%(namespace)s_api".
    #
    # Functions and namespaces can be excluded by setting "nocompile" to true.
    'api_gen_dir': '<(DEPTH)/tools/json_schema_compiler',
    'api_gen': '<(api_gen_dir)/compiler.py',
    'generator_files': [
      '<(api_gen_dir)/cc_generator.py',
      '<(api_gen_dir)/code.py',
      '<(api_gen_dir)/compiler.py',
      '<(api_gen_dir)/cpp_bundle_generator.py',
      '<(api_gen_dir)/cpp_type_generator.py',
      '<(api_gen_dir)/cpp_util.py',
      '<(api_gen_dir)/h_generator.py',
      '<(api_gen_dir)/idl_schema.py',
      '<(api_gen_dir)/json_schema.py',
      '<(api_gen_dir)/model.py',
      '<(api_gen_dir)/util_cc_helper.py',
    ],
  },
  'actions': [
    {
      # GN version: //extensions/generated_extensions_api.gni
      'action_name': 'genapi_bundle_registration',
      'inputs': [
        '<@(generator_files)',
        '<@(schema_files)',
        '<@(non_compiled_schema_files)',
      ],
      'outputs': [
        '<(SHARED_INTERMEDIATE_DIR)/<(impl_dir_)/generated_api_registration.h',
        '<(SHARED_INTERMEDIATE_DIR)/<(impl_dir_)/generated_api_registration.cc',
      ],
      'action': [
        'python',
        '<(api_gen)',
        '--root=<(DEPTH)',
        '--destdir=<(SHARED_INTERMEDIATE_DIR)',
        '--namespace=<(root_namespace)',
        '--generator=cpp-bundle-registration',
        '--impl-dir=<(impl_dir_)',
        '<@(schema_files)',
        '<@(non_compiled_schema_files)',
      ],
      'message': 'Generating C++ API bundle code for function registration',
      'process_outputs_as_sources': 1,
      # Avoid running MIDL compiler on IDL input files.
      'explicit_idl_action': 1,
    },
  ],
  'include_dirs': [
    '<(SHARED_INTERMEDIATE_DIR)',
    '<(DEPTH)',
  ],
  'direct_dependent_settings': {
    'include_dirs': [
      '<(SHARED_INTERMEDIATE_DIR)',
    ]
  },
  # This target exports a hard dependency because it generates header
  # files.
  'hard_dependency': 1,
}
