svn merge -r100302:100467 installer-james-combo-merge for QAR-972, incorporating:

QAR-892 Windows installer that pings secondlife.com on launch
QAR-837 Six New Languages in the Installer
QAR-908 downloader-support-1 merge
master
James Cook 2008-10-28 23:56:20 +00:00
parent 7a9360c8bc
commit b406972af1
26 changed files with 240 additions and 615 deletions

View File

@ -3595,6 +3595,17 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>ForceMandatoryUpdate</key>
<map>
<key>Comment</key>
<string>For QA: On next startup, forces the auto-updater to run</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ForwardBtnRect</key>
<map>
<key>Comment</key>
@ -4178,7 +4189,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
<string>http://wiki.secondlife.com/wiki/[LSL_STRING]</string>
</map>
<key>LagMeterShrunk</key>
<map>

View File

@ -0,0 +1,6 @@
The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
This is the format required for NSIS Unicode. See http://www.scratchpaper.com/ for details.
James Cook
September 2008

View File

@ -1,30 +1,22 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; secondlife setup.nsi
;; Copyright 2004-2007, Linden Research, Inc.
;; For info, see http://www.nullsoft.com/free/nsis/
;; Copyright 2004-2008, Linden Research, Inc.
;;
;; NSIS Unicode 2.38.1 or higher required
;; http://www.scratchpaper.com/
;;
;; NSIS 2.22 or higher required
;; Author: James Cook, Don Kjer, Callum Prentice
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Detect NSIS compiler version
!define "NSIS${NSIS_VERSION}"
!ifdef "NSISv2.02" | "NSISv2.03" | "NSISv2.04" | "NSISv2.05" | "NSISv2.06"
;; before 2.07 defaulted lzma to solid (whole file)
SetCompressor lzma
!else
;; after 2.07 required /solid for whole file compression
SetCompressor /solid lzma
!endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 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
@ -41,9 +33,22 @@ XPStyle on ; add an XP manifest to the installer
!include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
!include "%%SOURCE%%\installers\windows\lang_ko.nsi"
!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
!include "%%SOURCE%%\installers\windows\lang_es.nsi"
!include "%%SOURCE%%\installers\windows\lang_it.nsi"
!include "%%SOURCE%%\installers\windows\lang_nl.nsi"
!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 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}
@ -63,11 +68,7 @@ AutoCloseWindow true ; after all files install, close window
InstallDir "$PROGRAMFILES\${INSTNAME}"
InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
!ifdef UPDATE
DirText $(DirectoryChooseTitle) $(DirectoryChooseUpdate)
!else
DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
!endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -76,145 +77,41 @@ DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
Var INSTPROG
Var INSTEXE
Var INSTFLAGS
Var LANGFLAGS
Var INSTSHORTCUT
Var COMMANDLINE ; command line passed to this installer, set in .onInit
;;; Function definitions should go before file includes, because the NSIS package
;;; is a single stream of bytecodes + file data. So if your function definitions are at
;;; the end of the file it has to decompress the whole thing before it can call a function. JC
;;; 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PostInstallExe
; This just runs any post installation scripts.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function PostInstallExe
push $0
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "PostInstallExe"
;MessageBox MB_OK '$0'
ExecWait '$0'
pop $0
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CheckStartupParameters
; Sets INSTFLAGS, INSTPROG, and INSTEXE.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CheckStartupParams
push $0
push $R0
; Look for a registry entry with info about where to update.
Call GetProgramName
pop $R0
StrCpy $INSTPROG "$R0"
StrCpy $INSTEXE "$R0.exe"
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
; If key doesn't exist, skip install
IfErrors ABORT
StrCpy $INSTDIR "$0"
; We now have a directory to install to. Get the startup parameters and shortcut as well.
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags"
IfErrors +2
StrCpy $INSTFLAGS "$0"
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut"
IfErrors +2
StrCpy $INSTSHORTCUT "$0"
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe"
IfErrors +2
StrCpy $INSTEXE "$0"
Goto FINISHED
ABORT:
MessageBox MB_OK $(CheckStartupParamsMB)
Quit
FINISHED:
;MessageBox MB_OK "INSTPROG: $INSTPROG, INSTEXE: $INSTEXE, INSTFLAGS: $INSTFLAGS"
pop $R0
pop $0
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function un.CheckStartupParams
push $0
push $R0
; Look for a registry entry with info about where to update.
Call un.GetProgramName
pop $R0
StrCpy $INSTPROG "$R0"
StrCpy $INSTEXE "$R0.exe"
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
; If key doesn't exist, skip install
IfErrors ABORT
StrCpy $INSTDIR "$0"
; We now have a directory to install to. Get the startup parameters and shortcut as well.
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags"
IfErrors +2
StrCpy $INSTFLAGS "$0"
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut"
IfErrors +2
StrCpy $INSTSHORTCUT "$0"
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe"
IfErrors +2
StrCpy $INSTEXE "$0"
Goto FINISHED
ABORT:
MessageBox MB_OK $(CheckStartupParamsMB)
Quit
FINISHED:
;MessageBox MB_OK "INSTPROG: $INSTPROG, INSTEXE: $INSTEXE, INSTFLAGS: $INSTFLAGS"
pop $R0
pop $0
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; After install completes, offer readme file
;;; After install completes, launch app
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function .onInstSuccess
MessageBox MB_YESNO \
$(InstSuccesssQuestion) /SD IDYES IDNO NoReadme
; Assumes SetOutPath $INSTDIR
Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS'
NoReadme:
Push $R0 # Option value, unused
${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'
label_no_launch:
Pop $R0
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Remove old NSIS version. Modifies no variables.
; Does NOT delete the LindenWorld directory, or any
; user files in that directory.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function RemoveNSIS
Push $0
; Grab the installation directory of the old version
DetailPrint $(RemoveOldNSISVersion)
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
; If key doesn't exist, skip uninstall
IfErrors NO_NSIS
; Clean up legacy beta shortcuts
Delete "$SMPROGRAMS\Second Life Beta.lnk"
Delete "$DESKTOP\Second Life Beta.lnk"
Delete "$SMPROGRAMS\Second Life.lnk"
; Clean up old newview.exe file
Delete "$INSTDIR\newview.exe"
; Intentionally don't delete the stuff in
; Documents and Settings, so we keep the user's settings
NO_NSIS:
Pop $0
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Make sure we're not on Windows 98 / ME
@ -242,28 +139,28 @@ FunctionEnd
; Make sure the user can install/uninstall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CheckIfAdministrator
DetailPrint $(CheckAdministratorInstDP)
UserInfo::GetAccountType
Pop $R0
StrCmp $R0 "Admin" is_admin
MessageBox MB_OK $(CheckAdministratorInstMB)
Quit
is_admin:
Return
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" is_admin
MessageBox MB_OK $(CheckAdministratorUnInstMB)
Quit
is_admin:
Return
DetailPrint $(CheckAdministratorUnInstDP)
UserInfo::GetAccountType
Pop $R0
StrCmp $R0 "Admin" lbl_is_admin
MessageBox MB_OK $(CheckAdministratorUnInstMB)
Quit
lbl_is_admin:
Return
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -310,6 +207,33 @@ Function CloseSecondLife
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
DetailPrint $(CheckNetworkConnectionDP)
GetTempFileName $0
!define HTTP_TIMEOUT 5000 ; milliseconds
; Don't show secondary progress bar, this will be quick.
NSISdl::download_quiet \
/TIMEOUT=${HTTP_TIMEOUT} \
"http://join.secondlife.com/installer-check/?v=${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 $1
Pop $0
Return
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Delete files in Documents and Settings\<user>\SecondLife\cache
@ -577,7 +501,6 @@ StrCpy $INSTFLAGS ""
StrCpy $INSTPROG "${INSTNAME}"
StrCpy $INSTEXE "${INSTEXE}"
StrCpy $INSTSHORTCUT "${SHORTCUT}"
Call un.CheckStartupParams ; Figure out where, what and how to uninstall.
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)
@ -586,10 +509,9 @@ SetShellVarContext all
; Make sure we're not running
Call un.CloseSecondLife
; Clean up registry keys (these should all be !defines somewhere)
; 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"
DeleteRegKey HKEY_LOCAL_MACHINE "Software\Linden Research, Inc.\Installer Language"
; Clean up shortcuts
Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
@ -613,123 +535,6 @@ Call un.ProgramFiles
SectionEnd ; end of uninstall section
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; (From the NSIS wiki, DK)
; GetParameterValue
;
; Usage:
; !insertmacro GetParameterValue "/L=" "1033"
; pop $R0
;
; Returns on top of stack
;
; Example command lines:
; foo.exe /S /L=1033 /D=C:\Program Files\Foo
; or:
; foo.exe /S "/L=1033" /D="C:\Program Files\Foo"
; gpv "/L=" "1033"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!macro GetParameterValue SWITCH DEFAULT
Push $0
Push $1
Push $2
Push $3
Push $4
;$CMDLINE='"My Setup\Setup.exe" /L=1033 /S'
Push "$CMDLINE"
Push '${SWITCH}"'
!insertmacro StrStr
Pop $0
StrCmp "$0" "" gpv_notquoted
;$0='/L="1033" /S'
StrLen $2 "$0"
Strlen $1 "${SWITCH}"
IntOp $1 $1 + 1
StrCpy $0 "$0" $2 $1
;$0='1033" /S'
Push "$0"
Push '"'
!insertmacro StrStr
Pop $1
StrLen $2 "$0"
StrLen $3 "$1"
IntOp $4 $2 - $3
StrCpy $0 $0 $4 0
Goto gpv_done
gpv_notquoted:
Push "$CMDLINE"
Push "${SWITCH}"
!insertmacro StrStr
Pop $0
StrCmp "$0" "" gpv_done
;$0='/L="1033" /S'
StrLen $2 "$0"
Strlen $1 "${SWITCH}"
StrCpy $0 "$0" $2 $1
;$0=1033 /S'
Push "$0"
Push ' '
!insertmacro StrStr
Pop $1
StrLen $2 "$0"
StrLen $3 "$1"
IntOp $4 $2 - $3
StrCpy $0 $0 $4 0
Goto gpv_done
gpv_done:
StrCmp "$0" "" 0 +2
StrCpy $0 "${DEFAULT}"
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
!macroend
; And I had to modify StrStr a tiny bit.
; Possible upgrade switch the goto's to use ${__LINE__}
!macro STRSTR
Exch $R1 ; st=haystack,old$R1, $R1=needle
Exch ; st=old$R1,haystack
Exch $R2 ; st=old$R1,old$R2, $R2=haystack
Push $R3
Push $R4
Push $R5
StrLen $R3 $R1
StrCpy $R4 0
; $R1=needle
; $R2=haystack
; $R3=len(needle)
; $R4=cnt
; $R5=tmp
; loop;
StrCpy $R5 $R2 $R3 $R4
StrCmp $R5 $R1 +4
StrCmp $R5 "" +3
IntOp $R4 $R4 + 1
Goto -4
; done;
StrCpy $R1 $R2 "" $R4
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Exch $R1
!macroend
Function GetProgramName
!insertmacro GetParameterValue "/P=" "SecondLife"
FunctionEnd
Function un.GetProgramName
!insertmacro GetParameterValue "/P=" "SecondLife"
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; (From the NSIS documentation, JC)
@ -827,42 +632,59 @@ FunctionEnd
;; entry to the language ID selector below
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function .onInit
Push $0
${GetParameters} $COMMANDLINE ; get our command line
${GetOptions} $COMMANDLINE "/LANGID=" $0 ; /LANGID=1033 implies US English
; If no language (error), then proceed
IfErrors lbl_check_silent
; No error means we got a language, so use it
StrCpy $LANGUAGE $0
Goto lbl_return
; read the language from registry (ok if not there) and set langauge menu
lbl_check_silent:
; For silent installs, no language prompt, use default
IfSilent lbl_return
; 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 lbl_build_menu
StrCpy $LANGUAGE $0
lbl_build_menu:
Push ""
Push ${LANG_ENGLISH}
Push English
Push ${LANG_GERMAN}
Push German
Push ${LANG_JAPANESE}
Push Japanese
Push ${LANG_KOREAN}
Push Korean
# 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 "Installer Language" "Please select the language of the installer"
Pop $LANGUAGE
StrCmp $LANGUAGE "cancel" 0 +2
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 ininstaller
; 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Sections
;;; MAIN SECTION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Section "" ; (default section)
@ -874,15 +696,11 @@ StrCpy $INSTPROG "${INSTNAME}"
StrCpy $INSTEXE "${INSTEXE}"
StrCpy $INSTSHORTCUT "${SHORTCUT}"
IfSilent +2
Goto NOT_SILENT
Call CheckStartupParams ; Figure out where, what and how to install.
NOT_SILENT:
Call CheckWindowsVersion ; warn if on Windows 98/ME
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 RemoveNSIS ; Check for old NSIS install to remove
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.
@ -907,9 +725,6 @@ Call RemoveOldReleaseNotes
;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
%%INSTALL_FILES%%
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; If this is a silent update, we don't need to re-create these shortcuts or registry entries.
IfSilent POST_INSTALL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Shortcuts in start menu
@ -918,25 +733,18 @@ SetOutPath "$INSTDIR"
CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
"$INSTDIR\$INSTEXE" "$INSTFLAGS"
!ifdef MUSEUM
CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum.lnk" \
"$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum Spanish.lnk" \
"$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
!endif
WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Trial Account.url" \
WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
"InternetShortcut" "URL" \
"http://www.secondlife.com/registration/"
WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
"InternetShortcut" "URL" \
"http://www.secondlife.com/account/"
CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \
"$INSTDIR\lsl_guide.html"
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"' '/P="$INSTPROG"'
'"$INSTDIR\uninst.exe"' ''
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Other shortcuts
@ -944,18 +752,8 @@ SetOutPath "$INSTDIR"
CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
'"$INSTDIR\uninst.exe"' '/P="$INSTPROG"'
'"$INSTDIR\uninst.exe"' ''
!ifdef MUSEUM
CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
!endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Write registry
@ -965,22 +763,17 @@ WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags
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" /P="$INSTPROG"'
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"'
Goto WRITE_UNINST
POST_INSTALL:
; Run a post-executable script if necessary.
Call PostInstallExe
WRITE_UNINST:
; write out uninstaller
WriteUninstaller "$INSTDIR\uninst.exe"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -216,10 +216,6 @@ const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user fl
F32 gSimLastTime; // Used in LLAppViewer::init and send_stats()
F32 gSimFrames;
std::string gDisabledMessage; // Set in LLAppViewer::initConfiguration used in idle_startup
BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally
BOOL gAllowIdleAFK = TRUE;
BOOL gAllowTapTapHoldRun = TRUE;
BOOL gShowObjectUpdates = FALSE;
@ -1869,22 +1865,6 @@ bool LLAppViewer::initConfiguration()
// llerrs << "Failed to parse skin definition." << llendl;
// }
// LLXmlTreeNode* rootp = skin_def_tree.getRoot();
// LLXmlTreeNode* disabled_message_node = rootp->getChildByName("disabled_message");
// if (disabled_message_node)
// {
// gDisabledMessage = disabled_message_node->getContents();
// }
// static LLStdStringHandle hide_links_string = LLXmlTree::addAttributeString("hide_links");
// rootp->getFastAttributeBOOL(hide_links_string, gHideLinks);
// // Legacy string. This flag really meant we didn't want to expose references to "Second Life".
// // Just set gHideLinks instead.
// static LLStdStringHandle silent_string = LLXmlTree::addAttributeString("silent_update");
// BOOL silent_update;
// rootp->getFastAttributeBOOL(silent_string, silent_update);
// gHideLinks = (gHideLinks || silent_update);
//}
#if LL_DARWIN

