releasing/cbrtools/group/cbr.preconfigure.nsh
author lorewang
Wed, 24 Nov 2010 14:12:23 +0800
changeset 706 5221386d044b
parent 602 3145852acc89
permissions -rw-r--r--
external tools cannot specify path.

# 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