[Cmake-commits] CMake branch, next, updated. v3.8.0-rc1-604-gda58882
Brad King
brad.king at kitware.com
Mon Feb 27 13:12:52 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 da588825475697068e2f3babc092c2cc4f09a31b (commit)
via 10b2e0e479b1015c905aef19439c10d7546a0232 (commit)
from a04f037c1c2286856e26f7190fdf7a816ac37cc6 (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=da588825475697068e2f3babc092c2cc4f09a31b
commit da588825475697068e2f3babc092c2cc4f09a31b
Merge: a04f037 10b2e0e
Author: Brad King <brad.king at kitware.com>
AuthorDate: Mon Feb 27 13:12:51 2017 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Feb 27 13:12:51 2017 -0500
Merge topic 'cpack_nsis_sign_uninstaller' into next
10b2e0e4 CPack/NSIS: Sign the uninstaller
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=10b2e0e479b1015c905aef19439c10d7546a0232
commit 10b2e0e479b1015c905aef19439c10d7546a0232
Author: Roman Wüger <roman.wueger at gmx.at>
AuthorDate: Mon Feb 27 06:47:44 2017 +0100
Commit: Roman Wüger <roman.wueger at gmx.at>
CommitDate: Mon Feb 27 06:47:44 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..a8903f6 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