Home | History | Annotate | Download | only in gn
      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   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