--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,243 @@
+# 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:
+# 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)."
+ ${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)."
+${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)."
+ ${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)."
+ ${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 ################################################