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

import("//sky/engine/bindings/scripts/scripts.gni")
import("//sky/engine/build/scripts/scripts.gni")
import("//sky/engine/core/core.gni")

visibility = ["//sky/engine/*"]

rel_sky_core_gen_dir = rebase_path(sky_core_output_dir, root_build_dir)

source_set("libraries") {
  public_deps = [
    "//base",
    "//gin",
    "//gpu/command_buffer/client:gles2_c_lib",
    "//mojo/application",
    "//mojo/common",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/utility",
    "//mojo/public/interfaces/application",
    "//mojo/services/public/cpp/view_manager",
    "//mojo/services/public/interfaces/navigation",
    "//skia",
    "//sky/engine/wtf",
    "//third_party/angle:translator",
    "//third_party/iccjpeg",
    "//third_party/libpng",
    "//third_party/ots",
    "//third_party/qcms",
    "//third_party/zlib",
    "//url",
    "//v8",
  ]
}

source_set("prerequisites") {
  deps = [
    ":libraries",
    ":make_core_generated",
    "//sky/engine/bindings/core/v8:bindings_core_v8_generated",
    "//sky/engine/platform",
    "inspector:protocol_sources",
  ]

  forward_dependent_configs_from = [
    ":libraries",
  ]

  direct_dependent_configs = [
    "//sky/engine:config",
    "//sky/engine:inside_blink",
    "//build/config/compiler:wexit_time_destructors"
  ]
}

static_library("core") {
  output_name = "sky_core"

  deps = [
    ":core_generated",
    ":libraries",
    ":prerequisites",
    "//sky/engine/platform",
  ]

  sources = sky_core_files

  forward_dependent_configs_from = [
    ":libraries",
  ]

  # core and core_generated are really the same thing.
  allow_circular_includes_from = [ ":core_generated" ]
}

source_set("testing") {
  deps = [
    ":core",
    ":core_generated",
    ":prerequisites",
    "//sky/engine/platform",
    "//sky/engine/wtf",
  ]

  sources = [
    "testing/DummyPageHolder.cpp",
    "testing/DummyPageHolder.h",
    "testing/NullExecutionContext.cpp",
    "testing/NullExecutionContext.h",
    "testing/URLTestHelpers.cpp",
    "testing/URLTestHelpers.h",
  ]
}

source_set("core_generated") {
  sources = bindings_core_v8_files
  # These files include all the .cpp files generated from the .idl files
  # in webcore_files.
  sources += bindings_core_generated_aggregate_files

  sources += [
    # Generated from CSSTokenizer-in.cpp
    "$sky_core_output_dir/CSSTokenizer.cpp",

    # Generated from BisonCSSParser-in.cpp
    "$sky_core_output_dir/BisonCSSParser.cpp",

    # Additional .cpp files from the make_core_generated rules.
    "$sky_core_output_dir/CSSGrammar.cpp",

    # Additional .cpp files from the inspector_protocol_sources list.
    "$sky_core_output_dir/InspectorFrontend.cpp",
    "$sky_core_output_dir/InspectorBackendDispatcher.cpp",
    "$sky_core_output_dir/InspectorTypeBuilder.cpp",
  ]

  configs += [
    "..:inside_blink",
  ]

  deps = [
    ":make_core_generated",
    ":prerequisites",
    "//gin",
    "//skia",
    "//sky/engine/bindings/core/v8:bindings_core_v8_generated",
    "//sky/engine/platform",
    "//sky/engine/wtf",
    "//third_party/iccjpeg",
    "//third_party/libpng",
    "//third_party/qcms",
    "//url",
    "//v8",
  ]

  include_dirs = [
    "$root_build_dir",
  ]
}

# core_bindings_generated ------------------------------------------------------

generate_event_interfaces("core_event_interfaces") {
  sources = core_event_idl_files
  output_file = "core/EventInterfaces.in"
}

# generated_testing_idls -------------------------------------------------------

group("generated_testing_idls") {
  deps = [
    ":generated_testing_idls_settings",
  ]
}

action("generated_testing_idls_settings") {
  script = "../build/scripts/make_settings.py"

  inputs = scripts_for_in_files + [
    "../build/scripts/make_settings.py",
    "../build/scripts/templates/SettingsMacros.h.tmpl",
    "frame/Settings.in",
  ]
  outputs = [
    "$sky_core_output_dir/SettingsMacros.h",
  ]

  args = [
    rebase_path("frame/Settings.in", root_build_dir),
    "--output_dir", rel_sky_core_gen_dir,
  ]
}

# make_core_generated ----------------------------------------------------------

group("core_names") {
  deps = [
    ":make_core_generated_css_property_names",
    ":make_core_generated_event_names",
    ":make_core_generated_event_target_factory",
    ":make_core_generated_event_target_names",
    ":make_core_generated_event_type_names",
    ":make_core_generated_fetch_initiator_type_names",
    ":make_core_generated_html_element_factory",
    ":make_core_generated_media_type_names",
  ]
}

