GEODE-6239: Updates third party dependencies. (#426)

- Updates ACE to 6.5.3
- Updates GTest to 1.8.1
- Updates OpenSSL to 1.1.1a
- Updated to use more modern CMake patterns.
- Fixes mutli config builds.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2802259..87add64 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,6 +38,12 @@
   endif()
 endif()
 
+get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+if(NOT CMAKE_BUILD_TYPE AND NOT GENERATOR_IS_MULTI_CONFIG)
+  message(STATUS "Using default build type 'Debug'.")
+  set(CMAKE_BUILD_TYPE Debug CACHE STRING "Specifies the build type on single-configuration generators." FORCE)
+endif()
+
 set(CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION "4.5.2")
 set(DOTNET_TARGET_FRAMEWORK_VERSION "4.5.2")
 set(BUILD_BITS 64 CACHE STRING "Build for 64 (Geode default) or 32 bit.")
@@ -90,11 +96,6 @@
 # $ cmake -G Xcode -DCMAKE_INSTALL_PREFIX=/my/favorite/location ..
 set(CMAKE_INSTALL_PREFIX "nativeclient" CACHE STRING "Install prefix")
 
-set(CMAKE_CONFIGURATION_TYPES Debug Release)
-if (NOT CMAKE_BUILD_TYPE)
-  set(CMAKE_BUILD_TYPE Debug)
-endif()
-
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
 # TODO this doesn't seem to have effect
@@ -296,14 +297,6 @@
   message(FATAL_ERROR "Utility ar not found.")
 endif()
 
-if (WIN32 OR ${CMAKE_GENERATOR} STREQUAL "Xcode")
-  set(CMAKE_USES_BUILDTYPE TRUE)
-  set ( _DEBUG_OR_RELEASE $<$<CONFIG:Debug>:Debug>$<$<NOT:$<CONFIG:Debug>>:Release>)
-else()
-  set(CMAKE_USES_BUILDTYPE FALSE)
-  set ( _DEBUG_OR_RELEASE .)
-endif()
-
 # Default to only showing output on failure for unit tests but allow
 # overriding with the CTEST_UNITTEST_VERBOSITY environment variable.
 set(CTEST_UNITTEST_VERBOSITY --output-on-failure)
@@ -375,4 +368,4 @@
     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
     COMMENT "Checking source with Apache Rat."
   )
-endif()
\ No newline at end of file
+endif()
diff --git a/clicache/integration-test/CMakeLists.txt b/clicache/integration-test/CMakeLists.txt
index c849d06..cf8cd1d 100644
--- a/clicache/integration-test/CMakeLists.txt
+++ b/clicache/integration-test/CMakeLists.txt
@@ -56,7 +56,7 @@
     )
 endmacro()
 
-foreach( lib ssl sqlite )
+foreach( lib OpenSSL::SSL SQLite::sqlite3 )
   get_target_property(runtime_path ${lib} INTERFACE_RUNTIME_DIR)
   set(PATH ${PATH} ${runtime_path})
 endforeach()
diff --git a/clicache/integration-test/UnitTests.csproj.in b/clicache/integration-test/UnitTests.csproj.in
index 8fc93ff..47ead0b 100644
--- a/clicache/integration-test/UnitTests.csproj.in
+++ b/clicache/integration-test/UnitTests.csproj.in
@@ -615,7 +615,7 @@
     <Content Include="authz-ldap.xml" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="$(CMAKE_BINARY_DIR)\plugins\SQLiteCLI\SQLiteCLI.csproj">
+    <ProjectReference Include="$(CMAKE_BINARY_DIR)\plugins\SQLiteCLI\Apache.Geode.Plugins.SQLite.csproj">
       <Project>{FF9597E3-A4DD-4FDE-871D-B0C66088762F}</Project>
       <Name>SQLiteCLI</Name>
     </ProjectReference>
diff --git a/clicache/integration-test2/CMakeLists.txt b/clicache/integration-test2/CMakeLists.txt
index e1b242f..24cf0fe 100644
--- a/clicache/integration-test2/CMakeLists.txt
+++ b/clicache/integration-test2/CMakeLists.txt
@@ -20,44 +20,50 @@
 
 get_target_property(JAVAOBJECT_JAR_PATH javaobject JAR_FILE)
 
-set(CRYPTO_IMPL_PATH "/../../../cryptoimpl/${CMAKE_BUILD_TYPE}")
-set(OPENSSL_PATH "/../../../dependencies/openssl/openssl-extern-prefix/${CMAKE_BUILD_TYPE}/bin")
-
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/packages.config ${CMAKE_CURRENT_BINARY_DIR}/packages.config COPYONLY)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cs.in ${CMAKE_CURRENT_BINARY_DIR}/Config.cs)
 
 add_library( ${PROJECT_NAME} SHARED
-    Cluster.cs
-    ClusterTest.cs
-    Config.cs.in
-    ${CMAKE_CURRENT_BINARY_DIR}/Config.cs
-    GfshTest.cs
-    GfshExecuteTest.cs
-    Gfsh.cs
-    GfshExecute.cs
-    CacheXml.cs
-    CacheXmlTests.cs
-    CqOperationTest.cs
-    FunctionExecutionTest.cs
-    QueryTest.cs
-    RegionTest.cs
-    RegionSSLTest.cs
-    Position.cs
-    TestBase.cs
-    cache.xml
-    geode.properties
-    xunit.runner.json
-    packages.config
-    SerializationTests.cs
-    ClientSslKeys/client_keystore.password.pem
-    ClientSslKeys/client_truststore.pem
-    ServerSslKeys/server_keystore.jks
-    ServerSslKeys/server_truststore.jks
+  Cluster.cs
+  ClusterTest.cs
+  Config.cs.in
+  ${CMAKE_CURRENT_BINARY_DIR}/Config.cs
+  GfshTest.cs
+  GfshExecuteTest.cs
+  Gfsh.cs
+  GfshExecute.cs
+  CacheXml.cs
+  CacheXmlTests.cs
+  CqOperationTest.cs
+  FunctionExecutionTest.cs
+  QueryTest.cs
+  RegionTest.cs
+  RegionSSLTest.cs
+  Position.cs
+  TestBase.cs
+  cache.xml
+  geode.properties
+  xunit.runner.json
+  packages.config
+  SerializationTests.cs
+  ClientSslKeys/client_keystore.password.pem
+  ClientSslKeys/client_truststore.pem
+  ServerSslKeys/server_keystore.jks
+  ServerSslKeys/server_truststore.jks
 )
 
-set_source_files_properties(cache.xml server.xml xunit.runner.json geode.properties ClientSslKeys/client_keystore.password.pem ClientSslKeys/client_truststore.pem ServerSslKeys/server_keystore.jks ServerSslKeys/server_truststore.jks PROPERTIES
-  VS_COPY_TO_OUT_DIR Always
-  VS_TOOL_OVERRIDE "None"
+set_source_files_properties(
+  cache.xml
+  server.xml
+  xunit.runner.json
+  geode.properties
+  ClientSslKeys/client_keystore.password.pem
+  ClientSslKeys/client_truststore.pem
+  ServerSslKeys/server_keystore.jks
+  ServerSslKeys/server_truststore.jks
+  PROPERTIES
+    VS_COPY_TO_OUT_DIR Always
+    VS_TOOL_OVERRIDE None
 )
 
 target_link_libraries(${PROJECT_NAME}
@@ -91,3 +97,13 @@
 endif()
 
 add_dependencies(${PROJECT_NAME} nuget-restore)
+
+add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy_directory
+    $<SHELL_PATH:$<TARGET_GENEX_EVAL:OpenSSL::SSL,$<TARGET_PROPERTY:OpenSSL::SSL,INTERFACE_RUNTIME_DIR>>>
+    $<SHELL_PATH:$<TARGET_FILE_DIR:${PROJECT_NAME}>>
+  COMMAND ${CMAKE_COMMAND} -E copy_if_different
+    $<SHELL_PATH:$<TARGET_FILE:cryptoImpl>>
+    $<$<CONFIG:Debug>:$<SHELL_PATH:$<TARGET_PDB_FILE:cryptoImpl>>>
+    $<SHELL_PATH:$<TARGET_FILE_DIR:${PROJECT_NAME}>>
+)
diff --git a/clicache/integration-test2/Config.cs.in b/clicache/integration-test2/Config.cs.in
index 5c50e97..abfb0dd 100644
--- a/clicache/integration-test2/Config.cs.in
+++ b/clicache/integration-test2/Config.cs.in
@@ -28,14 +28,4 @@
   {
     get { return @"@JAVAOBJECT_JAR_PATH@"; }
   }
-
-  public static string CryptoImplPath
-  {
-    get { return @"@CRYPTO_IMPL_PATH@"; }
-  }
-
-  public static string OpenSSLPath
-  {
-    get { return @"@OPENSSL_PATH@"; }
-  }
 }
