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

_version_py_abspath = "//build/util/version.py"
_remoting_version_abspath = "//remoting/VERSION"
_chrome_version_abspath = "//chrome/VERSION"
if (is_chrome_branded) {
  _remoting_branding_abspath = "//remoting/branding_Chrome"
} else {
  _remoting_branding_abspath = "//remoting/branding_Chromium"
}

# Set these files as being input dependencies to the scripts, so the build will
# be re-run if the files change.
_script_deps = [
  _remoting_version_abspath,
  _chrome_version_abspath,
  _remoting_branding_abspath,
]

_chrome_version_path = rebase_path(_chrome_version_abspath, root_build_dir)
_remoting_version_path = rebase_path(_remoting_version_abspath, root_build_dir)
_remoting_branding_path =
    rebase_path(_remoting_branding_abspath, root_build_dir)

version_major = exec_script(_version_py_abspath,
                            [
                              "-f",
                              _chrome_version_path,
                              "-f",
                              _remoting_version_path,
                              "-t \"@MAJOR@\"",
                            ],
                            "value",
                            _script_deps)

version_minor = exec_script(_version_py_abspath,
                            [
                              "-f",
                              _remoting_version_path,
                              "-t \"@REMOTING_PATCH@\"",
                            ],
                            "value",
                            _script_deps)

version_short =
    "${version_major}.${version_minor}." + exec_script(_version_py_abspath,
                                                       [
                                                         "-f",
                                                         _chrome_version_path,
                                                         "-f",
                                                         _remoting_version_path,
                                                         "-t \"@BUILD@\"",
                                                       ],
                                                       "value",
                                                       _script_deps)

version_full = "${version_short}." + exec_script(_version_py_abspath,
                                                 [
                                                   "-f",
                                                   _chrome_version_path,
                                                   "-f",
                                                   _remoting_version_path,
                                                   "-t \"@PATCH@\"",
                                                 ],
                                                 "value",
                                                 _script_deps)

prefpane_bundle_name = exec_script(_version_py_abspath,
                                   [
                                     "-f",
                                     _remoting_branding_path,
                                     "-t \"@MAC_PREFPANE_BUNDLE_NAME@\"",
                                   ],
                                   "string",
                                   _script_deps)

host_bundle_name = exec_script(_version_py_abspath,
                               [
                                 "-f",
                                 _remoting_branding_path,
                                 "-t \"@MAC_HOST_BUNDLE_NAME@\"",
                               ],
                               "string",
                               _script_deps)
