chromium/components/vector_icons/vector_icons.gni

# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Creates an action that aggregates vector icon files (.icon) into a C++ file.
# In addition to running the action, the outputs should be added to another
# target's sources for compilation.
#
# Parameters
#
#   sources (required)
#       A list of icon filenames to use as inputs.
#
#   icon_directory (required)
#       The path component of the location of the icons, relative to the current
#       directory. For example, if the invoking BUILD file exists in //foo/bar
#       and the icons are in //foo/bar/vector_icons/, then icon_directory should
#       be set to "vector_icons". There must also be template files in this
#       directory.
#
# Example
#
#   See BUILD.gn in this directory (//components/vector_icons/) for an example.
template("aggregate_vector_icons") {
  assert(defined(invoker.sources),
         "Need sources in $target_name listing the icon files.")
  assert(
      defined(invoker.icon_directory),
      "Need icon_directory in $target_name where the icons and templates live.")

  public_deps = [ "//base" ]

  action(target_name) {
    visibility = [ ":*" ]

    script = "//components/vector_icons/aggregate_vector_icons.py"

    output_cc = "$target_gen_dir/vector_icons.cc"
    output_h = "$target_gen_dir/vector_icons.h"

    templates = [
      "vector_icons.cc.template",
      "vector_icons.h.template",
    ]
    inputs =
        rebase_path(templates + invoker.sources, ".", invoker.icon_directory) +
        [ "//components/vector_icons/aggregate_vector_icons.py" ]

    outputs = [
      output_cc,
      output_h,
    ]

    response_file_contents =
        rebase_path(invoker.sources, root_build_dir, invoker.icon_directory)

    args = [
      "--working_directory=" +
          rebase_path(invoker.icon_directory, root_build_dir),
      "--file_list={{response_file_name}}",
      "--output_cc=" + rebase_path(output_cc, root_build_dir),
      "--output_h=" + rebase_path(output_h, root_build_dir),
    ]
  }
}