From 38d723b37e660223a9c8a125cf01ae5a6c9977ba Mon Sep 17 00:00:00 2001 From: Nils Gladitz Date: Sat, 12 Dec 2015 00:39:08 +0100 Subject: CPackWIX: Allow patching of shortcut components --- Source/CPack/WiX/cmCPackWIXGenerator.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index da8b486..b55c5a5 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -817,6 +817,8 @@ bool cmCPackWIXGenerator::CreateShortcutsOfSpecificType( fileDefinitions.AddAttribute("Id", componentId); fileDefinitions.AddAttribute("Guid", "*"); + this->Patch->ApplyFragment(componentId, fileDefinitions); + std::string registryKey = std::string("Software\\") + cpackVendor + "\\" + cpackPackageName; -- cgit v0.12 From de77d4a741c84e0b5774e79a0c84e945e25ad9f8 Mon Sep 17 00:00:00 2001 From: Nils Gladitz Date: Mon, 14 Dec 2015 23:04:41 +0100 Subject: CPackWIX: Allow multiple patch files and diagnose if any are missing CPACK_WIX_PATCH_FILE now accepts a list of patch files. An error will now be produced if any of the patch files is missing. Previously this would be silently ignored. --- Modules/CPackWIX.cmake | 3 ++- Source/CPack/WiX/cmCPackWIXGenerator.cxx | 11 ++++++++++- Source/CPack/WiX/cmWIXPatch.cxx | 12 ++++++++++-- Source/CPack/WiX/cmWIXPatch.h | 2 +- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/Modules/CPackWIX.cmake b/Modules/CPackWIX.cmake index bef8e16..4994005 100644 --- a/Modules/CPackWIX.cmake +++ b/Modules/CPackWIX.cmake @@ -119,7 +119,8 @@ # # .. variable:: CPACK_WIX_PATCH_FILE # -# Optional XML file with fragments to be inserted into generated WiX sources +# Optional list of XML files with fragments to be inserted into +# generated WiX sources # # This optional variable can be used to specify an XML file that the # WiX generator will use to inject fragments into its generated diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index b55c5a5..ece327a 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -242,7 +242,16 @@ bool cmCPackWIXGenerator::InitializeWiXConfiguration() const char* patchFilePath = GetOption("CPACK_WIX_PATCH_FILE"); if(patchFilePath) { - this->Patch->LoadFragments(patchFilePath); + std::vector patchFilePaths; + cmSystemTools::ExpandListArgument(patchFilePath, patchFilePaths); + + for(size_t i = 0; i < patchFilePaths.size(); ++i) + { + if(!this->Patch->LoadFragments(patchFilePaths[i])) + { + return false; + } + } } return true; diff --git a/Source/CPack/WiX/cmWIXPatch.cxx b/Source/CPack/WiX/cmWIXPatch.cxx index 471c3a4..07375da 100644 --- a/Source/CPack/WiX/cmWIXPatch.cxx +++ b/Source/CPack/WiX/cmWIXPatch.cxx @@ -20,10 +20,18 @@ cmWIXPatch::cmWIXPatch(cmCPackLog* logger): } -void cmWIXPatch::LoadFragments(std::string const& patchFilePath) +bool cmWIXPatch::LoadFragments(std::string const& patchFilePath) { cmWIXPatchParser parser(Fragments, Logger); - parser.ParseFile(patchFilePath.c_str()); + if(!parser.ParseFile(patchFilePath.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Failed parsing XML patch file: '" << + patchFilePath << "'" << std::endl); + return false; + } + + return true; } void cmWIXPatch::ApplyFragment( diff --git a/Source/CPack/WiX/cmWIXPatch.h b/Source/CPack/WiX/cmWIXPatch.h index d53fcb4..2f31a01 100644 --- a/Source/CPack/WiX/cmWIXPatch.h +++ b/Source/CPack/WiX/cmWIXPatch.h @@ -26,7 +26,7 @@ class cmWIXPatch public: cmWIXPatch(cmCPackLog* logger); - void LoadFragments(std::string const& patchFilePath); + bool LoadFragments(std::string const& patchFilePath); void ApplyFragment(std::string const& id, cmWIXSourceWriter& writer); -- cgit v0.12 From 24cdb9df598a1c10fffc718255527729595442a1 Mon Sep 17 00:00:00 2001 From: Nils Gladitz Date: Thu, 10 Dec 2015 23:55:07 +0100 Subject: CMake: Mimic NSIS options dialog in WiX installer --- CMakeCPackOptions.cmake.in | 29 ++++++++++- Utilities/Release/WiX/WIX.template.in | 46 +++++++++++++++++ Utilities/Release/WiX/cmake_extra_dialog.wxs | 36 +++++++++++++ Utilities/Release/WiX/install_dir.wxs | 61 +++++++++++++++++++++++ Utilities/Release/WiX/patch_desktop_shortcut.xml | 5 ++ Utilities/Release/WiX/patch_path_env.xml | 26 ++++++++++ Utilities/Release/WiX/ui_banner.jpg | Bin 0 -> 2607 bytes Utilities/Release/WiX/ui_dialog.jpg | Bin 0 -> 13369 bytes Utilities/Release/cpack_wix_ui_banner.jpg | Bin 2607 -> 0 bytes Utilities/Release/cpack_wix_ui_dialog.jpg | Bin 13369 -> 0 bytes 10 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 Utilities/Release/WiX/WIX.template.in create mode 100644 Utilities/Release/WiX/cmake_extra_dialog.wxs create mode 100644 Utilities/Release/WiX/install_dir.wxs create mode 100644 Utilities/Release/WiX/patch_desktop_shortcut.xml create mode 100644 Utilities/Release/WiX/patch_path_env.xml create mode 100644 Utilities/Release/WiX/ui_banner.jpg create mode 100644 Utilities/Release/WiX/ui_dialog.jpg delete mode 100644 Utilities/Release/cpack_wix_ui_banner.jpg delete mode 100644 Utilities/Release/cpack_wix_ui_dialog.jpg diff --git a/CMakeCPackOptions.cmake.in b/CMakeCPackOptions.cmake.in index 4ebf306..25af0c9 100644 --- a/CMakeCPackOptions.cmake.in +++ b/CMakeCPackOptions.cmake.in @@ -234,10 +234,35 @@ if("${CPACK_GENERATOR}" STREQUAL "WIX") set(CPACK_WIX_LIGHT_EXTRA_FLAGS "-dcl:high") set(CPACK_WIX_UI_BANNER - "@CMake_SOURCE_DIR@/Utilities/Release/cpack_wix_ui_banner.jpg" + "@CMake_SOURCE_DIR@/Utilities/Release/WiX/ui_banner.jpg" ) set(CPACK_WIX_UI_DIALOG - "@CMake_SOURCE_DIR@/Utilities/Release/cpack_wix_ui_dialog.jpg" + "@CMake_SOURCE_DIR@/Utilities/Release/WiX/ui_dialog.jpg" ) + + set(CPACK_WIX_EXTRA_SOURCES + "@CMake_SOURCE_DIR@/Utilities/Release/WiX/install_dir.wxs" + "@CMake_SOURCE_DIR@/Utilities/Release/WiX/cmake_extra_dialog.wxs" + ) + + set(CPACK_WIX_UI_REF "CMakeUI_InstallDir") + + set(CPACK_WIX_PATCH_FILE + "@CMake_SOURCE_DIR@/Utilities/Release/WiX/patch_path_env.xml" + ) + + set(CPACK_WIX_TEMPLATE + "@CMake_SOURCE_DIR@/Utilities/Release/WiX/WIX.template.in" + ) + + set(BUILD_QtDialog "@BUILD_QtDialog@") + + if(BUILD_QtDialog) + list(APPEND CPACK_WIX_PATCH_FILE + "@CMake_SOURCE_DIR@/Utilities/Release/WiX/patch_desktop_shortcut.xml" + ) + + set(CPACK_WIX_CANDLE_EXTRA_FLAGS "-dBUILD_QtDialog=1") + endif() endif() diff --git a/Utilities/Release/WiX/WIX.template.in b/Utilities/Release/WiX/WIX.template.in new file mode 100644 index 0000000..094999f --- /dev/null +++ b/Utilities/Release/WiX/WIX.template.in @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + ProductIcon.ico + + + + + + + + + + + + + + + + + + + diff --git a/Utilities/Release/WiX/cmake_extra_dialog.wxs b/Utilities/Release/WiX/cmake_extra_dialog.wxs new file mode 100644 index 0000000..0ee3d99 --- /dev/null +++ b/Utilities/Release/WiX/cmake_extra_dialog.wxs @@ -0,0 +1,36 @@ + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Utilities/Release/WiX/install_dir.wxs b/Utilities/Release/WiX/install_dir.wxs new file mode 100644 index 0000000..883efba --- /dev/null +++ b/Utilities/Release/WiX/install_dir.wxs @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + 1 + "1"]]> + + 1 + + NOT Installed + Installed AND PATCH + + 1 + LicenseAccepted = "1" + + 1 + 1 + NOT WIXUI_DONTVALIDATEPATH + "1"]]> + WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" + 1 + 1 + + 1 + 1 + + NOT Installed + Installed AND NOT PATCH + Installed AND PATCH + + 1 + + 1 + 1 + 1 + + + + + + + diff --git a/Utilities/Release/WiX/patch_desktop_shortcut.xml b/Utilities/Release/WiX/patch_desktop_shortcut.xml new file mode 100644 index 0000000..d30705d --- /dev/null +++ b/Utilities/Release/WiX/patch_desktop_shortcut.xml @@ -0,0 +1,5 @@ + + + DESKTOP_SHORTCUT_REQUESTED = 1 + + diff --git a/Utilities/Release/WiX/patch_path_env.xml b/Utilities/Release/WiX/patch_path_env.xml new file mode 100644 index 0000000..0e335c4 --- /dev/null +++ b/Utilities/Release/WiX/patch_path_env.xml @@ -0,0 +1,26 @@ + + + + + ADD_CMAKE_TO_PATH = "System" + + + + + + + ADD_CMAKE_TO_PATH = "User" + + + + + + + + + + diff --git a/Utilities/Release/WiX/ui_banner.jpg b/Utilities/Release/WiX/ui_banner.jpg new file mode 100644 index 0000000..8d950a6 Binary files /dev/null and b/Utilities/Release/WiX/ui_banner.jpg differ diff --git a/Utilities/Release/WiX/ui_dialog.jpg b/Utilities/Release/WiX/ui_dialog.jpg new file mode 100644 index 0000000..bb6fa5b Binary files /dev/null and b/Utilities/Release/WiX/ui_dialog.jpg differ diff --git a/Utilities/Release/cpack_wix_ui_banner.jpg b/Utilities/Release/cpack_wix_ui_banner.jpg deleted file mode 100644 index 8d950a6..0000000 Binary files a/Utilities/Release/cpack_wix_ui_banner.jpg and /dev/null differ diff --git a/Utilities/Release/cpack_wix_ui_dialog.jpg b/Utilities/Release/cpack_wix_ui_dialog.jpg deleted file mode 100644 index bb6fa5b..0000000 Binary files a/Utilities/Release/cpack_wix_ui_dialog.jpg and /dev/null differ -- cgit v0.12