blob: 2bb5b150a2b6e162893a591e324782806a64dad8 [file] [log] [blame]
# Copyright 2020 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.
# Helper templates for host_script_test.gni. These templates
# should not be used directly. See host_script_test.gni for
# details.
# Internal template for copying a directory of files and adding
# the files to the test dependency metadata.
template("_host_script_test_data_impl_data_copy") {
copy(target_name) {
sources = invoker.source_files
outputs = [ "${invoker.dest_path}/{{source_file_part}}" ]
forward_variables_from(invoker, [ "data_deps" ])
metadata = {
test_runtime_deps = []
foreach(f, invoker.source_files) {
test_runtime_deps +=
[ "${invoker.dest_path}/" + get_path_info(f, "file") ]
}
}
}
}
# Internal template for handling subdirectories within a data file scope.
#
# Parameters:
# data - a scope as defined in host_test_data.
# data_deps
# visibility
template("host_script_test_data_impl_data_set_copy") {
set = invoker.data
last_dir = "/"
base_dir = set.target_base_dir
data_path = invoker.data_path
dir_count = 0
file_set = []
dep_target_list = []
foreach(file, set.files) {
# Need a copy target for each source directory within the source_base_dir.
sub_dir = get_path_info(file, "dir")
if (sub_dir != ".") {
sub_dir = string_replace(sub_dir, set.source_base_dir, "")
assert(sub_dir != get_path_info(file, "dir"),
"Error file $file not under ${set.source_base_dir}")
}
if (last_dir == "/") {
last_dir = sub_dir
}
# make sure the file is under the source base directory.
if (last_dir != sub_dir && file_set != []) {
copy_target_name = "${target_name}_dir${dir_count}"
_host_script_test_data_impl_data_copy(copy_target_name) {
dest_path = "${root_out_dir}/${data_path}/${base_dir}/${last_dir}"
source_files = file_set
forward_variables_from(invoker,
[
"data_deps",
"visibility",
])
}
dep_target_list += [ ":$copy_target_name" ]
dir_count = dir_count + 1
file_set = []
last_dir = sub_dir
}
file_set += [ file ]
}
# write out the last copy
if (file_set != []) {
copy_target_name = "${target_name}_dir${dir_count}"
_host_script_test_data_impl_data_copy(copy_target_name) {
dest_path = "${root_out_dir}/${data_path}/${base_dir}/${last_dir}"
source_files = file_set
forward_variables_from(invoker,
[
"data_deps",
"visiibility",
])
}
dep_target_list += [ ":${copy_target_name}" ]
}
group(target_name) {
data_deps = dep_target_list
forward_variables_from(invoker, [ "visibility" ])
}
}