summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorGraham Madarasz <graham@lindenlab.com>2013-05-11 20:38:23 -0700
committerGraham Madarasz <graham@lindenlab.com>2013-05-11 20:38:23 -0700
commite1c1428569b03bbb20e7597ebec7d707151ce802 (patch)
tree69ca6d0fd05300346ddc14664b6d44bd4206a8b4 /indra/newview
parentf356d7eb9fd730f5f6f5a29fb0706e20876ad3bd (diff)
parentab4104d2d785199722f93d027e72af40d16f5703 (diff)
Merge viewer-dev-materials and bugfix in LLPanelFace::getState using material instead of mMaterial
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/CMakeLists.txt89
-rwxr-xr-xindra/newview/English.lproj/InfoPlist.strings4
-rwxr-xr-xindra/newview/Info-SecondLife.plist2
-rw-r--r--indra/newview/VIEWER_VERSION.txt1
-rwxr-xr-xindra/newview/app_settings/keywords.ini3
-rwxr-xr-xindra/newview/app_settings/settings.xml6
-rwxr-xr-xindra/newview/app_settings/shaders/class1/deferred/waterF.glsl4
-rwxr-xr-xindra/newview/app_settings/shaders/class1/environment/waterV.glsl12
-rwxr-xr-xindra/newview/icons/development/secondlife.icnsbin233026 -> 0 bytes
-rwxr-xr-xindra/newview/icons/development/secondlife.icobin77117 -> 0 bytes
-rwxr-xr-xindra/newview/icons/development/secondlife_128.pngbin17499 -> 0 bytes
-rwxr-xr-xindra/newview/icons/development/secondlife_16.pngbin3471 -> 0 bytes
-rwxr-xr-xindra/newview/icons/development/secondlife_256.BMPbin196662 -> 0 bytes
-rwxr-xr-xindra/newview/icons/development/secondlife_256.pngbin47952 -> 0 bytes
-rwxr-xr-xindra/newview/icons/development/secondlife_32.pngbin4649 -> 0 bytes
-rwxr-xr-xindra/newview/icons/development/secondlife_48.pngbin6190 -> 0 bytes
-rwxr-xr-xindra/newview/icons/development/secondlife_512.pngbin147689 -> 0 bytes
-rwxr-xr-xindra/newview/linux_tools/wrapper.sh4
-rwxr-xr-xindra/newview/llappviewer.cpp327
-rwxr-xr-xindra/newview/llappviewer.h11
-rwxr-xr-xindra/newview/llappviewerlinux.cpp4
-rwxr-xr-xindra/newview/llappviewerlinux.h2
-rwxr-xr-xindra/newview/llappviewerwin32.cpp4
-rwxr-xr-xindra/newview/llappviewerwin32.h2
-rwxr-xr-xindra/newview/lldrawable.h1
-rw-r--r--indra/newview/llhasheduniqueid.cpp55
-rw-r--r--indra/newview/llhasheduniqueid.h34
-rwxr-xr-xindra/newview/lllogininstance.cpp61
-rwxr-xr-xindra/newview/lllogininstance.h5
-rwxr-xr-xindra/newview/llpanelface.cpp8
-rwxr-xr-xindra/newview/llstartup.cpp2
-rwxr-xr-xindra/newview/llversioninfo.cpp55
-rwxr-xr-xindra/newview/llversioninfo.h1
-rwxr-xr-xindra/newview/llviewermessage.cpp135
-rwxr-xr-xindra/newview/llviewerobject.cpp35
-rwxr-xr-xindra/newview/llviewerobjectlist.cpp3
-rwxr-xr-xindra/newview/llviewerprecompiledheaders.h2
-rwxr-xr-xindra/newview/llviewerstatsrecorder.cpp10
-rwxr-xr-xindra/newview/llviewerwindow.cpp48
-rwxr-xr-xindra/newview/pipeline.cpp17
-rwxr-xr-xindra/newview/res/viewerRes.rc10
-rwxr-xr-xindra/newview/skins/default/colors.xml13
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_viewer.xml1
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_pathfinding_console.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/notifications.xml84
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_setup.xml13
-rwxr-xr-xindra/newview/skins/default/xui/en/strings.xml6
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_viewer.xml16
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_viewer.xml16
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_viewer.xml16
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_viewer.xml16
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_viewer.xml16
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_viewer.xml16
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_viewer.xml16
-rwxr-xr-xindra/newview/tests/lllogininstance_test.cpp27
-rwxr-xr-xindra/newview/tests/llversioninfo_test.cpp28
-rwxr-xr-xindra/newview/viewer_manifest.py113
57 files changed, 948 insertions, 408 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b8b52580ad..4c535a952f 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -87,6 +87,7 @@ include_directories(
${OPENAL_LIB_INCLUDE_DIRS}
${LIBS_PREBUILT_DIR}/include/collada/1.4
${LLAPPEARANCE_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}
)
include_directories(SYSTEM
@@ -301,6 +302,7 @@ set(viewer_SOURCE_FILES
llgroupiconctrl.cpp
llgrouplist.cpp
llgroupmgr.cpp
+ llhasheduniqueid.cpp
llhints.cpp
llhomelocationresponder.cpp
llhudeffect.cpp
@@ -882,6 +884,7 @@ set(viewer_HEADER_FILES
llgroupiconctrl.h
llgrouplist.h
llgroupmgr.h
+ llhasheduniqueid.h
llhints.h
llhomelocationresponder.h
llhudeffect.h
@@ -1249,6 +1252,18 @@ set(viewer_HEADER_FILES
source_group("CMake Rules" FILES ViewerInstall.cmake)
+add_custom_target(generate_viewer_version ALL
+ COMMAND echo "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}" > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+ COMMENT Generating viewer_version.txt for manifest processing
+ )
+
+set_source_files_properties(
+ llversioninfo.cpp tests/llversioninfo_test.cpp
+ PROPERTIES
+ DEPENDS generate_viewer_version # dummy dependency to force recompile every time
+ COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}" # see BuildVersion.cmake
+ )
+
if (DARWIN)
LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp)
@@ -1326,15 +1341,17 @@ if (WINDOWS)
# Replace the icons with the appropriate ones for the channel
# ('test' is the default)
set(ICON_PATH "test")
+ set(VIEWER_MACOSX_PHASE "d")
string(TOLOWER ${VIEWER_CHANNEL} channel_lower)
if(channel_lower MATCHES "^second life release")
set(ICON_PATH "release")
- elseif(channel_lower MATCHES "^second life beta viewer")
+ set(VIEWER_MACOSX_PHASE "f")
+ elseif(channel_lower MATCHES "^second life beta")
set(ICON_PATH "beta")
- elseif(channel_lower MATCHES "^second life development")
- set(ICON_PATH "development")
- elseif(channel_lower MATCHES "project")
+ set(VIEWER_MACOSX_PHASE "b")
+ elseif(channel_lower MATCHES "^second life project")
set(ICON_PATH "project")
+ set(VIEWER_MACOSX_PHASE "a")
endif()
message("Copying icons for ${ICON_PATH}")
execute_process(
@@ -1403,11 +1420,18 @@ if (WINDOWS)
set_source_files_properties(${viewer_RESOURCE_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE)
+ configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/res/viewerRes.rc
+ ${CMAKE_CURRENT_BINARY_DIR}/viewerRes.rc
+ )
set(viewer_RESOURCE_FILES
- res/viewerRes.rc
+ ${CMAKE_CURRENT_BINARY_DIR}/viewerRes.rc
${viewer_RESOURCE_FILES}
)
+ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/viewerRes.rc
+ PROPERTIES COMPILE_FLAGS "-I${CMAKE_CURRENT_SOURCE_DIR}/res"
+ )
+
SOURCE_GROUP("Resource Files" FILES ${viewer_RESOURCE_FILES})
if (NOT STANDALONE)
@@ -1710,10 +1734,13 @@ if (WINDOWS)
--configuration=${CMAKE_CFG_INTDIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
--grid=${GRID}
+ --channel=${VIEWER_CHANNEL}
+ --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ generate_viewer_version
stage_third_party_libs
${COPY_INPUT_DEPENDENCIES}
COMMENT "Performing viewer_manifest copy"
@@ -1772,21 +1799,23 @@ if (WINDOWS)
--build=${CMAKE_CURRENT_BINARY_DIR}
--buildtype=${CMAKE_BUILD_TYPE}
--channel=${VIEWER_CHANNEL}
+ --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
--configuration=${CMAKE_CFG_INTDIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
--grid=${GRID}
- --login_channel=${VIEWER_LOGIN_CHANNEL}
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
DEPENDS
${VIEWER_BINARY_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
${COPY_INPUT_DEPENDENCIES}
)
add_custom_target(package ALL DEPENDS
${CMAKE_CFG_INTDIR}/touched.bat
windows-setup-build-all
+ generate_viewer_version
)
# temporarily disable packaging of event_host until hg subrepos get
# sorted out on the parabuild cluster...
@@ -1838,6 +1867,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${viewer_LIBRARIES}
${BOOST_PROGRAM_OPTIONS_LIBRARY}
${BOOST_REGEX_LIBRARY}
+ ${BOOST_CONTEXT_LIBRARY}
${DBUSGLIB_LIBRARIES}
${OPENGL_LIBRARIES}
${FMODWRAPPER_LIBRARY} # must come after LLAudio
@@ -1859,14 +1889,11 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${LLAPPEARANCE_LIBRARIES}
)
-build_version(viewer)
-
set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
"Path to artwork files.")
-
if (LINUX)
- set(product SecondLife-${ARCH}-${viewer_VERSION})
+ set(product SecondLife-${ARCH}-${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION})
# These are the generated targets that are copied to package/
set(COPY_INPUT_DEPENDENCIES
@@ -1888,20 +1915,22 @@ if (LINUX)
--build=${CMAKE_CURRENT_BINARY_DIR}
--buildtype=${CMAKE_BUILD_TYPE}
--channel=${VIEWER_CHANNEL}
+ --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
--configuration=${CMAKE_CFG_INTDIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
--grid=${GRID}
--installer_name=${product}
- --login_channel=${VIEWER_LOGIN_CHANNEL}
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ generate_viewer_version
${COPY_INPUT_DEPENDENCIES}
)
if (PACKAGE)
endif (PACKAGE)
+
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched
COMMAND ${PYTHON_EXECUTABLE}
@@ -1915,9 +1944,12 @@ if (LINUX)
--configuration=${CMAKE_CFG_INTDIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
--grid=${GRID}
+ --channel=${VIEWER_CHANNEL}
+ --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
--source=${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ generate_viewer_version
${COPY_INPUT_DEPENDENCIES}
COMMENT "Performing viewer_manifest copy"
)
@@ -1934,18 +1966,24 @@ endif (LINUX)
if (DARWIN)
set(product "Second Life")
+
set_target_properties(
${VIEWER_BINARY_NAME}
PROPERTIES
OUTPUT_NAME "${product}"
- MACOSX_BUNDLE_INFO_STRING "info string - localize me"
+ MACOSX_BUNDLE_INFO_STRING "Second Life Viewer"
MACOSX_BUNDLE_ICON_FILE "secondlife.icns"
- MACOSX_BUNDLE_GUI_IDENTIFIER "Second Life"
- MACOSX_BUNDLE_LONG_VERSION_STRING "ververver"
+ MACOSX_BUNDLE_GUI_IDENTIFIER "com.secondlife.indra.viewer"
+ MACOSX_BUNDLE_LONG_VERSION_STRING "${VIEWER_CHANNEL} ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}"
MACOSX_BUNDLE_BUNDLE_NAME "Second Life"
- MACOSX_BUNDLE_SHORT_VERSION_STRING "asdf"
- MACOSX_BUNDLE_BUNDLE_VERSION "asdf"
- MACOSX_BUNDLE_COPYRIGHT "copyright linden lab 2007 - localize me and run me through a legal wringer"
+ MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}"
+ MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}"
+ MACOSX_BUNDLE_COPYRIGHT "Copyright © Linden Research, Inc. 2007"
+ )
+
+ configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/Info-SecondLife.plist"
+ "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app/Contents/Info.plist"
)
add_custom_command(
@@ -1960,11 +1998,16 @@ if (DARWIN)
--configuration=${CMAKE_CFG_INTDIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
--grid=${GRID}
+ --channel=${VIEWER_CHANNEL}
+ --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
--source=${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ DEPENDS
+ ${VIEWER_BINARY_NAME}
+ ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ generate_viewer_version
)
- add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-updater mac-crash-logger)
+ add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-crash-logger)
if (ENABLE_SIGNING)
set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}")
@@ -1974,6 +2017,7 @@ if (DARWIN)
if (PACKAGE)
add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
+ add_dependencies(package generate_viewer_version)
add_custom_command(
TARGET package POST_BUILD
@@ -1987,12 +2031,14 @@ if (DARWIN)
--configuration=${CMAKE_CFG_INTDIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
--grid=${GRID}
- --login_channel=${VIEWER_LOGIN_CHANNEL}
+ --channel=${VIEWER_CHANNEL}
+ --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
${SIGNING_SETTING}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ generate_viewer_version
)
endif (PACKAGE)
endif (DARWIN)
@@ -2017,12 +2063,11 @@ if (PACKAGE)
# *TODO: Generate these search dirs in the cmake files related to each binary.
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}")
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_crash_logger/${CMAKE_CFG_INTDIR}")
- list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_updater/${CMAKE_CFG_INTDIR}")
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}")
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/quicktime/${CMAKE_CFG_INTDIR}")
list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/webkit/${CMAKE_CFG_INTDIR}")
set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-darwin.tar.bz2")
- set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-updater mac-crash-logger")
+ set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-crash-logger")
set(VIEWER_LIB_GLOB "*.dylib")
endif (DARWIN)
if (LINUX)
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index 774ade714b..041b8cea0b 100755
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -2,6 +2,6 @@
CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 3.5.1.288888";
-CFBundleGetInfoString = "Second Life version 3.5.1.288888, Copyright 2004-2009 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version %%VERSION%%";
+CFBundleGetInfoString = "Second Life version %%VERSION%%, Copyright 2004 Linden Research, Inc.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 035d6cbe6c..a19844f11c 100755
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -60,7 +60,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
- <string>3.4.1.264760</string>
+ <string>${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
new file mode 100644
index 0000000000..444877d48f
--- /dev/null
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -0,0 +1 @@
+3.5.3
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index 6120f22ba4..f0d8b77afd 100755
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -92,6 +92,9 @@ PERMISSION_CHANGE_LINKS Passed to llRequestPermissions library function to req
PERMISSION_TRACK_CAMERA Passed to llRequestPermissions library function to request permission to track agent's camera
PERMISSION_CONTROL_CAMERA Passed to llRequestPermissions library function to request permission to change agent's camera
PERMISSION_TELEPORT Passed to llRequestPermissions library function to request permission to teleport agent
+SCRIPT_PERMISSION_SILENT_ESTATE_MANAGEMENT Passed to llRequestPermissions library function to request permission to silently modify estate access lists
+PERMISSION_OVERRIDE_ANIMATIONS Passed to llRequestPermissions library function to request permission to override animations on agent
+PERMISSION_RETURN_OBJECTS Passed to llRequestPermissions library function to request permission to return objects
DEBUG_CHANNEL Chat channel reserved for debug and error messages from scripts
PUBLIC_CHANNEL Chat channel that broadcasts to all nearby users
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 448fdaadba..2e53cf2da0 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2015,7 +2015,7 @@
<key>Value</key>
<string />
</map>
- <key>DebugAvatarAppearanceMessage</key>
+ <key>DebugAvatarAppearanceMessage</key>
<map>
<key>Comment</key>
<string>Dump a bunch of XML files when handling appearance messages</string>
@@ -2070,7 +2070,7 @@
<key>Value</key>
<integer>1</integer>
</map>
- <key>DebugAvatarCompositeBaked</key>
+ <key>DebugAvatarCompositeBaked</key>
<map>
<key>Comment</key>
<string>Colorize avatar meshes based on baked/composite state.</string>
@@ -11183,7 +11183,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <integer>0.0</integer>
+ <real>0.0</real>
</map>
<key>TextureFetchUpdateSkipLowPriority</key>
<map>
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
index de858b34b5..daa2fb390a 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -157,8 +157,8 @@ void main()
//spec *= shadow;
//color.rgb += spec * specular;
- //color.rgb = atmosTransport(color.rgb);
- //color.rgb = scaleSoftClip(color.rgb);
+ color.rgb = atmosTransport(color.rgb);
+ color.rgb = scaleSoftClip(color.rgb);
//color.a = spec * sunAngle2;
//wavef.z *= 0.1f;
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
index a2a567eff1..352cea7aaa 100755
--- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
@@ -49,35 +49,35 @@ float wave(vec2 v, float t, float f, vec2 d, float s)
void main()
{
//transform vertex
+ vec4 pos = vec4(position.xyz, 1.0);
mat4 modelViewProj = modelview_projection_matrix;
vec4 oPosition;
//get view vector
vec3 oEyeVec;
- oEyeVec.xyz = position.xyz-eyeVec;
+ oEyeVec.xyz = pos.xyz-eyeVec;
float d = length(oEyeVec.xy);
float ld = min(d, 2560.0);
- vec3 lpos = position;
- lpos.xy = eyeVec.xy + oEyeVec.xy/d*ld;
+ pos.xy = eyeVec.xy + oEyeVec.xy/d*ld;
view.xyz = oEyeVec;
d = clamp(ld/1536.0-0.5, 0.0, 1.0);
d *= d;
- oPosition = vec4(lpos, 1.0);
+ oPosition = vec4(position, 1.0);
oPosition.z = mix(oPosition.z, max(eyeVec.z*0.75, 0.0), d);
oPosition = modelViewProj * oPosition;
+
refCoord.xyz = oPosition.xyz + vec3(0,0,0.2);
//get wave position parameter (create sweeping horizontal waves)
- vec3 v = lpos;
+ vec3 v = pos.xyz;
v.x += (cos(v.x*0.08/*+time*0.01*/)+sin(v.y*0.02))*6.0;
//push position for further horizon effect.
- vec4 pos;
pos.xyz = oEyeVec.xyz*(waterHeight/oEyeVec.z);
pos.w = 1.0;
pos = modelview_matrix*pos;
diff --git a/indra/newview/icons/development/secondlife.icns b/indra/newview/icons/development/secondlife.icns
deleted file mode 100755
index 44f63d384c..0000000000
--- a/indra/newview/icons/development/secondlife.icns
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/development/secondlife.ico b/indra/newview/icons/development/secondlife.ico
deleted file mode 100755
index b53f23ae58..0000000000
--- a/indra/newview/icons/development/secondlife.ico
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_128.png b/indra/newview/icons/development/secondlife_128.png
deleted file mode 100755
index 9b9fe656fc..0000000000
--- a/indra/newview/icons/development/secondlife_128.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_16.png b/indra/newview/icons/development/secondlife_16.png
deleted file mode 100755
index 91493a033c..0000000000
--- a/indra/newview/icons/development/secondlife_16.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_256.BMP b/indra/newview/icons/development/secondlife_256.BMP
deleted file mode 100755
index 174b22319a..0000000000
--- a/indra/newview/icons/development/secondlife_256.BMP
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_256.png b/indra/newview/icons/development/secondlife_256.png
deleted file mode 100755
index 29ed40abdc..0000000000
--- a/indra/newview/icons/development/secondlife_256.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_32.png b/indra/newview/icons/development/secondlife_32.png
deleted file mode 100755
index 3b84f5ec77..0000000000
--- a/indra/newview/icons/development/secondlife_32.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_48.png b/indra/newview/icons/development/secondlife_48.png
deleted file mode 100755
index d2636d9d72..0000000000
--- a/indra/newview/icons/development/secondlife_48.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_512.png b/indra/newview/icons/development/secondlife_512.png
deleted file mode 100755
index 75f9b231f4..0000000000
--- a/indra/newview/icons/development/secondlife_512.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh
index 9e2e37c202..d8440eebf1 100755
--- a/indra/newview/linux_tools/wrapper.sh
+++ b/indra/newview/linux_tools/wrapper.sh
@@ -122,7 +122,7 @@ export SAVED_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH="$PWD/lib:${LD_LIBRARY_PATH}"
# Have to deal specially with gridargs.dat; typical contents look like:
-# --channel "Second Life Developer" --settings settings_developer.xml
+# --channel "Second Life Test" --settings settings_test.xml
# Simply embedding $(<etc/gridargs.dat) into a command line treats each of
# Second, Life and Developer as separate args -- no good. We need bash to
# process quotes using eval.
@@ -144,7 +144,7 @@ done
# therefore "${gridargs[@]}" entirely vanishes from the command line below,
# just as we want.
if ! $skip_gridargs ; then
-eval gridargs=("$(<etc/gridargs.dat)")
+ eval gridargs=("$(<etc/gridargs.dat)")
fi
# Run the program.
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index dc706147a9..9ac80dd6c0 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -30,7 +30,6 @@
// Viewer includes
#include "llversioninfo.h"
-#include "llversionviewer.h"
#include "llfeaturemanager.h"
#include "lluictrlfactory.h"
#include "lltexteditor.h"
@@ -123,6 +122,7 @@
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
+#include <boost/regex.hpp>
#if LL_WINDOWS
@@ -252,6 +252,7 @@ static LLAppViewerListener sAppViewerListener(LLAppViewer::instance);
// viewer.cpp - these are only used in viewer, should be easily moved.
#if LL_DARWIN
+const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.indra.viewer";
extern void init_apple_menu(const char* product);
#endif // LL_DARWIN
@@ -269,6 +270,20 @@ BOOL gShowObjectUpdates = FALSE;
BOOL gUseQuickTime = TRUE;
eLastExecEvent gLastExecEvent = LAST_EXEC_NORMAL;
+S32 gLastExecDuration = -1; // (<0 indicates unknown)
+
+#if LL_WINDOWS
+# define LL_PLATFORM_KEY "win"
+#elif LL_DARWIN
+# define LL_PLATFORM_KEY "mac"
+#elif LL_LINUX
+# define LL_PLATFORM_KEY "lnx"
+#elif LL_SOLARIS
+# define LL_PLATFORM_KEY "sol"
+#else
+# error "Unknown Platform"
+#endif
+const char* gPlatform = LL_PLATFORM_KEY;
LLSD gDebugInfo;
@@ -328,8 +343,9 @@ BOOL gLogoutInProgress = FALSE;
////////////////////////////////////////////////////////////
// Internal globals... that should be removed.
static std::string gArgs;
-
+const int MAX_MARKER_LENGTH = 1024;
const std::string MARKER_FILE_NAME("SecondLife.exec_marker");
+const std::string START_MARKER_FILE_NAME("SecondLife.start_marker");
const std::string ERROR_MARKER_FILE_NAME("SecondLife.error_marker");
const std::string LLERROR_MARKER_FILE_NAME("SecondLife.llerror_marker");
const std::string LOGOUT_MARKER_FILE_NAME("SecondLife.logout_marker");
@@ -642,7 +658,7 @@ LLTextureFetch* LLAppViewer::sTextureFetch = NULL;
LLAppViewer::LLAppViewer() :
mMarkerFile(),
- mLogoutMarkerFile(NULL),
+ mLogoutMarkerFile(),
mReportedCrash(false),
mNumSessions(0),
mPurgeCache(false),
@@ -672,6 +688,7 @@ LLAppViewer::LLAppViewer() :
gLoggedInTime.stop();
LLLoginInstance::instance().setUpdaterService(mUpdater.get());
+ LLLoginInstance::instance().setPlatformInfo(gPlatform, getOSInfo().getOSVersionString());
}
LLAppViewer::~LLAppViewer()
@@ -1780,7 +1797,7 @@ bool LLAppViewer::cleanup()
llinfos << "Cleaning up Objects" << llendflush;
LLViewerObject::cleanupVOClasses();
-
+
LLAvatarAppearance::cleanupClass();
LLAvatarAppearance::cleanupClass();
@@ -2108,7 +2125,7 @@ void errorCallback(const std::string &error_string)
LLError::crashAndLoop(error_string);
}
-bool LLAppViewer::initLogging()
+void LLAppViewer::initLogging()
{
//
// Set up logging defaults for the viewer
@@ -2122,17 +2139,46 @@ bool LLAppViewer::initLogging()
"SecondLife.old");
LLFile::remove(old_log_file);
- // Rename current log file to ".old"
+ // Get name of the log file
std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
"SecondLife.log");
+ /*
+ * Before touching any log files, compute the duration of the last run
+ * by comparing the ctime of the previous start marker file with the ctime
+ * of the last log file.
+ */
+ std::string start_marker_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, START_MARKER_FILE_NAME);
+ llstat start_marker_stat;
+ llstat log_file_stat;
+ if ( 0 == LLFile::stat(start_marker_file_name, &start_marker_stat)
+ && 0 == LLFile::stat(log_file, &log_file_stat)
+ )
+ {
+ int elapsed_seconds = log_file_stat.st_ctime - start_marker_stat.st_ctime;
+ // only report a last run time if the last viewer was the same version
+ // because this stat will be counted against this version
+ gLastExecDuration = markerIsSameVersion(start_marker_file_name) ? elapsed_seconds : -1;
+ }
+ else
+ {
+ // at least one of the LLFile::stat calls failed, so we can't compute the run time
+ gLastExecDuration = -1; // unknown
+ }
+
+ // Create a new start marker file for comparison with log file time for the next run
+ LLAPRFile start_marker_file ;
+ start_marker_file.open(start_marker_file_name, LL_APR_W);
+ if (start_marker_file.getFileHandle())
+ {
+ recordMarkerVersion(start_marker_file);
+ start_marker_file.close();
+ }
+
+ // Rename current log file to ".old"
LLFile::rename(log_file, old_log_file);
// Set the log file to SecondLife.log
-
LLError::logToFile(log_file);
-
- // *FIX:Mani no error handling here!
- return true;
}
bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key,
@@ -2707,15 +2753,11 @@ bool LLAppViewer::initConfiguration()
}
}
- if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
- {
//
// Check for another instance of the app running
//
-
mSecondInstance = anotherInstanceRunning();
-
- if (mSecondInstance)
+ if (mSecondInstance && !gSavedSettings.getBOOL("AllowMultipleViewers"))
{
std::ostringstream msg;
msg << LLTrans::getString("MBAlreadyRunning");
@@ -2728,12 +2770,6 @@ bool LLAppViewer::initConfiguration()
initMarkerFile();
- checkForCrash();
- }
- else
- {
- mSecondInstance = anotherInstanceRunning();
-
if (mSecondInstance)
{
// This is the second instance of SL. Turn off voice support,
@@ -2745,14 +2781,10 @@ bool LLAppViewer::initConfiguration()
disable_voice->setValue(LLSD(TRUE), DO_NOT_PERSIST);
}
}
-
- initMarkerFile();
-
- if(!mSecondInstance)
+ else
{
checkForCrash();
}
- }
// NextLoginLocation is set from the command line option
std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
@@ -2858,25 +2890,46 @@ namespace {
std::string notification_name;
void (*apply_callback)(LLSD const &, LLSD const &) = NULL;
+ /* Build up the notification name...
+ * it can be any of these, which are included here for the sake of grep:
+ * RequiredUpdateDownloadedDialog
+ * RequiredUpdateDownloadedVerboseDialog
+ * OtherChannelRequiredUpdateDownloadedDialog
+ * OtherChannelRequiredUpdateDownloadedVerbose
+ * DownloadBackgroundTip
+ * DownloadBackgroundDialog
+ * OtherChannelDownloadBackgroundTip
+ * OtherChannelDownloadBackgroundDialog
+ */
+ {
+ LL_DEBUGS("UpdaterService") << "data = ";
+ std::ostringstream data_dump;
+ LLSDSerialize::toNotation(data, data_dump);
+ LL_CONT << data_dump.str() << LL_ENDL;
+ }
+ if(data["channel"].asString() != LLVersionInfo::getChannel())
+ {
+ notification_name.append("OtherChannel");
+ }
if(data["required"].asBoolean())
{
if(LLStartUp::getStartupState() <= STATE_LOGIN_WAIT)
{
// The user never saw the progress bar.
apply_callback = &apply_update_ok_callback;
- notification_name = "RequiredUpdateDownloadedVerboseDialog";
+ notification_name += "RequiredUpdateDownloadedVerboseDialog";
}
else if(LLStartUp::getStartupState() < STATE_WORLD_INIT)
{
// The user is logging in but blocked.
apply_callback = &apply_update_ok_callback;
- notification_name = "RequiredUpdateDownloadedDialog";
+ notification_name += "RequiredUpdateDownloadedDialog";
}
else
{
// The user is already logged in; treat like an optional update.
apply_callback = &apply_update_callback;
- notification_name = "DownloadBackgroundTip";
+ notification_name += "DownloadBackgroundTip";
}
}
else
@@ -2886,16 +2939,26 @@ namespace {
{
// CHOP-262 we need to use a different notification
// method prior to login.
- notification_name = "DownloadBackgroundDialog";
+ notification_name += "DownloadBackgroundDialog";
}
else
{
- notification_name = "DownloadBackgroundTip";
+ notification_name += "DownloadBackgroundTip";
}
}
LLSD substitutions;
substitutions["VERSION"] = data["version"];
+ std::string new_channel = data["channel"].asString();
+ substitutions["NEW_CHANNEL"] = new_channel;
+ std::string info_url = data["info_url"].asString();
+ if ( !info_url.empty() )
+ {
+ substitutions["INFO_URL"] = info_url;
+ }
+ else
+ {
+ LL_WARNS("UpdaterService") << "no info url supplied - defaulting to hard coded release notes pattern" << LL_ENDL;
// truncate version at the rightmost '.'
std::string version_short(data["version"]);
@@ -2914,7 +2977,8 @@ namespace {
relnotes_url.setArg("[CHANNEL_URL]", channel_escaped.get());
relnotes_url.setArg("[RELEASE_NOTES_BASE_URL]", LLTrans::getString("RELEASE_NOTES_BASE_URL"));
- substitutions["RELEASE_NOTES_FULL_URL"] = relnotes_url.getString();
+ substitutions["INFO_URL"] = relnotes_url.getString();
+ }
LLNotificationsUtil::add(notification_name, substitutions, LLSD(), apply_callback);
}
@@ -2963,16 +3027,40 @@ void LLAppViewer::initUpdater()
std::string url = gSavedSettings.getString("UpdaterServiceURL");
std::string channel = LLVersionInfo::getChannel();
std::string version = LLVersionInfo::getVersion();
- std::string protocol_version = gSavedSettings.getString("UpdaterServiceProtocolVersion");
std::string service_path = gSavedSettings.getString("UpdaterServicePath");
U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
+ bool willing_to_test;
+ LL_DEBUGS("UpdaterService") << "channel " << channel << LL_ENDL;
+ static const boost::regex is_test_channel("\\bTest$");
+ if (boost::regex_search(channel, is_test_channel))
+ {
+ LL_INFOS("UpdaterService") << "Test build: overriding willing_to_test by sending testno" << LL_ENDL;
+ willing_to_test = false;
+ }
+ else
+ {
+ willing_to_test = gSavedSettings.getBOOL("UpdaterWillingToTest");
+ }
+ unsigned char unique_id[MD5HEX_STR_SIZE];
+ if ( ! llHashedUniqueID(unique_id) )
+ {
+ if ( willing_to_test )
+ {
+ LL_WARNS("UpdaterService") << "Unable to provide a unique id; overriding willing_to_test by sending testno" << LL_ENDL;
+ }
+ willing_to_test = false;
+ }
mUpdater->setAppExitCallback(boost::bind(&LLAppViewer::forceQuit, this));
- mUpdater->initialize(protocol_version,
- url,
+ mUpdater->initialize(url,
service_path,
channel,
- version);
+ version,
+ gPlatform,
+ getOSInfo().getOSVersionString(),
+ unique_id,
+ willing_to_test
+ );
mUpdater->setCheckPeriod(check_period);
mUpdater->setBandwidthLimit((int)gSavedSettings.getF32("UpdaterMaximumBandwidth") * (1024/8));
gSavedSettings.getControl("UpdaterMaximumBandwidth")->getSignal()->
@@ -3230,8 +3318,8 @@ void LLAppViewer::writeSystemInfo()
}
// Dump some debugging info
- LL_INFOS("SystemInfo") << LLTrans::getString("APP_NAME")
- << " version " << LLVersionInfo::getShortVersion() << LL_ENDL;
+ LL_INFOS("SystemInfo") << "Application: " << LLTrans::getString("APP_NAME") << LL_ENDL;
+ LL_INFOS("SystemInfo") << "Version: " << LLVersionInfo::getChannelAndVersion() << LL_ENDL;
// Dump the local time and time zone
time_t now;
@@ -3357,22 +3445,27 @@ void LLAppViewer::handleViewerCrash()
//we're already in a crash situation
if (gDirUtilp)
{
- std::string crash_file_name;
- if(gLLErrorActivated) crash_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LLERROR_MARKER_FILE_NAME);
- else crash_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,ERROR_MARKER_FILE_NAME);
- llinfos << "Creating crash marker file " << crash_file_name << llendl;
+ std::string crash_file_name = ( gLLErrorActivated )
+ ? gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LLERROR_MARKER_FILE_NAME)
+ : gDirUtilp->getExpandedFilename(LL_PATH_LOGS,ERROR_MARKER_FILE_NAME);
+ LL_INFOS("MarkerFile") << "Creating crash marker file " << crash_file_name << LL_ENDL;
LLAPRFile crash_file ;
crash_file.open(crash_file_name, LL_APR_W);
if (crash_file.getFileHandle())
{
LL_INFOS("MarkerFile") << "Created crash marker file " << crash_file_name << LL_ENDL;
+ recordMarkerVersion(crash_file);
}
else
{
LL_WARNS("MarkerFile") << "Cannot create error marker file " << crash_file_name << LL_ENDL;
}
}
+ else
+ {
+ LL_WARNS("MarkerFile") << "No gDirUtilp with which to create error marker file name" << LL_ENDL;
+ }
if (gMessageSystem && gDirUtilp)
{
@@ -3424,14 +3517,14 @@ bool LLAppViewer::anotherInstanceRunning()
// If the file is currently locked, that means another process is already running.
std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME);
- LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
+ LL_DEBUGS("MarkerFile") << "Checking marker file '"<< marker_file << "' for lock..." << LL_ENDL;
//Freeze case checks
if (LLAPRFile::isExist(marker_file, NULL, LL_APR_RB))
{
// File exists, try opening with write permissions
LLAPRFile outfile ;
- outfile.open(marker_file, LL_APR_WB);
+ outfile.open(marker_file, LL_APR_AB);
apr_file_t* fMarker = outfile.getFileHandle() ;
if (!fMarker)
{
@@ -3450,6 +3543,46 @@ bool LLAppViewer::anotherInstanceRunning()
return false;
}
+// static
+void LLAppViewer::recordMarkerVersion(LLAPRFile& marker_file)
+{
+ std::string marker_version(LLVersionInfo::getChannelAndVersion());
+ if ( marker_version.length() > MAX_MARKER_LENGTH )
+ {
+ LL_WARNS_ONCE("MarkerFile") << "Version length ("<< marker_version.length()<< ") greater than maximum: marker matching may be incorrect" << LL_ENDL;
+ }
+
+ // record the viewer version in the marker file
+ marker_file.write(marker_version.data(), marker_version.length());
+}
+
+bool LLAppViewer::markerIsSameVersion(const std::string& marker_name) const
+{
+ bool sameVersion = false;
+
+ std::string my_version(LLVersionInfo::getChannelAndVersion());
+ char marker_version[MAX_MARKER_LENGTH];
+ S32 marker_version_length;
+
+ LLAPRFile marker_file;
+ marker_file.open(marker_name, LL_APR_RB);
+ if (marker_file.getFileHandle())
+ {
+ marker_version_length = marker_file.read(marker_version, sizeof(marker_version));
+ LL_DEBUGS("MarkerFile") << "Compare markers: ";
+ std::string marker_string(marker_version, marker_version_length);
+ LL_CONT << "\n mine '" << my_version << "'"
+ << "\n marker '" << marker_string << "'"
+ << LL_ENDL;
+ if ( 0 == my_version.compare( 0, my_version.length(), marker_version, 0, marker_version_length ) )
+ {
+ sameVersion = true;
+ }
+ marker_file.close();
+ }
+ return sameVersion;
+}
+
void LLAppViewer::initMarkerFile()
{
//First, check for the existence of other files.
@@ -3472,27 +3605,55 @@ void LLAppViewer::initMarkerFile()
if (LLAPRFile::isExist(mMarkerFileName, NULL, LL_APR_RB) && !anotherInstanceRunning())
{
+ if ( markerIsSameVersion(mMarkerFileName) )
+ {
+ LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' found" << LL_ENDL;
gLastExecEvent = LAST_EXEC_FROZE;
- LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL;
+ }
+ else
+ {
+ LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' found, but versions did not match" << LL_ENDL;
+ }
}
if(LLAPRFile::isExist(logout_marker_file, NULL, LL_APR_RB))
{
+ if (markerIsSameVersion(logout_marker_file))
+ {
gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;
- LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+ LL_INFOS("MarkerFile") << "Logout crashed '"<< logout_marker_file << "', setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+ }
+ else
+ {
+ LL_INFOS("MarkerFile") << "Logout crash marker '"<< logout_marker_file << "' found, but versions did not match" << LL_ENDL;
+ }
LLAPRFile::remove(logout_marker_file);
}
if(LLAPRFile::isExist(llerror_marker_file, NULL, LL_APR_RB))
{
- if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
- else gLastExecEvent = LAST_EXEC_LLERROR_CRASH;
- LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+ if (markerIsSameVersion(llerror_marker_file))
+ {
+ gLastExecEvent = ( gLastExecEvent == LAST_EXEC_LOGOUT_FROZE )
+ ? LAST_EXEC_LOGOUT_CRASH : LAST_EXEC_LLERROR_CRASH;
+ LL_INFOS("MarkerFile") << "Last exec LLError '"<< llerror_marker_file << "' crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+ }
+ else
+ {
+ LL_INFOS("MarkerFile") << "Last exec LLError marker '"<< llerror_marker_file << "' found, but versions did not match" << LL_ENDL;
+ }
LLAPRFile::remove(llerror_marker_file);
}
if(LLAPRFile::isExist(error_marker_file, NULL, LL_APR_RB))
{
- if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
- else gLastExecEvent = LAST_EXEC_OTHER_CRASH;
- LL_INFOS("MarkerFile") << "Last exec crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+ if (markerIsSameVersion(error_marker_file))
+ {
+ gLastExecEvent = (gLastExecEvent == LAST_EXEC_LOGOUT_FROZE)
+ ? LAST_EXEC_LOGOUT_CRASH : LAST_EXEC_OTHER_CRASH;
+ LL_INFOS("MarkerFile") << "Last exec '"<< error_marker_file << "' crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+ }
+ else
+ {
+ LL_INFOS("MarkerFile") << "Last exec '"<< error_marker_file << "' marker found, but versions did not match" << LL_ENDL;
+ }
LLAPRFile::remove(error_marker_file);
}
@@ -3508,35 +3669,48 @@ void LLAppViewer::initMarkerFile()
if (s == APR_SUCCESS && mMarkerFile.getFileHandle())
{
- LL_DEBUGS("MarkerFile") << "Marker file created." << LL_ENDL;
+ LL_DEBUGS("MarkerFile") << "Marker file '"<< mMarkerFileName << "' created." << LL_ENDL;
+ if (APR_SUCCESS == apr_file_lock(mMarkerFile.getFileHandle(), APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE))
+ {
+ recordMarkerVersion(mMarkerFile);
+ LL_DEBUGS("MarkerFile") << "Marker file locked." << LL_ENDL;
}
else
{
- LL_INFOS("MarkerFile") << "Failed to create marker file." << LL_ENDL;
- return;
+ LL_INFOS("MarkerFile") << "Marker file cannot be locked." << LL_ENDL;
+ }
}
- if (apr_file_lock(mMarkerFile.getFileHandle(), APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS)
+ else
{
- mMarkerFile.close() ;
- LL_INFOS("MarkerFile") << "Marker file cannot be locked." << LL_ENDL;
- return;
+ LL_INFOS("MarkerFile") << "Failed to create marker file '"<< mMarkerFileName << "'." << LL_ENDL;
}
-
- LL_DEBUGS("MarkerFile") << "Marker file locked." << LL_ENDL;
}
void LLAppViewer::removeMarkerFile(bool leave_logout_marker)
{
- LL_DEBUGS("MarkerFile") << "removeMarkerFile()" << LL_ENDL;
+ LL_DEBUGS("MarkerFile") << "removeMarkerFile("<<leave_logout_marker<<")" << LL_ENDL;
if (mMarkerFile.getFileHandle())
{
+ LL_DEBUGS("MarkerFile") << "removeMarkerFile marker '"<<mMarkerFileName<<"'"<< LL_ENDL;
mMarkerFile.close() ;
LLAPRFile::remove( mMarkerFileName );
}
- if (mLogoutMarkerFile != NULL && !leave_logout_marker)
+ else
+ {
+ LL_WARNS("MarkerFile") << "removeMarkerFile marker '"<<mMarkerFileName<<"' not open"<< LL_ENDL;
+ }
+ if (!leave_logout_marker)
{
+ if (mLogoutMarkerFile.getFileHandle())
+ {
+ LL_DEBUGS("MarkerFile") << "removeMarkerFile marker '"<<mLogoutMarkerFileName<<"'"<< LL_ENDL;
+ mLogoutMarkerFile.close();
+ }
+ else
+ {
+ LL_WARNS("MarkerFile") << "removeMarkerFile marker '"<<mLogoutMarkerFileName<<"' not open"<< LL_ENDL;
+ }
LLAPRFile::remove( mLogoutMarkerFileName );
- mLogoutMarkerFile = NULL;
}
}
@@ -3584,7 +3758,7 @@ void LLAppViewer::requestQuit()
// Try to send metrics back to the grid
metricsSend(!gDisconnected);
-
+
// Try to send last batch of avatar rez metrics.
if (!gDisconnected && isAgentAvatarValid())
{
@@ -4756,16 +4930,15 @@ void LLAppViewer::sendLogoutRequest()
mLogoutMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LOGOUT_MARKER_FILE_NAME);
LLAPRFile outfile ;
- outfile.open(mLogoutMarkerFileName, LL_APR_W);
- mLogoutMarkerFile = outfile.getFileHandle() ;
- if (mLogoutMarkerFile)
+ mLogoutMarkerFile.open(mLogoutMarkerFileName, LL_APR_W);
+ if (mLogoutMarkerFile.getFileHandle())
{
- llinfos << "Created logout marker file " << mLogoutMarkerFileName << llendl;
- apr_file_close(mLogoutMarkerFile);
+ LL_INFOS("MarkerFile") << "Created logout marker file '"<< mLogoutMarkerFileName << "' " << mLogoutMarkerFileName << LL_ENDL;
+ recordMarkerVersion(outfile);
}
else
{
- llwarns << "Cannot create logout marker file " << mLogoutMarkerFileName << llendl;
+ LL_WARNS("MarkerFile") << "Cannot create logout marker file " << mLogoutMarkerFileName << LL_ENDL;
}
}
}
@@ -5163,16 +5336,8 @@ void LLAppViewer::handleLoginComplete()
void LLAppViewer::launchUpdater()
{
LLSD query_map = LLSD::emptyMap();
- // *TODO place os string in a global constant
-#if LL_WINDOWS
- query_map["os"] = "win";
-#elif LL_DARWIN
- query_map["os"] = "mac";
-#elif LL_LINUX
- query_map["os"] = "lnx";
-#elif LL_SOLARIS
- query_map["os"] = "sol";
-#endif
+ query_map["os"] = gPlatform;
+
// *TODO change userserver to be grid on both viewer and sim, since
// userserver no longer exists.
query_map["userserver"] = LLGridManager::getInstance()->getGridId();
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 08039100b3..d3a8cf24d9 100755
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -183,7 +183,7 @@ public:
protected:
virtual bool initWindow(); // Initialize the viewer's window.
- virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
+ virtual void initLogging(); // Initialize log files, logging system
virtual void initConsole() {}; // Initialize OS level debugging console.
virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
virtual bool initSLURLHandler();
@@ -217,7 +217,9 @@ private:
bool anotherInstanceRunning();
void initMarkerFile();
-
+ static void recordMarkerVersion(LLAPRFile& marker_file);
+ bool markerIsSameVersion(const std::string& marker_name) const;
+
void idle();
void idleShutdown();
// update avatar SLID and display name caches
@@ -237,7 +239,7 @@ private:
LLAPRFile mMarkerFile; // A file created to indicate the app is running.
std::string mLogoutMarkerFileName;
- apr_file_t* mLogoutMarkerFile; // A file created to indicate the app is running.
+ LLAPRFile mLogoutMarkerFile; // A file created to indicate the app is running.
LLOSInfo mSysOSInfo;
@@ -321,6 +323,9 @@ typedef enum
} eLastExecEvent;
extern eLastExecEvent gLastExecEvent; // llstartup
+extern S32 gLastExecDuration; ///< the duration of the previous run in seconds (<0 indicates unknown)
+
+extern const char* gPlatform;
extern U32 gFrameCount;
extern U32 gForegroundFrameCount;
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index 8695652168..5f98fd0a34 100755
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -440,7 +440,7 @@ bool LLAppViewerLinux::beingDebugged()
#endif
}
-bool LLAppViewerLinux::initLogging()
+void LLAppViewerLinux::initLogging()
{
// Remove the last stack trace, if any
// This file is no longer created, since the move to Google Breakpad
@@ -449,7 +449,7 @@ bool LLAppViewerLinux::initLogging()
gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
LLFile::remove(old_stack_file);
- return LLAppViewer::initLogging();
+ LLAppViewer::initLogging();
}
bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp)
diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h
index 58e5160180..b30977acb3 100755
--- a/indra/newview/llappviewerlinux.h
+++ b/indra/newview/llappviewerlinux.h
@@ -63,7 +63,7 @@ protected:
virtual bool restoreErrorTrap();
virtual void handleCrashReporting(bool reportFreeze);
- virtual bool initLogging();
+ virtual void initLogging();
virtual bool initParseCommandLine(LLCommandLineParser& clp);
virtual bool initSLURLHandler();
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index 82b93b52a2..0ba3669487 100755
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -509,9 +509,9 @@ bool LLAppViewerWin32::cleanup()
return result;
}
-bool LLAppViewerWin32::initLogging()
+void LLAppViewerWin32::initLogging()
{
- return LLAppViewer::initLogging();
+ LLAppViewer::initLogging();
}
void LLAppViewerWin32::initConsole()
diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h
index 67594aea48..d95174dd1d 100755
--- a/indra/newview/llappviewerwin32.h
+++ b/indra/newview/llappviewerwin32.h
@@ -44,7 +44,7 @@ public:
virtual bool cleanup();
protected:
- virtual bool initLogging(); // Override to clean stack_trace info.
+ virtual void initLogging(); // Override to clean stack_trace info.
virtual void initConsole(); // Initialize OS level debugging console.
virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware.
virtual bool initParseCommandLine(LLCommandLineParser& clp);
diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h
index 289abd3335..c3f6d77edc 100755
--- a/indra/newview/lldrawable.h
+++ b/indra/newview/lldrawable.h
@@ -286,7 +286,6 @@ public:
NEARBY_LIGHT = 0x00200000, // In gPipeline.mNearbyLightSet
BUILT = 0x00400000,
FORCE_INVISIBLE = 0x00800000, // stay invis until CLEAR_INVISIBLE is set (set of orphaned)
- CLEAR_INVISIBLE = 0x01000000, // clear FORCE_INVISIBLE next draw frame
REBUILD_SHADOW = 0x02000000,
HAS_ALPHA = 0x04000000,
RIGGED = 0x08000000,
diff --git a/indra/newview/llhasheduniqueid.cpp b/indra/newview/llhasheduniqueid.cpp
new file mode 100644
index 0000000000..03192d3e61
--- /dev/null
+++ b/indra/newview/llhasheduniqueid.cpp
@@ -0,0 +1,55 @@
+/**
+ * @file llhasheduniqueid.cpp
+ * @brief retrieves an obfuscated unique id for the system
+ *
+ * $LicenseInfo:firstyear=2013&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2013, 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$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llhasheduniqueid.h"
+#include "llviewernetwork.h"
+#include "lluuid.h"
+#include "llmachineid.h"
+
+bool llHashedUniqueID(unsigned char id[MD5HEX_STR_SIZE])
+{
+ bool idIsUnique = true;
+ LLMD5 hashed_unique_id;
+ unsigned char unique_id[MAC_ADDRESS_BYTES];
+ if ( LLUUID::getNodeID(unique_id)
+ || LLMachineID::getUniqueID(unique_id, sizeof(unique_id))
+ )
+ {
+ hashed_unique_id.update(unique_id, MAC_ADDRESS_BYTES);
+ hashed_unique_id.finalize();
+ hashed_unique_id.hex_digest((char*)id);
+ LL_INFOS_ONCE("AppInit") << "System ID " << id << LL_ENDL;
+ }
+ else
+ {
+ idIsUnique = false;
+ memcpy(id,"00000000000000000000000000000000", MD5HEX_STR_SIZE);
+ LL_WARNS_ONCE("AppInit") << "Failed to get an id; cannot uniquely identify this machine." << LL_ENDL;
+ }
+ return idIsUnique;
+}
+
diff --git a/indra/newview/llhasheduniqueid.h b/indra/newview/llhasheduniqueid.h
new file mode 100644
index 0000000000..8ef706c1f3
--- /dev/null
+++ b/indra/newview/llhasheduniqueid.h
@@ -0,0 +1,34 @@
+/**
+ * @file llhasheduniqueid.h
+ * @brief retrieves obfuscated but unique id for the system
+ *
+ * $LicenseInfo:firstyear=2013&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2013, 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$
+ */
+#ifndef LL_LLHASHEDUNIQUEID_H
+#define LL_LLHASHEDUNIQUEID_H
+#include "llmd5.h"
+
+/// Get an obfuscated identifier for this system
+bool llHashedUniqueID(unsigned char id[MD5HEX_STR_SIZE]);
+///< @returns true if the id is considered valid (if false, the id is all zeros)
+
+#endif // LL_LLHASHEDUNIQUEID_H
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 419641d23c..977c50682f 100755
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -30,7 +30,6 @@
// llcommon
#include "llevents.h"
-#include "llmd5.h"
#include "stringize.h"
// llmessage (!)
@@ -40,6 +39,7 @@
#include "lllogin.h"
// newview
+#include "llhasheduniqueid.h"
#include "llviewernetwork.h"
#include "llviewercontrol.h"
#include "llversioninfo.h"
@@ -202,7 +202,7 @@ MandatoryUpdateMachine::MandatoryUpdateMachine(LLLoginInstance & loginInstance,
void MandatoryUpdateMachine::start(void)
{
- llinfos << "starting manditory update machine" << llendl;
+ llinfos << "starting mandatory update machine" << llendl;
if(mUpdaterService.isChecking()) {
switch(mUpdaterService.getState()) {
@@ -488,6 +488,13 @@ LLLoginInstance::LLLoginInstance() :
mDispatcher.add("indeterminate", "", boost::bind(&LLLoginInstance::handleIndeterminate, this, _1));
}
+void LLLoginInstance::setPlatformInfo(const std::string platform,
+ const std::string platform_version)
+{
+ mPlatform = platform;
+ mPlatformVersion = platform_version;
+}
+
LLLoginInstance::~LLLoginInstance()
{
}
@@ -579,26 +586,22 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
// (re)initialize the request params with creds.
LLSD request_params = user_credential->getLoginParams();
- char hashed_unique_id_string[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
- LLMD5 hashed_unique_id;
- unsigned char unique_id[MAC_ADDRESS_BYTES];
- if(LLUUID::getNodeID(unique_id) == 0) {
- if(LLMachineID::getUniqueID(unique_id, sizeof(unique_id)) == 0) {
- llerrs << "Failed to get an id; cannot uniquely identify this machine." << llendl;
- }
+ unsigned char hashed_unique_id_string[MD5HEX_STR_SIZE];
+ if ( ! llHashedUniqueID(hashed_unique_id_string) )
+ {
+ llwarns << "Not providing a unique id in request params" << llendl;
}
- hashed_unique_id.update(unique_id, MAC_ADDRESS_BYTES);
- hashed_unique_id.finalize();
- hashed_unique_id.hex_digest(hashed_unique_id_string);
-
request_params["start"] = construct_start_string();
request_params["skipoptional"] = mSkipOptionalUpdate;
request_params["agree_to_tos"] = false; // Always false here. Set true in
request_params["read_critical"] = false; // handleTOSResponse
request_params["last_exec_event"] = mLastExecEvent;
- request_params["mac"] = hashed_unique_id_string;
- request_params["version"] = LLVersionInfo::getChannelAndVersion(); // Includes channel name
+ request_params["last_exec_duration"] = mLastExecDuration;
+ request_params["mac"] = (char*)hashed_unique_id_string;
+ request_params["version"] = LLVersionInfo::getVersion();
request_params["channel"] = LLVersionInfo::getChannel();
+ request_params["platform"] = mPlatform;
+ request_params["platform_version"] = mPlatformVersion;
request_params["id0"] = mSerialNumber;
request_params["host_id"] = gSavedSettings.getString("HostID");
request_params["extended_errors"] = true; // request message_id and message_args
@@ -784,20 +787,20 @@ void LLLoginInstance::updateApp(bool mandatory, const std::string& auth_msg)
LLSD payload;
payload["mandatory"] = mandatory;
-/*
- We're constructing one of the following 9 strings here:
- "DownloadWindowsMandatory"
- "DownloadWindowsReleaseForDownload"
- "DownloadWindows"
- "DownloadMacMandatory"
- "DownloadMacReleaseForDownload"
- "DownloadMac"
- "DownloadLinuxMandatory"
- "DownloadLinuxReleaseForDownload"
- "DownloadLinux"
-
- I've called them out explicitly in this comment so that they can be grepped for.
- */
+ /*
+ * We're constructing one of the following 9 strings here:
+ * "DownloadWindowsMandatory"
+ * "DownloadWindowsReleaseForDownload"
+ * "DownloadWindows"
+ * "DownloadMacMandatory"
+ * "DownloadMacReleaseForDownload"
+ * "DownloadMac"
+ * "DownloadLinuxMandatory"
+ * "DownloadLinuxReleaseForDownload"
+ * "DownloadLinux"
+ *
+ * I've called them out explicitly in this comment so that they can be grepped for.
+ */
std::string notification_name = "Download";
#if LL_WINDOWS
diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h
index 8b53431219..b0247da7c8 100755
--- a/indra/newview/lllogininstance.h
+++ b/indra/newview/lllogininstance.h
@@ -66,6 +66,8 @@ public:
void setSkipOptionalUpdate(bool state) { mSkipOptionalUpdate = state; }
void setSerialNumber(const std::string& sn) { mSerialNumber = sn; }
void setLastExecEvent(int lee) { mLastExecEvent = lee; }
+ void setLastExecDuration(S32 duration) { mLastExecDuration = duration; }
+ void setPlatformInfo(const std::string platform, const std::string platform_version);
void setNotificationsInterface(LLNotificationsInterface* ni) { mNotifications = ni; }
@@ -99,6 +101,9 @@ private:
F64 mTransferRate;
std::string mSerialNumber;
int mLastExecEvent;
+ S32 mLastExecDuration;
+ std::string mPlatform;
+ std::string mPlatformVersion;
UpdaterLauncherCallback mUpdaterLauncher;
LLEventDispatcher mDispatcher;
LLUpdaterService * mUpdaterService;
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 837b8687e8..b3b4932b65 100755
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -1608,9 +1608,9 @@ void LLPanelFace::getState()
// Shiny (specular)
F32 offset_x, offset_y, repeat_x, repeat_y, rot;
LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("shinytexture control");
- texture_ctrl->setImageAssetID(material->getSpecularID());
+ texture_ctrl->setImageAssetID(mMaterial->getSpecularID());
LLComboBox* combobox_shininess = getChild<LLComboBox>("combobox shininess");
- if (!material->getSpecularID().isNull())
+ if (!mMaterial->getSpecularID().isNull())
{
mMaterial->getSpecularOffset(offset_x,offset_y);
mMaterial->getSpecularRepeat(repeat_x,repeat_y);
@@ -1635,7 +1635,7 @@ void LLPanelFace::getState()
// Assert desired colorswatch color to match material AFTER updateShinyControls
// to avoid getting overwritten with the default on some UI state changes.
//
- if (!material->getSpecularID().isNull())
+ if (!mMaterial->getSpecularID().isNull())
{
getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(mMaterial->getSpecularLightColor());
getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(mMaterial->getSpecularLightColor(),TRUE);
@@ -1656,7 +1656,7 @@ void LLPanelFace::getState()
repeat_y *= 2.0f;
}
- rot = material->getNormalRotation();
+ rot = mMaterial->getNormalRotation();
getChild<LLUICtrl>("bumpyScaleU")->setValue(repeat_x);
getChild<LLUICtrl>("bumpyScaleV")->setValue(repeat_y);
getChild<LLUICtrl>("bumpyRot")->setValue(rot*RAD_TO_DEG);
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index f6da44d8a7..cff3a7e02a 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -26,6 +26,7 @@
#include "llviewerprecompiledheaders.h"
+#include "llappviewer.h"
#include "llstartup.h"
#if LL_WINDOWS
@@ -1032,6 +1033,7 @@ bool idle_startup()
login->setSerialNumber(LLAppViewer::instance()->getSerialNumber());
login->setLastExecEvent(gLastExecEvent);
+ login->setLastExecDuration(gLastExecDuration);
login->setUpdaterLauncher(boost::bind(&LLAppViewer::launchUpdater, LLAppViewer::instance()));
// This call to LLLoginInstance::connect() starts the
diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp
index 673d0c24cf..6a8fad0134 100755
--- a/indra/newview/llversioninfo.cpp
+++ b/indra/newview/llversioninfo.cpp
@@ -26,73 +26,76 @@
*/
#include "llviewerprecompiledheaders.h"
+#include <iostream>
+#include <sstream>
#include "llversioninfo.h"
-#include "llversionviewer.h"
+#if ! defined(LL_VIEWER_CHANNEL) \
+ || ! defined(LL_VIEWER_VERSION_MAJOR) \
+ || ! defined(LL_VIEWER_VERSION_MINOR) \
+ || ! defined(LL_VIEWER_VERSION_PATCH) \
+ || ! defined(LL_VIEWER_VERSION_BUILD)
+ #error "Channel or Version information is undefined"
+#endif
+
+const char * const LL_CHANNEL = LL_VIEWER_CHANNEL;
//
-// Set the version numbers in indra/llcommon/llversionviewer.h
+// Set the version numbers in indra/VIEWER_VERSION
//
//static
S32 LLVersionInfo::getMajor()
{
- return LL_VERSION_MAJOR;
+ return LL_VIEWER_VERSION_MAJOR;
}
//static
S32 LLVersionInfo::getMinor()
{
- return LL_VERSION_MINOR;
+ return LL_VIEWER_VERSION_MINOR;
}
//static
S32 LLVersionInfo::getPatch()
{
- return LL_VERSION_PATCH;
+ return LL_VIEWER_VERSION_PATCH;
}
//static
S32 LLVersionInfo::getBuild()
{
- return LL_VERSION_BUILD;
+ return LL_VIEWER_VERSION_BUILD;
}
//static
const std::string &LLVersionInfo::getVersion()
{
static std::string version("");
-
if (version.empty())
{
- // cache the version string
std::ostringstream stream;
- stream << LL_VERSION_MAJOR << "."
- << LL_VERSION_MINOR << "."
- << LL_VERSION_PATCH << "."
- << LL_VERSION_BUILD;
+ stream << LLVersionInfo::getShortVersion() << "." << LLVersionInfo::getBuild();
+ // cache the version string
version = stream.str();
}
-
return version;
}
//static
const std::string &LLVersionInfo::getShortVersion()
{
- static std::string version("");
-
- if (version.empty())
+ static std::string short_version("");
+ if(short_version.empty())
{
// cache the version string
std::ostringstream stream;
- stream << LL_VERSION_MAJOR << "."
- << LL_VERSION_MINOR << "."
- << LL_VERSION_PATCH;
- version = stream.str();
+ stream << LL_VIEWER_VERSION_MAJOR << "."
+ << LL_VIEWER_VERSION_MINOR << "."
+ << LL_VIEWER_VERSION_PATCH;
+ short_version = stream.str();
}
-
- return version;
+ return short_version;
}
namespace
@@ -100,7 +103,7 @@ namespace
/// Storage of the channel name the viewer is using.
// The channel name is set by hardcoded constant,
// or by calling LLVersionInfo::resetChannel()
- std::string sWorkingChannelName(LL_CHANNEL);
+ std::string sWorkingChannelName(LL_VIEWER_CHANNEL);
// Storage for the "version and channel" string.
// This will get reset too.
@@ -113,11 +116,7 @@ const std::string &LLVersionInfo::getChannelAndVersion()
if (sVersionChannel.empty())
{
// cache the version string
- std::ostringstream stream;
- stream << LLVersionInfo::getChannel()
- << " "
- << LLVersionInfo::getVersion();
- sVersionChannel = stream.str();
+ sVersionChannel = LLVersionInfo::getChannel() + " " + LLVersionInfo::getVersion();
}
return sVersionChannel;
diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h
index 6f64544f3b..077105cae8 100755
--- a/indra/newview/llversioninfo.h
+++ b/indra/newview/llversioninfo.h
@@ -29,6 +29,7 @@
#define LL_LLVERSIONINFO_H
#include <string>
+#include "stdtypes.h"
///
/// This API provides version information for the viewer. This
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 3c0d6189ac..ace16396db 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -163,7 +163,11 @@ const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] =
"ChangePermissions",
"TrackYourCamera",
"ControlYourCamera",
- "TeleportYourAgent"
+ "TeleportYourAgent",
+ "JoinAnExperience",
+ "SilentlyManageEstateAccess",
+ "OverrideYourAnimations",
+ "ScriptReturnObjects"
};
const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
@@ -179,7 +183,11 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
FALSE, // ChangePermissions
FALSE, // TrackYourCamera,
FALSE, // ControlYourCamera
- FALSE // TeleportYourAgent
+ FALSE, // TeleportYourAgent
+ FALSE, // JoinAnExperience
+ FALSE, // SilentlyManageEstateAccess
+ FALSE, // OverrideYourAnimations
+ FALSE, // ScriptReturnObjects
};
bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
@@ -6282,6 +6290,19 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp
}
}
+void script_question_mute(const LLUUID& item_id, const std::string& object_name);
+
+bool unknown_script_question_cb(const LLSD& notification, const LLSD& response)
+{
+ // Only care if they muted the object here.
+ if ( response["Mute"] ) // mute
+ {
+ LLUUID task_id = notification["payload"]["task_id"].asUUID();
+ script_question_mute(task_id,notification["payload"]["object_name"].asString());
+ }
+ return false;
+}
+
bool script_question_cb(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
@@ -6332,34 +6353,42 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)
if ( response["Mute"] ) // mute
{
- LLMuteList::getInstance()->add(LLMute(item_id, notification["payload"]["object_name"].asString(), LLMute::OBJECT));
-
- // purge the message queue of any previously queued requests from the same source. DEV-4879
- class OfferMatcher : public LLNotificationsUI::LLScreenChannel::Matcher
- {
- public:
- OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
- bool matches(const LLNotificationPtr notification) const
- {
- if (notification->getName() == "ScriptQuestionCaution"
- || notification->getName() == "ScriptQuestion")
- {
- return (notification->getPayload()["item_id"].asUUID() == blocked_id);
- }
- return false;
- }
- private:
- const LLUUID& blocked_id;
- };
-
- LLNotificationsUI::LLChannelManager::getInstance()->killToastsFromChannel(LLUUID(
- gSavedSettings.getString("NotificationChannelUUID")), OfferMatcher(item_id));
+ script_question_mute(task_id,notification["payload"]["object_name"].asString());
}
return false;
}
+
+void script_question_mute(const LLUUID& task_id, const std::string& object_name)
+{
+ LLMuteList::getInstance()->add(LLMute(task_id, object_name, LLMute::OBJECT));
+
+ // purge the message queue of any previously queued requests from the same source. DEV-4879
+ class OfferMatcher : public LLNotificationsUI::LLScreenChannel::Matcher
+ {
+ public:
+ OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
+ bool matches(const LLNotificationPtr notification) const
+ {
+ if (notification->getName() == "ScriptQuestionCaution"
+ || notification->getName() == "ScriptQuestion"
+ || notification->getName() == "UnknownScriptQuestion")
+ {
+ return (notification->getPayload()["task_id"].asUUID() == blocked_id);
+ }
+ return false;
+ }
+ private:
+ const LLUUID& blocked_id;
+ };
+
+ LLNotificationsUI::LLChannelManager::getInstance()->killToastsFromChannel(LLUUID(
+ gSavedSettings.getString("NotificationChannelUUID")), OfferMatcher(task_id));
+}
+
static LLNotificationFunctorRegistration script_question_cb_reg_1("ScriptQuestion", script_question_cb);
static LLNotificationFunctorRegistration script_question_cb_reg_2("ScriptQuestionCaution", script_question_cb);
+static LLNotificationFunctorRegistration unknown_script_question_cb_reg("UnknownScriptQuestion", unknown_script_question_cb);
void process_script_question(LLMessageSystem *msg, void **user_data)
{
@@ -6424,7 +6453,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
LLSD args;
args["OBJECTNAME"] = object_name;
args["NAME"] = LLCacheName::cleanFullName(owner_name);
-
+ S32 known_questions = 0;
BOOL has_not_only_debit = questions ^ LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_DEBIT];
// check the received permission flags against each permission
for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
@@ -6432,7 +6461,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
if (questions & LSCRIPTRunTimePermissionBits[i])
{
count++;
-
+ known_questions |= LSCRIPTRunTimePermissionBits[i];
// check whether permission question should cause special caution dialog
caution |= (SCRIPT_QUESTION_IS_CAUTION[i]);
@@ -6442,32 +6471,46 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
script_question += " " + LLTrans::getString(SCRIPT_QUESTIONS[i]) + "\n";
}
}
+
args["QUESTIONS"] = script_question;
- LLSD payload;
- payload["task_id"] = taskid;
- payload["item_id"] = itemid;
- payload["sender"] = sender.getIPandPort();
- payload["questions"] = questions;
- payload["object_name"] = object_name;
- payload["owner_name"] = owner_name;
-
- // check whether cautions are even enabled or not
- if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
+ if (known_questions != questions)
+ { // This is in addition to the normal dialog.
+ LLSD payload;
+ payload["task_id"] = taskid;
+ payload["item_id"] = itemid;
+ payload["object_name"] = object_name;
+
+ args["DOWNLOADURL"] = LLTrans::getString("ViewerDownloadURL");
+ LLNotificationsUtil::add("UnknownScriptQuestion",args,payload);
+ }
+
+ if (known_questions)
{
- if (caution)
+ LLSD payload;
+ payload["task_id"] = taskid;
+ payload["item_id"] = itemid;
+ payload["sender"] = sender.getIPandPort();
+ payload["questions"] = known_questions;
+ payload["object_name"] = object_name;
+ payload["owner_name"] = owner_name;
+
+ // check whether cautions are even enabled or not
+ if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
{
- args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : "";
+ if (caution)
+ {
+ args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : "";
+ }
+ // display the caution permissions prompt
+ LLNotificationsUtil::add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload);
+ }
+ else
+ {
+ // fall back to default behavior if cautions are entirely disabled
+ LLNotificationsUtil::add("ScriptQuestion", args, payload);
}
- // display the caution permissions prompt
- LLNotificationsUtil::add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload);
- }
- else
- {
- // fall back to default behavior if cautions are entirely disabled
- LLNotificationsUtil::add("ScriptQuestion", args, payload);
}
-
}
}
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 548fb236d6..d56df96c44 100755
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2160,7 +2160,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
if (mDrawable->isState(LLDrawable::FORCE_INVISIBLE) && !mOrphaned)
{
// lldebugs << "Clearing force invisible: " << mID << ":" << getPCodeString() << ":" << getPositionAgent() << llendl;
- mDrawable->setState(LLDrawable::CLEAR_INVISIBLE);
+ mDrawable->clearState(LLDrawable::FORCE_INVISIBLE);
+ gPipeline.markRebuild( mDrawable, LLDrawable::REBUILD_ALL, TRUE );
}
}
@@ -4149,7 +4150,7 @@ S32 LLViewerObject::setTESpecularMapCore(const U8 te, LLViewerTexture *image)
if (mat)
{
mat->setSpecularID(uuid);
- }
+ }
}
changeTESpecularMap(te, image);
return retval;
@@ -4396,11 +4397,11 @@ S32 LLViewerObject::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID
// Kitty would like to know if this is necessary?
// Since we should get a setTEMaterialParams that does it anyway?
//
- setChanged(TEXTURE);
+ setChanged(TEXTURE);
if (mDrawable.notNull())
- {
- gPipeline.markTextured(mDrawable);
- }
+ {
+ gPipeline.markTextured(mDrawable);
+ }
return retval;
}
@@ -4414,19 +4415,19 @@ S32 LLViewerObject::setTEMaterialParams(const U8 te, const LLMaterialPtr pMateri
return 0;
}
- retval = LLPrimitive::setTEMaterialParams(te, pMaterialParams);
- LL_DEBUGS("Material") << "Changing material params for te " << (S32)te
- << ", object " << mID
- << " (" << retval << ")"
- << LL_ENDL;
- setTENormalMap(te, tep->getMaterialParams()->getNormalID());
- setTESpecularMap(te, tep->getMaterialParams()->getSpecularID());
+ retval = LLPrimitive::setTEMaterialParams(te, pMaterialParams);
+ LL_DEBUGS("Material") << "Changing material params for te " << (S32)te
+ << ", object " << mID
+ << " (" << retval << ")"
+ << LL_ENDL;
+ setTENormalMap(te, tep->getMaterialParams()->getNormalID());
+ setTESpecularMap(te, tep->getMaterialParams()->getSpecularID());
- setChanged(TEXTURE);
+ setChanged(TEXTURE);
if (mDrawable.notNull())
- {
- gPipeline.markTextured(mDrawable);
- }
+ {
+ gPipeline.markTextured(mDrawable);
+ }
return retval;
}
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 11d34ad084..caacf26cb3 100755
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -2065,8 +2065,9 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
if (childp->mDrawable.notNull())
{
// Make the drawable visible again and set the drawable parent
- childp->mDrawable->setState(LLDrawable::CLEAR_INVISIBLE);
+ childp->mDrawable->clearState(LLDrawable::FORCE_INVISIBLE);
childp->setDrawableParent(objectp->mDrawable); // LLViewerObjectList::findOrphans()
+ gPipeline.markRebuild( childp->mDrawable, LLDrawable::REBUILD_ALL, TRUE );
}
// Make certain particles, icon and HUD aren't hidden
diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h
index 0316f79973..a565005f30 100755
--- a/indra/newview/llviewerprecompiledheaders.h
+++ b/indra/newview/llviewerprecompiledheaders.h
@@ -33,8 +33,6 @@
// in viewer.
// It is used to precompile headers for improved build speed.
-#include <boost/coroutine/coroutine.hpp>
-
#include "linden_common.h"
// Work around stupid Microsoft STL warning
diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp
index 3ff2dfa4fe..2b3e293229 100755
--- a/indra/newview/llviewerstatsrecorder.cpp
+++ b/indra/newview/llviewerstatsrecorder.cpp
@@ -166,6 +166,7 @@ void LLViewerStatsRecorder::recordRequestCacheMissesEvent(S32 count)
void LLViewerStatsRecorder::writeToLog( F32 interval )
{
+ size_t data_size = 0;
F64 delta_time = LLTimer::getTotalSeconds() - mLastSnapshotTime;
S32 total_objects = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures;
@@ -216,10 +217,10 @@ void LLViewerStatsRecorder::writeToLog( F32 interval )
<< "Texture Fetch bps\t"
<< "\n";
- size_t data_size = data_msg.str().size();
- if ( data_size != fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ))
+ data_size = data_msg.str().size();
+ if (fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ) != data_size)
{
- llwarns << "Unable to write complete column headings to " << STATS_FILE_NAME << llendl;
+ llwarns << "failed to write full headers to " << STATS_FILE_NAME << llendl;
}
}
else
@@ -253,11 +254,12 @@ void LLViewerStatsRecorder::writeToLog( F32 interval )
<< "\t" << (mTextureFetchSize * 8 / delta_time)
<< "\n";
- size_t data_size = data_msg.str().size();
+ data_size = data_msg.str().size();
if ( data_size != fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ))
{
llwarns << "Unable to write complete column data to " << STATS_FILE_NAME << llendl;
}
+
clearStats();
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 0910b7536d..fe4d5b3e4d 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -34,6 +34,7 @@
#include <fstream>
#include <algorithm>
#include <boost/lambda/core.hpp>
+#include <boost/regex.hpp>
#include "llagent.h"
#include "llagentcamera.h"
@@ -2249,29 +2250,42 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid)
// no l10n problem because channel is always an english string
std::string channel = LLVersionInfo::getChannel();
- bool isProject = (channel.find("Project") != std::string::npos);
+ static const boost::regex is_beta_channel("\\bBeta\\b");
+ static const boost::regex is_project_channel("\\bProject\\b");
+ static const boost::regex is_test_channel("\\bTest$");
// god more important than project, proj more important than grid
- if(god_mode && LLGridManager::getInstance()->isInProductionGrid())
+ if ( god_mode )
{
- new_bg_color = LLUIColorTable::instance().getColor( "MenuBarGodBgColor" );
- }
- else if(god_mode && !LLGridManager::getInstance()->isInProductionGrid())
- {
- new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionGodBgColor" );
+ if ( LLGridManager::getInstance()->isInProductionGrid() )
+ {
+ new_bg_color = LLUIColorTable::instance().getColor( "MenuBarGodBgColor" );
+ }
+ else
+ {
+ new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionGodBgColor" );
+ }
}
- else if (!god_mode && isProject)
+ else if (boost::regex_search(channel, is_beta_channel))
+ {
+ new_bg_color = LLUIColorTable::instance().getColor( "MenuBarBetaBgColor" );
+ }
+ else if (boost::regex_search(channel, is_project_channel))
{
new_bg_color = LLUIColorTable::instance().getColor( "MenuBarProjectBgColor" );
- }
- else if(!god_mode && !LLGridManager::getInstance()->isInProductionGrid())
- {
- new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" );
- }
- else
- {
- new_bg_color = LLUIColorTable::instance().getColor( "MenuBarBgColor" );
- }
+ }
+ else if (boost::regex_search(channel, is_test_channel))
+ {
+ new_bg_color = LLUIColorTable::instance().getColor( "MenuBarTestBgColor" );
+ }
+ else if(!LLGridManager::getInstance()->isInProductionGrid())
+ {
+ new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" );
+ }
+ else
+ {
+ new_bg_color = LLUIColorTable::instance().getColor( "MenuBarBgColor" );
+ }
if(gMenuBarView)
{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index a0242ce727..42a47c694f 100755
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -515,12 +515,12 @@ void LLPipeline::init()
else
{
setAllRenderTypes(); // By default, all rendering types start enabled
- // Don't turn on ground when this is set
- // Mac Books with intel 950s need this
- if(!gSavedSettings.getBOOL("RenderGround"))
- {
- toggleRenderType(RENDER_TYPE_GROUND);
- }
+ // Don't turn on ground when this is set
+ // Mac Books with intel 950s need this
+ if(!gSavedSettings.getBOOL("RenderGround"))
+ {
+ toggleRenderType(RENDER_TYPE_GROUND);
+ }
}
// make sure RenderPerformanceTest persists (hackity hack hack)
@@ -3397,11 +3397,6 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera)
{
drawablep->setVisible(camera, NULL, FALSE);
}
- else if (drawablep->isState(LLDrawable::CLEAR_INVISIBLE))
- {
- // clear invisible flag here to avoid single frame glitch
- drawablep->clearState(LLDrawable::FORCE_INVISIBLE|LLDrawable::CLEAR_INVISIBLE);
- }
}
if (LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD)
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 471a896019..8587243791 100755
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -135,8 +135,8 @@ TOOLNO CURSOR "llno.cur"
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,4,1,264760
- PRODUCTVERSION 3,4,1,264760
+ FILEVERSION ${VIEWER_VERSION_MAJOR},${VIEWER_VERSION_MINOR},${VIEWER_VERSION_PATCH},${VIEWER_VERSION_REVISION}
+ PRODUCTVERSION ${VIEWER_VERSION_MAJOR},${VIEWER_VERSION_MINOR},${VIEWER_VERSION_PATCH},${VIEWER_VERSION_REVISION}
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -153,12 +153,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Linden Lab"
VALUE "FileDescription", "Second Life"
- VALUE "FileVersion", "3.4.1.264760"
+ VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
VALUE "InternalName", "Second Life"
- VALUE "LegalCopyright", "Copyright � 2001-2010, Linden Research, Inc."
+ VALUE "LegalCopyright", "Copyright � 2001, Linden Research, Inc."
VALUE "OriginalFilename", "SecondLife.exe"
VALUE "ProductName", "Second Life"
- VALUE "ProductVersion", "3.4.1.264760"
+ VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
END
END
BLOCK "VarFileInfo"
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index af435685d4..a9176595c7 100755
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -102,6 +102,9 @@
name="MdBlue"
value=".07 .38 .51 1" />
<color
+ name="DkBlue"
+ value=".06 .06 .3 1" />
+ <color
name="LtRed"
value="1 0.2 0.2 1" />
<color
@@ -111,6 +114,9 @@
name="Red_80"
value="1 0 0 0.8" />
<color
+ name="DkRed"
+ value="0.3 0.06 0.06 1" />
+ <color
name="Green_80"
value="0 1 0 0.8" />
<color
@@ -839,9 +845,14 @@
name="ChatTimestampColor"
reference="White" />
<color
+ name="MenuBarBetaBgColor"
+ reference="DkBlue" />
+ <color
name="MenuBarProjectBgColor"
reference="MdBlue" />
-
+ <color
+ name="MenuBarTestBgColor"
+ reference="DkRed" />
<color
name="MeshImportTableNormalColor"
value="1 1 1 1"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 211933a186..47d9fec352 100755
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -116,7 +116,6 @@
<menu_item_call label="Kaufen" name="Menu Object Buy"/>
<menu_item_call label="Nehmen" name="Menu Object Take"/>
<menu_item_call label="Kopie nehmen" name="Take Copy"/>
- <menu_item_call label="Objekt wieder in meinem Inventar speichern" name="Save Object Back to My Inventory"/>
<menu_item_call label="Wieder in Objektinhalt speichern" name="Save Object Back to Object Contents"/>
<menu_item_call label="Objekt zurückgeben" name="Return Object back to Owner"/>
</menu>
diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
index 79f2027c31..2629313069 100755
--- a/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
@@ -152,7 +152,7 @@
</text>
<check_box
height="19"
- label="Test"
+ label="World"
layout="topleft"
name="show_world"
top_pad="4"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 105bef7321..9e582cf0de 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3480,7 +3480,7 @@ Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
name="RequiredUpdateDownloadedVerboseDialog"
type="alertmodal">
We have downloaded a required software update.
-Version [VERSION]
+Version [VERSION] [[INFO_URL] Information about this update]
We must restart [APP_NAME] to install the update.
<tag>confirm</tag>
@@ -3494,6 +3494,66 @@ We must restart [APP_NAME] to install the update.
name="RequiredUpdateDownloadedDialog"
type="alertmodal">
We must restart [APP_NAME] to install the update.
+[[INFO_URL] Information about this update]
+ <tag>confirm</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="notify.tga"
+ name="OtherChannelDownloadBackgroundTip"
+ type="notify">
+We have downloaded an update to your [APP_NAME] installation.
+Version [VERSION]
+This experimental viewer has been replaced by a [NEW_CHANNEL] viewer;
+see [[INFO_URL] for details about this update]
+ <tag>confirm</tag>
+ <usetemplate
+ name="okcancelbuttons"
+ notext="Later..."
+ yestext="Install now and restart [APP_NAME]"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="OtherChannelDownloadBackgroundDialog"
+ type="alertmodal">
+We have downloaded an update to your [APP_NAME] installation.
+Version [VERSION]
+This experimental viewer has been replaced by a [NEW_CHANNEL] viewer;
+see [[INFO_URL] Information about this update]
+ <tag>confirm</tag>
+ <usetemplate
+ name="okcancelbuttons"
+ notext="Later..."
+ yestext="Install now and restart [APP_NAME]"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="OtherChannelRequiredUpdateDownloadedVerboseDialog"
+ type="alertmodal">
+We have downloaded a required software update.
+Version [VERSION]
+This experimental viewer has been replaced by a [NEW_CHANNEL] viewer;
+see [[INFO_URL] Information about this update]
+
+We must restart [APP_NAME] to install the update.
+ <tag>confirm</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="OtherChannelRequiredUpdateDownloadedDialog"
+ type="alertmodal">
+We must restart [APP_NAME] to install the update.
+This experimental viewer has been replaced by a [NEW_CHANNEL] viewer;
+see [[INFO_URL] Information about this update]
<tag>confirm</tag>
<usetemplate
name="okbutton"
@@ -6866,6 +6926,28 @@ Do not allow access if you do not fully understand why it wants access to your a
<notification
icon="notify.tga"
+ name="UnknownScriptQuestion"
+ persist="false"
+ type="notify">
+The runtime script permission requested by &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, an object owned by &apos;[NAME]&apos;, isn&apos;t recognized by the viewer and can&apos;t be granted.
+
+To grant this permission please update your viewer to the latest version from [DOWNLOADURL].
+ <tag>confirm</tag>
+ <form name="form">
+ <button
+ default="true"
+ index="1"
+ name="Deny"
+ text="Ok"/>
+ <button
+ index="2"
+ name="Mute"
+ text="Block"/>
+ </form>
+ </notification>
+
+ <notification
+ icon="notify.tga"
name="ScriptDialog"
show_toast="false"
type="notify">
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 4aeea8823e..2fb6a9fd40 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -232,6 +232,19 @@
name="Install_manual"
value="0" />
</combo_box>
+ <check_box
+ top_delta="4"
+ enabled="true"
+ follows="left|top"
+ height="14"
+ initial_value="true"
+ control_name="UpdateWillingToTest"
+ label="Willing to update to release candidates"
+ left_delta="0"
+ mouse_opaque="true"
+ name="update_willing_to_test"
+ width="400"
+ top_pad="5"/>
<text
type="string"
length="1"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index b6fd14e033..f7b33b0a4a 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -61,6 +61,7 @@
<string name="Quit">Quit</string>
<string name="create_account_url">http://join.secondlife.com/?sourceid=[sourceid]</string>
+ <string name="ViewerDownloadURL">http://secondlife.com/download</string>
<string name="LoginFailedViewerNotPermitted">
The viewer you are using can no longer access Second Life. Please visit the following page to download a new viewer:
http://secondlife.com/download
@@ -412,6 +413,11 @@ Please try logging in again in a minute.</string>
<string name="NotConnected">Not Connected</string>
<string name="AgentNameSubst">(You)</string> <!-- Substitution for agent name -->
<string name="TeleportYourAgent">Teleport you</string>
+ <string name="JoinAnExperience">Join an experience</string> <!-- not used -->
+ <string name="SilentlyManageEstateAccess">Suppress alerts when managing estate access lists</string>
+ <string name="OverrideYourAnimations">Replace your default animations</string>
+ <string name="ScriptReturnObjects">Return objects on your behalf</string>
+ <string name="UnknownScriptPermission">(unknown)!</string>
<!-- Sim Access labels -->
<string name="SIM_ACCESS_PG">General</string>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index de42b17074..1e0ceb2220 100755
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -115,7 +115,6 @@
<menu_item_call label="Comprar" name="Menu Object Buy"/>
<menu_item_call label="Tomar" name="Menu Object Take"/>
<menu_item_call label="Coger una copia" name="Take Copy"/>
- <menu_item_call label="Guardar una copia en mi inventario" name="Save Object Back to My Inventory"/>
<menu_item_call label="Guardar una copia del objeto en los contenidos de donde salió" name="Save Object Back to Object Contents"/>
<menu_item_call label="Devolver objeto" name="Return Object back to Owner"/>
</menu>
@@ -130,6 +129,7 @@
<menu_item_call label="Linksets..." name="pathfinding_linksets_menu_item"/>
<menu_item_call label="Personajes..." name="pathfinding_characters_menu_item"/>
<menu_item_call label="Ver/probar..." name="pathfinding_console_menu_item"/>
+ <menu_item_call label="Recargar la región" name="pathfinding_rebake_navmesh_item"/>
</menu>
<menu label="Opciones" name="Options">
<menu_item_check label="Mostrar los permisos avanzados" name="DebugPermissions"/>
@@ -159,6 +159,13 @@
<menu label="Ayuda" name="Help">
<menu_item_call label="Cómo..." name="How To"/>
<menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/>
+ <menu_item_call label="Guía del usuario" name="User’s guide"/>
+ <menu_item_call label="Base de Conocimientos" name="Knowledge Base"/>
+ <menu_item_call label="Wiki" name="Wiki"/>
+ <menu_item_call label="Foros comunitarios" name="Community Forums"/>
+ <menu_item_call label="Portal de soporte" name="Support portal"/>
+ <menu_item_call label="Noticias de [SECOND_LIFE]" name="Second Life News"/>
+ <menu_item_call label="Blogs de [SECOND_LIFE]" name="Second Life Blogs"/>
<menu_item_call label="Denunciar una infracción" name="Report Abuse"/>
<menu_item_call label="Informar de un fallo" name="Report Bug"/>
<menu_item_call label="Acerca de [APP_NAME]" name="About Second Life"/>
@@ -336,9 +343,14 @@
<menu_item_call label="Toggle Character Geometry" name="Toggle Character Geometry"/>
<menu_item_check label="Allow Select Avatar" name="Allow Select Avatar"/>
</menu>
+ <menu label="Velocidad de animación" name="Animation Speed">
+ <menu_item_call label="Acelerar todas las animaciones un 10%" name="All Animations 10 Faster"/>
+ <menu_item_call label="Ralentizar todas las animaciones un 10%" name="All Animations 10 Slower"/>
+ <menu_item_call label="Restablecer la velocidad de todas las animaciones" name="Reset All Animation Speed"/>
+ <menu_item_check label="Animaciones a cámara lenta" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="Force Params to Default" name="Force Params to Default"/>
<menu_item_check label="Animation Info" name="Animation Info"/>
- <menu_item_check label="Slow Motion Animations" name="Slow Motion Animations"/>
<menu_item_check label="Disable Level Of Detail" name="Disable LOD"/>
<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 49122a0f6d..548f144742 100755
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -116,7 +116,6 @@
<menu_item_call label="Acheter" name="Menu Object Buy"/>
<menu_item_call label="Prendre" name="Menu Object Take"/>
<menu_item_call label="Prendre une copie" name="Take Copy"/>
- <menu_item_call label="Enregistrer dans mon inventaire" name="Save Object Back to My Inventory"/>
<menu_item_call label="Enregistrer dans le contenu des objets" name="Save Object Back to Object Contents"/>
<menu_item_call label="Renvoi de l&apos;objet" name="Return Object back to Owner"/>
</menu>
@@ -131,6 +130,7 @@
<menu_item_call label="Groupes de liens..." name="pathfinding_linksets_menu_item"/>
<menu_item_call label="Personnages..." name="pathfinding_characters_menu_item"/>
<menu_item_call label="Vue / test..." name="pathfinding_console_menu_item"/>
+ <menu_item_call label="Refiger la région" name="pathfinding_rebake_navmesh_item"/>
</menu>
<menu label="Options" name="Options">
<menu_item_check label="Afficher les droits avancés" name="DebugPermissions"/>
@@ -160,6 +160,13 @@
<menu label="Aide" name="Help">
<menu_item_call label="Aide rapide..." name="How To"/>
<menu_item_call label="Aide de [SECOND_LIFE]" name="Second Life Help"/>
+ <menu_item_call label="Guide de l&apos;utilisateur" name="User’s guide"/>
+ <menu_item_call label="Base de connaissances" name="Knowledge Base"/>
+ <menu_item_call label="Wiki" name="Wiki"/>
+ <menu_item_call label="Forums de la communauté" name="Community Forums"/>
+ <menu_item_call label="Portail d&apos;assistance" name="Support portal"/>
+ <menu_item_call label="Actualités [SECOND_LIFE]" name="Second Life News"/>
+ <menu_item_call label="Blogs [SECOND_LIFE]" name="Second Life Blogs"/>
<menu_item_call label="Signaler une infraction" name="Report Abuse"/>
<menu_item_call label="Signaler un bug" name="Report Bug"/>
<menu_item_call label="À propos de [APP_NAME]" name="About Second Life"/>
@@ -386,9 +393,14 @@
<menu_item_call label="Test femme" name="Test Female"/>
<menu_item_check label="Autoriser la sélection de l&apos;avatar" name="Allow Select Avatar"/>
</menu>
+ <menu label="Vitesse d&apos;animation" name="Animation Speed">
+ <menu_item_call label="Toutes les animations 10 % plus rapides" name="All Animations 10 Faster"/>
+ <menu_item_call label="Toutes les animations 10 % plus lentes" name="All Animations 10 Slower"/>
+ <menu_item_call label="Réinitialiser la vitesse de toutes les animations" name="Reset All Animation Speed"/>
+ <menu_item_check label="Animations au ralenti" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="Forcer les paramètres par défaut" name="Force Params to Default"/>
<menu_item_check label="Infos sur l&apos;animation" name="Animation Info"/>
- <menu_item_check label="Animations au ralenti" name="Slow Motion Animations"/>
<menu_item_check label="Afficher la direction du regard" name="Show Look At"/>
<menu_item_check label="Afficher la direction du pointeur" name="Show Point At"/>
<menu_item_check label="Débogages des mises à jour" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 16f5a7a89b..2b7bc71df7 100755
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -116,7 +116,6 @@
<menu_item_call label="Acquista" name="Menu Object Buy"/>
<menu_item_call label="Prendi" name="Menu Object Take"/>
<menu_item_call label="Prendi copia" name="Take Copy"/>
- <menu_item_call label="Salva nell&apos;inventario" name="Save Object Back to My Inventory"/>
<menu_item_call label="Salva nei contenuti oggetto" name="Save Object Back to Object Contents"/>
<menu_item_call label="Restituisci oggetto" name="Return Object back to Owner"/>
</menu>
@@ -131,6 +130,7 @@
<menu_item_call label="Set collegati..." name="pathfinding_linksets_menu_item"/>
<menu_item_call label="Personaggi..." name="pathfinding_characters_menu_item"/>
<menu_item_call label="Visualizza / test..." name="pathfinding_console_menu_item"/>
+ <menu_item_call label="Rebake regione" name="pathfinding_rebake_navmesh_item"/>
</menu>
<menu label="Opzioni" name="Options">
<menu_item_check label="Mostra autorizzazioni avanzate" name="DebugPermissions"/>
@@ -160,6 +160,13 @@
<menu label="Aiuto" name="Help">
<menu_item_call label="Istruzioni..." name="How To"/>
<menu_item_call label="Aiuto di [SECOND_LIFE]" name="Second Life Help"/>
+ <menu_item_call label="Guida dell&apos;utente" name="User’s guide"/>
+ <menu_item_call label="Base di conoscenza" name="Knowledge Base"/>
+ <menu_item_call label="Wiki" name="Wiki"/>
+ <menu_item_call label="Forum della comunità" name="Community Forums"/>
+ <menu_item_call label="Portale assistenza" name="Support portal"/>
+ <menu_item_call label="[SECOND_LIFE] Notizie" name="Second Life News"/>
+ <menu_item_call label="[SECOND_LIFE] Blog" name="Second Life Blogs"/>
<menu_item_call label="Segnala abuso" name="Report Abuse"/>
<menu_item_call label="Segnala bug" name="Report Bug"/>
<menu_item_call label="Informazioni su [APP_NAME]" name="About Second Life"/>
@@ -337,9 +344,14 @@
<menu_item_call label="Alterna la geometria dei personaggi" name="Toggle Character Geometry"/>
<menu_item_check label="Consenti selezione avatar" name="Allow Select Avatar"/>
</menu>
+ <menu label="Velocità animazione" name="Animation Speed">
+ <menu_item_call label="Accelera tutte le animazioni del 10%" name="All Animations 10 Faster"/>
+ <menu_item_call label="Rallenta tutte le animazioni del 10%" name="All Animations 10 Slower"/>
+ <menu_item_call label="Ripristina la velocità di tutte le animazioni" name="Reset All Animation Speed"/>
+ <menu_item_check label="Animazioni lente" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="Forza i parametri sui valori predefiniti" name="Force Params to Default"/>
<menu_item_check label="Informazioni sull&apos;animazione" name="Animation Info"/>
- <menu_item_check label="Animazioni lente" name="Slow Motion Animations"/>
<menu_item_check label="Disabilita livello di dettaglio" name="Disable LOD"/>
<menu_item_check label="Mostra schemi collisione" name="Show Collision Skeleton"/>
<menu_item_check label="Mostra bersaglio" name="Display Agent Target"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 725ceff208..89f58d3bac 100755
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -116,7 +116,6 @@
<menu_item_call label="買う" name="Menu Object Buy"/>
<menu_item_call label="取る" name="Menu Object Take"/>
<menu_item_call label="コピーを取る" name="Take Copy"/>
- <menu_item_call label="マイインベントリに保存" name="Save Object Back to My Inventory"/>
<menu_item_call label="オブジェクトの中身に保存" name="Save Object Back to Object Contents"/>
<menu_item_call label="オブジェクトを返却する" name="Return Object back to Owner"/>
</menu>
@@ -131,6 +130,7 @@
<menu_item_call label="リンクセット..." name="pathfinding_linksets_menu_item"/>
<menu_item_call label="キャラクター..." name="pathfinding_characters_menu_item"/>
<menu_item_call label="表示/テスト..." name="pathfinding_console_menu_item"/>
+ <menu_item_call label="地域の再構築" name="pathfinding_rebake_navmesh_item"/>
</menu>
<menu label="オプション" name="Options">
<menu_item_check label="権限の詳細を表示する" name="DebugPermissions"/>
@@ -160,6 +160,13 @@
<menu label="ヘルプ" name="Help">
<menu_item_call label="ハウツー..." name="How To"/>
<menu_item_call label="[SECOND_LIFE] ヘルプ" name="Second Life Help"/>
+ <menu_item_call label="ユーザーガイド" name="User’s guide"/>
+ <menu_item_call label="ナレッジベース" name="Knowledge Base"/>
+ <menu_item_call label="Wiki" name="Wiki"/>
+ <menu_item_call label="コミュニティフォーラム" name="Community Forums"/>
+ <menu_item_call label="日本語サポートページ" name="Support portal"/>
+ <menu_item_call label="[SECOND_LIFE] ニュース" name="Second Life News"/>
+ <menu_item_call label="[SECOND_LIFE] ブログ" name="Second Life Blogs"/>
<menu_item_call label="嫌がらせを報告する" name="Report Abuse"/>
<menu_item_call label="バグを報告する" name="Report Bug"/>
<menu_item_call label="[APP_NAME] について" name="About Second Life"/>
@@ -386,9 +393,14 @@
<menu_item_call label="女性アバターのテスト" name="Test Female"/>
<menu_item_check label="選択アバター許可" name="Allow Select Avatar"/>
</menu>
+ <menu label="アニメーションのスピード" name="Animation Speed">
+ <menu_item_call label="すべてのアニメーションのスピードを 10% アップ" name="All Animations 10 Faster"/>
+ <menu_item_call label="すべてのアニメーションのスピードを 10% ダウン" name="All Animations 10 Slower"/>
+ <menu_item_call label="すべてのアニメーションのスピードをリセット" name="Reset All Animation Speed"/>
+ <menu_item_check label="アニメーションをスローモーション" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="パラメータを強制的にデフォルトにする" name="Force Params to Default"/>
<menu_item_check label="アニメーション情報" name="Animation Info"/>
- <menu_item_check label="スローモーションのアニメーション" name="Slow Motion Animations"/>
<menu_item_check label="見ているものを表示する" name="Show Look At"/>
<menu_item_check label="クリックした場所を表示する" name="Show Point At"/>
<menu_item_check label="結合部のアップデートのデバッグ" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index e54d49fc45..15814fed4c 100755
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -116,7 +116,6 @@
<menu_item_call label="Comprar" name="Menu Object Buy"/>
<menu_item_call label="Pegar" name="Menu Object Take"/>
<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
- <menu_item_call label="Salvar no meu inventário" name="Save Object Back to My Inventory"/>
<menu_item_call label="Salvar objeto de volta aos conteúdos do objeto" name="Save Object Back to Object Contents"/>
<menu_item_call label="Devolver objeto" name="Return Object back to Owner"/>
</menu>
@@ -131,6 +130,7 @@
<menu_item_call label="Linksets..." name="pathfinding_linksets_menu_item"/>
<menu_item_call label="Personagens..." name="pathfinding_characters_menu_item"/>
<menu_item_call label="Visualização/teste..." name="pathfinding_console_menu_item"/>
+ <menu_item_call label="Recarregar região" name="pathfinding_rebake_navmesh_item"/>
</menu>
<menu label="Opções" name="Options">
<menu_item_check label="Mostrar permissões avançadas" name="DebugPermissions"/>
@@ -160,6 +160,13 @@
<menu label="Ajuda" name="Help">
<menu_item_call label="Como..." name="How To"/>
<menu_item_call label="[SECOND_LIFE] Ajuda" name="Second Life Help"/>
+ <menu_item_call label="Guia do usuário" name="User’s guide"/>
+ <menu_item_call label="Base de conhecimento" name="Knowledge Base"/>
+ <menu_item_call label="Wiki" name="Wiki"/>
+ <menu_item_call label="Fóruns da comunidade" name="Community Forums"/>
+ <menu_item_call label="Portal de suporte" name="Support portal"/>
+ <menu_item_call label="Notícias do [SECOND_LIFE]" name="Second Life News"/>
+ <menu_item_call label="Blogs do [SECOND_LIFE]" name="Second Life Blogs"/>
<menu_item_call label="Denunciar abuso" name="Report Abuse"/>
<menu_item_call label="Relatar bug" name="Report Bug"/>
<menu_item_call label="Sobre [APP_NAME]" name="About Second Life"/>
@@ -337,9 +344,14 @@
<menu_item_call label="Toggle Character Geometry" name="Toggle Character Geometry"/>
<menu_item_check label="Allow Select Avatar" name="Allow Select Avatar"/>
</menu>
+ <menu label="Velocidade de animação" name="Animation Speed">
+ <menu_item_call label="Todas as animações 10% mais rápidas" name="All Animations 10 Faster"/>
+ <menu_item_call label="Todas as animações 10% mais lentas" name="All Animations 10 Slower"/>
+ <menu_item_call label="Redefinir todas as velocidades de animação" name="Reset All Animation Speed"/>
+ <menu_item_check label="Animações em câmera lenta" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="Force Params to Default" name="Force Params to Default"/>
<menu_item_check label="Dados da animação" name="Animation Info"/>
- <menu_item_check label="Mostrar animação de movimento" name="Slow Motion Animations"/>
<menu_item_check label="Disable Level Of Detail" name="Disable LOD"/>
<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 6ec5e6d7a3..35485bb292 100755
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -114,7 +114,6 @@
<menu_item_call label="Satın Al" name="Menu Object Buy"/>
<menu_item_call label="Al" name="Menu Object Take"/>
<menu_item_call label="Kopya Al" name="Take Copy"/>
- <menu_item_call label="Envanterime Geri Kaydet" name="Save Object Back to My Inventory"/>
<menu_item_call label="Nesne İçeriklerine Geri Kaydet" name="Save Object Back to Object Contents"/>
<menu_item_call label="Nesneyi İade Et" name="Return Object back to Owner"/>
</menu>
@@ -129,6 +128,7 @@
<menu_item_call label="Bağlantı kümeleri..." name="pathfinding_linksets_menu_item"/>
<menu_item_call label="Karakterler..." name="pathfinding_characters_menu_item"/>
<menu_item_call label="Görüntüleme / test..." name="pathfinding_console_menu_item"/>
+ <menu_item_call label="Bölgeyi tekrar kaydet" name="pathfinding_rebake_navmesh_item"/>
</menu>
<menu label="Seçenklr." name="Options">
<menu_item_check label="Gelişmiş İzinleri Göster" name="DebugPermissions"/>
@@ -158,6 +158,13 @@
<menu label="Yardım" name="Help">
<menu_item_call label="Nasıl yapılır..." name="How To"/>
<menu_item_call label="[SECOND_LIFE] Yardımı" name="Second Life Help"/>
+ <menu_item_call label="Kullanıcı kılavuzu" name="User’s guide"/>
+ <menu_item_call label="Bilgi Bankası" name="Knowledge Base"/>
+ <menu_item_call label="Wiki" name="Wiki"/>
+ <menu_item_call label="Topluluk Forumları" name="Community Forums"/>
+ <menu_item_call label="Destek portalı" name="Support portal"/>
+ <menu_item_call label="[SECOND_LIFE] Haberleri" name="Second Life News"/>
+ <menu_item_call label="[SECOND_LIFE] Blogları" name="Second Life Blogs"/>
<menu_item_call label="Kötüye Kullanımı Bildir" name="Report Abuse"/>
<menu_item_call label="Hata Bildir" name="Report Bug"/>
<menu_item_call label="[APP_NAME] Hakkında" name="About Second Life"/>
@@ -384,9 +391,14 @@
<menu_item_call label="Test Dişisi" name="Test Female"/>
<menu_item_check label="Avatar Seçimine İzin Ver" name="Allow Select Avatar"/>
</menu>
+ <menu label="Animasyon Hızı" name="Animation Speed">
+ <menu_item_call label="Tüm Animasyonlar %10 Daha Hızlı" name="All Animations 10 Faster"/>
+ <menu_item_call label="Tüm Animasyonlar %10 Daha Yavaş" name="All Animations 10 Slower"/>
+ <menu_item_call label="Tüm Animasyon Hızlarını Sıfırla" name="Reset All Animation Speed"/>
+ <menu_item_check label="Yavaş Hareket Animasyonları" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="Parametreleri Varsayılana Zorla" name="Force Params to Default"/>
<menu_item_check label="Animasyon Bilgisi" name="Animation Info"/>
- <menu_item_check label="Yavaş Hareket Animasyonları" name="Slow Motion Animations"/>
<menu_item_check label="Şuraya Bak&apos;ı Göster" name="Show Look At"/>
<menu_item_check label="Şuraya İşaret Et&apos;i Göster" name="Show Point At"/>
<menu_item_check label="Eklem Güncelleştirmeleri İçin Hata Ayıklama" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index fdae3f3bd4..d4844b191b 100755
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -114,7 +114,6 @@
<menu_item_call label="購買" name="Menu Object Buy"/>
<menu_item_call label="取得" name="Menu Object Take"/>
<menu_item_call label="取得副本" name="Take Copy"/>
- <menu_item_call label="回存到我的收納區" name="Save Object Back to My Inventory"/>
<menu_item_call label="回存到物件內容" name="Save Object Back to Object Contents"/>
<menu_item_call label="退回物件" name="Return Object back to Owner"/>
</menu>
@@ -129,6 +128,7 @@
<menu_item_call label="聯結集…" name="pathfinding_linksets_menu_item"/>
<menu_item_call label="角色…" name="pathfinding_characters_menu_item"/>
<menu_item_call label="察看 / 測試…" name="pathfinding_console_menu_item"/>
+ <menu_item_call label="重新產出地區" name="pathfinding_rebake_navmesh_item"/>
</menu>
<menu label="選項" name="Options">
<menu_item_check label="顯示進階權限" name="DebugPermissions"/>
@@ -158,6 +158,13 @@
<menu label="幫助" name="Help">
<menu_item_call label="簡易教學…" name="How To"/>
<menu_item_call label="[SECOND_LIFE] 幫助" name="Second Life Help"/>
+ <menu_item_call label="使用者指南" name="User’s guide"/>
+ <menu_item_call label="知識庫" name="Knowledge Base"/>
+ <menu_item_call label="維基" name="Wiki"/>
+ <menu_item_call label="社群論壇" name="Community Forums"/>
+ <menu_item_call label="支援入口" name="Support portal"/>
+ <menu_item_call label="[SECOND_LIFE] 最新消息" name="Second Life News"/>
+ <menu_item_call label="[SECOND_LIFE] 部落格" name="Second Life Blogs"/>
<menu_item_call label="違規舉報" name="Report Abuse"/>
<menu_item_call label="回報臭蟲" name="Report Bug"/>
<menu_item_call label="關於 [APP_NAME]" name="About Second Life"/>
@@ -384,9 +391,14 @@
<menu_item_call label="女性測試" name="Test Female"/>
<menu_item_check label="允許選擇化身" name="Allow Select Avatar"/>
</menu>
+ <menu label="動作速度" name="Animation Speed">
+ <menu_item_call label="所有動作加快 10%" name="All Animations 10 Faster"/>
+ <menu_item_call label="所有動作放慢 10%" name="All Animations 10 Slower"/>
+ <menu_item_call label="將所有動作恢復原速" name="Reset All Animation Speed"/>
+ <menu_item_check label="慢動作" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="強制參數為預設值" name="Force Params to Default"/>
<menu_item_check label="動作資訊" name="Animation Info"/>
- <menu_item_check label="慢動作" name="Slow Motion Animations"/>
<menu_item_check label="顯示注視在" name="Show Look At"/>
<menu_item_check label="顯示指向在" name="Show Point At"/>
<menu_item_check label="除錯旋軸的更新" name="Debug Joint Updates"/>
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index 7705b4c567..f038112fd0 100755
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -50,7 +50,7 @@ const std::string VIEWERLOGIN_GRIDLABEL("viewerlogin_grid");
const std::string APPVIEWER_SERIALNUMBER("appviewer_serialno");
const std::string VIEWERLOGIN_CHANNEL("invalid_channel");
-const std::string VIEWERLOGIN_VERSION_CHANNEL("invalid_version");
+const std::string VIEWERLOGIN_VERSION("invalid_version");
// Link seams.
@@ -73,7 +73,7 @@ void LLViewerWindow::setShowProgress(BOOL show) {}
LLProgressView * LLViewerWindow::getProgressView(void) const { return 0; }
LLViewerWindow* gViewerWindow;
-
+
class LLLogin::Impl
{
};
@@ -183,7 +183,7 @@ void LLUIColorTable::saveUserSettings(void)const {}
//-----------------------------------------------------------------------------
#include "../llversioninfo.h"
-const std::string &LLVersionInfo::getChannelAndVersion() { return VIEWERLOGIN_VERSION_CHANNEL; }
+const std::string &LLVersionInfo::getVersion() { return VIEWERLOGIN_VERSION; }
const std::string &LLVersionInfo::getChannel() { return VIEWERLOGIN_CHANNEL; }
//-----------------------------------------------------------------------------
@@ -208,11 +208,15 @@ std::string const & LLUpdaterService::pumpName(void)
return wakka;
}
bool LLUpdaterService::updateReadyToInstall(void) { return false; }
-void LLUpdaterService::initialize(const std::string& protocol_version,
- const std::string& url,
- const std::string& path,
- const std::string& channel,
- const std::string& version) {}
+void LLUpdaterService::initialize(const std::string& url,
+ const std::string& path,
+ const std::string& channel,
+ const std::string& version,
+ const std::string& platform,
+ const std::string& platform_version,
+ const unsigned char uniqueid[MD5HEX_STR_SIZE],
+ const bool& willing_to_test
+ ) {}
void LLUpdaterService::setCheckPeriod(unsigned int seconds) {}
void LLUpdaterService::startChecking(bool install_if_ready) {}
@@ -221,6 +225,12 @@ bool LLUpdaterService::isChecking() { return false; }
LLUpdaterService::eUpdaterState LLUpdaterService::getState() { return INITIAL; }
std::string LLUpdaterService::updatedVersion() { return ""; }
+bool llHashedUniqueID(unsigned char* id)
+{
+ memcpy( id, "66666666666666666666666666666666", MD5HEX_STR_SIZE );
+ return true;
+}
+
//-----------------------------------------------------------------------------
#include "llnotifications.h"
#include "llfloaterreg.h"
@@ -360,6 +370,7 @@ namespace tut
accountCredential->setCredentialData(identifier, authenticator);
logininstance->setNotificationsInterface(&notifications);
+ logininstance->setPlatformInfo("win", "1.3.5");
}
LLLoginInstance* logininstance;
diff --git a/indra/newview/tests/llversioninfo_test.cpp b/indra/newview/tests/llversioninfo_test.cpp
index 398d8f16ed..6b0be29c2d 100755
--- a/indra/newview/tests/llversioninfo_test.cpp
+++ b/indra/newview/tests/llversioninfo_test.cpp
@@ -28,7 +28,6 @@
#include "../test/lltut.h"
#include "../llversioninfo.h"
-#include "llversionviewer.h"
namespace tut
{
@@ -38,20 +37,20 @@ namespace tut
: mResetChannel("Reset Channel")
{
std::ostringstream stream;
- stream << LL_VERSION_MAJOR << "."
- << LL_VERSION_MINOR << "."
- << LL_VERSION_PATCH << "."
- << LL_VERSION_BUILD;
+ stream << LL_VIEWER_VERSION_MAJOR << "."
+ << LL_VIEWER_VERSION_MINOR << "."
+ << LL_VIEWER_VERSION_PATCH << "."
+ << LL_VIEWER_VERSION_BUILD;
mVersion = stream.str();
stream.str("");
- stream << LL_VERSION_MAJOR << "."
- << LL_VERSION_MINOR << "."
- << LL_VERSION_PATCH;
+ stream << LL_VIEWER_VERSION_MAJOR << "."
+ << LL_VIEWER_VERSION_MINOR << "."
+ << LL_VIEWER_VERSION_PATCH;
mShortVersion = stream.str();
stream.str("");
- stream << LL_CHANNEL
+ stream << LL_VIEWER_CHANNEL
<< " "
<< mVersion;
mVersionAndChannel = stream.str();
@@ -78,20 +77,19 @@ namespace tut
{
ensure_equals("Major version",
LLVersionInfo::getMajor(),
- LL_VERSION_MAJOR);
+ LL_VIEWER_VERSION_MAJOR);
ensure_equals("Minor version",
LLVersionInfo::getMinor(),
- LL_VERSION_MINOR);
+ LL_VIEWER_VERSION_MINOR);
ensure_equals("Patch version",
LLVersionInfo::getPatch(),
- LL_VERSION_PATCH);
+ LL_VIEWER_VERSION_PATCH);
ensure_equals("Build version",
LLVersionInfo::getBuild(),
- LL_VERSION_BUILD);
+ LL_VIEWER_VERSION_BUILD);
ensure_equals("Channel version",
LLVersionInfo::getChannel(),
- LL_CHANNEL);
-
+ LL_VIEWER_CHANNEL);
ensure_equals("Version String",
LLVersionInfo::getVersion(),
mVersion);
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 276ae8fc01..179ebdbe00 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -160,14 +160,6 @@ class ViewerManifest(LLManifest):
if not self.path2basename(os.path.join(os.pardir, os.pardir), "summary.json"):
print "No summary.json file"
- def login_channel(self):
- """Channel reported for login and upgrade purposes ONLY;
- used for A/B testing"""
- # NOTE: Do not return the normal channel if login_channel
- # is not specified, as some code may branch depending on
- # whether or not this is present
- return self.args.get('login_channel')
-
def grid(self):
return self.args['grid']
def channel(self):
@@ -179,16 +171,24 @@ class ViewerManifest(LLManifest):
def channel_lowerword(self):
return self.channel_oneword().lower()
+ def app_name(self):
+ app_suffix='Test'
+ channel_type=self.channel_lowerword()
+ if channel_type == 'release' :
+ app_suffix='Viewer'
+ elif re.match('^(beta|project).*',channel_type) :
+ app_suffix=self.channel_unique()
+ return "Second Life "+app_suffix
+
def icon_path(self):
icon_path="icons/"
channel_type=self.channel_lowerword()
- if channel_type == 'release' \
- or channel_type == 'development' \
- :
+ print "Icon channel type '%s'" % channel_type
+ if channel_type == 'release' :
icon_path += channel_type
- elif channel_type == 'betaviewer' :
+ elif re.match('^beta.*',channel_type) :
icon_path += 'beta'
- elif re.match('project.*',channel_type) :
+ elif re.match('^project.*',channel_type) :
icon_path += 'project'
else :
icon_path += 'test'
@@ -205,14 +205,6 @@ class ViewerManifest(LLManifest):
"--helperuri http://preview-%(grid)s.secondlife.com/helpers/" %\
{'grid':self.grid()}
- # set command line flags for channel
- channel_flags = ''
- if self.login_channel() and self.login_channel() != self.channel():
- # Report a special channel during login, but use default
- channel_flags = '--channel "%s"' % (self.login_channel())
- elif not self.default_channel():
- channel_flags = '--channel "%s"' % self.channel()
-
# Deal with settings
setting_flags = ''
if not self.default_channel() or not self.default_grid():
@@ -223,7 +215,7 @@ class ViewerManifest(LLManifest):
setting_flags = '--settings settings_%s_%s.xml'\
% (self.grid(), self.channel_lowerword())
- return " ".join((channel_flags, grid_flags, setting_flags)).strip()
+ return " ".join((grid_flags, setting_flags)).strip()
def extract_names(self,src):
try:
@@ -250,13 +242,13 @@ class ViewerManifest(LLManifest):
class WindowsManifest(ViewerManifest):
def final_exe(self):
- if self.default_channel():
- if self.default_grid():
- return "SecondLife.exe"
- else:
- return "SecondLifePreview.exe"
- else:
- return ''.join(self.channel().split()) + '.exe'
+ app_suffix="Test"
+ channel_type=self.channel_lowerword()
+ if channel_type == 'release' :
+ app_suffix=''
+ elif re.match('^(beta|project).*',channel_type) :
+ app_suffix=''.join(self.channel_unique().split())
+ return "SecondLife"+app_suffix+".exe"
def test_msvcrt_and_copy_action(self, src, dst):
# This is used to test a dll manifest.
@@ -304,26 +296,9 @@ class WindowsManifest(ViewerManifest):
else:
print "Doesn't exist:", src
- ### DISABLED MANIFEST CHECKING for vs2010. we may need to reenable this
- # shortly. If this hasn't been reenabled by the 2.9 viewer release then it
- # should be deleted -brad
- #def enable_crt_manifest_check(self):
- # if self.is_packaging_viewer():
- # WindowsManifest.copy_action = WindowsManifest.test_msvcrt_and_copy_action
-
- #def enable_no_crt_manifest_check(self):
- # if self.is_packaging_viewer():
- # WindowsManifest.copy_action = WindowsManifest.test_for_no_msvcrt_manifest_and_copy_action
-
- #def disable_manifest_check(self):
- # if self.is_packaging_viewer():
- # del WindowsManifest.copy_action
-
def construct(self):
super(WindowsManifest, self).construct()
- #self.enable_crt_manifest_check()
-
if self.is_packaging_viewer():
# Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.
self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())
@@ -333,15 +308,11 @@ class WindowsManifest(ViewerManifest):
'llplugin', 'slplugin', self.args['configuration']),
"slplugin.exe")
- #self.disable_manifest_check()
-
self.path2basename("../viewer_components/updater/scripts/windows", "update_install.bat")
# Get shared libs from the shared libs staging directory
if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
dst=""):
- #self.enable_crt_manifest_check()
-
# Get llcommon and deps. If missing assume static linkage and continue.
try:
self.path('llcommon.dll')
@@ -353,8 +324,6 @@ class WindowsManifest(ViewerManifest):
print err.message
print "Skipping llcommon.dll (assuming llcommon was linked statically)"
- #self.disable_manifest_check()
-
# Mesh 3rd party libs needed for auto LOD and collada reading
try:
if self.args['configuration'].lower() == 'debug':
@@ -422,8 +391,6 @@ class WindowsManifest(ViewerManifest):
self.path("featuretable.txt")
self.path("featuretable_xp.txt")
- #self.enable_no_crt_manifest_check()
-
# Media plugins - QuickTime
if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"):
self.path("media_plugin_quicktime.dll")
@@ -503,15 +470,10 @@ class WindowsManifest(ViewerManifest):
self.end_prefix()
- #self.disable_manifest_check()
-
# pull in the crash logger and updater from other projects
# tag:"crash-logger" here as a cue to the exporter
self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'],
dst="win_crash_logger.exe")
-# For CHOP-397, windows updater no longer used.
-# self.path(src='../win_updater/%s/windows-updater.exe' % self.args['configuration'],
-# dst="updater.exe")
if not self.is_packaging_viewer():
self.package_file = "copied_deps"
@@ -574,6 +536,7 @@ class WindowsManifest(ViewerManifest):
'channel':self.channel(),
'channel_oneword':self.channel_oneword(),
'channel_unique':self.channel_unique(),
+ 'subchannel_underscores':'_'.join(self.channel_unique().split())
}
version_vars = """
@@ -595,7 +558,7 @@ class WindowsManifest(ViewerManifest):
Caption "Second Life"
"""
else:
- # beta grid viewer
+ # alternate grid viewer
installer_file = "Second_Life_%(version_dashes)s_(%(grid_caps)s)_Setup.exe"
grid_vars_template = """
OutFile "%(installer_file)s"
@@ -607,8 +570,8 @@ class WindowsManifest(ViewerManifest):
Caption "Second Life %(grid)s ${VERSION}"
"""
else:
- # some other channel on some grid
- installer_file = "Second_Life_%(version_dashes)s_%(channel_oneword)s_Setup.exe"
+ # some other channel (grid name not used)
+ installer_file = "Second_Life_%(version_dashes)s_%(subchannel_underscores)s_Setup.exe"
grid_vars_template = """
OutFile "%(installer_file)s"
!define INSTFLAGS "%(flags)s"
@@ -670,13 +633,15 @@ class DarwinManifest(ViewerManifest):
self.path(self.args['configuration'] + "/Second Life.app", dst="")
if self.prefix(src="", dst="Contents"): # everything goes in Contents
- self.path("Info-SecondLife.plist", dst="Info.plist")
+ self.path("Info.plist", dst="Info.plist")
# copy additional libs in <bundle>/Contents/MacOS/
self.path("../packages/lib/release/libndofdev.dylib", dst="Resources/libndofdev.dylib")
self.path("../packages/lib/release/libhunspell-1.3.0.dylib", dst="Resources/libhunspell-1.3.0.dylib")
- self.path("../viewer_components/updater/scripts/darwin/update_install", "MacOS/update_install")
+ if self.prefix(dst="MacOS"):
+ self.path2basename("../viewer_components/updater/scripts/darwin", "*.py")
+ self.end_prefix()
# most everything goes in the Resources directory
if self.prefix(src="", dst="Resources"):
@@ -698,7 +663,11 @@ class DarwinManifest(ViewerManifest):
self.path("SecondLife.nib")
# Translations
- self.path("English.lproj")
+ self.path("English.lproj/language.txt")
+ self.replace_in(src="English.lproj/InfoPlist.strings",
+ dst="English.lproj/InfoPlist.strings",
+ searchdict={'%%VERSION%%':'.'.join(self.args['version'])}
+ )
self.path("German.lproj")
self.path("Japanese.lproj")
self.path("Korean.lproj")
@@ -765,7 +734,6 @@ class DarwinManifest(ViewerManifest):
# our apps
for app_bld_dir, app in (("mac_crash_logger", "mac-crash-logger.app"),
- ("mac_updater", "mac-updater.app"),
# plugin launcher
(os.path.join("llplugin", "slplugin"), "SLPlugin.app"),
):
@@ -811,7 +779,7 @@ class DarwinManifest(ViewerManifest):
def copy_finish(self):
# Force executable permissions to be set for scripts
# see CHOP-223 and http://mercurial.selenic.com/bts/issue1802
- for script in 'Contents/MacOS/update_install',:
+ for script in 'Contents/MacOS/update_install.py',:
self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script))
def package_finish(self):
@@ -880,10 +848,7 @@ class DarwinManifest(ViewerManifest):
# Copy everything in to the mounted .dmg
- if self.default_channel() and not self.default_grid():
- app_name = "Second Life " + self.args['grid']
- else:
- app_name = channel_standin.strip()
+ app_name = self.app_name()
# Hack:
# Because there is no easy way to coerce the Finder into positioning
@@ -1068,13 +1033,13 @@ class Linux_i686Manifest(LinuxManifest):
self.path("libaprutil-1.so")
self.path("libaprutil-1.so.0")
self.path("libaprutil-1.so.0.4.1")
+ self.path("libboost_context-mt.so.*")
+ self.path("libboost_filesystem-mt.so.*")
self.path("libboost_program_options-mt.so.*")
self.path("libboost_regex-mt.so.*")
- self.path("libboost_thread-mt.so.*")
- self.path("libboost_filesystem-mt.so.*")
self.path("libboost_signals-mt.so.*")
self.path("libboost_system-mt.so.*")
- #self.path("libbreakpad_client.a")
+ self.path("libboost_thread-mt.so.*")
self.path("libcollada14dom.so")
self.path("libdb*.so")
self.path("libcrypto.so.*")