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

# Modifications Copyright 2017 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

config("gtest_direct_config") {
  include_dirs = [ "include" ]

  defines = [
    "UNIT_TEST",
    "GTEST_HAS_POSIX_RE=0",
    "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING",
  ]
  if (target_cpu != "ps4" && target_os != "win") {
    defines += [ "GTEST_USE_OWN_TR1_TUPLE=1" ]
  }
}

static_library("gtest") {
  testonly = true
  sources = [
    "../multiprocess_func_list.cc",
    "../multiprocess_func_list.h",
    "../platform_test.h",
    "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",
    "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",
  ]

  include_dirs = [ "." ]

  public_configs = [ ":gtest_direct_config" ]

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