bharathv commented on a change in pull request #3:
URL: https://github.com/apache/hbase-native-client/pull/3#discussion_r436221065



##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+

Review comment:
       nit: extraneous new lines.

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)

Review comment:
       Also, it looks like this is all or nothing, meaning it either downloads 
everything or downloads nothing. I think a nice follow up would be to have 
overrides on a package basis (for future :-)).

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+
+
+
+######### Includes
+
+       
+if (WIN32)
+       set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_PREFIX "" 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)
+endif()
+       
+
+
 ## include the Protobuf generation code
 include(ProtobufGen)
+include(DownloadFolly)
+include(DownloadWangle)
+include(DownloadZookeeper)
+
+if (BUILD_LOCAL_DEPENDENCIES)
+       ## we want to find the system protoc
+       download_project(PROJ Protobuf
+                                IS_AUTOGEN

Review comment:
       nit: indentation off, we use 2/4 style usually. 2 for subsections and 4 
for continuation indents..

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)

Review comment:
       I think we can get rid of this. If HBASE_HOME is set, I think we can 
pick everything up from there, otherwise set HBASE_HOME is set to the 
downloaded tag?

##########
File path: CMakeLists.txt
##########
@@ -50,10 +143,23 @@ if (OPENSSL_FOUND)
 else ()
     message( FATAL_ERROR "OpenSSL was not found. Please install OpenSSL" )
 endif (OPENSSL_FOUND)
+## Download Facebook Folly and build locally
+
+
+if (BUILD_LOCAL_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})
+endif(BUILD_LOCAL_DEPENDENCIES)
+
 # ensure we have required dependencies
 find_package(Threads)
-find_package(Boost REQUIRED COMPONENTS thread system filesystem)
+find_package(Boost REQUIRED COMPONENTS context thread system filesystem regex)
+find_package(LibEvent REQUIRED)
 find_package(Gflags REQUIRED)
+if (BUILD_LOCAL_DEPENDENCIES)
+       find_package(Sodium REQUIRED)

Review comment:
       not sure I followed this, we need it irrespective of whether the 
dependencies are downloaded right? (for folly)

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+
+
+
+######### Includes
+
+       
+if (WIN32)
+       set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_PREFIX "" 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)
+endif()
+       
+
+
 ## include the Protobuf generation code
 include(ProtobufGen)
+include(DownloadFolly)
+include(DownloadWangle)
+include(DownloadZookeeper)
+
+if (BUILD_LOCAL_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")

Review comment:
       nit: Move versions/git repos to global variables? (just like HBASE stuff)

##########
File path: cmake/patches/zookeeper.3.4.x.cli
##########
@@ -0,0 +1,4 @@
+559c559

Review comment:
       Is this used anywhere? Doesn't look like it..

##########
File path: CMakeLists.txt
##########
@@ -109,37 +217,51 @@ generate_protobuf_src(PROTO_SOURCES PROTO_HEADERS  
${PROTO_FILES})
 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)
-target_link_libraries(hbaseclient-static ${PROTOBUF_LIBRARY})
-target_link_libraries(hbaseclient-static ${FOLLY_LIBRARIES})
 target_link_libraries(hbaseclient-static ${Boost_LIBRARIES})
 target_link_libraries(hbaseclient-static ${SASL_LIBS})
-target_link_libraries(hbaseclient-static ${GLOG_SHARED_LIB})
 target_link_libraries(hbaseclient-static ${GFLAGS_SHARED_LIB})
 target_link_libraries(hbaseclient-static ${KRB5_LIBRARIES})
 target_link_libraries(hbaseclient-static ${WANGLE_LIBRARIES})
-target_link_libraries(hbaseclient-static ${Zookeeper_LIBRARIES})
+if (BUILD_LOCAL_DEPENDENCIES)
+       target_link_libraries(hbaseclient-static ${sodium_LIBRARY_RELEASE})

Review comment:
       nit: same question as above

##########
File path: cmake/patches/fizz.v2020.05.18.00.cmake
##########
@@ -0,0 +1,18 @@
+36c36

Review comment:
       unused?

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)

Review comment:
       nit: call it DOWNLOAD_DEPENDENCIES? Current naming gives an impression 
that it is building already  local dependencies somewhere.

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+
+
+
+######### Includes
+
+       
+if (WIN32)
+       set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)

Review comment:
       nit: I think these are wangle stuff? Prefix accordingly to be more 
readable? Also, quick comment would be nice..

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+
+
+
+######### Includes
+
+       
+if (WIN32)
+       set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_PREFIX "" 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)
+endif()
+       
+
+
 ## include the Protobuf generation code
 include(ProtobufGen)
