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

blink_core_output_dir = "$root_gen_dir/blink/core"

# This file is the GN version of core.gypi. We rebase most paths to be absolute
# so these lists can be used by BUILD files in different directories without
# worrying about the base directory.
_gypi = exec_script(
    "//build/gypi_to_gn.py",
    [ rebase_path("core.gypi"),
      "--replace=<(SHARED_INTERMEDIATE_DIR)=$root_gen_dir",
      "--replace=<(blink_core_output_dir)=$blink_core_output_dir"],
    "scope",
    [ "core.gypi" ])

# Files for which bindings (.cpp and .h files) will be generated.
core_idl_files = get_path_info(_gypi.core_idl_files, "abspath")

# 'partial interface', target (right side of) 'implements', and
# interfaces with static bindings (in bindings/v8/)
core_dependency_idl_files =
  get_path_info(_gypi.core_dependency_idl_files, "abspath")

# Interfaces that inherit from Event, including Event itself.
core_event_idl_files = get_path_info(_gypi.core_event_idl_files, "abspath")

webcore_files = get_path_info(_gypi.webcore_files, "abspath")
webcore_dom_files = get_path_info(_gypi.webcore_dom_files, "abspath")
webcore_html_files = get_path_info(_gypi.webcore_html_files, "abspath")
webcore_svg_files = get_path_info(_gypi.webcore_svg_files, "abspath")
webcore_testing_idl_files = get_path_info(_gypi.webcore_testing_idl_files, "abspath")
generated_webcore_testing_idl_files =
  get_path_info(_gypi.generated_webcore_testing_idl_files, "abspath")
webcore_testing_files = get_path_info(_gypi.webcore_testing_files, "abspath")
core_unittest_files = get_path_info(_gypi.core_unittest_files, "abspath")
