Skip to content

Commit cdd0e00

Browse files
committed
enabling cpp-netlib to be compiled into a sincle library
this adds the CMake variable 'CPP-NETLIB_BUILD_SINGLE_LIB', which defaults to OFF and will enable build of a single library 'libcppnetlib' to be compiled instead of the different separated libraries. the tests and examples have been adjusted to deal with a single library the uri submodule has also been changed
1 parent e0b3f97 commit cdd0e00

File tree

14 files changed

+248
-103
lines changed

14 files changed

+248
-103
lines changed

CMakeLists.txt

+29
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ cmake_minimum_required(VERSION 2.8)
88
project(CPP-NETLIB)
99

1010
option( CPP-NETLIB_BUILD_SHARED_LIBS "Build cpp-netlib as shared libraries." OFF )
11+
option( CPP-NETLIB_BUILD_SINGLE_LIB "Build cpp-netlib into a single library" OFF )
1112
option( CPP-NETLIB_BUILD_TESTS "Build the unit tests." ON )
1213
option( CPP-NETLIB_BUILD_EXAMPLES "Build the examples using cpp-netlib." ON )
1314
option( CPP-NETLIB_ALWAYS_LOGGING "Allow cpp-netlib to log debug messages even in non-debug mode." OFF )
@@ -83,6 +84,7 @@ endif(Boost_FOUND)
8384

8485
message(STATUS "CPP-NETLIB options selected:")
8586
message(STATUS " CPP-NETLIB_BUILD_SHARED_LIBS: ${CPP-NETLIB_BUILD_SHARED_LIBS}\t(Build cpp-netlib as shared libraries: OFF, ON)")
87+
message(STATUS " CPP-NETLIB_BUILD_SINGLE_LIB: ${CPP-NETLIB_BUILD_SINGLE_LIB}\t(Build cpp-netlib into a single library: OFF, ON)")
8688
message(STATUS " CPP-NETLIB_BUILD_TESTS: ${CPP-NETLIB_BUILD_TESTS}\t(Build the unit tests: ON, OFF)")
8789
message(STATUS " CPP-NETLIB_BUILD_EXAMPLES: ${CPP-NETLIB_BUILD_EXAMPLES}\t(Build the examples using cpp-netlib: ON, OFF)")
8890
message(STATUS " CPP-NETLIB_ALWAYS_LOGGING: ${CPP-NETLIB_ALWAYS_LOGGING}\t(Allow cpp-netlib to log debug messages even in non-debug mode: ON, OFF)")
@@ -123,6 +125,16 @@ if(CPP-NETLIB_BUILD_TESTS)
123125
set(GMOCK_BOTH_LIBRARIES ${GMOCK_LIBRARIES} ${GMOCK_MAIN_LIBRARIES})
124126
endif()
125127

128+
if(CPP-NETLIB_BUILD_SINGLE_LIB)
129+
include_directories(
130+
${CMAKE_CURRENT_SOURCE_DIR}/concurrency/src
131+
${CMAKE_CURRENT_SOURCE_DIR}/http/src
132+
${CMAKE_CURRENT_SOURCE_DIR}/logging/src
133+
${CMAKE_CURRENT_SOURCE_DIR}/message/src
134+
${CMAKE_CURRENT_SOURCE_DIR}/uri/src
135+
)
136+
endif()
137+
126138
add_subdirectory(uri)
127139
add_subdirectory(message)
128140
add_subdirectory(logging)
@@ -132,3 +144,20 @@ add_subdirectory(http)
132144
if(CPP-NETLIB_BUILD_EXAMPLES)
133145
add_subdirectory(contrib/http_examples)
134146
endif()
147+
148+
if(CPP-NETLIB_BUILD_SINGLE_LIB)
149+
add_library(cppnetlib
150+
${Uri_SRCS}
151+
${CPP-NETLIB_MESSAGE_SRCS}
152+
${CPP-NETLIB_MESSAGE_DIRECTIVES_SRCS}
153+
${CPP-NETLIB_MESSAGE_WRAPPERS_SRCS}
154+
${CPP-NETLIB_LOGGING_SRCS}
155+
${CPP-NETLIB_HTTP_CLIENT_SRCS}
156+
${CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS}
157+
${CPP-NETLIB_HTTP_MESSAGE_SRCS}
158+
${CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS}
159+
${CPP-NETLIB_CONSTANTS_SRCS}
160+
${CPP-NETLIB_CONCURRENCY_SRCS}
161+
)
162+
target_link_libraries(cppnetlib ${Boost_LIBRARIES})
163+
endif()

