| // 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 "gn/copy_target_generator.h" | |
| #include "gn/build_settings.h" | |
| #include "gn/filesystem_utils.h" | |
| #include "gn/parse_tree.h" | |
| #include "gn/scope.h" | |
| #include "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; | |
| } | |
| } |