diff options
| -rwxr-xr-x | autobuild.xml | 2 | ||||
| -rwxr-xr-x | indra/cmake/OpenSSL.cmake | 2 | ||||
| -rwxr-xr-x | indra/cmake/PNG.cmake | 13 | ||||
| -rwxr-xr-x | indra/cmake/ZLIB.cmake | 21 | ||||
| -rwxr-xr-x | indra/newview/CMakeLists.txt | 28 | 
5 files changed, 59 insertions, 7 deletions
| diff --git a/autobuild.xml b/autobuild.xml index ba358e88d3..d3ce7dde36 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -306,7 +306,7 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>396bc5bf0bd31a5e396ca0d11ce1a85f</string> +              <string>c9261587a5711619df7db8441217dbeb</string>                <key>url</key>                <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/289005/arch/CYGWIN/installer/curl-7.34.0-windows-20140414.tar.bz2</string>              </map> diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake index 2704912eb5..4593821921 100755 --- a/indra/cmake/OpenSSL.cmake +++ b/indra/cmake/OpenSSL.cmake @@ -17,7 +17,7 @@ else (STANDALONE)  endif (STANDALONE)  if (LINUX) -  set(CRYPTO_LIBRARIES crypto) +  set(CRYPTO_LIBRARIES crypto dl)  elseif (DARWIN)    set(CRYPTO_LIBRARIES crypto)  endif (LINUX) diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake index d9afe772ae..9653591f67 100755 --- a/indra/cmake/PNG.cmake +++ b/indra/cmake/PNG.cmake @@ -15,6 +15,19 @@ else (STANDALONE)      set(PNG_LIBRARIES png16)      set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)    else() +    # +    # When we have updated static libraries in competition with older +    # shared libraries and we want the former to win, we need to do some +    # extra work.  The *_PRELOAD_ARCHIVES settings are invoked early +    # and will pull in the entire archive to the binary giving it  +    # priority in symbol resolution.  Beware of cmake moving the +    # achive load itself to another place on the link command line.  If +    # that happens, you can try something like -Wl,-lpng16 here to hide +    # the archive.  Also be aware that the linker will not tolerate a +    # second whole-archive load of the archive.  See viewer's +    # CMakeLists.txt for more information. +    # +    set(PNG_PRELOAD_ARCHIVES -Wl,--whole-archive png16 -Wl,--no-whole-archive)      set(PNG_LIBRARIES png16)      set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)    endif() diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake index 48e5130ad5..0470f3e797 100755 --- a/indra/cmake/ZLIB.cmake +++ b/indra/cmake/ZLIB.cmake @@ -13,10 +13,23 @@ else (STANDALONE)      set(ZLIB_LIBRARIES         debug zlibd        optimized zlib) -  else (WINDOWS) +  elseif (LINUX) +    # +    # When we have updated static libraries in competition with older +    # shared libraries and we want the former to win, we need to do some +    # extra work.  The *_PRELOAD_ARCHIVES settings are invoked early +    # and will pull in the entire archive to the binary giving it  +    # priority in symbol resolution.  Beware of cmake moving the +    # achive load itself to another place on the link command line.  If +    # that happens, you can try something like -Wl,-lz here to hide +    # the archive.  Also be aware that the linker will not tolerate a +    # second whole-archive load of the archive.  See viewer's +    # CMakeLists.txt for more information. +    # +    set(ZLIB_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive) +    set(ZLIB_LIBRARIES z) +  elseif (DARWIN)      set(ZLIB_LIBRARIES z)    endif (WINDOWS) -  if (WINDOWS OR LINUX) -    set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib) -  endif (WINDOWS OR LINUX) +  set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)  endif (STANDALONE) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 10015b65f2..72c406c95b 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -47,6 +47,8 @@ include(VisualLeakDetector)  include(GLOD)  include(CMakeCopyIfDifferent)  include(LLAppearance) +include(PNG) +include(ZLIB)  if (NOT HAVOK_TPV)     # When using HAVOK_TPV, the library is precompiled, so no need for this @@ -1859,13 +1861,37 @@ else (WINDOWS)          )  endif (WINDOWS) -# *NOTE - this list is very sensitive to ordering, test carefully on all +# *NOTE: - this list is very sensitive to ordering, test carefully on all  # platforms if you change the releative order of the entries here.  # In particular, cmake 2.6.4 (when buidling with linux/makefile generators)  # appears to sometimes de-duplicate redundantly listed dependencies improperly.  # To work around this, higher level modules should be listed before the modules  # that they depend upon. -brad +# +# *NOTE:  On mixing system shared libraries and updated static archives. +# We use a number of libraries that have an existence as system libraries, +# internal-use libraries and applications libraries.  The most-referenced +# one of these being libz where you can find four or more versions in play +# at once.  On Linux, libz can be found at link and run time via a number +# of paths: +#      +#      => -lfreetype +#        => libz.so.1 (on install machine, not build) +#      => -lSDL +#        => libz.so.1 (on install machine, not build) +#      => -lgdk-x11-2.0 +#        => libz.so.1 +#      => -lz +# +# We generally want the newest version of the library to provide all symbol +# resolution.  To that end, when using static archives, the *_PRELOAD_ARCHIVES +# variables, PNG_PRELOAD_ARCHIVES and ZLIB_PRELOAD_ARCHIVES, get the archives +# dumped into the target binary and runtime lookup will find the most +# modern version. +  target_link_libraries(${VIEWER_BINARY_NAME} +    ${PNG_PRELOAD_ARCHIVES} +    ${ZLIB_PRELOAD_ARCHIVES}      ${UPDATER_LIBRARIES}      ${GOOGLE_PERFTOOLS_LIBRARIES}      ${LLAUDIO_LIBRARIES} | 