diff --git a/clicache/integration-test2/RegionSSLTest.cs b/clicache/integration-test2/RegionSSLTest.cs
index 5446c4c..eb6d908 100644
--- a/clicache/integration-test2/RegionSSLTest.cs
+++ b/clicache/integration-test2/RegionSSLTest.cs
@@ -24,44 +24,22 @@
     [Trait("Category", "Integration")]
     public class RegionSSLTest : TestBase, IDisposable
     {
-        private readonly Cache cacheOne_;
+        private readonly Cache cache_;
 
         public RegionSSLTest()
         {
-            var pathvar = Environment.GetEnvironmentVariable("PATH");
-
-            var openSslPath = Environment.CurrentDirectory + Config.OpenSSLPath;
-
-            if (!Directory.Exists(openSslPath))
-            {
-                throw new DirectoryNotFoundException("OpenSSL is a prerequisite for integration tests and the directory was not found.");
-            }
-
-            pathvar += ";" + openSslPath;
-
-            var cryptoImplPath = Environment.CurrentDirectory + Config.CryptoImplPath;
-
-            if (!File.Exists(cryptoImplPath + "\\cryptoImpl.dll"))
-            {
-                throw new System.IO.FileNotFoundException("cryptoImpl.dll was not found at " + cryptoImplPath);
-            }
-
-            pathvar += ";" + cryptoImplPath;
-
-            Environment.SetEnvironmentVariable("PATH", pathvar);
-
             var cacheFactory = new CacheFactory();
             cacheFactory.Set("ssl-enabled", "true");
             cacheFactory.Set("ssl-keystore", Environment.CurrentDirectory + "\\ClientSslKeys\\client_keystore.password.pem");
             cacheFactory.Set("ssl-keystore-password", "gemstone");
             cacheFactory.Set("ssl-truststore", Environment.CurrentDirectory + "\\ClientSslKeys\\client_truststore.pem");
 
-            cacheOne_ = cacheFactory.Create();
+            cache_ = cacheFactory.Create();
         }
 
         public void Dispose()
         {
-            cacheOne_.Close();
+            cache_.Close();
         }
 
         [Fact]
@@ -78,11 +56,11 @@
                     .withType("PARTITION")
                     .execute(), 0);
 
-                cacheOne_.GetPoolFactory()
+                cache_.GetPoolFactory()
                     .AddLocator(cluster.Gfsh.LocatorBindAddress, cluster.Gfsh.LocatorPort)
                     .Create("default");
 
-                var regionFactory = cacheOne_.CreateRegionFactory(RegionShortcut.PROXY)
+                var regionFactory = cache_.CreateRegionFactory(RegionShortcut.PROXY)
                             .SetPoolName("default");
 
                 var region = regionFactory.Create<string, string>("testRegion1");
diff --git a/clicache/plugins/SQLiteCLI/CMakeLists.txt b/clicache/plugins/SQLiteCLI/CMakeLists.txt
index f6440eb..8000a84 100644
--- a/clicache/plugins/SQLiteCLI/CMakeLists.txt
+++ b/clicache/plugins/SQLiteCLI/CMakeLists.txt
@@ -27,12 +27,15 @@
     PdxClassLibrary
 )
 
+get_target_property(SQLite_netFx_INTERFACE_LINK_LIBRARIES SQLite::netFx INTERFACE_LINK_LIBRARIES)
+
 set_target_properties( ${PROJECT_NAME} PROPERTIES
-  COMMON_LANGUAGE_RUNTIME ""
   VS_GLOBAL_ROOTNAMESPACE ${PROJECT_NAME}
   VS_GLOBAL_TreatWarningsAsErrors True
   VS_GLOBAL_PROJECT_TYPES "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
-  VS_DOTNET_REFERENCE_System.Data.SQLite ${sqlite-netFx_SHARED_LIB}
+  VS_DOTNET_REFERENCE_System.Data.SQLite "${SQLite_netFx_INTERFACE_LINK_LIBRARIES}"
   VS_DOTNET_REFERENCES "System;System.Data;System.Xml"
   FOLDER cli/plugins
-)
\ No newline at end of file
+)
+
+add_dependencies(${PROJECT_NAME} SQLite::netFx)
diff --git a/cppcache/CMakeLists.txt b/cppcache/CMakeLists.txt
index e4afd54..78ab164 100644
--- a/cppcache/CMakeLists.txt
+++ b/cppcache/CMakeLists.txt
@@ -95,11 +95,11 @@
 endif()
 
 target_link_libraries(_apache-geode INTERFACE
-  ACE
+  ACE::ACE
   Boost::boost
   Boost::filesystem
   Boost::thread
-  libxml2
+  LibXml2::LibXml2
 )
 
 if (USE_PCH)
