From 454a4a2905198b884947e9a3d37dba2e480480da Mon Sep 17 00:00:00 2001
From: Savchenko Maksym <msavchenko@productengine.com>
Date: Wed, 24 Sep 2014 03:36:00 +0300
Subject: [PATCH] MAINT-4482 FIXED [viewer-lion] Mac build fails due to weirdo
 LLTextBase::normalizeUri() issue

---
 indra/cmake/FindURIPARSER.cmake |  2 +-
 indra/cmake/URIPARSER.cmake     | 31 ++++++++++++++++++++++---------
 indra/newview/CMakeLists.txt    |  2 ++
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/indra/cmake/FindURIPARSER.cmake b/indra/cmake/FindURIPARSER.cmake
index 32457bcd60c..8ab9f0f4ed2 100644
--- a/indra/cmake/FindURIPARSER.cmake
+++ b/indra/cmake/FindURIPARSER.cmake
@@ -18,7 +18,7 @@ FIND_PATH(URIPARSER_INCLUDE_DIR uriparser/uri.h
   NO_SYSTEM_ENVIRONMENT_PATH
   )
 
-FIND_LIBRARY(URIPARSER_LIBRARY z)
+FIND_LIBRARY(URIPARSER_LIBRARY uriparser)
 
 if (URIPARSER_LIBRARY AND URIPARSER_INCLUDE_DIR)
   SET(URIPARSER_INCLUDE_DIRS ${URIPARSER_INCLUDE_DIR})
diff --git a/indra/cmake/URIPARSER.cmake b/indra/cmake/URIPARSER.cmake
index 477e142ce56..d726c2ffdf9 100644
--- a/indra/cmake/URIPARSER.cmake
+++ b/indra/cmake/URIPARSER.cmake
@@ -5,18 +5,31 @@ set(URIPARSER_FIND_REQUIRED ON)
 
 include(Prebuilt)
 
-if (STANDALONE)
+if (USESYSTEMLIBS)
   include(FindURIPARSER)
-else (STANDALONE)
+else (USESYSTEMLIBS)
   use_prebuilt_binary(uriparser)
   if (WINDOWS)
-    set(URIPARSER_LIBRARIES 
+    set(URIPARSER_LIBRARIES.
       debug uriparserd
       optimized uriparser)
-  else (WINDOWS)
-    set(URIPARSER_LIBRARIES z)
+  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,-luriparser 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(URIPARSER_PRELOAD_ARCHIVES -Wl,--whole-archive uriparser -Wl,--no-whole-archive)
+    set(URIPARSER_LIBRARIES uriparser)
+  elseif (DARWIN)
+    set(URIPARSER_LIBRARIES uriparser)
   endif (WINDOWS)
-  if (WINDOWS OR LINUX)
-    set(URIPARSER_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/uriparser)
-  endif (WINDOWS OR LINUX)
-endif (STANDALONE)
+  set(URIPARSER_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/uriparser)
+endif (USESYSTEMLIBS)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e8f4144e70d..154f3b57261 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -49,6 +49,7 @@ include(CMakeCopyIfDifferent)
 include(LLAppearance)
 include(PNG)
 include(ZLIB)
+include(URIPARSER)
 
 if (NOT HAVOK_TPV)
    # When using HAVOK_TPV, the library is precompiled, so no need for this
@@ -1924,6 +1925,7 @@ endif (WINDOWS)
 target_link_libraries(${VIEWER_BINARY_NAME}
     ${PNG_PRELOAD_ARCHIVES}
     ${ZLIB_PRELOAD_ARCHIVES}
+    ${URIPARSER_PRELOAD_ARCHIVES}
     ${UPDATER_LIBRARIES}
     ${GOOGLE_PERFTOOLS_LIBRARIES}
     ${LLAUDIO_LIBRARIES}
-- 
GitLab