Skip to content

Commit a17bc71

Browse files
committed
Merge pull request #5 from datastax/1.0.0-eap1_build_prep
1.0.0-eap1 release prep
2 parents 542af61 + 5c37915 commit a17bc71

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1438
-647
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
build
2+
docs

CMakeLists.txt

Lines changed: 137 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,33 @@
1717
cmake_minimum_required(VERSION 2.6.4)
1818
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
1919

20-
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
21-
2220
set(PROJECT_NAME_STRING dse)
2321
set(PROJECT_LIB_NAME ${PROJECT_NAME_STRING})
2422
set(PROJECT_LIB_NAME_STATIC "${PROJECT_LIB_NAME}_static")
2523

26-
if(POLICY CMP0042)
27-
cmake_policy(SET CMP0042 OLD)
24+
project(${PROJECT_NAME_STRING} C CXX)
25+
26+
set(CASS_SOURCE_DIR "${PROJECT_SOURCE_DIR}/cpp-driver")
27+
set(CPP_DRIVER_INCLUDE_DIR "${CASS_SOURCE_DIR}/include")
28+
set(CPP_DRIVER_SOURCE_DIR "${CASS_SOURCE_DIR}/src")
29+
set(CPP_DRIVER_THIRD_PARTY_SOURCE_DIR "${CPP_DRIVER_SOURCE_DIR}/third_party")
30+
set(RAPID_JSON_INCLUDE_DIR "${CPP_DRIVER_THIRD_PARTY_SOURCE_DIR}/rapidjson")
31+
32+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CASS_SOURCE_DIR}/cmake/modules/")
33+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
34+
35+
# Determine if the submodule should be initialized
36+
if(NOT EXISTS "${CASS_SOURCE_DIR}/CMakeLists.txt")
37+
find_package(Git REQUIRED)
38+
execute_process(COMMAND git submodule update --init --recursive
39+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
40+
OUTPUT_QUIET)
2841
endif()
2942

30-
project(${PROJECT_NAME_STRING} C CXX)
43+
include(CppDriver)
44+
45+
CassPolicies()
46+
CassCheckPlatform()
3147

3248
# Title the project and define the versioning
3349
set(PROJECT_DISPLAY_NAME "DataStax C/C++ DSE Driver")
@@ -58,69 +74,107 @@ message(STATUS "Project version: ${PROJECT_VERSION_STRING}")
5874
option(DSE_BUILD_SHARED "Build shared library" ON)
5975
option(DSE_BUILD_STATIC "Build static library" OFF)
6076
option(DSE_INSTALL_HEADER "Install header file" ON)
77+
option(DSE_INSTALL_PKG_CONFIG "Install pkg-config file(s)" ON)
6178
option(DSE_USE_STATIC_LIBS "Link static libraries when building executables" OFF)
6279
option(DSE_BUILD_EXAMPLES "Build examples" OFF)
6380
option(DSE_BUILD_INTEGRATION_TESTS "Build the integration tests" OFF)
6481
option(DSE_BUILD_UNIT_TESTS "Build the unit tests" OFF)
82+
option(DSE_USE_BOOST_ATOMIC "Use Boost atomics library" OFF)
83+
option(DSE_USE_STD_ATOMIC "Use C++11 atomics library" OFF)
84+
option(DSE_USE_OPENSSL "Use OpenSSL" ON)
85+
option(DSE_USE_TCMALLOC "Use tcmalloc" OFF)
86+
option(DSE_USE_SPARSEHASH "Use sparsehash" OFF)
87+
option(DSE_USE_ZLIB "Use zlib" OFF)
88+
option(DSE_USE_LIBSSH2 "Use libssh2" OFF)
6589

