# 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_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.
    "../multiprocess_func_list.cc",
    "../multiprocess_func_list.h",
    "../platform_test.h",
    "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",
  ]

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