# 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 && cpu_arch == "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.sh enable-oilpan=<(enable_oilpan) dump-graph=<(blink_gc_plugin_dump_graph))'],
    }
  }
}

# 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" ]
  }
}
