From 2b151e0aefd54671e1be504269f10318d303dccb Mon Sep 17 00:00:00 2001
From: Nicky <nicky.dasmijn@gmail.com>
Date: Mon, 18 Apr 2022 18:11:43 +0200
Subject: Round one to support conan for 3P packages, this allows to build the
 viewer on Linux again.

---
 indra/CMakeLists.txt                            | 12 ++++++++-
 indra/cmake/APR.cmake                           |  2 ++
 indra/cmake/Audio.cmake                         |  1 +
 indra/cmake/Boost.cmake                         |  6 +++++
 indra/cmake/CURL.cmake                          |  1 +
 indra/cmake/Copy3rdPartyLibs.cmake              | 36 ++++++++++++++-----------
 indra/cmake/DBusGlib.cmake                      | 25 ++++++-----------
 indra/cmake/EXPAT.cmake                         |  1 +
 indra/cmake/FreeType.cmake                      |  1 +
 indra/cmake/GLEXT.cmake                         |  5 +++-
 indra/cmake/GLH.cmake                           |  3 +++
 indra/cmake/GLOD.cmake                          |  1 +
 indra/cmake/GStreamer010Plugin.cmake            | 34 +++++------------------
 indra/cmake/GoogleMock.cmake                    |  6 ++++-
 indra/cmake/Hunspell.cmake                      |  2 +-
 indra/cmake/JPEG.cmake                          | 11 ++++----
 indra/cmake/JsonCpp.cmake                       |  2 ++
 indra/cmake/LLPrimitive.cmake                   | 20 ++++++++++----
 indra/cmake/LLWindow.cmake                      | 13 ++++++---
 indra/cmake/NGHTTP2.cmake                       |  1 +
 indra/cmake/OpenJPEG.cmake                      |  1 +
 indra/cmake/OpenSSL.cmake                       |  1 +
 indra/cmake/PNG.cmake                           |  1 +
 indra/cmake/Prebuilt.cmake                      | 13 +++++++++
 indra/cmake/UI.cmake                            | 15 ++++++-----
 indra/cmake/URIPARSER.cmake                     |  5 +++-
 indra/cmake/ViewerMiscLibs.cmake                | 15 ++++++++---
 indra/cmake/XmlRpcEpi.cmake                     |  2 ++
 indra/cmake/ZLIBNG.cmake                        |  5 ++++
 indra/llimage/CMakeLists.txt                    |  2 +-
 indra/llprimitive/CMakeLists.txt                |  2 ++
 indra/llwindow/CMakeLists.txt                   |  7 ++---
 indra/media_plugins/CMakeLists.txt              |  2 +-
 indra/media_plugins/gstreamer010/CMakeLists.txt |  1 +
 indra/newview/CMakeLists.txt                    |  2 +-
 35 files changed, 163 insertions(+), 94 deletions(-)

(limited to 'indra')

diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 40ba284d30..aa0b645a64 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -12,7 +12,15 @@ set(ROOT_PROJECT_NAME "SecondLife" CACHE STRING
     "The root project/makefile/solution name. Defaults to SecondLife.")
 project(${ROOT_PROJECT_NAME})
 
-set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
+set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake"  "${CMAKE_CURRENT_BINARY_DIR}")
+
+
+include(conanbuildinfo OPTIONAL RESULT_VARIABLE USE_CONAN )
+if( USE_CONAN )
+  conan_basic_setup(TARGETS)
+  add_compile_definitions(LL_USESYSTEMLIBS USE_CONAN)
+endif()
+
 set(CXX_STANDARD 14)
 
 include(Variables)
@@ -57,8 +65,10 @@ add_subdirectory(${LIBS_OPEN_PREFIX}llplugin)
 add_subdirectory(${LIBS_OPEN_PREFIX}llui)
 add_subdirectory(${LIBS_OPEN_PREFIX}viewer_components)
 
+if( LL_TESTS )
 # Legacy C++ tests. Build always, run if LL_TESTS is true.
 add_subdirectory(${VIEWER_PREFIX}test)
+endif()
 
 if (ENABLE_MEDIA_PLUGINS)
 # viewer media plugins
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index 1c635d4531..898979c47e 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -5,7 +5,9 @@ include_guard()
 
 add_library( ll::apr INTERFACE IMPORTED )
 
