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