cmWIXDirectoriesSourceWriter.cxx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "cmWIXDirectoriesSourceWriter.h"
  4. cmWIXDirectoriesSourceWriter::cmWIXDirectoriesSourceWriter(
  5. cmCPackLog* logger, std::string const& filename, GuidType componentGuidType)
  6. : cmWIXSourceWriter(logger, filename, componentGuidType)
  7. {
  8. }
  9. void cmWIXDirectoriesSourceWriter::EmitStartMenuFolder(
  10. std::string const& startMenuFolder)
  11. {
  12. BeginElement("Directory");
  13. AddAttribute("Id", "ProgramMenuFolder");
  14. BeginElement("Directory");
  15. AddAttribute("Id", "PROGRAM_MENU_FOLDER");
  16. AddAttribute("Name", startMenuFolder);
  17. EndElement("Directory");
  18. EndElement("Directory");
  19. }
  20. void cmWIXDirectoriesSourceWriter::EmitDesktopFolder()
  21. {
  22. BeginElement("Directory");
  23. AddAttribute("Id", "DesktopFolder");
  24. AddAttribute("Name", "Desktop");
  25. EndElement("Directory");
  26. }
  27. void cmWIXDirectoriesSourceWriter::EmitStartupFolder()
  28. {
  29. BeginElement("Directory");
  30. AddAttribute("Id", "StartupFolder");
  31. AddAttribute("Name", "Startup");
  32. EndElement("Directory");
  33. }
  34. size_t cmWIXDirectoriesSourceWriter::BeginInstallationPrefixDirectory(
  35. std::string const& programFilesFolderId,
  36. std::string const& installRootString)
  37. {
  38. size_t offset = 1;
  39. if (!programFilesFolderId.empty()) {
  40. BeginElement("Directory");
  41. AddAttribute("Id", programFilesFolderId);
  42. offset = 0;
  43. }
  44. std::vector<std::string> installRoot;
  45. cmSystemTools::SplitPath(installRootString.c_str(), installRoot);
  46. if (!installRoot.empty() && installRoot.back().empty()) {
  47. installRoot.pop_back();
  48. }
  49. for (size_t i = 1; i < installRoot.size(); ++i) {
  50. BeginElement("Directory");
  51. if (i == installRoot.size() - 1) {
  52. AddAttribute("Id", "INSTALL_ROOT");
  53. } else {
  54. std::ostringstream tmp;
  55. tmp << "INSTALL_PREFIX_" << i;
  56. AddAttribute("Id", tmp.str());
  57. }
  58. AddAttribute("Name", installRoot[i]);
  59. }
  60. return installRoot.size() - offset;
  61. }
  62. void cmWIXDirectoriesSourceWriter::EndInstallationPrefixDirectory(size_t size)
  63. {
  64. for (size_t i = 0; i < size; ++i) {
  65. EndElement("Directory");
  66. }
  67. }