# 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("//tools/grit/grit_rule.gni")

if (!is_android) {

# GYP version: WebKit/public/blink.gyp:blink
group("blink") {
  deps = [
    ":blink_headers",
    ":blink_minimal",
    "//third_party/WebKit/Source/web",
    "//third_party/WebKit/Source/platform",
  ]
}

# This target provides a minimal set of Blink APIs such as WebString to use in
# places that cannot link against the full Blink library.  FIXME: We really
# shouldn't have this at all and should instead remove all uses of Blink's API
# types from places that can't link against Blink. crbug.com/248653
#
# GYP version: WebKit/public/blink.gyp:blink_minimal
group("blink_minimal") {
  deps = [
    "//third_party/WebKit/Source/platform:blink_common",
  ]
}

# GYP version: WebKit/public/blink.gyp:blink_test_support
group("test_support") {
  deps = [
    "//third_party/WebKit/Source/web:test_support",
  ]
}

# GYP version: WebKit/public/all.gyp:all_blink
group("all_blink") {
  deps = [
    "//third_party/WebKit/Source/core",
    "//third_party/WebKit/Source/modules",
    "//third_party/WebKit/Source/platform:heap_unittests",
    "//third_party/WebKit/Source/platform:platform_unittests",
    "//third_party/WebKit/Source/web",
    "//third_party/WebKit/Source/wtf:wtf_unittests",
  ]
}

}  # !is_android

config("blink_headers_config") {
  include_dirs = [ ".." ]
}

# Depend on this target to use public blink API headers for things like enums
# and public structures without actually linking against any Blink libraries.
source_set("blink_headers") {
  direct_dependent_configs = [
    ":blink_headers_config",
    # Blink exposes NPAPI headers in the public API.
    "//third_party/npapi:npapi_config",
  ]
}

# GYP version: WebKit/public/blink_devtools.gyp:blink_devtools_frontend_resources
group("blink_devtools_frontend_resources") {
  deps = [
    "//third_party/WebKit/Source/devtools:devtools_frontend_resources",
  ]
}

# GYP version: WebKit/public/blink_devtools.gyp:blink_generate_devtools_grd
group("blink_generate_devtools_grd") {
  deps = [
    "//third_party/WebKit/Source/devtools:generate_devtools_grd",
  ]
}

# GYP version: WebKit/public/blink_resources.gyp:blink_resources
grit("resources") {
  output_dir = "$root_gen_dir/blink/public/resources"
  use_qualified_include = true
  source = "blink_resources.grd"
  outputs = [
    "grit/blink_resources.h",
    "blink_resources.rc",
    "blink_resources.pak",
  ]
}
