Skip to content

Commit caa0a32

Browse files
authored
Merge branch 'cpp-redis:master' into master
2 parents dede229 + 201d96c commit caa0a32

File tree

16 files changed

+265
-193
lines changed

16 files changed

+265
-193
lines changed

.github/dependabot.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# To get started with Dependabot version updates, you'll need to specify which
2+
# package ecosystems to update and where the package manifests are located.
3+
# Please see the documentation for all configuration options:
4+
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5+
6+
version: 2
7+
updates:
8+
- package-ecosystem: "gitsubmodule" # See documentation for possible values
9+
directory: "/" # Location of package manifests
10+
schedule:
11+
interval: "monthly"
12+
reviewers:
13+
- "cpp-redis/dev"

.github/workflows/format.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
name: Clang Format Checker
2+
on: [push, pull_request]
3+
jobs:
4+
clang-format-checking:
5+
runs-on: ubuntu-latest
6+
steps:
7+
- uses: actions/checkout@v2
8+
- uses: RafikFarhad/clang-format-github-action@v2.1.0
9+
with:
10+
sources: "src/**/*.h,src/**/*.c,test/**/*.c"

.gitmodules

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
[submodule "tacopie"]
2-
path = tacopie
3-
url = https://github.com/Cylix/tacopie.git
2+
path = tacopie
3+
url = https://github.com/cpp-redis/tacopie.git
4+
[submodule "googletest"]
5+
path = googletest
6+
url = https://github.com/google/googletest.git

.travis.yml

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,28 @@ addons:
2323
- clang
2424

2525
before_install:
26-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
27-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install llvm; fi
26+
- source scripts/prepare.sh
2827

2928
install:
30-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ccache; fi
31-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi
32-
- if [[ "$TRAVIS_OS_NAME" != "osx" && "$CXX" = "g++" ]]; then export CXX="g++-4.8" CC="gcc-4.8"; fi
33-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install redis; fi
34-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then (redis-server&); fi
35-
36-
script: mkdir build && cd build && cmake .. -DBUILD_TESTS=true -DBUILD_EXAMPLES=true && make && GTEST_COLOR=1 ctest -VV
29+
- source scripts/install-osx-dependencies.sh
30+
- source scripts/install-cmake.sh
31+
before_script:
32+
- source scripts/start-redis.sh
33+
# create a build folder for the out-of-source build
34+
- mkdir build
35+
# switch to build directory
36+
- cd build
37+
# run cmake; here we assume that the project's
38+
# top-level CMakeLists.txt is located at '..'
39+
- ls ${CMAKE_INSTALL_DIR}
40+
- ls ${CMAKE_INSTALL_DIR}/bin
41+
- env
42+
- which cmake
43+
- cmake --version
44+
- cmake .. -DBUILD_TESTS=true -DBUILD_EXAMPLES=true
45+
46+
script:
47+
# once CMake has done its job we just build using make as usual
48+
- make
49+
# if the project uses ctest we can run the tests like this
50+
- GTEST_COLOR=1 ctest -VV

