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

action("histograms_xml") {
  script = "histograms/merge_xml.py"
  sources = [
    "histograms/enums.xml",
    "histograms/histograms.xml",
  ]
  output = "$root_out_dir/histograms.xml"
  outputs = [
    output,
  ]
  args = rebase_path(sources, root_build_dir) + [
           "--output",
           rebase_path(output, root_build_dir),
         ]
}

copy("actions_xml") {
  sources = [
    "actions/actions.xml",
  ]
  outputs = [
    "$root_out_dir/actions.xml",
  ]
}

copy("rappor_xml") {
  sources = [
    "rappor/rappor.xml",
  ]
  outputs = [
    "$root_out_dir/rappor.xml",
  ]
}

group("metrics_metadata") {
  deps = [
    ":actions_xml",
    ":histograms_xml",
    ":rappor_xml",
  ]
}
