# 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/gtest.gni")
if (is_ios) {
  import("//build/buildflag_header.gni")
  import("//build/config/coverage/coverage.gni")
  import("//build/config/ios/ios_sdk.gni")
}

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

# The file/directory layout of Google Test is not yet considered stable. Until
# it stabilizes, Chromium code MUST use this target instead of reaching directly
# into //third_party/googletest.
static_library("gtest") {
  testonly = true

  sources = [
    "include/gtest/gtest-death-test.h",
    "include/gtest/gtest-message.h",
    "include/gtest/gtest-param-test.h",
    "include/gtest/gtest-spi.h",
    "include/gtest/gtest.h",
    "include/gtest/gtest_prod.h",

    # This is a workaround for the issues below.
    #
    # 1) This target needs to be a static_library (not a source set) on Mac to
    #    avoid the build errors in
    #    https://codereview.chromium.org/2779193002#msg82.
    # 2) A static_library must have at least one source file, to avoid build
    #    errors on Mac and Windows. https://crbug.com/710334
    # 3) A static_library with complete_static_lib = true, which would not
    #    require adding the empty file, will result in duplicate symbols on
    #    Android. https://codereview.chromium.org/2852613002/#ps20001
    "empty.cc",
  ]
  public_deps = [ "//third_party/googletest:gtest" ]

  public_configs = [ ":gtest_direct_config" ]

  if (gtest_include_multiprocess) {
    sources += [
      "../multiprocess_func_list.cc",
      "../multiprocess_func_list.h",
    ]
  }

  if (gtest_include_platform_test) {
    sources += [ "../platform_test.h" ]
  }

  if (is_apple && gtest_include_objc_support) {
    sources += [
      "../gtest_mac.h",
      "../gtest_mac.mm",
    ]
    if (gtest_include_platform_test) {
      sources += [ "../platform_test_mac.mm" ]
    }
  }

  if (is_ios && gtest_include_ios_coverage) {
    public_deps += [ ":ios_coverage_utils" ]
  }
}

# The file/directory layout of Google Test is not yet considered stable. Until
# it stabilizes, Chromium code MUST use this target instead of reaching directly
# into //third_party/googletest.
source_set("gtest_main") {
  testonly = true
  deps = [ "//third_party/googletest:gtest_main" ]
}

if (is_ios) {
  # These headers are needed in some non test targets for iOS code coverage. So
  # can not be testonly.
  source_set("ios_coverage_utils") {
    sources = [
      "../coverage_util_ios.h",
      "../coverage_util_ios.mm",
    ]
    deps = [ ":ios_enable_coverage" ]
  }

  buildflag_header("ios_enable_coverage") {
    header = "ios_enable_coverage.h"
    flags = [ "IOS_ENABLE_COVERAGE=$use_clang_coverage" ]
  }
}
