# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

source_set("common") {
  visibility = [
    ":*",
    "//src/lib/files:*",
    "//src/lib/fsl/handles:*",
    "//src/lib/fsl/io:*",
    "//src/lib/fsl/socket:*",
    "//src/lib/fsl/tasks:*",
  ]

  sources = [
    "build_config.h",
    "fxl_export.h",
    "macros.h",
  ]
}

source_set("memory") {
  visibility = [
    ":*",
    "//src/lib/files:*",
    "//src/lib/fsl/io:*",
    "//src/lib/fsl/vmo:*",
  ]

  sources = [
    "memory/ref_counted.h",
    "memory/ref_counted_internal.h",
    "memory/ref_ptr.h",
    "memory/ref_ptr_internal.h",
    "memory/unique_object.h",
    "memory/weak_ptr.h",
    "memory/weak_ptr_internal.cc",
    "memory/weak_ptr_internal.h",
  ]

  public_deps = [
    ":common",
    "//sdk/lib/syslog/cpp",
  ]
}

source_set("third_party") {
  visibility = [ ":strings" ]

  sources = [
    "third_party/icu/icu_utf.cc",
    "third_party/icu/icu_utf.h",
  ]
  configs += [ "//build/config:Wno-implicit-fallthrough" ]
}

source_set("string_printf") {
  visibility = [
    ":*",
    "//src/lib/files:*",
    "//src/lib/uuid:*",
  ]

  sources = [
    "strings/string_printf.cc",
    "strings/string_printf.h",
  ]

  public_deps = [ ":common" ]
}

source_set("strings") {
  visibility = [
    ":*",
    "//src/lib/files:*",
    "//src/lib/uuid:*",
  ]

  sources = [
    "strings/ascii.cc",
    "strings/ascii.h",
    "strings/concatenate.cc",
    "strings/concatenate.h",
    "strings/join_strings.h",
    "strings/split_string.cc",
    "strings/split_string.h",
    "strings/string_number_conversions.cc",
    "strings/string_number_conversions.h",
    "strings/substitute.cc",
    "strings/substitute.h",
    "strings/trim.cc",
    "strings/trim.h",
    "strings/utf_codecs.cc",
    "strings/utf_codecs.h",
  ]

  public_deps = [
    ":common",
    ":string_printf",
    ":third_party",
    "//sdk/lib/syslog/cpp",
  ]
}

source_set("functional") {
  visibility = [ ":*" ]

  sources = [
    "functional/apply.h",
    "functional/cancelable_callback.h",
  ]

  public_deps = [
    ":common",
    ":memory",
    "//sdk/lib/syslog/cpp",
  ]
}

static_library("fxl") {
  sources = [
    "command_line.cc",
    "command_line.h",
    "log_settings_command_line.cc",
    "log_settings_command_line.h",
    "observer_list.h",
  ]

  public_deps = [
    ":common",
    ":functional",
    ":memory",
    ":strings",
    "//sdk/lib/fit",
    "//sdk/lib/syslog/cpp",
    "//src/lib/files",
  ]
}

executable("fxl_unittests") {
  testonly = true

  sources = [
    "command_line_unittest.cc",
    "functional/apply_unittest.cc",
    "functional/cancelable_callback_unittest.cc",
    "log_settings_command_line_unittest.cc",
    "memory/ref_counted_unittest.cc",
    "memory/weak_ptr_unittest.cc",
    "observer_list_unittest.cc",
    "strings/ascii_unittest.cc",
    "strings/concatenate_unittest.cc",
    "strings/join_strings_unittest.cc",
    "strings/split_string_unittest.cc",
    "strings/string_number_conversions_unittest.cc",
    "strings/string_printf_unittest.cc",
    "strings/substitute_unittest.cc",
    "strings/trim_unittest.cc",
    "synchronization/thread_annotations_unittest.cc",
    "test/test_settings_unittest.cc",
  ]

  deps = [
    ":fxl",
    "test:gtest_main",
    "test:test_settings",
    "//sdk/lib/syslog/cpp",
    "//src/lib/files",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

if (is_fuchsia) {
  import("//build/components.gni")

  fuchsia_unittest_package("fxl_tests") {
    manifest = "meta/fxl_unittests.cml"
    deps = [ ":fxl_unittests" ]
    test_specs = {
      log_settings = {
        max_severity = "FATAL"
      }
    }
  }

  group("tests") {
    testonly = true
    deps = [ ":fxl_tests" ]
  }
}