concurrency/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,6 @@ if(CPP-NETLIB_BUILD_TESTS)
99
enable_testing()
1010
add_subdirectory(test)
1111
endif(CPP-NETLIB_BUILD_TESTS)
12+
13+
# propagate sources to parent directory for one-lib-build
14+
set(CPP-NETLIB_CONCURRENCY_SRCS ${CPP-NETLIB_CONCURRENCY_SRCS} PARENT_SCOPE)

concurrency/src/CMakeLists.txt

+7-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
1616
endif()
1717
endif()
1818

19-
set(CPP-NETLIB_CONCURRENCY_SRCS thread_pool.cpp)
20-
add_library(cppnetlib-concurrency ${CPP-NETLIB_CONCURRENCY_SRCS})
19+
set(CPP-NETLIB_CONCURRENCY_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/thread_pool.cpp)
20+
if(NOT CPP-NETLIB_BUILD_SINGLE_LIB)
21+
add_library(cppnetlib-concurrency ${CPP-NETLIB_CONCURRENCY_SRCS})
22+
endif()
2123
foreach (src_file ${CPP-NETLIB_CONCURRENCY_SRCS})
2224
if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
2325
set_source_files_properties(${src_file}
@@ -27,3 +29,6 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
2729
PROPERTIES COMPILE_FLAGS ${CPP-NETLIB_CXXFLAGS})
2830
endif()
2931
endforeach(src_file)
32+
33+
# propagate sources to parent directory for one-lib-build
34+
set(CPP-NETLIB_CONCURRENCY_SRCS ${CPP-NETLIB_CONCURRENCY_SRCS} PARENT_SCOPE)

concurrency/test/CMakeLists.txt

+6-1
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,16 @@ include_directories(${CPP-NETLIB_SOURCE_DIR}/concurrency/src
77
${GTEST_INCLUDE_DIRS}
88
)
99

10+
if(CPP-NETLIB_BUILD_SINGLE_LIB)
11+
set(link_cppnetlib_lib cppnetlib)
12+
else()
13+
set(link_cppnetlib_lib cppnetlib-concurrency)
14+
endif()
1015
set_source_files_properties(thread_pool_test.cpp
1116
PROPERTIES COMPILE_FLAGS "-Wall")
1217
add_executable(cpp-netlib-thread_pool_test thread_pool_test.cpp)
1318
target_link_libraries(cpp-netlib-thread_pool_test
14-
cppnetlib-concurrency
19+
${link_cppnetlib_lib}
1520
${Boost_LIBRARIES}
1621
${GTEST_BOTH_LIBRARIES}
1722
${CMAKE_THREAD_LIBS_INIT})

contrib/http_examples/CMakeLists.txt

+34-10
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ set(BOOST_SERVER_LIBS
4040
${Boost_PROGRAM_OPTIONS_LIBRARY}
4141
)
4242