66-
# Build the Cassandra C/C++ driver submodule
67-
if(DSE_BUILD_STATIC)
68-
set(CASS_BUILD_STATIC ON CACHE BOOL "Build Cassandra driver static library" FORCE)
69-
endif()
90+
# Determine which driver target should be used as a dependency
91+
set(PROJECT_LIB_NAME_TARGET ${PROJECT_LIB_NAME})
7092
if(DSE_USE_STATIC_LIBS)
71-
set(CASS_USE_STATIC_LIBS ON CACHE BOOL "Link static libraries when building Cassandra driver static executables" FORCE)
93+
set(DSE_BUILD_STATIC ON)
94+
set(PROJECT_LIB_NAME_TARGET ${PROJECT_LIB_NAME_STATIC})
7295
endif()
73-
set(CASS_USE_OPENSSL ON CACHE BOOL "Build with OpenSSL support" FORCE)
74-
set(CPP_DRIVER_DIR "${PROJECT_SOURCE_DIR}/cpp-driver")
75-
set(CPP_DRIVER_INCLUDE_DIR "${CPP_DRIVER_DIR}/include")
76-
set(CPP_DRIVER_SOURCE_DIR "${CPP_DRIVER_DIR}/src")
77-
set(CPP_DRIVER_THIRD_PARTY_SOURCE_DIR "${CPP_DRIVER_SOURCE_DIR}/third_party")
78-
set(RAPID_JSON_INCLUDE_DIR "${CPP_DRIVER_THIRD_PARTY_SOURCE_DIR}/rapidjson")
79-
if(NOT EXISTS "${CPP_DRIVER_DIR}/CMakeLists.txt")
80-
find_package(Git REQUIRED)
81-
execute_process(COMMAND git submodule update --init --recursive
82-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
83-
OUTPUT_QUIET)
96+
97+
set(CASS_USE_STATIC_LIBS ${DSE_USE_STATIC_LIBS})
98+
set(CASS_USE_BOOST_ATOMIC ${DSE_USE_BOOST_ATOMIC})
99+
set(CASS_USE_STD_ATOMIC ${DSE_USE_STD_ATOMIC})
100+
set(CASS_USE_OPENSSL ${DSE_USE_OPENSSL})
101+
set(CASS_USE_TCMALLOC ${DSE_USE_TCMALLOC})
102+
set(CASS_USE_SPARSEHASH ${DSE_USE_SPARSEHASH})
103+
set(CASS_USE_ZLIB ${DSE_USE_ZLIB})
104+
set(CASS_USE_LIBSSH2 ${DSE_USE_LIBSSH2})
105+
106+
#---------------
107+
# Dependencies
108+
#---------------
109+
110+
CassUseLibuv()
111+
112+
#------------------------
113+
# Optional Dependencies
114+
#------------------------
115+
116+
# Boost
117+
if(CASS_USE_BOOST_ATOMIC)
118+
CassUseBoost()
84119
endif()
85-
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CPP_DRIVER_DIR}/cmake/modules/")
86-
add_subdirectory(${CPP_DRIVER_DIR})
87-
set_property(TARGET cassandra PROPERTY FOLDER "Driver/Cassandra")
88-
if(NOT CMAKE_VERSION VERSION_LESS "2.8.8")
89-
set_property(TARGET cpp-driver PROPERTY FOLDER "Driver/Cassandra")
120+
121+
# Sparsehash
122+
if(CASS_USE_SPARSEHASH)
123+
CassUseSparshHash()
90124
endif()
91-
set(DSE_LIBS ${CASS_LIBS})
125+
126+
127+
# OpenSSL
128+
if(CASS_USE_OPENSSL)
129+
CassUseOpenSSL()
130+
endif()
131+
132+
# tcmalloc
133+
if(CASS_USE_TCMALLOC)
134+
CassUseTcmalloc()
135+
endif()
136+
137+
# zlib
138+
if(CASS_USE_ZLIB)
139+
CassUseZlib()
140+
endif()
141+
142+
CassSetCompilerFlags()
143+
CassAddIncludes()
144+
CassFindSourceFiles()
145+
source_group("Source Files\\Cassandra" FILES ${SRC_FILES})
146+
source_group("Header Files\\Cassandra" FILES ${API_HEADER_FILES} ${INC_FILES})
92147

93148
# Build up the include paths
149+
set(DSE_INCLUDES ${CASS_INCLUDES})
94150
set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
95151
set(DSE_INCLUDES ${DSE_INCLUDES} ${PROJECT_INCLUDE_DIR})
96152
set(DSE_INCLUDES ${DSE_INCLUDES} ${PROJECT_SOURCE_DIR}/src)
97153
set(DSE_INCLUDES ${DSE_INCLUDES} ${RAPID_JSON_INCLUDE_DIR})
98154
set(DSE_INCLUDES ${DSE_INCLUDES} ${LIBUV_INCLUDE_DIR})
99155
set(DSE_INCLUDES ${DSE_INCLUDES} ${OPENSSL_INCLUDE_DIR})
100156

101-
# Determine which driver target should be used as a dependency
102-
if(DSE_USE_STATIC_LIBS)
103-
set(DSE_BUILD_STATIC ON)
104-
set(DSE_LIBS ${DSE_LIBS} cassandra_static)
105-
set(PROJECT_LIB_NAME_TARGET ${PROJECT_LIB_NAME_STATIC})
106-
set_property(TARGET cassandra_static PROPERTY COMPILE_FLAGS "-fPIC")
107-
else()
108-
set(PROJECT_LIB_NAME_TARGET ${PROJECT_LIB_NAME})
109-
set(DSE_LIBS ${DSE_LIBS} cassandra)
110-
endif()
111-
if(DSE_BUILD_STATIC)
112-
set_property(TARGET cassandra_static PROPERTY FOLDER "Driver/Cassandra")
113-
endif()
157+
# Build up libraries
158+
set(DSE_LIBS ${CASS_LIBS})
114159

115160
# Kerberos
116161
find_package(Kerberos REQUIRED)
117162
set(DSE_INCLUDES ${DSE_INCLUDES} ${KERBEROS_INCLUDE_DIR})
118163
set(DSE_LIBS ${DSE_LIBS} ${KERBEROS_LIBRARIES})
119164

