# 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")
core_idl_with_modules_dependency_files =
    get_path_info(_gypi.core_idl_with_modules_dependency_files, "abspath")

core_dictionary_idl_files =
    get_path_info(_gypi.core_dictionary_idl_files, "abspath")
core_testing_dictionary_idl_files =
    get_path_info(_gypi.core_testing_dictionary_idl_files, "abspath")

# 'partial interface', target (right side of) 'implements', and
# interfaces with static bindings (in bindings/core/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")

# IDL files that only have typedefs/enums.
core_typedefs_enums_only_idl_files =
    get_path_info(_gypi.core_typedefs_enums_only_idl_files, "abspath")

webcore_non_rendering_files =
    get_path_info(_gypi.webcore_non_rendering_files, "abspath")
webcore_rendering_files =
    get_path_info(_gypi.webcore_rendering_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")
webcore_testing_idl_with_modules_dependency_files =
    get_path_info(_gypi.webcore_testing_idl_with_modules_dependency_files,
                  "abspath")
webcore_testing_dependency_idl_files =
    get_path_info(_gypi.webcore_testing_dependency_idl_files, "abspath")
generated_core_dictionary_files =
    get_path_info(_gypi.generated_core_dictionary_files, "abspath")
generated_core_testing_dictionary_files =
    get_path_info(_gypi.generated_core_testing_dictionary_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")