group("make_core_generated") {
  deps = [
    ":core_names",
    ":make_core_generated_bison",
    ":make_core_generated_css_property_metadata",
    ":make_core_generated_css_value_keywords",
    ":make_core_generated_event_factory",
    ":make_core_generated_html_element_lookup_trie",
    ":make_core_generated_html_element_type_helpers",
    ":make_core_generated_make_parser",
    ":make_core_generated_make_token_matcher",
    ":make_core_generated_media_feature_names",
    ":make_core_generated_media_features",
    ":make_core_generated_media_query_tokenizer_codepoints",
    ":make_core_generated_style_builder",
    ":make_core_generated_style_property_shorthand",
  ]
}

css_properties("make_core_generated_css_property_names") {
  script = "../build/scripts/make_css_property_names.py"
  outputs = [
    "$sky_core_output_dir/CSSPropertyNames.cpp",
    "$sky_core_output_dir/CSSPropertyNames.h",
  ]
}

process_in_files("make_core_generated_media_features") {
  script = "../build/scripts/make_media_features.py"
  in_files = [
    "css/MediaFeatureNames.in",
  ]
  other_inputs = [
    "../build/scripts/make_media_features.py",
    "../build/scripts/templates/MediaFeatures.h.tmpl",
  ]
  outputs = [
    "$sky_core_output_dir/MediaFeatures.h",
  ]
}

css_properties("make_core_generated_style_property_shorthand") {
  script = "../build/scripts/make_style_shorthands.py"
  other_inputs = [
    "../build/scripts/templates/StylePropertyShorthand.cpp.tmpl",
    "../build/scripts/templates/StylePropertyShorthand.h.tmpl",
  ]
  outputs = [
    "$sky_core_output_dir/StylePropertyShorthand.cpp",
    "$sky_core_output_dir/StylePropertyShorthand.h",
  ]
  deps = [
    ":core_names",
  ]
}

css_properties("make_core_generated_style_builder") {
  script = "../build/scripts/make_style_builder.py"
  other_inputs = [
    "../build/scripts/templates/StyleBuilder.cpp.tmpl",
    "../build/scripts/templates/StyleBuilderFunctions.cpp.tmpl",
    "../build/scripts/templates/StyleBuilderFunctions.h.tmpl",
  ]
  outputs = [
    "$sky_core_output_dir/StyleBuilder.cpp",
    "$sky_core_output_dir/StyleBuilderFunctions.h",
    "$sky_core_output_dir/StyleBuilderFunctions.cpp",
  ]

  deps = [
    ":core_names",
    ":libraries",
  ]
}

css_properties("make_core_generated_css_property_metadata") {
  script = "../build/scripts/make_css_property_metadata.py"
  other_inputs = [
    "../build/scripts/templates/CSSPropertyMetadata.cpp.tmpl",
  ]
  outputs = [
    "$sky_core_output_dir/CSSPropertyMetadata.cpp",
  ]

  deps = [ ":core_names" ]
}

process_in_files("make_core_generated_css_value_keywords") {
  script = "../build/scripts/make_css_value_keywords.py"

  in_files = [
    "css/CSSValueKeywords.in",
    "css/SVGCSSValueKeywords.in",
  ]
  outputs = [
    "$sky_core_output_dir/CSSValueKeywords.cpp",
    "$sky_core_output_dir/CSSValueKeywords.h",
  ]
  other_args = [
    "--gperf", gperf_exe,
  ]

  deps = [
    "//sky/engine/wtf",
  ]
}

process_in_files("make_core_generated_html_element_factory") {
  script = "../build/scripts/make_element_factory.py"

  in_files = [
    "html/HTMLTagNames.in",
    "html/HTMLAttributeNames.in",
  ]
  other_inputs = make_element_factory_files
  outputs = [
    "$sky_core_output_dir/HTMLElementFactory.cpp",
    "$sky_core_output_dir/HTMLElementFactory.h",
    "$sky_core_output_dir/HTMLNames.cpp",
    "$sky_core_output_dir/HTMLNames.h",
    "$sky_core_output_dir/V8HTMLElementWrapperFactory.cpp",
    "$sky_core_output_dir/V8HTMLElementWrapperFactory.h",
  ]
  deps = [
    ":libraries",
    "//sky/engine/bindings/core/v8:bindings_core_v8_generated",
  ]
}

process_in_files("make_core_generated_html_element_type_helpers") {
  script = "../build/scripts/make_element_type_helpers.py"

  in_files = [
    "html/HTMLTagNames.in",
  ]
  other_inputs = make_element_type_helpers_files
  outputs = [
    "$sky_core_output_dir/HTMLElementTypeHelpers.h",
  ]
}