BUILD.bazel

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ cc_binary(
7373

7474
cc_binary(
7575
name = "example_cpp_redis_client",
76-
srcs = ["examples/cpp_redis_client.cpp"],
76+
srcs = [
77+
"examples/cpp_redis_client.cpp",
78+
"examples/winsock_initializer.h"
79+
],
7780
# TODO (steple): For windows, link ws2_32 instead.
7881
linkopts = ["-lpthread"],
7982
deps = ["cpp_redis"],

CMakeLists.txt

Lines changed: 110 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -20,110 +20,90 @@
2020
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121
# SOFTWARE.
2222

23+
cmake_minimum_required(VERSION 3.13)
24+
2325
###
24-
# config
26+
# project
2527
###
26-
cmake_minimum_required(VERSION 2.8.7)
28+
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
29+
cmake_policy(SET CMP0048 NEW)
30+
project(cpp_redis
31+
VERSION 4.4.0
32+
DESCRIPTION "Lightweight C++11 Redis Client"
33+
HOMEPAGE_URL "https://github.com/cpp-redis/cpp_redis"
34+
LANGUAGES CXX)
35+
else ()
36+
# for cmake >= 3.0
37+
project(cpp_redis VERSION 4.4.0 LANGUAGES CXX)
38+
endif ()
39+
if (POLICY CMP0077)
40+
cmake_policy(SET CMP0077 NEW)
41+
endif ()
42+
2743
set(CMAKE_MACOSX_RPATH 1)
28-
include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
44+
set(CMAKE_CXX_STANDARD 11)
2945

46+
set(EXPORT_TARGET_NAME ${PROJECT_NAME} CACHE STRING "Name of the exported CMake target used in install(EXPORT)")
3047

3148
###
3249
# verbose make
3350
###
3451
# set(CMAKE_VERBOSE_MAKEFILE TRUE)
3552

36-
37-
###
38-
# project
39-
###
40-
set(PROJECT cpp_redis)
41-
project(${PROJECT} CXX)
42-
53+
include(sources.cmake)
4354

4455
###
4556
# compilation options
4657
###
4758
if (MSVC)
48-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /O2 /bigobj")
49-
50-
# was causing conflics with gtest build
51-
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
52-
53-
if ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "")
54-
set(MSVC_RUNTIME_LIBRARY_CONFIG "/MT")
55-
endif ()
56-
57-
foreach (flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE)
58-
if ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "/MT")
59-
string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
60-
elseif ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "/MD")
61-
string(REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")
62-
else ()
63-
string(REPLACE "/MD" "${MSVC_RUNTIME_LIBRARY_CONFIG}" ${flag_var} "${${flag_var}}")
64-
string(REPLACE "/MT" "${MSVC_RUNTIME_LIBRARY_CONFIG}" ${flag_var} "${${flag_var}}")
65-
endif ()
66-
endforeach ()
67-
68-
add_definitions(-D_UNICODE)
69-
add_definitions(-DUNICODE)
70-
add_definitions(-DWIN32_LEAN_AND_MEAN)
59+
add_compile_options(/W3 /O2 /bigobj)
60+
61+
# was causing conflics with gtest build
62+
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
63+
64+
if ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "")
65+
set(MSVC_RUNTIME_LIBRARY_CONFIG "/MT")
66+
endif ()
67+
68+
foreach (flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE)
69+
if ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "/MT")
70+
string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
71+
elseif ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "/MD")
72+
string(REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")
73+
else ()
74+
string(REPLACE "/MD" "${MSVC_RUNTIME_LIBRARY_CONFIG}" ${flag_var} "${${flag_var}}")
75+
string(REPLACE "/MT" "${MSVC_RUNTIME_LIBRARY_CONFIG}" ${flag_var} "${${flag_var}}")
76+
endif ()
77+
endforeach ()
78+
79+
add_definitions(-D_UNICODE)
80+
add_definitions(-DUNICODE)
81+
add_definitions(-DWIN32_LEAN_AND_MEAN)
7182
else ()
72-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -W -Wall -Wextra -O3")
83+
add_compile_options(-W -Wall -Wextra -O3)
7384
endif ()
7485

75-
7686
###
77-
# variables
87+
# tacopie
7888
###
79-
find_path(TACOPIE_INCLUDE_DIR tacopie/tacopie PATHS ${PROJECT_SOURCE_DIR}/tacopie/includes/)
80-
find_library(TACOPIE_LIBRARY tacopie)
81-
set(CPP_REDIS_INCLUDES ${PROJECT_SOURCE_DIR}/includes)
82-
set(DEPS_INCLUDES ${PROJECT_SOURCE_DIR}/deps/include)
83-
84-
if (NOT USE_CUSTOM_TCP_CLIENT)
85-
set(DEPS_INCLUDES ${DEPS_INCLUDES} ${TACOPIE_INCLUDE_DIR})
89+
if (NOT tacopie_library AND NOT USE_CUSTOM_TCP_CLIENT)
90+
# requires CMP0077 set to NEW
91+
set(BUILD_EXAMPLES OFF)
92+
set(BUILD_TESTS OFF)
93+
add_subdirectory(tacopie)
94+
# TODO: add alias library
8695
endif ()
8796

88-
set(DEPS_LIBRARIES ${PROJECT_SOURCE_DIR}/deps/lib)
89-
90-
91-
###
92-
# includes
93-
###
94-
include_directories(${CPP_REDIS_INCLUDES} ${DEPS_INCLUDES})
95-
96-
97-
###
98-
# sources
99-
###
100-
set(SRC_DIRS "sources"
101-
"sources/builders"
102-
"sources/core"
103-
"sources/misc"
104-
"sources/network"
105-
"includes/cpp_redis"
106-
"includes/cpp_redis/builders"
107-
"includes/cpp_redis/core"
108-
"includes/cpp_redis/misc"
109-
"includes/cpp_redis/network")
97+
set(cpp_redis_includes ${CMAKE_CURRENT_LIST_DIR}/includes)
98+
set(deps_includes ${CMAKE_CURRENT_LIST_DIR}/deps/include)
11099

111-
foreach (dir ${SRC_DIRS})
112-
# get directory sources and headers
113-
file(GLOB s_${dir} "${dir}/*.cpp")
114-
file(GLOB h_${dir} "${dir}/*.hpp")
115-
file(GLOB i_${dir} "${dir}/*.ipp")
100+
set(deps_libraries ${PROJECT_SOURCE_DIR}/deps/lib)
116101

117-
# set sources
118-
set(SOURCES ${SOURCES} ${s_${dir}} ${h_${dir}} ${i_${dir}})
119-
endforeach ()
120102
# filter tcp_client if no tacopie
121103
if (USE_CUSTOM_TCP_CLIENT)
122-
file(GLOB tacopie_cpp "sources/network/tcp_client.cpp")
123-
file(GLOB tacopie_h "includes/cpp_redis/network/tcp_client.hpp")
124-
list(REMOVE_ITEM SOURCES ${tacopie_cpp} ${tacopie_h})
125-
endif (USE_CUSTOM_TCP_CLIENT)
126-
104+
file(GLOB tacopie_cpp "sources/network/tcp_client.cpp")
105+
list(REMOVE_ITEM ${cpp_redis_sources} ${tacopie_cpp})
106+
endif ()
127107

128108
###
129109
# outputs
@@ -136,88 +116,83 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
136116
###
137117
# pkg-config
138118
###
139-
configure_file("cpp_redis.pc.in" "${CMAKE_PKGCONFIG_OUTPUT_DIRECTORY}/cpp_redis.pc" @ONLY)
119+
configure_file("${PROJECT_NAME}.pc.in" "${CMAKE_PKGCONFIG_OUTPUT_DIRECTORY}/${PROJECT_NAME}.pc" @ONLY)
140120

141121
###
142-
# executable
122+
# main target
143123
###
144-
add_library(${PROJECT} ${SOURCES})
145-
set_property(TARGET ${PROJECT} PROPERTY POSITION_INDEPENDENT_CODE ON)
124+
add_library(${PROJECT_NAME} SHARED ${cpp_redis_sources})
146125

147-
if (WIN32)
148-
set_target_properties(${PROJECT}
149-
PROPERTIES COMPILE_PDB_NAME ${PROJECT}
150-
COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
151-
endif (WIN32)
126+
###
127+
# includes
128+
###
129+
target_include_directories(${PROJECT_NAME} PUBLIC
130+
$<BUILD_INTERFACE:${cpp_redis_includes}>
131+
$<INSTALL_INTERFACE:include>)
152132

153133
if (WIN32)
154-
target_link_libraries(${PROJECT} ws2_32)
155-
else ()
156-
target_link_libraries(${PROJECT} pthread)
157-
endif (WIN32)
134+
set_target_properties(${PROJECT_NAME} PROPERTIES
135+
COMPILE_PDB_NAME ${PROJECT_NAME}
136+
COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
137+
endif ()
158138

159-
if (TACOPIE_LIBRARY)
160-
target_link_libraries(${PROJECT} ${TACOPIE_LIBRARY})
161-
else ()
162-
target_link_libraries(${PROJECT} tacopie)
163-
endif (TACOPIE_LIBRARY)
139+
set_target_properties(${PROJECT_NAME} PROPERTIES
140+
SOVERSION ${PROJECT_VERSION}
141+
RESOURCE ${CMAKE_PKGCONFIG_OUTPUT_DIRECTORY}/${PROJECT_NAME}.pc)
142+
143+
find_package(Threads REQUIRED)
144+
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)
164145

146+
if (tacopie_library)
147+
target_link_libraries(${PROJECT_NAME} PUBLIC ${tacopie_library})
148+
else ()
149+
target_link_libraries(${PROJECT_NAME} PUBLIC tacopie)
150+
endif ()
165151

166-
# __CPP_REDIS_READ_SIZE
167-
if (READ_SIZE)
168-
set_property(TARGET ${PROJECT} APPEND_STRING PROPERTY COMPILE_DEFINITIONS " __CPP_REDIS_READ_SIZE=${READ_SIZE}")
169-
endif (READ_SIZE)
152+
###
153+
# parameters
154+
###
155+
set(READ_SIZE "4096" CACHE STRING "Number of bytes read from sockets")
156+
if (READ_SIZE MATCHES "^[1-9]+")
157+
target_compile_definitions(${PROJECT_NAME} PRIVATE __CPP_REDIS_READ_SIZE=${READ_SIZE})
158+
endif ()
170159

171-
# __CPP_REDIS_LOGGING_ENABLED
160+
option(LOGGING_ENABLED "If true enables logging calls to cpp_redis::level()" OFF)
172161
if (LOGGING_ENABLED)
173-
set_property(TARGET ${PROJECT} APPEND_STRING PROPERTY COMPILE_DEFINITIONS " __CPP_REDIS_LOGGING_ENABLED=${LOGGING_ENABLED}")
174-
endif (LOGGING_ENABLED)
162+
target_compile_definitions(${PROJECT_NAME} PRIVATE __CPP_REDIS_LOGGING_ENABLED)
163+
endif ()
175164

176-
# __CPP_REDIS_USE_CUSTOM_TCP_CLIENT
165+
option(USE_CUSTOM_TCP_CLIENT "If true user must provide a custom tcp_client_iface instance, otherwise uses tacopie" OFF)
177166
if (USE_CUSTOM_TCP_CLIENT)
178-
set_property(TARGET ${PROJECT} APPEND_STRING PROPERTY COMPILE_DEFINITIONS " __CPP_REDIS_USE_CUSTOM_TCP_CLIENT=${USE_CUSTOM_TCP_CLIENT}")
179-
endif (USE_CUSTOM_TCP_CLIENT)
180-
167+
target_compile_definitions(${PROJECT_NAME} PRIVATE __CPP_REDIS_USE_CUSTOM_TCP_CLIENT)
168+
endif ()
181169

182170
###
183171
# install
184172
###
185-
# ensure lib and bin directories exist
186-
install(CODE "FILE(MAKE_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})")
187-
install(CODE "FILE(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})")
188-
# install cpp_redis
189-
install(DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/ DESTINATION lib USE_SOURCE_PERMISSIONS)
190-
install(DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ DESTINATION bin USE_SOURCE_PERMISSIONS)
191-
install(DIRECTORY ${CPP_REDIS_INCLUDES}/ DESTINATION include USE_SOURCE_PERMISSIONS)
173+
install(DIRECTORY ${cpp_redis_includes}/ DESTINATION include USE_SOURCE_PERMISSIONS)
192174

175+
include(GNUInstallDirs)
176+
install(TARGETS ${PROJECT_NAME} EXPORT ${EXPORT_TARGET_NAME}
177+
LIBRARY
178+
RESOURCE DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
179+
install(EXPORT ${EXPORT_TARGET_NAME} DESTINATION lib/${PROJECT_NAME} EXPORT_LINK_INTERFACE_LIBRARIES)
193180

194181
###
195182
# examples
196183
###
197184
if (BUILD_EXAMPLES)
198-
add_subdirectory(examples)
199-
# Reset variable to false to ensure tacopie does no build examples
200-
set(BUILD_EXAMPLES false)
201-
endif (BUILD_EXAMPLES)
185+
add_subdirectory(examples)
186+
endif ()
202187

203188
###
204189
# tests
205190
###
206191
if (BUILD_TESTS)
207-
enable_testing()
208-
add_subdirectory(tests)
209-
ExternalProject_Add("googletest"
210-
GIT_REPOSITORY "https://github.com/google/googletest.git"
211-
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${PROJECT_SOURCE_DIR}/deps")
212-
# Reset variable to false to ensure tacopie does no build tests
213-
set(BUILD_TESTS false)
214-
endif (BUILD_TESTS)
215-
216-
217-
###
218-
# tacopie
219-
###
220-
if (NOT TACOPIE_LIBRARY AND NOT USE_CUSTOM_TCP_CLIENT)
221-
set(SOURCES) # reset the SOURCES var so that the tacopie project won't include the cpp_redis sources too
222-
add_subdirectory(tacopie)
223-
endif (NOT TACOPIE_LIBRARY AND NOT USE_CUSTOM_TCP_CLIENT)
192+
enable_testing()
193+
if (NOT TARGET gtest)
194+
set(INSTALL_GTEST OFF)
195+
add_subdirectory(googletest)
196+
endif ()
197+
add_subdirectory(tests)
198+
endif ()

0 commit comments

Comments
 (0)