1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "tools/gn/copy_target_generator.h" 6 7 #include "tools/gn/build_settings.h" 8 #include "tools/gn/filesystem_utils.h" 9 #include "tools/gn/parse_tree.h" 10 #include "tools/gn/scope.h" 11 #include "tools/gn/value.h" 12 13 CopyTargetGenerator::CopyTargetGenerator(Target* target, 14 Scope* scope, 15 const FunctionCallNode* function_call, 16 Err* err) 17 : TargetGenerator(target, scope, function_call, err) { 18 } 19 20 CopyTargetGenerator::~CopyTargetGenerator() { 21 } 22 23 void CopyTargetGenerator::DoRun() { 24 target_->set_output_type(Target::COPY_FILES); 25 26 FillSources(); 27 if (err_->has_error()) 28 return; 29 FillOutputs(); 30 if (err_->has_error()) 31 return; 32 33 if (target_->sources().empty()) { 34 *err_ = Err(function_call_, "Empty sources for copy command.", 35 "You have to specify at least one file to copy in the \"sources\"."); 36 return; 37 } 38 if (target_->action_values().outputs().size() != 1) { 39 *err_ = Err(function_call_, "Copy command must have exactly one output.", 40 "You must specify exactly one value in the \"outputs\" array for the " 41 "destination of the copy\n(see \"gn help copy\"). If there are " 42 "multiple sources to copy, use source expansion\n(see \"gn help " 43 "source_expansion\")."); 44 return; 45 } 46 } 47