View File

@ -225,8 +225,6 @@ const S32 AGENT_UPDATES_PER_SECOND = 10;
// "// llstartup" indicates that llstartup is the only client for this global.
extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp
extern std::string gDisabledMessage; // llstartup
extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup
extern LLSD gDebugInfo;
extern BOOL gAllowIdleAFK;

View File

@ -358,11 +358,6 @@ void LLFloaterBuyCurrencyUI::onClickErrorWeb(void* data)
// static
void LLFloaterBuyCurrency::buyCurrency()
{
if (gHideLinks)
{
return;
}
LLFloaterBuyCurrencyUI* ui = LLFloaterBuyCurrencyUI::soleInstance(true);
ui->noTarget();
ui->updateUI();
@ -371,15 +366,6 @@ void LLFloaterBuyCurrency::buyCurrency()
void LLFloaterBuyCurrency::buyCurrency(const std::string& name, S32 price)
{
if (gHideLinks)
{
LLStringUtil::format_map_t args;
args["[NAME]"] = name;
args["[PRICE]"] = llformat("%d", price);
gViewerWindow->alertXml("NotEnoughCurrency", args);
return;
}
LLFloaterBuyCurrencyUI* ui = LLFloaterBuyCurrencyUI::soleInstance(true);
ui->target(name, price);
ui->updateUI();

View File

@ -236,17 +236,24 @@ void LLMuteList::loadUserVolumes()
//-----------------------------------------------------------------------------
LLMuteList::~LLMuteList()
{
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "volume_settings.xml");
LLSD settings_llsd;
for(user_volume_map_t::iterator iter = mUserVolumeSettings.begin(); iter != mUserVolumeSettings.end(); ++iter)
// If we quit from the login screen we will not have an SL account
// name. Don't try to save, otherwise we'll dump a file in
// C:\Program Files\SecondLife\ JC
std::string user_dir = gDirUtilp->getLindenUserDir();
if (!user_dir.empty())
{
settings_llsd[iter->first.asString()] = iter->second;
}
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "volume_settings.xml");
LLSD settings_llsd;
llofstream file;
file.open(filename);
LLSDSerialize::toPrettyXML(settings_llsd, file);
for(user_volume_map_t::iterator iter = mUserVolumeSettings.begin(); iter != mUserVolumeSettings.end(); ++iter)
{
settings_llsd[iter->first.asString()] = iter->second;
}
llofstream file;
file.open(filename);
LLSDSerialize::toPrettyXML(settings_llsd, file);
}
}
BOOL LLMuteList::isLinden(const std::string& name) const

