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

import("../mojo_edk.gni")

# Library of basic things not provided by the C/C++ standard libraries. (These
# are mostly platform independent. Note: This must not depend on
# //mojo/edk/platform. TODO(vtl): Maybe the things that aren't really platform
# independent should be moved to //mojo/edk/platform.)
mojo_edk_source_set("util") {
  sources = [
    "command_line.cc",
    "command_line.h",
    "cond_var.cc",
    "cond_var.h",
    "logging_internal.cc",
    "logging_internal.h",
    "make_unique.h",
    "mutex.cc",
    "mutex.h",
    "ref_counted.h",
    "ref_counted_internal.h",
    "ref_ptr.h",
    "ref_ptr_internal.h",
    "scoped_file.h",
    "string_number_conversions.cc",
    "string_number_conversions.h",
    "string_printf.cc",
    "string_printf.h",
    "thread_annotations.h",
    "thread_checker.h",
    "waitable_event.cc",
    "waitable_event.h",
    "weak_ptr.h",
    "weak_ptr_internal.cc",
    "weak_ptr_internal.h",
  ]

  mojo_sdk_public_deps = [ "mojo/public/cpp/system" ]
}

# Unit tests for :util. For testing purposes, allow dependence on
# //mojo/edk/platform; however, using //mojo/edk/platform requires choosing an
# implementation to get a test binary, which is done below in
# :mojo_edk_util_unittests.
mojo_edk_source_set("unittests") {
  testonly = true

  sources = [
    "command_line_unittest.cc",
    "cond_var_unittest.cc",
    "mutex_unittest.cc",
    "ref_counted_unittest.cc",
    "string_number_conversions_unittest.cc",
    "string_printf_unittest.cc",
    "thread_annotations_unittest.cc",
    "thread_checker_unittest.cc",
    "waitable_event_unittest.cc",
    "weak_ptr_unittest.cc",
  ]

  deps = [
    ":util",
    "//testing/gtest",
  ]

  mojo_sdk_deps = [ "mojo/public/cpp/system" ]

  mojo_edk_deps = [
    "mojo/edk/platform",
    "mojo/edk/platform:test_platform",
    "mojo/edk/system/test",
  ]
}

# Test binary for :util, using //mojo/edk/base_edk. TODO(vtl): Maybe this target
# should be in //mojo/edk/base_edk/BUILD.gn instead.
mojo_edk_unittests("mojo_edk_util_unittests") {
  deps = [
    ":unittests",
  ]

  mojo_edk_deps = [ "mojo/edk/base_edk" ]
}

mojo_edk_source_set("perftests") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/system:mojo_edk_system_perftests" ]

  sources = [
    "ref_counted_perftest.cc",
  ]

  deps = [
    ":util",
    "//testing/gtest",
  ]

  mojo_edk_deps = [
    "mojo/edk/platform:test_platform",
    "mojo/edk/system/test",
    "mojo/edk/system/test:perf",
  ]
}
