# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build_overrides/build.gni")

config("gtest_config") {
  # webrtc wants to push this config without a public_dep chain
  # TODO(crbug.com/1249254): figure out what to do with this
  visibility = [
    ":*",  # gmock also shares this config.
    "//test:*",  # webrts standalone setup
    "//third_party/webrtc/test:*",
  ]

  defines = [
    # Chromium always links googletest statically, so no API qualifier is
    # necessary. The definition in gtest-port.h at the time of this writing
    # causes crashes in content_browsertests.
    "GTEST_API_=",

    # In order to allow regex matches in gtest to be shared between Windows
    # and other systems, we tell gtest to always use its internal engine.
    "GTEST_HAS_POSIX_RE=0",

    # Enables C++11 features.
    "GTEST_LANG_CXX11=1",

    # Prevents gtest from including both <tr1/tuple> and <tuple>.
    "GTEST_HAS_TR1_TUPLE=0",
  ]

  # Gtest headers need to be able to find themselves.
  include_dirs = [
    #"custom",
    "src/googletest/include",
  ]

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

  # if (gtest_enable_absl_printers) {
  #   configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  #   defines += [ "GTEST_HAS_ABSL=1" ]
  # }
}

config("gmock_config") {
  # Gmock headers need to be able to find themselves.
  include_dirs = [
    #"custom",
    "src/googlemock/include",
  ]

  if (is_clang) {
    # TODO(tikuta): remove this when the issue is fixed.
    # https://github.com/google/googletest/issues/533
    cflags = [ "-Wno-inconsistent-missing-override" ]
  }
}

# Do NOT depend on this directly. Use //testing/gtest instead.
# See README.chromium for details.
source_set("gtest") {
  testonly = true
  sources = [
    # "custom/gtest/internal/custom/gtest.h",
    # "custom/gtest/internal/custom/stack_trace_getter.cc",
    # "custom/gtest/internal/custom/stack_trace_getter.h",

    # TODO(crbug.com/1009553): Remove this wrapper and custom temp dir
    # after plumbing a workable temporary path into googletest on Android.
    # "custom/gtest/internal/custom/chrome_custom_temp_dir.cc",
    # "custom/gtest/internal/custom/chrome_custom_temp_dir.h",
    # "custom/gtest/internal/custom/gtest_port_wrapper.cc",
    "src/googletest/include/gtest/gtest-assertion-result.h",
    "src/googletest/include/gtest/gtest-death-test.h",
    "src/googletest/include/gtest/gtest-matchers.h",
    "src/googletest/include/gtest/gtest-message.h",
    "src/googletest/include/gtest/gtest-param-test.h",
    "src/googletest/include/gtest/gtest-printers.h",
    "src/googletest/include/gtest/gtest-spi.h",
    "src/googletest/include/gtest/gtest-test-part.h",
    "src/googletest/include/gtest/gtest-typed-test.h",
    "src/googletest/include/gtest/gtest.h",
    "src/googletest/include/gtest/gtest_pred_impl.h",
    "src/googletest/include/gtest/gtest_prod.h",

    #"src/googletest/include/gtest/internal/custom/gtest.h",  # Superseded.
    "src/googletest/include/gtest/internal/custom/gtest-port.h",
    "src/googletest/include/gtest/internal/custom/gtest-printers.h",
    "src/googletest/include/gtest/internal/gtest-death-test-internal.h",
    "src/googletest/include/gtest/internal/gtest-filepath.h",
    "src/googletest/include/gtest/internal/gtest-internal.h",
    "src/googletest/include/gtest/internal/gtest-param-util.h",
    "src/googletest/include/gtest/internal/gtest-port-arch.h",
    "src/googletest/include/gtest/internal/gtest-port.h",
    "src/googletest/include/gtest/internal/gtest-string.h",
    "src/googletest/include/gtest/internal/gtest-type-util.h",

    #"src/googletest/src/gtest-all.cc",  # Not needed by our build.
    "src/googletest/src/gtest-assertion-result.cc",
    "src/googletest/src/gtest-death-test.cc",
    "src/googletest/src/gtest-filepath.cc",
    "src/googletest/src/gtest-internal-inl.h",
    "src/googletest/src/gtest-matchers.cc",

    # gtest_port_wrapper.cc is used instead of gtest-port.cc.
    # TODO(crbug.com/1009553): Re-enable this file after plumbing a workable
    #                          temporary path into googletest on Android.
    "src/googletest/src/gtest-port.cc",
    "src/googletest/src/gtest-printers.cc",
    "src/googletest/src/gtest-test-part.cc",
    "src/googletest/src/gtest-typed-test.cc",
    "src/googletest/src/gtest.cc",
  ]

  # Some files include "src/gtest-internal-inl.h".
  include_dirs = [ "src/googletest", "." ]

  public_configs = [ ":gtest_config" ]

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

  defines = []
  deps = []
  if (is_nacl || !build_with_chromium) {
    defines += [ "GTEST_DISABLE_PRINT_STACK_TRACE" ]
    # sources -= [
    #   "custom/gtest/internal/custom/stack_trace_getter.cc",
    #   "custom/gtest/internal/custom/stack_trace_getter.h",
    # ]
  } else {
    deps += [ "//base" ]
  }

  if (is_fuchsia) {
    deps += [
      "//third_party/fuchsia-sdk/sdk/pkg/fdio",
      "//third_party/fuchsia-sdk/sdk/pkg/zx",
    ]
  }

  #if (gtest_enable_absl_printers) {
  #  deps += [ "//third_party/abseil-cpp:absl" ]
  #}

  # Ideally we would want to remove
  # //starboard/build/config:default_rtti from the list of configs too.
  # Unfortunately GN doesn't provide us a way to remove things from
  # dependents' configs list.
  # It happens to be that all_dependent_configs get processed after default
  # configs, so the -frtti flag comes after the -fno-rtti flag on the command
  # line, so it happens to work in this case.
  all_dependent_configs = [ "//build/config/compiler:rtti" ]

  public_deps = [  "//starboard:starboard_group",  ]
}

