# 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("//build/config/chromeos/ui_mode.gni")
import("//rlz/buildflags/buildflags.gni")
import("//testing/test.gni")

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

source_set("rlz_utils") {
  sources = [
    "lib/assert.cc",
    "lib/assert.h",
    "lib/crc32.h",
    "lib/crc32_wrapper.cc",
    "lib/lib_values.cc",
    "lib/lib_values.h",
    "lib/net_response_check.cc",
    "lib/net_response_check.h",
    "lib/rlz_api.h",
    "lib/rlz_enums.h",
    "lib/string_utils.cc",
    "lib/string_utils.h",
  ]

  public_deps = [ "//base" ]

  deps = [
    "//build:chromeos_buildflags",
    "//third_party/zlib",
  ]
}

if (enable_rlz_support) {
  source_set("rlz_lib_no_network") {
    sources = [
      "lib/crc8.cc",
      "lib/crc8.h",
      "lib/machine_deal_win.h",
      "lib/machine_id.cc",
      "lib/machine_id.h",
      "lib/rlz_lib_clear.cc",
      "lib/rlz_lib_clear.h",
      "lib/rlz_value_store.h",
      "lib/supplementary_branding.cc",
      "lib/supplementary_branding.h",
      "lib/time_util.h",
    ]

    if (is_win) {
      sources += [
        "lib/time_util_win.cc",
        "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",
      ]
    } else {
      sources += [ "lib/time_util_base.cc" ]
    }

    deps = [
      ":rlz_utils",
      "//base",
      "//build:chromeos_buildflags",
    ]

    if (is_chromeos_ash) {
      sources += [
        "chromeos/lib/rlz_value_store_chromeos.cc",
        "chromeos/lib/rlz_value_store_chromeos.h",
      ]
      deps += [
        "//chromeos/dbus",
        "//chromeos/system",
      ]
    }

    if (is_apple) {
      sources += [
        "mac/lib/rlz_value_store_mac.h",
        "mac/lib/rlz_value_store_mac.mm",
      ]

      frameworks = [ "Foundation.framework" ]

      if (is_mac) {
        sources += [ "mac/lib/machine_id_mac.cc" ]
        frameworks += [ "IOKit.framework" ]
      }

      if (is_ios) {
        sources += [ "ios/lib/machine_id_ios.cc" ]
      }
    }

    if (is_posix) {
      sources += [
        "lib/recursive_cross_process_lock_posix.cc",
        "lib/recursive_cross_process_lock_posix.h",
      ]
    }
  }

  source_set("rlz_lib") {
    sources = [
      "lib/financial_ping.cc",
      "lib/financial_ping.h",
      "lib/rlz_lib.cc",
      "lib/rlz_lib.h",
    ]

    public_deps = [
      ":rlz_lib_no_network",
      "//base",
    ]

    deps = [
      ":rlz_utils",
      "//base/third_party/dynamic_annotations",
      "//build:chromeos_buildflags",
      "//net",
      "//services/network/public/cpp:cpp",
      "//services/network/public/mojom",
      "//url",
    ]

    if (is_chromeos_ash) {
      deps += [
        "//chromeos/dbus",
        "//chromeos/system",
      ]
    }

    public_configs = [ ":rlz_lib_config" ]
  }

  source_set("test_support") {
    testonly = true
    sources = [
      "test/rlz_test_helpers.cc",
      "test/rlz_test_helpers.h",
    ]
    public_deps = [
      "//base",
      "//base/test:test_support",
      "//testing/gtest",
    ]
    deps = [
      ":rlz_lib",
      "//build:chromeos_buildflags",
    ]
    if (is_chromeos_ash) {
      public_deps += [ "//chromeos/system" ]
    }
  }

  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",
    ]

    if (is_win) {
      sources += [ "win/lib/machine_deal_test.cc" ]
    }

    deps = [
      ":rlz_lib",
      ":rlz_utils",
      ":test_support",
      "//base",
      "//build:chromeos_buildflags",
      "//mojo/core/embedder",
      "//net:test_support",
      "//services/network:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/zlib",
    ]
    if (is_chromeos_ash) {
      deps += [
        "//chromeos/dbus:test_support",
        "//chromeos/system",
      ]
    }
  }
}

if (!is_ios && !is_android) {
  executable("rlz_id") {
    sources = [ "examples/rlz_id.cc" ]
    deps = [
      ":rlz_lib",
      "//build/win:default_exe_manifest",
    ]
  }
}

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