// Copyright (c) 2013 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. #include "tools/gn/copy_target_generator.h" #include "tools/gn/build_settings.h" #include "tools/gn/filesystem_utils.h" #include "tools/gn/parse_tree.h" #include "tools/gn/scope.h" #include "tools/gn/value.h" CopyTargetGenerator::CopyTargetGenerator(Target* target, Scope* scope, const FunctionCallNode* function_call, Err* err) : TargetGenerator(target, scope, function_call, err) { } CopyTargetGenerator::~CopyTargetGenerator() = default; void CopyTargetGenerator::DoRun() { target_->set_output_type(Target::COPY_FILES); if (!FillSources()) return; if (!FillOutputs(true)) return; if (target_->sources().empty()) { *err_ = Err(function_call_, "Empty sources for copy command.", "You have to specify at least one file to copy in the \"sources\"."); return; } if (target_->action_values().outputs().list().size() != 1) { *err_ = Err(function_call_, "Copy command must have exactly one output.", "You must specify exactly one value in the \"outputs\" array for the " "destination of the copy\n(see \"gn help copy\"). If there are " "multiple sources to copy, use source expansion\n(see \"gn help " "source_expansion\")."); return; } }