Alchemerge

Applies the following alchemy patches:
28fe46209ea5: Don't spam setPaused in fmod studio audio stream code
eb12ff41434a: Fix single click to walk triggering on huds
31955a7826b9: Fix double click to walk being triggered by huds and touchable objects
Fix double click to walk triggering while sitting and flying
Fix double click to walk behavior being inconsistent with single click to walk
Fix double click teleport being affected by transparent objects
Properly fixes MAINT-957

Compile stuff updates:
Adds VCRedist to package, should fix failure to launch reported by Nomade Zhao.
Updates package_description to better suit Singularity
Turns secondlife-bin in places to singularity-bin

Updates the following libraries:
Curl (7.47.0), gperftools (0.0.2), openssl (1.0.2f), SLVoice on Linux64,
This commit is contained in:
Lirusaito
2016-02-25 21:13:13 -05:00
parent d15ac7640c
commit 79965fade1
7 changed files with 286 additions and 133 deletions

View File

@@ -438,11 +438,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>6e443a01d85367e1f058fbfb378cf80e</string>
<string>edeb99f22363e6c7dde1ade2d2810246</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://depot.alchemyviewer.org/pub/windows/lib-vc14/curl-7.46.0-windows-201601151153.tar.bz2</string>
<string>http://depot.alchemyviewer.org/pub/windows/lib-vc14/curl-7.47.0-windows-201601291530.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -452,18 +452,18 @@
<key>archive</key>
<map>
<key>hash</key>
<string>9aca8339f269df5f42484f4bfafbf430</string>
<string>c822bf688eaaa9524d821c8a9d72e1d7</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/curl-7.46.0-windows64-201512122022.tar.bz2</string>
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/curl-7.47.0-windows64-201601291527.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
<key>version</key>
<string>7.46.0</string>
<string>7.47.0</string>
</map>
<key>dbus-glib</key>
<map>
@@ -1137,18 +1137,6 @@
<string>gperftools</string>
<key>platforms</key>
<map>
<key>darwin</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>0137e450bf24cff7e78634bb9a1c85e4</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-perftools_3p-update-google-perftools/rev/297263/arch/Darwin/installer/gperftools-2.0.297263-darwin-297263.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
</map>
<key>linux</key>
<map>
<key>archive</key>
@@ -1166,9 +1154,21 @@
<key>archive</key>
<map>
<key>hash</key>
<string>2946f9bbf227dee8881af43856ebb3a1</string>
<string>e81d9e4526ceac49f1532d6518085985</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-perftools_3p-update-google-perftools/rev/297263/arch/CYGWIN/installer/gperftools-2.0.297263-windows-297263.tar.bz2</string>
<string>https://bitbucket.org/alchemyviewer/publiclibs/downloads/gperftools-2.1-windows-20140120.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
<key>windows64</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>da6ec7472ed69fe3231eb95432a789d9</string>
<key>url</key>
<string>https://bitbucket.org/alchemyviewer/publiclibs/downloads/gperftools-2.2-windows64-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1249,7 +1249,7 @@
</map>
</map>
<key>version</key>
<string>0.0</string>
<string>0.0.2</string>
</map>
<key>jpeglib</key>
<map>
@@ -2232,11 +2232,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>213e62795373d12621282636fc760f20</string>
<string>835a1e2a994acd82a51d99e382de1549</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://depot.alchemyviewer.org/pub/windows/lib-vc14/openssl-1.0.2e-windows-201601151130.tar.bz2</string>
<string>http://depot.alchemyviewer.org/pub/windows/lib-vc14/openssl-1.0.2f-windows-201601291508.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -2246,18 +2246,18 @@
<key>archive</key>
<map>
<key>hash</key>
<string>44f5553704a5fc74f23342ac1216175b</string>
<string>5aae87070da31ed959585ca641ba3ad9</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/openssl-1.0.2e-windows64-201512121953.tar.bz2</string>
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/openssl-1.0.2f-windows64-201601291450.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
<key>version</key>
<string>1.0.2e</string>
<string>1.0.2f</string>
</map>
<key>quicktime</key>
<map>
@@ -2324,9 +2324,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>48ed7ddcf93fa3c751d677f5eb5f9367</string>
<string>9f60e56aba35ec90b3045e9d049ac284</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/Linux/installer/slvoice-3.2.0002.10426.298329-linux-298329.tar.bz2</string>
<string>http://depot.alchemyviewer.org/pub/linux/lib/slvoice-4.5.0009.17865-linux-20141214.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -2493,6 +2493,52 @@
<key>version</key>
<string>0.8.4</string>
</map>
<key>vcredist</key>
<map>
<key>copyright</key>
<string>Copyright (c) Microsoft Corporation. All rights reserved.</string>
<key>description</key>
<string>The Visual Studio C and C++ runtime redistributable</string>
<key>license</key>
<string>Proprietary</string>
<key>license_file</key>
<string>LICENSES/vcredist.txt</string>
<key>name</key>
<string>vcredist</string>
<key>platforms</key>
<map>
<key>windows</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>960953da9ab7c335a0f4f97e9bf8341c</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://depot.alchemyviewer.org/pub/windows/lib-vc14/vcredist-14.0.23506.0-windows-201601191536.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
<key>windows64</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>918588215463f36836eeefd9d3891868</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/vcredist-14.0.23506.0-windows64-201601191536.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
<key>version</key>
<string>14.0.23506.0</string>
</map>
<key>xmlrpc-epi</key>
<map>
<key>copyright</key>
@@ -2667,15 +2713,15 @@
<key>package_description</key>
<map>
<key>copyright</key>
<string>Copyright (c) 2014, Linden Research, Inc.</string>
<string>Copyright (c) 2010-2016, Singularity Viewer Team</string>
<key>description</key>
<string>Second Life Viewer</string>
<string>Singularity Viewer</string>
<key>license</key>
<string>LGPL</string>
<key>license_file</key>
<string>docs/LICENSE-source.txt</string>
<key>name</key>
<string>Second Life Viewer</string>
<string>Singularity Viewer</string>
<key>platforms</key>
<map>
<key>common</key>
@@ -2940,7 +2986,7 @@
<string>--config</string>
<string>RelWithDebInfo</string>
<string>--startup</string>
<string>secondlife-bin</string>
<string>singularity-bin</string>
</array>
<key>options</key>
<array>
@@ -2987,7 +3033,7 @@
<string>--config</string>
<string>Release</string>
<string>--startup</string>
<string>secondlife-bin</string>
<string>singularity-bin</string>
</array>
<key>options</key>
<array>
@@ -3042,7 +3088,7 @@
<string>--config</string>
<string>RelWithDebInfo</string>
<string>--startup</string>
<string>secondlife-bin</string>
<string>singularity-bin</string>
</array>
<key>options</key>
<array>
@@ -3090,7 +3136,7 @@
<string>--config</string>
<string>Release</string>
<string>--startup</string>
<string>secondlife-bin</string>
<string>singularity-bin</string>
</array>
<key>options</key>
<array>

