llvm/llvm/utils/gn/build/write_cmake_config.gni

# This file introduces a templates for calling write_cmake_config.py.
#
# write_cmake_config behaves like CMake's configure_file(), but runs at build
# time, not at generator time.  See write_cmake_config.py for details.
#
# Parameters:
#
#   input (required) [string]
#
#   output (required) [string]
#
#   values (required) [list of strings]
#       Each entry is a '='-separated key-value pair used for substitution.
#
# Example use:
#
#   write_cmake_config("attributes_compat_func_gen") {
#     input = "Version.inc.in"
#     output = "$root_gen_dir/clang/include/clang/Basic/Version.inc",
#     values = [
#       "CLANG_VERSION=$llvm_version",
#     ]
#   }

template("write_cmake_config") {
  assert(defined(invoker.input), "must set 'input' in $target_name")
  assert(defined(invoker.output), "must set 'output' in $target_name")
  assert(defined(invoker.values), "must set 'values' in $target_name")

  action(target_name) {
    script = "//llvm/utils/gn/build/write_cmake_config.py"

    sources = [ invoker.input ]
    outputs = [ invoker.output ]
    args = [
             "-o",
             rebase_path(outputs[0], root_build_dir),
             rebase_path(sources[0], root_build_dir),
           ] + invoker.values

    forward_variables_from(invoker,
                           [
                             "configs",
                             "deps",
                             "public_configs",
                             "public_deps",
                             "visibility",
                           ])
  }
}