43-
target_link_libraries(simple_wget
44-
${BOOST_CLIENT_LIBS}
45-
${CMAKE_THREAD_LIBS_INIT}
43+
if(CPP-NETLIB_BUILD_SINGLE_LIB)
44+
set(simple_wget_linklibs cppnetlib)
45+
else()
46+
set(simple_wget_linklibs
4647
cppnetlib-uri
4748
cppnetlib-message
4849
cppnetlib-message-directives
@@ -53,10 +54,16 @@ target_link_libraries(simple_wget
5354
cppnetlib-http-client
5455
cppnetlib-http-client-connections
5556
${CPP-NETLIB_LOGGING_LIB})
56-
57-
target_link_libraries(atom_reader
57+
endif()
58+
target_link_libraries(simple_wget
5859
${BOOST_CLIENT_LIBS}
5960
${CMAKE_THREAD_LIBS_INIT}
61+
${simple_wget_linklibs})
62+
63+
if(CPP-NETLIB_BUILD_SINGLE_LIB)
64+
set(atom_reader_linklibs cppnetlib)
65+
else()
66+
set(atom_reader_linklibs
6067
cppnetlib-uri
6168
cppnetlib-message
6269
cppnetlib-message-directives
@@ -67,10 +74,16 @@ target_link_libraries(atom_reader
6774
cppnetlib-http-client
6875
cppnetlib-http-client-connections
6976
${CPP-NETLIB_LOGGING_LIB})
70-
71-
target_link_libraries(rss_reader
77+
endif()
78+
target_link_libraries(atom_reader
7279
${BOOST_CLIENT_LIBS}
7380
${CMAKE_THREAD_LIBS_INIT}
81+
${atom_reader_linklibs})
82+
83+
if(CPP-NETLIB_BUILD_SINGLE_LIB)
84+
set(rss_reader_linklibs cppnetlib)
85+
else()
86+
set(rss_reader_linklibs
7487
cppnetlib-uri
7588
cppnetlib-message
7689
cppnetlib-message-directives
@@ -80,6 +93,11 @@ target_link_libraries(rss_reader
8093
cppnetlib-http-client
8194
cppnetlib-http-client-connections
8295
${CPP-NETLIB_LOGGING_LIB})
96+
endif()
97+
target_link_libraries(rss_reader
98+
${BOOST_CLIENT_LIBS}
99+
${CMAKE_THREAD_LIBS_INIT}
100+
${rss_reader_linklibs})
83101

84102
#target_link_libraries(twitter_search
85103
# ${BOOST_CLIENT_LIBS}
@@ -102,9 +120,10 @@ target_link_libraries(rss_reader
102120
# cppnetlib-http-server
103121
# ${CPP-NETLIB_LOGGING_LIB})
104122

105-
target_link_libraries(hello_world_client
106-
${BOOST_CLIENT_LIBS}
107-
${CMAKE_THREAD_LIBS_INIT}
123+
if(CPP-NETLIB_BUILD_SINGLE_LIB)
124+
set(hello_world_client_linklibs cppnetlib)
125+
else()
126+
set(hello_world_client_linklibs
108127
cppnetlib-uri
109128
cppnetlib-message
110129
cppnetlib-message-directives
@@ -115,6 +134,11 @@ target_link_libraries(hello_world_client
115134
cppnetlib-http-client
116135
cppnetlib-http-client-connections
117136
${CPP-NETLIB_LOGGING_LIB})
137+
endif()
138+
target_link_libraries(hello_world_client
139+
${BOOST_CLIENT_LIBS}
140+
${CMAKE_THREAD_LIBS_INIT}
141+
${hello_world_client_linklibs})
118142

119143
if (OPENSSL_FOUND)
120144
target_link_libraries(simple_wget ${OPENSSL_LIBRARIES})

http/CMakeLists.txt

+7
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,10 @@ if(CPP-NETLIB_BUILD_TESTS)
99
enable_testing()
1010
add_subdirectory(test)
1111
endif(CPP-NETLIB_BUILD_TESTS)
12+
13+
# propagate sources to parent directory for one-lib-build
14+
set(CPP-NETLIB_HTTP_MESSAGE_SRCS ${CPP-NETLIB_HTTP_MESSAGE_SRCS} PARENT_SCOPE)
15+
set(CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS ${CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS} PARENT_SCOPE)
16+
set(CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS ${CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS} PARENT_SCOPE)
17+
set(CPP-NETLIB_HTTP_CLIENT_SRCS ${CPP-NETLIB_HTTP_CLIENT_SRCS} PARENT_SCOPE)
18+
set(CPP-NETLIB_CONSTANTS_SRCS ${CPP-NETLIB_CONSTANTS_SRCS} PARENT_SCOPE)

http/src/CMakeLists.txt

+68-48
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,18 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
3333
endif()
3434
endif()
3535

36-
set(CPP-NETLIB_HTTP_MESSAGE_SRCS http/request.cpp http/response.cpp)
37-
add_library(cppnetlib-http-message ${CPP-NETLIB_HTTP_MESSAGE_SRCS})
38-
add_dependencies(cppnetlib-http-message
39-
# ${Boost_LIBRARIES}
40-
cppnetlib-message)
41-
target_link_libraries(cppnetlib-http-message
42-
${Boost_LIBRARIES}
43-
cppnetlib-message)
36+
set(CPP-NETLIB_HTTP_MESSAGE_SRCS
37+
${CMAKE_CURRENT_SOURCE_DIR}/http/request.cpp
38+
${CMAKE_CURRENT_SOURCE_DIR}/http/response.cpp)
39+
if(NOT CPP-NETLIB_BUILD_SINGLE_LIB)
40+
add_library(cppnetlib-http-message ${CPP-NETLIB_HTTP_MESSAGE_SRCS})
41+
add_dependencies(cppnetlib-http-message
42+
# ${Boost_LIBRARIES}
43+
cppnetlib-message)
44+
target_link_libraries(cppnetlib-http-message
45+
${Boost_LIBRARIES}
46+
cppnetlib-message)
47+
endif()
4448
foreach (src_file ${CPP-NETLIB_HTTP_MESSAGE_SRCS})
4549
if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
4650
set_source_files_properties(${src_file}
@@ -51,8 +55,10 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
5155
endif()
5256
endforeach(src_file)
5357

54-
set(CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS http/message/wrappers.cpp)
55-
add_library(cppnetlib-http-message-wrappers ${CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS})
58+
set(CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/http/message/wrappers.cpp)
59+
if(NOT CPP-NETLIB_BUILD_SINGLE_LIB)
60+
add_library(cppnetlib-http-message-wrappers ${CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS})
61+
endif()
5662
foreach (src_file ${CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS})
5763
if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
5864
set_source_files_properties(${src_file}
@@ -118,17 +124,19 @@ endforeach(src_file)
118124
#endforeach(src_file)
119125

120126
set(CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS
121-
http/client_connections.cpp
122-
http/simple_connection_manager.cpp
123-
http/simple_connection_factory.cpp
124-
http/connection_delegate_factory.cpp
125-
http/client_resolver_delegate.cpp
126-
http/client_resolver_delegate_factory.cpp
127-
http/client_connection_delegates.cpp
128-
http/client_connection_factory.cpp
129-
http/client_async_resolver.cpp
130-
http/client_connection_normal.cpp)
131-
add_library(cppnetlib-http-client-connections ${CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS})
127+
${CMAKE_CURRENT_SOURCE_DIR}/http/client_connections.cpp
128+
${CMAKE_CURRENT_SOURCE_DIR}/http/simple_connection_manager.cpp
129+
${CMAKE_CURRENT_SOURCE_DIR}/http/simple_connection_factory.cpp
130+
${CMAKE_CURRENT_SOURCE_DIR}/http/connection_delegate_factory.cpp
131+
${CMAKE_CURRENT_SOURCE_DIR}/http/client_resolver_delegate.cpp
132+
${CMAKE_CURRENT_SOURCE_DIR}/http/client_resolver_delegate_factory.cpp
133+
${CMAKE_CURRENT_SOURCE_DIR}/http/client_connection_delegates.cpp
134+
${CMAKE_CURRENT_SOURCE_DIR}/http/client_connection_factory.cpp
135+
${CMAKE_CURRENT_SOURCE_DIR}/http/client_async_resolver.cpp
136+
${CMAKE_CURRENT_SOURCE_DIR}/http/client_connection_normal.cpp)
137+
if(NOT CPP-NETLIB_BUILD_SINGLE_LIB)
138+
add_library(cppnetlib-http-client-connections ${CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS})
139+
endif()
132140
foreach (src_file ${CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS})
133141
if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
134142
set_source_files_properties(${src_file}
@@ -140,31 +148,33 @@ endif()
140148
endforeach(src_file)
141149

142150
set(CPP-NETLIB_HTTP_CLIENT_SRCS
143-
http/client.cpp)
144-
add_library(cppnetlib-http-client ${CPP-NETLIB_HTTP_CLIENT_SRCS})
145-
add_dependencies(cppnetlib-http-client
146-
${CPP-NETLIB_LOGGING_LIB}
147-
cppnetlib-constants
148-
cppnetlib-uri
149-
cppnetlib-message
150-
cppnetlib-message-wrappers
151-
cppnetlib-message-directives
152-
cppnetlib-http-message
153-
cppnetlib-http-message-wrappers
154-
cppnetlib-http-client-connections
155-
)
156-
target_link_libraries(cppnetlib-http-client
157-
${Boost_LIBRARIES}
158-
${CPP-NETLIB_LOGGING_LIB}
159-
cppnetlib-constants
160-
cppnetlib-uri
161-
cppnetlib-message
162-
cppnetlib-message-wrappers
163-
cppnetlib-message-directives
164-
cppnetlib-http-message
165-
cppnetlib-http-message-wrappers
166-
cppnetlib-http-client-connections
167-
)
151+
${CMAKE_CURRENT_SOURCE_DIR}/http/client.cpp)
152+
if(NOT CPP-NETLIB_BUILD_SINGLE_LIB)
153+
add_library(cppnetlib-http-client ${CPP-NETLIB_HTTP_CLIENT_SRCS})
154+
add_dependencies(cppnetlib-http-client
155+
${CPP-NETLIB_LOGGING_LIB}
156+
cppnetlib-constants
157+
cppnetlib-uri
158+
cppnetlib-message
159+
cppnetlib-message-wrappers
160+
cppnetlib-message-directives
161+
cppnetlib-http-message
162+
cppnetlib-http-message-wrappers
163+
cppnetlib-http-client-connections
164+
)
165+
target_link_libraries(cppnetlib-http-client
166+
${Boost_LIBRARIES}
167+
${CPP-NETLIB_LOGGING_LIB}
168+
cppnetlib-constants
169+
cppnetlib-uri
170+
cppnetlib-message
171+
cppnetlib-message-wrappers
172+
cppnetlib-message-directives
173+
cppnetlib-http-message
174+
cppnetlib-http-message-wrappers
175+
cppnetlib-http-client-connections
176+
)
177+
endif()
168178
foreach (src_file ${CPP-NETLIB_HTTP_CLIENT_SRCS})
169179
if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
170180
set_source_files_properties(${src_file}
@@ -175,8 +185,10 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
175185
endif()
176186
endforeach(src_file)
177187

178-
set(CPP-NETLIB_CONSTANTS_SRCS constants.cpp)
179-
add_library(cppnetlib-constants ${CPP-NETLIB_CONSTANTS_SRCS})
188+
set(CPP-NETLIB_CONSTANTS_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/constants.cpp)
189+
if(NOT CPP-NETLIB_BUILD_SINGLE_LIB)
190+
add_library(cppnetlib-constants ${CPP-NETLIB_CONSTANTS_SRCS})
191+
endif()
180192
foreach (src_file ${CPP-NETLIB_CONSTANTS_SRCS})
181193
if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
182194
set_source_files_properties(${src_file}
@@ -186,3 +198,11 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
186198
PROPERTIES COMPILE_FLAGS ${CPP-NETLIB_CXXFLAGS})
187199
endif()
188200
endforeach(src_file)
201+
202+
203+
# propagate sources to parent directory for one-lib-build
204+
set(CPP-NETLIB_HTTP_MESSAGE_SRCS ${CPP-NETLIB_HTTP_MESSAGE_SRCS} PARENT_SCOPE)
205+
set(CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS ${CPP-NETLIB_HTTP_MESSAGE_WRAPPERS_SRCS} PARENT_SCOPE)
206+
set(CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS ${CPP-NETLIB_HTTP_CLIENT_CONNECTIONS_SRCS} PARENT_SCOPE)
207+
set(CPP-NETLIB_HTTP_CLIENT_SRCS ${CPP-NETLIB_HTTP_CLIENT_SRCS} PARENT_SCOPE)
208+
set(CPP-NETLIB_CONSTANTS_SRCS ${CPP-NETLIB_CONSTANTS_SRCS} PARENT_SCOPE)

0 commit comments

Comments
 (0)