+use_conan_binary( apr apr-util )
 use_prebuilt_binary(apr_suite)
+
 if (WINDOWS)
   if (LLCOMMON_LINK_SHARED)
     set(APR_selector "lib")
diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake
index ddba066727..4b06de0a08 100644
--- a/indra/cmake/Audio.cmake
+++ b/indra/cmake/Audio.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::vorbis INTERFACE IMPORTED )
 
+use_conan_binary(vorbis)
 use_prebuilt_binary(ogg_vorbis)
 target_include_directories( ll::vorbis SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include )
 
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index f4f824769e..601a23a86d 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -2,7 +2,13 @@
 include(Prebuilt)
 
 include_guard()
+
 add_library( ll::boost INTERFACE IMPORTED )
+if( USE_CONAN )
+  target_link_libraries( ll::boost INTERFACE CONAN_PKG::boost )
+  target_compile_definitions( ll::boost INTERFACE BOOST_ALLOW_DEPRECATED_HEADERS BOOST_BIND_GLOBAL_PLACEHOLDERS )
+  return()
+endif()
 
 use_prebuilt_binary(boost)
 
diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake
index e8b04177c1..7c93819e75 100644
--- a/indra/cmake/CURL.cmake
+++ b/indra/cmake/CURL.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::libcurl INTERFACE IMPORTED )
 
+use_conan_binary(libcurl)
 use_prebuilt_binary(curl)
 if (WINDOWS)
   target_link_libraries(ll::libcurl INTERFACE libcurl.lib)
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 1a0f6868fb..f6e224665b 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -216,22 +216,28 @@ elseif(LINUX)
     set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
     # *FIX - figure out what to do with duplicate libalut.so here -brad
     set(release_files
-        libapr-1.so.0
-        libaprutil-1.so.0
-        libatk-1.0.so
-        ${EXPAT_COPY}
-        libfreetype.so.6.6.2
-        libfreetype.so.6
-        libGLOD.so
-        libgmodule-2.0.so
-        libgobject-2.0.so
-        libhunspell-1.3.so.0.0.0
-        libuuid.so.16
-        libuuid.so.16.0.22
-        libfontconfig.so.1.8.0
-        libfontconfig.so.1
-       )
+            ${EXPAT_COPY}
+            )
 
+     if( NOT USE_CONAN )
+         list( APPEND release_files
+                 libapr-1.so.0
+                 libaprutil-1.so.0
+				 libatk-1.0.so
+                 libfreetype.so.6.6.2
+                 libfreetype.so.6
+                 libGLOD.so
+                 libhunspell-1.3.so.0.0.0
+                 libuuid.so.16
+                 libuuid.so.16.0.22
+                 libfontconfig.so.1.8.0
+                 libfontconfig.so.1
+				 libgmodule-2.0.so
+				 libgobject-2.0.so
+                 )
+	 endif()
+	   
+	 
     if (TARGET ll::fmodstudio)
       set(debug_files ${debug_files} "libfmodL.so")
       set(release_files ${release_files} "libfmod.so")
diff --git a/indra/cmake/DBusGlib.cmake b/indra/cmake/DBusGlib.cmake
index 7c95bf8c20..ce5d10be5c 100644
--- a/indra/cmake/DBusGlib.cmake
+++ b/indra/cmake/DBusGlib.cmake
@@ -1,22 +1,13 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-use_prebuilt_binary(dbus_glib)
-set(DBUSGLIB_FOUND ON FORCE BOOL)
-set(DBUSGLIB_INCLUDE_DIRS
-        ${LIBS_PREBUILT_DIR}/include/dbus
-        )
-# We don't need to explicitly link against dbus-glib itself, because
-# the viewer probes for the system's copy at runtime.
-set(DBUSGLIB_LIBRARIES
-        gobject-2.0
-        glib-2.0
-        )
+add_library( ll::dbus INTERFACE IMPORTED)
+
+# Only define this when using conan, lls prebuild is brokenb
+if( USE_CONAN )
+  target_compile_definitions( ll::dbus INTERFACE LL_DBUS_ENABLED )
+endif()
+use_conan_binary(dbus)
 
