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

# Generates the final .pak file whitelist that can be used by repack()'s
# repack_whitelist parameter. Used resources are tracked by the toolchain when
# enable_resource_whitelist_generation = true and are stored in the unstripped
# binary's debug info. This action extracts the whitelist from the binary.
#
# Variables
#   input: Path to the unstripped .so file.
#   output: Path to write the output whitelist to.
#
# Example
#   generate_resource_whitelist("pak_whitelist") {
#     deps = [ ":my_shared_lib" ]
#     input = "$root_out_dir/lib.unstripped/libmy_shared_lib$shlib_extension"
#     output = "$target_gen_dir/pak_whitelist.txt"
#   }
template("generate_resource_whitelist") {
  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "inputs",
                           ])

    script = "//tools/resources/generate_resource_whitelist.py"

    outputs = [
      invoker.output,
    ]

    args = [
      "-o",
      rebase_path(invoker.output, root_build_dir),
    ]
    foreach(input, invoker.inputs) {
      args += [ rebase_path(input, root_build_dir) ]
    }
  }
}
