# Copyright 2019 The Chromium OS 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("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":libglib_bridge",
  ]
  if (use.test) {
    deps += [ ":glib_bridge_test_runner" ]
  }
}

static_library("libglib_bridge") {
  sources = [
    "glib_bridge.cc",
    "glib_logger.cc",
  ]
  pkg_deps = [
    "glib-2.0",
    "gthread-2.0",
    "libchrome-${libbase_ver}",
  ]
  configs += [ "//common-mk:nouse_thin_archive" ]
  configs -= [ "//common-mk:use_thin_archive" ]
}

if (use.test) {
  executable("glib_bridge_test_runner") {
    configs += [
      # //common-mk:test should be at the top. crbug.com/887845
      # TODO(crbug.com/887845): Remove this note after library order issue is resolved.
      "//common-mk:test",
    ]
    sources = [
      "glib_bridge_test.cc",
      "glib_structured_logger_test.cc",
      "glib_unstructured_logger_test.cc",
    ]
    deps = [
      ":libglib_bridge",
      "//common-mk/testrunner",
    ]
    pkg_deps = [
      "gio-2.0",
      "gio-unix-2.0",
      "glib-2.0",
      "gthread-2.0",
      "libchrome-${libbase_ver}",
    ]
  }
}
