diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/cmake/00-COMPILE-LINK-RUN.txt | 302 | ||||
-rwxr-xr-x | indra/cmake/Copy3rdPartyLibs.cmake | 3 | ||||
-rwxr-xr-x | indra/cmake/LLPrimitive.cmake | 13 | ||||
-rwxr-xr-x | indra/cmake/WebKitLibPlugin.cmake | 41 | ||||
-rwxr-xr-x | indra/media_plugins/webkit/CMakeLists.txt | 12 | ||||
-rwxr-xr-x | indra/newview/viewer_manifest.py | 76 | ||||
-rw-r--r-- | indra/test_apps/llfbconnecttest/CMakeLists.txt | 118 | ||||
-rwxr-xr-x | indra/test_apps/llplugintest/CMakeLists.txt | 128 |
8 files changed, 599 insertions, 94 deletions
diff --git a/indra/cmake/00-COMPILE-LINK-RUN.txt b/indra/cmake/00-COMPILE-LINK-RUN.txt new file mode 100644 index 0000000000..8f72448fe9 --- /dev/null +++ b/indra/cmake/00-COMPILE-LINK-RUN.txt @@ -0,0 +1,302 @@ + + A short guide to compiling, linking, running and debugging issues + in the viewer and its packaged libraries. + +Introduction + + A recent pass through some third-party libraries resulted in the + collection of a lot of information about how things should and + shouldn't be built in the viewer. Some of that is presented below + with hints and rules about doing things well. What's presented is + a guideline only. Not all suggestions are hard rules and you'll + find exceptions all over. Some exceptions arise from solid + reasining, others may be legacy that hasn't been re-examined. + + Use good engineering judgement when applying this information. + +Compilation + + Windows Targets + + Significant compilation flags and defines follow: + + ---------------------------------------------------------------------------- + Option Release RelWithDebInfo Debug + ---------------------------------------------------------------------------- + wchar_t /Zc:wchar_t- " " + RTL type /MD /MD /MDd + FLoating Point /fp:fast " " + Debug Info /Zi (app/dll), /Z7 (lib) " " + Optimizer /O2 /Ob2 /GR /Od /Ob0 /GR /Od /GR + Incr. Link /INCREMENTAL:NO /INCREMENTAL /INCREMENTAL:NO + Debug /DEBUG /DEBUG /DEBUG + /OPT:REF + Ignore Libs LIBCMT LIBCMT LIBCMT;LIBCMTD;MSVCRT + Alignment Default " " + + Defines WIN32 " " + _WINDOWS " " + LL_RELEASE=1 LL_RELEASE=1 n/a + LL_RELEASE_FOR_DOWNLOAD=1 n/a n/a + NDEBUG NDEBUG _DEBUG + n/a n/a LL_DEBUG=1 + n/a LL_RELEASE_WITH_\ n/a + DEBUG_INFO=1 + n/a n/a _SCL_SECURE_NO_WARNINGS=1 + _SECURE_STL=0 _SECURE_STL=0 _SECURE_STL=0 + _HAS_ITERATOR_DEBUGGING=0 n/a n/a + LL_WINDOWS=1 " " + UNICODE " " + _UNICODE " " + WINVER=0x0501 " " + _WIN32_WINNT=0x0501 " " + LL_OS_DRAGDROP_ENABLED=1 " " + CARES_STATICLIB " " + LIB_NDOF=1 " " + + ---------------------------------------------------------------------------- + Notes: + + 1. /Zc:wchar_t-. Not certain where this comes from. It may be + due to a default set of compilation flags in Qt 4.X that then + propagates outward. In Qt 5.X, this setting is flipped back to + default (wchar_t is a built-in). Other options for dealing with + this include: + + http://msdn.microsoft.com/en-us/library/dh8che7s%28v=vs.110%29.aspx + + Recommend trying to stay with /Zc:wchar_t (the default) when + adding libraries. If incompatible, you'll typically get some + missing ostream '<<' operators or something similar in the stream + headers. + + 2. /Z7 (VC 7.0 compatibility symbols) gives us debug information + in the static libraries we build. Otherwise builds generate + vc100.pdb files all over the place which generally aren't useful. + DLL's and .EXEs are to get /Zi or /ZI with separate .PDB files. + These .PDB files can then be packaged up in symbol tarballs for + the crash dump analyzer or used in debugging. There are issues here + for VS 2013 (see below). + + + Mac Targets + + Fairly straightforward, optimization level is easily changed (may + be little or negative gain for -O3 and RelWithDebInfo should be + kicked up to 1 or 2. Boost debug symbols to dwarf-2 with a goal + of dwarf-2 in separate dSYM file when building .dylibs and + executables. + + ---------------------------------------------------------------------------- + Option Release RelWithDebInfo Debug + ---------------------------------------------------------------------------- + Strip Debug Symbols On " " + During Copy + + Generate Debug Syms On " " + + Level Debug Syms -gdwarf-2 " " + + Optimization -O3 -O0 -O0 + + PIC -fPIC -DPIC " " + + Defines LL_RELEASE=1 LL_RELEASE=1 n/a + LL_RELEASE_FOR_DOWNLOAD=1 n/a n/a + NDEBUG NDEBUG _DEBUG + n/a n/a LL_DEBUG=1 + n/a LL_RELEASE_WITH_\ n/a + DEBUG_INFO=1 + LL_DARWIN=1 " " + LL_OS_DRAGDROP_ENABLED=1 " " + CARES_STATICLIB " " + LIB_NDOF=1 " " + + ---------------------------------------------------------------------------- + Notes: + + 1. We’re also building dylibs in a somewhat unusual way. They’re + currently being generated with a link path of + ‘@executable_path/../Resources/<library>’. If we were to follow + the recommendations in dyld’s man page, we’d instead reference + ‘@loader_path/<library>’, use -rpath on the executable link + (pointing to the ‘Resources’ subdir of the main executable), and + be able to avoid some symlinking in the .app tree. + + 2. Use the -headerpad_max_install_names link option on all .dylibs. + + + Linux Targets + + Not much variety here. + + ---------------------------------------------------------------------------- + Option Release RelWithDebInfo Debug + ---------------------------------------------------------------------------- + Debug Level -g (-g0/1 better?) -g -g + During Copy + + Optimization -O2 -O0 -O0 + + PIC -fPIC " " + ---------------------------------------------------------------------------- + Notes: + + +Linking + + The library update work has generally moved in the direction of + preferring static libraries over dynamic (Qt4 being the notable + exception). It also mostly eliminated the extremely bad practice + of having multiple versions of a library built into an image. + + How bad was it? Very. Appalling. A nightmare. On Windows, at + least four versions of zlib (1.2.3, 1.2.5, 1.2.6, unknown), three + versions of Boost (1.45, 1.48, 1.52), two versions of OpenSSL + (0.9.8q, 1.0.0g) and three different builds of libexpat + 2.0.5/1.5.2 were used. Mac was worse with five builds or versions + of zlib, two of PCRE, two of c-ares, and three of OpenSSL. Linux + topped that by adding two builds of libpng. + + DO NOT ALLOW THIS TO HAPPEN AGAIN. It isn't enough to update a + library and then stuff a new triplet of S3 URLs into the viewer's + autobuild.xml. If you update a library you MUST: + + * Update the autobuild.xml of ALL consumers of the library. In + the case of zlib, that meant updating freetype, libpng, openssl, + libxml2, fontconfig, curl, Boost, SDL, llqtwebkit, google-mock and + colladadom. + + * Confirm by test and observation that the consumers actually use + your library rather than 'call home to mother' and find + system-supplied versions of your library. This may consist of + watching configuration scripts, probing with ldd/depends/otool, + pulling text out of binaries with 'strings'. The previously- + mentioned libraries all have a README.Linden file that gives + examples specific to the consumer library. + + * DO NOT RE-EXPORT LIBRARIES. Colladadom was the worst offender + of this rule. As a shared library, it was re-exporting part, but + not all, of Boost filesystem and system, some zlib, some PCRE, + some libxml2 and minizip. This meant that depending upon link- + time and run-time symbol resolution, data constructed with one + version of a library might be processed by a method built in a + second, incompatible version of the library. Switching colladadom + to a static library ended the re-export problem. + + * Preventing re-export is not sufficient. other libraries will + still be shipped as shared and they can still have Singleton and + Fragile Base Class issues. A DLL may be built with a static + archive of a library that has global data. That same static + archive might be linked into the application proper. An object + created with a method in the DLL may pass into a method in the + application where the archive's global data has a second instance + and no knowledge of the object. This is a failure due to an + assumption of Singleton global data which leads to some kind of + failure. This is the same effect as when, in Windows, both MSVCRT + and MSVCRTD get activated in a program. If you're lucky, some + asserts fail in that case having to do with file handle global + data. + + +Running + + Windows Debug Build. Seems to have been rendered nearly useless + by having the LL_CHECK_MEMORY define in llmemory.h calling + _CrtCheckMemory(). Viewer is almost useful disabling this in + llvoavatar code alone but not quite. + + +Futures + + Static Versus Dynamic Libraries + + One solution to the above linking problems is the use of static + libraries for everything. Single version, singleton instancing of + data, etc. But it's not the 1950's and we're not running our + applications on bare metal. Every platform comes with 100s of + libraries waiting to interfere with operations by breaking the + single-version and singleton-data assumption. + + Additionally, there are libraries that simply expect to be built + into shared libraries. Qt4 is one such. The version we're using + now, 4.7.1, is actually trying to disable both Webkit and plugin + modules because we're building it statically on Mac and Linux. + It's only because of configuration bugs that we're getting the + functionality out of it that we want. + + With enough libraries and a single, global namespace, eventually + there will be collisions and there may not be a warning. All it + takes is two programmers who thought that 'FILE * open_file(const + char *);' was a safe signature to use between compilation units in + their libraries and glorious debugging sessions are in your + future. Having debugged it, you will now become the proud owner + of a one-off version of one of those libraries that uses a special + symbol prefix which you will be maintaining forever. + + Lastly, we have some binary blobs that we must use as delivered. + Executables can be isolated at run-time if necessary. Shared + libraries are a different problem. They may bring their own + library dependencies that affect link- and run-time symbol + resolution and they'll impose that on us according to platform + rules. + + So, what to do? My natural bias for large software is to use + shared libraries for everything. It's a path to single-version + and singleton data and isolates namespaces and prevents + interactions. It also has some field servicability benefits if + you need to debug some bizarre problem a user has. + + But there's a local preference for static. Here, my + rules-of-thumb are: + + * Static library used by default. + + * Shared library where the library must be built shared. + + * Shared library if that is the only means to enforce the + single-version and singleton-data requirements. + + * Shared library *on a case-by-case basis* if the library is also + provided by the platform and some benefit is plausible. (An + example of this is freetype/fontconfig on Linux. The .so + versions we build with, and incompletely ship, are inferior in + behavior to the platform libraries. By being shared libraries, + the platform-supplied option is available to all Linux users.) + + In all cases, beware of cmake which appears to collapse and move + library references in links. This can drastically affect symbol + resolution when there are multiple sources for a symbol. + + General + + VS 2013. The /Z7 flag is rumored to be somewhat broken in 2013. + But it also sounds like there are explicit controls to name .PDB + files associated with static archives. That would make this an + ideal time to switch to /Zi or /ZI everywhere with explicit naming + and bring all the .PDBs together. + + The embedded browser technology (e.g. Qt4 with Webkit) is the + 800-pound gorilla in the viewer. When starting any major work, + decide what changes you need here as those changes will propagate + outwards forcing many other decisions (cf: /Zc:wchar_t- flag). + + Next library project. I'd recommend working on the related set of + libexpat, apr, aprutil, xmlrpc-epi. We know libexpat has some + updates that should improve stability. Libapr consumes it and it + could use some /Z7 flag work to get rid of some 1000's of PDB + warnings and improve our debug symbols. + + Miscellany to be sorted out: + + * The packaging of libfreetype and libfontconfig on Linux. + Determine what the right thing is, do it. + + * Maybe do something with ICU4C. Qt5 will require it and a number + of our packages can consume it typically replacing iconv or some + other library. But it is a huge bolus of static data. It can be + trimmed, but still. + + * Revisit openssl. Package as a shared library? Replace with + LibreSSL when available? Start using platform-supplied crypto? + diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index ff8cbedfd4..8cd1e3e63b 100755 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -216,7 +216,6 @@ elseif(DARWIN) libexpat.dylib libGLOD.dylib libhunspell-1.3.0.dylib - libllqtwebkit.dylib libndofdev.dylib ) @@ -258,6 +257,7 @@ elseif(LINUX) libdb-5.1.so libexpat.so libexpat.so.1 + libfreetype.so.6.6.2 libfreetype.so.6 libGLOD.so libgmodule-2.0.so @@ -268,6 +268,7 @@ elseif(LINUX) libuuid.so.16 libuuid.so.16.0.22 libfontconfig.so.1.8.0 + libfontconfig.so.1 ) if (USE_TCMALLOC) diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake index d02160e439..93626f689f 100755 --- a/indra/cmake/LLPrimitive.cmake +++ b/indra/cmake/LLPrimitive.cmake @@ -24,7 +24,18 @@ if (WINDOWS) optimized pcre ${BOOST_SYSTEM_LIBRARIES} ) -else (WINDOWS) +elseif (DARWIN) + set(LLPRIMITIVE_LIBRARIES + llprimitive + debug collada14dom-d + optimized collada14dom + minizip + xml2 + pcrecpp + pcre + iconv # Required by libxml2 + ) +elseif (LINUX) set(LLPRIMITIVE_LIBRARIES llprimitive debug collada14dom-d diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake index cab176a096..89f7a6197b 100755 --- a/indra/cmake/WebKitLibPlugin.cmake +++ b/indra/cmake/WebKitLibPlugin.cmake @@ -37,27 +37,32 @@ endif (STANDALONE) if (WINDOWS) set(WEBKIT_PLUGIN_LIBRARIES - debug llqtwebkitd - debug QtWebKitd4 - debug QtOpenGLd4 - debug QtNetworkd4 - debug QtGuid4 - debug QtCored4 - debug qtmaind - optimized llqtwebkit - optimized QtWebKit4 - optimized QtOpenGL4 - optimized QtNetwork4 - optimized QtGui4 - optimized QtCore4 - optimized qtmain + debug llqtwebkitd + debug QtWebKitd4 + debug QtOpenGLd4 + debug QtNetworkd4 + debug QtGuid4 + debug QtCored4 + debug qtmaind + optimized llqtwebkit + optimized QtWebKit4 + optimized QtOpenGL4 + optimized QtNetwork4 + optimized QtGui4 + optimized QtCore4 + optimized qtmain ) elseif (DARWIN) set(WEBKIT_PLUGIN_LIBRARIES - optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib - debug ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib - ) + ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.a + ${ARCH_PREBUILT_DIRS_RELEASE}/libQtWebKit.4.dylib + ${ARCH_PREBUILT_DIRS_RELEASE}/libQtOpenGL.4.dylib + ${ARCH_PREBUILT_DIRS_RELEASE}/libQtNetwork.4.dylib + ${ARCH_PREBUILT_DIRS_RELEASE}/libQtGui.4.dylib + ${ARCH_PREBUILT_DIRS_RELEASE}/libQtCore.4.dylib + ) elseif (LINUX) + # *HUH: What does this do? set(WEBKIT_PLUGIN_LIBRARIES ${LLQTWEBKIT_LIBRARY} ${QT_LIBRARIES} ${QT_PLUGIN_LIBRARIES}) set(WEBKIT_PLUGIN_LIBRARIES llqtwebkit @@ -72,7 +77,7 @@ elseif (LINUX) ${OPENSSL_LIBRARIES} QtGui QtCore - jscore +# jscore # qgif # qjpeg # jpeg diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt index 0c1c3d800e..5a8fe90bdd 100755 --- a/indra/media_plugins/webkit/CMakeLists.txt +++ b/indra/media_plugins/webkit/CMakeLists.txt @@ -121,12 +121,12 @@ if (DARWIN) ) # copy the webkit dylib to the build directory - add_custom_command( - TARGET media_plugin_webkit POST_BUILD -# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib - COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ - DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib - ) +# add_custom_command( +# TARGET media_plugin_webkit POST_BUILD +# # OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib +# COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ +# DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib +# ) endif (DARWIN) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 6729cd617a..2c173d9aaa 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -795,15 +795,42 @@ class Darwin_i386_Manifest(ViewerManifest): for libfile in dylibs: symlinkf(os.path.join(os.pardir, os.pardir, os.pardir, libfile), os.path.join(resource_path, libfile)) - - # plugins + # SLPlugin.app/Contents/Resources gets those Qt4 libraries it needs. + if self.prefix(src="", dst="SLPlugin.app/Contents/Resources"): + for libfile in ('libQtCore.4.dylib', + 'libQtCore.4.7.1.dylib', + 'libQtGui.4.dylib', + 'libQtGui.4.7.1.dylib', + 'libQtNetwork.4.dylib', + 'libQtNetwork.4.7.1.dylib', + 'libQtOpenGL.4.dylib', + 'libQtOpenGL.4.7.1.dylib', + 'libQtSvg.4.dylib', + 'libQtSvg.4.7.1.dylib', + 'libQtWebKit.4.dylib', + 'libQtWebKit.4.7.1.dylib', + 'libQtXml.4.dylib', + 'libQtXml.4.7.1.dylib'): + self.path2basename("../packages/lib/release", libfile) + self.end_prefix("SLPlugin.app/Contents/Resources") + + # Qt4 codecs go to llplugin. Not certain why but this is the first + # location probed according to dtruss so we'll go with that. + if self.prefix(src="../packages/plugins/codecs/", dst="llplugin/codecs"): + self.path("libq*.dylib") + self.end_prefix("llplugin/codecs") + + # Similarly for imageformats. + if self.prefix(src="../packages/plugins/imageformats/", dst="llplugin/imageformats"): + self.path("libq*.dylib") + self.end_prefix("llplugin/imageformats") + + # SLPlugin plugins proper if self.prefix(src="", dst="llplugin"): self.path2basename("../media_plugins/quicktime/" + self.args['configuration'], "media_plugin_quicktime.dylib") self.path2basename("../media_plugins/webkit/" + self.args['configuration'], "media_plugin_webkit.dylib") - self.path2basename("../packages/lib/release", "libllqtwebkit.dylib") - self.end_prefix("llplugin") self.end_prefix("Resources") @@ -1074,20 +1101,9 @@ class Linux_i686_Manifest(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_signals-mt.so.*") - self.path("libboost_system-mt.so.*") - self.path("libboost_thread-mt.so.*") - self.path("libcollada14dom.so") self.path("libdb*.so") - self.path("libcrypto.so.*") self.path("libexpat.so.*") - self.path("libssl.so.1.0.0") self.path("libGLOD.so") - self.path("libminizip.so") self.path("libuuid.so*") self.path("libSDL-1.2.so.*") self.path("libdirectfb-1.*.so.*") @@ -1119,7 +1135,10 @@ class Linux_i686_Manifest(LinuxManifest): # previous call did, without having to explicitly state the # version number. self.path("libfontconfig.so.*.*") + + # Include libfreetype.so. but have it work as libfontconfig does. self.path("libfreetype.so.*.*") + try: self.path("libtcmalloc.so*") #formerly called google perf tools pass @@ -1149,6 +1168,33 @@ class Linux_i686_Manifest(LinuxManifest): self.path("libvivoxplatform.so") self.end_prefix("lib") + # plugin runtime + if self.prefix(src="../packages/lib/release", dst="lib"): + self.path("libQtCore.so*") + self.path("libQtGui.so*") + self.path("libQtNetwork.so*") + self.path("libQtOpenGL.so*") + self.path("libQtWebKit.so*") + self.end_prefix("lib") + + # For WebKit/Qt plugin runtimes (image format plugins) + if self.prefix(src="../packages/plugins/imageformats", dst="bin/llplugin/imageformats"): + self.path("libqgif.so") + self.path("libqico.so") + self.path("libqjpeg.so") + self.path("libqmng.so") + self.path("libqsvg.so") + self.path("libqtiff.so") + self.end_prefix("bin/llplugin/imageformats") + + # For WebKit/Qt plugin runtimes (codec/character encoding plugins) + if self.prefix(src="../packages/plugins/codecs", dst="bin/llplugin/codecs"): + self.path("libqcncodecs.so") + self.path("libqjpcodecs.so") + self.path("libqkrcodecs.so") + self.path("libqtwcodecs.so") + self.end_prefix("bin/llplugin/codecs") + self.strip_binaries() diff --git a/indra/test_apps/llfbconnecttest/CMakeLists.txt b/indra/test_apps/llfbconnecttest/CMakeLists.txt index f56329a010..512bf202ae 100644 --- a/indra/test_apps/llfbconnecttest/CMakeLists.txt +++ b/indra/test_apps/llfbconnecttest/CMakeLists.txt @@ -122,32 +122,24 @@ add_custom_command(TARGET llfbconnecttest POST_BUILD ) -if (DARWIN OR WINDOWS) - get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) - add_custom_command(TARGET llfbconnecttest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR} - DEPENDS ${BUILT_WEBKIT_PLUGIN} - ) - - # copy over bookmarks file if llfbconnecttest gets built - get_target_property(BUILT_LLFBCONNECTTEST llfbconnecttest LOCATION) - add_custom_command(TARGET llfbconnecttest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/ - DEPENDS ${BUILT_LLFBCONNECTTEST} - ) - # also copy it to the same place as SLPlugin, which is what the mac wants... - add_custom_command(TARGET llfbconnecttest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR} - DEPENDS ${BUILT_LLFBCONNECTTEST} - ) -endif (DARWIN OR WINDOWS) +get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) +add_custom_command(TARGET llfbconnecttest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR} + DEPENDS ${BUILT_WEBKIT_PLUGIN} +) -if (DARWIN) - add_custom_command(TARGET llfbconnecttest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR} - DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib - ) -endif (DARWIN) +# copy over bookmarks file if llfbconnecttest gets built +get_target_property(BUILT_LLFBCONNECTTEST llfbconnecttest LOCATION) +add_custom_command(TARGET llfbconnecttest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/ + DEPENDS ${BUILT_LLFBCONNECTTEST} +) + +# also copy it to the same place as SLPlugin, which is what the mac wants... +add_custom_command(TARGET llfbconnecttest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR} + DEPENDS ${BUILT_LLFBCONNECTTEST} +) if(WINDOWS) #******************** @@ -301,4 +293,80 @@ if(WINDOWS) endif(WINDOWS) +if (DARWIN) + set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") + set(fbconnecttest_release_files + libexception_handler.dylib + libaprutil-1.0.dylib + libapr-1.0.dylib + libexpat.1.5.2.dylib + libQtCore.4.7.1.dylib + libQtCore.4.dylib + libQtGui.4.7.1.dylib + libQtGui.4.dylib + libQtNetwork.4.7.1.dylib + libQtNetwork.4.dylib + libQtOpenGL.4.7.1.dylib + libQtOpenGL.4.dylib + libQtWebKit.4.7.1.dylib + libQtWebKit.4.dylib + libQtSvg.4.7.1.dylib + libQtSvg.4.dylib + libQtXml.4.7.1.dylib + libQtXml.4.dylib + ) + copy_if_different( + ${fbconnecttest_release_src_dir} + "${PLUGINS_DESTINATION_DIR}" + out_targets + ${fbconnecttest_release_files} + ) + set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets}) + + # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt image format plugins) + set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/imageformats") + set(fbconnecttest_release_files + libqgif.dylib + libqico.dylib + libqjpeg.dylib + libqmng.dylib + libqsvg.dylib + libqtiff.dylib + ) + copy_if_different( + ${fbconnecttest_release_src_dir} + "${PLUGINS_DESTINATION_DIR}/imageformats" + out_targets + ${fbconnecttest_release_files} + ) + set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets}) + + # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt codec plugins) + set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/codecs") + set(fbconnecttest_release_files + libqcncodecs.dylib + libqjpcodecs.dylib + libqkrcodecs.dylib + libqtwcodecs.dylib + ) + copy_if_different( + ${fbconnecttest_release_src_dir} + "${PLUGINS_DESTINATION_DIR}/codecs" + out_targets + ${fbconnecttest_release_files} + ) + set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets}) + + add_custom_target(copy_fbconnecttest_libs ALL + DEPENDS + ${fbconnect_test_targets} + ) + + add_dependencies(llfbconnecttest copy_fbconnecttest_libs) +endif (DARWIN) + +if (LINUX) + +endif (LINUX) + ll_deploy_sharedlibs_command(llfbconnecttest) diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt index 8179be66f5..9d44563e26 100755 --- a/indra/test_apps/llplugintest/CMakeLists.txt +++ b/indra/test_apps/llplugintest/CMakeLists.txt @@ -346,44 +346,44 @@ add_custom_command(TARGET llmediaplugintest POST_BUILD DEPENDS ${BUILT_LLCOMMON} ) +get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) +add_custom_command(TARGET llmediaplugintest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR} + DEPENDS ${BUILT_WEBKIT_PLUGIN} +) if (DARWIN OR WINDOWS) - get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR} - DEPENDS ${BUILT_WEBKIT_PLUGIN} - ) - get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION) add_custom_command(TARGET llmediaplugintest POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_QUICKTIME_PLUGIN} ${PLUGINS_DESTINATION_DIR} DEPENDS ${BUILT_QUICKTIME_PLUGIN} ) - - get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION) - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN} ${PLUGINS_DESTINATION_DIR} - DEPENDS ${BUILT_EXAMPLE_PLUGIN} - ) - - # copy over bookmarks file if llmediaplugintest gets built - get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION) - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/ - DEPENDS ${BUILT_LLMEDIAPLUGINTEST} - ) - # also copy it to the same place as SLPlugin, which is what the mac wants... - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR} - DEPENDS ${BUILT_LLMEDIAPLUGINTEST} - ) endif (DARWIN OR WINDOWS) +get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION) +add_custom_command(TARGET llmediaplugintest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN} ${PLUGINS_DESTINATION_DIR} + DEPENDS ${BUILT_EXAMPLE_PLUGIN} +) + +# copy over bookmarks file if llmediaplugintest gets built +get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION) +add_custom_command(TARGET llmediaplugintest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/ + DEPENDS ${BUILT_LLMEDIAPLUGINTEST} +) + +# also copy it to the same place as SLPlugin, which is what the mac wants... +add_custom_command(TARGET llmediaplugintest POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR} + DEPENDS ${BUILT_LLMEDIAPLUGINTEST} +) + if (DARWIN) - add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR} - DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib - ) +# add_custom_command(TARGET llmediaplugintest POST_BUILD +# COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR} +# DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib +# ) endif (DARWIN) if(WINDOWS) @@ -538,4 +538,76 @@ if(WINDOWS) endif(WINDOWS) +if (DARWIN) + set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}") + set(plugintest_release_files + libexception_handler.dylib + libaprutil-1.0.dylib + libapr-1.0.dylib + libexpat.1.5.2.dylib + libQtCore.4.7.1.dylib + libQtCore.4.dylib + libQtGui.4.7.1.dylib + libQtGui.4.dylib + libQtNetwork.4.7.1.dylib + libQtNetwork.4.dylib + libQtOpenGL.4.7.1.dylib + libQtOpenGL.4.dylib + libQtWebKit.4.7.1.dylib + libQtWebKit.4.dylib + libQtSvg.4.7.1.dylib + libQtSvg.4.dylib + libQtXml.4.7.1.dylib + libQtXml.4.dylib + ) + copy_if_different( + ${plugintest_release_src_dir} + "${PLUGINS_DESTINATION_DIR}" + out_targets + ${plugintest_release_files} + ) + set(plugin_test_targets ${plugin_test_targets} ${out_targets}) + + # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt image format plugins) + set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/imageformats") + set(plugintest_release_files + libqgif.dylib + libqico.dylib + libqjpeg.dylib + libqmng.dylib + libqsvg.dylib + libqtiff.dylib + ) + copy_if_different( + ${plugintest_release_src_dir} + "${PLUGINS_DESTINATION_DIR}/imageformats" + out_targets + ${plugintest_release_files} + ) + set(plugin_test_targets ${plugin_test_targets} ${out_targets}) + + # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt codec plugins) + set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/codecs") + set(plugintest_release_files + libqcncodecs.dylib + libqjpcodecs.dylib + libqkrcodecs.dylib + libqtwcodecs.dylib + ) + copy_if_different( + ${plugintest_release_src_dir} + "${PLUGINS_DESTINATION_DIR}/codecs" + out_targets + ${plugintest_release_files} + ) + set(plugin_test_targets ${plugin_test_targets} ${out_targets}) + + add_custom_target(copy_plugintest_libs ALL + DEPENDS + ${plugin_test_targets} + ) + + add_dependencies(llmediaplugintest copy_plugintest_libs) +endif (DARWIN) + ll_deploy_sharedlibs_command(llmediaplugintest) |