summaryrefslogtreecommitdiff
path: root/indra/cmake
diff options
context:
space:
mode:
authorMonty Brandenberg <monty@lindenlab.com>2014-04-15 22:48:52 +0000
committerMonty Brandenberg <monty@lindenlab.com>2014-04-15 22:48:52 +0000
commitf8874d04b8ca238ee99dc464055295cff417a9b2 (patch)
tree74e277421da416ce6222664d9caee8e144940b53 /indra/cmake
parent04404b68b56638171bc200f9a22a660257370d5d (diff)
Linux/Win: Bad checksum on Windows package. Libz and libpng linking changes to find newest code.
Windows autobuild package had a bad checksum due to oddities in the build system. On Linux I've been fighting with getting libz 1.2.8 and libpng 1.6.8 to be the definitive version in the viewer. Problem is the *massive* library search tree we assemble. We find older shared library versions first and so those dominated. By using --whole-archive with static libraries, the packaged versions of these libraries are made definitive.
Diffstat (limited to 'indra/cmake')
-rwxr-xr-xindra/cmake/OpenSSL.cmake2
-rwxr-xr-xindra/cmake/PNG.cmake13
-rwxr-xr-xindra/cmake/ZLIB.cmake21
3 files changed, 31 insertions, 5 deletions
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)