summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorAndreyL ProductEngine <alihatskiy@productengine.com>2016-03-07 18:42:17 +0200
committerAndreyL ProductEngine <alihatskiy@productengine.com>2016-03-07 18:42:17 +0200
commitb0afd16e42c1836ac9339cfe0d4ee1e5dcf97622 (patch)
tree5a42e785ef2ddc87523fb2c84027304e4c96f722 /indra
parent30f9287645c789b4ad5e9523e520896fe71ed65b (diff)
parent8c7a8bdc4a795a158dc8a47928245b0dd74df3f5 (diff)
Merge fix for MAINT-5360
Diffstat (limited to 'indra')
-rwxr-xr-xindra/llcorehttp/CMakeLists.txt37
-rw-r--r--indra/media_plugins/cef/CMakeLists.txt8
-rwxr-xr-xindra/newview/viewer_manifest.py41
3 files changed, 76 insertions, 10 deletions
diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt
index a0b1ea13b1..8567254147 100755
--- a/indra/llcorehttp/CMakeLists.txt
+++ b/indra/llcorehttp/CMakeLists.txt
@@ -141,6 +141,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
#
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index 1f6163e41e..388030c979 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -114,4 +114,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)
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index f7992dba90..ab87f0da35 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -28,6 +28,7 @@ $/LicenseInfo$
"""
import sys
import os.path
+import shutil
import errno
import re
import tarfile
@@ -855,14 +856,17 @@ class Darwin_i386_Manifest(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)
@@ -872,10 +876,6 @@ class Darwin_i386_Manifest(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/Second Life.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.
@@ -1247,12 +1247,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()