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

visibility = ["//sky/*"]

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

config("features") {
  defines = feature_defines_list
}

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

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

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

config("config") {
  include_dirs = [
    ".",
    "$root_gen_dir/sky",
  ]

  cflags = []
  defines = []

  # 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_posix && gcc_version >= 49) {
    cflags += [ "-Wno-unused-but-set-variable" ]
  }

  if (is_clang) {
    if (sky_gc_plugin && clang_use_chrome_plugins) {
      # TODO(GYP)
      #'cflags': ['<!@(../../tools/clang/scripts/blink_gc_plugin_flags.sh enable-oilpan=<(sky_enable_oilpan) dump-graph=<(sky_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" ]
  }
}
