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 13CopyTargetGenerator::CopyTargetGenerator(Target* target, 14 Scope* scope, 15 const FunctionCallNode* function_call, 16 Err* err) 17 : TargetGenerator(target, scope, function_call, err) { 18} 19 20CopyTargetGenerator::~CopyTargetGenerator() { 21} 22 23void CopyTargetGenerator::DoRun() { 24 target_->set_output_type(Target::COPY_FILES); 25 26 if (!FillSources()) 27 return; 28 if (!FillOutputs(true)) 29 return; 30 31 if (target_->sources().empty()) { 32 *err_ = Err(function_call_, "Empty sources for copy command.", 33 "You have to specify at least one file to copy in the \"sources\"."); 34 return; 35 } 36 if (target_->action_values().outputs().list().size() != 1) { 37 *err_ = Err(function_call_, "Copy command must have exactly one output.", 38 "You must specify exactly one value in the \"outputs\" array for the " 39 "destination of the copy\n(see \"gn help copy\"). If there are " 40 "multiple sources to copy, use source expansion\n(see \"gn help " 41 "source_expansion\")."); 42 return; 43 } 44} 45