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

# Chromium's GN configuration for gmock now lives at testing/gmock/BUILD.gn.
#
# This configuration is left in the tree because it is pulled by V8 and PDFium,
# and will be removed as soon as the projects switch off of it.
#
# Details at http://crbug.com/630705 and http://crrev.com/2779193002

config("gmock_config") {
  # Gmock headers need to be able to find themselves.
  include_dirs = [
    "//testing/gmock_custom",
    "include",
  ]
}

static_library("gmock") {
  testonly = true
  sources = [
    # Sources based on files in r173 of gmock.
    "include/gmock/gmock-actions.h",
    "include/gmock/gmock-cardinalities.h",
    "include/gmock/gmock-generated-actions.h",
    "include/gmock/gmock-generated-function-mockers.h",
    "include/gmock/gmock-generated-matchers.h",
    "include/gmock/gmock-generated-nice-strict.h",
    "include/gmock/gmock-matchers.h",
    "include/gmock/gmock-spec-builders.h",
    "include/gmock/gmock.h",
    "include/gmock/internal/gmock-generated-internal-utils.h",
    "include/gmock/internal/gmock-internal-utils.h",
    "include/gmock/internal/gmock-port.h",

    # gmock helpers.
    "../gmock_custom/gmock/internal/custom/gmock-port.h",

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

  # This project includes some stuff form gtest's guts.
  include_dirs = [ "../gtest/include" ]

  public_configs = [
    ":gmock_config",
    "//testing/gtest:gtest_config",
  ]
}

static_library("gmock_main") {
  testonly = true
  sources = [
    "src/gmock_main.cc",
  ]
  deps = [
    ":gmock",
  ]
}
