You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bh...@apache.org on 2020/06/17 19:33:42 UTC

[hbase-native-client] branch master updated: HBASE-24575: Cleanup the build directory structure (#9)

This is an automated email from the ASF dual-hosted git repository.

bharathv pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase-native-client.git


The following commit(s) were added to refs/heads/master by this push:
     new 599ae16  HBASE-24575: Cleanup the build directory structure (#9)
599ae16 is described below

commit 599ae165d48d63a7abbe2f91cdf21666ebc14465
Author: Bharath Vissapragada <bh...@apache.org>
AuthorDate: Wed Jun 17 12:33:37 2020 -0700

    HBASE-24575: Cleanup the build directory structure (#9)
    
    Switches the build layout to the following. Logically groups
    all the build artifacts to make it easy to work with.
    .
    ├── bin
    ├── CMakeCache.txt
    ├── CMakeFiles
    ├── cmake_install.cmake
    ├── CTestTestfile.cmake
    ├── dependencies
    ├── libs
    ├── Makefile
    └── tests
    
    Signed-off-by: Marc Parisi <ph...@apache.org>
---
 CMakeLists.txt                | 153 +++++++++++++++++++++---------------------
 cmake/BuildTests.cmake        |  10 +--
 cmake/DownloadFolly.cmake     |  35 +++++-----
 cmake/DownloadWangle.cmake    |  40 +++++------
 cmake/DownloadZookeeper.cmake |  34 +++++-----
 5 files changed, 132 insertions(+), 140 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3f68567..ef9bbd4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,17 +43,16 @@ option(BUILD_HBASE "Build HBASE_HOME path if it is provided" OFF)
 ## object files. These are defined here as they will be used throughout 
 ## the cmake modules.
 if (WIN32)
-	set(BYPRODUCT_PREFIX "" CACHE STRING "" FORCE)
-	set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
-	set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
-	set(BUILD_ARGS " -GVisual Studio 15 2017")
+  set(BYPRODUCT_PREFIX "" CACHE STRING "" FORCE)
+  set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
+  set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
+  set(BUILD_ARGS " -GVisual Studio 15 2017")
 else()
-	set(BYPRODUCT_PREFIX "lib" CACHE STRING "" FORCE)
-	set(BYPRODUCT_SHARED_SUFFIX ".so" CACHE STRING "" FORCE)
-	set(BYPRODUCT_SUFFIX ".a" CACHE STRING "" FORCE)
+  set(BYPRODUCT_PREFIX "lib" CACHE STRING "" FORCE)
+  set(BYPRODUCT_SHARED_SUFFIX ".so" CACHE STRING "" FORCE)
+  set(BYPRODUCT_SUFFIX ".a" CACHE STRING "" FORCE)
 endif()
 	
-
 ######### Includes
 ## include the Protobuf generation code
 include(ProtobufGen)
@@ -61,32 +60,33 @@ include(DownloadFolly)
 include(DownloadWangle)
 include(DownloadZookeeper)
 
+set(PROJECT_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/dependencies")
+
 if (DOWNLOAD_DEPENDENCIES)
-	
-	## we want to find the system protoc
-	download_project(PROJ Protobuf IS_AUTOGEN GIT_REPOSITORY "https://github.com/protocolbuffers/protobuf.git" GIT_TAG "3.5.1.1")
+  ## we want to find the system protoc
+  download_project(PROJ Protobuf PREFIX "${PROJECT_PREFIX}" IS_AUTOGEN GIT_REPOSITORY "https://github.com/protocolbuffers/protobuf.git" GIT_TAG "3.5.1.1")
 	  			 
-	set(PROTOBUF_DIR "${Protobuf_BINARY_DIR}" CACHE STRING "" FORCE)
+  set(PROTOBUF_DIR "${Protobuf_BINARY_DIR}" CACHE STRING "" FORCE)
 	
-	add_library(Protobuf STATIC IMPORTED)
-	set_target_properties(Protobuf PROPERTIES IMPORTED_LOCATION "${Protobuf_BINARY_DIR}/lib/libprotobuf.a" )
-	set(PROTOBUF_LIBS "${Protobuf_BINARY_DIR}/lib/libprotobuf.a" "${Protobuf_BINARY_DIR}/lib/libprotoc.a" CACHE STRING "" FORCE)
-	set(PROTOBUF_INCLUDE_DIRS "${Protobuf_BINARY_DIR}/include" CACHE STRING "" FORCE)
-	add_dependencies(Protobuf Protobuf-download)
-	set(PROTOBUF_FOUND TRUE CACHE STRING "" FORCE)
+  add_library(Protobuf STATIC IMPORTED)
+  set_target_properties(Protobuf PROPERTIES IMPORTED_LOCATION "${Protobuf_BINARY_DIR}/lib/libprotobuf.a" )
+  set(PROTOBUF_LIBS "${Protobuf_BINARY_DIR}/lib/libprotobuf.a" "${Protobuf_BINARY_DIR}/lib/libprotoc.a" CACHE STRING "" FORCE)
+  set(PROTOBUF_INCLUDE_DIRS "${Protobuf_BINARY_DIR}/include" CACHE STRING "" FORCE)
+  add_dependencies(Protobuf "${PROJECT_PREFIX}/Protobuf-download")
+  set(PROTOBUF_FOUND TRUE CACHE STRING "" FORCE)
 	
-	set(PROTOBUF_PROTOC_EXECUTABLE "${Protobuf_BINARY_DIR}/bin/protoc" CACHE STRING "" FORCE)
-	## Add CMAKE_MODULE_PATHS
+  set(PROTOBUF_PROTOC_EXECUTABLE "${Protobuf_BINARY_DIR}/bin/protoc" CACHE STRING "" FORCE)
+  ## Add CMAKE_MODULE_PATHS
 	
-	list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/zookeeper/local")
-	list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/protobuf/local")
-	list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/folly/local")
-	list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/wangle/local")
+  list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/zookeeper/local")
+  list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/protobuf/local")
+  list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/folly/local")
+  list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/wangle/local")
 
 else()
-	list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/zookeeper/system")
-	list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/folly/system")
-	list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/wangle/system")
+  list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/zookeeper/system")
+  list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/folly/system")
+  list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/wangle/system")
 endif(DOWNLOAD_DEPENDENCIES)
 
 ## Build Apache HBase components that are necessary for this project
@@ -95,24 +95,24 @@ find_package(Java REQUIRED)
 find_package(Maven REQUIRED)
 
 if( NOT HBASE_HOME )
-	if (DOWNLOAD_DEPENDENCIES)
-		## Download Apache HBase, and build hbase-common so that we can have a targeted build of version.h
-		download_project(PROJ apachehbase  IS_MAVEN GIT_REPOSITORY "https://github.com/apache/hbase.git" GIT_TAG "${HBASE_TARGET_TAG}")
-		set(JAVA_HBASE_DIR "${CMAKE_CURRENT_BINARY_DIR}/apachehbase-src/")
-	else()
-		message(FATAL_ERROR "HBASE_HOME must be defined if local dependencies aren't built")
-	endif()
+  if (DOWNLOAD_DEPENDENCIES)
+    ## Download Apache HBase, and build hbase-common so that we can have a targeted build of version.h
+    download_project(PROJ apache-hbase PREFIX "${PROJECT_PREFIX}" IS_MAVEN GIT_REPOSITORY "https://github.com/apache/hbase.git" GIT_TAG "${HBASE_TARGET_TAG}")
+    set(JAVA_HBASE_DIR "${PROJECT_PREFIX}/apache-hbase-src/")
+  else()
+    message(FATAL_ERROR "HBASE_HOME must be defined if local dependencies aren't built")
+  endif()
 else()
-	if (BUILD_HBASE)
-		message(STATUS "Building HBase in ${HBASE_HOME}")
-		execute_maven(${HBASE_HOME} mvn_output mvn_result)
-		if(NOT "${mvn_result}" STREQUAL "0")
-			message(FATAL_ERROR "Failed to build HBase. Please provide a valid path with HBASE_HOME")
-		endif()
-	else()
-		message(STATUS "Using supplied HBase path ${HBASE_HOME}")
-	endif()
-	set(JAVA_HBASE_DIR "${HBASE_HOME}")
+if (BUILD_HBASE)
+  message(STATUS "Building HBase in ${HBASE_HOME}")
+  execute_maven(${HBASE_HOME} mvn_output mvn_result)
+  if(NOT "${mvn_result}" STREQUAL "0")
+    message(FATAL_ERROR "Failed to build HBase. Please provide a valid path with HBASE_HOME")
+  endif()
+  else()
+    message(STATUS "Using supplied HBase path ${HBASE_HOME}")
+  endif()
+  set(JAVA_HBASE_DIR "${HBASE_HOME}")
 endif()
 
 include_directories("${JAVA_HBASE_DIR}/hbase-common/target/generated-sources/native/")
@@ -124,15 +124,14 @@ set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_CXX_EXTENSIONS OFF)
 
-
 CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
 CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
 if(COMPILER_SUPPORTS_CXX14)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
 elseif(COMPILER_SUPPORTS_CXX0X)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
 else()
- message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no c++14 support. Please use a different C++ compiler.")
+  message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no c++14 support. Please use a different C++ compiler.")
 endif()
 
 set(HBASE_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/hbase")
@@ -140,24 +139,24 @@ set(HBASE_PROTO_GEN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/hbase/if")
 set(HBASE_PROTO_GEN_INC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/hbase/if")
 # Set the right openssl root path
 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-    set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl/")
+  set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl/")
 else()
-    set(OPENSSL_ROOT_DIR "/usr/lib/x86_64-linux-gnu")
+  set(OPENSSL_ROOT_DIR "/usr/lib/x86_64-linux-gnu")
 endif()
 # Include OpenSSL
 find_package (OpenSSL REQUIRED)
 if (OPENSSL_FOUND)
-    include_directories(${OPENSSL_INCLUDE_DIR})
+  include_directories(${OPENSSL_INCLUDE_DIR})
 else ()
-    message( FATAL_ERROR "OpenSSL was not found. Please install OpenSSL" )
+  message( FATAL_ERROR "OpenSSL was not found. Please install OpenSSL" )
 endif (OPENSSL_FOUND)
 ## Download Facebook Folly and build locally
 
 
 if (DOWNLOAD_DEPENDENCIES)
-	download_folly(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
-	download_wangle(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
-	download_zookeeper(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+  download_folly(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+  download_wangle(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+  download_zookeeper(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
 endif(DOWNLOAD_DEPENDENCIES)
 
 # ensure we have required dependencies
@@ -186,10 +185,10 @@ if (NOT WANGLE_FOUND)
  message(FATAL_ERROR "-- Wangle not found")
 endif()
 if (NOT PROTOBUF_FOUND)
-	message(FATAL_ERROR "-- Protocol buffer include directory not found ${PROTOBUF_INCLUDE_DIRS}")
+  message(FATAL_ERROR "-- Protocol buffer include directory not found ${PROTOBUF_INCLUDE_DIRS}")
 endif()
 if (NOT JNI_FOUND)
-        message(FATAL_ERROR "-- JAVA include directory not found")
+  message(FATAL_ERROR "-- JAVA include directory not found")
 endif()
 ### provide the include directories, starting at the base
 ### and including those from our
@@ -236,13 +235,14 @@ include_directories(${PROTO_HEADER_DIR})
 add_library(hbaseclient-static STATIC ${PROTO_SOURCES} ${CLIENT_SRC} ${CONNECTION_SRC} ${EXCEPTION_SRC} ${PROTO_SRC} ${SECURITY_SRC} ${SRDE_SRC} ${UTILS_SRC})
 set_target_properties(hbaseclient-static PROPERTIES LINKER_LANGUAGE CXX)
 SET_TARGET_PROPERTIES(hbaseclient-static PROPERTIES OUTPUT_NAME hbaseclient CLEAN_DIRECT_OUTPUT 1)
+set_target_properties(hbaseclient-static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libs")
 target_link_libraries(hbaseclient-static ${Boost_LIBRARIES})
 target_link_libraries(hbaseclient-static ${SASL_LIBS})
 target_link_libraries(hbaseclient-static ${GFLAGS_SHARED_LIB})
 target_link_libraries(hbaseclient-static ${KRB5_LIBRARIES})
 target_link_libraries(hbaseclient-static ${WANGLE_LIBRARIES})
 if (DOWNLOAD_DEPENDENCIES)
-	target_link_libraries(hbaseclient-static ${sodium_LIBRARY_RELEASE})
+  target_link_libraries(hbaseclient-static ${sodium_LIBRARY_RELEASE})
 endif(DOWNLOAD_DEPENDENCIES)
 target_link_libraries(hbaseclient-static ${FOLLY_LIBRARIES})
 target_link_libraries(hbaseclient-static ${GLOG_SHARED_LIB})
@@ -257,11 +257,12 @@ add_library(hbaseclient-shared SHARED ${PROTO_SOURCES} ${CLIENT_SRC} ${CONNECTIO
 set_target_properties(hbaseclient-shared PROPERTIES LINKER_LANGUAGE CXX)
 SET_TARGET_PROPERTIES(hbaseclient-shared PROPERTIES COMPILE_FLAGS " -fPIC")
 SET_TARGET_PROPERTIES(hbaseclient-shared PROPERTIES OUTPUT_NAME hbaseclient CLEAN_DIRECT_OUTPUT 1)
+set_target_properties(hbaseclient-shared PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libs")
 target_link_libraries(hbaseclient-shared ${PROTOBUF_LIBRARY})
 target_link_libraries(hbaseclient-shared ${Boost_LIBRARIES})
 target_link_libraries(hbaseclient-shared ${WANGLE_LIBRARIES})
 if (DOWNLOAD_DEPENDENCIES)
-	target_link_libraries(hbaseclient-shared ${sodium_LIBRARY_RELEASE})
+  target_link_libraries(hbaseclient-shared ${sodium_LIBRARY_RELEASE})
 endif(DOWNLOAD_DEPENDENCIES)
 target_link_libraries(hbaseclient-shared ${FOLLY_LIBRARIES})
 target_link_libraries(hbaseclient-shared ${SASL_LIBS})
@@ -274,7 +275,8 @@ target_link_libraries(hbaseclient-shared ${ZOOKEEPER_LIBRARIES})
 target_link_libraries(hbaseclient-shared ${DOUBLE_CONVERSION_LIBRARY})
 target_link_libraries(hbaseclient-shared ${CMAKE_DL_LIBS})
 add_executable(simple-client "${HBASE_SRC_DIR}/examples/simple-client.cc")
-SET_TARGET_PROPERTIES(simple-client PROPERTIES COMPILE_FLAGS "  ")
+set_target_properties(simple-client PROPERTIES COMPILE_FLAGS "  ")
+set_target_properties(simple-client PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin/examples")
 target_link_libraries(simple-client ${PROTOBUF_LIBRARY})
 target_link_libraries(simple-client ${Boost_LIBRARIES})
 target_link_libraries(simple-client ${SASL_LIBS})
@@ -283,7 +285,8 @@ target_link_libraries(simple-client ${KRB5_LIBRARIES})
 target_link_libraries(simple-client ${ZOOKEEPER_LIBRARIES})
 target_link_libraries(simple-client hbaseclient-static ${CMAKE_THREAD_LIBS_INIT})
 add_executable(load-client "${HBASE_SRC_DIR}/examples/load-client.cc")
-SET_TARGET_PROPERTIES(load-client PROPERTIES COMPILE_FLAGS "  ")
+set_target_properties(load-client PROPERTIES COMPILE_FLAGS "  ")
+set_target_properties(load-client PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin/examples")
 target_link_libraries(load-client ${PROTOBUF_LIBRARY})
 target_link_libraries(load-client ${Boost_LIBRARIES})
 target_link_libraries(load-client ${SASL_LIBS})
@@ -292,11 +295,11 @@ target_link_libraries(load-client ${KRB5_LIBRARIES})
 target_link_libraries(load-client ${ZOOKEEPER_LIBRARIES})
 target_link_libraries(load-client hbaseclient-static ${CMAKE_THREAD_LIBS_INIT})
 if (JNI_FOUND)
-    message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
-    message (STATUS "JNI_LIBRARIES=${JNI_LIBRARIES}")
+  message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
+  message (STATUS "JNI_LIBRARIES=${JNI_LIBRARIES}")
 endif()
 if (NOT SKIP_TESTS)
-	include(BuildTests)
+  include(BuildTests)
 endif()
 ## Create a custom target for our linter
 add_custom_target(
@@ -304,19 +307,15 @@ add_custom_target(
     COMMAND ${CMAKE_SOURCE_DIR}/bin/cpplint.sh)
 
 if (DOWNLOAD_DEPENDENCIES)
-	add_dependencies(hbaseclient-static Protobuf)
-	add_dependencies(hbaseclient-shared Protobuf)
-
-	add_dependencies(facebook-wangle-proj facebook-folly-proj)
-	add_dependencies(hbaseclient-static facebook-wangle-proj)
-	add_dependencies(hbaseclient-shared facebook-wangle-proj)
-
-	add_dependencies(hbaseclient-static zookeeper)
-	add_dependencies(hbaseclient-shared zookeeper)
+  add_dependencies(hbaseclient-static Protobuf)
+  add_dependencies(hbaseclient-shared Protobuf)
+  add_dependencies(facebook-wangle-proj facebook-folly-proj)
+  add_dependencies(hbaseclient-static facebook-wangle-proj)
+  add_dependencies(hbaseclient-shared facebook-wangle-proj)
+  add_dependencies(hbaseclient-static zookeeper)
+  add_dependencies(hbaseclient-shared zookeeper)
 endif(DOWNLOAD_DEPENDENCIES)
 
-
-
 # Install library headers
 include(GNUInstallDirs)
 file(GLOB RECURSE HEADERS include/*.h)
@@ -331,12 +330,12 @@ install(TARGETS hbaseclient-shared
     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
     PUBLIC_HEADER DESTINATION include/
     COMPONENT LIBRARY )
-INSTALL (
+install(
     DIRECTORY ${CMAKE_SOURCE_DIR}/include/
     DESTINATION include/
     FILES_MATCHING PATTERN "*.h*")
 # Install pb-generated headers too
-INSTALL (
+install(
     DIRECTORY "${CMAKE_BINARY_DIR_GEN}"
     DESTINATION include/hbase/if
     FILES_MATCHING PATTERN "hbase/if/*.h")
diff --git a/cmake/BuildTests.cmake b/cmake/BuildTests.cmake
index 0b56818..e7b4243 100644
--- a/cmake/BuildTests.cmake
+++ b/cmake/BuildTests.cmake
@@ -28,6 +28,7 @@ MACRO(GETSOURCEFILES result curdir)
 ENDMACRO()
 find_package(GMock REQUIRED)
 add_library(testutil STATIC ${TEST_UTIL})
+set_target_properties(testutil PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libs")
 target_include_directories(testutil PRIVATE BEFORE "include")
 target_include_directories(testutil PRIVATE BEFORE "${Java_INCLUDE_DIRS}")
 target_include_directories(testutil PRIVATE BEFORE "${JNI_INCLUDE_DIRS}")
@@ -69,10 +70,11 @@ SET(TEST_DIR ${CMAKE_SOURCE_DIR}/src/test)
 GETSOURCEFILES(UNIT_TESTS "${TEST_DIR}")
 SET(UNIT_TEST_COUNT 0)
 FOREACH(testfile ${UNIT_TESTS})
-	get_filename_component(testfilename "${testfile}" NAME_WE)
-	add_executable("${testfilename}" "${TEST_DIR}/${testfile}")
-	createTests("${testfilename}")
+  get_filename_component(testfilename "${testfile}" NAME_WE)
+  add_executable("${testfilename}" "${TEST_DIR}/${testfile}")
+  set_target_properties("${testfilename}" PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tests")
+  createTests("${testfilename}")
   MATH(EXPR UNIT_TEST_COUNT "${UNIT_TEST_COUNT}+1")
-	add_test(NAME "${testfilename}" COMMAND "${testfilename}" WORKING_DIRECTORY ${TEST_DIR})
+  add_test(NAME "${testfilename}" COMMAND "${testfilename}" WORKING_DIRECTORY ${TEST_DIR})
 ENDFOREACH()
 message("-- Finished building ${UNIT_TEST_COUNT} unit test file(s)...")
diff --git a/cmake/DownloadFolly.cmake b/cmake/DownloadFolly.cmake
index 2b43a8e..16f479b 100644
--- a/cmake/DownloadFolly.cmake
+++ b/cmake/DownloadFolly.cmake
@@ -20,23 +20,18 @@
 ## BUILD_DIR is the build directory, typically 'build'
 
 function(download_folly SOURCE_DIR BUILD_DIR)
-
-	
-	ExternalProject_Add(
-		facebook-folly-proj
-		URL "https://github.com/facebook/folly/archive/v2017.09.04.00.tar.gz"
-		#GIT_REPOSITORY "https://github.com/facebook/folly.git"
-		#GIT_TAG "v2017.09.04.00"
-		SOURCE_DIR "${BUILD_DIR}/dependencies/facebook-folly-proj-src"
-		BINARY_DIR ${BUILD_DIR}/dependencies/facebook-folly-proj-src/folly
-		CONFIGURE_COMMAND autoreconf -ivf
-			COMMAND ./configure  --prefix=${BUILD_DIR}/dependencies/facebook-folly-proj-install
-			"CFLAGS=-fPIC -lboost_context -lboost_coroutine -ldl" ## this version of folly does not support cmake so we must pass args manually
-  			"CXXFLAGS=${CMAKE_CXX_FLAGS} -fPIC -lboost_context -lboost_coroutine -ldl" ## this version of folly does not support cmake so we must pass args manually
-		UPDATE_COMMAND ""
-		)
-
-
-	set(FOLLY_ROOT_DIR "${BUILD_DIR}/dependencies/facebook-folly-proj-install" CACHE STRING "" FORCE)
-	
-endfunction(download_folly) 
\ No newline at end of file
+  ExternalProject_Add(
+      facebook-folly-proj
+      # TODO: Source version information from cmake file.
+      URL "https://github.com/facebook/folly/archive/v2017.09.04.00.tar.gz"
+      PREFIX "${BUILD_DIR}/dependencies"
+      SOURCE_DIR "${BUILD_DIR}/dependencies/facebook-folly-proj-src"
+      BINARY_DIR ${BUILD_DIR}/dependencies/facebook-folly-proj-src/folly
+      CONFIGURE_COMMAND autoreconf -ivf
+      COMMAND ./configure  --prefix=${BUILD_DIR}/dependencies/facebook-folly-proj-install
+          "CFLAGS=-fPIC -lboost_context -lboost_coroutine -ldl" ## this version of folly does not support cmake so we must pass args manually
+  	   "CXXFLAGS=${CMAKE_CXX_FLAGS} -fPIC -lboost_context -lboost_coroutine -ldl" ## this version of folly does not support cmake so we must pass args manually
+      UPDATE_COMMAND ""
+  )
+  set(FOLLY_ROOT_DIR "${BUILD_DIR}/dependencies/facebook-folly-proj-install" CACHE STRING "" FORCE)
+endfunction(download_folly) 
diff --git a/cmake/DownloadWangle.cmake b/cmake/DownloadWangle.cmake
index 679d9d6..1bfff5f 100644
--- a/cmake/DownloadWangle.cmake
+++ b/cmake/DownloadWangle.cmake
@@ -20,24 +20,24 @@
 ## BINARY_DIR is the build directory, typically 'build'
 
 function(download_wangle SOURCE_DIR BUILD_DIR)
-
-	if (DOWNLOAD_DEPENDENCIES)
-		SET (PATCH_FOLLY ${CMAKE_COMMAND} -E copy
-      		"${CMAKE_CURRENT_SOURCE_DIR}/cmake/folly/local/FindFolly.cmake" ${BUILD_DIR}/facebook-wangle-proj-prefix/src/facebook-wangle-proj/wangle/cmake )
-	else()
-		SET (PATCH_FOLLY "")
-	endif() 
-	
-	ExternalProject_Add(
-		facebook-wangle-proj
-		URL "https://github.com/facebook/wangle/archive/v2017.09.04.00.tar.gz"
-		PATCH_COMMAND ${PATCH_FOLLY}
-		INSTALL_DIR "${BUILD_DIR}/dependencies/facebook-wangle-proj-install"
-		 CONFIGURE_COMMAND ${CMAKE_COMMAND} -DBUILD_EXAMPLES=OFF -DCMAKE_CROSSCOMPILING=ON -DBUILD_TESTS=OFF -DFOLLY_ROOT_DIR=${FOLLY_ROOT_DIR} -DCMAKE_INSTALL_PREFIX:PATH=${BUILD_DIR}/dependencies/facebook-wangle-proj-install
-        	${BUILD_DIR}/facebook-wangle-proj-prefix/src/facebook-wangle-proj/wangle # Tell CMake to use subdirectory as source.
-		)
-
-
-	set(WANGLE_ROOT_DIR "${BUILD_DIR}/dependencies/facebook-wangle-proj-install" CACHE STRING "" FORCE)
+  set(WANGLE_DOWNLOAD_DIR "${BUILD_DIR}/dependencies/facebook-wangle-proj-download")
+  set(WANGLE_SOURCE_DIR "${BUILD_DIR}/dependencies/facebook-wangle-proj-src")
+  set(WANGLE_INSTALL_DIR "${BUILD_DIR}/dependencies/facebook-wangle-proj-install")
+  if (DOWNLOAD_DEPENDENCIES)
+    set(PATCH_FOLLY ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/cmake/folly/local/FindFolly.cmake" "${WANGLE_SOURCE_DIR}/wangle/cmake")
+  else()
+    set(PATCH_FOLLY "")
+  endif() 
 	
-endfunction(download_wangle) 
\ No newline at end of file
+  ExternalProject_Add(
+     facebook-wangle-proj
+     URL "https://github.com/facebook/wangle/archive/v2017.09.04.00.tar.gz"
+     PREFIX "${BUILD_DIR}/dependencies"
+     DOWNLOAD_DIR ${WANGLE_DOWNLOAD_DIR}
+     SOURCE_DIR ${WANGLE_SOURCE_DIR}
+     PATCH_COMMAND ${PATCH_FOLLY}
+     INSTALL_DIR ${WANGLE_INSTALL_DIR}
+     CONFIGURE_COMMAND ${CMAKE_COMMAND} -DBUILD_EXAMPLES=OFF -DCMAKE_CROSSCOMPILING=ON -DBUILD_TESTS=OFF -DFOLLY_ROOT_DIR=${FOLLY_ROOT_DIR} -DCMAKE_INSTALL_PREFIX:PATH=${WANGLE_INSTALL_DIR} "${WANGLE_SOURCE_DIR}/wangle" # Tell CMake to use subdirectory as source.
+  )
+  set(WANGLE_ROOT_DIR ${WANGLE_INSTALL_DIR} CACHE STRING "" FORCE)
+endfunction(download_wangle) 
diff --git a/cmake/DownloadZookeeper.cmake b/cmake/DownloadZookeeper.cmake
index 962aee4..88778fb 100644
--- a/cmake/DownloadZookeeper.cmake
+++ b/cmake/DownloadZookeeper.cmake
@@ -22,22 +22,18 @@
 #################### ZOOKEEPER
 
 function(download_zookeeper SOURCE_DIR BUILD_DIR)
-
-	ExternalProject_Add(
-	  ZooKeeper
-	  URL "https://archive.apache.org/dist/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz"
-	  SOURCE_DIR "${BUILD_DIR}/dependencies/zookeeper-src"
-	  BINARY_DIR ${BUILD_DIR}/dependencies/zookeeper-src/src/c/
-	  CONFIGURE_COMMAND ./configure --without-cppunit --prefix=${BUILD_DIR}/dependencies/zookeeper-install
-	  PATCH_COMMAND patch ${BUILD_DIR}/dependencies/zookeeper-src/src/c/src/zookeeper.c ${CMAKE_CURRENT_SOURCE_DIR}/cmake/patches/zookeeper.3.4.x.buf
-	  UPDATE_COMMAND ""
-	)
-	
-	add_library(zookeeper STATIC IMPORTED)
-	set_target_properties(zookeeper PROPERTIES IMPORTED_LOCATION "${BUILD_DIR}/dependencies/zookeeper-install/lib/libzookeeper_mt.a")
-	add_dependencies(zookeeper ZooKeeper)
-	
-	set(ZOOKEEPER_DIR "${BUILD_DIR}/dependencies/zookeeper-install/" CACHE STRING "" FORCE)
-	
-		
-endfunction(download_zookeeper)
\ No newline at end of file
+  ExternalProject_Add(
+      ZooKeeper
+      URL "https://archive.apache.org/dist/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz"
+      PREFIX "${BUILD_DIR}/dependencies"
+      SOURCE_DIR "${BUILD_DIR}/dependencies/zookeeper-src"
+      BINARY_DIR ${BUILD_DIR}/dependencies/zookeeper-src/src/c/
+      CONFIGURE_COMMAND ./configure --without-cppunit --prefix=${BUILD_DIR}/dependencies/zookeeper-install
+      PATCH_COMMAND patch ${BUILD_DIR}/dependencies/zookeeper-src/src/c/src/zookeeper.c ${CMAKE_CURRENT_SOURCE_DIR}/cmake/patches/zookeeper.3.4.x.buf
+      UPDATE_COMMAND ""
+  )
+  add_library(zookeeper STATIC IMPORTED)
+  set_target_properties(zookeeper PROPERTIES IMPORTED_LOCATION "${BUILD_DIR}/dependencies/zookeeper-install/lib/libzookeeper_mt.a")
+  add_dependencies(zookeeper ZooKeeper)
+  set(ZOOKEEPER_DIR "${BUILD_DIR}/dependencies/zookeeper-install/" CACHE STRING "" FORCE)
+endfunction(download_zookeeper)