diff options
| author | Oz Linden <oz@lindenlab.com> | 2011-08-17 12:09:59 -0400 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2011-08-17 12:09:59 -0400 | 
| commit | f368c858cdf005ea37d467c2737c3cf88568f1a6 (patch) | |
| tree | 466b3565e56a5583d1a1bf07e806e4bd21a20e35 | |
| parent | b2ef0f99882db73680cc5dfb9570255414f7ba6d (diff) | |
correct line endings
| -rw-r--r-- | indra/lscript/lscript_compile/bison.bat | 22 | ||||
| -rw-r--r-- | indra/lscript/lscript_compile/windows/unistd.h | 48 | ||||
| -rw-r--r-- | indra/newview/installers/windows/installer_template.nsi | 1720 | 
3 files changed, 895 insertions, 895 deletions
| diff --git a/indra/lscript/lscript_compile/bison.bat b/indra/lscript/lscript_compile/bison.bat index 54cf0231d9..0baff4e5ef 100644 --- a/indra/lscript/lscript_compile/bison.bat +++ b/indra/lscript/lscript_compile/bison.bat @@ -1,11 +1,11 @@ -@REM Run bison under Windows.  This script is needed so that bison can -@REM find m4, even if neither program is present in PATH. - -@set bison=%1 -set M4PATH=%2 -set M4= -@set output=%3 -@set input=%4 - -set PATH=%M4PATH%;%PATH% -%bison% -d -o %output% %input% +@REM Run bison under Windows.  This script is needed so that bison can
 +@REM find m4, even if neither program is present in PATH.
 +
 +@set bison=%1
 +set M4PATH=%2
 +set M4=
 +@set output=%3
 +@set input=%4
 +
 +set PATH=%M4PATH%;%PATH%
 +%bison% -d -o %output% %input%
 diff --git a/indra/lscript/lscript_compile/windows/unistd.h b/indra/lscript/lscript_compile/windows/unistd.h index 49e9152d63..0b7e2581e3 100644 --- a/indra/lscript/lscript_compile/windows/unistd.h +++ b/indra/lscript/lscript_compile/windows/unistd.h @@ -1,24 +1,24 @@ -/**  - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -/* After all that, this file is empty. */ +/** 
 + * $LicenseInfo:firstyear=2002&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, Linden Research, Inc.
 + * 
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + * 
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + * 
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + * 
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +/* After all that, this file is empty. */
 diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index b5d43021ec..a874ce1245 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -1,860 +1,860 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; secondlife setup.nsi -;; Copyright 2004-2010, Linden Research, Inc. -;; -;; NSIS Unicode 2.38.1 or higher required -;; http://www.scratchpaper.com/ -;; -;; Author: James Cook, Don Kjer, Callum Prentice -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Compiler flags -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -SetOverwrite on				; overwrite files -SetCompress auto			; compress iff saves space -SetCompressor /solid lzma	; compress whole installer as one block -SetDatablockOptimize off	; only saves us 0.1%, not worth it -XPStyle on                  ; add an XP manifest to the installer -RequestExecutionLevel admin	; on Vista we must be admin because we write to Program Files - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Project flags -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -%%VERSION%% - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; - language files - one for each language (or flavor thereof) -;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the  -;; application directory so we have to add a path to these include files) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!include "%%SOURCE%%\installers\windows\lang_da.nsi" -!include "%%SOURCE%%\installers\windows\lang_de.nsi" -!include "%%SOURCE%%\installers\windows\lang_en-us.nsi" -!include "%%SOURCE%%\installers\windows\lang_es.nsi" -!include "%%SOURCE%%\installers\windows\lang_fr.nsi" -!include "%%SOURCE%%\installers\windows\lang_ja.nsi" -!include "%%SOURCE%%\installers\windows\lang_it.nsi" -!include "%%SOURCE%%\installers\windows\lang_ko.nsi" -!include "%%SOURCE%%\installers\windows\lang_nl.nsi" -!include "%%SOURCE%%\installers\windows\lang_pl.nsi" -!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi" -!include "%%SOURCE%%\installers\windows\lang_zh.nsi" - -# *TODO: Move these into the language files themselves -LangString LanguageCode ${LANG_DANISH}   "da" -LangString LanguageCode ${LANG_GERMAN}   "de" -LangString LanguageCode ${LANG_ENGLISH}  "en" -LangString LanguageCode ${LANG_SPANISH}  "es" -LangString LanguageCode ${LANG_FRENCH}   "fr" -LangString LanguageCode ${LANG_JAPANESE} "ja" -LangString LanguageCode ${LANG_ITALIAN}  "it" -LangString LanguageCode ${LANG_KOREAN}   "ko" -LangString LanguageCode ${LANG_DUTCH}    "nl" -LangString LanguageCode ${LANG_POLISH}   "pl" -LangString LanguageCode ${LANG_PORTUGUESEBR} "pt" -LangString LanguageCode ${LANG_SIMPCHINESE}  "zh" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py) -;; For example: -;; !define INSTFLAGS "%(flags)s" -;; !define INSTNAME   "SecondLife%(grid_caps)s" -;; !define SHORTCUT   "Second Life (%(grid_caps)s)" -;; !define URLNAME   "secondlife%(grid)s" -;; !define UNINSTALL_SETTINGS 1 - -%%GRID_VARS%% - -Name ${INSTNAME} - -SubCaption 0 $(LicenseSubTitleSetup)	; override "license agreement" text - -BrandingText " "						; bottom of window text -Icon          %%SOURCE%%\installers\windows\install_icon.ico -UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico -WindowIcon on							; show our icon in left corner -BGGradient off							; no big background window -CRCCheck on								; make sure CRC is OK -InstProgressFlags smooth colored		; new colored smooth look -ShowInstDetails nevershow				; no details, no "show" button -SetOverwrite on							; stomp files by default -AutoCloseWindow true					; after all files install, close window - -InstallDir "$PROGRAMFILES\${INSTNAME}" -InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "" -DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup) -Page directory dirPre -Page instfiles - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Variables -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Var INSTPROG -Var INSTEXE -Var INSTFLAGS -Var INSTSHORTCUT -Var COMMANDLINE         ; command line passed to this installer, set in .onInit -Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer -Var SKIP_DIALOGS        ; set from command line in  .onInit. autoinstall  -                        ; GUI and the defaults. - -;;; Function definitions should go before file includes, because calls to -;;; DLLs like LangDLL trigger an implicit file include, so if that call is at -;;; the end of this script NSIS has to decompress the whole installer before  -;;; it can call the DLL function. JC - -!include "FileFunc.nsh"     ; For GetParameters, GetOptions -!insertmacro GetParameters -!insertmacro GetOptions - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; After install completes, launch app -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function .onInstSuccess -    Push $R0	# Option value, unused - -    StrCmp $SKIP_DIALOGS "true" label_launch  - -    ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0 -    # If parameter was there (no error) just launch -    # Otherwise ask -    IfErrors label_ask_launch label_launch -     -label_ask_launch: -    # Don't launch by default when silent -    IfSilent label_no_launch -	MessageBox MB_YESNO $(InstSuccesssQuestion) \ -        IDYES label_launch IDNO label_no_launch -         -label_launch: -	# Assumes SetOutPath $INSTDIR -	Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM' -label_no_launch: -	Pop $R0 -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Pre-directory page callback -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function dirPre -    StrCmp $SKIP_DIALOGS "true" 0 +2 -	Abort -FunctionEnd     - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Make sure we're not on Windows 98 / ME -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckWindowsVersion -	DetailPrint "Checking Windows version..." -	Call GetWindowsVersion -	Pop $R0 -	; Just get first two characters, ignore 4.0 part of "NT 4.0" -	StrCpy $R0 $R0 2 -	; Blacklist certain OS versions -	StrCmp $R0 "95" win_ver_bad -	StrCmp $R0 "98" win_ver_bad -	StrCmp $R0 "ME" win_ver_bad -	StrCmp $R0 "NT" win_ver_bad -	Return -win_ver_bad: -	StrCmp $SKIP_DIALOGS "true" +2 ; If skip_dialogs is set just install -            MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort -	Return -win_ver_abort: -	Quit -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Make sure the user can install/uninstall -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckIfAdministrator -    DetailPrint $(CheckAdministratorInstDP) -    UserInfo::GetAccountType -    Pop $R0 -    StrCmp $R0 "Admin" lbl_is_admin -        MessageBox MB_OK $(CheckAdministratorInstMB) -        Quit -lbl_is_admin: -    Return -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.CheckIfAdministrator -    DetailPrint $(CheckAdministratorUnInstDP) -    UserInfo::GetAccountType -    Pop $R0 -    StrCmp $R0 "Admin" lbl_is_admin -        MessageBox MB_OK $(CheckAdministratorUnInstMB) -        Quit -lbl_is_admin: -    Return -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Checks to see if the current version has already been installed (according to the registry). -; If it has, allow user to bail out of install process. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckIfAlreadyCurrent -    Push $0 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" -    StrCmp $0 ${VERSION_LONG} 0 continue_install -    StrCmp $SKIP_DIALOGS "true" continue_install -    MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK continue_install -    Quit -continue_install: -    Pop $0 -    Return -FunctionEnd -	 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Checks for CPU valid (must have SSE2 support) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckCPUFlags -    Call GetWindowsVersion -    Pop $R0 -    StrCmp $R0 "2000" OK_SSE  ; sse check not available on win2k. - -    Push $1 -    System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1' -    IntCmp $1 1 OK_SSE -    MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE -    Quit - -  OK_SSE: -    Pop $1 -    Return -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Close the program, if running. Modifies no variables. -; Allows user to bail out of install process. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CloseSecondLife -  Push $0 -  FindWindow $0 "Second Life" "" -  IntCmp $0 0 DONE -   -  StrCmp $SKIP_DIALOGS "true" CLOSE -    MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL - -  CANCEL_INSTALL: -    Quit - -  CLOSE: -    DetailPrint $(CloseSecondLifeInstDP) -    SendMessage $0 16 0 0 - -  LOOP: -	  FindWindow $0 "Second Life" "" -	  IntCmp $0 0 DONE -	  Sleep 500 -	  Goto LOOP - -  DONE: -    Pop $0 -    Return -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Test our connection to secondlife.com -; Also allows us to count attempted installs by examining web logs. -; *TODO: Return current SL version info and have installer check -; if it is up to date. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckNetworkConnection -    Push $0 -    Push $1 -    Push $2	# Option value for GetOptions -    DetailPrint $(CheckNetworkConnectionDP) -    ; Look for a tag value from the stub installer, used for statistics -    ; to correlate installs.  Default to "" if not found on command line. -    StrCpy $2 "" -    ${GetOptions} $COMMANDLINE "/STUBTAG=" $2 -    GetTempFileName $0 -    !define HTTP_TIMEOUT 5000 ; milliseconds -    ; Don't show secondary progress bar, this will be quick. -    NSISdl::download_quiet \ -        /TIMEOUT=${HTTP_TIMEOUT} \ -        "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \ -        $0 -    Pop $1 ; Return value, either "success", "cancel" or an error message -    ; MessageBox MB_OK "Download result: $1" -    ; Result ignored for now -	; StrCmp $1 "success" +2 -	;	DetailPrint "Connection failed: $1" -    Delete $0 ; temporary file -    Pop $2 -    Pop $1 -    Pop $0 -    Return -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Delete files in Documents and Settings\<user>\SecondLife\cache -; Delete files in Documents and Settings\All Users\SecondLife\cache -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Function RemoveCacheFiles -; -;; Delete files in Documents and Settings\<user>\SecondLife -;Push $0 -;Push $1 -;Push $2 -;  DetailPrint $(RemoveCacheFilesDP) -; -;  StrCpy $0 0 ; Index number used to iterate via EnumRegKey -; -;  LOOP: -;    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0 -;    StrCmp $1 "" DONE               ; no more users -; -;    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"  -;    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing -; -;    ; Required since ProfileImagePath is of type REG_EXPAND_SZ -;    ExpandEnvStrings $2 $2 -; -;	; When explicitly uninstalling, everything goes away -;    RMDir /r "$2\Application Data\SecondLife\cache" -; -;  CONTINUE: -;    IntOp $0 $0 + 1 -;    Goto LOOP -;  DONE: -;Pop $2 -;Pop $1 -;Pop $0 -; -;; Delete files in Documents and Settings\All Users\SecondLife -;Push $0 -;  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData" -;  StrCmp $0 "" +2 -;  RMDir /r "$0\SecondLife\cache" -;Pop $0 -; -;; Delete filse in C:\Windows\Application Data\SecondLife -;; If the user is running on a pre-NT system, Application Data lives here instead of -;; in Documents and Settings. -;RMDir /r "$WINDIR\Application Data\SecondLife\cache" -; -;FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Delete the installed shader files -;;; Since shaders are in active development, we'll likely need to shuffle them -;;; around a bit from build to build.  This ensures that shaders that we move -;;; or rename in the dev tree don't get left behind in the install. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function RemoveOldShaders - -;; Remove old shader files first so fallbacks will work. see DEV-5663 -RMDir /r "$INSTDIR\app_settings\shaders\*" - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Delete the installed XUI files -;;; We've changed the directory hierarchy for skins, putting all XUI and texture -;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed -;;; to skins/xui/en-us.  Need to clean up the old path when upgrading -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function RemoveOldXUI - -;; remove old XUI and texture files -RmDir /r "$INSTDIR\skins\html" -RmDir /r "$INSTDIR\skins\xui" -RmDir /r "$INSTDIR\skins\textures" -Delete "$INSTDIR\skins\*.txt" - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Remove any releasenotes files. -;;; We are no longer including release notes with the viewer. This will delete -;;; any that were left behind by an older installer. Delete will not fail if -;;; the files do not exist -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function RemoveOldReleaseNotes - -;; remove releasenotes.txt file from application directory, and the shortcut -;; from the start menu. -Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk" -Delete "$INSTDIR\releasenotes.txt" - -FunctionEnd - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Delete files in Documents and Settings\<user>\SecondLife -; Delete files in Documents and Settings\All Users\SecondLife -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.DocumentsAndSettingsFolder - -; Delete files in Documents and Settings\<user>\SecondLife -Push $0 -Push $1 -Push $2 - -  DetailPrint "Deleting files in Documents and Settings folder" - -  StrCpy $0 0 ; Index number used to iterate via EnumRegKey - -  LOOP: -    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0 -    StrCmp $1 "" DONE               ; no more users - -    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"  -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing - -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ -    ExpandEnvStrings $2 $2 - -	; If uninstalling a normal install remove everything -	; Otherwise (preview/dmz etc) just remove cache -    StrCmp $INSTFLAGS "" RM_ALL RM_CACHE -      RM_ALL: -        RMDir /r "$2\Application Data\SecondLife" -      RM_CACHE: -        # Local Settings directory is the cache, there is no "cache" subdir -        RMDir /r "$2\Local Settings\Application Data\SecondLife" -        # Vista version of the same -        RMDir /r "$2\AppData\Local\SecondLife" -        Delete "$2\Application Data\SecondLife\user_settings\settings_windlight.xml" - -  CONTINUE: -    IntOp $0 $0 + 1 -    Goto LOOP -  DONE: - -Pop $2 -Pop $1 -Pop $0 - -; Delete files in Documents and Settings\All Users\SecondLife -Push $0 -  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData" -  StrCmp $0 "" +2 -  RMDir /r "$0\SecondLife" -Pop $0 - -; Delete filse in C:\Windows\Application Data\SecondLife -; If the user is running on a pre-NT system, Application Data lives here instead of -; in Documents and Settings. -RMDir /r "$WINDIR\Application Data\SecondLife" - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Close the program, if running. Modifies no variables. -; Allows user to bail out of uninstall process. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.CloseSecondLife -  Push $0 -  FindWindow $0 "Second Life" "" -  IntCmp $0 0 DONE -  MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL - -  CANCEL_UNINSTALL: -    Quit - -  CLOSE: -    DetailPrint $(CloseSecondLifeUnInstDP) -    SendMessage $0 16 0 0 - -  LOOP: -	  FindWindow $0 "Second Life" "" -	  IntCmp $0 0 DONE -	  Sleep 500 -	  Goto LOOP - -  DONE: -    Pop $0 -    Return -FunctionEnd - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; -;   Delete the stored password for the current Windows user -;   DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled -; -Function un.RemovePassword - -DetailPrint "Removing Second Life password" - -SetShellVarContext current -Delete "$APPDATA\SecondLife\user_settings\password.dat" -SetShellVarContext all - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Delete the installed files -;;; This deletes the uninstall executable, but it works  -;;; because it is copied to temp directory before running -;;; -;;; Note:  You must list all files here, because we only -;;; want to delete our files, not things users left in the -;;; application directories. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.ProgramFiles - -;; Remove mozilla file first so recursive directory deletion doesn't get hung up -Delete "$INSTDIR\app_settings\mozilla\components" - -;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py -%%DELETE_FILES%% - -;; Optional/obsolete files.  Delete won't fail if they don't exist. -Delete "$INSTDIR\dronesettings.ini" -Delete "$INSTDIR\message_template.msg" -Delete "$INSTDIR\newview.pdb" -Delete "$INSTDIR\newview.map" -Delete "$INSTDIR\SecondLife.pdb" -Delete "$INSTDIR\SecondLife.map" -Delete "$INSTDIR\comm.dat" -Delete "$INSTDIR\*.glsl" -Delete "$INSTDIR\motions\*.lla" -Delete "$INSTDIR\trial\*.html" -Delete "$INSTDIR\newview.exe" -;; Remove entire help directory -Delete "$INSTDIR\help\Advanced\*" -RMDir  "$INSTDIR\help\Advanced" -Delete "$INSTDIR\help\basics\*" -RMDir  "$INSTDIR\help\basics" -Delete "$INSTDIR\help\Concepts\*" -RMDir  "$INSTDIR\help\Concepts" -Delete "$INSTDIR\help\welcome\*" -RMDir  "$INSTDIR\help\welcome" -Delete "$INSTDIR\help\*" -RMDir  "$INSTDIR\help" - -Delete "$INSTDIR\uninst.exe" -RMDir "$INSTDIR" - -IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER - -FOLDERFOUND: -  ; Silent uninstall always removes all files (/SD IDYES) -  MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER -  RMDir /r "$INSTDIR" - -NOFOLDER: - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Uninstall settings -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -UninstallText $(UninstallTextMsg) -ShowUninstDetails show - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Uninstall section -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Section Uninstall - -; Start with some default values. -StrCpy $INSTFLAGS "" -StrCpy $INSTPROG "${INSTNAME}" -StrCpy $INSTEXE "${INSTEXE}" -StrCpy $INSTSHORTCUT "${SHORTCUT}" -Call un.CheckIfAdministrator		; Make sure the user can install/uninstall - -; uninstall for all users (if you change this, change it in the install as well) -SetShellVarContext all			 - -; Make sure we're not running -Call un.CloseSecondLife - -; Clean up registry keys and subkeys (these should all be !defines somewhere) -DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" -DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" - -; Clean up shortcuts -Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*" -RMDir  "$SMPROGRAMS\$INSTSHORTCUT" - -Delete "$DESKTOP\$INSTSHORTCUT.lnk" -Delete "$INSTDIR\$INSTSHORTCUT.lnk" -Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" - -; Clean up cache and log files. -; Leave them in-place for non AGNI installs. - -!ifdef UNINSTALL_SETTINGS -Call un.DocumentsAndSettingsFolder -!endif - -; remove stored password on uninstall -Call un.RemovePassword - -Call un.ProgramFiles - -SectionEnd 				; end of uninstall section - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; (From the NSIS documentation, JC) -; GetWindowsVersion -; -; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/ -; Updated by Joost Verburg -; -; Returns on top of stack -; -; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003) -; or -; '' (Unknown Windows Version) -; -; Usage: -;   Call GetWindowsVersion -;   Pop $R0 -;   ; at this point $R0 is "NT 4.0" or whatnot -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function GetWindowsVersion -  -   Push $R0 -   Push $R1 -  -   ReadRegStr $R0 HKLM \ -   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion - -   IfErrors 0 lbl_winnt -    -   ; we are not NT -   ReadRegStr $R0 HKLM \ -   "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber -  -   StrCpy $R1 $R0 1 -   StrCmp $R1 '4' 0 lbl_error -  -   StrCpy $R1 $R0 3 -  -   StrCmp $R1 '4.0' lbl_win32_95 -   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98 -  -   lbl_win32_95: -     StrCpy $R0 '95' -   Goto lbl_done -  -   lbl_win32_98: -     StrCpy $R0 '98' -   Goto lbl_done -  -   lbl_win32_ME: -     StrCpy $R0 'ME' -   Goto lbl_done -  -   lbl_winnt: -  -   StrCpy $R1 $R0 1 -  -   StrCmp $R1 '3' lbl_winnt_x -   StrCmp $R1 '4' lbl_winnt_x -  -   StrCpy $R1 $R0 3 -  -   StrCmp $R1 '5.0' lbl_winnt_2000 -   StrCmp $R1 '5.1' lbl_winnt_XP -   StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error -  -   lbl_winnt_x: -     StrCpy $R0 "NT $R0" 6 -   Goto lbl_done -  -   lbl_winnt_2000: -     Strcpy $R0 '2000' -   Goto lbl_done -  -   lbl_winnt_XP: -     Strcpy $R0 'XP' -   Goto lbl_done -  -   lbl_winnt_2003: -     Strcpy $R0 '2003' -   Goto lbl_done -  -   lbl_error: -     Strcpy $R0 '' -   lbl_done: -  -   Pop $R1 -   Exch $R0 -  -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;  Note: to add new languages, add a language file include to the list  -;;  at the top of this file, add an entry to the menu and then add an  -;;  entry to the language ID selector below -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function .onInit -    Push $0 -    ${GetParameters} $COMMANDLINE              ; get our command line - -    ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0    -    IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS -        StrCpy $SKIP_DIALOGS "true" - -    ${GetOptions} $COMMANDLINE "/LANGID=" $0   ; /LANGID=1033 implies US English -    ; If no language (error), then proceed -    IfErrors lbl_configure_default_lang -    ; No error means we got a language, so use it -    StrCpy $LANGUAGE $0 -    Goto lbl_return - -lbl_configure_default_lang: -    ; If we currently have a version of SL installed, default to the language of that install -    ; Otherwise don't change $LANGUAGE and it will default to the OS UI language. -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" -    IfErrors +2 0 ; If error skip the copy instruction  -	StrCpy $LANGUAGE $0 - -    ; For silent installs, no language prompt, use default -    IfSilent lbl_return -    StrCmp $SKIP_DIALOGS "true" lbl_return -   -lbl_build_menu: -	Push "" -    # Use separate file so labels can be UTF-16 but we can still merge changes -    # into this ASCII file. JC -    !include "%%SOURCE%%\installers\windows\language_menu.nsi" -     -	Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain -	LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage) -	Pop $0 -	StrCmp $0 "cancel" 0 +2 -		Abort -    StrCpy $LANGUAGE $0 - -	; save language in registry		 -	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE -lbl_return: -    Pop $0 -    Return -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.onInit -	; read language from registry and set for uninstaller -    ; Key will be removed on successful uninstall -	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" -    IfErrors lbl_end -	StrCpy $LANGUAGE $0 -lbl_end: -    Return -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; MAIN SECTION -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Section ""						; (default section) - -SetShellVarContext all			; install for all users (if you change this, change it in the uninstall as well) - -; Start with some default values. -StrCpy $INSTFLAGS "${INSTFLAGS}" -StrCpy $INSTPROG "${INSTNAME}" -StrCpy $INSTEXE "${INSTEXE}" -StrCpy $INSTSHORTCUT "${SHORTCUT}" - -Call CheckWindowsVersion		; warn if on Windows 98/ME -Call CheckCPUFlags			; Make sure we have SSE2 support -Call CheckIfAdministrator		; Make sure the user can install/uninstall -Call CheckIfAlreadyCurrent		; Make sure that we haven't already installed this version -Call CloseSecondLife			; Make sure we're not running -Call CheckNetworkConnection		; ping secondlife.com - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers. -;Call RemoveCacheFiles			; Installing over removes potentially corrupted -								; VFS and cache files. - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Need to clean out shader files from previous installs to fix DEV-5663 -Call RemoveOldShaders - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Need to clean out old XUI files that predate skinning -Call RemoveOldXUI - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Clear out old releasenotes.txt files. These are now on the public wiki. -Call RemoveOldReleaseNotes - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Files -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py -%%INSTALL_FILES%% - -# Pass the installer's language to the client to use as a default -StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)" - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Shortcuts in start menu -CreateDirectory	"$SMPROGRAMS\$INSTSHORTCUT" -SetOutPath "$INSTDIR" -CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \ -				"$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM" - - -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \ -				"InternetShortcut" "URL" \ -				"http://join.secondlife.com/" -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \ -				"InternetShortcut" "URL" \ -				"http://www.secondlife.com/account/" -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \ -				"InternetShortcut" "URL" \ -                "http://wiki.secondlife.com/wiki/LSL_Portal" -CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \ -				'"$INSTDIR\uninst.exe"' '' - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Other shortcuts -SetOutPath "$INSTDIR" -CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \ -        "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM" -CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \ -        "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM" -CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \ -				'"$INSTDIR\uninst.exe"' '' - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Write registry -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE" -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)" -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"' - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Write URL registry info -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life" -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" "" -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"' -;; URL param must be last item passed to viewer, it ignores subsequent params -;; to avoid parameter injection attacks. -WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"' -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life" -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" "" -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"' -;; URL param must be last item passed to viewer, it ignores subsequent params -;; to avoid parameter injection attacks. -WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"' - -; write out uninstaller -WriteUninstaller "$INSTDIR\uninst.exe" - -; end of default section -SectionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; secondlife setup.nsi
 +;; Copyright 2004-2010, Linden Research, Inc.
 +;;
 +;; NSIS Unicode 2.38.1 or higher required
 +;; http://www.scratchpaper.com/
 +;;
 +;; Author: James Cook, Don Kjer, Callum Prentice
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Compiler flags
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +SetOverwrite on				; overwrite files
 +SetCompress auto			; compress iff saves space
 +SetCompressor /solid lzma	; compress whole installer as one block
 +SetDatablockOptimize off	; only saves us 0.1%, not worth it
 +XPStyle on                  ; add an XP manifest to the installer
 +RequestExecutionLevel admin	; on Vista we must be admin because we write to Program Files
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Project flags
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
 +%%VERSION%%
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; - language files - one for each language (or flavor thereof)
 +;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the 
 +;; application directory so we have to add a path to these include files)
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +!include "%%SOURCE%%\installers\windows\lang_da.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_de.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_es.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_it.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_ko.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_nl.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_pl.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
 +!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
 +
 +# *TODO: Move these into the language files themselves
 +LangString LanguageCode ${LANG_DANISH}   "da"
 +LangString LanguageCode ${LANG_GERMAN}   "de"
 +LangString LanguageCode ${LANG_ENGLISH}  "en"
 +LangString LanguageCode ${LANG_SPANISH}  "es"
 +LangString LanguageCode ${LANG_FRENCH}   "fr"
 +LangString LanguageCode ${LANG_JAPANESE} "ja"
 +LangString LanguageCode ${LANG_ITALIAN}  "it"
 +LangString LanguageCode ${LANG_KOREAN}   "ko"
 +LangString LanguageCode ${LANG_DUTCH}    "nl"
 +LangString LanguageCode ${LANG_POLISH}   "pl"
 +LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
 +LangString LanguageCode ${LANG_SIMPCHINESE}  "zh"
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
 +;; For example:
 +;; !define INSTFLAGS "%(flags)s"
 +;; !define INSTNAME   "SecondLife%(grid_caps)s"
 +;; !define SHORTCUT   "Second Life (%(grid_caps)s)"
 +;; !define URLNAME   "secondlife%(grid)s"
 +;; !define UNINSTALL_SETTINGS 1
 +
 +%%GRID_VARS%%
 +
 +Name ${INSTNAME}
 +
 +SubCaption 0 $(LicenseSubTitleSetup)	; override "license agreement" text
 +
 +BrandingText " "						; bottom of window text
 +Icon          %%SOURCE%%\installers\windows\install_icon.ico
 +UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico
 +WindowIcon on							; show our icon in left corner
 +BGGradient off							; no big background window
 +CRCCheck on								; make sure CRC is OK
 +InstProgressFlags smooth colored		; new colored smooth look
 +ShowInstDetails nevershow				; no details, no "show" button
 +SetOverwrite on							; stomp files by default
 +AutoCloseWindow true					; after all files install, close window
 +
 +InstallDir "$PROGRAMFILES\${INSTNAME}"
 +InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
 +DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
 +Page directory dirPre
 +Page instfiles
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Variables
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Var INSTPROG
 +Var INSTEXE
 +Var INSTFLAGS
 +Var INSTSHORTCUT
 +Var COMMANDLINE         ; command line passed to this installer, set in .onInit
 +Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
 +Var SKIP_DIALOGS        ; set from command line in  .onInit. autoinstall 
 +                        ; GUI and the defaults.
 +
 +;;; Function definitions should go before file includes, because calls to
 +;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
 +;;; the end of this script NSIS has to decompress the whole installer before 
 +;;; it can call the DLL function. JC
 +
 +!include "FileFunc.nsh"     ; For GetParameters, GetOptions
 +!insertmacro GetParameters
 +!insertmacro GetOptions
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; After install completes, launch app
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function .onInstSuccess
 +    Push $R0	# Option value, unused
 +
 +    StrCmp $SKIP_DIALOGS "true" label_launch 
 +
 +    ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
 +    # If parameter was there (no error) just launch
 +    # Otherwise ask
 +    IfErrors label_ask_launch label_launch
 +    
 +label_ask_launch:
 +    # Don't launch by default when silent
 +    IfSilent label_no_launch
 +	MessageBox MB_YESNO $(InstSuccesssQuestion) \
 +        IDYES label_launch IDNO label_no_launch
 +        
 +label_launch:
 +	# Assumes SetOutPath $INSTDIR
 +	Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM'
 +label_no_launch:
 +	Pop $R0
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Pre-directory page callback
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function dirPre
 +    StrCmp $SKIP_DIALOGS "true" 0 +2
 +	Abort
 +FunctionEnd    
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Make sure we're not on Windows 98 / ME
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckWindowsVersion
 +	DetailPrint "Checking Windows version..."
 +	Call GetWindowsVersion
 +	Pop $R0
 +	; Just get first two characters, ignore 4.0 part of "NT 4.0"
 +	StrCpy $R0 $R0 2
 +	; Blacklist certain OS versions
 +	StrCmp $R0 "95" win_ver_bad
 +	StrCmp $R0 "98" win_ver_bad
 +	StrCmp $R0 "ME" win_ver_bad
 +	StrCmp $R0 "NT" win_ver_bad
 +	Return
 +win_ver_bad:
 +	StrCmp $SKIP_DIALOGS "true" +2 ; If skip_dialogs is set just install
 +            MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
 +	Return
 +win_ver_abort:
 +	Quit
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Make sure the user can install/uninstall
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckIfAdministrator
 +    DetailPrint $(CheckAdministratorInstDP)
 +    UserInfo::GetAccountType
 +    Pop $R0
 +    StrCmp $R0 "Admin" lbl_is_admin
 +        MessageBox MB_OK $(CheckAdministratorInstMB)
 +        Quit
 +lbl_is_admin:
 +    Return
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.CheckIfAdministrator
 +    DetailPrint $(CheckAdministratorUnInstDP)
 +    UserInfo::GetAccountType
 +    Pop $R0
 +    StrCmp $R0 "Admin" lbl_is_admin
 +        MessageBox MB_OK $(CheckAdministratorUnInstMB)
 +        Quit
 +lbl_is_admin:
 +    Return
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Checks to see if the current version has already been installed (according to the registry).
 +; If it has, allow user to bail out of install process.
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckIfAlreadyCurrent
 +    Push $0
 +    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
 +    StrCmp $0 ${VERSION_LONG} 0 continue_install
 +    StrCmp $SKIP_DIALOGS "true" continue_install
 +    MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK continue_install
 +    Quit
 +continue_install:
 +    Pop $0
 +    Return
 +FunctionEnd
 +	
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Checks for CPU valid (must have SSE2 support)
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckCPUFlags
 +    Call GetWindowsVersion
 +    Pop $R0
 +    StrCmp $R0 "2000" OK_SSE  ; sse check not available on win2k.
 +
 +    Push $1
 +    System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
 +    IntCmp $1 1 OK_SSE
 +    MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE
 +    Quit
 +
 +  OK_SSE:
 +    Pop $1
 +    Return
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Close the program, if running. Modifies no variables.
 +; Allows user to bail out of install process.
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CloseSecondLife
 +  Push $0
 +  FindWindow $0 "Second Life" ""
 +  IntCmp $0 0 DONE
 +  
 +  StrCmp $SKIP_DIALOGS "true" CLOSE
 +    MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
 +
 +  CANCEL_INSTALL:
 +    Quit
 +
 +  CLOSE:
 +    DetailPrint $(CloseSecondLifeInstDP)
 +    SendMessage $0 16 0 0
 +
 +  LOOP:
 +	  FindWindow $0 "Second Life" ""
 +	  IntCmp $0 0 DONE
 +	  Sleep 500
 +	  Goto LOOP
 +
 +  DONE:
 +    Pop $0
 +    Return
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Test our connection to secondlife.com
 +; Also allows us to count attempted installs by examining web logs.
 +; *TODO: Return current SL version info and have installer check
 +; if it is up to date.
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckNetworkConnection
 +    Push $0
 +    Push $1
 +    Push $2	# Option value for GetOptions
 +    DetailPrint $(CheckNetworkConnectionDP)
 +    ; Look for a tag value from the stub installer, used for statistics
 +    ; to correlate installs.  Default to "" if not found on command line.
 +    StrCpy $2 ""
 +    ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
 +    GetTempFileName $0
 +    !define HTTP_TIMEOUT 5000 ; milliseconds
 +    ; Don't show secondary progress bar, this will be quick.
 +    NSISdl::download_quiet \
 +        /TIMEOUT=${HTTP_TIMEOUT} \
 +        "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \
 +        $0
 +    Pop $1 ; Return value, either "success", "cancel" or an error message
 +    ; MessageBox MB_OK "Download result: $1"
 +    ; Result ignored for now
 +	; StrCmp $1 "success" +2
 +	;	DetailPrint "Connection failed: $1"
 +    Delete $0 ; temporary file
 +    Pop $2
 +    Pop $1
 +    Pop $0
 +    Return
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Delete files in Documents and Settings\<user>\SecondLife\cache
 +; Delete files in Documents and Settings\All Users\SecondLife\cache
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;Function RemoveCacheFiles
 +;
 +;; Delete files in Documents and Settings\<user>\SecondLife
 +;Push $0
 +;Push $1
 +;Push $2
 +;  DetailPrint $(RemoveCacheFilesDP)
 +;
 +;  StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 +;
 +;  LOOP:
 +;    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 +;    StrCmp $1 "" DONE               ; no more users
 +;
 +;    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 +;    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 +;
 +;    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 +;    ExpandEnvStrings $2 $2
 +;
 +;	; When explicitly uninstalling, everything goes away
 +;    RMDir /r "$2\Application Data\SecondLife\cache"
 +;
 +;  CONTINUE:
 +;    IntOp $0 $0 + 1
 +;    Goto LOOP
 +;  DONE:
 +;Pop $2
 +;Pop $1
 +;Pop $0
 +;
 +;; Delete files in Documents and Settings\All Users\SecondLife
 +;Push $0
 +;  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 +;  StrCmp $0 "" +2
 +;  RMDir /r "$0\SecondLife\cache"
 +;Pop $0
 +;
 +;; Delete filse in C:\Windows\Application Data\SecondLife
 +;; If the user is running on a pre-NT system, Application Data lives here instead of
 +;; in Documents and Settings.
 +;RMDir /r "$WINDIR\Application Data\SecondLife\cache"
 +;
 +;FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Delete the installed shader files
 +;;; Since shaders are in active development, we'll likely need to shuffle them
 +;;; around a bit from build to build.  This ensures that shaders that we move
 +;;; or rename in the dev tree don't get left behind in the install.
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function RemoveOldShaders
 +
 +;; Remove old shader files first so fallbacks will work. see DEV-5663
 +RMDir /r "$INSTDIR\app_settings\shaders\*"
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Delete the installed XUI files
 +;;; We've changed the directory hierarchy for skins, putting all XUI and texture
 +;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
 +;;; to skins/xui/en-us.  Need to clean up the old path when upgrading
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function RemoveOldXUI
 +
 +;; remove old XUI and texture files
 +RmDir /r "$INSTDIR\skins\html"
 +RmDir /r "$INSTDIR\skins\xui"
 +RmDir /r "$INSTDIR\skins\textures"
 +Delete "$INSTDIR\skins\*.txt"
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Remove any releasenotes files.
 +;;; We are no longer including release notes with the viewer. This will delete
 +;;; any that were left behind by an older installer. Delete will not fail if
 +;;; the files do not exist
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function RemoveOldReleaseNotes
 +
 +;; remove releasenotes.txt file from application directory, and the shortcut
 +;; from the start menu.
 +Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
 +Delete "$INSTDIR\releasenotes.txt"
 +
 +FunctionEnd
 +
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Delete files in Documents and Settings\<user>\SecondLife
 +; Delete files in Documents and Settings\All Users\SecondLife
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.DocumentsAndSettingsFolder
 +
 +; Delete files in Documents and Settings\<user>\SecondLife
 +Push $0
 +Push $1
 +Push $2
 +
 +  DetailPrint "Deleting files in Documents and Settings folder"
 +
 +  StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 +
 +  LOOP:
 +    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 +    StrCmp $1 "" DONE               ; no more users
 +
 +    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 +    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 +
 +    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 +    ExpandEnvStrings $2 $2
 +
 +	; If uninstalling a normal install remove everything
 +	; Otherwise (preview/dmz etc) just remove cache
 +    StrCmp $INSTFLAGS "" RM_ALL RM_CACHE
 +      RM_ALL:
 +        RMDir /r "$2\Application Data\SecondLife"
 +      RM_CACHE:
 +        # Local Settings directory is the cache, there is no "cache" subdir
 +        RMDir /r "$2\Local Settings\Application Data\SecondLife"
 +        # Vista version of the same
 +        RMDir /r "$2\AppData\Local\SecondLife"
 +        Delete "$2\Application Data\SecondLife\user_settings\settings_windlight.xml"
 +
 +  CONTINUE:
 +    IntOp $0 $0 + 1
 +    Goto LOOP
 +  DONE:
 +
 +Pop $2
 +Pop $1
 +Pop $0
 +
 +; Delete files in Documents and Settings\All Users\SecondLife
 +Push $0
 +  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 +  StrCmp $0 "" +2
 +  RMDir /r "$0\SecondLife"
 +Pop $0
 +
 +; Delete filse in C:\Windows\Application Data\SecondLife
 +; If the user is running on a pre-NT system, Application Data lives here instead of
 +; in Documents and Settings.
 +RMDir /r "$WINDIR\Application Data\SecondLife"
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Close the program, if running. Modifies no variables.
 +; Allows user to bail out of uninstall process.
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.CloseSecondLife
 +  Push $0
 +  FindWindow $0 "Second Life" ""
 +  IntCmp $0 0 DONE
 +  MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
 +
 +  CANCEL_UNINSTALL:
 +    Quit
 +
 +  CLOSE:
 +    DetailPrint $(CloseSecondLifeUnInstDP)
 +    SendMessage $0 16 0 0
 +
 +  LOOP:
 +	  FindWindow $0 "Second Life" ""
 +	  IntCmp $0 0 DONE
 +	  Sleep 500
 +	  Goto LOOP
 +
 +  DONE:
 +    Pop $0
 +    Return
 +FunctionEnd
 +
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;
 +;   Delete the stored password for the current Windows user
 +;   DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
 +;
 +Function un.RemovePassword
 +
 +DetailPrint "Removing Second Life password"
 +
 +SetShellVarContext current
 +Delete "$APPDATA\SecondLife\user_settings\password.dat"
 +SetShellVarContext all
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Delete the installed files
 +;;; This deletes the uninstall executable, but it works 
 +;;; because it is copied to temp directory before running
 +;;;
 +;;; Note:  You must list all files here, because we only
 +;;; want to delete our files, not things users left in the
 +;;; application directories.
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.ProgramFiles
 +
 +;; Remove mozilla file first so recursive directory deletion doesn't get hung up
 +Delete "$INSTDIR\app_settings\mozilla\components"
 +
 +;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
 +%%DELETE_FILES%%
 +
 +;; Optional/obsolete files.  Delete won't fail if they don't exist.
 +Delete "$INSTDIR\dronesettings.ini"
 +Delete "$INSTDIR\message_template.msg"
 +Delete "$INSTDIR\newview.pdb"
 +Delete "$INSTDIR\newview.map"
 +Delete "$INSTDIR\SecondLife.pdb"
 +Delete "$INSTDIR\SecondLife.map"
 +Delete "$INSTDIR\comm.dat"
 +Delete "$INSTDIR\*.glsl"
 +Delete "$INSTDIR\motions\*.lla"
 +Delete "$INSTDIR\trial\*.html"
 +Delete "$INSTDIR\newview.exe"
 +;; Remove entire help directory
 +Delete "$INSTDIR\help\Advanced\*"
 +RMDir  "$INSTDIR\help\Advanced"
 +Delete "$INSTDIR\help\basics\*"
 +RMDir  "$INSTDIR\help\basics"
 +Delete "$INSTDIR\help\Concepts\*"
 +RMDir  "$INSTDIR\help\Concepts"
 +Delete "$INSTDIR\help\welcome\*"
 +RMDir  "$INSTDIR\help\welcome"
 +Delete "$INSTDIR\help\*"
 +RMDir  "$INSTDIR\help"
 +
 +Delete "$INSTDIR\uninst.exe"
 +RMDir "$INSTDIR"
 +
 +IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
 +
 +FOLDERFOUND:
 +  ; Silent uninstall always removes all files (/SD IDYES)
 +  MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
 +  RMDir /r "$INSTDIR"
 +
 +NOFOLDER:
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Uninstall settings
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +UninstallText $(UninstallTextMsg)
 +ShowUninstDetails show
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Uninstall section
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Section Uninstall
 +
 +; Start with some default values.
 +StrCpy $INSTFLAGS ""
 +StrCpy $INSTPROG "${INSTNAME}"
 +StrCpy $INSTEXE "${INSTEXE}"
 +StrCpy $INSTSHORTCUT "${SHORTCUT}"
 +Call un.CheckIfAdministrator		; Make sure the user can install/uninstall
 +
 +; uninstall for all users (if you change this, change it in the install as well)
 +SetShellVarContext all			
 +
 +; Make sure we're not running
 +Call un.CloseSecondLife
 +
 +; Clean up registry keys and subkeys (these should all be !defines somewhere)
 +DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
 +DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
 +
 +; Clean up shortcuts
 +Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
 +RMDir  "$SMPROGRAMS\$INSTSHORTCUT"
 +
 +Delete "$DESKTOP\$INSTSHORTCUT.lnk"
 +Delete "$INSTDIR\$INSTSHORTCUT.lnk"
 +Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
 +
 +; Clean up cache and log files.
 +; Leave them in-place for non AGNI installs.
 +
 +!ifdef UNINSTALL_SETTINGS
 +Call un.DocumentsAndSettingsFolder
 +!endif
 +
 +; remove stored password on uninstall
 +Call un.RemovePassword
 +
 +Call un.ProgramFiles
 +
 +SectionEnd 				; end of uninstall section
 +
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; (From the NSIS documentation, JC)
 +; GetWindowsVersion
 +;
 +; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
 +; Updated by Joost Verburg
 +;
 +; Returns on top of stack
 +;
 +; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
 +; or
 +; '' (Unknown Windows Version)
 +;
 +; Usage:
 +;   Call GetWindowsVersion
 +;   Pop $R0
 +;   ; at this point $R0 is "NT 4.0" or whatnot
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function GetWindowsVersion
 + 
 +   Push $R0
 +   Push $R1
 + 
 +   ReadRegStr $R0 HKLM \
 +   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
 +
 +   IfErrors 0 lbl_winnt
 +   
 +   ; we are not NT
 +   ReadRegStr $R0 HKLM \
 +   "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
 + 
 +   StrCpy $R1 $R0 1
 +   StrCmp $R1 '4' 0 lbl_error
 + 
 +   StrCpy $R1 $R0 3
 + 
 +   StrCmp $R1 '4.0' lbl_win32_95
 +   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
 + 
 +   lbl_win32_95:
 +     StrCpy $R0 '95'
 +   Goto lbl_done
 + 
 +   lbl_win32_98:
 +     StrCpy $R0 '98'
 +   Goto lbl_done
 + 
 +   lbl_win32_ME:
 +     StrCpy $R0 'ME'
 +   Goto lbl_done
 + 
 +   lbl_winnt:
 + 
 +   StrCpy $R1 $R0 1
 + 
 +   StrCmp $R1 '3' lbl_winnt_x
 +   StrCmp $R1 '4' lbl_winnt_x
 + 
 +   StrCpy $R1 $R0 3
 + 
 +   StrCmp $R1 '5.0' lbl_winnt_2000
 +   StrCmp $R1 '5.1' lbl_winnt_XP
 +   StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
 + 
 +   lbl_winnt_x:
 +     StrCpy $R0 "NT $R0" 6
 +   Goto lbl_done
 + 
 +   lbl_winnt_2000:
 +     Strcpy $R0 '2000'
 +   Goto lbl_done
 + 
 +   lbl_winnt_XP:
 +     Strcpy $R0 'XP'
 +   Goto lbl_done
 + 
 +   lbl_winnt_2003:
 +     Strcpy $R0 '2003'
 +   Goto lbl_done
 + 
 +   lbl_error:
 +     Strcpy $R0 ''
 +   lbl_done:
 + 
 +   Pop $R1
 +   Exch $R0
 + 
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;  Note: to add new languages, add a language file include to the list 
 +;;  at the top of this file, add an entry to the menu and then add an 
 +;;  entry to the language ID selector below
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function .onInit
 +    Push $0
 +    ${GetParameters} $COMMANDLINE              ; get our command line
 +
 +    ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0   
 +    IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
 +        StrCpy $SKIP_DIALOGS "true"
 +
 +    ${GetOptions} $COMMANDLINE "/LANGID=" $0   ; /LANGID=1033 implies US English
 +    ; If no language (error), then proceed
 +    IfErrors lbl_configure_default_lang
 +    ; No error means we got a language, so use it
 +    StrCpy $LANGUAGE $0
 +    Goto lbl_return
 +
 +lbl_configure_default_lang:
 +    ; If we currently have a version of SL installed, default to the language of that install
 +    ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
 +    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 +    IfErrors +2 0 ; If error skip the copy instruction 
 +	StrCpy $LANGUAGE $0
 +
 +    ; For silent installs, no language prompt, use default
 +    IfSilent lbl_return
 +    StrCmp $SKIP_DIALOGS "true" lbl_return
 +  
 +lbl_build_menu:
 +	Push ""
 +    # Use separate file so labels can be UTF-16 but we can still merge changes
 +    # into this ASCII file. JC
 +    !include "%%SOURCE%%\installers\windows\language_menu.nsi"
 +    
 +	Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
 +	LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
 +	Pop $0
 +	StrCmp $0 "cancel" 0 +2
 +		Abort
 +    StrCpy $LANGUAGE $0
 +
 +	; save language in registry		
 +	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
 +lbl_return:
 +    Pop $0
 +    Return
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.onInit
 +	; read language from registry and set for uninstaller
 +    ; Key will be removed on successful uninstall
 +	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 +    IfErrors lbl_end
 +	StrCpy $LANGUAGE $0
 +lbl_end:
 +    Return
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; MAIN SECTION
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Section ""						; (default section)
 +
 +SetShellVarContext all			; install for all users (if you change this, change it in the uninstall as well)
 +
 +; Start with some default values.
 +StrCpy $INSTFLAGS "${INSTFLAGS}"
 +StrCpy $INSTPROG "${INSTNAME}"
 +StrCpy $INSTEXE "${INSTEXE}"
 +StrCpy $INSTSHORTCUT "${SHORTCUT}"
 +
 +Call CheckWindowsVersion		; warn if on Windows 98/ME
 +Call CheckCPUFlags			; Make sure we have SSE2 support
 +Call CheckIfAdministrator		; Make sure the user can install/uninstall
 +Call CheckIfAlreadyCurrent		; Make sure that we haven't already installed this version
 +Call CloseSecondLife			; Make sure we're not running
 +Call CheckNetworkConnection		; ping secondlife.com
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
 +;Call RemoveCacheFiles			; Installing over removes potentially corrupted
 +								; VFS and cache files.
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Need to clean out shader files from previous installs to fix DEV-5663
 +Call RemoveOldShaders
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Need to clean out old XUI files that predate skinning
 +Call RemoveOldXUI
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Clear out old releasenotes.txt files. These are now on the public wiki.
 +Call RemoveOldReleaseNotes
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;;; Files
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
 +%%INSTALL_FILES%%
 +
 +# Pass the installer's language to the client to use as a default
 +StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Shortcuts in start menu
 +CreateDirectory	"$SMPROGRAMS\$INSTSHORTCUT"
 +SetOutPath "$INSTDIR"
 +CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
 +				"$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
 +
 +
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
 +				"InternetShortcut" "URL" \
 +				"http://join.secondlife.com/"
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
 +				"InternetShortcut" "URL" \
 +				"http://www.secondlife.com/account/"
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
 +				"InternetShortcut" "URL" \
 +                "http://wiki.secondlife.com/wiki/LSL_Portal"
 +CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
 +				'"$INSTDIR\uninst.exe"' ''
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Other shortcuts
 +SetOutPath "$INSTDIR"
 +CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
 +        "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
 +CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
 +        "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
 +CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
 +				'"$INSTDIR\uninst.exe"' ''
 +
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Write registry
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +; Write URL registry info
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 +;; URL param must be last item passed to viewer, it ignores subsequent params
 +;; to avoid parameter injection attacks.
 +WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 +;; URL param must be last item passed to viewer, it ignores subsequent params
 +;; to avoid parameter injection attacks.
 +WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
 +
 +; write out uninstaller
 +WriteUninstaller "$INSTDIR\uninst.exe"
 +
 +; end of default section
 +SectionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
