This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, next has been updated via 55de65e7179782b252ea803b3087d6df59da9d28 (commit) via 9f5108f1983306b0abf4c91b36fdb8199bc9f6ef (commit) via bb68011cbabc40fedf3c7c9cbfe05f85473b26cf (commit) via 9d11f6d9df187945025d062b103cfdc38d94b105 (commit) via 5911453fd21455cf56f339604c83fb49fb4bf6c2 (commit) via 6d77e1ab3f6cfe5e2019a418da7c18cc3515ab54 (commit) via 8c0e32550cf8afbb8419dff3698915b550e9c86d (commit) from ee4b951bd45a68c5f81715d33b4139bde4932fe8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=55de65e7179782b252ea803b3087d6df59da9d28 commit 55de65e7179782b252ea803b3087d6df59da9d28 Merge: ee4b951 9f5108f Author: Brad King <brad.k...@kitware.com> AuthorDate: Fri Jul 19 13:50:15 2013 -0400 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Fri Jul 19 13:50:15 2013 -0400 Merge topic 'cpack-wix' into next 9f5108f CPackWIX: Add support for custom WiX templates bb68011 CMakeCPack: Provide an upgrade guid for WiX 9d11f6d CPackWIX: Add option to specify the language(s) of the installer 5911453 CPackWIX: Handle multiple shortcuts in the start menu 6d77e1a CPackWIX: Fix MSI package layout regression from parent 8c0e325 CPackWIX: Handle CPACK_PACKAGE_EXECUTABLES (#13967) http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9f5108f1983306b0abf4c91b36fdb8199bc9f6ef commit 9f5108f1983306b0abf4c91b36fdb8199bc9f6ef Author: Adam J. Weigold <a...@adamweigold.com> AuthorDate: Tue Jul 2 17:19:31 2013 -0500 Commit: Brad King <brad.k...@kitware.com> CommitDate: Fri Jul 19 11:42:16 2013 -0400 CPackWIX: Add support for custom WiX templates WiX provides a lot of functionality for installers that cannot be supported (easily) in the default WIX.template.in file. For most users, the default template should be fine. However if users want to produce merge modules, include custom actions, etc, this new option allows for a hook into how the wxs is produced. diff --git a/Modules/CPackWIX.cmake b/Modules/CPackWIX.cmake index 4f57efa..fce25f0 100644 --- a/Modules/CPackWIX.cmake +++ b/Modules/CPackWIX.cmake @@ -93,6 +93,15 @@ # http://wix.sourceforge.net/manual-wix3/WixUI_localization.htm # ##end +##variable +# CPACK_WIX_TEMPLATE - Template file for WiX generation +# +# If this variable is set, the specified template will be used to generate the WiX wxs file. +# This should be used if further customization of the output is required. +# +# If this variable is not set, the default MSI template included with CMake will be used. +# +##end #============================================================================= # Copyright 2012 Kitware, Inc. diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index 9ea4b7a..e921819 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -451,6 +451,10 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles() directoryDefinitions.EndElement(); std::string wixTemplate = FindTemplate("WIX.template.in"); + if(GetOption("CPACK_WIX_TEMPLATE") != 0) + { + wixTemplate = GetOption("CPACK_WIX_TEMPLATE"); + } if(wixTemplate.empty()) { cmCPackLogger(cmCPackLog::LOG_ERROR, http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=bb68011cbabc40fedf3c7c9cbfe05f85473b26cf commit bb68011cbabc40fedf3c7c9cbfe05f85473b26cf Author: Richard Ulrich <ri...@paraeasy.ch> AuthorDate: Wed May 8 17:13:31 2013 +0200 Commit: Brad King <brad.k...@kitware.com> CommitDate: Fri Jul 19 11:41:16 2013 -0400 CMakeCPack: Provide an upgrade guid for WiX Set CPACK_WIX_UPGRADE_GUID. Without this upgrade GUID, you end up with multiple instances of the same installation when installing cmake from a WIX generated installer. diff --git a/CMakeCPack.cmake b/CMakeCPack.cmake index a27d000..2495c44 100644 --- a/CMakeCPack.cmake +++ b/CMakeCPack.cmake @@ -113,6 +113,8 @@ if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") include(Utilities/Release/Cygwin/CMakeLists.txt) endif() + set(CPACK_WIX_UPGRADE_GUID "8ffd1d72-b7f1-11e2-8ee5-00238bca4991") + # Set the options file that needs to be included inside CMakeCPackOptions.cmake set(QT_DIALOG_CPACK_OPTIONS_FILE ${CMake_BINARY_DIR}/Source/QtDialog/QtDialogCPack.cmake) configure_file("${CMake_SOURCE_DIR}/CMakeCPackOptions.cmake.in" http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9d11f6d9df187945025d062b103cfdc38d94b105 commit 9d11f6d9df187945025d062b103cfdc38d94b105 Author: Richard Ulrich <ri...@paraeasy.ch> AuthorDate: Mon May 6 17:21:42 2013 +0200 Commit: Brad King <brad.k...@kitware.com> CommitDate: Fri Jul 19 10:52:28 2013 -0400 CPackWIX: Add option to specify the language(s) of the installer Add option "CPACK_WIX_CULTURES". diff --git a/Modules/CPackWIX.cmake b/Modules/CPackWIX.cmake index 69a181e..4f57efa 100644 --- a/Modules/CPackWIX.cmake +++ b/Modules/CPackWIX.cmake @@ -81,6 +81,17 @@ # CPACK_WIX_PROGRAM_MENU_FOLDER - Start menu folder name for launcher. # # If this variable is not set, it will be initialized with CPACK_PACKAGE_NAME +# +##end +##variable +# CPACK_WIX_CULTURES - Language(s) of the installer +# +# Languages are compiled into the WixUI extension library. To use them, +# simply provide the name of the culture. If you specify more than one +# culture identifier in a comma or semicolon delimited list, the first one +# that is found will be used. You can find a list of supported languages at: +# http://wix.sourceforge.net/manual-wix3/WixUI_localization.htm +# ##end #============================================================================= diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index 8d50a60..9ea4b7a 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -100,6 +100,11 @@ bool cmCPackWIXGenerator::RunLightCommand(const std::string& objectFiles) command << " -nologo"; command << " -out " << QuotePath(packageFileNames.at(0)); command << " -ext WixUIExtension"; + const char* const cultures = GetOption("CPACK_WIX_CULTURES"); + if(cultures) + { + command << " -cultures:" << cultures; + } command << " " << objectFiles; return RunWiXCommand(command.str()); http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5911453fd21455cf56f339604c83fb49fb4bf6c2 commit 5911453fd21455cf56f339604c83fb49fb4bf6c2 Author: Richard Ulrich <ri...@paraeasy.ch> AuthorDate: Wed May 8 16:39:32 2013 +0200 Commit: Brad King <brad.k...@kitware.com> CommitDate: Fri Jul 19 10:52:25 2013 -0400 CPackWIX: Handle multiple shortcuts in the start menu diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index f443905..8d50a60 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -380,7 +380,14 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles() directoryDefinitions.EndElement(); directoryDefinitions.EndElement(); - if (dirIdExecutables.size() > 0 && dirIdExecutables.size() % 3 == 0) { + if (dirIdExecutables.size() > 0 && dirIdExecutables.size() % 3 == 0) + { + fileDefinitions.BeginElement("DirectoryRef"); + fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER"); + fileDefinitions.BeginElement("Component"); + fileDefinitions.AddAttribute("Id", "SHORTCUT"); + fileDefinitions.AddAttribute("Guid", "*"); + std::vector<std::string>::iterator it; for ( it = dirIdExecutables.begin() ; it != dirIdExecutables.end(); @@ -390,13 +397,12 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles() std::string iconName = *it++; std::string directoryId = *it; - fileDefinitions.BeginElement("DirectoryRef"); - fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER"); - fileDefinitions.BeginElement("Component"); - fileDefinitions.AddAttribute("Id", "SHORTCUT"); - fileDefinitions.AddAttribute("Guid", "*"); fileDefinitions.BeginElement("Shortcut"); - fileDefinitions.AddAttribute("Id", "SHORTCUT_"); + std::string shortcutName = fileName; // the iconName is mor likely to contain blanks early on + const std::string::difference_type dotPos = shortcutName.find('.'); + if(std::string::npos == dotPos) + shortcutName = shortcutName.substr(0, dotPos); + fileDefinitions.AddAttribute("Id", "SHORTCUT_" + shortcutName); fileDefinitions.AddAttribute("Name", iconName); std::string target = "[" + directoryId + "]" + fileName; fileDefinitions.AddAttribute("Target", target); http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6d77e1ab3f6cfe5e2019a418da7c18cc3515ab54 commit 6d77e1ab3f6cfe5e2019a418da7c18cc3515ab54 Author: Ian Monroe <imon...@kde.org> AuthorDate: Thu Apr 18 10:19:13 2013 -0700 Commit: Brad King <brad.k...@kitware.com> CommitDate: Fri Jul 19 10:49:20 2013 -0400 CPackWIX: Fix MSI package layout regression from parent The parent commit added a regression where if the install directory had: parent child A child B the produced MSI would install: parent child A child B diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index fc51b77..f443905 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -377,10 +377,6 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles() directoryDefinitions, fileDefinitions, featureDefinitions, directoryCounter, fileCounter, cpackPkgExecutables, dirIdExecutables); - for(size_t i = 1; i < install_root.size(); ++i) - { - directoryDefinitions.EndElement(); - } directoryDefinitions.EndElement(); directoryDefinitions.EndElement(); @@ -558,7 +554,7 @@ void cmCPackWIXGenerator::AddDirectoryAndFileDefinitons( fileCounter, pkgExecutables, dirIdExecutables); - + directoryDefinitions.EndElement(); } else { http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8c0e32550cf8afbb8419dff3698915b550e9c86d commit 8c0e32550cf8afbb8419dff3698915b550e9c86d Author: Fredrik Axelsson <fra...@gmail.com> AuthorDate: Fri Mar 1 11:09:58 2013 +0900 Commit: Brad King <brad.k...@kitware.com> CommitDate: Fri Jul 19 10:49:00 2013 -0400 CPackWIX: Handle CPACK_PACKAGE_EXECUTABLES (#13967) Add start menu items including an uninstall shortcut. Add variable CPACK_WIX_PROGRAM_MENU_FOLDER to configure folder name. diff --git a/Modules/CPackWIX.cmake b/Modules/CPackWIX.cmake index 0c0a8f1..69a181e 100644 --- a/Modules/CPackWIX.cmake +++ b/Modules/CPackWIX.cmake @@ -76,6 +76,12 @@ # This image must be 493 by 312 pixels. # ##end +# +##variable +# CPACK_WIX_PROGRAM_MENU_FOLDER - Start menu folder name for launcher. +# +# If this variable is not set, it will be initialized with CPACK_PACKAGE_NAME +##end #============================================================================= # Copyright 2012 Kitware, Inc. diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index e8b0ea9..fc51b77 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -224,6 +224,9 @@ bool cmCPackWIXGenerator::CreateWiXVariablesIncludeFile() CopyDefinition(includeFile, "CPACK_WIX_PRODUCT_ICON"); CopyDefinition(includeFile, "CPACK_WIX_UI_BANNER"); CopyDefinition(includeFile, "CPACK_WIX_UI_DIALOG"); + SetOptionIfNotSet("CPACK_WIX_PROGRAM_MENU_FOLDER", + GetOption("CPACK_PACKAGE_NAME")); + CopyDefinition(includeFile, "CPACK_WIX_PROGRAM_MENU_FOLDER"); return true; } @@ -339,22 +342,105 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles() featureDefinitions.BeginElement("FeatureRef"); featureDefinitions.AddAttribute("Id", "ProductFeature"); + const char *cpackPackageExecutables = GetOption("CPACK_PACKAGE_EXECUTABLES"); + std::vector<std::string> cpackPkgExecutables; + std::string regKey; + if ( cpackPackageExecutables ) + { + cmSystemTools::ExpandListArgument(cpackPackageExecutables, + cpackPkgExecutables); + if ( cpackPkgExecutables.size() % 2 != 0 ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_PACKAGE_EXECUTABLES should contain pairs of <executable> and " + "<icon name>." << std::endl); + cpackPkgExecutables.clear(); + } + + const char *cpackVendor = GetOption("CPACK_PACKAGE_VENDOR"); + const char *cpackPkgName = GetOption("CPACK_PACKAGE_NAME"); + if (!cpackVendor || !cpackPkgName) + { + cmCPackLogger(cmCPackLog::LOG_WARNING, "CPACK_PACKAGE_VENDOR and " + "CPACK_PACKAGE_NAME must be defined for shortcut creation" << std::endl); + cpackPkgExecutables.clear(); + } + else + { + regKey = std::string("Software/") + cpackVendor + "/" + cpackPkgName; + } + } + + std::vector<std::string> dirIdExecutables; AddDirectoryAndFileDefinitons( toplevel, "INSTALL_ROOT", directoryDefinitions, fileDefinitions, featureDefinitions, - directoryCounter, fileCounter); - - featureDefinitions.EndElement(); - featureDefinitions.EndElement(); - fileDefinitions.EndElement(); + directoryCounter, fileCounter, cpackPkgExecutables, dirIdExecutables); for(size_t i = 1; i < install_root.size(); ++i) { directoryDefinitions.EndElement(); } - directoryDefinitions.EndElement(); directoryDefinitions.EndElement(); + + if (dirIdExecutables.size() > 0 && dirIdExecutables.size() % 3 == 0) { + std::vector<std::string>::iterator it; + for ( it = dirIdExecutables.begin() ; + it != dirIdExecutables.end(); + ++it) + { + std::string fileName = *it++; + std::string iconName = *it++; + std::string directoryId = *it; + + fileDefinitions.BeginElement("DirectoryRef"); + fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER"); + fileDefinitions.BeginElement("Component"); + fileDefinitions.AddAttribute("Id", "SHORTCUT"); + fileDefinitions.AddAttribute("Guid", "*"); + fileDefinitions.BeginElement("Shortcut"); + fileDefinitions.AddAttribute("Id", "SHORTCUT_"); + fileDefinitions.AddAttribute("Name", iconName); + std::string target = "[" + directoryId + "]" + fileName; + fileDefinitions.AddAttribute("Target", target); + fileDefinitions.AddAttribute("WorkingDirectory", directoryId); + fileDefinitions.EndElement(); + } + fileDefinitions.BeginElement("Shortcut"); + fileDefinitions.AddAttribute("Id", "UNINSTALL"); + std::string pkgName = GetOption("CPACK_PACKAGE_NAME"); + fileDefinitions.AddAttribute("Name", "Uninstall " + pkgName); + fileDefinitions.AddAttribute("Description", "Uninstalls " + pkgName); + fileDefinitions.AddAttribute("Target", "[SystemFolder]msiexec.exe"); + fileDefinitions.AddAttribute("Arguments", "/x [ProductCode]"); + fileDefinitions.EndElement(); + fileDefinitions.BeginElement("RemoveFolder"); + fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER"); + fileDefinitions.AddAttribute("On", "uninstall"); + fileDefinitions.EndElement(); + fileDefinitions.BeginElement("RegistryValue"); + fileDefinitions.AddAttribute("Root", "HKCU"); + fileDefinitions.AddAttribute("Key", regKey); + fileDefinitions.AddAttribute("Name", "installed"); + fileDefinitions.AddAttribute("Type", "integer"); + fileDefinitions.AddAttribute("Value", "1"); + fileDefinitions.AddAttribute("KeyPath", "yes"); + + featureDefinitions.BeginElement("ComponentRef"); + featureDefinitions.AddAttribute("Id", "SHORTCUT"); + featureDefinitions.EndElement(); + directoryDefinitions.BeginElement("Directory"); + directoryDefinitions.AddAttribute("Id", "ProgramMenuFolder"); + directoryDefinitions.BeginElement("Directory"); + directoryDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER"); + const char *startMenuFolder = GetOption("CPACK_WIX_PROGRAM_MENU_FOLDER"); + directoryDefinitions.AddAttribute("Name", startMenuFolder); + } + + featureDefinitions.EndElement(); + featureDefinitions.EndElement(); + fileDefinitions.EndElement(); directoryDefinitions.EndElement(); std::string wixTemplate = FindTemplate("WIX.template.in"); @@ -435,7 +521,9 @@ void cmCPackWIXGenerator::AddDirectoryAndFileDefinitons( cmWIXSourceWriter& fileDefinitions, cmWIXSourceWriter& featureDefinitions, size_t& directoryCounter, - size_t& fileCounter) + size_t& fileCounter, + const std::vector<std::string>& pkgExecutables, + std::vector<std::string>& dirIdExecutables) { cmsys::Directory dir; dir.Load(topdir.c_str()); @@ -467,9 +555,10 @@ void cmCPackWIXGenerator::AddDirectoryAndFileDefinitons( fileDefinitions, featureDefinitions, directoryCounter, - fileCounter); + fileCounter, + pkgExecutables, + dirIdExecutables); - directoryDefinitions.EndElement(); } else { @@ -499,6 +588,23 @@ void cmCPackWIXGenerator::AddDirectoryAndFileDefinitons( featureDefinitions.BeginElement("ComponentRef"); featureDefinitions.AddAttribute("Id", componentId); featureDefinitions.EndElement(); + + std::vector<std::string>::const_iterator it; + for (it = pkgExecutables.begin() ; + it != pkgExecutables.end() ; + ++it) + { + std::string execName = *it++; + std::string iconName = *it; + + if (cmSystemTools::LowerCase(fileName) == + cmSystemTools::LowerCase(execName) + ".exe") + { + dirIdExecutables.push_back(fileName); + dirIdExecutables.push_back(iconName); + dirIdExecutables.push_back(directoryId); + } + } } } } diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.h b/Source/CPack/WiX/cmCPackWIXGenerator.h index 0e95d70..aaccf9d 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.h +++ b/Source/CPack/WiX/cmCPackWIXGenerator.h @@ -83,7 +83,11 @@ private: cmWIXSourceWriter& fileDefinitions, cmWIXSourceWriter& featureDefinitions, size_t& directoryCounter, - size_t& fileCounter); + size_t& fileCounter, + const std::vector<std::string>& pkgExecutables, + std::vector<std::string>& dirIdExecutables + ); + bool RequireOption(const std::string& name, std::string& value) const; diff --git a/Tests/CPackWiXGenerator/CMakeLists.txt b/Tests/CPackWiXGenerator/CMakeLists.txt index ce02f11..475e60d 100644 --- a/Tests/CPackWiXGenerator/CMakeLists.txt +++ b/Tests/CPackWiXGenerator/CMakeLists.txt @@ -35,6 +35,8 @@ set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example") set(CPACK_WIX_UPGRADE_GUID "BF20CE5E-7F7C-401D-8F7C-AB45E8D170E6") +set(CPACK_WIX_UNINSTALL "1") +set(CPACK_PACKAGE_EXECUTABLES "mylibapp; CPack Wix Test") include(CPack) ----------------------------------------------------------------------- Summary of changes: CMakeCPack.cmake | 2 + Modules/CPackWIX.cmake | 26 ++++++ Source/CPack/WiX/cmCPackWIXGenerator.cxx | 141 +++++++++++++++++++++++++++--- Source/CPack/WiX/cmCPackWIXGenerator.h | 6 +- Tests/CPackWiXGenerator/CMakeLists.txt | 2 + 5 files changed, 164 insertions(+), 13 deletions(-) hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-commits