aboutsummaryrefslogtreecommitdiffstats
path: root/build/nsis.geth.nsi
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-11-09 05:55:39 +0800
committerFelix Lange <fjl@twurst.com>2016-11-09 05:55:39 +0800
commit9bc97a5785d3d350a084b46fc77a8439b8dc533b (patch)
tree1802db150e1fed6272e08dd17b85a8a188ee55c8 /build/nsis.geth.nsi
parent6707f70b4a947a06fdcf564619e6c8220a6654ad (diff)
downloaddexon-9bc97a5785d3d350a084b46fc77a8439b8dc533b.tar.gz
dexon-9bc97a5785d3d350a084b46fc77a8439b8dc533b.tar.zst
dexon-9bc97a5785d3d350a084b46fc77a8439b8dc533b.zip
build: NSIS based Windows installer (#3240)
This commit adds support for creating Windows installers to ci.go
Diffstat (limited to 'build/nsis.geth.nsi')
-rw-r--r--build/nsis.geth.nsi65
1 files changed, 65 insertions, 0 deletions
diff --git a/build/nsis.geth.nsi b/build/nsis.geth.nsi
new file mode 100644
index 000000000..dbeb9319c
--- /dev/null
+++ b/build/nsis.geth.nsi
@@ -0,0 +1,65 @@
+# Builds a Windows installer with NSIS.
+# It expects the following command line arguments:
+# - OUTPUTFILE, filename of the installer (without extension)
+# - MAJORVERSION, major build version
+# - MINORVERSION, minor build version
+# - BUILDVERSION, build id version
+#
+# The created installer executes the following steps:
+# 1. install geth for all users
+# 2. install optional development tools such as abigen
+# 3. create an uninstaller
+# 4. configures the Windows firewall for geth
+# 5. create geth, attach and uninstall start menu entries
+# 6. configures the registry that allows Windows to manage the package through its platform tools
+# 7. adds the environment system wide variable ETHEREUM_SOCKET
+# 8. adds the install directory to %PATH%
+#
+# Requirements:
+# - NSIS, http://nsis.sourceforge.net/Main_Page
+# - SFP, http://nsis.sourceforge.net/NSIS_Simple_Firewall_Plugin (put dll in NSIS\Plugins\x86-ansi)
+#
+# based on: http://nsis.sourceforge.net/A_simple_installer_with_start_menu_shortcut_and_uninstaller
+#
+# TODO:
+# - sign installer
+CRCCheck on
+
+!define GROUPNAME "Ethereum"
+!define APPNAME "Geth"
+!define DESCRIPTION "Official Go implementation of the Ethereum protocol"
+!addplugindir .\
+
+# Require admin rights on NT6+ (When UAC is turned on)
+RequestExecutionLevel admin
+
+# Use LZMA compression
+SetCompressor /SOLID lzma
+
+!include LogicLib.nsh
+!include EnvVarUpdate.nsh
+
+!macro VerifyUserIsAdmin
+UserInfo::GetAccountType
+pop $0
+${If} $0 != "admin" # Require admin rights on NT4+
+ messageBox mb_iconstop "Administrator rights required!"
+ setErrorLevel 740 # ERROR_ELEVATION_REQUIRED
+ quit
+${EndIf}
+!macroend
+
+function .onInit
+ # make vars are global for all users since geth is installed global
+ setShellVarContext all
+ !insertmacro VerifyUserIsAdmin
+
+ ${If} ${ARCH} == "amd64"
+ StrCpy $InstDir "$PROGRAMFILES64\${APPNAME}"
+ ${Else}
+ StrCpy $InstDir "$PROGRAMFILES32\${APPNAME}"
+ ${Endif}
+functionEnd
+
+!include install.nsh
+!include uninstall.nsh