View File

@ -63,7 +63,6 @@
#include "llviewernetwork.h"
#include "llviewerwindow.h" // to link into child list
#include "llnotify.h"
#include "llappviewer.h" // for gHideLinks
#include "llurlsimstring.h"
#include "lluictrlfactory.h"
#include "llhttpclient.h"
@ -1066,15 +1065,8 @@ void LLPanelLogin::onClickConnect(void *)
}
else
{
if (gHideLinks)
{
gViewerWindow->alertXml("MustHaveAccountToLogInNoLinks");
}
else
{
gViewerWindow->alertXml("MustHaveAccountToLogIn",
LLPanelLogin::newAccountAlertCallback);
}
gViewerWindow->alertXml("MustHaveAccountToLogIn",
LLPanelLogin::newAccountAlertCallback);
}
}
}

View File

@ -101,7 +101,7 @@ const std::string HELLO_LSL =
" llSay(0, \"Touched.\");\n"
" }\n"
"}\n";
const std::string HELP_LSL = "lsl_guide.html";
const std::string HELP_LSL_URL = "http://wiki.secondlife.com/wiki/LSL_Portal";
const std::string DEFAULT_SCRIPT_NAME = "New Script"; // *TODO:Translate?
const std::string DEFAULT_SCRIPT_DESC = "(No Description)"; // *TODO:Translate?
@ -294,7 +294,7 @@ LLScriptEdCore::LLScriptEdCore(
const std::string& name,
const LLRect& rect,
const std::string& sample,
const std::string& help,
const std::string& help_url,
const LLHandle<LLFloater>& floater_handle,
void (*load_callback)(void*),
void (*save_callback)(void*, BOOL),
@ -304,7 +304,7 @@ LLScriptEdCore::LLScriptEdCore(
:
LLPanel( std::string("name"), rect ),
mSampleText(sample),
mHelpFile ( help ),
mHelpURL(help_url),
mEditor( NULL ),
mLoadCallback( load_callback ),
mSaveCallback( save_callback ),
@ -547,7 +547,6 @@ void LLScriptEdCore::setHelpPage(const std::string& help_string)
if (!history_combo) return;
LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
url_string.setArg("[APP_DIRECTORY]", gDirUtilp->getWorkingDir());
url_string.setArg("[LSL_STRING]", help_string);
addHelpItemToHistory(help_string);
@ -556,6 +555,7 @@ void LLScriptEdCore::setHelpPage(const std::string& help_string)
}
void LLScriptEdCore::addHelpItemToHistory(const std::string& help_string)
{
if (help_string.empty()) return;
@ -647,7 +647,7 @@ void LLScriptEdCore::onHelpWebDialog(S32 option, void* userdata)
switch(option)
{
case 0:
load_url_local_file(corep->mHelpFile);
LLWeb::loadURL(corep->mHelpURL);
break;
default:
break;
@ -773,7 +773,6 @@ void LLScriptEdCore::onHelpComboCommit(LLUICtrl* ctrl, void* userdata)
LLWebBrowserCtrl* web_browser = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
url_string.setArg("[APP_DIRECTORY]", gDirUtilp->getWorkingDir());
url_string.setArg("[LSL_STRING]", help_string);
web_browser->navigateTo(url_string);
}
@ -1072,7 +1071,7 @@ void* LLPreviewLSL::createScriptEdPanel(void* userdata)
self->mScriptEd = new LLScriptEdCore("script panel",
LLRect(),
HELLO_LSL,
HELP_LSL,
HELP_LSL_URL,
self->getHandle(),
LLPreviewLSL::onLoad,
LLPreviewLSL::onSave,
@ -1590,7 +1589,7 @@ void* LLLiveLSLEditor::createScriptEdPanel(void* userdata)
self->mScriptEd = new LLScriptEdCore("script ed panel",
LLRect(),
HELLO_LSL,
HELP_LSL,
HELP_LSL_URL,
self->getHandle(),
&LLLiveLSLEditor::onLoad,
&LLLiveLSLEditor::onSave,

View File

@ -65,7 +65,7 @@ public:
const std::string& name,
const LLRect& rect,
const std::string& sample,
const std::string& help,
const std::string& help_url,
const LLHandle<LLFloater>& floater_handle,
void (*load_callback)(void* userdata),
void (*save_callback)(void* userdata, BOOL close_after_save),
@ -132,7 +132,7 @@ protected:
private:
std::string mSampleText;
std::string mHelpFile;
std::string mHelpURL;
LLTextEditor* mEditor;
void (*mLoadCallback)(void* userdata);
void (*mSaveCallback)(void* userdata, BOOL close_after_save);

View File

@ -1101,6 +1101,7 @@ bool idle_startup()
LL_DEBUGS("AppInit") << "STATE_LOGIN_PROCESS_RESPONSE" << LL_ENDL;
std::ostringstream emsg;
bool quit = false;
bool update = false;
std::string login_response;
std::string reason_response;
std::string message_response;
@ -1144,11 +1145,7 @@ bool idle_startup()
reason_response = LLUserAuth::getInstance()->getResponse("reason");
message_response = LLUserAuth::getInstance()->getResponse("message");
if (gHideLinks && reason_response == "disabled")
{
emsg << gDisabledMessage;
}
else if (!message_response.empty())
if (!message_response.empty())
{
// XUI: fix translation for strings returned during login
// We need a generic table for translations
@ -1206,16 +1203,7 @@ bool idle_startup()
if(reason_response == "update")
{
auth_message = LLUserAuth::getInstance()->getResponse("message");
if (show_connect_box)
{
update_app(TRUE, auth_message);
LLStartUp::setStartupState( STATE_UPDATE_CHECK );
return false;
}
else
{
quit = true;
}
update = true;
}
if(reason_response == "optional")
{
@ -1253,6 +1241,21 @@ bool idle_startup()
break;
}
if (update || gSavedSettings.getBOOL("ForceMandatoryUpdate"))
{
gSavedSettings.setBOOL("ForceMandatoryUpdate", FALSE);
if (show_connect_box)
{
update_app(TRUE, auth_message);
LLStartUp::setStartupState( STATE_UPDATE_CHECK );
return false;
}
else
{
quit = true;
}
}
// Version update and we're not showing the dialog
if(quit)
{
@ -2840,29 +2843,6 @@ void update_dialog_callback(S32 option, void *userdata)
std::ostringstream params;
params << "-url \"" << update_url.asString() << "\"";
if (gHideLinks)
{
// Figure out the program name.
const std::string& data_dir = gDirUtilp->getAppRODataDir();
// Roll back from the end, stopping at the first '\'
const char* program_name = data_dir.c_str() + data_dir.size(); /* Flawfinder: ignore */
while ( (data_dir != --program_name) &&
*(program_name) != '\\');
if ( *(program_name) == '\\')
{
// We found a '\'.
program_name++;
}
else
{
// Oops.
program_name = "SecondLife";
}
params << " -silent -name \"" << LLAppViewer::instance()->getSecondLifeTitle() << "\"";
params << " -program \"" << program_name << "\"";
}
LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << " " << params.str() << LL_ENDL;

View File

@ -2752,33 +2752,6 @@ void process_grant_godlike_powers(LLMessageSystem* msg, void**)
}
}
void load_url_local_file(const std::string& file_name)
{
if( gAgent.cameraMouselook() )
{
gAgent.changeCameraToDefault();
}
#if LL_DARWIN || LL_LINUX || LL_SOLARIS
// MBW -- If the Mac client is in fullscreen mode, it needs to go windowed so the browser will be visible.
if(gViewerWindow->mWindow->getFullscreen())
{
gViewerWindow->toggleFullscreen(TRUE);
}
#endif
// JC - system() blocks until IE has launched.
// spawn() runs asynchronously, but opens a command prompt.
// ShellExecute() just opens the damn file with the default
// web browser.
std::string full_path = "file:///";
full_path.append(gDirUtilp->getAppRODataDir());
full_path.append(gDirUtilp->getDirDelimiter());
full_path.append(file_name);
LLWeb::loadURL(full_path);
}
/*
class LLHaveCallingcard : public LLInventoryCollectFunctor
{
@ -5415,37 +5388,6 @@ class LLPromptShowURL : public view_listener_t
}
};
void callback_show_file(S32 option, void* data)
{
std::string* filenamep = (std::string*)data;
if (0 == option)
{
load_url_local_file(*filenamep);
}
delete filenamep;
}
class LLPromptShowFile : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
std::string param = userdata.asString();
std::string::size_type offset = param.find(",");
if (offset != param.npos)
{
std::string alert = param.substr(0, offset);
std::string file = param.substr(offset+1);
std::string* file_copy = new std::string(file);
gViewerWindow->alertXml(alert, callback_show_file, file_copy);
}
else
{
llinfos << "PromptShowFile invalid parameters! Expecting \"ALERT,FILE\"." << llendl;
}
return true;
}
};
class LLShowAgentProfile : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@ -7809,7 +7751,6 @@ void initialize_menus()
// Generic actions
addMenu(new LLShowFloater(), "ShowFloater");
addMenu(new LLPromptShowURL(), "PromptShowURL");
addMenu(new LLPromptShowFile(), "PromptShowFile");
addMenu(new LLShowAgentProfile(), "ShowAgentProfile");
addMenu(new LLShowAgentGroups(), "ShowAgentGroups");
addMenu(new LLToggleControl(), "ToggleControl");

View File

@ -50,7 +50,6 @@ void cleanup_menus();
void show_debug_menus(); // checks for if menus should be shown first.
void show_context_menu( S32 x, S32 y, MASK mask );
void show_build_mode_context_menu(S32 x, S32 y, MASK mask);
void load_url_local_file(const std::string& file_name);
BOOL enable_save_into_inventory(void*);
void handle_reset_view();
void handle_cut(void*);

View File

@ -51,7 +51,6 @@ class ViewerManifest(LLManifest):
self.path("*.pem")
self.path("*.ini")
self.path("*.xml")
self.path("*.vp")
self.path("*.db2")
# include the entire shaders directory recursively
@ -66,35 +65,35 @@ class ViewerManifest(LLManifest):
self.path("*.tga")
self.end_prefix("character")
# Include our fonts
if self.prefix(src="fonts"):
self.path("*.ttf")
self.path("*.txt")
self.end_prefix("fonts")
# skins
if self.prefix(src="skins"):
self.path("paths.xml")
# include the entire textures directory recursively
if self.prefix(src="*/textures"):
self.path("*.tga")
self.path("*.j2c")
self.path("*.jpg")
self.path("*.png")
self.path("textures.xml")
self.end_prefix("*/textures")
self.path("*/xui/*/*.xml")
self.path("*/*.xml")
# Local HTML files (e.g. loading screen)
if self.prefix(src="*/html"):
self.path("*.png")
self.path("*/*/*.html")
self.path("*/*/*.gif")
self.end_prefix("*/html")
self.end_prefix("skins")
self.path("lsl_guide.html")
# skins
if self.prefix(src="skins"):
self.path("paths.xml")
# include the entire textures directory recursively
if self.prefix(src="*/textures"):
self.path("*.tga")
self.path("*.j2c")
self.path("*.jpg")
self.path("*.png")
self.path("textures.xml")
self.end_prefix("*/textures")
self.path("*/xui/*/*.xml")
self.path("*/*.xml")
# Local HTML files (e.g. loading screen)
if self.prefix(src="*/html"):
self.path("*.png")
self.path("*/*/*.html")
self.path("*/*/*.gif")
self.end_prefix("*/html")
self.end_prefix("skins")
# Files in the newview/ directory
self.path("gpu_table.txt")
def login_channel(self):
@ -361,7 +360,7 @@ class WindowsManifest(ViewerManifest):
"%%INSTALL_FILES%%":self.nsi_file_commands(True),
"%%DELETE_FILES%%":self.nsi_file_commands(False)})
NSIS_path = 'C:\\Program Files\\NSIS\\makensis.exe'
NSIS_path = 'C:\\Program Files\\NSIS\\Unicode\\makensis.exe'
self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
# self.remove(self.dst_path_of(tempfile))
self.created_path(self.dst_path_of(installer_file))
@ -505,9 +504,6 @@ class DarwinManifest(ViewerManifest):
if not os.path.exists (self.src_path_of(dmg_template)):
dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
# To reinstate the linden scripting guide, add this to the list below:
# "lsl_guide.html":"Linden Scripting Language Guide.html",
for s,d in {self.get_dst_prefix():app_name + ".app",
os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
os.path.join(dmg_template, "background.jpg"): "background.jpg",

View File

@ -30,7 +30,7 @@
*/
//
// Usage: updater -url <url> [-name <window_title>] [-program <program_name>] [-silent]
// Usage: updater -url <url>
//
#include "linden_common.h"
@ -45,9 +45,6 @@ DWORD gTotalBytes = -1;
HWND gWindow = NULL;
WCHAR gProgress[256];
char* gUpdateURL;
char* gProgramName;
char* gProductName;
bool gIsSilent;
#if _DEBUG
FILE* logfile = 0;
@ -217,7 +214,7 @@ int WINAPI get_url_into_file(WCHAR *uri, char *path, int *cancelled)
fprintf(logfile,"Calling PeekMessage\n");
fflush(logfile);
#endif
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
@ -279,26 +276,14 @@ int parse_args(int argc, char **argv)
for (j = 1; j < argc; j++)
{
if ((!strcmp(argv[j], "-name")) && (++j < argc))
{
gProductName = argv[j];
}
else if ((!strcmp(argv[j], "-url")) && (++j < argc))
if ((!strcmp(argv[j], "-url")) && (++j < argc))
{
gUpdateURL = argv[j];
}
else if ((!strcmp(argv[j], "-program")) && (++j < argc))
{
gProgramName = argv[j];
}
else if (!strcmp(argv[j], "-silent"))
{
gIsSilent = true;
}
}
// If nothing was set, let the caller know.
if (!gProductName && !gProgramName && !gIsSilent && !gUpdateURL)
if (!gUpdateURL)
{
return 1;
}
@ -350,9 +335,6 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
}
gUpdateURL = NULL;
gProgramName = NULL;
gProductName = NULL;
gIsSilent = false;
/////////////////////////////////////////
//
@ -368,21 +350,10 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
// Parse the command line arguments
//
int parse_args_result = parse_args(argc, argv);
WCHAR window_title[2048];
if (gProductName)
{
mbstowcs(window_title, gProductName, 2048);
wcscat(window_title, L" Updater"); /* Flawfinder: ignore */
}
else
{
mbstowcs(window_title, "Second Life Updater", 2048);
}
WNDCLASSEX wndclassex = { 0 };
DEVMODE dev_mode = { 0 };
char update_exec_path[MAX_PATH]; /* Flawfinder: ignore */
char *ptr;
const int WINDOW_WIDTH = 250;
const int WINDOW_HEIGHT = 100;
@ -403,7 +374,7 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode);
gWindow = CreateWindowEx(NULL, win_class_name,
window_title,
L"Second Life Updater",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
@ -437,24 +408,13 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
L"Error", MB_OK);
return 1;
}
if (0 == GetTempFileNameA(update_exec_path, NULL, 0, update_exec_path))
{
MessageBox(gWindow, L"Problem with GetTempFileName()",
L"Error", MB_OK);
return 1;
}
// Hack hack hack
ptr = strrchr(update_exec_path, '.');
*(ptr + 1) = 'e';
*(ptr + 2) = 'x';
*(ptr + 3) = 'e';
*(ptr + 4) = 0;
strcat(update_exec_path, "Second_Life_Updater.exe");
WCHAR update_uri[4096];
mbstowcs(update_uri, gUpdateURL, 4096);
int success;
int cancelled;
int success = 0;
int cancelled = 0;
// Actually do the download
#if _DEBUG
@ -493,47 +453,24 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
return 1;
}
// Construct some parameters.
char params[2048]; /* Flawfinder: ignore */
if (gIsSilent && gProgramName)
{
_snprintf(params, sizeof(params), "/S /P=\"%s\"", gProgramName); /* Flawfinder: ignore */
params[2047] = '\0';
}
else if (gProgramName)
{
_snprintf(params, sizeof(params), "/P=\"%s\"", gProgramName); /* Flawfinder: ignore */
params[2047] = '\0';
}
else if (gIsSilent)
{
sprintf(params, "/S"); /* Flawfinder: ignore */
}
else
{
params[0] = '\0';
}
// TODO: Make updates silent (with /S to NSIS)
//char params[256]; /* Flawfinder: ignore */
//sprintf(params, "/S"); /* Flawfinder: ignore */
//MessageBox(gWindow,
// L"Updating Second Life.\n\nSecond Life will automatically start once the update is complete. This may take a minute...",
// L"Download Complete",
// MB_OK);
if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path, params,
if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path, NULL,
"C:\\", SW_SHOWDEFAULT))
{
// No shit: less than or equal to 32 means failure
MessageBox(gWindow, L"ShellExecute failed. Please try again later.", NULL, MB_OK);
// Less than or equal to 32 means failure
MessageBox(gWindow, L"Update failed. Please try again later.", NULL, MB_OK);
return 1;
}
if (gIsSilent && gProductName)
{
WCHAR message[2048];
WCHAR wproduct[2048];
mbstowcs(wproduct, gProductName, 2048);
wsprintf(message,
L"Updating %s. %s will automatically start once the update is complete. This may take a minute...",
wproduct, wproduct);
MessageBox(gWindow, message, L"Download Complete", MB_OK);
}
// Give installer some time to open a window
Sleep(1000);
return 0;
}