# 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("config.gni")
if (is_clang) {
  import("//build/config/clang/clang.gni")
}

visibility = [ "//third_party/WebKit/*" ]

# features ---------------------------------------------------------------------

config("features") {
  defines = feature_defines_list
}

# inside_blink -----------------------------------------------------------------

config("inside_blink") {
  defines = [
    "BLINK_IMPLEMENTATION=1",
    "INSIDE_BLINK",
  ]
}

# config -----------------------------------------------------------------------

config("config") {
  include_dirs = [ ".", ".." ]

  cflags = []
  defines = []

  if (is_win) {
    cflags += [
      "/wd4305",  # Truncation from 'type1' to 'type2'.
      "/wd4324",  # Struct padded due to declspec(align).
      "/wd4714",  # Function marked forceinline not inlined.
      "/wd4800",  # Value forced to bool.
      "/wd4996",  # Deprecated function call.
    ]
  }

  if (is_win) {
    if (component_mode == "shared_library") {
      defines += [ "USING_V8_SHARED" ]
    }
  } else {  # ! Windows
    # TODO(GYP) this should be based on gcc_version >= 46 but GN doesn't have a
    # concept of GCC version yet.

    # Disable warnings about c++0x compatibility, as some names (such as
    # nullptr) conflict with upcoming c++0x types.
    cflags_cc = [ "-Wno-c++0x-compat" ]
  }

  if (is_linux && current_cpu == "arm") {
    # Due to a bug in gcc arm, we get warnings about uninitialized
    # timesNewRoman.unstatic.3258 and colorTransparent.unstatic.4879.
    cflags += [ "-Wno-uninitialized" ]
  }

  if (is_clang) {
    if (blink_gc_plugin && clang_use_chrome_plugins) {
      # TODO(GYP)
      #'cflags': ['<!@(../../../tools/clang/scripts/blink_gc_plugin_flags.py enable-oilpan=<(enable_oilpan) dump-graph=<(blink_gc_plugin_dump_graph))'],
    }
  }

  ## TODO(GYP) : gn does not yet support use_system_icu.
  #if (use_system_icu) {
  #  defines += [ "USING_SYSTEM_ICU" ]
  #}
}

# The follow configs apply to all targets except for unit tests, which rely on
# static initializers.
config("non_test_config") {
  cflags = []

  if (is_clang) {
    cflags += [ "-Wglobal-constructors" ]
  }
}
