blob: 560c3a6d700c6d271b256666d05b7ebcdf412d1f [file] [log] [blame]
Brad Bishop6e60e8b2018-02-01 10:27:11 -05001From 613297214d78ee10111e74e90e025166ebbcad9f Mon Sep 17 00:00:00 2001
2From: Peter Liu <peter.x.liu@external.atlascopco.com>
3Date: Sun, 5 Mar 2017 16:15:40 +0100
4Subject: [PATCH] Add CMake build files
5
6Upstream-Status: Pending
7
8Signed-off-by: Peter Liu <peter.x.liu@external.atlascopco.com>
9---
10 CMakeLists.txt | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++
11 FindLibRcf.cmake | 63 +++++++++++++++++++++++
12 VERSION.cmake | 21 ++++++++
13 src/CMakeLists.txt | 25 +++++++++
14 4 files changed, 256 insertions(+)
15 create mode 100644 CMakeLists.txt
16 create mode 100644 FindLibRcf.cmake
17 create mode 100644 VERSION.cmake
18 create mode 100755 src/CMakeLists.txt
19
20diff --git a/CMakeLists.txt b/CMakeLists.txt
21new file mode 100644
22index 0000000..f6e24be
23--- /dev/null
24+++ b/CMakeLists.txt
25@@ -0,0 +1,147 @@
26+PROJECT (librcf)
27+
28+CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
29+
30+####################################################################
31+# OPTION #
32+####################################################################
33+OPTION (LIBRCF_USE_OPENSSL "Build with OpenSSL support?" OFF)
34+OPTION (LIBRCF_OPENSSL_STATIC "Enable static linking to OpenSSL?" OFF)
35+OPTION (LIBRCF_USE_ZLIB "Build with zlib support?" OFF)
36+OPTION (LIBRCF_ZLIB_STATIC "Enable static linking to zlib?" OFF)
37+OPTION (LIBRCF_USE_SF_SERIALIZATION "Build with SF serialization support?" ON)
38+OPTION (LIBRCF_USE_BOOST_SERIALIZATION "Build with Boost.Serialization support?" OFF)
39+OPTION (LIBRCF_USE_BOOST_FILESYSTEM "Build with Boost.Filesystem support (required for file transfer support)?" OFF)
40+OPTION (LIBRCF_USE_BOOST_ASIO "Build with Boost asio support?" ON)
41+OPTION (LIBRCF_USE_PROTOBUF "Build with Protocol Buffer support?" OFF)
42+OPTION (LIBRCF_USE_JSON "Build with JSON Spirit (required for JSON-RPC support)?" OFF)
43+OPTION (LIBRCF_USE_IPV6 "Build with IPv6 support?" OFF)
44+OPTION (LIBRCF_USE_CUSTOM_ALLOCATOR "Build with custom allocator support?" OFF)
45+OPTION (LIBRCF_BUILD_DLL "Build a DLL exporting RCF?" OFF)
46+OPTION (LIBRCF_AUTO_INIT_DEINIT "Enable automatic RCF initialization and deinitialization?" OFF)
47+OPTION (LIBRCF_BUILD_STATIC_LIBS "Build the static library?" ON)
48+OPTION (LIBRCF_BUILD_SHARED_LIBS "Build the shared library?" ON)
49+OPTION (LIBRCF_BUILD_DEMOS "Build demo programs?" ON)
50+
51+####################################################################
52+# CONFIGURATION #
53+####################################################################
54+INCLUDE (${CMAKE_SOURCE_DIR}/VERSION.cmake)
55+
Brad Bishopd7bf8c12018-02-25 22:55:05 -050056+SET (LIBRCF_LIBRARIES "-lpthread -ldl -latomic")
Brad Bishop6e60e8b2018-02-01 10:27:11 -050057+INCLUDE_DIRECTORIES (${CMAKE_SOURCE_DIR}/include)
58+
59+IF (LIBRCF_USE_OPENSSL)
60+ IF (NOT OPENSSL_FOUND)
61+ FIND_PACKAGE (OpenSSL REQUIRED)
62+ ENDIF (NOT OPENSSL_FOUND)
63+ INCLUDE_DIRECTORIES (${OPENSSL_INCLUDE_DIR})
64+ ADD_DEFINITIONS (-DRCF_USE_OPENSSL)
65+ENDIF (LIBRCF_USE_OPENSSL)
66+
67+IF (LIBRCF_OPENSSL_STATIC)
68+ LIST (APPEND LIBRCF_LIBRARIES ${OPENSSL_LIBRARIES})
69+ ADD_DEFINITIONS (-DRCF_OPENSSL_STATIC)
70+ENDIF (LIBRCF_OPENSSL_STATIC)
71+
72+IF (LIBRCF_USE_ZLIB)
73+ IF (NOT ZLIB_FOUND)
74+ FIND_PACKAGE (ZLIB REQUIRED)
75+ ENDIF (NOT ZLIB_FOUND)
76+ INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIR})
77+ ADD_DEFINITIONS (-DRCF_USE_ZLIB)
78+ENDIF (LIBRCF_USE_ZLIB)
79+
80+IF (LIBRCF_ZLIB_STATIC)
81+ LIST (APPEND LIBRCF_LIBRARIES ${ZLIB_LIBRARIES})
82+ ADD_DEFINITIONS (-DRCF_ZLIB_STATIC)
83+ENDIF (LIBRCF_ZLIB_STATIC)
84+
85+IF (LIBRCF_USE_SF_SERIALIZATION)
86+ IF (NOT Boost_SYSTEM_FOUND)
87+ FIND_PACKAGE (Boost REQUIRED COMPONENTS system)
88+ ENDIF (NOT Boost_SYSTEM_FOUND)
89+ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
90+ LIST (APPEND LIBRCF_LIBRARIES ${Boost_SYSTEM_LIBRARY})
91+ ADD_DEFINITIONS (-DRCF_USE_SF_SERIALIZATION)
92+ENDIF (LIBRCF_USE_SF_SERIALIZATION)
93+
94+IF (LIBRCF_USE_BOOST_SERIALIZATION)
95+ IF (NOT Boost_SERIALIZATION_FOUND)
96+ FIND_PACKAGE (Boost REQUIRED COMPONENTS serialization)
97+ ENDIF (NOT Boost_SERIALIZATION_FOUND)
98+ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
99+ LIST (APPEND LIBRCF_LIBRARIES ${Boost_SERIALIZATION_LIBRARY})
100+ ADD_DEFINITIONS (-DRCF_USE_BOOST_SERIALIZATION)
101+ENDIF (LIBRCF_USE_BOOST_SERIALIZATION)
102+
103+IF (LIBRCF_USE_BOOST_FILESYSTEM)
104+ IF (NOT Boost_FILESYSTEM_FOUND)
105+ FIND_PACKAGE (Boost REQUIRED COMPONENTS filesystem system)
106+ ENDIF (NOT Boost_FILESYSTEM_FOUND)
107+ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
108+ LIST (APPEND LIBRCF_LIBRARIES ${Boost_FILESYSTEM_LIBRARY})
109+ LIST (APPEND LIBRCF_LIBRARIES ${Boost_SYSTEM_LIBRARY})
110+ ADD_DEFINITIONS (-DRCF_USE_BOOST_FILESYSTEM)
111+ENDIF (LIBRCF_USE_BOOST_FILESYSTEM)
112+
113+IF (LIBRCF_USE_BOOST_ASIO)
114+ IF (NOT Boost_FOUND)
115+ FIND_PACKAGE (Boost REQUIRED)
116+ ENDIF (NOT Boost_FOUND)
117+ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
118+ ADD_DEFINITIONS (-DRCF_USE_BOOST_ASIO)
119+ENDIF (LIBRCF_USE_BOOST_ASIO)
120+
121+IF (LIBRCF_USE_PROTOBUF)
122+ IF(NOT Protobuf_FOUND)
123+ FIND_PACKAGE (Protobuf REQUIRED)
124+ ENDIF (NOT Protobuf_FOUND)
125+ INCLUDE_DIRECTORIES (${Protobuf_INCLUDE_DIR})
126+ LIST (APPEND LIBRCF_LIBRARIES ${Protobuf_LIBRARIES})
127+ ADD_DEFINITIONS (-DRCF_USE_PROTOBUF)
128+ENDIF (LIBRCF_USE_PROTOBUF)
129+
130+IF (LIBRCF_USE_JSON)
131+ IF (NOT LibJsonSpirit_FOUND)
132+ FIND_PACKAGE (LibJsonSpirit REQUIRED)
133+ ENDIF (NOT LibJsonSpirit_FOUND)
134+ INCLUDE_DIRECTORIES (${LibJsonSpirit_INCLUDE_DIR})
135+ LIST (APPEND LIBRCF_LIBRARIES ${LibJsonSpirit_LIBRARIES})
136+ ADD_DEFINITIONS (-DRCF_USE_JSON)
137+ENDIF (LIBRCF_USE_JSON)
138+
139+IF (LIBRCF_USE_IPV6)
140+ ADD_DEFINITIONS (-DRCF_USE_IPV6)
141+ENDIF (LIBRCF_USE_IPV6)
142+
143+IF (LIBRCF_USE_CUSTOM_ALLOCATOR)
144+ ADD_DEFINITIONS (-DRCF_USE_CUSTOM_ALLOCATOR)
145+ENDIF (LIBRCF_USE_CUSTOM_ALLOCATOR)
146+
147+IF (LIBRCF_BUILD_DLL)
148+ ADD_DEFINITIONS (-DRCF_BUILD_DLL)
149+ENDIF (LIBRCF_BUILD_DLL)
150+
151+IF (LIBRCF_AUTO_INIT_DEINIT)
152+ ADD_DEFINITIONS (-DRCF_AUTO_INIT_DEINIT)
153+ENDIF (LIBRCF_AUTO_INIT_DEINIT)
154+
155+####################################################################
156+# SUBDIRECTORY #
157+####################################################################
158+ADD_SUBDIRECTORY (src)
159+
160+IF (LIBRCF_BUILD_DEMOS)
161+ # Server
162+ ADD_EXECUTABLE (RcfServer demo/Server.cpp)
163+ TARGET_LINK_LIBRARIES (RcfServer rcf ${LIBRCF_LIBRARIES})
164+ INSTALL (TARGETS RcfServer DESTINATION ${CMAKE_INSTALL_BINDIR})
165+
166+ # Client
167+ ADD_EXECUTABLE (RcfClient demo/Client.cpp)
168+ TARGET_LINK_LIBRARIES (RcfClient rcf ${LIBRCF_LIBRARIES})
169+ INSTALL (TARGETS RcfClient DESTINATION ${CMAKE_INSTALL_BINDIR})
170+ENDIF (LIBRCF_BUILD_DEMOS)
171+
172+INSTALL (FILES ${CMAKE_SOURCE_DIR}/FindLibRcf.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/Modules)
173diff --git a/FindLibRcf.cmake b/FindLibRcf.cmake
174new file mode 100644
175index 0000000..9d7d8cd
176--- /dev/null
177+++ b/FindLibRcf.cmake
178@@ -0,0 +1,63 @@
179+# FindLibRcf - Find librcf headers and libraries.
180+#
181+# Sample:
182+#
183+# SET( LibRcf_USE_STATIC_LIBS OFF )
184+# FIND_PACKAGE( LibRcf REQUIRED )
185+# IF( LibRcf_FOUND )
186+# INCLUDE_DIRECTORIES( ${LibRcf_INCLUDE_DIRS} )
187+# TARGET_LINK_LIBRARIES( ... ${LibRcf_LIBRARIES} )
188+# ENDIF()
189+#
190+# Variables used by this module need to be set before calling find_package
191+#
192+# LibRcf_USE_STATIC_LIBS Can be set to ON to force the use of the static
193+# librcf libraries. Defaults to OFF.
194+#
195+# Variables provided by this module:
196+#
197+# LibRcf_FOUND Include dir, librcf libraries.
198+#
199+# LibRcf_LIBRARIES Link to these to use all the libraries you specified.
200+#
201+# LibRcf_INCLUDE_DIRS Include directories.
202+#
203+# For each component you specify in find_package(), the following (UPPER-CASE)
204+# variables are set to pick and choose components instead of just using LibRcf_LIBRARIES:
205+#
206+# LIBRCF_FOUND TRUE if librcf was found
207+# LIBRCF_LIBRARY librcf libraries
208+#
209+
210+# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
211+IF(LibRcf_USE_STATIC_LIBS)
212+ SET( _ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
213+ SET(CMAKE_FIND_LIBRARY_SUFFIXES .a )
214+ENDIF()
215+
216+# Look for the header files
217+UNSET(LibRcf_INCLUDE_DIRS CACHE)
218+FIND_PATH(LibRcf_INCLUDE_DIRS NAMES RCF/RcfClient.hpp)
219+
220+# Look for the core library
221+UNSET(LIBRCF_LIBRARY CACHE)
222+FIND_LIBRARY(LIBRCF_LIBRARY NAMES rcf)
223+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibRcf DEFAULT_MSG LIBRCF_LIBRARY LibRcf_INCLUDE_DIRS)
224+MARK_AS_ADVANCED(
225+ LIBRCF_FOUND
226+ LIBRCF_LIBRARY
227+)
228+
229+# Prepare return values and collectiong more components
230+SET(LibRcf_FOUND ${LIBRCF_FOUND})
231+SET(LibRcf_LIBRARIES ${LIBRCF_LIBRARY})
232+MARK_AS_ADVANCED(
233+ LibRcf_FOUND
234+ LibRcf_LIBRARIES
235+ LibRcf_INCLUDE_DIRS
236+)
237+
238+# Restore CMAKE_FIND_LIBRARY_SUFFIXES
239+IF(LibRcf_USE_STATIC_LIBS)
240+ SET(CMAKE_FIND_LIBRARY_SUFFIXES ${_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES} )
241+ENDIF()
242diff --git a/VERSION.cmake b/VERSION.cmake
243new file mode 100644
244index 0000000..8b4bcdc
245--- /dev/null
246+++ b/VERSION.cmake
247@@ -0,0 +1,21 @@
248+# ==================================================
249+# Versioning
250+# ==========
251+#
252+# MAJOR Major number for this branch.
253+#
254+# MINOR The most recent interface number this
255+# library implements.
256+#
257+# COMPATMINOR The latest binary compatible minor number
258+# this library implements.
259+#
260+# PATCH The implementation number of the current interface.
261+#
262+#
263+# - The package VERSION will be MAJOR.MINOR.PATCH.
264+#
265+
266+SET (LIBRCF_SOVERSION_MAJOR "2")
267+SET (LIBRCF_SOVERSION_MINOR "2")
268+SET (LIBRCF_SOVERSION_PATCH "0")
269diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
270new file mode 100755
271index 0000000..c227901
272--- /dev/null
273+++ b/src/CMakeLists.txt
274@@ -0,0 +1,25 @@
275+IF (NOT LIBRCF_BUILD_SHARED_LIBS)
276+ ADD_LIBRARY (rcf STATIC RCF/RCF.cpp)
277+ELSE (NOT LIBRCF_BUILD_SHARED_LIBS)
278+ ADD_LIBRARY (rcf SHARED RCF/RCF.cpp)
279+ TARGET_LINK_LIBRARIES (rcf ${LIBRCF_LIBRARIES})
280+ SET_TARGET_PROPERTIES (rcf PROPERTIES COMPILE_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
281+ SET_TARGET_PROPERTIES (rcf PROPERTIES VERSION ${LIBRCF_SOVERSION_MAJOR}.${LIBRCF_SOVERSION_MINOR}.${LIBRCF_SOVERSION_PATCH})
282+ENDIF (NOT LIBRCF_BUILD_SHARED_LIBS)
283+
284+SET_TARGET_PROPERTIES (rcf PROPERTIES PROJECT_LABEL "RCF Library")
285+SET_TARGET_PROPERTIES (rcf PROPERTIES OUTPUT_NAME "rcf")
286+SET_TARGET_PROPERTIES (rcf PROPERTIES SOVERSION ${LIBRCF_SOVERSION_MAJOR})
287+SET_TARGET_PROPERTIES (rcf PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_LIBDIR})
288+
289+INSTALL (DIRECTORY "${CMAKE_SOURCE_DIR}/include/RCF" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
290+INSTALL (DIRECTORY "${CMAKE_SOURCE_DIR}/include/SF" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
291+INSTALL (TARGETS rcf LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
292+
293+IF (LIBRCF_BUILD_STATIC_LIBS AND LIBRCF_BUILD_SHARED_LIBS)
294+ ADD_LIBRARY (rcf_static STATIC RCF/RCF.cpp)
295+ SET_TARGET_PROPERTIES (rcf_static PROPERTIES PROJECT_LABEL "RCF Static Library")
296+ SET_TARGET_PROPERTIES (rcf_static PROPERTIES OUTPUT_NAME "rcf")
297+ SET_TARGET_PROPERTIES (rcf_static PROPERTIES SOVERSION ${LIBRCF_SOVERSION_MAJOR})
298+ INSTALL (TARGETS rcf_static LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
299+ENDIF (LIBRCF_BUILD_STATIC_LIBS AND LIBRCF_BUILD_SHARED_LIBS)
300--
3011.9.1
302