process_in_files("make_core_generated_event_factory") {
  script = "../build/scripts/make_event_factory.py"

  in_files = [
    "$sky_core_output_dir/EventInterfaces.in",
    "events/EventAliases.in",
  ]
  other_inputs = make_event_factory_files
  outputs = [
    "$sky_core_output_dir/Event.cpp",
    "$sky_core_output_dir/EventHeaders.h",
    "$sky_core_output_dir/EventInterfaces.h",
  ]
  deps = [
    ":core_names",
    ":libraries",
  ]
}

process_in_files("make_core_generated_media_feature_names") {
  script = "../build/scripts/make_media_feature_names.py"
  in_files = [
    "css/MediaFeatureNames.in",
  ]
  other_inputs = make_names_files
  outputs = [
    "$sky_core_output_dir/MediaFeatureNames.cpp",
    "$sky_core_output_dir/MediaFeatureNames.h",
  ]
  deps = [ ":libraries" ]
}

# make_event_factory -----------------------------------------------------------

make_event_factory("make_core_generated_event_target_factory") {
  in_files = [
    "events/EventTargetFactory.in",
  ]
  outputs = [
    "$sky_core_output_dir/EventTargetHeaders.h",
    "$sky_core_output_dir/EventTargetInterfaces.h",
  ]
}

# make_names -------------------------------------------------------------------

make_names("make_core_generated_media_type_names") {
  in_files = [
    "css/MediaTypeNames.in",
  ]
  outputs = [
    "$sky_core_output_dir/MediaTypeNames.cpp",
    "$sky_core_output_dir/MediaTypeNames.h",
  ]
}

make_names("make_core_generated_event_names") {
  in_files = [
    "$sky_core_output_dir/EventInterfaces.in",
  ]
  outputs = [
    "$sky_core_output_dir/EventNames.cpp",
    "$sky_core_output_dir/EventNames.h",
  ]
}

make_names("make_core_generated_event_target_names") {
  in_files = [
    "events/EventTargetFactory.in",
  ]
  outputs = [
    "$sky_core_output_dir/EventTargetNames.cpp",
    "$sky_core_output_dir/EventTargetNames.h",
  ]
}

make_names("make_core_generated_fetch_initiator_type_names") {
  in_files = [
    "fetch/FetchInitiatorTypeNames.in",
  ]
  outputs = [
    "$sky_core_output_dir/FetchInitiatorTypeNames.cpp",
    "$sky_core_output_dir/FetchInitiatorTypeNames.h",
  ]
}

make_names("make_core_generated_event_type_names") {
  in_files = [
    "events/EventTypeNames.in",
  ]
  outputs = [
    "$sky_core_output_dir/EventTypeNames.cpp",
    "$sky_core_output_dir/EventTypeNames.h",
  ]
}

# make_token_matcher -----------------------------------------------------------

make_token_matcher("make_core_generated_make_token_matcher") {
  input_file = "css/parser/CSSTokenizer-in.cpp"
  output_file = "$sky_core_output_dir/CSSTokenizer.cpp"
}

make_token_matcher("make_core_generated_make_parser") {
  input_file = "css/parser/BisonCSSParser-in.cpp"
  output_file = "$sky_core_output_dir/BisonCSSParser.cpp"
}

# One-off scripts --------------------------------------------------------------

action("make_core_generated_media_query_tokenizer_codepoints") {
  script = "../build/scripts/make_mediaquery_tokenizer_codepoints.py"

  outputs = [
    "$sky_core_output_dir/MediaQueryTokenizerCodepoints.cpp",
  ]

  args = [
    "--output_dir", rel_sky_core_gen_dir,
  ]

  deps = make_core_generated_deps
}

process_in_files("make_core_generated_html_element_lookup_trie") {
  script = "../build/scripts/make_element_lookup_trie.py"
  in_files = [
    "html/HTMLTagNames.in",
  ]
  other_inputs = [
    "../build/scripts/templates/ElementLookupTrie.cpp.tmpl",
    "../build/scripts/templates/ElementLookupTrie.h.tmpl",
  ]
  outputs = [
    "$sky_core_output_dir/HTMLElementLookupTrie.cpp",
    "$sky_core_output_dir/HTMLElementLookupTrie.h",
  ]
  deps = [
    ":core_names",
    ":libraries",
  ]
}

action_foreach("make_core_generated_bison") {
  script = "../build/scripts/rule_bison.py"
  sources = [
    "css/parser/CSSGrammar.y",
  ]
  outputs = [
    "$sky_core_output_dir/{{source_name_part}}.cpp",
    "$sky_core_output_dir/{{source_name_part}}.h",
  ]
  args = [
    "{{source}}",
    rel_sky_core_gen_dir,
    bison_exe,
  ]

  deps = make_core_generated_deps
}