View File

@@ -31,6 +31,7 @@
*/
#include "linden_common.h"
#include "llstreamingaudio_fmodstudio.h"
#include "llmath.h"
#include "llthread.h"
@@ -38,8 +39,6 @@
#include "fmod.hpp"
#include "fmod_errors.h"
#include "llstreamingaudio_fmodstudio.h"
inline bool Check_FMOD_Error(FMOD_RESULT result, const char *string)
{
if (result == FMOD_OK)
@@ -61,9 +60,9 @@ public:
FMOD_RESULT getOpenState(FMOD_OPENSTATE& openstate, unsigned int* percentbuffered = NULL, bool* starving = NULL, bool* diskbusy = NULL);
protected:
FMOD::System* mSystem;
FMOD::ChannelGroup* mChannelGroup;
FMOD::Channel* mStreamChannel;
FMOD::Sound* mInternetStream;
FMOD::ChannelGroup* mChannelGroup;
bool mReady;
std::string mInternetStreamURL;
@@ -119,11 +118,11 @@ FMOD_RESULT F_CALLBACK waveDataCallback(FMOD_DSP_STATE *dsp_state, float *inbuff
LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) :
mSystem(system),
mCurrentInternetStreamp(NULL),
mStreamDSP(NULL),
mStreamGroup(NULL),
mFMODInternetStreamChannelp(NULL),
mGain(1.0f),
mMetaData(NULL),
mStreamGroup(NULL),
mStreamDSP(NULL)
mMetaData(NULL)
{
FMOD_RESULT result;
@@ -142,10 +141,9 @@ LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) :
// Leave the net buffer properties at the default.
//FSOUND_Stream_Net_SetBufferProperties(20000, 40, 80);
Check_FMOD_Error(mSystem->createChannelGroup("stream", &mStreamGroup), "FMOD::System::createChannelGroup");
Check_FMOD_Error(system->createChannelGroup("stream", &mStreamGroup), "FMOD::System::createChannelGroup");
FMOD_DSP_DESCRIPTION dspdesc;
memset(&dspdesc, 0, sizeof(FMOD_DSP_DESCRIPTION)); //Zero out everything
FMOD_DSP_DESCRIPTION dspdesc = {0};
dspdesc.pluginsdkversion = FMOD_PLUGIN_SDK_VERSION;
strncpy(dspdesc.name, "Waveform", sizeof(dspdesc.name));
dspdesc.numoutputbuffers = 1;
@@ -154,7 +152,6 @@ LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) :
Check_FMOD_Error(system->createDSP(&dspdesc, &mStreamDSP), "FMOD::System::createDSP");
}
LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO()
{
stop();
@@ -168,7 +165,6 @@ LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO()
cleanupWaveData();
}
void LLStreamingAudio_FMODSTUDIO::start(const std::string& url)
{
//if (!mInited)
@@ -209,7 +205,7 @@ enum utf_endian_type_t
UTF16
};
std::string utf16input_to_utf8(char* input, U32 len, utf_endian_type_t type)
std::string utf16input_to_utf8(unsigned char* input, U32 len, utf_endian_type_t type)
{
if (type == UTF16)
{
@@ -226,7 +222,7 @@ std::string utf16input_to_utf8(char* input, U32 len, utf_endian_type_t type)
}
}
}
llutf16string out_16((utf16strtype*)input, len / 2);
llutf16string out_16((llutf16string::value_type*)input, len / 2);
if (len % 2)
{
out_16.push_back((input)[len - 1] << 8);
@@ -254,7 +250,7 @@ void LLStreamingAudio_FMODSTUDIO::update()
{
llassert_always(mCurrentInternetStreamp == NULL);
LL_INFOS() << "Starting internet stream: " << mPendingURL << LL_ENDL;
mCurrentInternetStreamp = new LLAudioStreamManagerFMODSTUDIO(mSystem,mStreamGroup, mPendingURL);
mCurrentInternetStreamp = new LLAudioStreamManagerFMODSTUDIO(mSystem, mStreamGroup, mPendingURL);
mURL = mPendingURL;
mMetaData = new LLSD;
mPendingURL.clear();
@@ -315,6 +311,7 @@ void LLStreamingAudio_FMODSTUDIO::update()
{
if(sound->getTag(NULL, i, &tag)!=FMOD_OK)
continue;
std::string name = tag.name;
switch(tag.type) //Crappy tag translate table.
{
@@ -373,7 +370,7 @@ void LLStreamingAudio_FMODSTUDIO::update()
break;
case(FMOD_TAGDATATYPE_STRING_UTF16):
{
std::string out = utf16input_to_utf8((char*)tag.data, tag.datalen, UTF16);
std::string out = utf16input_to_utf8((unsigned char*)tag.data, tag.datalen, UTF16);
if (out.length() && out[out.size() - 1] == 0)
out.erase(out.size() - 1);
(*mMetaData)[name] = out;
@@ -382,7 +379,7 @@ void LLStreamingAudio_FMODSTUDIO::update()
break;
case(FMOD_TAGDATATYPE_STRING_UTF16BE):
{
std::string out = utf16input_to_utf8((char*)tag.data, tag.datalen, UTF16BE);
std::string out = utf16input_to_utf8((unsigned char*)tag.data, tag.datalen, UTF16BE);
if (out.length() && out[out.size() - 1] == 0)
out.erase(out.size() - 1);
(*mMetaData)[name] = out;
@@ -393,6 +390,7 @@ void LLStreamingAudio_FMODSTUDIO::update()
}
}
}
static bool was_starved = false;
if(starving)
{
bool paused = false;
@@ -403,9 +401,11 @@ void LLStreamingAudio_FMODSTUDIO::update()
LL_INFOS() << " (progress="<<progress<<")" << LL_ENDL;
Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(true), "FMOD::Channel::setPaused");
}
was_starved = true;
}
else if(progress > 80)
else if(progress > 80 && was_starved)
{
was_starved = false;
Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(false), "FMOD::Channel::setPaused");
}
}
@@ -446,7 +446,6 @@ void LLStreamingAudio_FMODSTUDIO::stop()
mDeadStreams.push_back(mCurrentInternetStreamp);
}
mCurrentInternetStreamp = NULL;
//mURL.clear();
}
}
@@ -514,7 +513,8 @@ void LLStreamingAudio_FMODSTUDIO::setGain(F32 vol)
}
}
/*virtual*/ bool LLStreamingAudio_FMODSTUDIO::getWaveData(float* arr, S32 count, S32 stride/*=1*/)
/* virtual */
bool LLStreamingAudio_FMODSTUDIO::getWaveData(float* arr, S32 count, S32 stride/*=1*/)
{
if (count > (WAVE_BUFFER_SIZE / 2))
LL_ERRS("AudioImpl") << "Count=" << count << " exceeds WAVE_BUFFER_SIZE/2=" << WAVE_BUFFER_SIZE << LL_ENDL;
@@ -547,9 +547,9 @@ void LLStreamingAudio_FMODSTUDIO::setGain(F32 vol)
LLAudioStreamManagerFMODSTUDIO::LLAudioStreamManagerFMODSTUDIO(FMOD::System *system, FMOD::ChannelGroup *group, const std::string& url) :
mSystem(system),
mChannelGroup(group),
mStreamChannel(NULL),
mInternetStream(NULL),
mChannelGroup(group),
mReady(false)
{
mInternetStreamURL = url;
@@ -632,8 +632,7 @@ FMOD_RESULT LLAudioStreamManagerFMODSTUDIO::getOpenState(FMOD_OPENSTATE& state,
void LLStreamingAudio_FMODSTUDIO::setBufferSizes(U32 streambuffertime, U32 decodebuffertime)
{
Check_FMOD_Error(mSystem->setStreamBufferSize(streambuffertime / 1000 * 128 * 128, FMOD_TIMEUNIT_RAWBYTES), "FMOD::System::setStreamBufferSize");
FMOD_ADVANCEDSETTINGS settings;
memset(&settings,0,sizeof(settings));
FMOD_ADVANCEDSETTINGS settings = {0};
settings.cbSize=sizeof(settings);
settings.defaultDecodeBufferSize = decodebuffertime;//ms
Check_FMOD_Error(mSystem->setAdvancedSettings(&settings), "FMOD::System::setAdvancedSettings");
@@ -672,4 +671,4 @@ void LLStreamingAudio_FMODSTUDIO::cleanupWaveData()
if(mStreamDSP)
Check_FMOD_Error(mStreamDSP->release(), "FMOD::DSP::release");
mStreamDSP = NULL;
}
}

View File

@@ -183,11 +183,11 @@ HRESULT GetVideoMemoryViaWMI( WCHAR* strInputDeviceID, DWORD* pdwAdapterRam )
SAFE_RELEASE( pVideoControllers[iController] );
}
}
SAFE_RELEASE(pEnumVideoControllers);
}
if( pClassName )
SysFreeString( pClassName );
SAFE_RELEASE( pEnumVideoControllers );
}
if( pNamespace )
@@ -206,7 +206,7 @@ HRESULT GetVideoMemoryViaWMI( WCHAR* strInputDeviceID, DWORD* pdwAdapterRam )
return E_FAIL;
}
void get_wstring(IDxDiagContainer* containerp, WCHAR* wszPropName, WCHAR* wszPropValue, int outputSize)
void get_wstring(IDxDiagContainer* containerp, const WCHAR* wszPropName, WCHAR* wszPropValue, int outputSize)
{
HRESULT hr;
VARIANT var;
@@ -219,10 +219,10 @@ void get_wstring(IDxDiagContainer* containerp, WCHAR* wszPropName, WCHAR* wszPro
switch( var.vt )
{
case VT_UI4:
swprintf( wszPropValue, L"%d", var.ulVal ); /* Flawfinder: ignore */
swprintf(wszPropValue, outputSize, L"%d", var.ulVal); /* Flawfinder: ignore */
break;
case VT_I4:
swprintf( wszPropValue, L"%d", var.lVal ); /* Flawfinder: ignore */
swprintf(wszPropValue, outputSize, L"%d", var.lVal); /* Flawfinder: ignore */
break;
case VT_BOOL:
wcscpy( wszPropValue, (var.boolVal) ? L"true" : L"false" ); /* Flawfinder: ignore */
@@ -237,7 +237,7 @@ void get_wstring(IDxDiagContainer* containerp, WCHAR* wszPropName, WCHAR* wszPro
VariantClear( &var );
}
std::string get_string(IDxDiagContainer *containerp, WCHAR *wszPropName)
std::string get_string(IDxDiagContainer *containerp, const WCHAR *wszPropName)
{
WCHAR wszPropValue[256];
get_wstring(containerp, wszPropName, wszPropValue, 256);
@@ -452,9 +452,9 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
hr = CoInitialize(NULL);
if (FAILED(hr))
{
LL_WARNS("AppInit") << "COM library initialization failed!" << LL_ENDL;
gWriteDebug("COM library initialization failed!\n");
return FALSE;
LL_WARNS() << "COM initialization failure!" << LL_ENDL;
gWriteDebug("COM initialization failure!\n");
return ok;
}
IDxDiagProvider *dx_diag_providerp = NULL;
@@ -507,8 +507,6 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
goto LCleanup;
}
HRESULT hr;
// Get display driver information
LL_DEBUGS("AppInit") << "dx_diag_rootp->GetChildContainer" << LL_ENDL;
hr = dx_diag_rootp->GetChildContainer(L"DxDiag_DisplayDevices", &devices_containerp);
@@ -718,8 +716,8 @@ LLSD LLDXHardware::getDisplayInfo()
hr = CoInitialize(NULL);
if (FAILED(hr))
{
LL_WARNS("AppInit") << "COM library initialization failed!" << LL_ENDL;
gWriteDebug("COM library initialization failed!\n");
LL_WARNS() << "COM initialization failure!" << LL_ENDL;
gWriteDebug("COM initialization failure!\n");
return ret;
}
@@ -772,8 +770,6 @@ LLSD LLDXHardware::getDisplayInfo()
goto LCleanup;
}
HRESULT hr;
// Get display driver information
LL_INFOS() << "dx_diag_rootp->GetChildContainer" << LL_ENDL;
hr = dx_diag_rootp->GetChildContainer(L"DxDiag_DisplayDevices", &devices_containerp);

View File

@@ -42,6 +42,10 @@ include(ViewerMiscLibs)
include(WinManifest)
include(ZLIB)
if (MSVC)
use_prebuilt_binary(vcredist)
endif (MSVC)
include_directories(
${STATEMACHINE_INCLUDE_DIRS}
${DBUSGLIB_INCLUDE_DIRS}
@@ -64,7 +68,6 @@ include_directories(
${LLWINDOW_INCLUDE_DIRS}
${LLXML_INCLUDE_DIRS}
${HUNSPELL_INCLUDE_DIR}
${LLAPPEARANCE_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
)
@@ -593,8 +596,7 @@ set(viewer_SOURCE_FILES
wlfPanel_AdvSettings.cpp
)
# This gets renamed in the packaging step
set(VIEWER_BINARY_NAME "secondlife-bin" CACHE STRING
set(VIEWER_BINARY_NAME "singularity-bin" CACHE STRING
"The name of the viewer executable to create.")
set(viewer_HEADER_FILES
@@ -1628,7 +1630,6 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${LLVFS_LIBRARIES}
${LLWINDOW_LIBRARIES}
${LLXML_LIBRARIES}
# ${LSCRIPT_LIBRARIES}
${LLMATH_LIBRARIES}
${LLCOMMON_LIBRARIES}
${NDOF_LIBRARY}
@@ -1671,7 +1672,7 @@ if (LINUX)
add_dependencies(${VIEWER_BINARY_NAME} generate_viewer_version)
add_custom_command(
OUTPUT ${product}.tar.bz2
OUTPUT ${product}.tar.xz
COMMAND ${PYTHON_EXECUTABLE}
ARGS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
@@ -1733,7 +1734,7 @@ if (DARWIN)
set(MACOSX_BUNDLE_BUNDLE_NAME "${VIEWER_BRANDING_NAME}")
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}")
set(MACOSX_BUNDLE_BUNDLE_VERSION "${${ROOT_PROJECT_NAME}_VERSION}")
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2013 Siana Gearz")
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2016 Siana Gearz")
set_target_properties(
${VIEWER_BINARY_NAME}
@@ -1804,7 +1805,6 @@ if (INSTALL)
include(${CMAKE_CURRENT_SOURCE_DIR}/ViewerInstall.cmake)
endif (INSTALL)
if (PACKAGE)
set(SYMBOL_NAME ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${VIEWER_BRANDING_NAME_CAMELCASE}-${${ROOT_PROJECT_NAME}_VERSION}-symbols)
set(SYMBOL_SEARCH_DIRS "")

View File

@@ -423,11 +423,11 @@ Section "Viewer"
;This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
%%INSTALL_FILES%%
;!ifdef WIN64_BIN_BUILD
; ExecWait '"$INSTDIR\redist\vc_redist.x64.exe" /passive'
;!else
; ExecWait '"$INSTDIR\redist\vc_redist.x86.exe" /passive'
;!endif
!ifdef WIN64_BIN_BUILD
ExecWait '"$INSTDIR\redist\vc_redist.x64.exe" /passive /norestart'
!else
ExecWait '"$INSTDIR\redist\vc_redist.x86.exe" /passive /norestart'
!endif
;Pass the installer's language to the client to use as a default
StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
@@ -482,7 +482,7 @@ Section "Viewer"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "NoRepair" 1
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "Publisher" "${VENDORSTR}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLInfoAbout" "http://www.singularityviewer.org"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLUpdateInfo" "http://www.singularityviewer.org"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLUpdateInfo" "http://www.singularityviewer.org/downloads"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" "$\"$INSTDIR\uninst.exe$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "QuietUninstallString" "$\"$INSTDIR\uninst.exe$\" /S"
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2

View File

@@ -108,7 +108,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
mMouseDownX = x;
mMouseDownY = y;
//left mouse down always picks transparent
//left mouse down always picks transparent (but see handleMouseUp)
mPick = gViewerWindow->pickImmediate(x, y, TRUE);
mPick.mKeyMask = mask;
@@ -605,6 +605,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
if (handleMediaHover(mHoverPick))
{
// cursor set by media object
LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL;
}
else if (!mMouseOutsideSlop
&& mMouseButtonDown
@@ -640,6 +641,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
ECursorType cursor = cursorFromObject(click_action_object);
gViewerWindow->setCursor(cursor);
LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL;
}
// [RLVa:KB] - Checked: 2010-03-11 (RLVa-1.2.0e) | Added: RLVa-1.1.0l
else if ( (object) && (rlv_handler_t::isEnabled()) && (!gRlvHandler.canTouch(object)) )
@@ -652,22 +654,23 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
|| (parent && !parent->isAvatar() && parent->flagUsePhysics()))
{
gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL;
}
else if ( (object && object->flagHandleTouch())
|| (parent && parent->flagHandleTouch()))
{
gViewerWindow->setCursor(UI_CURSOR_HAND);
LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL;
}
else
{
gViewerWindow->setCursor(UI_CURSOR_ARROW);
LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL;
}
}
if(!object)
{
//gViewerWindow->setCursor(UI_CURSOR_ARROW);
// We need to clear media hover flag
LLViewerMediaFocus::getInstance()->clearHover();
}
@@ -693,29 +696,51 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
&& gAgentAvatarp
&& !gAgentAvatarp->isSitting()
&& !mBlockClickToWalk // another behavior hasn't cancelled click to walk
&& !mPick.mPosGlobal.isExactlyZero() // valid coordinates for pick
&& (mPick.mPickType == LLPickInfo::PICK_LAND // we clicked on land
|| mPick.mObjectID.notNull())) // or on an object
)
{
// handle special cases of steering picks
LLViewerObject* avatar_object = mPick.getObject();
// We may be doing click to walk, but we don't want to use a target on
// a transparent object because the user thought they were clicking on
// whatever they were seeing through it, so recompute what was clicked on
// ignoring transparent objects
LLPickInfo savedPick = mPick;
mPick = gViewerWindow->pickImmediate(savedPick.mMousePt.mX, savedPick.mMousePt.mY,
FALSE /* ignore transparent *//*,
FALSE*/ /* ignore particles */); // Singu TODO: Particle picking
// get pointer to avatar
while (avatar_object && !avatar_object->isAvatar())
{
avatar_object = (LLViewerObject*)avatar_object->getParent();
LLViewerObject* objp = mPick.getObject();
bool is_in_world = mPick.mObjectID.notNull() && objp && !objp->isHUDAttachment(); // We clicked on a non-hud object
bool is_land = mPick.mPickType == LLPickInfo::PICK_LAND; // or on land
bool pos_non_zero = !mPick.mPosGlobal.isExactlyZero(); // valid coordinates for pick
if (pos_non_zero && (is_land || is_in_world))
{
// get pointer to avatar
while (objp && !objp->isAvatar())
{
objp = (LLViewerObject*) objp->getParent();
}
if (objp && ((LLVOAvatar*) objp)->isSelf())
{
const F64 SELF_CLICK_WALK_DISTANCE = 3.0;
// pretend we picked some point a bit in front of avatar
mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE;
}
gAgentCamera.setFocusOnAvatar(TRUE, TRUE);
walkToClickedLocation();
//LLFirstUse::notMoving(false);
return TRUE;
}
if (avatar_object && ((LLVOAvatar*)avatar_object)->isSelf())
{
const F64 SELF_CLICK_WALK_DISTANCE = 3.0;
// pretend we picked some point a bit in front of avatar
mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE;
}
gAgentCamera.setFocusOnAvatar(TRUE, TRUE);
walkToClickedLocation();
return TRUE;
else
{
LL_DEBUGS("maint5901") << "walk target was "
<< (mPick.mPosGlobal.isExactlyZero() ? "zero" : "not zero")
<< ", pick type was " << (mPick.mPickType == LLPickInfo::PICK_LAND ? "land" : "not land")
<< ", pick object was " << mPick.mObjectID
<< LL_ENDL;
// we didn't click to walk, so restore the original target
mPick = savedPick;
}
}
gViewerWindow->setCursor(UI_CURSOR_ARROW);
if (hasMouseCapture())
@@ -754,17 +779,22 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
return TRUE;
}
if (gSavedSettings.getBOOL("DoubleClickAutoPilot"))
{
if ((mPick.mPickType == LLPickInfo::PICK_LAND && !mPick.mPosGlobal.isExactlyZero()) ||
(mPick.mObjectID.notNull() && !mPick.mPosGlobal.isExactlyZero()))
{
walkToClickedLocation();
return TRUE;
}
}
else if (gSavedSettings.getBOOL("DoubleClickTeleport"))
bool dbl_click_autoplt = gSavedSettings.getBOOL("DoubleClickAutoPilot");
bool dbl_click_teleport = gSavedSettings.getBOOL("DoubleClickTeleport");
if (dbl_click_autoplt || dbl_click_teleport)
{
// Save the original pick
LLPickInfo savedPick = mPick;
// We may be doing double click to walk or a double click teleport, but
// we don't want to use a target on a transparent object because the user
// thought they were clicking on whatever they were seeing through it, so
// recompute what was clicked on ignoring transparent objects
mPick = gViewerWindow->pickImmediate(savedPick.mMousePt.mX, savedPick.mMousePt.mY,
FALSE /* ignore transparent *//*,
FALSE*/ /* ignore particles */); // Singu TODO: Particle picking
LLViewerObject* objp = mPick.getObject();
LLViewerObject* parentp = objp ? objp->getRootEdit() : NULL;
@@ -772,15 +802,43 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
bool is_land = mPick.mPickType == LLPickInfo::PICK_LAND;
bool pos_non_zero = !mPick.mPosGlobal.isExactlyZero();
bool has_touch_handler = (objp && objp->flagHandleTouch()) || (parentp && parentp->flagHandleTouch());
bool has_click_action = final_click_action(objp);
if (pos_non_zero && (is_land || (is_in_world && !has_touch_handler && !has_click_action)))
bool no_click_action = final_click_action(objp) == CLICK_ACTION_NONE;
if (pos_non_zero && (is_land || (is_in_world && !has_touch_handler && no_click_action)))
{
LLVector3d pos = mPick.mPosGlobal;
pos.mdV[VZ] += gAgentAvatarp->getPelvisToFoot();
gAgent.teleportViaLocationLookAt(pos);
return TRUE;
if (dbl_click_autoplt
&& !gAgent.getFlying() // don't auto-navigate while flying until that works
&& isAgentAvatarValid()
&& !gAgentAvatarp->isSitting()
)
{
// get pointer to avatar
while (objp && !objp->isAvatar())
{
objp = (LLViewerObject*) objp->getParent();
}
if (objp && ((LLVOAvatar*) objp)->isSelf())
{
const F64 SELF_CLICK_WALK_DISTANCE = 3.0;
// pretend we picked some point a bit in front of avatar
mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE;
}
gAgentCamera.setFocusOnAvatar(TRUE, TRUE);
walkToClickedLocation();
//LLFirstUse::notMoving(false);
return TRUE;
}
else if (dbl_click_teleport)
{
LLVector3d pos = mPick.mPosGlobal;
pos.mdV[VZ] += gAgentAvatarp->getPelvisToFoot();
gAgent.teleportViaLocationLookAt(pos);
return TRUE;
}
}
// restore the original pick for any other purpose
mPick = savedPick;
}
return FALSE;
@@ -1271,12 +1329,10 @@ BOOL LLToolPie::handleRightClickPick()
void LLToolPie::showVisualContextMenuEffect()
{
// <edit>
if (gSavedSettings.getBOOL("DisablePointAtAndBeam"))
{
return;
}
// </edit>
// VEFFECT: ShowPie
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE);
@@ -1322,6 +1378,7 @@ bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_di
void LLToolPie::startCameraSteering()
{
//LLFirstUse::notMoving(false);
mMouseOutsideSlop = true;
mBlockClickToWalk = true;
@@ -1429,7 +1486,7 @@ void LLToolPie::steerCameraWithMouse(S32 x, S32 y)
{
old_yaw_angle = F_PI_BY_TWO + asinf(pick_distance_from_rotation_center / camera_distance_from_rotation_center);
if (mouse_ray * rotation_frame.getLeftAxis() < 0.f)
if (old_mouse_ray * rotation_frame.getLeftAxis() < 0.f)
{
old_yaw_angle *= -1.f;
}

View File

@@ -78,7 +78,7 @@ class ViewerManifest(LLManifest):
# ... and the entire windlight directory
self.path("windlight")
# ... and the hunspell dictionaries
# ... and the included spell checking dictionaries
self.path("dictionaries")
# include the extracted packages information (see BuildPackagesInfo.cmake)
@@ -243,6 +243,51 @@ class WindowsManifest(ViewerManifest):
def final_exe(self):
return self.app_name_oneword()+"Viewer.exe"
def test_msvcrt_and_copy_action(self, src, dst):
# This is used to test a dll manifest.
# It is used as a temporary override during the construct method
from test_win32_manifest import test_assembly_binding
if src and (os.path.exists(src) or os.path.islink(src)):
# ensure that destination path exists
self.cmakedirs(os.path.dirname(dst))
self.created_paths.append(dst)
if not os.path.isdir(src):
if(self.args['configuration'].lower() == 'debug'):
test_assembly_binding(src, "Microsoft.VC80.DebugCRT", "8.0.50727.4053")
else:
test_assembly_binding(src, "Microsoft.VC80.CRT", "8.0.50727.4053")
self.ccopy(src,dst)
else:
raise Exception("Directories are not supported by test_CRT_and_copy_action()")
else:
print "Doesn't exist:", src
def test_for_no_msvcrt_manifest_and_copy_action(self, src, dst):
# This is used to test that no manifest for the msvcrt exists.
# It is used as a temporary override during the construct method
from test_win32_manifest import test_assembly_binding
from test_win32_manifest import NoManifestException, NoMatchingAssemblyException
if src and (os.path.exists(src) or os.path.islink(src)):
# ensure that destination path exists
self.cmakedirs(os.path.dirname(dst))
self.created_paths.append(dst)
if not os.path.isdir(src):
try:
if(self.args['configuration'].lower() == 'debug'):
test_assembly_binding(src, "Microsoft.VC80.DebugCRT", "")
else:
test_assembly_binding(src, "Microsoft.VC80.CRT", "")
raise Exception("Unknown condition")
except NoManifestException, err:
pass
except NoMatchingAssemblyException, err:
pass
self.ccopy(src,dst)
else:
raise Exception("Directories are not supported by test_CRT_and_copy_action()")
else:
print "Doesn't exist:", src
def construct(self):
super(WindowsManifest, self).construct()
@@ -252,8 +297,8 @@ class WindowsManifest(ViewerManifest):
debpkgdir = os.path.join(pkgdir, "lib", "debug")
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())
# Find singularity-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.
self.path(src='%s/singularity-bin.exe' % self.args['configuration'], dst=self.final_exe())
# Plugin host application
self.path2basename(os.path.join(os.pardir,
@@ -582,6 +627,11 @@ class Windows_i686_Manifest(WindowsManifest):
self.path("fmod.dll")
except:
print "Skipping fmodstudio audio library(assuming other audio engine)"
self.end_prefix()
if self.prefix(src=os.path.join(self.args['build'], os.pardir, 'packages', 'bin'), dst="redist"):
self.path("vc_redist.x86.exe")
self.end_prefix()
@@ -601,8 +651,14 @@ class Windows_x86_64_Manifest(WindowsManifest):
self.path("fmod64.dll")
except:
print "Skipping fmodstudio audio library(assuming other audio engine)"
self.end_prefix()
if self.prefix(src=os.path.join(self.args['build'], os.pardir, 'packages', 'bin'), dst="redist"):
self.path("vc_redist.x64.exe")
self.end_prefix()
class DarwinManifest(ViewerManifest):
def construct(self):
# copy over the build result (this is a no-op if run within the xcode script)
@@ -893,7 +949,7 @@ class LinuxManifest(ViewerManifest):
# self.put_in_file(self.flags_list(), 'gridargs.dat')
if self.prefix(src="", dst="bin"):
self.path("secondlife-bin","do-not-directly-run-singularity-bin")
self.path("singularity-bin","do-not-directly-run-singularity-bin")
self.path2basename("../llplugin/slplugin", "SLPlugin")
self.end_prefix("bin")
@@ -1043,13 +1099,13 @@ class Linux_x86_64_Manifest(LinuxManifest):
except:
print "Skipping libfmod.so - not found"
pass
self.end_prefix("lib64")
# Vivox runtimes
if self.prefix(src=relpkgdir, dst="bin"):
self.path("SLVoice")
self.end_prefix("bin")
if self.prefix(src=relpkgdir, dst="lib32"):
self.path("libortp.so")
self.path("libsndfile.so.1")
@@ -1083,4 +1139,3 @@ def symlinkf(src, dst):
if __name__ == "__main__":
main()