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

# Note that this build file assumes rlz_use_chrome_net which is a condition in
# the GYP file, but is always true for Chrome builds.

import("//testing/test.gni")

config("rlz_config") {
  defines = [ "RLZ_NETWORK_IMPLEMENTATION_CHROME_NET" ]
}

source_set("rlz_lib") {
  sources = [
    "chromeos/lib/machine_id_chromeos.cc",
    "chromeos/lib/rlz_value_store_chromeos.cc",
    "chromeos/lib/rlz_value_store_chromeos.h",
    "ios/lib/machine_id_ios.cc",
    "lib/assert.cc",
    "lib/assert.h",
    "lib/crc32.h",
    "lib/crc32_wrapper.cc",
    "lib/crc8.cc",
    "lib/crc8.h",
    "lib/financial_ping.cc",
    "lib/financial_ping.h",
    "lib/lib_values.cc",
    "lib/lib_values.h",
    "lib/machine_id.cc",
    "lib/machine_id.h",
    "lib/recursive_cross_process_lock_posix.cc",
    "lib/recursive_cross_process_lock_posix.h",
    "lib/rlz_enums.h",
    "lib/rlz_lib.cc",
    "lib/rlz_lib.h",
    "lib/rlz_lib_clear.cc",
    "lib/rlz_value_store.h",
    "lib/string_utils.cc",
    "lib/string_utils.h",
    "mac/lib/machine_id_mac.cc",
    "mac/lib/rlz_value_store_mac.h",
    "mac/lib/rlz_value_store_mac.mm",
    "win/lib/lib_mutex.cc",
    "win/lib/lib_mutex.h",
    "win/lib/machine_deal.cc",
    "win/lib/machine_deal.h",
    "win/lib/machine_id_win.cc",
    "win/lib/process_info.cc",
    "win/lib/process_info.h",
    "win/lib/registry_util.cc",
    "win/lib/registry_util.h",
    "win/lib/rlz_lib_win.cc",
    "win/lib/rlz_value_store_registry.cc",
    "win/lib/rlz_value_store_registry.h",
  ]

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  public_configs = [ ":rlz_config" ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//net",
    "//third_party/zlib",
    "//url",
  ]

  if (is_ios) {
    # These _mac files are also used on iOS.
    set_sources_assignment_filter([])
    sources += [
      "mac/lib/rlz_value_store_mac.h",
      "mac/lib/rlz_value_store_mac.mm",
    ]
    set_sources_assignment_filter(sources_assignment_filter)
  }
}

source_set("test_support") {
  testonly = true
  sources = [
    "test/rlz_test_helpers.cc",
    "test/rlz_test_helpers.h",
  ]
  deps = [
    ":rlz_lib",
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
  ]
}

test("rlz_unittests") {
  sources = [
    "lib/crc32_unittest.cc",
    "lib/crc8_unittest.cc",
    "lib/financial_ping_test.cc",
    "lib/lib_values_unittest.cc",
    "lib/machine_id_unittest.cc",
    "lib/rlz_lib_test.cc",
    "lib/string_utils_unittest.cc",
    "test/rlz_unittest_main.cc",
    "win/lib/machine_deal_test.cc",
  ]

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  deps = [
    ":rlz_lib",
    ":test_support",
    "//base",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/zlib",
  ]
}

if (!is_ios) {
  executable("rlz_id") {
    sources = [
      "examples/rlz_id.cc",
    ]
    deps = [
      ":rlz_lib",
      "//build/config/sanitizers:deps",
    ]
  }
}

if (is_win) {
  shared_library("rlz") {
    sources = [
      "win/dll/dll_main.cc",
      "win/dll/exports.cc",
    ]
    deps = [
      ":rlz_lib",
      "//build/config/sanitizers:deps",
      "//third_party/zlib",
    ]
  }
}