-if (DBUSGLIB_FOUND)
-  set(DBUSGLIB ON CACHE BOOL "Build with dbus-glib message bus support.")
-endif (DBUSGLIB_FOUND)
+use_prebuilt_binary(dbus_glib)
 
-if (DBUSGLIB)
-  add_definitions(-DLL_DBUS_ENABLED=1)
-endif (DBUSGLIB)
diff --git a/indra/cmake/EXPAT.cmake b/indra/cmake/EXPAT.cmake
index 8a48908401..e5c9dd5582 100644
--- a/indra/cmake/EXPAT.cmake
+++ b/indra/cmake/EXPAT.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::expat INTERFACE IMPORTED )
 
+use_conan_binary(expat)
 use_prebuilt_binary(expat)
 if (WINDOWS)
     target_link_libraries( ll::expat  INTERFACE libexpatMT )
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
index 1974e2879e..92130402f9 100644
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::freetype INTERFACE IMPORTED )
 
+use_conan_binary(freetype)
 use_prebuilt_binary(freetype)
 target_include_directories( ll::freetype SYSTEM INTERFACE  ${LIBS_PREBUILT_DIR}/include/freetype2/)
 target_link_libraries( ll::freetype INTERFACE freetype )
diff --git a/indra/cmake/GLEXT.cmake b/indra/cmake/GLEXT.cmake
index f6c39fe137..70477cf0af 100644
--- a/indra/cmake/GLEXT.cmake
+++ b/indra/cmake/GLEXT.cmake
@@ -1,8 +1,11 @@
 # -*- cmake -*-
 include(Prebuilt)
+include(GLH)
 
+add_library( ll::glext INTERFACE IMPORTED )
 if (WINDOWS OR LINUX)
+  use_conan_binary(glext)
   use_prebuilt_binary(glext)
 endif (WINDOWS OR LINUX)
 
-use_prebuilt_binary(glh_linear)
+
diff --git a/indra/cmake/GLH.cmake b/indra/cmake/GLH.cmake
index b420ad413f..18521b5069 100644
--- a/indra/cmake/GLH.cmake
+++ b/indra/cmake/GLH.cmake
@@ -1,4 +1,7 @@
 # -*- cmake -*-
 include(Prebuilt)
 
+add_library( ll::glh_linear INTERFACE IMPORTED )
+
+use_conan_binary( glh_linear )
 use_prebuilt_binary(glh_linear)
diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake
index db00a309f0..61c0c166d4 100644
--- a/indra/cmake/GLOD.cmake
+++ b/indra/cmake/GLOD.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::glod INTERFACE IMPORTED )
 
