# Copyright 2018 The PDFium 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("//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" ]
  }
}
