cmWIXDirectoriesSourceWriter.cxx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. if (startMenuFolder != ".") {
  15. BeginElement("Directory");
  16. AddAttribute("Id", "PROGRAM_MENU_FOLDER");
  17. AddAttribute("Name", startMenuFolder);
  18. EndElement("Directory");
  19. }
  20. EndElement("Directory");
  21. }
  22. void cmWIXDirectoriesSourceWriter::EmitDesktopFolder()
  23. {
  24. BeginElement("Directory");
  25. AddAttribute("Id", "DesktopFolder");
  26. AddAttribute("Name", "Desktop");
  27. EndElement("Directory");
  28. }
  29. void cmWIXDirectoriesSourceWriter::EmitStartupFolder()
  30. {
  31. BeginElement("Directory");
  32. AddAttribute("Id", "StartupFolder");
  33. AddAttribute("Name", "Startup");
  34. EndElement("Directory");
  35. }
  36. size_t cmWIXDirectoriesSourceWriter::BeginInstallationPrefixDirectory(
  37. std::string const& programFilesFolderId,
  38. std::string const& installRootString)
  39. {
  40. size_t offset = 1;
  41. if (!programFilesFolderId.empty()) {
  42. BeginElement("Directory");
  43. AddAttribute("Id", programFilesFolderId);
  44. offset = 0;
  45. }
  46. std::vector<std::string> installRoot;
  47. cmSystemTools::SplitPath(installRootString.c_str(), installRoot);
  48. if (!installRoot.empty() && installRoot.back().empty()) {
  49. installRoot.pop_back();
  50. }
  51. for (size_t i = 1; i < installRoot.size(); ++i) {
  52. BeginElement("Directory");
  53. if (i == installRoot.size() - 1) {
  54. AddAttribute("Id", "INSTALL_ROOT");
  55. } else {
  56. std::ostringstream tmp;
  57. tmp << "INSTALL_PREFIX_" << i;
  58. AddAttribute("Id", tmp.str());
  59. }
  60. AddAttribute("Name", installRoot[i]);
  61. }
  62. return installRoot.size() - offset;
  63. }
  64. void cmWIXDirectoriesSourceWriter::EndInstallationPrefixDirectory(size_t size)
  65. {
  66. for (size_t i = 0; i < size; ++i) {
  67. EndElement("Directory");
  68. }
  69. }