+use_conan_binary(glod)
 use_prebuilt_binary(glod)
 
 target_include_directories( ll::glod SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/GStreamer010Plugin.cmake b/indra/cmake/GStreamer010Plugin.cmake
index 848d4f7fc6..0b6a7a21c3 100644
--- a/indra/cmake/GStreamer010Plugin.cmake
+++ b/indra/cmake/GStreamer010Plugin.cmake
@@ -1,32 +1,12 @@
 # -*- cmake -*-
 include(Prebuilt)
-if (LINUX)
-  use_prebuilt_binary(gstreamer)
-  # possible libxml2 should have its own .cmake file instead
-  use_prebuilt_binary(libxml2)
-  set(GSTREAMER010_FOUND ON FORCE BOOL)
-  set(GSTREAMER010_PLUGINS_BASE_FOUND ON FORCE BOOL)
-  set(GSTREAMER010_INCLUDE_DIRS
-      ${LIBS_PREBUILT_DIR}/include/gstreamer-0.10
-      ${LIBS_PREBUILT_DIR}/include/glib-2.0
-      ${LIBS_PREBUILT_DIR}/include/libxml2
-      )
-  # We don't need to explicitly link against gstreamer itself, because
-  # LLMediaImplGStreamer probes for the system's copy at runtime.
-  set(GSTREAMER010_LIBRARIES
-      gobject-2.0
-      gmodule-2.0
-      dl
-      gthread-2.0
-      glib-2.0
-      )
-endif ()
+if (NOT LINUX)
+  return()
+endif()
 
-if (GSTREAMER010_FOUND AND GSTREAMER010_PLUGINS_BASE_FOUND)
-  set(GSTREAMER010 ON CACHE BOOL "Build with GStreamer-0.10 streaming media support.")
-endif (GSTREAMER010_FOUND AND GSTREAMER010_PLUGINS_BASE_FOUND)
+add_library( ll::gstreamer INTERFACE IMPORTED )
+target_compile_definitions( ll::gstreamer INTERFACE LL_GSTREAMER010_ENABLED=1)
+use_conan_binary(gstreamer)
 
-if (GSTREAMER010)
-  add_definitions(-DLL_GSTREAMER010_ENABLED=1)
-endif (GSTREAMER010)
+use_prebuilt_binary(gstreamer)
 
diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake
index 2036e43dd0..753b972e95 100644
--- a/indra/cmake/GoogleMock.cmake
+++ b/indra/cmake/GoogleMock.cmake
@@ -4,9 +4,13 @@ include(Linking)
 
 include_guard()
 
-use_prebuilt_binary(googlemock)
+if(USE_CONAN)
+    return()
+endif()
 
 add_library( ll::googlemock INTERFACE IMPORTED )
+use_prebuilt_binary(googlemock)
+
 target_include_directories( ll::googlemock SYSTEM INTERFACE
         ${LIBS_PREBUILT_DIR}/include
         )
diff --git a/indra/cmake/Hunspell.cmake b/indra/cmake/Hunspell.cmake
index 7786418226..c372d83f8d 100644
--- a/indra/cmake/Hunspell.cmake
+++ b/indra/cmake/Hunspell.cmake
@@ -3,7 +3,7 @@ include(Prebuilt)
 
 include_guard()
 add_library( ll::hunspell INTERFACE IMPORTED )
-
+use_conan_binary(hunspell)
 use_prebuilt_binary(libhunspell)
 if (WINDOWS)
   target_link_libraries( ll::hunspell INTERFACE libhunspell)
diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake
index a6ef5d4ad9..900fc77c40 100644
--- a/indra/cmake/JPEG.cmake
+++ b/indra/cmake/JPEG.cmake
@@ -4,14 +4,15 @@ include(Prebuilt)
 include(Linking)
 
 include_guard()
-add_library( ll::jpeglib INTERFACE IMPORTED )
+add_library( ll::libjpeg INTERFACE IMPORTED )
 
+use_conan_binary(libjpeg)
 use_prebuilt_binary(jpeglib)
 if (LINUX)
-  target_link_libraries( ll::jpeglib INTERFACE jpeg)
+  target_link_libraries( ll::libjpeg INTERFACE jpeg)
 elseif (DARWIN)
-  target_link_libraries( ll::jpeglib INTERFACE jpeg)
+  target_link_libraries( ll::libjpeg INTERFACE jpeg)
 elseif (WINDOWS)
-  target_link_libraries( ll::jpeglib INTERFACE jpeglib)
+  target_link_libraries( ll::libjpeg INTERFACE jpeglib)
 endif (LINUX)
-target_include_directories( ll::jpeglib SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)
+target_include_directories( ll::libjpeg SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake
index e7f7c13134..f62b2bdd7a 100644
--- a/indra/cmake/JsonCpp.cmake
+++ b/indra/cmake/JsonCpp.cmake
@@ -4,6 +4,8 @@ include(Prebuilt)
 include_guard()
 add_library( ll::jsoncpp INTERFACE IMPORTED )
 
+use_conan_binary(jsoncpp)
+
 use_prebuilt_binary(jsoncpp)
 if (WINDOWS)
   target_link_libraries( ll::jsoncpp INTERFACE json_libmd.lib )
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
index e643243fca..3e5ff4963b 100644
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -6,29 +6,39 @@ include(Boost)
 
 include_guard()
 
+add_library( ll::pcre INTERFACE IMPORTED )
+add_library( ll::minizip-ng INTERFACE IMPORTED )
+add_library( ll::libxml INTERFACE IMPORTED )
+add_library( ll::colladadom INTERFACE IMPORTED )
+
+# ND, needs fixup in collada conan pkg
+if( USE_CONAN )
+  target_include_directories( ll::colladadom SYSTEM INTERFACE
+	"${CONAN_INCLUDE_DIRS_COLLADADOM}/collada-dom/" 
+	"${CONAN_INCLUDE_DIRS_COLLADADOM}/collada-dom/1.4/" )
+endif()
+
+use_conan_binary( colladadom )
+
 use_prebuilt_binary(colladadom)
 use_prebuilt_binary(minizip-ng) # needed for colladadom
 use_prebuilt_binary(pcre)
 use_prebuilt_binary(libxml2)
 
-add_library( ll::pcre INTERFACE IMPORTED )
 target_link_libraries( ll::pcre INTERFACE pcrecpp pcre )
 
-add_library( ll::minizip-ng INTERFACE IMPORTED )
 if (WINDOWS)
     target_link_libraries( ll::minizip-ng INTERFACE libminizip )
 else()
     target_link_libraries( ll::minizip-ng INTERFACE minizip )
 endif()
 
-add_library( ll::libxml INTERFACE IMPORTED )
 if (WINDOWS)
     target_link_libraries( ll::libxml INTERFACE libxml2_a)
 else()
     target_link_libraries( ll::libxml INTERFACE xml2)
 endif()
 
-add_library( ll::colladadom INTERFACE IMPORTED )
 target_include_directories( ll::colladadom SYSTEM INTERFACE
         ${LIBS_PREBUILT_DIR}/include/collada
         ${LIBS_PREBUILT_DIR}/include/collada/1.4
@@ -39,4 +49,4 @@ elseif (DARWIN)
     target_link_libraries(ll::colladadom INTERFACE collada14dom ll::libxml ll::minizip-ng)
 elseif (LINUX)
     target_link_libraries(ll::colladadom INTERFACE collada14dom ll::libxml ll::minizip-ng)
-endif()
\ No newline at end of file
+endif()
diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake
index 777acb19a7..0136d56723 100644
--- a/indra/cmake/LLWindow.cmake
+++ b/indra/cmake/LLWindow.cmake
@@ -5,13 +5,18 @@ include(GLEXT)
 include(Prebuilt)
 
 include_guard()
-add_library( ll::sdl INTERFACE IMPORTED )
+add_library( ll::SDL INTERFACE IMPORTED )
+
 
 if (LINUX)
+  #Must come first as use_conan_binary can exit this file early
+  target_compile_definitions( ll::SDL INTERFACE LL_SDL=1)
+
+  use_conan_binary(SDL)
   use_prebuilt_binary(SDL)
-  target_include_directories( ll::sdl SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)
-  target_link_libraries( ll::sdl INTERFACE SDL directfb fusion direct X11)
-  target_compile_definitions( ll::sdl INTERFACE LL_SDL=1)
+  
+  target_include_directories( ll::SDL SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)
+  target_link_libraries( ll::SDL INTERFACE SDL directfb fusion direct X11)
 endif (LINUX)
 
 
diff --git a/indra/cmake/NGHTTP2.cmake b/indra/cmake/NGHTTP2.cmake
index 2ac204bfcb..27f273674b 100644
--- a/indra/cmake/NGHTTP2.cmake
+++ b/indra/cmake/NGHTTP2.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::nghttp2 INTERFACE IMPORTED )
 
+use_conan_binary(nghttp2)
 use_prebuilt_binary(nghttp2)
 if (WINDOWS)
   target_link_libraries( ll::nghttp2 INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/nghttp2.lib)
diff --git a/indra/cmake/OpenJPEG.cmake b/indra/cmake/OpenJPEG.cmake
index 184fbb3c5f..b016c22a4e 100644
--- a/indra/cmake/OpenJPEG.cmake
+++ b/indra/cmake/OpenJPEG.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::openjpeg INTERFACE IMPORTED )
 
+use_conan_binary(openjpeg)
 use_prebuilt_binary(openjpeg)
 
 target_link_libraries(ll::openjpeg INTERFACE openjpeg )
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
index dfc6520362..0d3f3ad9b4 100644
--- a/indra/cmake/OpenSSL.cmake
+++ b/indra/cmake/OpenSSL.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::openssl INTERFACE IMPORTED )
 
