releasing/cbrtools/group/cbr.preconfigure.nsh
changeset 602 3145852acc89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/cbr.preconfigure.nsh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,288 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+
+###########################################################################################
+#  CBR Tools handling
+# 
+!define RELTOOLSKEY "SOFTWARE\Symbian\Release Tools"
+!define CBRTOOLSKEY "SOFTWARE\Symbian\Symbian CBR Tools"
+!define PRODUCT_UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
+
+VAR CBRUNINSTALL
+
+!macro CBRToolsNSISManualUninstall inVersion inPath
+           SetShellVarContext current
+           RMDir /r "$SMPROGRAMS\Symbian CBR Tools\${inVersion}"
+           RMDir "$SMPROGRAMS\Symbian CBR Tools" ; delete if empty
+           RMDir /r "${inPath}"
+           DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}\Symbian CBR Tools ${inVersion}"
+           DeleteRegKey HKLM "${CBRTOOLSKEY}\${inVersion}"
+           DeleteRegKey /ifempty HKLM "${CBRTOOLSKEY}"
+           Push "${inPath}"
+           !insertmacro PathTypeRmvFromEnvVar "path" "${inPath}" ""
+           !insertmacro SetShellVarCtxt
+!macroend
+
+
+!macro CBRToolsISManualUninstall inVersion inPath inUninstallKey
+           RMDir /r "$SMPROGRAMS\Symbian OS Release Tools\"
+           RMDir /r "${inPath}"
+           ${If} "${inUninstallKey}" != ""
+             DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}\${inUninstallKey}"
+           ${EndIf}
+           DeleteRegKey HKLM "${RELTOOLSKEY}\${inVersion}"
+           DeleteRegKey /ifempty HKLM "${RELTOOLSKEY}"
+           DeleteRegKey /ifempty HKLM "SOFTWARE\Symbian"
+           Push "${inPath}"
+           !insertmacro PathTypeRmvFromEnvVar "path" "${inPath}" ""
+!macroend
+
+
+Function CBRToolsPreConfigureFunction
+exch $0 
+push $1 # counter
+push $2 # version
+push $3 # uninstall string
+push $4
+push $5
+
+push $6
+
+push $R0 # $ReplaceVer
+push $R1 # $ReplaceKey
+
+push $R2 # nsis installations found
+push $R3 # install shield installations found
+      StrCpy $CBRUNINSTALL "no"
+StrCpy $5 1
+SectionGetFlags $0  $R0 
+IntOp $R0 $R0 & ${SF_SELECTED} 
+${If} $R0 == ${SF_SELECTED} 
+
+  StrCpy $R0 "Following CBR Tools version(s) are already installed: "
+  StrCpy $R1 ""
+  StrCpy $R2 "" 
+  StrCpy $R3 ""
+  StrCpy $6 ""
+  StrCpy $1 0
+  loop:           #check if there is install shield installation
+    EnumRegKey $2 HKLM "${RELTOOLSKEY}" $1
+    StrCmp $2 "" checkNsis
+    IntOp $1 $1 + 1
+    readregstr $3 HKLM "${RELTOOLSKEY}\$2" "Path"
+    StrCpy $R3 "1"
+    StrCpy $R0 "$R0$\r$\nVersion $2 is already installed in $3."
+    GoTo loop
+  
+  checkNsis:    # check if there is NSIS installation
+  StrCpy $4 $1  
+  StrCpy $1 0
+  loop1:
+    EnumRegKey $2 HKLM "${CBRTOOLSKEY}" $1
+    StrCmp $2 "" done
+    IntOp $1 $1 + 1
+    readregstr $3 HKLM "${CBRTOOLSKEY}\$2" "Path"
+    StrCpy $R2 "$R2-$2-"  
+    StrCpy $R0 "$R0$\r$\nVersion $2 is already installed in $3."
+    GoTo loop1
+  
+  done:
+    IntOp $1 $1 + $4
+    ${If} $1 > 0
+   
+    ${If} $SILENT == "true"
+    ${AndIf} $DIALOGS == "false"
+      !insertmacro LogStopMessage "CBRTools (Release Tools) already installed. Stopping installation.\
+      $\r$\nPlease uninstall CBRTools (Rlease Tools) before continuing " "${OTHER_ERROR}"
+    ${Else}
+      MessageBox MB_YESNOCANCEL "$R0$\r$\n\
+        Do you want to uninstall previous installation(s) before continuing?" IDYES continue IDNO finish 
+    ${EndIf} 
+
+      cancel:
+      StrCpy $5 0
+      GoTo finish
+      
+      
+      continue:
+      StrCpy $CBRUNINSTALL "yes"
+      
+    ${EndIf}
+  finish:  
+${EndIf}
+  StrCpy $0 "$5"
+  pop $R3
+  pop $R2
+  pop $R1
+  pop $R0
+  pop $6
+  pop $5
+  pop $4
+  pop $3
+  pop $2
+  pop $1
+  exch $0
+FunctionEnd
+
+Function CBRToolsPreviousUninstall
+exch $0 
+push $1 # counter
+push $2 # version
+push $3 # uninstall string
+push $4
+push $5
+
+push $6
+
+push $R0 # $ReplaceVer
+push $R1 # $ReplaceKey
+
+push $R2 # nsis installations found
+push $R3 # install shield installations found
+
+${If} $CBRUNINSTALL == "yes"
+  #uninstall
+  #Uninstall first all NSIS installations
+  StrCpy $1 0
+  EnumRegKey $2 HKLM "${CBRTOOLSKEY}" $1
+  ${While} $2 != ""
+        ReadRegStr $3 HKLM "${PRODUCT_UNINST_KEY}\Symbian CBR Tools $2" "UninstallString"
+        ReadRegStr $4 HKLM "${CBRTOOLSKEY}\$2" "Path"
+        ${If} $3 == "" #no uninstaller found
+          StrCpy $6 "error"
+        ${Else}
+          IfFileExists $3 +2 0
+          StrCpy $6 "error"
+        ${EndIf}
+        
+          ${If} $SILENT == "false" 
+          ${OrIf} $DIALOGS == "true"
+            Banner::show /NOUNLOAD /set 76 "Removing previous installation $2..." "Please wait."
+          ${EndIf}
+          IfFileExists "$4\reltools.ini" 0 +3
+           CreateDirectory "$TEMP\sitk\$2\"
+           CopyFiles /SILENT "$4\reltools.ini" "$TEMP\sitk\$2\"
+          ${If} $6 == "error"
+            !insertmacro CBRToolsNSISManualUninstall "$2" "$4"
+          ${Else}
+            ClearErrors
+            ExecWait '"$3" /S _?=$4\' ;$3: Uninstaller $4:installation path
+            IfErrors +2 0
+            RMDir /r $4 ; delete installation folder
+          ${EndIf}
+          IfFileExists "$TEMP\sitk\$2\reltools.ini" 0 +4
+           CreateDirectory "$4"        
+           CopyFiles /SILENT "$TEMP\sitk\$2\reltools.ini" "$4" 
+           RMDir /r "$TEMP\sitk\$2\"
+          ${If} $SILENT == "false" 
+          ${OrIf} $DIALOGS == "true"
+            Banner::destroy
+          ${EndIf}
+
+     #IntOp $1 $1 + 1
+     EnumRegKey $2 HKLM "${CBRTOOLSKEY}" $1
+  ${EndWhile}
+
+  loop:           #check if there is install shield installation
+
+
+  StrCpy $1 0
+  StrCpy $R3 0
+  EnumRegKey $2 HKLM "${RELTOOLSKEY}" $1 
+  ${While} $2 != ""
+    ReadRegStr $3 HKLM "${RELTOOLSKEY}\$2" "Path"
+    
+           CreateDirectory "$TEMP\sitk\InstallShield\$2\"
+           IfFileExists "$3\reltools.ini" 0 +2
+           CopyFiles /SILENT "$3\reltools.ini" "$TEMP\sitk\InstallShield\$2\"
+           FileOpen $4 "$TEMP\sitk\InstallShield\$2\dir.txt" "w"
+           FileWrite $4 "$3"
+           FileClose $4
+    StrCpy $R3 "1"
+    IntOp $1 $1 + 1
+    EnumRegKey $2 HKLM "${RELTOOLSKEY}" $1
+  ${EndWhile}    
+  
+  
+      ${If} $R3 == "1" #Look for install shield installations to uninstall
+        StrCpy $1 0
+        StrCpy $6 ""
+        EnumRegKey $2 HKLM "${PRODUCT_UNINST_KEY}" $1
+        ${While} $2 != "" 
+           ReadRegStr $3 HKLM "${PRODUCT_UNINST_KEY}\$2" "DisplayName"
+           ${If} $3 == "Release Tools"
+              ${ExitWhile}
+           ${EndIf}
+           IntOp $1 $1 + 1    
+           EnumRegKey $2 HKLM "${PRODUCT_UNINST_KEY}" $1
+        ${EndWhile}
+        
+        ${If} $2 == ""
+          StrCpy $6 "error"
+        ${ElseIf} $3 == "Release Tools"
+          ReadRegStr $3 HKLM "${PRODUCT_UNINST_KEY}\$2" "UninstallString"
+          ${If} $3 == ""
+            StrCpy $6 "error"
+          ${Else}
+            MessageBox MB_OK "InstallShield will be launched, please select <remove> and follow the wizard" /SD IDOK
+            ExecWait $3
+          ${EndIf}
+        ${EndIf}
+        
+        FindFirst $0 $4 "$TEMP\sitk\InstallShield\*"
+        ${While} $4 != ""
+            ${If} $4 != "."
+            ${AndIf} $4 != ".."
+              IfFileExists "$TEMP\sitk\InstallShield\$4\dir.txt" 0 notfound
+
+              FileOpen $3 "$TEMP\sitk\InstallShield\$4\dir.txt" "r"
+              FileRead $3 $1
+              FileClose $3
+              
+              ${If} $6 == "error"
+                !insertmacro CBRToolsISManualUninstall "$4" "$1" "$2"
+              ${EndIf}
+              
+              IfFileExists "$TEMP\sitk\InstallShield\$4\reltools.ini" 0 notfound
+              CreateDirectory "$1" 
+              CopyFiles /SILENT "$TEMP\sitk\InstallShield\$4\reltools.ini" "$1" 
+              notfound:
+              
+            ${EndIf}
+            FindNext $0 $4
+        ${EndWhile}
+        FindClose $0   
+
+      ${EndIf}
+      #uninstal
+${EndIF}
+
+  pop $R3
+  pop $R2
+  pop $R1
+  pop $R0
+  pop $6
+  pop $5
+  pop $4
+  pop $3
+  pop $2
+  pop $1
+  pop $0
+FunctionEnd
+
+!macro CBRToolsPreconfigure inSectionName
+  push "${inSectionName}"
+  call CBRToolsPreConfigureFunction
+!macroend