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

# This exposes the Chrome version as GN variables for use in build files.
#
# PREFER NOT TO USE THESE. The GYP build uses this kind of thing extensively.
# However, it is far better to write an action (or use the process_version
# wrapper in chrome/version.gni) to generate a file at build-time with the
# information you need. This allows better dependency checking and GN will
# run faster.
#
# These values should only be used if you REALLY need to depend on them at
# build-time, for example, in the computation of output file names.

# Give version.py a pattern that will expand to a GN scope consisting of
# all values we need at once.
_version_dictionary_template = "full = \"@MAJOR@.@MINOR@.@BUILD@.@PATCH@\" " +
                               "major = \"@MAJOR@\" minor = \"@MINOR@\" " +
                               "build = \"@BUILD@\" patch = \"@PATCH@\" " +
                               "remoting = \"@REMOTING_PATCH\" "

# The file containing the Chrome version number.
chrome_version_file = "//chrome/VERSION"

# The file containing the Chromoting version number.
remoting_version_file = "//remoting/VERSION"

_result = exec_script("version.py",
                      [
                        "-f",
                        rebase_path(chrome_version_file, root_build_dir),
                        "-t",
                        _version_dictionary_template,
                      ],
                      "scope",
                      [ chrome_version_file ])

# Full version. For example "45.0.12321.0"
chrome_version_full = _result.full

# The consituent parts of the full version.
chrome_version_major = _result.major
chrome_version_minor = _result.minor
chrome_version_build = _result.build
chrome_version_patch = _result.patch
remoting_version_patch = _result.remoting

if (is_mac) {
  _result = exec_script("version.py",
                        [
                          "-f",
                          rebase_path(chrome_version_file, root_build_dir),
                          "-t",
                          "@BUILD@.@PATCH_HI@.@PATCH_LO@",
                          "-e",
                          "PATCH_HI=int(PATCH)/256",
                          "-e",
                          "PATCH_LO=int(PATCH)%256",
                        ],
                        "trim string",
                        [ chrome_version_file ])
  chrome_dylib_version = _result
}
