diff options
-rw-r--r-- | Help/release/dev/rel-win-PATH.rst | 8 | ||||
-rw-r--r-- | Utilities/Release/WiX/WIX.template.in | 1 | ||||
-rw-r--r-- | Utilities/Release/WiX/options.wxs | 22 |
3 files changed, 29 insertions, 2 deletions
diff --git a/Help/release/dev/rel-win-PATH.rst b/Help/release/dev/rel-win-PATH.rst new file mode 100644 index 0000000..f4a7360 --- /dev/null +++ b/Help/release/dev/rel-win-PATH.rst @@ -0,0 +1,8 @@ +rel-win-PATH +------------ + +* The precompiled Windows ``.msi`` installers provided on + `cmake.org <https://cmake.org/download/>`_, when performing a fresh + installation, now modify the system-wide ``PATH`` by default. + When replacing an existing installation, the ``PATH`` modification + preference is preserved by default. diff --git a/Utilities/Release/WiX/WIX.template.in b/Utilities/Release/WiX/WIX.template.in index f48f782..fb8fa59 100644 --- a/Utilities/Release/WiX/WIX.template.in +++ b/Utilities/Release/WiX/WIX.template.in @@ -46,6 +46,7 @@ <FeatureRef Id="ProductFeature"> <ComponentRef Id="CMakeRegistry_InstallDir" /> + <ComponentRef Id="CMakeRegistry_InstallInPATH" /> </FeatureRef> <UIRef Id="$(var.CPACK_WIX_UI_REF)" /> diff --git a/Utilities/Release/WiX/options.wxs b/Utilities/Release/WiX/options.wxs index 2c76bb7..0fd3527 100644 --- a/Utilities/Release/WiX/options.wxs +++ b/Utilities/Release/WiX/options.wxs @@ -4,15 +4,33 @@ <Property Id="CMAKE_IN_PATH" Value="Init" /> <!-- Always initialize the checkbox value so it cannot be directly overridden from the command line. --> - <SetProperty Action="Set_CMAKE_IN_PATH_Init" Id="CMAKE_IN_PATH" After="AppSearch" Sequence="first" Value="{}" /> + <SetProperty Action="Set_CMAKE_IN_PATH_Init" Id="CMAKE_IN_PATH" After="AppSearch" Sequence="first" Value="1" /> + + <!-- Read the "CMAKE_IN_PATH" checkbox value from the registry, if it was stored previously. + Properties using RegistrySearch cannot be private, so use a private-looking public name. --> + <Property Id="_CMAKE_IN_PATH_REG"> + <RegistrySearch Id="CMAKE_IN_PATH_RegistrySearch_HKLM" Root="HKLM" Key="Software\Kitware\CMake" Name="InstallInPATH" Type="raw" /> + </Property> + + <!-- Override the default "CMAKE_IN_PATH" checkbox with a value read from the registry, if any. --> + <SetProperty Action="Set_CMAKE_IN_PATH_REG_0" Id="CMAKE_IN_PATH" After="Set_CMAKE_IN_PATH_Init" Sequence="first" Value="{}"> _CMAKE_IN_PATH_REG = "#0" </SetProperty> + <SetProperty Action="Set_CMAKE_IN_PATH_REG_1" Id="CMAKE_IN_PATH" After="Set_CMAKE_IN_PATH_REG_0" Sequence="first" Value="1"> _CMAKE_IN_PATH_REG = "#1" </SetProperty> <!-- Override the default "CMAKE_IN_PATH" checkbox with a value specified on the command line, if any. --> - <SetProperty Action="Set_CMAKE_IN_PATH_CMD_0" Id="CMAKE_IN_PATH" After="Set_CMAKE_IN_PATH_Init" Sequence="first" Value="{}"> ADD_CMAKE_TO_PATH = "0" </SetProperty> + <SetProperty Action="Set_CMAKE_IN_PATH_CMD_0" Id="CMAKE_IN_PATH" After="Set_CMAKE_IN_PATH_REG_1" Sequence="first" Value="{}"> ADD_CMAKE_TO_PATH = "0" </SetProperty> <SetProperty Action="Set_CMAKE_IN_PATH_CMD_1" Id="CMAKE_IN_PATH" After="Set_CMAKE_IN_PATH_CMD_0" Sequence="first" Value="1"> ADD_CMAKE_TO_PATH = "1" </SetProperty> <!-- Support legacy values too. --> <SetProperty Action="Set_CMAKE_IN_PATH_CMD_None" Id="CMAKE_IN_PATH" After="Set_CMAKE_IN_PATH_CMD_1" Sequence="first" Value="{}"> ADD_CMAKE_TO_PATH = "None" </SetProperty> <SetProperty Action="Set_CMAKE_IN_PATH_CMD_System" Id="CMAKE_IN_PATH" After="Set_CMAKE_IN_PATH_CMD_None" Sequence="first" Value="1"> ADD_CMAKE_TO_PATH = "System" AND ALLUSERS </SetProperty> <!-- Per-user installation is not implemented, but reserve the old value for future use. --> <SetProperty Action="Set_CMAKE_IN_PATH_CMD_User" Id="CMAKE_IN_PATH" After="Set_CMAKE_IN_PATH_CMD_System" Sequence="first" Value="1"> ADD_CMAKE_TO_PATH = "User" AND NOT ALLUSERS </SetProperty> + + <DirectoryRef Id="TARGETDIR"> + <!-- Save the "CMAKE_IN_PATH" checkbox value persistently in the registry. --> + <Component Id="CMakeRegistry_InstallInPATH"> + <!-- Use a leading "0" so the value parses as an integer even when the property is unset. --> + <RegistryValue Root="HKLM" Key="Software\Kitware\CMake" Name="InstallInPATH" Type="integer" Value="0[CMAKE_IN_PATH]" /> + </Component> + </DirectoryRef> </Fragment> </Wix> |