# Copyright 2019 The Fuchsia 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.gni")
import("//build/python/python_action.gni")

template("sysmgr_config") {
  # Copy the config file to the output directory so changes to the config file
  # will trigger a re-build of the target
  copy(target_name) {
    forward_variables_from(invoker, [ "source" ])
    assert(defined(source))

    sources = [ source ]
    outputs = [ "${target_out_dir}/${target_name}_${source}" ]

    visibility = [ "//src/sys/pkg:*" ]
    metadata = {
      sysmgr_config_files = outputs
    }
  }
}

template("merge_sysmgr_config") {
  cfg = {
    forward_variables_from(invoker,
                           [
                             "output",
                             "deps",
                           ])
    assert(defined(output))
    assert(defined(deps))
  }

  merged_config_path = "${target_out_dir}/${cfg.output}"
  merged_config_target = "${target_name}_merged_config"
  merged_config_inputs_path = "${target_out_dir}/${cfg.output}.inputs"
  merged_config_inputs_target = "${target_name}_merged_config_inputs"

  # Define a config_data package entry for the merged config
  config_data(target_name) {
    for_pkg = "sysmgr"
    deps = [ ":$merged_config_target" ]
    sources = [ merged_config_path ]
    outputs = [ cfg.output ]
  }

  # Using the list of sysmgr config file paths, merge the json into a single
  # file
  python_action(merged_config_target) {
    script = "//src/sys/pkg/scripts/merge_sysmgr_config.py"

    deps = [ ":$merged_config_inputs_target" ]
    inputs = [ merged_config_inputs_path ]
    outputs = [ merged_config_path ]

    args = [
      "--inputs",
      rebase_path(merged_config_inputs_path, root_build_dir),
      "--output",
      rebase_path(merged_config_path, root_build_dir),
    ]
  }

  # Collect the list of configs specified in the "sysmgr_config_files" metadata
  # key into a file
  generated_file(merged_config_inputs_target) {
    data_keys = [ "sysmgr_config_files" ]
    rebase = root_build_dir
    deps = cfg.deps
    outputs = [ merged_config_inputs_path ]
  }
}
