# 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.

config("gtest_config") {
  visibility = [
    ":*",
    "//testing/gmock:*",  # gmock also shares this config.
  ]

  defines = [

    # In order to allow regex matches in gtest to be shared between Windows
    # and other systems, we tell gtest to always use it's internal engine.
    "GTEST_HAS_POSIX_RE=0",
    # Chrome doesn't support / require C++11, yet.
    "GTEST_LANG_CXX11=0",
  ]

  # Gtest headers need to be able to find themselves.
  include_dirs = [ "include" ]

  if (is_win) {
    cflags = [ "/wd4800" ]  # Unused variable warning.
  }

  if (is_posix) {
    defines += [
      # gtest isn't able to figure out when RTTI is disabled for gcc
      # versions older than 4.3.2, and assumes it's enabled.  Our Mac
      # and Linux builds disable RTTI, and cannot guarantee that the
      # compiler will be 4.3.2. or newer.  The Mac, for example, uses
      # 4.2.1 as that is the latest available on that platform.  gtest
      # must be instructed that RTTI is disabled here, and for any
      # direct dependents that might include gtest headers.
      "GTEST_HAS_RTTI=0",
    ]
  }

  if (is_android) {
    defines += [
      # We want gtest features that use tr1::tuple, but we currently
      # don't support the variadic templates used by libstdc++'s
      # implementation. gtest supports this scenario by providing its
      # own implementation but we must opt in to it.
      "GTEST_USE_OWN_TR1_TUPLE=1",

      # GTEST_USE_OWN_TR1_TUPLE only works if GTEST_HAS_TR1_TUPLE is set.
      # gtest r625 made it so that GTEST_HAS_TR1_TUPLE is set to 0
      # automatically on android, so it has to be set explicitly here.
      "GTEST_HAS_TR1_TUPLE=1",
    ]
  }
}

config("gtest_direct_config") {
  visibility = [ ":*" ]
  defines = [ "UNIT_TEST" ]
}

static_library("gtest") {
  # TODO http://crbug.com/412064 enable this flag all the time.
  testonly = !is_component_build
  sources = [
    "include/gtest/gtest-death-test.h",
    "include/gtest/gtest-message.h",
    "include/gtest/gtest-param-test.h",
    "include/gtest/gtest-printers.h",
    "include/gtest/gtest-spi.h",
    "include/gtest/gtest-test-part.h",
    "include/gtest/gtest-typed-test.h",
    "include/gtest/gtest.h",
    "include/gtest/gtest_pred_impl.h",
    "include/gtest/internal/gtest-death-test-internal.h",
    "include/gtest/internal/gtest-filepath.h",
    "include/gtest/internal/gtest-internal.h",
    "include/gtest/internal/gtest-linked_ptr.h",
    "include/gtest/internal/gtest-param-util-generated.h",
    "include/gtest/internal/gtest-param-util.h",
    "include/gtest/internal/gtest-port.h",
    "include/gtest/internal/gtest-string.h",
    "include/gtest/internal/gtest-tuple.h",
    "include/gtest/internal/gtest-type-util.h",
    #"gtest/src/gtest-all.cc",  # Not needed by our build.
    "src/gtest-death-test.cc",
    "src/gtest-filepath.cc",
    "src/gtest-internal-inl.h",
    "src/gtest-port.cc",
    "src/gtest-printers.cc",
    "src/gtest-test-part.cc",
    "src/gtest-typed-test.cc",
    "src/gtest.cc",
    "../multiprocess_func_list.cc",
    "../multiprocess_func_list.h",
    "../platform_test.h",
  ]

  if (is_mac) {
    sources += [
      "../gtest_mac.h",
      "../gtest_mac.mm",
      "../platform_test_mac.mm",
    ]
  }

  include_dirs = [ "." ]

  all_dependent_configs = [ ":gtest_config" ]
  public_configs = [ ":gtest_direct_config" ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
}

source_set("gtest_main") {
  # TODO http://crbug.com/412064 enable this flag all the time.
  testonly = !is_component_build
  sources = [ "src/gtest_main.cc" ]
  deps = [ ":gtest" ]
}
