# Copyright 2016 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("//build/config/linux/pkg_config.gni")

declare_args() {
  # Controls whether the build should use the version of libsync
  # library shipped with the system. In release builds of Chrome OS we
  # use the system version, but when building on dev workstations we
  # bundle it because Ubuntu doesn't ship a usable version.
  use_system_libsync = false
}

if (!use_system_libsync) {
  config("libsync_config") {
    include_dirs = [
      "src",
      "src/include",
    ]
  }

  config("libsync_private_config") {
    # To suppress the warning caused by strlcpy.
    cflags = [ "-Wno-implicit-function-declaration" ]
  }

  source_set("libsync") {
    sources = [
      "src/include/sync/sync.h",
      "src/sw_sync.h",
      "src/sync.c",
      "strlcpy.c",
    ]

    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      "//build/config/compiler:no_chromium_code",
      ":libsync_private_config",
    ]

    public_configs = [ ":libsync_config" ]
  }
}

if (use_system_libsync) {
  pkg_config("libsync_config") {
    packages = [ "libsync" ]
  }
  group("libsync") {
    public_configs = [ ":libsync_config" ]
  }
}