diff --git a/cppcache/integration-test/CMakeLists.txt b/cppcache/integration-test/CMakeLists.txt
index 8f975c5..3352da4 100644
--- a/cppcache/integration-test/CMakeLists.txt
+++ b/cppcache/integration-test/CMakeLists.txt
@@ -24,7 +24,7 @@
 )
 target_link_libraries(test-cppcache-utils
   PRIVATE
-    ACE
+    ACE::ACE
     _WarningsAsError
   PUBLIC
     apache-geode
@@ -49,7 +49,7 @@
 add_library(unit_test_callbacks SHARED LibraryCallbacks.cpp)
 target_link_libraries(unit_test_callbacks
   PRIVATE
-    ACE
+    ACE::ACE
     _WarningsAsError
   PUBLIC
     apache-geode
@@ -76,7 +76,7 @@
 endmacro()
 
 # Add lazy loaded shared library paths to test environment
-foreach( lib ssl sqlite )
+foreach( lib OpenSSL::SSL SQLite::sqlite3 )
   get_target_property(library_path ${lib} INTERFACE_LIBRARY_DIR)
   set(LD_LIBRARY_PATH ${LD_LIBRARY_PATH} ${library_path})
   get_target_property(runtime_path ${lib} INTERFACE_RUNTIME_DIR)
@@ -99,7 +99,7 @@
 
   target_link_libraries(${TEST}
     PRIVATE
-      ACE
+      ACE::ACE
       test-cppcache-utils
       _WarningsAsError
       _CppCodeCoverage
diff --git a/cppcache/integration/framework/CMakeLists.txt b/cppcache/integration/framework/CMakeLists.txt
index 50b7d29..8aa234c 100644
--- a/cppcache/integration/framework/CMakeLists.txt
+++ b/cppcache/integration/framework/CMakeLists.txt
@@ -42,7 +42,7 @@
 target_link_libraries(integration-framework
   PUBLIC
     apache-geode
-    GTest::GTest
+    GTest::gtest
     Boost::boost
     Boost::system
     Boost::log
diff --git a/cppcache/integration/test/CMakeLists.txt b/cppcache/integration/test/CMakeLists.txt
index f371251..0580a0a 100644
--- a/cppcache/integration/test/CMakeLists.txt
+++ b/cppcache/integration/test/CMakeLists.txt
@@ -42,9 +42,9 @@
     apache-geode
     integration-framework
     testobject
-    ACE
-    GTest::GTest
-    GTest::Main
+    ACE::ACE
+    GTest::gtest
+    GTest::gtest_main
     Boost::boost
     Boost::system
     Boost::log
diff --git a/cppcache/test/CMakeLists.txt b/cppcache/test/CMakeLists.txt
index 89ef0b9..e9c2c9e 100644
--- a/cppcache/test/CMakeLists.txt
+++ b/cppcache/test/CMakeLists.txt
@@ -63,8 +63,8 @@
 target_link_libraries(apache-geode_unittests
   PRIVATE
     apache-geode-static
-    GTest::GTest
-    GTest::Main
+    GTest::gtest
+    GTest::gtest_main
     Boost::boost
     Boost::thread
     _WarningsAsError
diff --git a/cryptoimpl/CMakeLists.txt b/cryptoimpl/CMakeLists.txt
index 61acaa3..47689d9 100644
--- a/cryptoimpl/CMakeLists.txt
+++ b/cryptoimpl/CMakeLists.txt
@@ -38,13 +38,13 @@
 
 target_link_libraries(cryptoImpl
   PRIVATE
-    ACE_SSL
+    ACE::ACE_SSL
     _WarningsAsError
   PUBLIC
-   apache-geode
-   crypto
-   ssl
-   c++11
+    apache-geode
+    OpenSSL::Crypto
+    OpenSSL::SSL
+    c++11
 )
 
 add_clangformat(cryptoImpl)
diff --git a/dependencies/ACE/CMakeLists.txt b/dependencies/ACE/CMakeLists.txt
index eb04e1c..f5129b9 100644
--- a/dependencies/ACE/CMakeLists.txt
+++ b/dependencies/ACE/CMakeLists.txt
@@ -13,14 +13,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( ACE LANGUAGES NONE )
+project( ACE VERSION 6.5.3 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 6.4.7 )
-set( ${PROJECT_NAME}_SHA265 b2b59a5f49b164121a8d1c109ff04fc23fcd67cfad040772e8c045c8a34cdabe )
-string(REPLACE "." "_" _VERSION_UNDERSCORE ${${PROJECT_NAME}_VERSION})
-set( ${PROJECT_NAME}_URL "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${_VERSION_UNDERSCORE}/ACE.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
-set( ${PROJECT_NAME}_DEPENDS openssl-extern )
+set( SHA256 de20bdbfcbcf7d67836e9a2c0875e4eb348a1153e19b83392608330fec3c056a )
+set( DEPENDS OpenSSL::SSL )
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
   set( ACE_PLATFORM sunos5_sunc++ )
@@ -46,9 +42,8 @@
   message( FATAL_ERROR "ACE_PLATFORM unset for ${CMAKE_SYSTEM_NAME}" )
 endif()
 
-include(ExternalProject)
 
-set( OPENSSL_ROOT ${DEPENDENCIES_openssl_DIR} )
+set( OPENSSL_ROOT $<TARGET_PROPERTY:OpenSSL::SSL,INTERFACE_INCLUDE_DIRECTORIES>/.. )
 
 
 if (${WIN32})
@@ -58,27 +53,36 @@
     set( _PLATFORM win32 )
   endif()
 
+  if (MSVC_VERSION EQUAL 1900)
+    set(_TYPE "vc14")
+  elseif((MSVC_VERSION GREATER_EQUAL 1910) AND (MSVC_VERSION LESS_EQUAL 1919))
+    set(_TYPE "vs2017")
+  endIF()
+
   set ( _COMMAND_PREFIX ${CMAKE_COMMAND} -E chdir ace )
 
   set ( _MSBUILD_FLAGS /m /p:Platform=${_PLATFORM} /p:Configuration=$<$<CONFIG:Debug>:Debug>$<$<NOT:$<CONFIG:Debug>>:Release>)
-  set ( _MSBUILD_FLAGS_STATIC ${_MSBUILD_FLAGS} /t:ace_vc${MSVC_VERSION}_static /t:SSL_vc${MSVC_VERSION}_static ) 
+  set ( _MSBUILD_FLAGS_STATIC ${_MSBUILD_FLAGS} /t:ace_${_TYPE}_static /t:SSL_${_TYPE}_static )
 
   include(ProcessorCount)
   ProcessorCount(_NPROCS)
-  set ( MPC ${PERL} ..\\bin\\mwc.pl )
-  set ( MPC_FLAGS -type vc${MSVC_VERSION} -expand_vars -features ssl=1 -recurse -hierarchy -workers ${_NPROCS} -value_template MultiProcessorCompilation=true -apply_project )
+
+  find_package(Perl REQUIRED)
+
+  set ( MPC ${PERL_EXECUTABLE} ..\\bin\\mwc.pl )
+  set ( MPC_FLAGS -type ${_TYPE} -expand_vars -features ssl=1 -recurse -hierarchy -workers ${_NPROCS} -value_template MultiProcessorCompilation=true -apply_project )
 
   #TODO add custom targets to build in parallel?
   #TODO MPC has flag to replace variables with absolute paths, think we need that for devstudio builds
   set ( _CONFIGURE_COMMAND ${_COMMAND_PREFIX}
                              ${CMAKE_COMMAND} -E env ACE_ROOT=<SOURCE_DIR> SSL_ROOT=${OPENSSL_ROOT}
-							 ${MPC} ${MPC_FLAGS} -name_modifier "*_vc${MSVC_VERSION}_static" -static 
+							 ${MPC} ${MPC_FLAGS} -name_modifier "*_${_TYPE}_static" -static
 							 -value_template staticflags+=__ACE_INLINE__ 
 							 -value_template staticflags+=ACE_BUILD_DLL 
 							 -value_template staticflags+=ACE_AS_STATIC_LIBS 
 							 -value_template runtime_library=Multithreaded$<$<CONFIG:Debug>:Debug>Dll 
   )
-  set ( _BUILD_COMMAND ${_COMMAND_PREFIX} ${MSBUILD} ACE_vc${MSVC_VERSION}_static.sln ${_MSBUILD_FLAGS} ${_MSBUILD_FLAGS_STATIC}
+  set ( _BUILD_COMMAND ${_COMMAND_PREFIX} ${CMAKE_VS_MSBUILD_COMMAND} ACE_${_TYPE}_static.sln ${_MSBUILD_FLAGS} ${_MSBUILD_FLAGS_STATIC}
   )
   set ( _INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory lib <INSTALL_DIR>/lib 
                  COMMAND ${CMAKE_COMMAND} -E copy_directory ace <INSTALL_DIR>/include/ace
@@ -97,83 +101,90 @@
   set ( _INSTALL_COMMAND ${_MAKE} install )
 endif()
 
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+string(REPLACE "." "_" _VERSION_UNDERSCORE ${PROJECT_VERSION})
+
+set( EXTERN ${PROJECT_NAME}-extern )
+include(ExternalProject)
+ExternalProject_Add( ${EXTERN}
+   URL "https://github.com/DOCGroup/ACE_TAO/releases/download/ACE%2BTAO-${_VERSION_UNDERSCORE}/ACE-${PROJECT_VERSION}.tar.gz"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND "${_CONFIGURE_COMMAND}"
    BUILD_COMMAND "${_BUILD_COMMAND}"
    INSTALL_COMMAND "${_INSTALL_COMMAND}"
-   DEPENDS ${${PROJECT_NAME}_DEPENDS}
+   DEPENDS ${DEPENDS}
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
+ExternalProject_Get_Property( ${EXTERN} SOURCE_DIR )
+set( SOURCE_DIR ${SOURCE_DIR} )
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set( INSTALL_DIR ${INSTALL_DIR} )
+set( DEPENDENCIES_DIR ${INSTALL_DIR} PARENT_SCOPE)
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
 set( PATCH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/patches )
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} patches
-    ALWAYS 0
-    DEPENDEES download
-    DEPENDERS patch
-    DEPENDS ${PATCH_FILE}
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_sunos5_sunc++.GNU ${${PROJECT_NAME}_SOURCE_DIR}/ace/config-lite.h ${${PROJECT_NAME}_SOURCE_DIR}/ace/Stats.cpp
-    WORKING_DIRECTORY ${${PROJECT_NAME}_SOURCE_DIR}
-    COMMAND ${PATCH} -u -N -p1 < ${PATCH_FILE}
+ExternalProject_Add_Step( ${EXTERN} patches
+  ALWAYS 0
+  DEPENDEES download
+  DEPENDERS patch
+  DEPENDS ${PATCH_FILE}
+  BYPRODUCTS ${SOURCE_DIR}/include/makeinclude/platform_sunos5_sunc++.GNU ${SOURCE_DIR}/ace/config-lite.h ${SOURCE_DIR}/ace/Stats.cpp
+  WORKING_DIRECTORY ${SOURCE_DIR}
+  COMMAND ${Patch_EXECUTABLE} -u -N -p1 < ${PATCH_FILE}
 )
 endif()
 
 configure_file(config.h.in config.h)
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} config.h
-    DEPENDEES patch
-    DEPENDERS configure
-    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/config.h
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/ace/config.h
-    COMMAND ${CMAKE_COMMAND} -E copy config.h ${${PROJECT_NAME}_SOURCE_DIR}/ace/config.h
+ExternalProject_Add_Step( ${EXTERN} config.h
+  DEPENDEES patch
+  DEPENDERS configure
+  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/config.h
+  BYPRODUCTS ${SOURCE_DIR}/ace/config.h
+  COMMAND ${CMAKE_COMMAND} -E copy config.h ${SOURCE_DIR}/ace/config.h
 )
 
 if (UNIX)
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} platform
-    DEPENDEES patch
-    DEPENDERS configure
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_macros.GNU
-    COMMAND echo "INSTALL_PREFIX = ${${PROJECT_NAME}_INSTALL_DIR}" > ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_macros.GNU
-    COMMAND echo "CCFLAGS += ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_OPTIONS_PIC}" >> ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_macros.GNU
-    COMMAND echo "include ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_${ACE_PLATFORM}.GNU" >> ${${PROJECT_NAME}_SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+ExternalProject_Add_Step( ${EXTERN} platform
+  DEPENDEES patch
+  DEPENDERS configure
+  BYPRODUCTS ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "INSTALL_PREFIX = ${INSTALL_DIR}" > ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "CC = ${CMAKE_C_COMPILER}" >> ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "CXX = ${CMAKE_CXX_COMPILER}" >> ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "CCFLAGS += ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_OPTIONS_PIC}" >> ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
+  COMMAND echo "include ${SOURCE_DIR}/include/makeinclude/platform_${ACE_PLATFORM}.GNU" >> ${SOURCE_DIR}/include/makeinclude/platform_macros.GNU
 )
 endif()
 
-add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
+find_package(Threads)
+
+add_library(ACE_ACE INTERFACE)
+target_include_directories(ACE_ACE SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_compile_definitions(${PROJECT_NAME} INTERFACE
+target_compile_definitions(ACE_ACE INTERFACE
 	-D__ACE_INLINE__
 	-DACE_AS_STATIC_LIBS
 )
-target_link_libraries(${PROJECT_NAME} INTERFACE
-    ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ACE${CMAKE_STATIC_LIBRARY_SUFFIX}
+target_link_libraries(ACE_ACE INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ACE${CMAKE_STATIC_LIBRARY_SUFFIX}
+  Threads::Threads
 )
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
-  target_link_libraries(${PROJECT_NAME} INTERFACE
+  target_link_libraries(ACE_ACE INTERFACE
     rt
-    pthread
     m
     socket
     nsl
   )
-  target_compile_definitions( ${PROJECT_NAME} INTERFACE
+  target_compile_definitions(ACE_ACE INTERFACE
     _POSIX_PTHREAD_SEMANTICS
   )
 
 elseif ("Linux" STREQUAL ${CMAKE_SYSTEM_NAME} )
-  target_link_libraries(${PROJECT_NAME} INTERFACE
-    pthread
+  target_link_libraries(ACE_ACE INTERFACE
     dl
     rt
   )
@@ -181,10 +192,14 @@
 elseif ("Windows" STREQUAL ${CMAKE_SYSTEM_NAME} )
 endif()
 
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(ACE_ACE ${EXTERN})
 
-add_library(ACE_SSL INTERFACE)
-target_link_libraries(ACE_SSL INTERFACE
-    ${PROJECT_NAME}
-    ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ACE_SSL${CMAKE_STATIC_LIBRARY_SUFFIX}
+add_library(ACE_ACE_SSL INTERFACE)
+target_link_libraries(ACE_ACE_SSL INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ACE_SSL${CMAKE_STATIC_LIBRARY_SUFFIX}
+  ACE_ACE
+  OpenSSL::SSL
 )
+
+add_library(ACE::ACE ALIAS ACE_ACE)
+add_library(ACE::ACE_SSL ALIAS ACE_ACE_SSL)
diff --git a/dependencies/CMakeLists.txt b/dependencies/CMakeLists.txt
index 9830e6b..a422e23 100644
--- a/dependencies/CMakeLists.txt
+++ b/dependencies/CMakeLists.txt
@@ -16,90 +16,21 @@
 cmake_minimum_required( VERSION 3.10 )
 project( dependencies LANGUAGES NONE )
 
-#TODO options?
-set( USE_C++ 11 CACHE STRING "Use C++ standard X (11).")
+find_package(Patch REQUIRED)
 
-set ( DEPENDENCIES
-	libxml2
-	openssl
-	ACE
-	boost
-	sqlite
-	doxygen
-	gtest
-  benchmark
-)
+add_subdirectory(	libxml2 )
+add_subdirectory(	openssl )
+add_subdirectory(	ACE )
+add_subdirectory(	boost )
+add_subdirectory(	sqlite )
+add_subdirectory(	doxygen )
+add_subdirectory(	gtest )
+add_subdirectory(	benchmark )
 
 if (USE_RAT)
-  list(APPEND DEPENDENCIES rat)
+  add_subdirectory( rat )
 endif()
 
-include(CheckCCompilerFlag)
-include(CheckCXXCompilerFlag)
-
-set( CONFIGURE_FLAGS --prefix=<INSTALL_DIR> CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} )
-set( CONFIGURE ./configure ${CONFIGURE_FLAGS} )
-
-find_program( PATCH NAMES gpatch patch )
-if ("PATCH-NOTFOUND" STREQUAL "${PATCH}")
-  message( FATAL_ERROR "patch not found." )
-endif()
-
-# TODO windows why was windows finding bash?
-find_program( BASH bash )
-
 if (WIN32)
-  find_program( MSBUILD msbuild )
-  # TODO FindPerl
-  find_program( PERL perl )
-
-  # Determin the Visual Studio version to generate projects for.
-  if (MSVC10)
-    set(MSVC_VERSION 10)
-  elseif(MSVC11)
-    set(MSVC_VERSION 11)
-  elseif(MSVC12)
-    set(MSVC_VERSION 12)
-  elseif(MSVC14)
-    set(MSVC_VERSION 14)
-  endIF()
-
-  list(APPEND DEPENDENCIES sqlite-netFx)
+  add_subdirectory( sqlite-netFx )
 endif()
-
-# TODO autoconfig?
-set( CFLAGS_ARCH_32 -m32 )
-set( CFLAGS_ARCH_64 -m64 )
-
-# TODO check_c*_compiler_flag don't support linker flags
-#check_c_compiler_flag( ${CFLAGS_ARCH_${BUILD_BITS}} CFLAGS_ARCH_${BUILD_BITS}_ALLOWED )
-#if (${CFLAGS_ARCH_${BUILD_BITS}_ALLOWED})
-  set( CFLAGS_ARCH ${CFLAGS_ARCH_${BUILD_BITS}} )
-#else()
-#  message( FATAL_ERROR "${BUILD_BITS} bits flag ${CFLAGS_ARCH_${BUILD_BITS}} not supported.")
-#endif()
-
-set( CXXFLAGS_ARCH_32 -m32 )
-set( CXXFLAGS_ARCH_64 -m64 )
-
-#check_cxx_compiler_flag( ${CXXFLAGS_ARCH_${BUILD_BITS}} CXXFLAGS_ARCH_${BUILD_BITS}_ALLOWED )
-#if (${CXXFLAGS_ARCH_${BUILD_BITS}_ALLOWED})
-  set( CXXFLAGS_ARCH ${CXXFLAGS_ARCH_${BUILD_BITS}} )
-#else()
-#  message( FATAL_ERROR "${BUILD_BITS} bits flag ${CXXFLAGS_ARCH_${BUILD_BITS}} not supported.")
-#endif()
-
-set( CXXFLAGS_C++11 ${CMAKE_CXX11_STANDARD_COMPILE_OPTION} )
-if (NOT "" STREQUAL "${CXXFLAGS_C++${USE_C++}}" )
-		set( CXXFLAGS_C++ ${CXXFLAGS_C++${USE_C++}} )
-endif()
-
-#TODO solaris needs special flags https://docs.oracle.com/cd/E37069_01/html/E37075/bkamq.html#scrolltoc
-set( CXXLDFLAGS_RUNTIME_C++11 -lstdc++ -lgcc_s -lCrunG3 -lc )
-set( CXXLDFLAGS_RUNTIME ${CXXFLAGS_C++${USE_C++}} )
-
-foreach(_D ${DEPENDENCIES})
-	add_subdirectory( ${_D} )
-endforeach(_D)
-
-set(sqlite-netFx_SHARED_LIB ${sqlite-netFx_SHARED_LIB} PARENT_SCOPE)
diff --git a/dependencies/benchmark/CMakeLists.txt b/dependencies/benchmark/CMakeLists.txt
index 9cffcae..1a31a0c 100644
--- a/dependencies/benchmark/CMakeLists.txt
+++ b/dependencies/benchmark/CMakeLists.txt
@@ -4,78 +4,77 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( benchmark LANGUAGES NONE )
+project( benchmark VERSION 1.4.1 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 1.4.1 )
-set( ${PROJECT_NAME}_SHA265 61ae07eb5d4a0b02753419eb17a82b7d322786bb36ab62bd3df331a4d47c00a7 )
-set( ${PROJECT_NAME}_URL "https://github.com/google/benchmark/archive/v${${PROJECT_NAME}_VERSION}.zip" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
-set( ${PROJECT_NAME}_DEPENDS gtest_gtest )
+set( SHA256 61ae07eb5d4a0b02753419eb17a82b7d322786bb36ab62bd3df331a4d47c00a7 )
+set( DEPENDS GTest::gtest )
 
-include(ExternalProject)
 
 if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
 endif()
 
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+set( EXTERN ${PROJECT_NAME}-extern )
+include(ExternalProject)
+ExternalProject_Add( ${EXTERN}
+   URL "https://github.com/google/benchmark/archive/v${PROJECT_VERSION}.zip"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    CMAKE_ARGS
     -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
     -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
-    -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+    -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>/$<CONFIG>
     -DCMAKE_BUILD_TYPE=$<CONFIG>
-    -DGTEST_ROOT=$<TARGET_PROPERTY:GTest::GTest,INTERFACE_INCLUDE_DIRECTORIES>/..
+    -DGTEST_ROOT=$<TARGET_PROPERTY:GTest::gtest,INTERFACE_INCLUDE_DIRECTORIES>/..
     -DBENCHMARK_ENABLE_TESTING=OFF
-   DEPENDS ${${PROJECT_NAME}_DEPENDS}
+   DEPENDS ${DEPENDS}
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
+ExternalProject_Get_Property( ${EXTERN} SOURCE_DIR )
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set(INSTALL_DIR "${INSTALL_DIR}/$<CONFIG>")
 
 if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
   set(PATCH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/patches)
-  ExternalProject_Add_Step(${${PROJECT_NAME}_EXTERN} patches
+  ExternalProject_Add_Step(${EXTERN} patches
     ALWAYS 0
     DEPENDEES download
     DEPENDERS patch
     DEPENDS ${PATCH_FILE}
     BYPRODUCTS ${SOURCE_DIR}/CMakeLists.txt
     WORKING_DIRECTORY ${SOURCE_DIR}
-    COMMAND ${PATCH} -u -N -p1 < ${PATCH_FILE}
+    COMMAND ${Patch_EXECUTABLE} -u -N -p1 < ${PATCH_FILE}
   )
 endif()
 
 find_package(Threads REQUIRED)
 
-add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
+add_library(benchmark_benchmark INTERFACE)
+target_include_directories(benchmark_benchmark SYSTEM INTERFACE
   $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_link_libraries(${PROJECT_NAME} INTERFACE
+target_link_libraries(benchmark_benchmark INTERFACE
   ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}
   Threads::Threads
 )
 if (WIN32)
-target_link_libraries(${PROJECT_NAME} INTERFACE
+target_link_libraries(benchmark_benchmark INTERFACE
   Shlwapi
 )
 elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
-  target_link_libraries(${PROJECT_NAME} INTERFACE
+  target_link_libraries(benchmark_benchmark INTERFACE
     kstat
   )
 endif()
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(benchmark_benchmark ${EXTERN})
 
-add_library(benchmark::benchmark ALIAS ${PROJECT_NAME})
+add_library(benchmark::benchmark ALIAS benchmark_benchmark)
diff --git a/dependencies/boost/CMakeLists.txt b/dependencies/boost/CMakeLists.txt
index 392998a..a8aa05a 100644
--- a/dependencies/boost/CMakeLists.txt
+++ b/dependencies/boost/CMakeLists.txt
@@ -13,22 +13,13 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( boost LANGUAGES NONE )
+project( boost VERSION 1.68.0 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 1.68.0 )
-set( ${PROJECT_NAME}_SHA265 da3411ea45622579d419bfda66f45cd0f8c32a181d84adfa936f5688388995cf )
-string(REPLACE "." "_" _VERSION_UNDERSCORE ${${PROJECT_NAME}_VERSION})
-set( ${PROJECT_NAME}_URL "https://dl.bintray.com/boostorg/release/${${PROJECT_NAME}_VERSION}/source/boost_${_VERSION_UNDERSCORE}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
-
-include(ProcessorCount)
-ProcessorCount(_NPROCS)
-
-include(ExternalProject)
+set( SHA256 da3411ea45622579d419bfda66f45cd0f8c32a181d84adfa936f5688388995cf )
 
 set(_B2_FLAGS
   -d0
-  --prefix=<INSTALL_DIR>
+  --prefix=<INSTALL_DIR>/$<CONFIG>
   --with-system
   --with-log
   --layout=system
@@ -38,6 +29,8 @@
   variant=$<LOWER_CASE:$<CONFIG>>
 )
 
+include(ProcessorCount)
+ProcessorCount(_NPROCS)
 if (${_NPROCS})
   set ( _B2_FLAGS ${_B2_FLAGS} -j${_NPROCS} )
 endif()
@@ -61,9 +54,13 @@
   set ( _BOOTSTRAP_COMMAND ${_BOOTSTRAP_COMMAND} --with-toolset=clang )
 endif()
 
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+string(REPLACE "." "_" _VERSION_UNDERSCORE ${PROJECT_VERSION})
+set( EXTERN ${PROJECT_NAME}-extern )
+
+include(ExternalProject)
+ExternalProject_Add( ${EXTERN}
+   URL "https://dl.bintray.com/boostorg/release/${PROJECT_VERSION}/source/boost_${_VERSION_UNDERSCORE}.tar.gz"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND ${_BOOTSTRAP_COMMAND}
@@ -75,22 +72,20 @@
    STAMP_DIR ./stamp
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
+ExternalProject_Get_Property( ${EXTERN} SOURCE_DIR )
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set(INSTALL_DIR "${INSTALL_DIR}/$<CONFIG>")
 
 if (NOT WIN32)
 # https://github.com/boostorg/process/issues/51
   set( PATCH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/patches)
-  ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} patches
+  ExternalProject_Add_Step( ${EXTERN} patches
       ALWAYS 0
       DEPENDEES download
       DEPENDERS patch
       DEPENDS ${PATCH_FILE}
-      BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/boost/process/detail/posix/is_running.hpp
-      WORKING_DIRECTORY ${${PROJECT_NAME}_INSTALL_DIR}
-      COMMAND ${PATCH} -u -N -p1 < ${PATCH_FILE}
+      BYPRODUCTS ${SOURCE_DIR}/boost/process/detail/posix/is_running.hpp
+      COMMAND ${Patch_EXECUTABLE} -u -N -p1 < ${PATCH_FILE}
   )
 endif()
 
@@ -108,7 +103,7 @@
 
   set(linkLibraries)
   foreach(library ${args_LIBRARIES})
-    list(APPEND linkLibraries "${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}boost_${args_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    list(APPEND linkLibraries "${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}boost_${args_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
   endforeach()
 
   add_library(boost_${args_NAME} INTERFACE)
@@ -122,8 +117,7 @@
 
 add_library(${PROJECT_NAME} INTERFACE)
 target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/src>
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
 target_compile_definitions(${PROJECT_NAME} INTERFACE
   BOOST_ALL_NO_LIB
@@ -131,7 +125,7 @@
 target_link_libraries(${PROJECT_NAME} INTERFACE
 )
 add_library(Boost::boost ALIAS boost)
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(${PROJECT_NAME} ${EXTERN})
 
 find_package(Threads REQUIRED)
 
diff --git a/dependencies/doxygen/CMakeLists.txt b/dependencies/doxygen/CMakeLists.txt
index 269973c..f9157f7 100644
--- a/dependencies/doxygen/CMakeLists.txt
+++ b/dependencies/doxygen/CMakeLists.txt
@@ -13,44 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( doxygen LANGUAGES NONE )
+project( doxygen VERSION 1.8 LANGUAGES NONE )
 # used to compile documents
 
-set( ${PROJECT_NAME}_VERSION 1.6 )
-set( ${PROJECT_NAME}_SHA265 cedf78f6d213226464784ecb999b54515c97eab8a2f9b82514292f837cf88b93 )
-set( ${PROJECT_NAME}_URL "http://ftp.stack.nl/pub/users/dimitri/doxygen-${${PROJECT_NAME}_VERSION}.src.tar.gz" )
-#TODO flex broken set( ${PROJECT_NAME}_DEPENDS flex )
-
 # Not a runtime requirement, so look for existing installation.
-find_package(Doxygen ${${PROJECT_NAME}_VERSION} REQUIRED)
-if( ${DOXYGEN_FOUND} )
-
-	get_filename_component( DEPENDENCIES_${PROJECT_NAME}_DIR ${DOXYGEN_EXECUTABLE} DIRECTORY )
-	get_filename_component( DEPENDENCIES_${PROJECT_NAME}_DIR ${DEPENDENCIES_${PROJECT_NAME}_DIR} DIRECTORY )
-	set( DEPENDENCIES_${PROJECT_NAME}_DIR ${DEPENDENCIES_${PROJECT_NAME}_DIR} PARENT_SCOPE )
-	set( DEPENDENCIES_${PROJECT_NAME}_VERSION ${DOXYGEN_VERSION} PARENT_SCOPE )	
-
-else()
-	# let's build it!
-	# TODO FLEX won't build on Solaris
-	# add_subdirectory( ../flex ${CMAKE_CURRENT_BINARY_DIR}/../flex )
-
-	include(ExternalProject)
-
-	# CMake based project
-	ExternalProject_Add( ${PROJECT_NAME}
-	   URL ${${PROJECT_NAME}_URL}
-	   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
-	   UPDATE_COMMAND ""
-#	   DEPENDS ${${PROJECT_NAME}_DEPENDS}
-	)
-
-	ExternalProject_Get_Property( ${PROJECT_NAME} SOURCE_DIR )
-	set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-	ExternalProject_Get_Property( ${PROJECT_NAME} INSTALL_DIR )
-	set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-
-	set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
-	set( DEPENDENCIES_${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_VERSION} PARENT_SCOPE)
-
-endif( )
+find_package(Doxygen ${PROJECT_VERSION} REQUIRED)
diff --git a/dependencies/gtest/CMakeLists.txt b/dependencies/gtest/CMakeLists.txt
index 298995e..1fc4e9f 100644
--- a/dependencies/gtest/CMakeLists.txt
+++ b/dependencies/gtest/CMakeLists.txt
@@ -13,22 +13,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( gtest LANGUAGES NONE )
+project( gtest VERSION 1.8.1 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 1.8.0 )
-set( ${PROJECT_NAME}_SHA265 f3ed3b58511efd272eb074a3a6d6fb79d7c2e6a0e374323d1e6bcbcc1ef141bf )
-set( ${PROJECT_NAME}_URL "https://github.com/google/googletest/archive/release-${${PROJECT_NAME}_VERSION}.zip" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
+set( SHA256 927827c183d01734cc5cfef85e0ff3f5a92ffe6188e0d18e909c5efebf28a0c7 )
 
 include(ExternalProject)
-
-if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
-endif()
-
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-  URL ${${PROJECT_NAME}_URL}
-  URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+ExternalProject_Add( ${PROJECT_NAME}-extern
+  URL "https://github.com/google/googletest/archive/release-${PROJECT_VERSION}.zip"
+  URL_HASH SHA256=${SHA256}
   CMAKE_ARGS
     -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
     -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
@@ -37,25 +29,40 @@
     -Dgtest_force_shared_crt:BOOL=ON
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
+ExternalProject_Get_Property( ${PROJECT_NAME}-extern INSTALL_DIR )
 
-add_library(${PROJECT_NAME}_gtest INTERFACE)
-target_include_directories(${PROJECT_NAME}_gtest SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
-)
-target_link_libraries(${PROJECT_NAME}_gtest INTERFACE
-  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}
-)
-add_dependencies(${PROJECT_NAME}_gtest ${${PROJECT_NAME}_EXTERN})
+include(GNUInstallDirs)
 
-add_library(${PROJECT_NAME}_gtest_main INTERFACE)
-target_include_directories(${PROJECT_NAME}_gtest_main SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
-)
-target_link_libraries(${PROJECT_NAME}_gtest_main INTERFACE
-  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}
-)
-add_dependencies(${PROJECT_NAME}_gtest_main ${${PROJECT_NAME}_EXTERN})
+function(ADD_GTEST_LIBRARY)
+  set(options)
+  set(oneValueArgs)
+  set(multiValueArgs DEPENDENCIES)
+  cmake_parse_arguments(PARSE_ARGV 1 args "${options}" "${oneValueArgs}" "${multiValueArgs}")
 
-add_library(GTest::GTest ALIAS ${PROJECT_NAME}_gtest)
-add_library(GTest::Main ALIAS ${PROJECT_NAME}_gtest_main)
+  set(args_NAME ${ARGV0})
+
+  set(target "GTest_${args_NAME}")
+
+  add_library(${target} INTERFACE)
+
+  target_include_directories(${target} SYSTEM INTERFACE
+    $<BUILD_INTERFACE:${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR}>
+  )
+
+  target_link_libraries(${target} INTERFACE
+    ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${args_NAME}$<$<CONFIG:Debug>:d>${CMAKE_STATIC_LIBRARY_SUFFIX}
+    ${args_DEPENDENCIES}
+  )
+
+  add_library(GTest::${args_NAME} ALIAS ${target})
+
+  add_dependencies(${target} ${PROJECT_NAME}-extern)
+
+endfunction()
+
+find_package(Threads REQUIRED)
+
+add_gtest_library(gtest DEPENDENCIES Threads::Threads)
+add_gtest_library(gtest_main DEPENDENCIES GTest::gtest)
+add_gtest_library(gmock DEPENDENCIES GTest::gtest)
+add_gtest_library(gmock_main DEPENDENCIES GTest::gmock)
diff --git a/dependencies/libxml2/CMakeLists.txt b/dependencies/libxml2/CMakeLists.txt
index b5e5156..0bc49f8 100644
--- a/dependencies/libxml2/CMakeLists.txt
+++ b/dependencies/libxml2/CMakeLists.txt
@@ -13,14 +13,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( libxml2 LANGUAGES NONE )
+project( libxml2 VERSION 2.9.7 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 2.9.7 )
-set( ${PROJECT_NAME}_SHA265 f63c5e7d30362ed28b38bfa1ac6313f9a80230720b7fb6c80575eeab3ff5900c )
-set( ${PROJECT_NAME}_URL "http://xmlsoft.org/sources/libxml2-${${PROJECT_NAME}_VERSION}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
+set( SHA256 f63c5e7d30362ed28b38bfa1ac6313f9a80230720b7fb6c80575eeab3ff5900c )
 
-set( ${PROJECT_NAME}_CFLAGS "${${PROJECT_NAME}_CFLAGS} ${CFLAGS_ARCH}" )
+set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64" )
 
 if (${WIN32})
   set (_MAKE_FLAGS ${_MAKE_FLAGS} "CPP=cl.exe /MP /EP" "CC=cl.exe /MP" )
@@ -41,16 +38,27 @@
   set ( _BUILD_COMMAND ${CMAKE_COMMAND} -E chdir win32 nmake -f Makefile.msvc all ${_MAKE_FLAGS} )
   set ( _INSTALL_COMMAND ${CMAKE_COMMAND} -E chdir win32 nmake -f Makefile.msvc install ${_MAKE_FLAGS} )
 else()
-  set ( _CONFIGURE_COMMAND ${CONFIGURE} $<$<CONFIG:Debug>:--with-debug> --libdir=<INSTALL_DIR>/lib --with-pic --enable-static --without-iconv --without-python --without-lzma CFLAGS=${${PROJECT_NAME}_CFLAGS} "MAKE=$(MAKE)")
+  set ( _CONFIGURE_COMMAND ./configure
+          --prefix=<INSTALL_DIR>
+          $<$<CONFIG:Debug>:--with-debug>
+          --libdir=<INSTALL_DIR>/lib
+          --with-pic
+          --enable-static
+          --without-iconv
+          --without-python
+          --without-lzma
+          CC=${CMAKE_C_COMPILER}
+          CFLAGS=${CMAKE_C_FLAGS}
+          "MAKE=$(MAKE)")
   set ( _BUILD_COMMAND $(MAKE) all )
   set ( _INSTALL_COMMAND $(MAKE) install )
 endif()
 
+set( EXTERN ${PROJECT_NAME}-extern )
 include(ExternalProject)
-
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+ExternalProject_Add( ${EXTERN}
+   URL "http://xmlsoft.org/sources/libxml2-${PROJECT_VERSION}.tar.gz"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND "${_CONFIGURE_COMMAND}"
@@ -58,27 +66,26 @@
    INSTALL_COMMAND "${_INSTALL_COMMAND}"
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set( INSTALL_DIR ${INSTALL_DIR} )
 
 if (${WIN32})
   set(CMAKE_STATIC_LIBRARY_PREFIX lib)
   set(CMAKE_STATIC_LIBRARY_SUFFIX _a$<$<CONFIG:Debug>:d>.lib)
 endif()
 
-add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include/libxml2>
+add_library(LibXml2_LibXml2 INTERFACE)
+target_include_directories(LibXml2_LibXml2 SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include/libxml2>
 )
-target_link_libraries(${PROJECT_NAME} INTERFACE
-    ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}xml2${CMAKE_STATIC_LIBRARY_SUFFIX}
+target_link_libraries(LibXml2_LibXml2 INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}xml2${CMAKE_STATIC_LIBRARY_SUFFIX}
 )
 if (${UNIX})
-  target_link_libraries(${PROJECT_NAME} INTERFACE
-     z
+  target_link_libraries(LibXml2_LibXml2 INTERFACE
+    z
   )
 endif()
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(LibXml2_LibXml2 ${EXTERN})
+
+add_library(LibXml2::LibXml2 ALIAS LibXml2_LibXml2)
diff --git a/dependencies/openssl/CMakeLists.txt b/dependencies/openssl/CMakeLists.txt
index f428c9e..9587e00 100644
--- a/dependencies/openssl/CMakeLists.txt
+++ b/dependencies/openssl/CMakeLists.txt
@@ -4,9 +4,9 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -15,12 +15,8 @@
 
 project( openssl LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 1.1.1 )
-set( ${PROJECT_NAME}_SHA265 2836875a0f89c03d0fdf483941512613a50cfb421d6fd94b9f41d7279d586a3d )
-set( ${PROJECT_NAME}_URL "https://www.openssl.org/source/openssl-${${PROJECT_NAME}_VERSION}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
-
-set ( ${PROJECT_NAME}_CFLAGS "${${PROJECT_NAME}_CFLAGS} ${CFLAGS_ARCH}" )
+set( VERSION 1.1.1a )
+set( SHA256 fc20130f8b7cbd2fb918b2f14e2f429e109c31ddd0fb38fc5d71d9ffed3f9f41 )
 
 if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
   # No debug for Solaris without patching Configure
@@ -63,21 +59,23 @@
 endif()
 
 if (${WIN32})
+  find_package(Perl REQUIRED)
   # Keeps separate release/debug objects in build script
-  set ( _CONFIGURE_COMMAND ${PERL} Configure ${openssl_PLATFORM} --prefix=<INSTALL_DIR>/${_DEBUG_OR_RELEASE} --openssldir=<INSTALL_DIR>/${_DEBUG_OR_RELEASE} ${openssl_CONFIGURE_FLAGS} )
+  set ( _CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure ${openssl_PLATFORM} --prefix=<INSTALL_DIR>/$<CONFIG> --openssldir=<INSTALL_DIR>/$<CONFIG> ${openssl_CONFIGURE_FLAGS} )
   set ( _BUILD_COMMAND nmake )
-  set ( _INSTALL_COMMAND nmake install )
+  set ( _INSTALL_COMMAND nmake install_sw )
 else()
    # TODO Configure trips up without MAKE
-  set ( _CONFIGURE_COMMAND MAKE=$(MAKE) ./Configure threads zlib shared --prefix=<INSTALL_DIR>/${_DEBUG_OR_RELEASE} ${openssl_CONFIGURE_FLAGS} ${openssl_PLATFORM} )
+  set ( _CONFIGURE_COMMAND MAKE=$(MAKE) ./Configure threads zlib shared --prefix=<INSTALL_DIR>/$<CONFIG> ${openssl_CONFIGURE_FLAGS} ${openssl_PLATFORM} )
   set ( _BUILD_COMMAND $(MAKE) all )
   set ( _INSTALL_COMMAND $(MAKE) install_sw )
 endif()
 
+set( EXTERN ${PROJECT_NAME}-extern )
 include(ExternalProject)
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+ExternalProject_Add( ${EXTERN}
+   URL "https://www.openssl.org/source/openssl-${VERSION}.tar.gz"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND "${_CONFIGURE_COMMAND}"
@@ -86,39 +84,37 @@
 # TODO   TEST_COMMAND $(MAKE) test
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR}/${_DEBUG_OR_RELEASE} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
+set(INSTALL_DIR "${INSTALL_DIR}/$<CONFIG>")
 
 if (${WIN32})
-  set( CRYPTO_NAME libcrypto )
-  set( SSL_NAME libssl )
+  set( CMAKE_SHARED_LIBRARY_PREFIX lib )
 else()
-  set( CRYPTO_NAME crypto )
-  set( SSL_NAME ssl )
   set( CMAKE_LINK_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
 endif()
 
-add_library(ssl INTERFACE)
-target_include_directories(ssl SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
+add_library(OpenSSL_SSL INTERFACE)
+target_include_directories(OpenSSL_SSL SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_link_libraries(ssl INTERFACE
-  ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${SSL_NAME}${CMAKE_LINK_LIBRARY_SUFFIX}
+target_link_libraries(OpenSSL_SSL INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}ssl${CMAKE_LINK_LIBRARY_SUFFIX}
 )
-add_dependencies(ssl ${${PROJECT_NAME}_EXTERN})
+add_dependencies(OpenSSL_SSL ${EXTERN})
 
-add_library(crypto INTERFACE)
-target_include_directories(crypto SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
+add_library(OpenSSL_Crypto INTERFACE)
+target_include_directories(OpenSSL_Crypto SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_link_libraries(crypto INTERFACE
-  ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${CRYPTO_NAME}${CMAKE_LINK_LIBRARY_SUFFIX}
+target_link_libraries(OpenSSL_Crypto INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}crypto${CMAKE_LINK_LIBRARY_SUFFIX}
 )
-add_dependencies(crypto ${${PROJECT_NAME}_EXTERN})
+add_dependencies(OpenSSL_Crypto ${EXTERN})
 
-set_target_properties(ssl crypto PROPERTIES INTERFACE_LIBRARY_DIR ${${PROJECT_NAME}_INSTALL_DIR}/lib)
-set_target_properties(ssl crypto PROPERTIES INTERFACE_RUNTIME_DIR ${${PROJECT_NAME}_INSTALL_DIR}/bin)
+set_target_properties(OpenSSL_SSL OpenSSL_Crypto PROPERTIES
+  INTERFACE_LIBRARY_DIR ${INSTALL_DIR}/lib
+  INTERFACE_RUNTIME_DIR ${INSTALL_DIR}/bin
+)
 
+add_library(OpenSSL::SSL ALIAS OpenSSL_SSL)
+add_library(OpenSSL::Crypto ALIAS OpenSSL_Crypto)
diff --git a/dependencies/rat/CMakeLists.txt b/dependencies/rat/CMakeLists.txt
index bfb8771..8615026 100644
--- a/dependencies/rat/CMakeLists.txt
+++ b/dependencies/rat/CMakeLists.txt
@@ -13,16 +13,13 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( rat LANGUAGES NONE )
+project( rat VERSION 0.12 LANGUAGES NONE )
 # used to check licenses in source
 
-set( ARTIFACT_VERSION 0.12 )
-set( ARTIFACT_SHA265 cedf78f6d213226464784ecb999b54515c97eab8a2f9b82514292f837cf88b93 )
-set( ARTIFACT_NAME apache-rat-${ARTIFACT_VERSION} )
-set( ARTIFACT_FILE apache-rat-${ARTIFACT_VERSION}-bin.tar.gz )
+set( ARTIFACT_NAME apache-rat-${PROJECT_VERSION} )
+set( ARTIFACT_FILE apache-rat-${PROJECT_VERSION}-bin.tar.gz )
 set( ARTIFACT_URL "https://www.apache.org/dyn/closer.cgi?action=download&filename=creadur/${ARTIFACT_NAME}/${ARTIFACT_FILE}" )
 
-
 file( DOWNLOAD ${ARTIFACT_URL} ${CMAKE_CURRENT_BINARY_DIR}/${ARTIFACT_FILE} )
 execute_process(
   COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARTIFACT_FILE}
diff --git a/dependencies/sqlite-netFx/CMakeLists.txt b/dependencies/sqlite-netFx/CMakeLists.txt
index d0cd244..4be8359 100644
--- a/dependencies/sqlite-netFx/CMakeLists.txt
+++ b/dependencies/sqlite-netFx/CMakeLists.txt
@@ -13,28 +13,24 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( sqlite-netFx LANGUAGES NONE )
-set( ${PROJECT_NAME}_VERSION 1.0.102.0 )
-set( ${PROJECT_NAME}_SHA265 b980e8a151ddc685ed30652d39573381aef7b623478cba80b02d0795607638e1 )
-set( ${PROJECT_NAME}_URL "https://system.data.sqlite.org/blobs/${${PROJECT_NAME}_VERSION}/${PROJECT_NAME}451-binary-x64-2013-${${PROJECT_NAME}_VERSION}.zip" )
+project( sqlite-netFx VERSION 1.0.102.0 LANGUAGES NONE )
+
+set( SHA256 b980e8a151ddc685ed30652d39573381aef7b623478cba80b02d0795607638e1 )
 
 include(ExternalProject)
-
 ExternalProject_Add( ${PROJECT_NAME}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
-  # SOURCE_DIR ${PROJECT_NAME}-prefix
+   URL "https://system.data.sqlite.org/blobs/${PROJECT_VERSION}/${PROJECT_NAME}451-binary-x64-2013-${PROJECT_VERSION}.zip"
+   URL_HASH SHA256=${SHA256}
    UPDATE_COMMAND ""
    BUILD_COMMAND ""
    CONFIGURE_COMMAND ""
    INSTALL_COMMAND ${CMAKE_COMMAND} -E copy <SOURCE_DIR>/System.Data.SQLite.dll <INSTALL_DIR>
 )
-
-ExternalProject_Get_Property( ${PROJECT_NAME} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
 ExternalProject_Get_Property( ${PROJECT_NAME} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
 
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
-set( DEPENDENCIES_${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_VERSION} PARENT_SCOPE)
-set( ${PROJECT_NAME}_SHARED_LIB ${${PROJECT_NAME}_INSTALL_DIR}/System.Data.SQLite.dll PARENT_SCOPE)
+add_library(SQLite_netFx INTERFACE)
+target_link_libraries(SQLite_netFx INTERFACE
+  ${INSTALL_DIR}/System.Data.SQLite.dll
+)
+add_dependencies(SQLite_netFx ${PROJECT_NAME})
+add_library(SQLite::netFx ALIAS SQLite_netFx)
diff --git a/dependencies/sqlite/CMakeLists.txt b/dependencies/sqlite/CMakeLists.txt
index 71dc4da..b26d176 100644
--- a/dependencies/sqlite/CMakeLists.txt
+++ b/dependencies/sqlite/CMakeLists.txt
@@ -4,60 +4,56 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #      http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-project( sqlite LANGUAGES NONE )
+project( sqlite VERSION 3260000 LANGUAGES NONE )
 
-set( ${PROJECT_NAME}_VERSION 3140100 )
-set( ${PROJECT_NAME}_SHA265 bc7182476900017becb81565ecea7775d46ab747a97281aa610f4f45881c47a6 )
-set( ${PROJECT_NAME}_URL "https://www.sqlite.org/2016/sqlite-autoconf-${${PROJECT_NAME}_VERSION}.tar.gz" )
-set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
+set( SHA256 de5dcab133aa339a4cf9e97c40aa6062570086d6085d8f9ad7bc6ddf8a52096e )
 
-set ( ${PROJECT_NAME}_CFLAGS "${${PROJECT_NAME}_CFLAGS} ${CFLAGS_ARCH}" )
 
+set( EXTERN ${PROJECT_NAME}-extern )
 include(ExternalProject)
-
-ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
-   URL ${${PROJECT_NAME}_URL}
-   URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
-   UPDATE_COMMAND ""
-   CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+ExternalProject_Add( ${EXTERN}
+  URL "https://www.sqlite.org/2018/sqlite-amalgamation-${PROJECT_VERSION}.zip"
+  URL_HASH SHA256=${SHA256}
+  UPDATE_COMMAND ""
+  CMAKE_ARGS
+    -DCMAKE_BUILD_TYPE=$<CONFIG>
+    -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
 )
 
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_SOURCE_DIR ${SOURCE_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_INSTALL_DIR} PARENT_SCOPE)
+ExternalProject_Get_Property( ${EXTERN} SOURCE_DIR )
+ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
 
-ExternalProject_Add_Step( ${${PROJECT_NAME}_EXTERN} CMakeLists.txt
-    DEPENDEES patch
-    DEPENDERS configure
-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in
-    BYPRODUCTS ${${PROJECT_NAME}_SOURCE_DIR}/CMakeLists.txt
-    COMMAND ${CMAKE_COMMAND} -E copy  ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${${PROJECT_NAME}_SOURCE_DIR}/CMakeLists.txt
+ExternalProject_Add_Step( ${EXTERN} CMakeLists.txt
+  DEPENDEES patch
+  DEPENDERS configure
+  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in
+  BYPRODUCTS ${SOURCE_DIR}/CMakeLists.txt
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in ${SOURCE_DIR}/CMakeLists.txt
 )
 
 if (WIN32)
   set(CMAKE_SHARED_LIBRARY_SUFFIX .lib)
 endif()
 
-add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
-  $<BUILD_INTERFACE:${${PROJECT_NAME}_INSTALL_DIR}/include>
+add_library(SQLite_sqlite3 INTERFACE)
+target_include_directories(SQLite_sqlite3 SYSTEM INTERFACE
+  $<BUILD_INTERFACE:${INSTALL_DIR}/include>
 )
-target_link_libraries(${PROJECT_NAME} INTERFACE
-  ${${PROJECT_NAME}_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}sqlite3$<$<CONFIG:Debug>:d>${CMAKE_SHARED_LIBRARY_SUFFIX}
+target_link_libraries(SQLite_sqlite3 INTERFACE
+  ${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}sqlite3$<$<CONFIG:Debug>:d>${CMAKE_SHARED_LIBRARY_SUFFIX}
 )
-add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+add_dependencies(SQLite_sqlite3 ${EXTERN})
 
-set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_LIBRARY_DIR ${${PROJECT_NAME}_INSTALL_DIR}/lib)
-set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_RUNTIME_DIR ${${PROJECT_NAME}_INSTALL_DIR}/bin)
+set_target_properties(SQLite_sqlite3 PROPERTIES INTERFACE_LIBRARY_DIR ${INSTALL_DIR}/lib)
+set_target_properties(SQLite_sqlite3 PROPERTIES INTERFACE_RUNTIME_DIR ${INSTALL_DIR}/bin)
 
+add_library(SQLite::sqlite3 ALIAS SQLite_sqlite3)
diff --git a/dhimpl/CMakeLists.txt b/dhimpl/CMakeLists.txt
index a5fe395..d256d5d 100644
--- a/dhimpl/CMakeLists.txt
+++ b/dhimpl/CMakeLists.txt
@@ -28,12 +28,13 @@
 
 target_include_directories(DHImpl
   PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+)
 
 target_link_libraries(DHImpl
-  PUBLIC 
+  PUBLIC
     apache-geode
-    crypto
+    OpenSSL::Crypto
     c++11
   PRIVATE
     _WarningsAsError
diff --git a/sqliteimpl/CMakeLists.txt b/sqliteimpl/CMakeLists.txt
index 4b6e622..976b113 100644
--- a/sqliteimpl/CMakeLists.txt
+++ b/sqliteimpl/CMakeLists.txt
@@ -41,7 +41,7 @@
 target_link_libraries(SqLiteImpl
   PUBLIC
     apache-geode
-    sqlite
+    SQLite::sqlite3
   PRIVATE
     _WarningsAsError
 )
diff --git a/templates/security/CMakeLists.txt b/templates/security/CMakeLists.txt
index df57aa2..b20760e 100644
--- a/templates/security/CMakeLists.txt
+++ b/templates/security/CMakeLists.txt
@@ -25,7 +25,7 @@
 )
 
 set_target_properties(securityImpl PROPERTIES
-	FOLDER cpp/test/integration
+  FOLDER cpp/test/integration
 )
 
 include(GenerateExportHeader)
@@ -33,12 +33,13 @@
 
 target_include_directories(securityImpl
   PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+)
 
 target_link_libraries(securityImpl
   PUBLIC
     apache-geode
-    crypto
+    OpenSSL::Crypto
   PRIVATE
     _WarningsAsError
 )
diff --git a/tests/cpp/fwklib/CMakeLists.txt b/tests/cpp/fwklib/CMakeLists.txt
index 68cddd3..8aeec6a 100644
--- a/tests/cpp/fwklib/CMakeLists.txt
+++ b/tests/cpp/fwklib/CMakeLists.txt
@@ -17,7 +17,7 @@
 project(framework LANGUAGES CXX)
 
 add_library(framework STATIC
-	FwkBB.hpp
+  FwkBB.hpp
   FwkBBClient.cpp
   FwkBBClient.hpp
   FwkBBServer.cpp
@@ -26,25 +26,25 @@
   FwkExport.hpp
   FwkLog.cpp
   FwkLog.hpp
-	FwkStrCvt.cpp
+  FwkStrCvt.cpp
   FwkStrCvt.hpp
   GsRandom.cpp
   GsRandom.hpp
   IpcHandler.cpp
   IpcHandler.hpp
-	Service.cpp
+  Service.cpp
   Service.hpp
-	TcpIpc.cpp
+  TcpIpc.cpp
   TcpIpc.hpp
-	TimeBomb.cpp
+  TimeBomb.cpp
   TimeBomb.hpp
-	UDPIpc.cpp
+  UDPIpc.cpp
   UDPIpc.hpp
 )
 
 set_target_properties(framework PROPERTIES
-	CXX_VISIBILITY_PRESET hidden
-	VISIBILITY_INLINES_HIDDEN ON
+  CXX_VISIBILITY_PRESET hidden
+  VISIBILITY_INLINES_HIDDEN ON
 )
 
 target_compile_options(framework
@@ -58,16 +58,16 @@
     # headers for this library are referenced relative to the parent
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
   PRIVATE
-  	$<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
+    $<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
 )
 
 target_link_libraries(framework
   PUBLIC
     apache-geode
   PRIVATE
-    ACE
-		internal
-	  _WarningsAsError
+    ACE::ACE
+    internal
+    _WarningsAsError
 )
 
 add_clangformat(framework)
diff --git a/tests/cpp/security/CMakeLists.txt b/tests/cpp/security/CMakeLists.txt
index e82b470..ce1b499 100644
--- a/tests/cpp/security/CMakeLists.txt
+++ b/tests/cpp/security/CMakeLists.txt
@@ -27,7 +27,7 @@
   PkcsAuthInit.cpp
   PkcsAuthInit.hpp
   PkcsCredentialGenerator.hpp
-		typedefs.hpp
+  typedefs.hpp
   XmlAuthzCredentialGenerator.hpp
 )
 
@@ -36,20 +36,20 @@
 
 target_include_directories(security
   PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
   PRIVATE
-	$<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
+    $<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
 )
 
 target_link_libraries(security
   PUBLIC
     framework
     testobject
-    crypto
-    ssl
+    OpenSSL::Crypto
+    OpenSSL::SSL
   PRIVATE
-    ACE
-	_WarningsAsError
+    ACE::ACE
+    _WarningsAsError
 )
 
 add_clangformat(security)
diff --git a/tests/cpp/testobject/CMakeLists.txt b/tests/cpp/testobject/CMakeLists.txt
index eddd919..e3e84ab 100644
--- a/tests/cpp/testobject/CMakeLists.txt
+++ b/tests/cpp/testobject/CMakeLists.txt
@@ -16,7 +16,7 @@
 cmake_minimum_required(VERSION 3.10)
 project(testobject LANGUAGES CXX)
 
-add_library(testobject SHARED 
+add_library(testobject SHARED
   ArrayOfByte.hpp
   BatchObject.cpp
   BatchObject.hpp
@@ -73,7 +73,8 @@
 
 target_include_directories(testobject
   PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+)
 
 target_compile_definitions(testobject
   PRIVATE
@@ -89,12 +90,12 @@
 )
 
 target_link_libraries(testobject
-  PUBLIC 
+  PUBLIC
     apache-geode
     framework
   PRIVATE
-    ACE
-	  _WarningsAsError
+    ACE::ACE
+    _WarningsAsError
 )
 
 add_clangformat(testobject)