+use_conan_binary(openssl)
 use_prebuilt_binary(openssl)
 if (WINDOWS)
   target_link_libraries(ll::openssl INTERFACE libssl libcrypto)
diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake
index 672f963ea1..8e870f631f 100644
--- a/indra/cmake/PNG.cmake
+++ b/indra/cmake/PNG.cmake
@@ -4,6 +4,7 @@ include(Prebuilt)
 include_guard()
 add_library( ll::libpng INTERFACE IMPORTED )
 
+use_conan_binary(libpng)
 use_prebuilt_binary(libpng)
 if (WINDOWS)
   target_link_libraries(ll::libpng INTERFACE libpng16)
diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake
index f0192ec45b..542b4462e4 100644
--- a/indra/cmake/Prebuilt.cmake
+++ b/indra/cmake/Prebuilt.cmake
@@ -57,3 +57,16 @@ macro (use_prebuilt_binary _binary)
     endif (NOT ${_binary}_installed EQUAL 0)
 endmacro (use_prebuilt_binary _binary)
 
+#Sadly we need a macro here, otherwise the return() will not properly work
+macro ( use_conan_binary package )
+  if( USE_CONAN )
+	target_link_libraries( ll::${package} INTERFACE CONAN_PKG::${package} )
+	foreach( extra_pkg "${ARGN}" )
+	  if( extra_pkg )
+		target_link_libraries( ll::${package} INTERFACE CONAN_PKG::${extra_pkg} )
+	  endif()
+	endforeach()
+    return()
+  endif()
+endmacro()
+  
diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake
index 6a2e6f22df..066975a3d0 100644
--- a/indra/cmake/UI.cmake
+++ b/indra/cmake/UI.cmake
@@ -2,13 +2,17 @@
 include(Prebuilt)
 include(FreeType)
 