+include(DownloadFolly)
+include(DownloadWangle)
+include(DownloadZookeeper)
+
+if (BUILD_LOCAL_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")
+                                
+       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)
+       
+       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")
+
+       ## Build Apache HBase components that are necessary for this project
+
+       if( BUILD_HBASE )
+               ## Download Apache HBase, and build hbase-common so that we can 
have a targeted build of version.h
+               download_project(PROJ apachehbase
+                       IS_MAVEN
+                       MAVEN_DIR "hbase-common"
+                       GIT_REPOSITORY "https://github.com/apache/hbase.git";
+                       GIT_TAG "${HBASE_TARGET_TAG}")
+
+               
include_directories("${CMAKE_CURRENT_BINARY_DIR}/apachehbase-src/hbase-common/target/generated-sources/native/")
+       endif(BUILD_HBASE)
+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")
+endif(BUILD_LOCAL_DEPENDENCIES)
+
+############
+## Validate that we have C++ 14 support
+############
+
+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")
+elseif(COMPILER_SUPPORTS_CXX0X)

Review comment:
       Does this mean we are supporting supporting earlier versions?

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+
+
+
+######### Includes
+
+       
+if (WIN32)
+       set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_PREFIX "" 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)
+endif()
+       
+
+
 ## include the Protobuf generation code
 include(ProtobufGen)
+include(DownloadFolly)
+include(DownloadWangle)
+include(DownloadZookeeper)
+
+if (BUILD_LOCAL_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")
+                                
+       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)
+       
+       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")
+
+       ## Build Apache HBase components that are necessary for this project
+
+       if( BUILD_HBASE )
+               ## Download Apache HBase, and build hbase-common so that we can 
have a targeted build of version.h
+               download_project(PROJ apachehbase
+                       IS_MAVEN
+                       MAVEN_DIR "hbase-common"
+                       GIT_REPOSITORY "https://github.com/apache/hbase.git";
+                       GIT_TAG "${HBASE_TARGET_TAG}")
+
+               
include_directories("${CMAKE_CURRENT_BINARY_DIR}/apachehbase-src/hbase-common/target/generated-sources/native/")
+       endif(BUILD_HBASE)
+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")
+endif(BUILD_LOCAL_DEPENDENCIES)
+
+############
+## Validate that we have C++ 14 support
+############
+
+set(CMAKE_CXX_STANDARD 14)

Review comment:
       Move this before doing anything else?

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+
+
+
+######### Includes
+
+       
+if (WIN32)
+       set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_PREFIX "" 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)
+endif()
+       
+
+
 ## include the Protobuf generation code
 include(ProtobufGen)
+include(DownloadFolly)
+include(DownloadWangle)
+include(DownloadZookeeper)
+
+if (BUILD_LOCAL_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")
+                                
+       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)
+       
+       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")
+
+       ## Build Apache HBase components that are necessary for this project
+
+       if( BUILD_HBASE )

Review comment:
       IMO, this shouldn't be nested inside BUILD_LOCAL_DEPENDENCIES. General 
usecase is to keep the regular dependencies static (folly..etc) but change 
versions of HBase we are building with (for example for newer releases). 
Thoughts?

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")

Review comment:
       nit: use a human readable tag? 

##########
File path: CMakeLists.txt
##########
@@ -50,10 +143,23 @@ if (OPENSSL_FOUND)
 else ()
     message( FATAL_ERROR "OpenSSL was not found. Please install OpenSSL" )
 endif (OPENSSL_FOUND)
+## Download Facebook Folly and build locally
+
+

Review comment:
       nit: extraneous new lines...

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+
+
+
+######### Includes
+
+       
+if (WIN32)
+       set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_PREFIX "" 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)
+endif()
+       
+
+
 ## include the Protobuf generation code
 include(ProtobufGen)
+include(DownloadFolly)
+include(DownloadWangle)
+include(DownloadZookeeper)
+
+if (BUILD_LOCAL_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")
+                                
+       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)
+       
+       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")
+
+       ## Build Apache HBase components that are necessary for this project
+
+       if( BUILD_HBASE )
+               ## Download Apache HBase, and build hbase-common so that we can 
have a targeted build of version.h
+               download_project(PROJ apachehbase
+                       IS_MAVEN
+                       MAVEN_DIR "hbase-common"
+                       GIT_REPOSITORY "https://github.com/apache/hbase.git";
+                       GIT_TAG "${HBASE_TARGET_TAG}")
+
+               
include_directories("${CMAKE_CURRENT_BINARY_DIR}/apachehbase-src/hbase-common/target/generated-sources/native/")
+       endif(BUILD_HBASE)
+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")
+endif(BUILD_LOCAL_DEPENDENCIES)
+
+############
+## Validate that we have C++ 14 support
+############
+
+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")
+elseif(COMPILER_SUPPORTS_CXX0X)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
 else()
