# 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",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/utility",
    "//mojo/public/interfaces/application",
    "//mojo/services/navigation/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//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",
  ]

  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",
  ]

  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
}
