1 #include "cmCPackPropertiesGenerator.h"
2 
3 #include <map>
4 #include <ostream>
5 
6 #include "cmGeneratorExpression.h"
7 #include "cmInstalledFile.h"
8 #include "cmOutputConverter.h"
9 
cmCPackPropertiesGenerator(cmLocalGenerator * lg,cmInstalledFile const & installedFile,std::vector<std::string> const & configurations)10 cmCPackPropertiesGenerator::cmCPackPropertiesGenerator(
11   cmLocalGenerator* lg, cmInstalledFile const& installedFile,
12   std::vector<std::string> const& configurations)
13   : cmScriptGenerator("CPACK_BUILD_CONFIG", configurations)
14   , LG(lg)
15   , InstalledFile(installedFile)
16 {
17   this->ActionsPerConfig = true;
18 }
19 
GenerateScriptForConfig(std::ostream & os,const std::string & config,Indent indent)20 void cmCPackPropertiesGenerator::GenerateScriptForConfig(
21   std::ostream& os, const std::string& config, Indent indent)
22 {
23   std::string const& expandedFileName =
24     this->InstalledFile.GetNameExpression().Evaluate(this->LG, config);
25 
26   cmInstalledFile::PropertyMapType const& properties =
27     this->InstalledFile.GetProperties();
28 
29   for (cmInstalledFile::PropertyMapType::value_type const& i : properties) {
30     std::string const& name = i.first;
31     cmInstalledFile::Property const& property = i.second;
32 
33     os << indent << "set_property(INSTALL "
34        << cmOutputConverter::EscapeForCMake(expandedFileName) << " PROPERTY "
35        << cmOutputConverter::EscapeForCMake(name);
36 
37     for (cmInstalledFile::ExpressionVectorType::value_type const& j :
38          property.ValueExpressions) {
39       std::string value = j->Evaluate(this->LG, config);
40       os << " " << cmOutputConverter::EscapeForCMake(value);
41     }
42 
43     os << ")\n";
44   }
45 }
46