cmInstallFilesGenerator.cxx 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*============================================================================
  2. CMake - Cross Platform Makefile Generator
  3. Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
  4. Distributed under the OSI-approved BSD License (the "License");
  5. see accompanying file Copyright.txt for details.
  6. This software is distributed WITHOUT ANY WARRANTY; without even the
  7. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. See the License for more information.
  9. ============================================================================*/
  10. #include "cmInstallFilesGenerator.h"
  11. #include "cmGeneratorExpression.h"
  12. #include "cmSystemTools.h"
  13. //----------------------------------------------------------------------------
  14. cmInstallFilesGenerator
  15. ::cmInstallFilesGenerator(cmMakefile* mf,
  16. std::vector<std::string> const& files,
  17. const char* dest, bool programs,
  18. const char* file_permissions,
  19. std::vector<std::string> const& configurations,
  20. const char* component,
  21. const char* rename,
  22. bool optional):
  23. cmInstallGenerator(dest, configurations, component),
  24. Makefile(mf),
  25. Files(files), Programs(programs),
  26. FilePermissions(file_permissions),
  27. Rename(rename), Optional(optional)
  28. {
  29. // We need per-config actions if any files have generator expressions.
  30. for(std::vector<std::string>::const_iterator i = files.begin();
  31. !this->ActionsPerConfig && i != files.end(); ++i)
  32. {
  33. if(cmGeneratorExpression::Find(*i) != std::string::npos)
  34. {
  35. this->ActionsPerConfig = true;
  36. }
  37. }
  38. }
  39. //----------------------------------------------------------------------------
  40. cmInstallFilesGenerator
  41. ::~cmInstallFilesGenerator()
  42. {
  43. }
  44. //----------------------------------------------------------------------------
  45. void cmInstallFilesGenerator::AddFilesInstallRule(
  46. std::ostream& os, Indent const& indent,
  47. std::vector<std::string> const& files)
  48. {
  49. // Write code to install the files.
  50. const char* no_dir_permissions = 0;
  51. this->AddInstallRule(os,
  52. (this->Programs
  53. ? cmInstallType_PROGRAMS
  54. : cmInstallType_FILES),
  55. files,
  56. this->Optional,
  57. this->FilePermissions.c_str(), no_dir_permissions,
  58. this->Rename.c_str(), 0, indent);
  59. }
  60. //----------------------------------------------------------------------------
  61. void cmInstallFilesGenerator::GenerateScriptActions(std::ostream& os,
  62. Indent const& indent)
  63. {
  64. if(this->ActionsPerConfig)
  65. {
  66. this->cmInstallGenerator::GenerateScriptActions(os, indent);
  67. }
  68. else
  69. {
  70. this->AddFilesInstallRule(os, indent, this->Files);
  71. }
  72. }
  73. //----------------------------------------------------------------------------
  74. void cmInstallFilesGenerator::GenerateScriptForConfig(std::ostream& os,
  75. const char* config,
  76. Indent const& indent)
  77. {
  78. std::vector<std::string> files;
  79. cmListFileBacktrace lfbt;
  80. cmGeneratorExpression ge(lfbt);
  81. for(std::vector<std::string>::const_iterator i = this->Files.begin();
  82. i != this->Files.end(); ++i)
  83. {
  84. cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(*i);
  85. cmSystemTools::ExpandListArgument(cge->Evaluate(this->Makefile, config),
  86. files);
  87. }
  88. this->AddFilesInstallRule(os, indent, files);
  89. }