# 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",
  ]
  configs += [
    # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
    "//build/config:Wno-conversion",
  ]
}

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/string_printf.cc",
    "strings/string_printf.h",
    "strings/substitute.cc",
    "strings/substitute.h",
    "strings/trim.cc",
    "strings/trim.h",
    "strings/utf_codecs.cc",
    "strings/utf_codecs.h",
    "third_party/icu/icu_utf.cc",
    "third_party/icu/icu_utf.h",
  ]

  public_deps = [
    ":common",
    "//sdk/lib/syslog/cpp",
  ]
  configs += [
    # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
    "//build/config:Wno-conversion",
  ]
}

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",
  ]
  configs += [
    # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
    "//build/config:Wno-conversion",
  ]
}

executable("fxl_unittests") {
  testonly = true

  sources = [
    "//src/lib/fxl/log_settings_command_line_unittest.cc",
    "command_line_unittest.cc",
    "functional/apply_unittest.cc",
    "functional/cancelable_callback_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.cmx"
    deps = [ ":fxl_unittests" ]
    test_specs = {
      log_settings = {
        max_severity = "FATAL"
      }
    }
  }

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