Browse Source

CPack: Add CPACK_NSIS_INSTALL_ROOT variable (#9148)

Control the root directory of the default directory presented to
the end user of an NSIS installer by a CPack variable.

Previously, the value used in the NSIS script was $PROGRAMFILES,
which is equivalent to the "ProgramFiles" environment variable.
That default value is still the same, but now a project may
override the value by setting this new variable.
David Cole 15 years ago
parent
commit
5a9e8e701e
3 changed files with 16 additions and 3 deletions
  1. 10 0
      Modules/CPack.cmake
  2. 3 3
      Modules/NSIS.template.in
  3. 3 0
      Tests/CPackComponents/CMakeLists.txt

+ 10 - 0
Modules/CPack.cmake

@@ -210,6 +210,11 @@
 #   CPACK_PACKAGE_INSTALL_REGISTRY_KEY - Registry key used when
 #   installing this project.
 #
+#   CPACK_NSIS_INSTALL_ROOT - The default installation directory presented
+#   to the end user by the NSIS installer is under this root dir. The full
+#   directory presented to the end user is:
+#   ${CPACK_NSIS_INSTALL_ROOT}/${CPACK_PACKAGE_INSTALL_DIRECTORY}
+#
 #   CPACK_NSIS_MUI_ICON - The icon file (.ico) for the generated
 #   install program.
 #
@@ -777,6 +782,11 @@ IF(${__cpack_system_name} MATCHES Windows)
 ENDIF(${__cpack_system_name} MATCHES Windows)
 cpack_set_if_not_set(CPACK_SYSTEM_NAME "${__cpack_system_name}")
 
+# Root dir: default value should be the string literal "$PROGRAMFILES"
+# for backwards compatibility. Projects may set this value to anything.
+set(__cpack_root_default "$PROGRAMFILES")
+cpack_set_if_not_set(CPACK_NSIS_INSTALL_ROOT "${__cpack_root_default}")
+
 # <project>-<major>.<minor>.<patch>-<release>-<platform>.<pkgtype>
 cpack_set_if_not_set(CPACK_PACKAGE_FILE_NAME
   "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}")

+ 3 - 3
Modules/NSIS.template.in

@@ -25,7 +25,7 @@
   !include "MUI.nsh"
 
   ;Default installation folder
-  InstallDir "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+  InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
 
 ;--------------------------------
 ;General
@@ -906,7 +906,7 @@ Function .onInit
   ; install directory that is expected to be the
   ; default
   StrCpy $IS_DEFAULT_INSTALLDIR 0
-  StrCmp "$INSTDIR" "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2
+  StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2
     StrCpy $IS_DEFAULT_INSTALLDIR 1
   
   StrCpy $SV_ALLUSERS "JustMe"
@@ -939,7 +939,7 @@ Function .onInit
   done:
   StrCmp $SV_ALLUSERS "AllUsers" 0 +3
     StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
-      StrCpy $INSTDIR "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+      StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
 
   StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage
     !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini"

+ 3 - 0
Tests/CPackComponents/CMakeLists.txt

@@ -78,6 +78,9 @@ set(CPACK_NSIS_MENU_LINKS
   "news://newsserver" "Test News Link"
   )
 
+# Suggested default root for end users of the installer:
+set(CPACK_NSIS_INSTALL_ROOT "C:\\Program Files\\CMake Tests Install Root")
+
 # Include CPack to introduce the appropriate targets
 include(CPack)