# Do NOT depend on this directly. Use //testing/gtest:gtest_main instead.
# See README.chromium for details.
source_set("gtest_main") {
  testonly = true
  sources = [ "src/googletest/src/gtest_main.cc" ]
  deps = [ ":gtest" ]
}

# Do NOT depend on this directly. Use //testing/gmock instead.
# See README.chromium for details.
source_set("gmock") {
  testonly = true
  sources = [
    "src/googlemock/include/gmock/gmock-actions.h",
    "src/googlemock/include/gmock/gmock-cardinalities.h",
    "src/googlemock/include/gmock/gmock-function-mocker.h",
    "src/googlemock/include/gmock/gmock-matchers.h",
    "src/googlemock/include/gmock/gmock-more-matchers.h",
    "src/googlemock/include/gmock/gmock-nice-strict.h",
    "src/googlemock/include/gmock/gmock-spec-builders.h",
    "src/googlemock/include/gmock/gmock.h",

    #"src/googlemock/include/gmock/internal/custom/gmock-port.h",  # Superseded.
    "src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h",
    "src/googlemock/include/gmock/internal/custom/gmock-matchers.h",
    "src/googlemock/include/gmock/internal/gmock-internal-utils.h",
    "src/googlemock/include/gmock/internal/gmock-port.h",
    "src/googlemock/include/gmock/internal/gmock-pp.h",

    #"src/googlemock/src/gmock-all.cc",  # Not needed by our build.
    "src/googlemock/src/gmock-cardinalities.cc",
    "src/googlemock/src/gmock-internal-utils.cc",
    "src/googlemock/src/gmock-matchers.cc",
    "src/googlemock/src/gmock-spec-builders.cc",
    "src/googlemock/src/gmock.cc",
  ]

  public_deps = [ ":gtest" ]

  public_configs = [ ":gmock_config" ]
}

# Do NOT depend on this directly. Use //testing/gmock:gmock_main instead.
# See README.chromium for details.
static_library("gmock_main") {
  testonly = true
  sources = [ "src/googlemock/src/gmock_main.cc" ]
  deps = [ ":gmock" ]
}