-    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. 
Please use a different C++ compiler.")
+ message(FATAL "The compiler ${CMAKE_CXX_COMPILER} has no c++14 support. 
Please use a different C++ compiler.")
 endif()
-set(CMAKE_CXX_STANDARD 14)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+if (BUILD_HBASE)
+       find_package(Java REQUIRED)
+       find_package(Maven REQUIRED)
+endif(BUILD_HBASE)
+
+
 set(HBASE_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/hbase")

Review comment:
       This should be inferred from the downloaded hbase git tag right? (unless 
it is overriden).. I'm running into this..
   
   ```
   CMake Error at cmake/ProtobufGen.cmake:22 (message):
     Error: generate_protobuf_src() called without any proto files
   Call Stack (most recent call first):
     CMakeLists.txt:215 (generate_protobuf_src)
   
   ```
   Essentially this should be from the downloaded path IIUC...

##########
File path: CMakeLists.txt
##########
@@ -162,12 +284,29 @@ add_custom_target(
     linter
     COMMAND ${CMAKE_SOURCE_DIR}/bin/cpplint.sh)
 # Copy the version.h file in before doing anything
-add_custom_target (
-       copy_version_h
-        COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin/copy-version.sh"
-)
-add_dependencies(hbaseclient-static copy_version_h)
-add_dependencies(hbaseclient-shared copy_version_h)
+if (NOT BUILD_HBASE)
+       add_custom_target (
+               copy_version_h
+               COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin/copy-version.sh"
+       )
+       
+       add_dependencies(hbaseclient-static copy_version_h)
+       add_dependencies(hbaseclient-shared copy_version_h)
+
+endif(NOT BUILD_HBASE)

Review comment:
       This fails if BUILD_HBASE is false right? (we don't add version.h 
includes)... I think the code should be structured like this..
   
   set HBASE_SRC_DIR if it is already set by user or set it to the downloaded 
path in the beginning of the script
   Rest of the script shouldn't care about BUILD_HBASE ... they should add 
dependencies from the set HBASE_SRC_DIR path...

##########
File path: CMakeLists.txt
##########
@@ -162,12 +284,29 @@ add_custom_target(
     linter
     COMMAND ${CMAKE_SOURCE_DIR}/bin/cpplint.sh)
 # Copy the version.h file in before doing anything
-add_custom_target (
-       copy_version_h
-        COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin/copy-version.sh"
-)
-add_dependencies(hbaseclient-static copy_version_h)
-add_dependencies(hbaseclient-shared copy_version_h)
+if (NOT BUILD_HBASE)
+       add_custom_target (

Review comment:
       nit: indentation...

##########
File path: CMakeLists.txt
##########
@@ -25,15 +25,108 @@ set(PROJECT_VERSION_PATCH 0)
 set(BUILD_SHARED_LIBS ON)
 ## set our cmake module path
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(CMakeDependentOption)
+include(CheckIncludeFile)
+include(ExternalProject)
+include(DownloadProject)
+include(CheckCXXCompilerFlag)
+
+
+option(BUILD_LOCAL_DEPENDENCIES "Downloads and builds all dependencies locally 
" OFF)
+option(HBASE_TARGET_TAG "Downloads and builds all dependencies locally" 
"e5345b3a7c32c6a80394319c17540b84c8fe66ba")
+option(BUILD_HBASE  "Builds Hbase " OFF)
+
+
+
+######### Includes
+
+       
+if (WIN32)
+       set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_SHARED_SUFFIX ".lib" CACHE STRING "" FORCE)
+       set(BYPRODUCT_PREFIX "" 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)
+endif()
+       
+
+
 ## include the Protobuf generation code
 include(ProtobufGen)
+include(DownloadFolly)
+include(DownloadWangle)
+include(DownloadZookeeper)
+
+if (BUILD_LOCAL_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")
+                                
+       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)
+       
+       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")
+
+       ## Build Apache HBase components that are necessary for this project
+
+       if( BUILD_HBASE )
+               ## Download Apache HBase, and build hbase-common so that we can 
have a targeted build of version.h
+               download_project(PROJ apachehbase
+                       IS_MAVEN
+                       MAVEN_DIR "hbase-common"

Review comment:
       nit: Same comment as above, move versions, repos, tags etc to global 
variables?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to