# 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".
    #   bundle_name:
    #     A string to prepend to generated bundle class names, so that multiple
    #     bundle rules can be used without conflicting.  Only used with one of
    #     the cpp-bundle generators.
    #
    # 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: json_schema_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)',
        '--bundle-name=<(bundle_name)',
        '--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,
}
