1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2019 The Chromium Authors 2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 4*8975f5c5SAndroid Build Coastguard Worker# 5*8975f5c5SAndroid Build Coastguard Worker# Copy a list of file into a destination directory. Potentially renaming 6*8975f5c5SAndroid Build Coastguard Worker# files are they are copied. This also ensures that symlinks are followed 7*8975f5c5SAndroid Build Coastguard Worker# during the copy (i.e. the symlinks are never copied, only their content). 8*8975f5c5SAndroid Build Coastguard Worker# 9*8975f5c5SAndroid Build Coastguard Worker# Variables: 10*8975f5c5SAndroid Build Coastguard Worker# dest: Destination directory path. 11*8975f5c5SAndroid Build Coastguard Worker# sources: List of source files or directories to copy to dest. 12*8975f5c5SAndroid Build Coastguard Worker# renaming_sources: Optional list of source file paths that will be renamed 13*8975f5c5SAndroid Build Coastguard Worker# during the copy operation. If provided, renaming_destinations is required. 14*8975f5c5SAndroid Build Coastguard Worker# renaming_destinations: Optional list of destination file paths, required 15*8975f5c5SAndroid Build Coastguard Worker# when renaming_sources is provided. Both lists should have the same size 16*8975f5c5SAndroid Build Coastguard Worker# and matching entries. 17*8975f5c5SAndroid Build Coastguard Worker# args: Optional. Additionnal arguments to the copy_ex.py script. 18*8975f5c5SAndroid Build Coastguard Worker# 19*8975f5c5SAndroid Build Coastguard Worker# The following variables have the usual GN meaning: data, deps, inputs, 20*8975f5c5SAndroid Build Coastguard Worker# outputs, testonly, visibility. 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/python.gni") 23*8975f5c5SAndroid Build Coastguard Worker 24*8975f5c5SAndroid Build Coastguard Workertemplate("copy_ex") { 25*8975f5c5SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 26*8975f5c5SAndroid Build Coastguard Worker forward_variables_from(invoker, 27*8975f5c5SAndroid Build Coastguard Worker [ 28*8975f5c5SAndroid Build Coastguard Worker "data", 29*8975f5c5SAndroid Build Coastguard Worker "deps", 30*8975f5c5SAndroid Build Coastguard Worker "public_deps", 31*8975f5c5SAndroid Build Coastguard Worker "testonly", 32*8975f5c5SAndroid Build Coastguard Worker "visibility", 33*8975f5c5SAndroid Build Coastguard Worker ]) 34*8975f5c5SAndroid Build Coastguard Worker sources = [] 35*8975f5c5SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 36*8975f5c5SAndroid Build Coastguard Worker sources += invoker.sources 37*8975f5c5SAndroid Build Coastguard Worker } 38*8975f5c5SAndroid Build Coastguard Worker outputs = [] 39*8975f5c5SAndroid Build Coastguard Worker if (defined(invoker.outputs)) { 40*8975f5c5SAndroid Build Coastguard Worker outputs += invoker.outputs 41*8975f5c5SAndroid Build Coastguard Worker } 42*8975f5c5SAndroid Build Coastguard Worker if (defined(invoker.inputs)) { 43*8975f5c5SAndroid Build Coastguard Worker inputs = invoker.inputs 44*8975f5c5SAndroid Build Coastguard Worker } 45*8975f5c5SAndroid Build Coastguard Worker 46*8975f5c5SAndroid Build Coastguard Worker script = "//build/android/gyp/copy_ex.py" 47*8975f5c5SAndroid Build Coastguard Worker 48*8975f5c5SAndroid Build Coastguard Worker args = [ 49*8975f5c5SAndroid Build Coastguard Worker "--dest", 50*8975f5c5SAndroid Build Coastguard Worker rebase_path(invoker.dest, root_build_dir), 51*8975f5c5SAndroid Build Coastguard Worker ] 52*8975f5c5SAndroid Build Coastguard Worker rebased_sources = rebase_path(sources, root_build_dir) 53*8975f5c5SAndroid Build Coastguard Worker args += [ "--files=$rebased_sources" ] 54*8975f5c5SAndroid Build Coastguard Worker 55*8975f5c5SAndroid Build Coastguard Worker if (defined(invoker.args)) { 56*8975f5c5SAndroid Build Coastguard Worker args += invoker.args 57*8975f5c5SAndroid Build Coastguard Worker } 58*8975f5c5SAndroid Build Coastguard Worker 59*8975f5c5SAndroid Build Coastguard Worker if (defined(invoker.renaming_sources) && 60*8975f5c5SAndroid Build Coastguard Worker defined(invoker.renaming_destinations)) { 61*8975f5c5SAndroid Build Coastguard Worker sources += invoker.renaming_sources 62*8975f5c5SAndroid Build Coastguard Worker renaming_destinations = invoker.renaming_destinations 63*8975f5c5SAndroid Build Coastguard Worker outputs += 64*8975f5c5SAndroid Build Coastguard Worker get_path_info(rebase_path(renaming_destinations, ".", invoker.dest), 65*8975f5c5SAndroid Build Coastguard Worker "abspath") 66*8975f5c5SAndroid Build Coastguard Worker rebased_renaming_sources = 67*8975f5c5SAndroid Build Coastguard Worker rebase_path(invoker.renaming_sources, root_build_dir) 68*8975f5c5SAndroid Build Coastguard Worker args += [ "--renaming-sources=$rebased_renaming_sources" ] 69*8975f5c5SAndroid Build Coastguard Worker args += [ "--renaming-destinations=$renaming_destinations" ] 70*8975f5c5SAndroid Build Coastguard Worker } 71*8975f5c5SAndroid Build Coastguard Worker } 72*8975f5c5SAndroid Build Coastguard Worker} 73