diff --git a/indra/cmake/LLCoreHttp.cmake b/indra/cmake/LLCoreHttp.cmake
index c5bdf3cdd8aa3436debf3d348056c50b672ac19c..6b2ef49feab947ae684b084e90bfcdba6a34948b 100644
--- a/indra/cmake/LLCoreHttp.cmake
+++ b/indra/cmake/LLCoreHttp.cmake
@@ -1,7 +1,17 @@
 # -*- cmake -*-
 
+include(CURL)
+include(OpenSSL)
+include(Boost)
+
 set(LLCOREHTTP_INCLUDE_DIRS
     ${LIBS_OPEN_DIR}/llcorehttp
+    ${CURL_INCLUDE_DIRS}
+    ${OPENSSL_INCLUDE_DIRS}
+    )
+
+set(LLCOREHTTP_SYSTEM_INCLUDE_DIRS
+    ${Boost_INCLUDE_DIRS}
     )
 
 set(LLCOREHTTP_LIBRARIES llcorehttp
diff --git a/indra/cmake/LLImage.cmake b/indra/cmake/LLImage.cmake
index 2eb513ef6365834db0671efe06d8e5f73de12b44..ec3da890811e8b27a1d41e0bef4f816bd10a3e72 100644
--- a/indra/cmake/LLImage.cmake
+++ b/indra/cmake/LLImage.cmake
@@ -1,7 +1,11 @@
 # -*- cmake -*-
 
+include(JPEG)
+include(PNG)
+
 set(LLIMAGE_INCLUDE_DIRS
     ${LIBS_OPEN_DIR}/llimage
+    ${JPEG_INCLUDE_DIRS}
     )
 
 set(LLIMAGE_LIBRARIES llimage)
diff --git a/indra/cmake/LLImageJ2COJ.cmake b/indra/cmake/LLImageJ2COJ.cmake
index 8bf4fc8b66bfe4d2dee592659dea2ffac19be642..1bcf205f2dbae7d92bbc41a94301b9eac292cbab 100644
--- a/indra/cmake/LLImageJ2COJ.cmake
+++ b/indra/cmake/LLImageJ2COJ.cmake
@@ -1,3 +1,5 @@
 # -*- cmake -*-
 
+include(OpenJPEG)
+
 set(LLIMAGEJ2COJ_LIBRARIES llimagej2coj)
diff --git a/indra/cmake/LLMessage.cmake b/indra/cmake/LLMessage.cmake
index 01b688fbf6f9af4c8084fa54cddc52b0f6727dfb..7be53ec0ec3441a7534b27f70af158f88c69757d 100644
--- a/indra/cmake/LLMessage.cmake
+++ b/indra/cmake/LLMessage.cmake
@@ -1,7 +1,13 @@
 # -*- cmake -*-
 
+include(CURL)
+include(OpenSSL)
+include(XmlRpcEpi)
+
 set(LLMESSAGE_INCLUDE_DIRS
     ${LIBS_OPEN_DIR}/llmessage
+    ${CURL_INCLUDE_DIRS}
+    ${OPENSSL_INCLUDE_DIRS}
     )
 
 set(LLMESSAGE_LIBRARIES llmessage)
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
index 7ac6d1f1c26a8e3bcaf47ae5c42e06b29f807294..85bf5653b83af6c4d5966f78508ba8a8a060d2b2 100644
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -9,8 +9,8 @@ use_prebuilt_binary(colladadom)
 
 set(LLPRIMITIVE_INCLUDE_DIRS
     ${LIBS_OPEN_DIR}/llprimitive
+    ${LIBXML2_INCLUDES}
     )
-
 if (WINDOWS)
     set(LLPRIMITIVE_LIBRARIES
         debug llprimitive
diff --git a/indra/cmake/LLRender.cmake b/indra/cmake/LLRender.cmake
index db8c13ccac334c70c1964a646ae37f5d7e7a34df..868922451f0008135f92ce7f97abdea9ef53fcbe 100644
--- a/indra/cmake/LLRender.cmake
+++ b/indra/cmake/LLRender.cmake
@@ -6,6 +6,7 @@ include(GLH)
 
 set(LLRENDER_INCLUDE_DIRS
     ${LIBS_OPEN_DIR}/llrender
+    ${GLH_INCLUDE_DIR}
     )
 
 if (BUILD_HEADLESS)
diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake
index 489468d1f9fe63ddcf68f75193235d126bc1de02..5f44da19619ef5641f0a066ebd260a3157754992 100644
--- a/indra/cmake/LLWindow.cmake
+++ b/indra/cmake/LLWindow.cmake
@@ -27,6 +27,7 @@ if (SDL_FOUND)
 endif (SDL_FOUND)
 
 set(LLWINDOW_INCLUDE_DIRS
+    ${GLEXT_INCLUDE_DIR}
     ${LIBS_OPEN_DIR}/llwindow
     )
 
diff --git a/indra/cmake/LLXML.cmake b/indra/cmake/LLXML.cmake
index ecbeae93f6159ae7d0d00254d8b71dccb6555b10..b093c762975efc4771464bc6e6efcadf28faff7f 100644
--- a/indra/cmake/LLXML.cmake
+++ b/indra/cmake/LLXML.cmake
@@ -1,7 +1,14 @@
 # -*- cmake -*-
 
+include(Boost)
+include(EXPAT)
+
 set(LLXML_INCLUDE_DIRS
     ${LIBS_OPEN_DIR}/llxml
+    ${EXPAT_INCLUDE_DIRS}
+    )
+set(LLXML_SYSTEM_INCLUDE_DIRS
+    ${Boost_INCLUDE_DIRS}
     )
 
 set(LLXML_LIBRARIES llxml)
diff --git a/indra/llappearance/CMakeLists.txt b/indra/llappearance/CMakeLists.txt
index 96d79a65daa280f94297eb31ba5e25f1291d7e6d..5dab1f52f0ae99b673dffb41aba06dd1b8f8a391 100644
--- a/indra/llappearance/CMakeLists.txt
+++ b/indra/llappearance/CMakeLists.txt
@@ -16,6 +16,22 @@ include(LLWindow)
 include(LLXML)
 include(Linking)
 
+include_directories(
+    ${LLCHARACTER_INCLUDE_DIRS}
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLINVENTORY_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    )
+
+include_directories(
+    SYSTEM
+    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(llappearance_SOURCE_FILES
     llavatarappearance.cpp
     llavatarjoint.cpp
diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt
index 783b21b7c72b9f1273a30310c00e4da4c7bda889..b9b37ac8c81a2d2604d34ead6d65f4060d7d76e2 100644
--- a/indra/llaudio/CMakeLists.txt
+++ b/indra/llaudio/CMakeLists.txt
@@ -12,6 +12,23 @@ include(LLMessage)
 include(LLVFS)
 include(LLXML)
 
+include_directories(
+    ${LLAUDIO_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    )
+
+include_directories(SYSTEM 
+    ${OGG_INCLUDE_DIRS}
+    ${VORBISENC_INCLUDE_DIRS}
+    ${VORBISFILE_INCLUDE_DIRS}
+    ${VORBIS_INCLUDE_DIRS}
+    ${OPENAL_LIB_INCLUDE_DIRS}
+    ${FREEAULT_LIB_INCLUDE_DIRS}
+    )
+
 set(llaudio_SOURCE_FILES
     llaudioengine.cpp
     lllistener.cpp
@@ -31,6 +48,9 @@ set(llaudio_HEADER_FILES
     )
 
 if (FMODSTUDIO)
+    include_directories(
+        ${FMODSTUDIO_INCLUDE_DIR}
+        )
     list(APPEND llaudio_SOURCE_FILES
          llaudioengine_fmodstudio.cpp
          lllistener_fmodstudio.cpp
@@ -62,33 +82,6 @@ set_source_files_properties(${llaudio_HEADER_FILES}
 list(APPEND llaudio_SOURCE_FILES ${llaudio_HEADER_FILES})
 
 add_library (llaudio ${llaudio_SOURCE_FILES})
-
-target_include_directories(
-    llaudio 
-    PRIVATE
-    ${OGG_INCLUDE_DIRS}
-    ${VORBISENC_INCLUDE_DIRS}
-    ${VORBISFILE_INCLUDE_DIRS}
-    ${VORBIS_INCLUDE_DIRS}
-    )
-	
-if (FMODSTUDIO)
-  target_include_directories(
-    llaudio
-    PRIVATE
-    ${FMODSTUDIO_INCLUDE_DIR}
-    )
-endif (FMODSTUDIO)
-
-if (OPENAL)
-  target_include_directories(
-    llaudio
-    PRIVATE
-    ${OPENAL_LIB_INCLUDE_DIRS}
-    ${FREEAULT_LIB_INCLUDE_DIRS}
-    )
-endif (OPENAL)	
-
 target_link_libraries(
     llaudio
     ${LLCOMMON_LIBRARIES}
diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt
index 6087602f6b35bdf19f0bfd43edbd799090495e99..8b001e07d3128e79e8436cb2db5d926b73e7bac8 100644
--- a/indra/llcharacter/CMakeLists.txt
+++ b/indra/llcharacter/CMakeLists.txt
@@ -9,6 +9,16 @@ include(LLMessage)
 include(LLVFS)
 include(LLXML)
 
+include_directories(
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(llcharacter_SOURCE_FILES
     llanimationstates.cpp
     llbvhloader.cpp
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 9acc0a5a7d050e31209ec72279994c56c7a30d51..a23714dcc744524b53736256c8672dbeff7853bd 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -269,7 +269,6 @@ target_include_directories(
     ${BREAKPAD_INCLUDE_DIRECTORIES}
     ${URIPARSER_INCLUDE_DIRS}
     PUBLIC
-    ${CMAKE_CURRENT_BINARY_DIR}
     ${Boost_INCLUDE_DIRS}
     ${APRUTIL_INCLUDE_DIR}
     ${APR_INCLUDE_DIR}
diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt
index afc0ffc55180a2100bda637aa5e42c53c9c25222..72e742347d73560024b9efca240f6f6578b248e6 100644
--- a/indra/llcorehttp/CMakeLists.txt
+++ b/indra/llcorehttp/CMakeLists.txt
@@ -3,7 +3,6 @@
 project(llcorehttp)
 
 include(00-Common)
-include(Boost)
 include(CURL)
 include(OpenSSL)
 include(ZLIB)
@@ -13,6 +12,18 @@ include(LLMessage)
 include(LLCommon)
 include(Tut)
 
+include_directories (${CMAKE_CURRENT_SOURCE_DIR})
+
+include_directories(
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLCOREHTTP_INCLUDE_DIRS}
+    )
+
+include_directories(
+    SYSTEM
+    ${LLCOREHTTP_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(llcorehttp_SOURCE_FILES
     bufferarray.cpp
     bufferstream.cpp
@@ -75,19 +86,8 @@ list(APPEND llcorehttp_SOURCE_FILES ${llcorehttp_HEADER_FILES})
 
 add_library (llcorehttp ${llcorehttp_SOURCE_FILES})
 
-include_directories (${CMAKE_CURRENT_SOURCE_DIR})
-
-target_include_directories(
-    llcorehttp
-	PUBLIC
-    ${Boost_INCLUDE_DIRS}
-    ${CURL_INCLUDE_DIRS}
-    ${OPENSSL_INCLUDE_DIRS}
-    )
-
 target_link_libraries(
   llcorehttp
-  ${LLMESSAGE_LIBRARIES}
   ${LLCOMMON_LIBRARIES}}
   ${CURL_LIBRARIES}
   ${OPENSSL_LIBRARIES}
diff --git a/indra/llcrashlogger/CMakeLists.txt b/indra/llcrashlogger/CMakeLists.txt
index 45c0d036616617e4ad82ec5e74b465ccaea07c38..b4b99b778da80f0be102b5f98aba11adff1e0516 100644
--- a/indra/llcrashlogger/CMakeLists.txt
+++ b/indra/llcrashlogger/CMakeLists.txt
@@ -10,6 +10,17 @@ include(LLMessage)
 include(LLVFS)
 include(LLXML)
 
+include_directories(
+    ${LLCOREHTTP_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(llcrashlogger_SOURCE_FILES
     llcrashlogger.cpp
     llcrashlock.cpp
@@ -31,9 +42,5 @@ add_library(llcrashlogger ${llcrashlogger_SOURCE_FILES})
 
 target_link_libraries(
     llcrashlogger
-    ${LLMESSAGE_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
-    ${LLXML_LIBRARIES}
-	${LLVFS_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
     )
diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt
index aa9852f6da4a1a68c5a9c7e903fb2bc2af38cb3f..82c84e4ecff7fd4e7938d68c1621233ce445c443 100644
--- a/indra/llimage/CMakeLists.txt
+++ b/indra/llimage/CMakeLists.txt
@@ -9,12 +9,17 @@ include(LLMath)
 include(LLVFS)
 include(LLKDU)
 include(LLImageJ2COJ)
-include(JPEG)
-include(PNG)
 include(ZLIB)
 include(LLAddBuildTest)
 include(Tut)
 
+include_directories(
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${PNG_INCLUDE_DIRS}
+    ${ZLIB_INCLUDE_DIRS}
+    )
+
 set(llimage_SOURCE_FILES
     llimagebmp.cpp
     llimage.cpp
@@ -52,14 +57,6 @@ set_source_files_properties(${llimage_HEADER_FILES}
 list(APPEND llimage_SOURCE_FILES ${llimage_HEADER_FILES})
 
 add_library (llimage ${llimage_SOURCE_FILES})
-
-target_include_directories(llimage
-    PRIVATE
-    ${PNG_INCLUDE_DIRS}
-    PUBLIC
-    ${JPEG_INCLUDE_DIRS}
-    )
-
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
 if (USE_KDU)
diff --git a/indra/llimagej2coj/CMakeLists.txt b/indra/llimagej2coj/CMakeLists.txt
index 7c53db82917d192c1e12a6adcc696dbb67cbae8f..a36d528a3baf4e1f0bd6babb5e013b929b912416 100644
--- a/indra/llimagej2coj/CMakeLists.txt
+++ b/indra/llimagej2coj/CMakeLists.txt
@@ -7,6 +7,11 @@ include(LLCommon)
 include(LLImage)
 include(OpenJPEG)
 
+include_directories(
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${OPENJPEG_INCLUDE_DIR}
+    )
+
 set(llimagej2coj_SOURCE_FILES
     llimagej2coj.cpp
     )
@@ -23,16 +28,8 @@ set_source_files_properties(${llimagej2coj_HEADER_FILES}
 list(APPEND llimagej2coj_SOURCE_FILES ${llimagej2coj_HEADER_FILES})
 
 add_library (llimagej2coj ${llimagej2coj_SOURCE_FILES})
-
-target_include_directories(
-    llimagej2coj
-    PRIVATE
-    ${OPENJPEG_INCLUDE_DIR}
-    )
-
 target_link_libraries(
     llimagej2coj
-    ${LLIMAGE_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
     ${OPENJPEG_LIBRARIES}
+	${LLCOMMON_LIBRARIES}
     )
diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt
index 34a0686950035908a81c35a91becd5800f7b95c2..49f974647706c0926f9ea1824629dca9d5cebb5f 100644
--- a/indra/llinventory/CMakeLists.txt
+++ b/indra/llinventory/CMakeLists.txt
@@ -4,10 +4,17 @@ project(llinventory)
 
 include(00-Common)
 include(LLCommon)
+include(LLCoreHttp)
 include(LLMath)
 include(LLMessage)
+include(LLVFS)
 include(LLXML)
 
+include_directories(
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    )
+
 set(llinventory_SOURCE_FILES
     llcategory.cpp
     lleconomy.cpp
@@ -53,7 +60,6 @@ list(APPEND llinventory_SOURCE_FILES ${llinventory_HEADER_FILES})
 add_library (llinventory ${llinventory_SOURCE_FILES})
 
 target_link_libraries(llinventory
-    ${LLMESSAGE_LIBRARIES}
     ${LLMATH_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
     )
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index a75c9d506d2af9e1b6c4167a6da050d02dea322c..333abc90b2e2ce4f7b180b5d008a0935eb8f3098 100644
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -14,8 +14,16 @@ include(Python)
 include(Tut)
 include(Python)
 include(JsonCpp)
-include(CURL)
-include(XmlRpcEpi)
+
+include_directories (${CMAKE_CURRENT_SOURCE_DIR})
+
+include_directories(
+    ${LLCOREHTTP_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${JSONCPP_INCLUDE_DIR}
+    )
 
 set(llmessage_SOURCE_FILES
     llaescipher.cpp
@@ -194,14 +202,6 @@ list(APPEND llmessage_SOURCE_FILES ${llmessage_HEADER_FILES})
 
 add_library (llmessage ${llmessage_SOURCE_FILES})
 
-target_include_directories(
-    llmessage
-    PRIVATE
-    ${JSONCPP_INCLUDE_DIR}
-    PUBLIC
-    ${CURL_INCLUDE_DIRS}
-    )
-
 target_link_libraries(
   llmessage
   ${LLCOREHTTP_LIBRARIES}
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index 80b50bb03a93dc37c4eee2776fcac5740ac141c0..fb9bed6ee85971714a277bdaa32c5959a5e75dcd 100644
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -3,12 +3,27 @@
 project(llplugin)
 
 include(00-Common)
-include(Boost)
 include(CURL)
 include(LLCommon)
+include(LLImage)
 include(LLMath)
 include(LLMessage)
 include(LLRender)
+include(LLXML)
+include(LLWindow)
+include(Boost)
+
+include_directories(
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    )
 
 set(llplugin_SOURCE_FILES
     llpluginclassmedia.cpp
@@ -47,9 +62,6 @@ set_target_properties(llplugin PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
 
 target_link_libraries(
     llplugin
-    ${LLRENDER_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${LLMATH_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
 )
 
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
index 8ed06647ad36582512cf350261711a6388ffa153..365c06422d229f814f1b08d3214985ed1e841598 100644
--- a/indra/llplugin/slplugin/CMakeLists.txt
+++ b/indra/llplugin/slplugin/CMakeLists.txt
@@ -2,10 +2,15 @@ project(AlchemyPlugin)
 
 include(00-Common)
 include(LLCommon)
-include(LLMessage)
 include(LLPlugin)
 include(Linking)
 include(PluginAPI)
+include(LLMessage)
+
+include_directories(
+    ${LLPLUGIN_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+)
 
 if (DARWIN)
     include(CMakeFindFrameworks)
diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt
index 4877ec57b09826256be49cd0a38f226e65bbc22d..93d4d839859d91ba35b72dc0dbdf5e2a724f2af9 100644
--- a/indra/llprimitive/CMakeLists.txt
+++ b/indra/llprimitive/CMakeLists.txt
@@ -11,6 +11,21 @@ include(LLXML)
 include(LLPhysicsExtensions)
 include(LLCharacter)
 
+include_directories(
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    ${LIBS_PREBUILT_DIR}/include/collada
+    ${LIBS_PREBUILT_DIR}/include/collada/1.4
+    ${LLCHARACTER_INCLUDE_DIRS}
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    ${LLPHYSICSEXTENSIONS_INCLUDE_DIRS}
+    ${LIBS_PREBUILT_DIR}/include/collada
+    ${LIBS_PREBUILT_DIR}/include/collada/1.4
+    )
+
 set(llprimitive_SOURCE_FILES
     lldaeloader.cpp
     llmaterialid.cpp
@@ -57,30 +72,14 @@ list(APPEND llprimitive_SOURCE_FILES ${llprimitive_HEADER_FILES})
 
 add_library (llprimitive ${llprimitive_SOURCE_FILES})
 
-target_include_directories(
-    llprimitive
-    PUBLIC
-    ${LIBS_PREBUILT_DIR}/include/collada
-    ${LIBS_PREBUILT_DIR}/include/collada/1.4
-    )
-
-target_include_directories(
-    llprimitive
-    SYSTEM
-    PUBLIC
-    ${LLPHYSICSEXTENSIONS_INCLUDE_DIRS}
-    ${LIBS_PREBUILT_DIR}/include/collada
-    ${LIBS_PREBUILT_DIR}/include/collada/1.4
-    )
-
 target_link_libraries(llprimitive
-    ${LLPHYSICSEXTENSIONS_LIBRARIES}
-    ${LLCHARACTER_LIBRARIES}
-    ${LLCOREHTTP_LIBRARIES}
+    ${LLCOMMON_LIBRARIES}
+    ${LLMATH_LIBRARIES}
     ${LLMESSAGE_LIBRARIES}
+    ${LLCOREHTTP_LIBRARIES}
     ${LLXML_LIBRARIES}
-    ${LLMATH_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
+    ${LLPHYSICSEXTENSIONS_LIBRARIES}
+    ${LLCHARACTER_LIBRARIES}
     ${BOOST_COROUTINE_LIBRARY}
     ${BOOST_CONTEXT_LIBRARY}
     )
diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt
index 3bd0ed2a48426f3d97e9a4956710c0a4147b0a87..103ed587af9216af748ed9023b9c9b61d798ed03 100644
--- a/indra/llrender/CMakeLists.txt
+++ b/indra/llrender/CMakeLists.txt
@@ -15,6 +15,21 @@ include(LLWindow)
 include(LLXML)
 include(LLVFS)
 
+include_directories(
+    ${FREETYPE_INCLUDE_DIRS}
+    ${GLEW_INCLUDE_DIR}
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(llrender_SOURCE_FILES
     llcubemap.cpp
     llfontbitmapcache.cpp
@@ -92,14 +107,11 @@ endif (BUILD_HEADLESS)
 
 add_library (llrender ${llrender_SOURCE_FILES})
 
-target_include_directories(
-    llrender
-    PRIVATE
-    ${FREETYPE_INCLUDE_DIRS}
-	PUBLIC
-    ${GLEW_INCLUDE_DIR}
-    ${GLH_INCLUDE_DIR}
+if (SDL_FOUND)
+  set_property(TARGET llrender
+    PROPERTY COMPILE_DEFINITIONS LL_SDL=1
     )
+endif (SDL_FOUND)
 
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
diff --git a/indra/llrender/llfontregistry.cpp b/indra/llrender/llfontregistry.cpp
index 7f74525b66062e143d3b92e2056864817b69a694..d0036874153f5bcd38a26fe011ecf6994ef978a4 100644
--- a/indra/llrender/llfontregistry.cpp
+++ b/indra/llrender/llfontregistry.cpp
@@ -225,7 +225,7 @@ std::string currentOsName()
 	return "Windows";
 #elif LL_DARWIN
 	return "Mac";
-#elif LL_LINUX || LL_MESA_HEADLESS
+#elif LL_SDL || LL_MESA_HEADLESS
 	return "Linux";
 #else
 	return "";
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 9685dd95f975ca16cf7aa4e07c6335835d1397fd..8b22a9bdf11ec761a99a257745d17a42865f2c78 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -15,6 +15,22 @@ include(LLCoreHttp)
 include(LLVFS)
 include(LLXML)
 
+include_directories(
+    ${LLCOREHTTP_INCLUDE_DIRS}
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLINVENTORY_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    ${LIBS_PREBUILD_DIR}/include/hunspell
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(llui_SOURCE_FILES
     llaccordionctrl.cpp
     llaccordionctrltab.cpp
@@ -250,13 +266,6 @@ set_source_files_properties(llurlentry.cpp
 list(APPEND llui_SOURCE_FILES ${llui_HEADER_FILES})
 
 add_library (llui ${llui_SOURCE_FILES})
-
-target_include_directories(
-    llui
-    PRIVATE
-    ${HUNSPELL_INCLUDE_DIR}
-    )
-
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
 target_link_libraries(llui
diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt
index 3045db1270eff1c9dc899de3c74072747c4980f4..ffeb17bf78be09e11743b1fc2ed4b3c0de2defa2 100644
--- a/indra/llwindow/CMakeLists.txt
+++ b/indra/llwindow/CMakeLists.txt
@@ -21,6 +21,18 @@ include(LLWindow)
 include(LLXML)
 include(UI)
 
+include_directories(
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(llwindow_SOURCE_FILES
     llcursortypes.cpp
     llkeyboard.cpp
diff --git a/indra/llxml/CMakeLists.txt b/indra/llxml/CMakeLists.txt
index 261aae0eb75a7a821495fba6a9b631c8337ae69f..2f30d61739531fa83d0d806a630967289f605ba8 100644
--- a/indra/llxml/CMakeLists.txt
+++ b/indra/llxml/CMakeLists.txt
@@ -3,12 +3,16 @@
 project(llxml)
 
 include(00-Common)
-include(Boost)
-include(EXPAT)
 include(LLCommon)
 include(LLMath)
+include(LLVFS)
 include(LLXML)
 
+include_directories(
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    )
+
 set(llxml_SOURCE_FILES
     llcontrol.cpp
     llxmlnode.cpp
@@ -32,18 +36,10 @@ set_source_files_properties(${llxml_HEADER_FILES}
 list(APPEND llxml_SOURCE_FILES ${llxml_HEADER_FILES})
 
 add_library (llxml ${llxml_SOURCE_FILES})
-
-target_include_directories(
-    llxml
-	PUBLIC
-    ${Boost_INCLUDE_DIRS}
-	${EXPAT_INCLUDE_DIRS}
-)
-
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
-target_link_libraries(llxml
-    PUBLIC
+target_link_libraries( llxml
+    ${LLVFS_LIBRARIES}
     ${LLMATH_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
     ${EXPAT_LIBRARIES}
diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt
index 13ba154cd604433dc1ff41d8a6cfccc6c7be3b9f..c02c466d6a22f6f8bcd0a0d97644f7861f41d31f 100644
--- a/indra/media_plugins/base/CMakeLists.txt
+++ b/indra/media_plugins/base/CMakeLists.txt
@@ -13,6 +13,14 @@ include(Linking)
 include(PluginAPI)
 include(OpenGL)
 
+include_directories(
+    ${LLPLUGIN_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+)
+
 ### media_plugin_base
 
 set(media_plugin_base_SOURCE_FILES
@@ -33,7 +41,6 @@ set_target_properties(media_plugin_base PROPERTIES POSITION_INDEPENDENT_CODE TRU
 
 target_link_libraries(
     media_plugin_base
-    ${LLPLUGIN_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
     )
 
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index abb633e6d0648953c6051252029a0a4415afa419..eb44b3a0b3327b17682af1ef99759542b8007a6d 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -18,6 +18,20 @@ include(PulseAudio)
 
 include(CEFPlugin)
 
+include_directories(
+    ${LLPLUGIN_INCLUDE_DIRS}
+    ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${CEF_INCLUDE_DIR}
+)
+include_directories(SYSTEM
+    ${PULSEAUDIO_INCLUDE_DIRS}
+    )
+
+
 ### media_plugin_cef
 
 set(media_plugin_cef_SOURCE_FILES
@@ -29,11 +43,10 @@ set(media_plugin_cef_HEADER_FILES
     )
 
 set (media_plugin_cef_LINK_LIBRARIES
-  ${MEDIA_PLUGIN_BASE_LIBRARIES}
   ${LLPLUGIN_LIBRARIES}
-  ${LLRENDER_LIBRARIES}
-  ${LLCOMMON_LIBRARIES}
+  ${MEDIA_PLUGIN_BASE_LIBRARIES}
   ${CEF_PLUGIN_LIBRARIES}
+  ${LLCOMMON_LIBRARIES}
   ${PLUGIN_API_WINDOWS_LIBRARIES})
 
 
@@ -71,20 +84,6 @@ add_library(media_plugin_cef
 
 set_target_properties(media_plugin_cef PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
 
-target_include_directories(
-    media_plugin_cef
-    PRIVATE
-    ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS}
-    ${CEF_INCLUDE_DIR}
-)
-
-target_include_directories(
-    media_plugin_cef
-    SYSTEM
-    PRIVATE
-    ${PULSEAUDIO_INCLUDE_DIRS}
-    )
-
 target_link_libraries(media_plugin_cef
   ${media_plugin_cef_LINK_LIBRARIES}
 )
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c135065c654ed63050fc6c64a7982b0353b4b52c..e47ade51c80287897d95f128d6ff95d29a6bb546 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -65,6 +65,49 @@ endif (NOT HAVOK_TPV)
 endif( LLPHYSICSEXTENSIONS_SRC_DIR )
 # </alchemy>
 
+if(FMODSTUDIO)
+  include_directories(${FMODSTUDIO_INCLUDE_DIR})
+endif(FMODSTUDIO)
+
+include_directories(
+    ${DBUSGLIB_INCLUDE_DIRS}
+    ${ZLIB_INCLUDE_DIRS}
+    ${JSONCPP_INCLUDE_DIR}
+    ${GLOD_INCLUDE_DIR}
+    ${LLAUDIO_INCLUDE_DIRS}
+    ${LLCHARACTER_INCLUDE_DIRS}
+    ${LLCOREHTTP_INCLUDE_DIRS}
+    ${LLPHYSICS_INCLUDE_DIRS}
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLKDU_INCLUDE_DIRS}
+    ${LLINVENTORY_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLPLUGIN_INCLUDE_DIRS}
+    ${LLPRIMITIVE_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLUI_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    ${LLLOGIN_INCLUDE_DIRS}
+    ${UPDATER_INCLUDE_DIRS}
+    ${LIBS_PREBUILT_DIR}/include/collada
+    ${HUNSPELL_INCLUDE_DIR}
+    ${OPENAL_LIB_INCLUDE_DIRS}
+    ${LIBS_PREBUILT_DIR}/include/collada/1.4
+    ${LLAPPEARANCE_INCLUDE_DIRS}
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    )
+
+include_directories(SYSTEM
+    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    ${LLPHYSICSEXTENSIONS_INCLUDE_DIRS}
+    ${LIBS_PREBUILT_DIR}/include/collada
+    ${LIBS_PREBUILT_DIR}/include/collada/1.4
+    )
+
 set(viewer_SOURCE_FILES
     alavatarcolormgr.cpp
     alchatcommand.cpp
@@ -1935,28 +1978,6 @@ else (WINDOWS)
         )
 endif (WINDOWS)
 
-target_include_directories(
-    ${VIEWER_BINARY_NAME}
-    PUBLIC
-    ${DBUSGLIB_INCLUDE_DIRS}
-    ${ZLIB_INCLUDE_DIRS}
-    ${JSONCPP_INCLUDE_DIR}
-    ${GLOD_INCLUDE_DIR}
-    ${LLKDU_INCLUDE_DIRS}
-    ${LIBS_PREBUILT_DIR}/include/collada
-    ${LIBS_PREBUILT_DIR}/include/collada/1.4
-	${LIBXML2_INCLUDES}
-    )
-
-target_include_directories(
-    ${VIEWER_BINARY_NAME}
-    SYSTEM
-    PUBLIC
-    ${LLPHYSICSEXTENSIONS_INCLUDE_DIRS}
-    ${LIBS_PREBUILT_DIR}/include/collada
-    ${LIBS_PREBUILT_DIR}/include/collada/1.4
-    )
-
 # *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)
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
index 2b2afc1bf0b109f4c29bead1f42ebcdf7a3bc930..2c13cc1b1c248bb25061b96035497931c3e69dc0 100644
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -12,6 +12,14 @@ include(LLXML)
 include(LLCoreHttp)
 include(LLMessage)
 
+include_directories(
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(login_SOURCE_FILES
     lllogin.cpp
     )
diff --git a/indra/viewer_components/updater/CMakeLists.txt b/indra/viewer_components/updater/CMakeLists.txt
index ed72950f67b72201680965365f26986495c0a4ac..b0118e7a8d37c0e7a594980ab4e838f5dfa81408 100644
--- a/indra/viewer_components/updater/CMakeLists.txt
+++ b/indra/viewer_components/updater/CMakeLists.txt
@@ -15,6 +15,15 @@ include(LLMessage)
 include(LLPlugin)
 include(LLVFS)
 
+include_directories(
+    ${LLCOREHTTP_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLPLUGIN_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${CURL_INCLUDE_DIRS}
+    ${CMAKE_SOURCE_DIR}/newview
+    )
+
 set(updater_service_SOURCE_FILES
     llupdaterservice.cpp
     llupdatechecker.cpp
@@ -47,19 +56,12 @@ add_library(llupdaterservice
             ${updater_service_SOURCE_FILES}
             )
 
-target_include_directories(
-    llupdaterservice
-    PRIVATE
-    ${LIBS_OPEN_DIR}/newview
-    ${CURL_INCLUDE_DIRS}
-    )
-
 target_link_libraries(llupdaterservice
+    ${LLCOMMON_LIBRARIES}
     ${LLMESSAGE_LIBRARIES}
     ${LLCOREHTTP_LIBRARIES}
     ${LLPLUGIN_LIBRARIES}
     ${LLVFS_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
     )
 
 if(LL_TESTS)
diff --git a/indra/win_crash_logger/CMakeLists.txt b/indra/win_crash_logger/CMakeLists.txt
index d4aa1e95c82315c1814819ce7d966d6de52d037d..31147008ca2ecc2b530a55663ae3ced49a7e164b 100644
--- a/indra/win_crash_logger/CMakeLists.txt
+++ b/indra/win_crash_logger/CMakeLists.txt
@@ -16,6 +16,19 @@ include(LLSharedLibs)
 include(GoogleBreakpad)
 include(Boost)
 
+include_directories(
+    ${LLCOREHTTP_INCLUDE_DIRS}
+    ${LLCRASHLOGGER_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${BREAKPAD_INCLUDE_DIRECTORIES}
+    )
+include_directories(SYSTEM
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
+    )
+
 set(win_crash_logger_SOURCE_FILES
     win_crash_logger.cpp
     llcrashloggerwindows.cpp
@@ -41,8 +54,9 @@ set(win_crash_logger_RESOURCE_FILES
 set_source_files_properties(${win_crash_logger_RESOURCE_FILES}
                             PROPERTIES HEADER_FILE_ONLY TRUE)
 
-list(APPEND win_crash_logger_RESOURCE_FILES 
+set(win_crash_logger_RESOURCE_FILES 
     win_crash_logger.rc
+    ${win_crash_logger_RESOURCE_FILES}
     )
 
 SOURCE_GROUP("Resource Files" FILES ${win_crash_logger_RESOURCE_FILES})
@@ -55,12 +69,6 @@ list(APPEND
 
 add_executable(windows-crash-logger WIN32 ${win_crash_logger_SOURCE_FILES})
 
-target_include_directories(
-    windows-crash-logger
-	PRIVATE
-    ${BREAKPAD_INCLUDE_DIRECTORIES}
-    )
-
 target_link_libraries(windows-crash-logger
     ${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}
     ${LLCRASHLOGGER_LIBRARIES}