# Copyright 2015 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/chrome_build.gni")
import("//build/util/lastchange.gni")
import("//build/util/process_version.gni")

declare_args() {
  use_unofficial_version_number = !is_chrome_branded
}

static_library("version_info") {
  sources = [
    "version_info.cc",
    "version_info.h",
  ]

  deps = [
    "//base",
    "//base:sanitizer_buildflags",
    "//build:branding_buildflags",
    "//build:chromeos_buildflags",
  ]

  public_deps = [
    ":channel",
    ":generate_version_info",
  ]
}

# Isolate the //ui/base dependency in this target.
static_library("version_string") {
  sources = [
    "version_string.cc",
    "version_string.h",
  ]

  deps = [
    ":version_info",
    "//components/strings",
  ]

  if (use_unofficial_version_number) {
    defines = [ "USE_UNOFFICIAL_VERSION_NUMBER" ]
    deps += [ "//ui/base" ]
  }
}

source_set("channel") {
  sources = [ "channel.h" ]
}

process_version("generate_version_info") {
  template_file = "version_info_values.h.version"
  sources = [
    "//chrome/VERSION",
    branding_file_path,
    lastchange_file,
  ]
  output = "$target_gen_dir/version_info_values.h"
}
