123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#ifndef TOOLS_GN_ACTION_TARGET_GENERATOR_H_
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define TOOLS_GN_ACTION_TARGET_GENERATOR_H_
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/compiler_specific.h"
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "tools/gn/target_generator.h"
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Populates a Target with the values from an action[_foreach] rule.
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class ActionTargetGenerator : public TargetGenerator {
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public:
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ActionTargetGenerator(Target* target,
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        Scope* scope,
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        const FunctionCallNode* function_call,
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        Target::OutputType type,
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        Err* err);
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual ~ActionTargetGenerator();
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) protected:
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void DoRun() OVERRIDE;
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private:
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool FillScript();
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool FillScriptArgs();
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool FillDepfile();
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Checks for errors in the outputs variable.
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool CheckOutputs();
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  Target::OutputType output_type_;
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ActionTargetGenerator);
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)};
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif  // TOOLS_GN_ACTION_TARGET_GENERATOR_H_
38