Merge viewer-bear
commit
faf58a81eb
|
|
@ -70,15 +70,12 @@ additional_packages = ""
|
|||
# the viewer_channel_suffix is prefixed by a blank and then appended to the viewer_channel
|
||||
# for the package in a setting that overrides the compiled-in value
|
||||
################################################################
|
||||
## Removed 2015-07-02 (MAINT-5360) until we fix packaging step in Team City
|
||||
## additional_packages = "EDU"
|
||||
additional_packages = "EDU"
|
||||
|
||||
# The EDU package allows us to create a separate release channel whose expirations
|
||||
# are synchronized as much as possible with the academic year
|
||||
## Removed 2015-07-02 (MAINT-5360) until we fix packaging step in Team City
|
||||
## EDU_sourceid = ""
|
||||
## Removed 2015-07-02 (MAINT-5360) until we fix packaging step in Team City
|
||||
## EDU_viewer_channel_suffix = "edu"
|
||||
EDU_sourceid = ""
|
||||
EDU_viewer_channel_suffix = "edu"
|
||||
|
||||
# Notifications - to configure email notices, add a setting like this:
|
||||
# <username>_<reponame>.email = <email-address>
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ Ansariel Hiller
|
|||
STORM-2105
|
||||
MAINT-5533
|
||||
MAINT-5756
|
||||
MAINT-2199
|
||||
Aralara Rajal
|
||||
Arare Chantilly
|
||||
CHUIBUG-191
|
||||
|
|
|
|||
|
|
@ -145,6 +145,43 @@ if (LL_TESTS)
|
|||
"${CMAKE_CURRENT_SOURCE_DIR}/tests/test_llcorehttp_peer.py"
|
||||
)
|
||||
|
||||
if (DARWIN)
|
||||
# Path inside the app bundle where we'll need to copy libraries
|
||||
set(LL_TEST_DESTINATION_DIR
|
||||
${CMAKE_SOURCE_DIR}/../build-darwin-i386/sharedlibs/Resources
|
||||
)
|
||||
|
||||
# Create the Contents/Resources directory
|
||||
add_custom_command(
|
||||
TARGET INTEGRATION_TEST_llcorehttp PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
ARGS
|
||||
-E
|
||||
make_directory
|
||||
${LL_TEST_DESTINATION_DIR}
|
||||
COMMENT "Creating Resources directory in app bundle."
|
||||
)
|
||||
|
||||
# Copy the required libraries to the package app
|
||||
add_custom_command(TARGET INTEGRATION_TEST_llcorehttp PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libapr-1.0.dylib ${LL_TEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libapr-1.0.dylib
|
||||
)
|
||||
add_custom_command(TARGET INTEGRATION_TEST_llcorehttp PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libaprutil-1.0.dylib ${LL_TEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libaprutil-1.0.dylib
|
||||
)
|
||||
add_custom_command(TARGET INTEGRATION_TEST_llcorehttp PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexception_handler.dylib ${LL_TEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexception_handler.dylib
|
||||
)
|
||||
add_custom_command(TARGET INTEGRATION_TEST_llcorehttp PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexpat.1.5.2.dylib ${LL_TEST_DESTINATION_DIR}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexpat.1.5.2.dylib
|
||||
)
|
||||
|
||||
endif (DARWIN)
|
||||
|
||||
#
|
||||
# Example Programs
|
||||
#
|
||||
|
|
|
|||
|
|
@ -127,4 +127,12 @@ if (DARWIN)
|
|||
LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp"
|
||||
)
|
||||
|
||||
add_custom_command(TARGET media_plugin_cef
|
||||
POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "@executable_path/Chromium Embedded Framework"
|
||||
"@executable_path/../../../../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework"
|
||||
"$<TARGET_FILE:media_plugin_cef>"
|
||||
VERBATIM
|
||||
COMMENT "Fixing path to CEF Framework"
|
||||
)
|
||||
|
||||
endif (DARWIN)
|
||||
|
|
|
|||
|
|
@ -745,7 +745,8 @@ namespace action_give_inventory
|
|||
static LLInventoryPanel* get_active_inventory_panel()
|
||||
{
|
||||
LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
|
||||
if (!active_panel)
|
||||
LLFloater* floater_appearance = LLFloaterReg::findInstance("appearance");
|
||||
if (!active_panel || (floater_appearance && floater_appearance->hasFocus()))
|
||||
{
|
||||
active_panel = get_outfit_editor_inventory_panel();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1871,6 +1871,16 @@ BOOL LLFavoritesOrderStorage::saveFavoritesRecord(bool pref_changed)
|
|||
}
|
||||
}
|
||||
|
||||
for (std::set<LLUUID>::iterator it = mMissingSLURLs.begin(); it != mMissingSLURLs.end(); it++)
|
||||
{
|
||||
slurls_map_t::iterator slurl_iter = mSLURLs.find(*it);
|
||||
if (slurl_iter != mSLURLs.end())
|
||||
{
|
||||
pref_changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if((items != mPrevFavorites) || name_changed || pref_changed)
|
||||
{
|
||||
std::string filename = getStoredFavoritesFilename();
|
||||
|
|
@ -1891,6 +1901,7 @@ BOOL LLFavoritesOrderStorage::saveFavoritesRecord(bool pref_changed)
|
|||
|
||||
LLSD user_llsd;
|
||||
S32 fav_iter = 0;
|
||||
mMissingSLURLs.clear();
|
||||
for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); it++)
|
||||
{
|
||||
LLSD value;
|
||||
|
|
@ -1908,8 +1919,10 @@ BOOL LLFavoritesOrderStorage::saveFavoritesRecord(bool pref_changed)
|
|||
else
|
||||
{
|
||||
getSLURL((*it)->getAssetUUID());
|
||||
value["slurl"] = "";
|
||||
user_llsd[fav_iter] = value;
|
||||
mUpdateRequired = true;
|
||||
return FALSE;
|
||||
mMissingSLURLs.insert((*it)->getAssetUUID());
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1945,7 +1958,6 @@ BOOL LLFavoritesOrderStorage::saveFavoritesRecord(bool pref_changed)
|
|||
<< "' at '" << filename << "' " << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
mPrevFavorites = items;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ private:
|
|||
|
||||
typedef std::map<LLUUID, std::string> slurls_map_t;
|
||||
slurls_map_t mSLURLs;
|
||||
|
||||
std::set<LLUUID> mMissingSLURLs;
|
||||
bool mIsDirty;
|
||||
|
||||
struct IsNotInFavorites
|
||||
|
|
|
|||
|
|
@ -73,7 +73,11 @@ void LLFloaterSidePanelContainer::closeFloater(bool app_quitting)
|
|||
LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance*>(getPanel("appearance"));
|
||||
if ( panel_appearance )
|
||||
{
|
||||
panel_appearance->getWearable()->onClose();
|
||||
LLPanelEditWearable *edit_wearable_ptr = panel_appearance->getWearable();
|
||||
if (edit_wearable_ptr)
|
||||
{
|
||||
edit_wearable_ptr->onClose();
|
||||
}
|
||||
panel_appearance->showOutfitsInventoryPanel();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)
|
|||
|
||||
if (is_outfit_edit_visible || is_wearable_edit_visible)
|
||||
{
|
||||
const LLViewerWearable *wearable_ptr = mEditWearable->getWearable();
|
||||
const LLViewerWearable *wearable_ptr = mEditWearable ? mEditWearable->getWearable() : NULL;
|
||||
if (!wearable_ptr)
|
||||
{
|
||||
LL_WARNS() << "Visibility change to invalid wearable" << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -159,8 +159,8 @@ LLViewerParcelMgr::LLViewerParcelMgr()
|
|||
// JC: Resolved a merge conflict here, eliminated
|
||||
// mBlockedImage->setAddressMode(LLTexUnit::TAM_WRAP);
|
||||
// because it is done in llviewertexturelist.cpp
|
||||
mBlockedImage = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryLines.png");
|
||||
mPassImage = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryPassLines.png");
|
||||
mBlockedImage = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryLines.png", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI);
|
||||
mPassImage = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryPassLines.png", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI);
|
||||
|
||||
S32 overlay_size = mParcelsPerEdge * mParcelsPerEdge / PARCEL_OVERLAY_CHUNKS;
|
||||
sPackedOverlay = new U8[overlay_size];
|
||||
|
|
|
|||
|
|
@ -686,7 +686,7 @@ public:
|
|||
static LLViewerFetchedTexture* getFetchedTextureFromFile(const std::string& filename,
|
||||
FTType f_type = FTT_LOCAL_FILE,
|
||||
BOOL usemipmap = TRUE,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_UI,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_NONE,
|
||||
S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
|
||||
LLGLint internal_format = 0,
|
||||
LLGLenum primary_format = 0,
|
||||
|
|
|
|||
|
|
@ -1764,17 +1764,18 @@ LLUIImagePtr LLUIImageList::loadUIImage(LLViewerFetchedTexture* imagep, const st
|
|||
//don't compress UI images
|
||||
imagep->getGLTexture()->setAllowCompression(false);
|
||||
|
||||
//all UI images are non-deletable, except downloadable icons
|
||||
if (imagep->getBoostLevel() != LLGLTexture::BOOST_ICON)
|
||||
{
|
||||
imagep->setNoDelete();
|
||||
}
|
||||
|
||||
LLUIImagePtr new_imagep = new LLUIImage(name, imagep);
|
||||
new_imagep->setScaleStyle(scale_style);
|
||||
|
||||
mUIImages.insert(std::make_pair(name, new_imagep));
|
||||
mUITextureList.push_back(imagep);
|
||||
if (imagep->getBoostLevel() != LLGLTexture::BOOST_ICON &&
|
||||
imagep->getBoostLevel() != LLGLTexture::BOOST_PREVIEW)
|
||||
{
|
||||
// Don't add downloadable content into this list
|
||||
// all UI images are non-deletable and list does not support deletion
|
||||
imagep->setNoDelete();
|
||||
mUIImages.insert(std::make_pair(name, new_imagep));
|
||||
mUITextureList.push_back(imagep);
|
||||
}
|
||||
|
||||
//Note:
|
||||
//Some other textures such as ICON also through this flow to be fetched.
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ $/LicenseInfo$
|
|||
"""
|
||||
import sys
|
||||
import os.path
|
||||
import shutil
|
||||
import errno
|
||||
import re
|
||||
import tarfile
|
||||
|
|
@ -1031,14 +1032,17 @@ class DarwinManifest(ViewerManifest):
|
|||
# This code constructs a relative path from the
|
||||
# target framework folder back to the location of the symlink.
|
||||
# It needs to be relative so that the symlink still works when
|
||||
# (as is normal) the user moves the app bunlde out of the DMG
|
||||
# (as is normal) the user moves the app bundle out of the DMG
|
||||
# and into the /Applications folder. Note we also call 'raise'
|
||||
# to terminate the process if we get an error since without
|
||||
# this symlink, Second Life web media can't possibly work.
|
||||
# Real Framework folder:
|
||||
# Second Life.app/Contents/Frameworks/Chromium Embedded Framework.framework/
|
||||
# Location of symlink and why it'ds relavie
|
||||
# Location of symlink and why it'ds relative
|
||||
# Second Life.app/Contents/Resources/SLPlugin.app/Contents/Frameworks/Chromium Embedded Framework.framework/
|
||||
# Real Frameworks folder, with the symlink inside the bundled SLPlugin.app (and why it's relative)
|
||||
# <top level>.app/Contents/Frameworks/Chromium Embedded Framework.framework/
|
||||
# <top level>.app/Contents/Resources/SLPlugin.app/Contents/Frameworks/Chromium Embedded Framework.framework ->
|
||||
frameworkpath = os.path.join(os.pardir, os.pardir, os.pardir, os.pardir, "Frameworks", "Chromium Embedded Framework.framework")
|
||||
try:
|
||||
symlinkf(frameworkpath, pluginframeworkpath)
|
||||
|
|
@ -1048,10 +1052,6 @@ class DarwinManifest(ViewerManifest):
|
|||
|
||||
self.end_prefix("Contents")
|
||||
|
||||
# fix up media_plugin.dylib so it knows where to look for CEF files it needs
|
||||
self.run_command('install_name_tool -change "@executable_path/Chromium Embedded Framework" "@executable_path/../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework" "%(config)s/Firestorm.app/Contents/Resources/llplugin/media_plugin_cef.dylib"' %
|
||||
{ 'config' : self.args['configuration'] })
|
||||
|
||||
# NOTE: the -S argument to strip causes it to keep enough info for
|
||||
# annotated backtraces (i.e. function names in the crash log). 'strip' with no
|
||||
# arguments yields a slightly smaller binary but makes crash logs mostly useless.
|
||||
|
|
@ -1710,12 +1710,33 @@ def symlinkf(src, dst):
|
|||
# file, but that strategy doesn't work so well if we don't have
|
||||
# permissions to remove it. Check to see if it's already the
|
||||
# symlink we want, which is the usual reason for EEXIST.
|
||||
if not (os.path.islink(dst) and os.readlink(dst) == src):
|
||||
# Here either dst isn't a symlink or it's the wrong symlink.
|
||||
# Remove and recreate. Caller will just have to deal with any
|
||||
# exceptions at this stage.
|
||||
elif os.path.islink(dst):
|
||||
if os.readlink(dst) == src:
|
||||
# the requested link already exists
|
||||
pass
|
||||
else:
|
||||
# dst is the wrong symlink; attempt to remove and recreate it
|
||||
os.remove(dst)
|
||||
os.symlink(src, dst)
|
||||
elif os.path.isdir(dst):
|
||||
print "Requested symlink (%s) exists but is a directory; replacing" % dst
|
||||
shutil.rmtree(dst)
|
||||
os.symlink(src, dst)
|
||||
elif os.path.exists(dst):
|
||||
print "Requested symlink (%s) exists but is a file; replacing" % dst
|
||||
os.remove(dst)
|
||||
os.symlink(src, dst)
|
||||
else:
|
||||
# see if the problem is that the parent directory does not exist
|
||||
# and try to explain what is missing
|
||||
(parent, tail) = os.path.split(dst)
|
||||
while not os.path.exists(parent):
|
||||
(parent, tail) = os.path.split(parent)
|
||||
if tail:
|
||||
raise Exception("Requested symlink (%s) cannot be created because %s does not exist"
|
||||
% os.path.join(parent, tail))
|
||||
else:
|
||||
raise
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
|||
Loading…
Reference in New Issue