123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- # Copyright (c) 2009-2011 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:
- # Raptor installer header file
- !include "WordFunc.nsh"
- # Time macros
- !macro DefineDateStamp
- ${time::GetLocalTime} $RESULT
- ${time::TimeString} "$RESULT" $0 $1 $2 $3 $4 $5
- !define DATE_STAMP "$2-$1-$0-$3-$4-$5"
- !macroend
- # Env var manipulation macros
- # Macro to refresh the computer's environment by sending Windows the
- # WM_WININICHANGE message so that it re-reads the environment changes
- # the installer has made.
- !macro RefreshEnv
- DetailPrint "Refreshing your computer's environment..."
- SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" $RESULT /TIMEOUT=5000
- DetailPrint "Done."
- !macroend
- # Sets ${RESULT} to value of user env var named ${VARNAME}
- !macro ReadUsrEnvVar VARNAME RESULT
- ReadRegStr ${RESULT} HKCU "Environment" ${VARNAME}
- !macroend
- # Sets ${RESULT} to value of system env var named ${VARNAME}
- !macro ReadSysEnvVar VARNAME RESULT
- ReadRegStr ${RESULT} HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
- !macroend
- # Read the env var from the appropriate place
- !macro ReadEnvVar VARNAME RESULT
- ${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
- # User env var
- !insertmacro ReadUsrEnvVar ${VARNAME} ${RESULT}
- ${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
- # System env var
- !insertmacro ReadSysEnvVar ${VARNAME} ${RESULT}
- ${Else}
- # Something has gone wrong!
- MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)." /SD IDOK
- ${EndIf}
- !macroend
- # Read the user Path
- !macro ReadUsrPath OUTPUT
- # Reset error flag
- ClearErrors
- !insertmacro ReadUsrEnvVar "Path" ${OUTPUT}
-
- ${If} ${Errors}
- DetailPrint "User has no Path variable."
- StrCpy "${OUTPUT}" ""
- ${EndIf}
- !macroend
- # Read the user Path
- !macro ReadSysPath OUTPUT
- # Reset error flag
- ClearErrors
- !insertmacro ReadSysEnvVar "Path" ${OUTPUT}
- !macroend
- # Read the Path (installer only).
- !macro ReadPath OUTPUT
- ${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
- # User env var
- !insertmacro ReadUsrPath ${OUTPUT}
- ${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
- # System env var
- !insertmacro ReadSysPath ${OUTPUT}
- ${Else}
- # Something has gone wrong!
- MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)." /SD IDOK
- ${EndIf}
- !macroend
- # Writes a string user environment variable to the Registry
- # DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
- !macro WriteUsrEnvVar VARNAME VALUE
- WriteRegStr HKCU "Environment" ${VARNAME} ${VALUE}
- !macroend
- # Writes a string system environment variable to the Registry
- # DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
- !macro WriteSysEnvVar VARNAME VALUE
- WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
- !macroend
- # Use the following for PATH env var that can expand variables it contains, e.g.
- # Something like
- # %SBS_HOME%;C:\Windows...
- # should be written to the registry
- # SBS_HOME must NOT be an "expandable string"; in fact expandable strings don't work recursively
- # Writes an expandable string user environment variable to the Registry; mostly used for PATH
- !macro WriteUsrEnvVarExp VARNAME VALUE
- WriteRegExpandStr HKCU "Environment" ${VARNAME} ${VALUE}
- !macroend
- # Writes an expandable string system environment variable to the Registry; mostly used for PATH
- !macro WriteSysEnvVarExp VARNAME VALUE
- WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
- !macroend
- # Deletes a user environment variable from the Registry
- !macro RmUsrEnvVar VARNAME
- DeleteRegValue HKCU "Environment" ${VARNAME}
- !macroend
- # Deletes a system environment variable from the Registry
- !macro RmSysEnvVar VARNAME
- DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
- !macroend
- # Push env var name, value of env var, and either "" (for normal string env var)
- # or "exp" (for expandable env var) onto stack before calling this function
- # in this order
- Function WriteEnvVar
- pop $2 # Expandable string or not?
- pop $1 # Env var value
- pop $0 # Env var name
-
- DetailPrint "Going to write evn var $0, with value $1, expandable: $2."
-
- # Reset error flag
- ClearErrors
-
- ${If} $2 == "exp" # Expandable string env var
- # Write the env var to the appropriate place
- ${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
- DetailPrint "DEBUG $$0 $$1 = $0 $1"
- # User env var
- !insertmacro WriteUsrEnvVarExp $0 $1
- ${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
- DetailPrint "DEBUG $$0 $$1 = $0 $1"
- # System env var
- !insertmacro WriteSysEnvVarExp $0 $1
- ${Else}
- # Something has gone wrong!
- MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)." /SD IDOK
- ${EndIf}
- ${Else} # Normal string env var
- # Write the env var to the appropriate place
- ${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
- DetailPrint "DEBUG $$0 $$1 = $0 $1"
- # User env var
- !insertmacro WriteUsrEnvVar $0 $1
- ${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
- DetailPrint "DEBUG $$0 $$1 = $0 $1"
- # System env var
- !insertmacro WriteSysEnvVar $0 $1
- ${Else}
- # Something has gone wrong!
- MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)." /SD IDOK
- ${EndIf}
- ${EndIf}
- FunctionEnd
- # Prepend the PATH env var with the given string. User/system path is determined using
- # other function.
- Function PrependToPath
- pop $0 # String to prepend to PATH
-
- DetailPrint "Going to prepend PATH with $0."
-
- # Reset error flag
- ClearErrors
-
- # Read Path
- !insertmacro ReadPath $RESULT
-
- ${Unless} ${Errors} # If no errors
- ${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
- ${If} $RESULT !~ $9 # If Path doesn't contain string to add
- StrLen $RESULT2 "$0;$RESULT"
- # Warn is Path might be "too" long for the Windows registry.
- ${If} $RESULT2 > 1023
- DetailPrint "Note: adding %SBS_HOME%\bin; to the start of your Path..."
- DetailPrint "... will result in a string longer than 1023 characters..."
- DetailPrint "... being written to your registry. Certain versions of Windows..."
- DetailPrint "... cannot handle a string that long in the registry. The installer..."
- DetailPrint "... will continue writing to the registry. However, a back up of..."
- DetailPrint "... your full environment has been created in your installation directory ..."
- DetailPrint "... should anything go wrong which can be used to restore your previous Path."
- ${EndIf}
-
- Push "Path" # Third on stack
- Push "$0;$RESULT" # Second on stack
- Push "exp" # First on stack
- # Write expandable string to registry
- call WriteEnvVar
- ${EndIf}
- ${Else}
- DetailPrint "Error: failed to read Path environment variable."
- ${EndUnless}
- FunctionEnd
- # Remove the string STR from the string PATH.
- !macro RemoveFromPathString PATH STR
- DetailPrint "Going to remove ${STR} from ${PATH}."
- ${WordReplace} "${PATH}" "${STR}" "" "+" $RESULT2
- DetailPrint "Debug: Replaced ${STR} in RESULT2 = [$RESULT2]"
- StrCpy ${PATH} "$RESULT2"
-
- ${WordReplace} "${PATH}" ";;" ";" "+" $RESULT2
- DetailPrint "Debug: Replaced ;; in RESULT2 = [$RESULT2]"
- StrCpy ${PATH} $RESULT2
- !macroend
- ################### Miscellaneous utilities
- # WriteFile - writes a file with given contents
- # FILENAME - full path to file (all directories in path must exist)
- # CONTENTS - string to write to the file.
- !macro WriteFile FILENAME CONTENTS
- DetailPrint "Creating batch file for setting Raptor's environment..."
- ClearErrors
- FileOpen $0 ${FILENAME} w
- ${Unless} ${Errors}
- FileWrite $0 "${CONTENTS}"
- FileClose $0
- DetailPrint "Done."
- ${Else}
- DetailPrint "Error: failed to write RaptorEnv.bat."
- ${EndUnless}
- !macroend
- ################################################ End ################################################
|