# 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 build/util/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@\" "

# The file containing the Chrome version number.
chrome_version_file = "//chrome/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

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
}
