# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# DON'T INCLUDE modules_idl_files.gni FROM HERE.
#
# This file is shared with all modules' BUILD files which shouldn't need access
# to the huge and slow lists of sources. If sharing is necessary, make a
# separate .gni.
import("//third_party/blink/renderer/config.gni")
blink_modules_output_dir = "$root_gen_dir/third_party/blink/renderer/modules"

# Defines a part of blink modules. This is either a source set or a static
# library with defaults for commonly-used values.
#
#   deps
#      Default deps are automatically appended to any specified on the caller.
#
#   visibility
#      Normal meaning if defined. If undefined, defaults to everything in core.
template("blink_modules_sources") {
  if (is_component_build) {
    target_type = "source_set"
  } else {
    target_type = "static_library"
  }

  target(target_type, target_name) {
    # The visibility will get overridden by forward_variables_from below if the
    # invoker defined it.
    visibility = [ "//third_party/blink/renderer/modules/*" ]

    deps = [
      "//third_party/blink/renderer/core",
      "//third_party/blink/renderer/modules:make_modules_generated",
      "//third_party/icu",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }

    # Take everything else not handled above from the invoker.
    forward_variables_from(invoker, "*", [ "deps" ])
  }
}
set_defaults("blink_modules_sources") {
  # This sets the default list of configs when the blink_modules_sources target
  # is defined. The default_compiler_configs comes from BUILDCONFIG.gn and
  # is the list normally applied to static libraries and source sets.
  configs = default_compiler_configs
  configs += [
    "//third_party/blink/renderer:config",
    "//third_party/blink/renderer/modules:modules_implementation",
    "//third_party/blink/renderer:non_test_config",
    "//third_party/blink/renderer:inside_blink",
  ]
  configs -= [ "//build/config/compiler:default_symbols" ]
  configs += blink_symbols_config
}
