#include "cmCPackPropertiesGenerator.h"

#include "cmGeneratorExpression.h"
#include "cmInstalledFile.h"
#include "cmOutputConverter.h"

#include <map>
#include <ostream>

cmCPackPropertiesGenerator::cmCPackPropertiesGenerator(
  cmLocalGenerator* lg, cmInstalledFile const& installedFile,
  std::vector<std::string> const& configurations)
  : cmScriptGenerator("CPACK_BUILD_CONFIG", configurations)
  , LG(lg)
  , InstalledFile(installedFile)
{
  this->ActionsPerConfig = true;
}

void cmCPackPropertiesGenerator::GenerateScriptForConfig(
  std::ostream& os, const std::string& config, Indent indent)
{
  std::string const& expandedFileName =
    this->InstalledFile.GetNameExpression().Evaluate(this->LG, config);

  cmInstalledFile::PropertyMapType const& properties =
    this->InstalledFile.GetProperties();

  for (cmInstalledFile::PropertyMapType::value_type const& i : properties) {
    std::string const& name = i.first;
    cmInstalledFile::Property const& property = i.second;

    os << indent << "set_property(INSTALL "
       << cmOutputConverter::EscapeForCMake(expandedFileName) << " PROPERTY "
       << cmOutputConverter::EscapeForCMake(name);

    for (cmInstalledFile::ExpressionVectorType::value_type const& j :
         property.ValueExpressions) {
      std::string value = j->Evaluate(this->LG, config);
      os << " " << cmOutputConverter::EscapeForCMake(value);
    }

    os << ")\n";
  }
}
