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

import("//build/config/chrome_build.gni")

_version_py_abspath = "//build/util/version.py"
_remoting_version_abspath = "//remoting/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.
remoting_version_files = [
  _remoting_version_abspath,
  _remoting_branding_abspath,
]

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

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

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