Merge from viewer-beta
commit
11d12f1a99
8
.hgtags
8
.hgtags
|
|
@ -408,3 +408,11 @@ c296133849d1f103c0e2abc41e6599daed00b67b DRTVWR-280
|
|||
ccf991e02dc2f63fb646324230d54832683f4a9b DRTVWR-286
|
||||
2d849850558a5a0324b398d1c102d30bcbdfb88f DRTVWR-287
|
||||
e06898df8644fe567bee94f817d03abc1c380993 3.4.5-beta3
|
||||
a676b4d6c037b39fe5b8e42cf8839a9303936089 DRTVWR-289
|
||||
28fa8b944a0c1869636ab00cc400f5aa71f6fa3c DRTVWR-290
|
||||
7f09bbc28c297f14b67961be7b6575445fa160e8 DRTVWR-291
|
||||
b23419a2748483c98f3b84b630468a21c88feba5 DRTVWR-292
|
||||
1567de5700c273b583dac41b64275c223287306e 3.4.5-beta4
|
||||
1cce8447f8f574673e3f47d6fe584262e6964fe2 DRTVWR-296
|
||||
0a5d409161ef2a89b28c9a741051dd2dedc707d6 DRTVWR-297
|
||||
852b69ef0b5fe6b13b69cc2217282cc64de6afab 3.4.5-beta5
|
||||
|
|
|
|||
|
|
@ -1251,6 +1251,7 @@ Whimsy Winx
|
|||
Whirly Fizzle
|
||||
STORM-1895
|
||||
MAINT-873
|
||||
STORM-1930
|
||||
Whoops Babii
|
||||
VWR-631
|
||||
VWR-1640
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ VolumeCatcherImpl::VolumeCatcherImpl()
|
|||
{
|
||||
mSystemIsVistaOrHigher = isWindowsVistaOrHigher();
|
||||
|
||||
if ( mSystemIsVistaOrHigher )
|
||||
if ( ! mSystemIsVistaOrHigher )
|
||||
{
|
||||
HMODULE handle = ::LoadLibrary(L"winmm.dll");
|
||||
if(handle)
|
||||
|
|
|
|||
|
|
@ -1854,7 +1854,6 @@ if (LINUX)
|
|||
set(COPY_INPUT_DEPENDENCIES
|
||||
${VIEWER_BINARY_NAME}
|
||||
linux-crash-logger
|
||||
linux-updater
|
||||
SLPlugin
|
||||
media_plugin_webkit
|
||||
media_plugin_gstreamer010
|
||||
|
|
|
|||
|
|
@ -523,6 +523,7 @@ F32 LLDrawable::updateXform(BOOL undamped)
|
|||
dist_squared = dist_vec_squared(new_pos, target_pos);
|
||||
|
||||
LLQuaternion new_rot = nlerp(lerp_amt, old_rot, target_rot);
|
||||
// FIXME: This can be negative! It is be possible for some rots to 'cancel out' pos or size changes.
|
||||
dist_squared += (1.f - dot(new_rot, target_rot)) * 10.f;
|
||||
|
||||
LLVector3 new_scale = lerp(old_scale, target_scale, lerp_amt);
|
||||
|
|
@ -548,9 +549,12 @@ F32 LLDrawable::updateXform(BOOL undamped)
|
|||
}
|
||||
else
|
||||
{
|
||||
dist_squared = dist_vec_squared(old_pos, target_pos);
|
||||
dist_squared += (1.f - dot(old_rot, target_rot)) * 10.f;
|
||||
dist_squared += dist_vec_squared(old_scale, target_scale);
|
||||
// The following fixes MAINT-1742 but breaks vehicles similar to MAINT-2275
|
||||
// dist_squared = dist_vec_squared(old_pos, target_pos);
|
||||
|
||||
// The following fixes MAINT-2247 but causes MAINT-2275
|
||||
//dist_squared += (1.f - dot(old_rot, target_rot)) * 10.f;
|
||||
//dist_squared += dist_vec_squared(old_scale, target_scale);
|
||||
}
|
||||
|
||||
LLVector3 vec = mCurrentScale-target_scale;
|
||||
|
|
|
|||
|
|
@ -215,17 +215,19 @@ public:
|
|||
|
||||
~LLMeshHeaderResponder()
|
||||
{
|
||||
if (!mProcessed && !LLApp::isQuitting())
|
||||
{ //something went wrong, retry
|
||||
llwarns << "Timeout or service unavailable, retrying." << llendl;
|
||||
LLMeshRepository::sHTTPRetryCount++;
|
||||
LLMeshRepoThread::HeaderRequest req(mMeshParams);
|
||||
LLMutexLock lock(gMeshRepo.mThread->mMutex);
|
||||
gMeshRepo.mThread->mHeaderReqQ.push(req);
|
||||
if (!LLApp::isQuitting())
|
||||
{
|
||||
if (!mProcessed)
|
||||
{ //something went wrong, retry
|
||||
llwarns << "Timeout or service unavailable, retrying." << llendl;
|
||||
LLMeshRepository::sHTTPRetryCount++;
|
||||
LLMeshRepoThread::HeaderRequest req(mMeshParams);
|
||||
LLMutexLock lock(gMeshRepo.mThread->mMutex);
|
||||
gMeshRepo.mThread->mHeaderReqQ.push(req);
|
||||
}
|
||||
|
||||
LLMeshRepoThread::decActiveHeaderRequests();
|
||||
}
|
||||
|
||||
LLMeshRepoThread::decActiveHeaderRequests();
|
||||
}
|
||||
|
||||
virtual void completedRaw(U32 status, const std::string& reason,
|
||||
|
|
@ -252,13 +254,16 @@ public:
|
|||
|
||||
~LLMeshLODResponder()
|
||||
{
|
||||
if (!mProcessed && !LLApp::isQuitting())
|
||||
if (!LLApp::isQuitting())
|
||||
{
|
||||
llwarns << "Killed without being processed, retrying." << llendl;
|
||||
LLMeshRepository::sHTTPRetryCount++;
|
||||
gMeshRepo.mThread->lockAndLoadMeshLOD(mMeshParams, mLOD);
|
||||
if (!mProcessed)
|
||||
{
|
||||
llwarns << "Killed without being processed, retrying." << llendl;
|
||||
LLMeshRepository::sHTTPRetryCount++;
|
||||
gMeshRepo.mThread->lockAndLoadMeshLOD(mMeshParams, mLOD);
|
||||
}
|
||||
LLMeshRepoThread::decActiveLODRequests();
|
||||
}
|
||||
LLMeshRepoThread::decActiveLODRequests();
|
||||
}
|
||||
|
||||
virtual void completedRaw(U32 status, const std::string& reason,
|
||||
|
|
|
|||
|
|
@ -186,8 +186,11 @@ private:
|
|||
// Populate the menu with items like "New Skin", "New Pants", etc.
|
||||
static void populateCreateWearableSubmenus(LLMenuGL* menu)
|
||||
{
|
||||
LLView* menu_clothes = gMenuHolder->getChildView("COF.Gear.New_Clothes", FALSE);
|
||||
LLView* menu_bp = gMenuHolder->getChildView("COF.Geear.New_Body_Parts", FALSE);
|
||||
// MAINT-2276...these menus are created as dummies because they are not available
|
||||
// when this function is called. This prevents their parent from popping up later.
|
||||
//
|
||||
//LLView* menu_clothes = gMenuHolder->getChildView("COF.Gear.New_Clothes", FALSE);
|
||||
//LLView* menu_bp = gMenuHolder->getChildView("COF.Geear.New_Body_Parts", FALSE);
|
||||
|
||||
for (U8 i = LLWearableType::WT_SHAPE; i != (U8) LLWearableType::WT_COUNT; ++i)
|
||||
{
|
||||
|
|
@ -200,8 +203,11 @@ private:
|
|||
p.on_click.function_name = "Wearable.Create";
|
||||
p.on_click.parameter = LLSD(type_name);
|
||||
|
||||
LLView* parent = LLWearableType::getAssetType(type) == LLAssetType::AT_CLOTHING ?
|
||||
menu_clothes : menu_bp;
|
||||
//LLView* parent = LLWearableType::getAssetType(type) == LLAssetType::AT_CLOTHING ? menu_clothes : menu_bp;
|
||||
// This is a work-around for MAINT-2276 wherein the parent toggleable menu does not appear
|
||||
// It puts everything under one menu, but that menu appears, which is better than not.
|
||||
//
|
||||
LLView* parent = menu;
|
||||
LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1540,17 +1540,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
// Actually extract the data.
|
||||
if (parcel)
|
||||
{
|
||||
if (sequence_id == SELECTED_PARCEL_SEQ_ID
|
||||
&& parcel->getLocalID() != INVALID_PARCEL_ID
|
||||
&& parcel->getLocalID() != local_id)
|
||||
{
|
||||
// The parcel has a valid parcel ID but it doesn't match the parcel
|
||||
// for the data received.
|
||||
llinfos << "Expecting data for parcel " << parcel->getLocalID() \
|
||||
<< " but got data for parcel " << local_id << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
parcel->init(owner_id,
|
||||
FALSE, FALSE, FALSE,
|
||||
claim_date, claim_price_per_meter, rent_price_per_meter,
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -147,12 +147,12 @@
|
|||
height="12"
|
||||
layout="topleft"
|
||||
left_delta="87"
|
||||
name="ShadersPrefText3"
|
||||
name="ShadersPrefText2"
|
||||
top_delta="0"
|
||||
width="80">
|
||||
Mid
|
||||
</text>
|
||||
<text
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -163,8 +163,8 @@
|
|||
name="ShadersPrefText3"
|
||||
top_delta="0"
|
||||
width="80">
|
||||
High
|
||||
</text>
|
||||
High
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
|
|||
|
|
@ -968,7 +968,6 @@ class LinuxManifest(ViewerManifest):
|
|||
if self.prefix(src="", dst="bin"):
|
||||
self.path("secondlife-bin","do-not-directly-run-secondlife-bin")
|
||||
self.path("../linux_crash_logger/linux-crash-logger","linux-crash-logger.bin")
|
||||
self.path("../linux_updater/linux-updater", "linux-updater.bin")
|
||||
self.path2basename("../llplugin/slplugin", "SLPlugin")
|
||||
self.path2basename("../viewer_components/updater/scripts/linux", "update_install")
|
||||
self.end_prefix("bin")
|
||||
|
|
@ -1017,9 +1016,7 @@ class LinuxManifest(ViewerManifest):
|
|||
else:
|
||||
installer_name += '_' + self.channel_oneword().upper()
|
||||
|
||||
if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer():
|
||||
print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"
|
||||
self.run_command("find %(d)r/bin %(d)r/lib -type f \\! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure
|
||||
self.strip_binaries()
|
||||
|
||||
# Fix access permissions
|
||||
self.run_command("""
|
||||
|
|
@ -1054,6 +1051,11 @@ class LinuxManifest(ViewerManifest):
|
|||
'dst': self.get_dst_prefix(),
|
||||
'inst': self.build_path_of(installer_name)})
|
||||
|
||||
def strip_binaries(self):
|
||||
if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer():
|
||||
print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"
|
||||
self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure
|
||||
|
||||
class Linux_i686Manifest(LinuxManifest):
|
||||
def construct(self):
|
||||
super(Linux_i686Manifest, self).construct()
|
||||
|
|
@ -1139,9 +1141,7 @@ class Linux_i686Manifest(LinuxManifest):
|
|||
self.path("libvivoxplatform.so")
|
||||
self.end_prefix("lib")
|
||||
|
||||
if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer():
|
||||
print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"
|
||||
self.run_command("find %(d)r/bin %(d)r/lib -type f \\! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure
|
||||
self.strip_binaries()
|
||||
|
||||
|
||||
class Linux_x86_64Manifest(LinuxManifest):
|
||||
|
|
|
|||
|
|
@ -1,10 +1,217 @@
|
|||
#! /bin/bash
|
||||
INSTALL_DIR=$(cd "$(dirname "$0")/.." ; pwd)
|
||||
export LD_LIBRARY_PATH="$INSTALL_DIR/lib"
|
||||
bin/linux-updater.bin --file "$1" --dest "$INSTALL_DIR" --name "Second Life Viewer" --stringsdir "$INSTALL_DIR/skins/default/xui/en" --stringsfile "strings.xml"
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then echo $3 >> "$2"
|
||||
# @file update_install
|
||||
# @author Nat Goodspeed
|
||||
# @date 2013-01-09
|
||||
# @brief Update the containing Second Life application bundle to the version in
|
||||
# the specified tarball.
|
||||
#
|
||||
# This bash implementation is derived from the previous linux-updater.bin
|
||||
# application.
|
||||
#
|
||||
# $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
# Copyright (c) 2013, Linden Research, Inc.
|
||||
# $/LicenseInfo$
|
||||
|
||||
# ****************************************************************************
|
||||
# script parameters
|
||||
# ****************************************************************************
|
||||
tarball="$1" # the file to install
|
||||
markerfile="$2" # create this file on failure
|
||||
mandatory="$3" # what to write to markerfile on failure
|
||||
|
||||
# ****************************************************************************
|
||||
# helper functions
|
||||
# ****************************************************************************
|
||||
# empty array
|
||||
cleanups=()
|
||||
|
||||
# add a cleanup action to execute on exit
|
||||
function cleanup {
|
||||
# wacky bash syntax for appending to array
|
||||
cleanups[${#cleanups[*]}]="$*"
|
||||
}
|
||||
|
||||
# called implicitly on exit
|
||||
function onexit {
|
||||
for action in "${cleanups[@]}"
|
||||
do # don't quote, support actions consisting of multiple words
|
||||
$action
|
||||
done
|
||||
}
|
||||
trap 'onexit' EXIT
|
||||
|
||||
# write to log file
|
||||
function log {
|
||||
# our log file will be open as stderr -- but until we set up that
|
||||
# redirection, logging to stderr is better than nothing
|
||||
echo "$*" 1>&2
|
||||
}
|
||||
|
||||
# We display status by leaving one background xmessage process running. This
|
||||
# is the pid of that process.
|
||||
statuspid=""
|
||||
|
||||
function clear_message {
|
||||
[ -n "$statuspid" ] && kill $statuspid
|
||||
statuspid=""
|
||||
}
|
||||
|
||||
# make sure we remove any message box we might have put up
|
||||
cleanup clear_message
|
||||
|
||||
# can we use zenity, or must we fall back to xmessage?
|
||||
zenpath="$(which zenity)"
|
||||
if [ -n "$zenpath" ]
|
||||
then # zenity on PATH and is executable
|
||||
# display a message box and continue
|
||||
function status {
|
||||
# clear any previous message
|
||||
clear_message
|
||||
# put up a new zenity box and capture its pid
|
||||
"$zenpath" --info --title "Second Life Viewer Updater" \
|
||||
--width=320 --height=120 --text="$*" &
|
||||
statuspid=$!
|
||||
}
|
||||
|
||||
# display an error box and wait for user
|
||||
function errorbox {
|
||||
"$zenpath" --error --title "Second Life Viewer Updater" \
|
||||
--width=320 --height=120 --text="$*"
|
||||
}
|
||||
|
||||
else # no zenity, use xmessage instead
|
||||
# display a message box and continue
|
||||
function status {
|
||||
# clear any previous message
|
||||
clear_message
|
||||
# put up a new xmessage and capture its pid
|
||||
xmessage -buttons OK:2 -center "$*" &
|
||||
statuspid=$!
|
||||
}
|
||||
|
||||
# display an error box and wait for user
|
||||
function errorbox {
|
||||
xmessage -buttons OK:2 -center "$*"
|
||||
}
|
||||
fi
|
||||
|
||||
rm -f "$1"
|
||||
# display an error box and terminate
|
||||
function fail {
|
||||
# Log the message
|
||||
log "$@"
|
||||
# tell subsequent viewer things went south
|
||||
echo "$mandatory" > "$markerfile"
|
||||
# add boilerplate
|
||||
errorbox "An error occurred while updating Second Life:
|
||||
$*
|
||||
Please download the latest viewer from www.secondlife.com."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Find a graphical sudo program and define mysudo function. On error, $? is
|
||||
# nonzero; output is in $err instead of being written to stdout/stderr.
|
||||
gksudo="$(which gksudo)"
|
||||
kdesu="$(which kdesu)"
|
||||
if [ -n "$gksudo" ]
|
||||
then function mysudo {
|
||||
# gksudo allows you to specify description
|
||||
err="$("$gksudo" --description "Second Life Viewer Updater" "$@" 2>&1)"
|
||||
}
|
||||
elif [ -n "$kdesu" ]
|
||||
then function mysudo {
|
||||
err="$("$kdesu" "$@" 2>&1)"
|
||||
}
|
||||
else # couldn't find either one, just try it anyway
|
||||
function mysudo {
|
||||
err="$("$@" 2>&1)"
|
||||
}
|
||||
fi
|
||||
|
||||
# Move directories, using mysudo if we think it necessary. On error, $? is
|
||||
# nonzero; output is in $err instead of being written to stdout/stderr.
|
||||
function sudo_mv {
|
||||
# If we have write permission to both parent directories, shouldn't need
|
||||
# sudo.
|
||||
if [ -w "$(dirname "$1")" -a -w "$(dirname "$2")" ]
|
||||
then err="$(mv "$@" 2>&1)"
|
||||
else # use available sudo program; mysudo sets $? and $err
|
||||
mysudo mv "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# ****************************************************************************
|
||||
# main script logic
|
||||
# ****************************************************************************
|
||||
mydir="$(dirname "$0")"
|
||||
# We happen to know that the viewer specifies a marker-file pathname within
|
||||
# the logs directory.
|
||||
logsdir="$(dirname "$markerfile")"
|
||||
logname="$logsdir/updater.log"
|
||||
|
||||
# move aside old updater.log; we're about to create a new one
|
||||
[ -f "$logname" ] && mv "$logname" "$logname.old"
|
||||
|
||||
# Set up redirections for this script such that stderr is logged. (But first
|
||||
# move the previous stderr to file descriptor 3.)
|
||||
exec 3>&2- 2> "$logname"
|
||||
|
||||
# Rather than setting up a special pipeline to timestamp every line of stderr,
|
||||
# produce header lines into log file indicating timestamp and the arguments
|
||||
# with which we were invoked.
|
||||
date 1>&2
|
||||
log "$0 $*"
|
||||
|
||||
# Log every command we execute, along with any stderr it might produce
|
||||
set -x
|
||||
|
||||
status 'Installing Second Life...'
|
||||
|
||||
# Creating tempdir under /tmp means it's possible that tempdir is on a
|
||||
# different filesystem than INSTALL_DIR. One is tempted to create tempdir on a
|
||||
# path derived from `dirname INSTALL_DIR` -- but it seems modern 'mv' can
|
||||
# handle moving across filesystems??
|
||||
tempdir="$(mktemp -d)"
|
||||
tempinstall="$tempdir/install"
|
||||
# capture the actual error message, if any
|
||||
err="$(mkdir -p "$tempinstall" 2>&1)" || fail "$err"
|
||||
cleanup rm -rf "$tempdir"
|
||||
|
||||
# If we already knew the name of the tarball's top-level directory, we could
|
||||
# just move that when all was said and done. Since we don't, untarring to the
|
||||
# 'install' subdir with --strip 1 effectively renames that top-level
|
||||
# directory.
|
||||
# untar failures tend to be voluminous -- don't even try to capture, just log
|
||||
tar --strip 1 -xjf "$tarball" -C "$tempinstall" || fail "Untar command failed"
|
||||
|
||||
INSTALL_DIR="$(cd "$mydir/.." ; pwd)"
|
||||
|
||||
# Considering we're launched from a subdirectory of INSTALL_DIR, would be
|
||||
# surprising if it did NOT already exist...
|
||||
if [ -e "$INSTALL_DIR" ]
|
||||
then backup="$INSTALL_DIR.backup"
|
||||
backupn=1
|
||||
while [ -e "$backup" ]
|
||||
do backup="$INSTALL_DIR.backup.$backupn"
|
||||
((backupn += 1))
|
||||
done
|
||||
# on error, fail with actual error message from sudo_mv: permissions,
|
||||
# cross-filesystem mv, ...?
|
||||
sudo_mv "$INSTALL_DIR" "$backup" || fail "$err"
|
||||
fi
|
||||
# We unpacked the tarball into tempinstall. Move that.
|
||||
if ! sudo_mv "$tempinstall" "$INSTALL_DIR"
|
||||
then # If we failed to move the temp install to INSTALL_DIR, try to restore
|
||||
# INSTALL_DIR from backup. Save $err because next sudo_mv will trash it!
|
||||
realerr="$err"
|
||||
sudo_mv "$backup" "$INSTALL_DIR"
|
||||
fail "$realerr"
|
||||
fi
|
||||
|
||||
# Removing the tarball here, rather than with a 'cleanup' action, means we
|
||||
# only remove it if we succeeded.
|
||||
rm -f "$tarball"
|
||||
|
||||
# Launch the updated viewer. Restore original stderr from file descriptor 3,
|
||||
# though -- otherwise updater.log gets cluttered with the viewer log!
|
||||
"$INSTALL_DIR/secondlife" 2>&3- &
|
||||
|
|
|
|||
Loading…
Reference in New Issue