# Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

_dart_root = get_path_info(".", "abspath")

declare_args() {
  # Absolute path to the .git folder.
  #
  # This is used in rules that need to refer to `.git/logs/HEAD` to include
  # a hash in the version string. By default the folder is `.git`, but we define
  # it as an argument so it can be overriden by users of `git-worktree` (See
  # Issue #33619).
  #
  # When using git-worktree, you can add
  #
  #    default_git_folder = "/path/to/main/git/repo/.git/worktrees/name/"
  #
  # to out/ReleaseX64/args.gn. The path above can be extracted from the `.git`
  # file under the git worktree folder.
  # The script run here should take care of everything automatically though.
  default_git_folder = exec_script("$_dart_root/tools/get_dot_git_folder.py",
                                   [
                                     rebase_path("$_dart_root/.git"),
                                     "$_dart_root/.git",
                                   ],
                                   "trim string")

  # Whether to enable the SDK hash check that will prevent loading a kernel
  # into a VM which was built with a different SDK.
  verify_sdk_hash = true
}

# The SDK hash to build into VM and kernels.
# The value 0000000000 signifies no hash is set, which will disable the check.
if (verify_sdk_hash) {
  sdk_hash = exec_script("$_dart_root/tools/make_version.py",
                         [ "--format={{GIT_HASH}}" ],
                         "trim string",
                         [
                           "$_dart_root/tools/VERSION",
                           "$_dart_root/tools/utils.py",
                           "$default_git_folder/logs/HEAD",
                         ])
} else {
  sdk_hash = "0000000000"
}
