llvm/llvm/utils/gn/build/write_vcsrevision.gni

# This file introduces a templates for calling write_vcsrevision.py.
#
# Parameters:
#
#   header (required) [string]
#
#   names (optional) [list of strings]
#       Writes "$foo_REVISION" and "$foo_REPOSITORY" for each foo in names.
#       Defaults to [ "LLVM" ]

declare_args() {
  # If this is set to true, VCSRevision.h is updated after every git commit.
  # That's technically correct, but results in rebuilds after every commit.
  # If it's false (default), VCSRevision.h will not contain a revision.
  llvm_append_vc_rev = false
}

template("write_vcsrevision") {
  assert(defined(invoker.header), "must set 'header' in $target_name")

  action(target_name) {
    script = "//llvm/utils/gn/build/write_vcsrevision.py"
    header = invoker.header
    if (defined(invoker.names)) {
      names = invoker.names
    } else {
      names = [ "LLVM" ]
    }

    args = [ rebase_path(header, root_build_dir) ]
    if (llvm_append_vc_rev) {
      depfile = "$header.d"
      args += [
        "--write-git-rev",
        "-d",
        rebase_path(depfile, root_build_dir),
      ]
    }

    foreach(name, names) {
      args += [ "--name=$name" ]
    }

    outputs = [ header ]

    forward_variables_from(invoker,
                           [
                             "public_configs",
                             "visibility",
                           ])
  }
}