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   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