From c2f30ef6746508c4deb4ca19240441274f31ef44 Mon Sep 17 00:00:00 2001 From: Aaron Prindle Date: Wed, 7 Sep 2016 16:44:01 -0700 Subject: [PATCH] Added windows installer files with stubbed license and makefile target. --- Makefile | 22 +- installers/windows/EnvVarUpdate.nsh | 327 ++++++++++++++++++++++++++++ installers/windows/logo.bmp | Bin 0 -> 84086 bytes installers/windows/logo.ico | Bin 0 -> 265118 bytes installers/windows/minikube.nsi | 182 ++++++++++++++++ 5 files changed, 529 insertions(+), 2 deletions(-) create mode 100644 installers/windows/EnvVarUpdate.nsh create mode 100644 installers/windows/logo.bmp create mode 100644 installers/windows/logo.ico create mode 100644 installers/windows/minikube.nsi diff --git a/Makefile b/Makefile index ac0e6dcbf2..dd32ae71f1 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,12 @@ # limitations under the License. # Bump these on release -VERSION ?= v0.10.0 -DEB_VERSION ?= 0.10-0 +VERSION_MAJOR ?= 0 +VERSION_MINOR ?= 10 +VERSION_BUILD ?= 0 +VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) +DEB_VERSION ?= $(VERSION_MAJOR).$(VERSION_MINOR)-$(VERSION_BUILD) +INSTALL_SIZE ?= $(shell du out/minikube-windows-amd64.exe | cut -f1) GOOS ?= $(shell go env GOOS) GOARCH ?= $(shell go env GOARCH) @@ -123,3 +127,17 @@ out/minikube_$(DEB_VERSION).deb: out/minikube-linux-amd64 cp out/minikube-linux-amd64 out/minikube_$(DEB_VERSION)/usr/bin dpkg-deb --build out/minikube_$(DEB_VERSION) rm -rf out/minikube_$(DEB_VERSION) + +out/minikube-installer.exe: out/minikube-windows-amd64.exe + rm -rf out/windows_tmp + cp -r installers/windows/ out/windows_tmp + cp -r LICENSE out/windows_tmp/LICENSE + awk 'sub("$$", "\r")' out/windows_tmp/LICENSE > out/windows_tmp/LICENSE.txt + sed -E -i 's/--VERSION_MAJOR--/'$(VERSION_MAJOR)'/g' out/windows_tmp/minikube.nsi + sed -E -i 's/--VERSION_MINOR--/'$(VERSION_MINOR)'/g' out/windows_tmp/minikube.nsi + sed -E -i 's/--VERSION_BUILD--/'$(VERSION_BUILD)'/g' out/windows_tmp/minikube.nsi + sed -E -i 's/--INSTALL_SIZE--/'$(INSTALL_SIZE)'/g' out/windows_tmp/minikube.nsi + cp out/minikube-windows-amd64.exe out/windows_tmp/minikube.exe + makensis out/windows_tmp/minikube.nsi + mv out/windows_tmp/minikube-installer.exe out/minikube-installer.exe + rm -rf out/windows_tmp diff --git a/installers/windows/EnvVarUpdate.nsh b/installers/windows/EnvVarUpdate.nsh new file mode 100644 index 0000000000..39682000c3 --- /dev/null +++ b/installers/windows/EnvVarUpdate.nsh @@ -0,0 +1,327 @@ +/** + * EnvVarUpdate.nsh + * : Environmental Variables: append, prepend, and remove entries + * + * WARNING: If you use StrFunc.nsh header then include it before this file + * with all required definitions. This is to avoid conflicts + * + * Usage: + * ${EnvVarUpdate} "ResultVar" "EnvVarName" "Action" "RegLoc" "PathString" + * + * Credits: + * Version 1.0 + * * Cal Turney (turnec2) + * * Amir Szekely (KiCHiK) and e-circ for developing the forerunners of this + * function: AddToPath, un.RemoveFromPath, AddToEnvVar, un.RemoveFromEnvVar, + * WriteEnvStr, and un.DeleteEnvStr + * * Diego Pedroso (deguix) for StrTok + * * Kevin English (kenglish_hi) for StrContains + * * Hendri Adriaens (Smile2Me), Diego Pedroso (deguix), and Dan Fuhry + * (dandaman32) for StrReplace + * + * Version 1.1 (compatibility with StrFunc.nsh) + * * techtonik + * + * http://nsis.sourceforge.net/Environmental_Variables:_append%2C_prepend%2C_and_remove_entries + * + */ + + +!ifndef ENVVARUPDATE_FUNCTION +!define ENVVARUPDATE_FUNCTION +!verbose push +!verbose 3 +!include "LogicLib.nsh" +!include "WinMessages.NSH" +!include "StrFunc.nsh" + +; ---- Fix for conflict if StrFunc.nsh is already includes in main file ----------------------- +!macro _IncludeStrFunction StrFuncName + !ifndef ${StrFuncName}_INCLUDED + ${${StrFuncName}} + !endif + !ifndef Un${StrFuncName}_INCLUDED + ${Un${StrFuncName}} + !endif + !define un.${StrFuncName} "${Un${StrFuncName}}" +!macroend + +!insertmacro _IncludeStrFunction StrTok +!insertmacro _IncludeStrFunction StrStr +!insertmacro _IncludeStrFunction StrRep + +; ---------------------------------- Macro Definitions ---------------------------------------- +!macro _EnvVarUpdateConstructor ResultVar EnvVarName Action Regloc PathString + Push "${EnvVarName}" + Push "${Action}" + Push "${RegLoc}" + Push "${PathString}" + Call EnvVarUpdate + Pop "${ResultVar}" +!macroend +!define EnvVarUpdate '!insertmacro "_EnvVarUpdateConstructor"' + +!macro _unEnvVarUpdateConstructor ResultVar EnvVarName Action Regloc PathString + Push "${EnvVarName}" + Push "${Action}" + Push "${RegLoc}" + Push "${PathString}" + Call un.EnvVarUpdate + Pop "${ResultVar}" +!macroend +!define un.EnvVarUpdate '!insertmacro "_unEnvVarUpdateConstructor"' +; ---------------------------------- Macro Definitions end------------------------------------- + +;----------------------------------- EnvVarUpdate start---------------------------------------- +!define hklm_all_users 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' +!define hkcu_current_user 'HKCU "Environment"' + +!macro EnvVarUpdate UN + +Function ${UN}EnvVarUpdate + + Push $0 + Exch 4 + Exch $1 + Exch 3 + Exch $2 + Exch 2 + Exch $3 + Exch + Exch $4 + Push $5 + Push $6 + Push $7 + Push $8 + Push $9 + Push $R0 + + /* After this point: + ------------------------- + $0 = ResultVar (returned) + $1 = EnvVarName (input) + $2 = Action (input) + $3 = RegLoc (input) + $4 = PathString (input) + $5 = Orig EnvVar (read from registry) + $6 = Len of $0 (temp) + $7 = tempstr1 (temp) + $8 = Entry counter (temp) + $9 = tempstr2 (temp) + $R0 = tempChar (temp) */ + + ; Step 1: Read contents of EnvVarName from RegLoc + ; + ; Check for empty EnvVarName + ${If} $1 == "" + SetErrors + DetailPrint "ERROR: EnvVarName is blank" + Goto EnvVarUpdate_Restore_Vars + ${EndIf} + + ; Check for valid Action + ${If} $2 != "A" + ${AndIf} $2 != "P" + ${AndIf} $2 != "R" + SetErrors + DetailPrint "ERROR: Invalid Action - must be A, P, or R" + Goto EnvVarUpdate_Restore_Vars + ${EndIf} + + ${If} $3 == HKLM + ReadRegStr $5 ${hklm_all_users} $1 ; Get EnvVarName from all users into $5 + ${ElseIf} $3 == HKCU + ReadRegStr $5 ${hkcu_current_user} $1 ; Read EnvVarName from current user into $5 + ${Else} + SetErrors + DetailPrint 'ERROR: Action is [$3] but must be "HKLM" or HKCU"' + Goto EnvVarUpdate_Restore_Vars + ${EndIf} + + ; Check for empty PathString + ${If} $4 == "" + SetErrors + DetailPrint "ERROR: PathString is blank" + Goto EnvVarUpdate_Restore_Vars + ${EndIf} + + ; Make sure we've got some work to do + ${If} $5 == "" + ${AndIf} $2 == "R" + SetErrors + DetailPrint "$1 is empty - Nothing to remove" + Goto EnvVarUpdate_Restore_Vars + ${EndIf} + + ; Step 2: Scrub EnvVar + ; + StrCpy $0 $5 ; Copy the contents to $0 + ; Remove spaces around semicolons (NOTE: spaces before the 1st entry or + ; after the last one are not removed here but instead in Step 3) + ${If} $0 != "" ; If EnvVar is not empty ... + ${Do} + ${${UN}StrStr} $7 $0 " ;" + ${If} $7 == "" + ${ExitDo} + ${EndIf} + ${${UN}StrRep} $0 $0 " ;" ";" ; Remove ';' + ${Loop} + ${Do} + ${${UN}StrStr} $7 $0 "; " + ${If} $7 == "" + ${ExitDo} + ${EndIf} + ${${UN}StrRep} $0 $0 "; " ";" ; Remove ';' + ${Loop} + ${Do} + ${${UN}StrStr} $7 $0 ";;" + ${If} $7 == "" + ${ExitDo} + ${EndIf} + ${${UN}StrRep} $0 $0 ";;" ";" + ${Loop} + + ; Remove a leading or trailing semicolon from EnvVar + StrCpy $7 $0 1 0 + ${If} $7 == ";" + StrCpy $0 $0 "" 1 ; Change ';' to '' + ${EndIf} + StrLen $6 $0 + IntOp $6 $6 - 1 + StrCpy $7 $0 1 $6 + ${If} $7 == ";" + StrCpy $0 $0 $6 ; Change ';' to '' + ${EndIf} + ; DetailPrint "Scrubbed $1: [$0]" ; Uncomment to debug + ${EndIf} + + /* Step 3. Remove all instances of the target path/string (even if "A" or "P") + $6 = bool flag (1 = found and removed PathString) + $7 = a string (e.g. path) delimited by semicolon(s) + $8 = entry counter starting at 0 + $9 = copy of $0 + $R0 = tempChar */ + + ${If} $5 != "" ; If EnvVar is not empty ... + StrCpy $9 $0 + StrCpy $0 "" + StrCpy $8 0 + StrCpy $6 0 + + ${Do} + ${${UN}StrTok} $7 $9 ";" $8 "0" ; $7 = next entry, $8 = entry counter + + ${If} $7 == "" ; If we've run out of entries, + ${ExitDo} ; were done + ${EndIf} ; + + ; Remove leading and trailing spaces from this entry (critical step for Action=Remove) + ${Do} + StrCpy $R0 $7 1 + ${If} $R0 != " " + ${ExitDo} + ${EndIf} + StrCpy $7 $7 "" 1 ; Remove leading space + ${Loop} + ${Do} + StrCpy $R0 $7 1 -1 + ${If} $R0 != " " + ${ExitDo} + ${EndIf} + StrCpy $7 $7 -1 ; Remove trailing space + ${Loop} + ${If} $7 == $4 ; If string matches, remove it by not appending it + StrCpy $6 1 ; Set 'found' flag + ${ElseIf} $7 != $4 ; If string does NOT match + ${AndIf} $0 == "" ; and the 1st string being added to $0, + StrCpy $0 $7 ; copy it to $0 without a prepended semicolon + ${ElseIf} $7 != $4 ; If string does NOT match + ${AndIf} $0 != "" ; and this is NOT the 1st string to be added to $0, + StrCpy $0 $0;$7 ; append path to $0 with a prepended semicolon + ${EndIf} ; + + IntOp $8 $8 + 1 ; Bump counter + ${Loop} ; Check for duplicates until we run out of paths + ${EndIf} + + ; Step 4: Perform the requested Action + ; + ${If} $2 != "R" ; If Append or Prepend + ${If} $6 == 1 ; And if we found the target + DetailPrint "Target is already present in $1. It will be removed and" + ${EndIf} + ${If} $0 == "" ; If EnvVar is (now) empty + StrCpy $0 $4 ; just copy PathString to EnvVar + ${If} $6 == 0 ; If found flag is either 0 + ${OrIf} $6 == "" ; or blank (if EnvVarName is empty) + DetailPrint "$1 was empty and has been updated with the target" + ${EndIf} + ${ElseIf} $2 == "A" ; If Append (and EnvVar is not empty), + StrCpy $0 $0;$4 ; append PathString + ${If} $6 == 1 + DetailPrint "appended to $1" + ${Else} + DetailPrint "Target was appended to $1" + ${EndIf} + ${Else} ; If Prepend (and EnvVar is not empty), + StrCpy $0 $4;$0 ; prepend PathString + ${If} $6 == 1 + DetailPrint "prepended to $1" + ${Else} + DetailPrint "Target was prepended to $1" + ${EndIf} + ${EndIf} + ${Else} ; If Action = Remove + ${If} $6 == 1 ; and we found the target + DetailPrint "Target was found and removed from $1" + ${Else} + DetailPrint "Target was NOT found in $1 (nothing to remove)" + ${EndIf} + ${If} $0 == "" + DetailPrint "$1 is now empty" + ${EndIf} + ${EndIf} + + ; Step 5: Update the registry at RegLoc with the updated EnvVar and announce the change + ; + ClearErrors + ${If} $3 == HKLM + WriteRegExpandStr ${hklm_all_users} $1 $0 ; Write it in all users section + ${ElseIf} $3 == HKCU + WriteRegExpandStr ${hkcu_current_user} $1 $0 ; Write it to current user section + ${EndIf} + + IfErrors 0 +4 + MessageBox MB_OK|MB_ICONEXCLAMATION "Could not write updated $1 to $3" + DetailPrint "Could not write updated $1 to $3" + Goto EnvVarUpdate_Restore_Vars + + ; "Export" our change + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + EnvVarUpdate_Restore_Vars: + ; + ; Restore the user's variables and return ResultVar + Pop $R0 + Pop $9 + Pop $8 + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Push $0 ; Push my $0 (ResultVar) + Exch + Pop $0 ; Restore his $0 + +FunctionEnd + +!macroend ; EnvVarUpdate UN +!insertmacro EnvVarUpdate "" +!insertmacro EnvVarUpdate "un." +;----------------------------------- EnvVarUpdate end---------------------------------------- + +!verbose pop +!endif diff --git a/installers/windows/logo.bmp b/installers/windows/logo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c955509b71ec08e614d9fee910d410bf79c78544 GIT binary patch literal 84086 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%0Au=NiLU0Ou;LcXYZHu~)|cfx!zc*vos; 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 Y1QY@a0fm4