-if (LINUX)
-  use_prebuilt_binary(gtk-atk-pango-glib)
-endif (LINUX)
-
 add_library( ll::uilibraries INTERFACE IMPORTED )
 
 if (LINUX)
+  target_compile_definitions(ll::uilibraries INTERFACE LL_GTK=1 LL_X11=1 )
+
+  if( USE_CONAN )
+	target_link_libraries( ll::uilibraries INTERFACE CONAN_PKG::gtk )
+	return()
+  endif()
+  use_prebuilt_binary(gtk-atk-pango-glib)
+  
   target_link_libraries( ll::uilibraries INTERFACE
           atk-1.0
           gdk-x11-2.0
@@ -67,6 +71,3 @@ target_include_directories( ll::uilibraries SYSTEM INTERFACE
 #          )
 #endforeach(include)
 
-if (LINUX)
-  target_compile_definitions(ll::uilibraries INTERFACE LL_GTK=1 LL_X11=1 )
-endif (LINUX)
diff --git a/indra/cmake/URIPARSER.cmake b/indra/cmake/URIPARSER.cmake
index cc181f74f8..b1c76c006a 100644
--- a/indra/cmake/URIPARSER.cmake
+++ b/indra/cmake/URIPARSER.cmake
@@ -1,10 +1,13 @@
 # -*- cmake -*-
 
 include_guard()
-add_library( ll::uriparser INTERFACE IMPORTED )
 
 include(Prebuilt)
 
+add_library( ll::uriparser INTERFACE IMPORTED )
+
+use_conan_binary( uriparser )
+
 use_prebuilt_binary(uriparser)
 if (WINDOWS)
   target_link_libraries( ll::uriparser INTERFACE uriparser)
diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake
index 7b5c990094..00f8b77106 100644
--- a/indra/cmake/ViewerMiscLibs.cmake
+++ b/indra/cmake/ViewerMiscLibs.cmake
@@ -2,10 +2,19 @@
 include(Prebuilt)
 
 if (LINUX)
-  use_prebuilt_binary(libuuid)
-  use_prebuilt_binary(fontconfig)
+  #use_prebuilt_binary(libuuid)
   add_library( ll::fontconfig INTERFACE IMPORTED )
+
+  if( NOT USE_CONAN )
+    use_prebuilt_binary(fontconfig)
+  else()
+    target_link_libraries( ll::fontconfig INTERFACE CONAN_PKG::fontconfig )
+  endif()
 endif (LINUX)
-use_prebuilt_binary(libhunspell)
+
+if( NOT USE_CONAN )
+  use_prebuilt_binary(libhunspell)
+endif()
+
 use_prebuilt_binary(slvoice)
 
diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake
index 83f06788f2..7cb0efdab7 100644
--- a/indra/cmake/XmlRpcEpi.cmake
+++ b/indra/cmake/XmlRpcEpi.cmake
@@ -4,6 +4,8 @@ include(Prebuilt)
 include_guard()
 add_library( ll::xmlrpc-epi INTERFACE IMPORTED )
 
+use_conan_binary( xmlrpc-epi )
+
 use_prebuilt_binary(xmlrpc-epi)
 target_link_libraries(ll::xmlrpc-epi INTERFACE xmlrpc-epi )
 target_include_directories( ll::xmlrpc-epi SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/ZLIBNG.cmake b/indra/cmake/ZLIBNG.cmake
index a1a1860bc6..5d99cd9709 100644
--- a/indra/cmake/ZLIBNG.cmake
+++ b/indra/cmake/ZLIBNG.cmake
@@ -5,6 +5,11 @@ include(Prebuilt)
 include_guard()
 add_library( ll::zlib-ng INTERFACE IMPORTED )
 
+if(USE_CONAN )
+  target_link_libraries( ll::zlib-ng INTERFACE CONAN_PKG::zlib )
+  return()
+endif()
+
 use_prebuilt_binary(zlib-ng)
 if (WINDOWS)
   target_link_libraries( ll::zlib-ng INTERFACE zlib )
diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt
index 0984493941..57703818c9 100644
--- a/indra/llimage/CMakeLists.txt
+++ b/indra/llimage/CMakeLists.txt
@@ -63,7 +63,7 @@ target_link_libraries(llimage
         llmath
         llcommon
         ll::libpng
-        ll::jpeglib
+        ll::libjpeg
     )
 
 # Add tests
diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt
index d69b24a07f..698d523dd3 100644
--- a/indra/llprimitive/CMakeLists.txt
+++ b/indra/llprimitive/CMakeLists.txt
@@ -7,6 +7,7 @@ include(LLCommon)
 include(LLCoreHttp)
 include(LLPhysicsExtensions)
 include(LLPrimitive)
+include(GLH)
 
 set(llprimitive_SOURCE_FILES
     lldaeloader.cpp
@@ -65,6 +66,7 @@ target_link_libraries(llprimitive
         llphysicsextensions
         ll::colladadom
         ll::pcre
+		ll::glh_linear
         )
 
 #add unit tests
diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt
index c86b252994..a2044f374c 100644
--- a/indra/llwindow/CMakeLists.txt
+++ b/indra/llwindow/CMakeLists.txt
@@ -54,14 +54,15 @@ set(llwindow_LINK_LIBRARIES
         llrender
         llfilesystem
         llxml
+		ll::glh_linear
+		ll::glext
         )
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
 if (LINUX)
   list( APPEND llwindow_LINK_LIBRARIES
           ll::uilibraries
-          ll::sdl
-          ll::fontconfig          # For FCInit and other FC* functions.
+          ll::SDL
       )
 
   list(APPEND viewer_SOURCE_FILES 
@@ -174,5 +175,5 @@ endif (llwindow_HEADER_FILES)
     ${viewer_SOURCE_FILES}
     )
 
-target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES} ll::sdl)
+target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES})
 target_include_directories( llwindow  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt
index 9e24e7acf9..972bb7dd2d 100644
--- a/indra/media_plugins/CMakeLists.txt
+++ b/indra/media_plugins/CMakeLists.txt
@@ -3,7 +3,7 @@
 add_subdirectory(base)
 
 if (LINUX)
-    add_subdirectory(gstreamer010)
+    #add_subdirectory(gstreamer010)
     add_subdirectory(example)
 endif (LINUX)
 
diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt
index 3b5debc585..38fc8201bf 100644
--- a/indra/media_plugins/gstreamer010/CMakeLists.txt
+++ b/indra/media_plugins/gstreamer010/CMakeLists.txt
@@ -42,4 +42,5 @@ add_library(media_plugin_gstreamer010
 
 target_link_libraries(media_plugin_gstreamer010
         media_plugin_base
+        ll::gstreamer
   )
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 44ad6313fc..1dff9d3f33 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1938,7 +1938,7 @@ if (LINUX)
   set(COPY_INPUT_DEPENDENCIES
     ${VIEWER_BINARY_NAME}
     SLPlugin
-    media_plugin_gstreamer010
+    #media_plugin_gstreamer010
     llcommon
     )
 
-- 
cgit v1.2.3