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

#ifndef TOOLS_GN_NINJA_WRITER_H_
#define TOOLS_GN_NINJA_WRITER_H_

#include <map>
#include <set>
#include <string>
#include <vector>

#include "base/macros.h"

class Builder;
class BuildSettings;
class Err;
class Target;
class Toolchain;

class NinjaWriter {
 public:
  // Combines a target and the computed build rule for it.
  using TargetRulePair = std::pair<const Target*, std::string>;

  // Associates the build rules with each toolchain.
  using PerToolchainRules =
      std::map<const Toolchain*, std::vector<TargetRulePair>>;

  // On failure will populate |err| and will return false.  The map contains
  // the per-toolchain set of rules collected to write to the toolchain build
  // files.
  static bool RunAndWriteFiles(const BuildSettings* build_settings,
                               const Builder& builder,
                               const PerToolchainRules& per_toolchain_rules,
                               Err* err);

 private:
  NinjaWriter(const Builder& builder);
  ~NinjaWriter();

  bool WriteToolchains(const PerToolchainRules& per_toolchain_rules, Err* err);

  const Builder& builder_;

  DISALLOW_COPY_AND_ASSIGN(NinjaWriter);
};

#endif  // TOOLS_GN_NINJA_WRITER_H_