165+
# Build up compiler flags
166+
set(PROJECT_CXX_FLAGS ${CASS_DRIVER_CXX_FLAGS})
167+
set(TEST_CXX_FLAGS ${CASS_TEST_CXX_FLAGS})
168+
120169
#------------------------------
121170
# DSE static and shared
122171
#------------------------------
123172

173+
# Copy "cassandra.h"
174+
configure_file(${PROJECT_SOURCE_DIR}/cpp-driver/include/cassandra.h
175+
${PROJECT_SOURCE_DIR}/include/dse/cassandra.h
176+
COPYONLY)
177+
124178
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
125179
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
126180
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
@@ -131,7 +185,9 @@ file(GLOB DSE_SRC_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp)
131185

132186
source_group("Source Files" FILES ${DSE_SRC_FILES})
133187
source_group("Header Files" FILES ${DSE_API_HEADER_FILES} ${DSE_INC_FILES})
134-
set(DSE_ALL_SOURCE_FILES ${DSE_SRC_FILES} ${DSE_API_HEADER_FILES} ${DSE_INC_FILES})
188+
set(DSE_ALL_SOURCE_FILES
189+
${DSE_SRC_FILES} ${DSE_API_HEADER_FILES}
190+
${DSE_INC_FILES} ${CASS_ALL_SOURCE_FILES})
135191

136192
# Create an object library for the driver (single build)
137193
if(NOT CMAKE_VERSION VERSION_LESS "2.8.8")
@@ -181,6 +237,7 @@ if(DSE_BUILD_STATIC)
181237
target_link_libraries(${PROJECT_LIB_NAME_STATIC} ${DSE_LIBS})
182238
set_target_properties(${PROJECT_LIB_NAME_STATIC} PROPERTIES OUTPUT_NAME ${PROJECT_LIB_NAME_STATIC})
183239
set_target_properties(${PROJECT_LIB_NAME_STATIC} PROPERTIES VERSION ${PROJECT_VERSION_STRING} SOVERSION ${PROJECT_VERSION_MAJOR})
240+
set_target_properties(${PROJECT_LIB_NAME_STATIC} PROPERTIES LINK_FLAGS "${PROJECT_CXX_LINKER_FLAGS}")
184241
set_property(
185242
TARGET ${PROJECT_LIB_NAME_STATIC}
186243
APPEND PROPERTY COMPILE_FLAGS "${PROJECT_CXX_FLAGS} -DDSE_STATIC")
@@ -243,8 +300,22 @@ set(INSTALL_DLL_EXE_DIR "bin")
243300
# Install targets
244301
#------------------------------
245302

303+
if(DSE_INSTALL_PKG_CONFIG)
304+
if(NOT WIN32)
305+
find_package(PkgConfig)
306+
if(PKG_CONFIG_FOUND)
307+
set(prefix ${CMAKE_INSTALL_PREFIX})
308+
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
309+
set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
310+
set(includedir ${CMAKE_INSTALL_PREFIX}/include)
311+
set(version ${PROJECT_VERSION_STRING})
312+
endif()
313+
endif()
314+
endif()
315+
246316
# Determine if the header should be installed
247317
if(DSE_INSTALL_HEADER)
318+
install(DIRECTORY include/dse DESTINATION include FILES_MATCHING PATTERN "*.h")
248319
install(FILES ${DSE_API_HEADER_FILES} DESTINATION "include")
249320
endif()
250321

@@ -254,4 +325,29 @@ if(DSE_BUILD_SHARED)
254325
RUNTIME DESTINATION ${INSTALL_DLL_EXE_DIR} # for dll/executable files
255326
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # for shared library
256327
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) # for static library
328+
if(DSE_INSTALL_PKG_CONFIG)
329+
if(NOT WIN32)
330+
if(PKG_CONFIG_FOUND)
331+
configure_file("${PROJECT_SOURCE_DIR}/packaging/dse.pc.in" "dse.pc" @ONLY)
332+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dse.pc"
333+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
334+
endif()
335+
endif()
336+
endif()
337+
endif()
338+
339+
if(DSE_BUILD_STATIC)
340+
install(TARGETS ${PROJECT_LIB_NAME_STATIC}
341+
RUNTIME DESTINATION ${INSTALL_DLL_EXE_DIR} # for dll/executable files
342+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # for shared library
343+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) # for static library
344+
if(DSE_INSTALL_PKG_CONFIG)
345+
if(NOT WIN32)
346+
if(PKG_CONFIG_FOUND)
347+
configure_file("${PROJECT_SOURCE_DIR}/packaging/dse_static.pc.in" "dse_static.pc" @ONLY)
348+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dse_static.pc"
349+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
350+
endif()
351+
endif()
352+
endif()
257353
endif()

0 commit comments

Comments
 (0)