[Cmake-commits] CMake branch, next, updated. v3.8.0-rc2-371-g50566bc

Kitware Robot kwrobot at kitware.com
Mon Mar 6 14:05:03 EST 2017


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  50566bc5816f03b5d0a29dd3f9d4228b698d9e39 (commit)
       via  09475c298b83cbbaae2ca7ba6f52c0fa74607568 (commit)
      from  1347b2b9dfba766fab43e9f7daf88225862aa14d (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 -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=50566bc5816f03b5d0a29dd3f9d4228b698d9e39
commit 50566bc5816f03b5d0a29dd3f9d4228b698d9e39
Merge: 1347b2b 09475c2
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 6 18:56:25 2017 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Mar 6 13:56:28 2017 -0500

    Stage topic 'cpack_nsis_sign_uninstaller'
    
    Topic-id: 22698
    Topic-url: https://gitlab.kitware.com/cmake/cmake/merge_requests/512


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=09475c298b83cbbaae2ca7ba6f52c0fa74607568
commit 09475c298b83cbbaae2ca7ba6f52c0fa74607568
Author:     Roman Wüger <office at wueger.at>
AuthorDate: Wed Mar 1 20:18:28 2017 +0100
Commit:     Roman Wüger <office at wueger.at>
CommitDate: Wed Mar 1 20:18:28 2017 +0100

    CPack/NSIS: Sign the uninstaller

diff --git a/Help/release/dev/cpack-sign-uninstaller.rst b/Help/release/dev/cpack-sign-uninstaller.rst
new file mode 100644
index 0000000..ff2b402
--- /dev/null
+++ b/Help/release/dev/cpack-sign-uninstaller.rst
@@ -0,0 +1,5 @@
+cpack-sign_uninstaller
+----------------------
+
+* The :module:`CPackNSIS` module learned to sign the uninstaller
+  when using :variable:`CPACK_NSIS_SIGN_UNINSTALLER` variable.
diff --git a/Modules/CPackNSIS.cmake b/Modules/CPackNSIS.cmake
index 18d1871..37fedf3 100644
--- a/Modules/CPackNSIS.cmake
+++ b/Modules/CPackNSIS.cmake
@@ -133,6 +133,10 @@
 #       "doc/cmake- at CMake_VERSION_MAJOR@. at CMake_VERSION_MINOR@/cmake.html"
 #       "CMake Help" "https://cmake.org" "CMake Web Site")
 #
+# .. variable:: CPACK_NSIS_SIGN_UNINSTALLER
+#
+#  Specify a command to use for signing the uninstaller.  The command will
+#  be invoked a path to the uninstaller as its only argument.
 
 #FIXME we should put NSIS specific code here
 #FIXME but I'm not doing it because I'm not able to test it...
diff --git a/Modules/NSIS.template.in b/Modules/NSIS.template.in
index 9001888..ffa6277 100644
--- a/Modules/NSIS.template.in
+++ b/Modules/NSIS.template.in
@@ -29,6 +29,33 @@
 
 ;--------------------------------
 ;General
+!ifdef INNER
+  OutFile "$%TEMP%\tempinstaller.exe"
+  SetCompress off                           ; for speed
+!else
+  ; Call makensis again, defining INNER.  This writes an installer for us which, when
+  ; it is invoked, will just write the uninstaller to some location, and then exit.
+  ; Be sure to substitute the name of this script here.
+
+  !system "$\"${NSISDIR}\makensis$\" /DINNER $\"@CPACK_TEMPORARY_DIRECTORY@/../project.nsi$\"" = 0
+
+  ; So now run that installer we just created as %TEMP%\tempinstaller.exe.  Since it
+  ; calls quit the return value isn't zero.
+
+  !system "$%TEMP%\tempinstaller.exe" = 2
+
+  ; That will have written an uninstaller binary for us.  Now we sign it with your
+  ; favourite code signing tool.
+
+  !tempfile INCEXIST
+  !system 'if exist "@CPACK_NSIS_SIGN_UNINSTALLER@" echo !define HAVE_SIGN_UNINST > "${INCEXIST}"'
+  !include "${INCEXIST}"
+  !delfile "${INCEXIST}"
+  !ifdef HAVE_SIGN_UNINST
+  !system '"@CPACK_NSIS_SIGN_UNINSTALLER@" "$%TEMP%\Uninstall.exe"' = 0
+  !endif
+
+  ; Good.  Now we can carry on writing the real installer.
 
   ;Name and file
   Name "@CPACK_NSIS_PACKAGE_NAME@"
@@ -36,6 +63,7 @@
 
   ;Set compression
   SetCompressor @CPACK_NSIS_COMPRESSOR@
+!endif
 
   ;Require administrator access
   RequestExecutionLevel admin
@@ -559,8 +587,10 @@ FunctionEnd
   !insertmacro MUI_PAGE_INSTFILES
   !insertmacro MUI_PAGE_FINISH
 
+!ifdef INNER
   !insertmacro MUI_UNPAGE_CONFIRM
   !insertmacro MUI_UNPAGE_INSTFILES
+!endif
 
 ;--------------------------------
 ;Languages
@@ -642,7 +672,10 @@ Section "-Core installation"
   WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR
 
   ;Create uninstaller
-  WriteUninstaller "$INSTDIR\Uninstall.exe"
+!ifndef INNER
+  ; this packages the signed uninstaller
+  File "$%TEMP%\Uninstall.exe"
+!endif
   Push "DisplayName"
   Push "@CPACK_NSIS_DISPLAY_NAME@"
   Call ConditionalAddToRegisty
@@ -801,6 +834,7 @@ FunctionEnd
 ;--------------------------------
 ;Uninstaller Section
 
+!ifdef INNER
 Section "Uninstall"
   ReadRegStr $START_MENU SHCTX \
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu"
@@ -886,6 +920,7 @@ Section "Uninstall"
     Call un.RemoveFromPath
   doNotRemoveFromPath:
 SectionEnd
+!endif
 
 ;--------------------------------
 ; determine admin versus local install
@@ -898,6 +933,14 @@ SectionEnd
 ; "Program Files" for AllUsers, "My Documents" for JustMe...
 
 Function .onInit
+!ifdef INNER
+  ; If INNER is defined, then we aren't supposed to do anything except write out
+  ; the installer.  This is better than processing a command line option as it means
+  ; this entire code path is not present in the final (real) installer.
+
+  WriteUninstaller "$%TEMP%\Uninstall.exe"
+  Quit  ; just bail out quickly when running the "inner" installer
+!endif
   StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst
 
   ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString"

-----------------------------------------------------------------------

Summary of changes:
 Help/release/dev/cpack-sign-uninstaller.rst |    5 +++
 Modules/CPackNSIS.cmake                     |    4 +++
 Modules/NSIS.template.in                    |   45 ++++++++++++++++++++++++++-
 3 files changed, 53 insertions(+), 1 deletion(-)
 create mode 100644 Help/release/dev/cpack-sign-uninstaller.rst


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list