From 613297214d78ee10111e74e90e025166ebbcad9f Mon Sep 17 00:00:00 2001 From: Peter Liu Date: Sun, 5 Mar 2017 16:15:40 +0100 Subject: [PATCH] Add CMake build files Upstream-Status: Pending Signed-off-by: Peter Liu --- CMakeLists.txt | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++ FindLibRcf.cmake | 63 +++++++++++++++++++++++ VERSION.cmake | 21 ++++++++ src/CMakeLists.txt | 25 +++++++++ 4 files changed, 256 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 FindLibRcf.cmake create mode 100644 VERSION.cmake create mode 100755 src/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f6e24be --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,147 @@ +PROJECT (librcf) + +CMAKE_MINIMUM_REQUIRED (VERSION 2.6) + +#################################################################### +# OPTION # +#################################################################### +OPTION (LIBRCF_USE_OPENSSL "Build with OpenSSL support?" OFF) +OPTION (LIBRCF_OPENSSL_STATIC "Enable static linking to OpenSSL?" OFF) +OPTION (LIBRCF_USE_ZLIB "Build with zlib support?" OFF) +OPTION (LIBRCF_ZLIB_STATIC "Enable static linking to zlib?" OFF) +OPTION (LIBRCF_USE_SF_SERIALIZATION "Build with SF serialization support?" ON) +OPTION (LIBRCF_USE_BOOST_SERIALIZATION "Build with Boost.Serialization support?" OFF) +OPTION (LIBRCF_USE_BOOST_FILESYSTEM "Build with Boost.Filesystem support (required for file transfer support)?" OFF) +OPTION (LIBRCF_USE_BOOST_ASIO "Build with Boost asio support?" ON) +OPTION (LIBRCF_USE_PROTOBUF "Build with Protocol Buffer support?" OFF) +OPTION (LIBRCF_USE_JSON "Build with JSON Spirit (required for JSON-RPC support)?" OFF) +OPTION (LIBRCF_USE_IPV6 "Build with IPv6 support?" OFF) +OPTION (LIBRCF_USE_CUSTOM_ALLOCATOR "Build with custom allocator support?" OFF) +OPTION (LIBRCF_BUILD_DLL "Build a DLL exporting RCF?" OFF) +OPTION (LIBRCF_AUTO_INIT_DEINIT "Enable automatic RCF initialization and deinitialization?" OFF) +OPTION (LIBRCF_BUILD_STATIC_LIBS "Build the static library?" ON) +OPTION (LIBRCF_BUILD_SHARED_LIBS "Build the shared library?" ON) +OPTION (LIBRCF_BUILD_DEMOS "Build demo programs?" ON) + +#################################################################### +# CONFIGURATION # +#################################################################### +INCLUDE (${CMAKE_SOURCE_DIR}/VERSION.cmake) + +SET (LIBRCF_LIBRARIES "-lpthread -ldl -latomic") +INCLUDE_DIRECTORIES (${CMAKE_SOURCE_DIR}/include) + +IF (LIBRCF_USE_OPENSSL) + IF (NOT OPENSSL_FOUND) + FIND_PACKAGE (OpenSSL REQUIRED) + ENDIF (NOT OPENSSL_FOUND) + INCLUDE_DIRECTORIES (${OPENSSL_INCLUDE_DIR}) + ADD_DEFINITIONS (-DRCF_USE_OPENSSL) +ENDIF (LIBRCF_USE_OPENSSL) + +IF (LIBRCF_OPENSSL_STATIC) + LIST (APPEND LIBRCF_LIBRARIES ${OPENSSL_LIBRARIES}) + ADD_DEFINITIONS (-DRCF_OPENSSL_STATIC) +ENDIF (LIBRCF_OPENSSL_STATIC) + +IF (LIBRCF_USE_ZLIB) + IF (NOT ZLIB_FOUND) + FIND_PACKAGE (ZLIB REQUIRED) + ENDIF (NOT ZLIB_FOUND) + INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIR}) + ADD_DEFINITIONS (-DRCF_USE_ZLIB) +ENDIF (LIBRCF_USE_ZLIB) + +IF (LIBRCF_ZLIB_STATIC) + LIST (APPEND LIBRCF_LIBRARIES ${ZLIB_LIBRARIES}) + ADD_DEFINITIONS (-DRCF_ZLIB_STATIC) +ENDIF (LIBRCF_ZLIB_STATIC) + +IF (LIBRCF_USE_SF_SERIALIZATION) + IF (NOT Boost_SYSTEM_FOUND) + FIND_PACKAGE (Boost REQUIRED COMPONENTS system) + ENDIF (NOT Boost_SYSTEM_FOUND) + INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR}) + LIST (APPEND LIBRCF_LIBRARIES ${Boost_SYSTEM_LIBRARY}) + ADD_DEFINITIONS (-DRCF_USE_SF_SERIALIZATION) +ENDIF (LIBRCF_USE_SF_SERIALIZATION) + +IF (LIBRCF_USE_BOOST_SERIALIZATION) + IF (NOT Boost_SERIALIZATION_FOUND) + FIND_PACKAGE (Boost REQUIRED COMPONENTS serialization) + ENDIF (NOT Boost_SERIALIZATION_FOUND) + INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR}) + LIST (APPEND LIBRCF_LIBRARIES ${Boost_SERIALIZATION_LIBRARY}) + ADD_DEFINITIONS (-DRCF_USE_BOOST_SERIALIZATION) +ENDIF (LIBRCF_USE_BOOST_SERIALIZATION) + +IF (LIBRCF_USE_BOOST_FILESYSTEM) + IF (NOT Boost_FILESYSTEM_FOUND) + FIND_PACKAGE (Boost REQUIRED COMPONENTS filesystem system) + ENDIF (NOT Boost_FILESYSTEM_FOUND) + INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR}) + LIST (APPEND LIBRCF_LIBRARIES ${Boost_FILESYSTEM_LIBRARY}) + LIST (APPEND LIBRCF_LIBRARIES ${Boost_SYSTEM_LIBRARY}) + ADD_DEFINITIONS (-DRCF_USE_BOOST_FILESYSTEM) +ENDIF (LIBRCF_USE_BOOST_FILESYSTEM) + +IF (LIBRCF_USE_BOOST_ASIO) + IF (NOT Boost_FOUND) + FIND_PACKAGE (Boost REQUIRED) + ENDIF (NOT Boost_FOUND) + INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR}) + ADD_DEFINITIONS (-DRCF_USE_BOOST_ASIO) +ENDIF (LIBRCF_USE_BOOST_ASIO) + +IF (LIBRCF_USE_PROTOBUF) + IF(NOT Protobuf_FOUND) + FIND_PACKAGE (Protobuf REQUIRED) + ENDIF (NOT Protobuf_FOUND) + INCLUDE_DIRECTORIES (${Protobuf_INCLUDE_DIR}) + LIST (APPEND LIBRCF_LIBRARIES ${Protobuf_LIBRARIES}) + ADD_DEFINITIONS (-DRCF_USE_PROTOBUF) +ENDIF (LIBRCF_USE_PROTOBUF) + +IF (LIBRCF_USE_JSON) + IF (NOT LibJsonSpirit_FOUND) + FIND_PACKAGE (LibJsonSpirit REQUIRED) + ENDIF (NOT LibJsonSpirit_FOUND) + INCLUDE_DIRECTORIES (${LibJsonSpirit_INCLUDE_DIR}) + LIST (APPEND LIBRCF_LIBRARIES ${LibJsonSpirit_LIBRARIES}) + ADD_DEFINITIONS (-DRCF_USE_JSON) +ENDIF (LIBRCF_USE_JSON) + +IF (LIBRCF_USE_IPV6) + ADD_DEFINITIONS (-DRCF_USE_IPV6) +ENDIF (LIBRCF_USE_IPV6) + +IF (LIBRCF_USE_CUSTOM_ALLOCATOR) + ADD_DEFINITIONS (-DRCF_USE_CUSTOM_ALLOCATOR) +ENDIF (LIBRCF_USE_CUSTOM_ALLOCATOR) + +IF (LIBRCF_BUILD_DLL) + ADD_DEFINITIONS (-DRCF_BUILD_DLL) +ENDIF (LIBRCF_BUILD_DLL) + +IF (LIBRCF_AUTO_INIT_DEINIT) + ADD_DEFINITIONS (-DRCF_AUTO_INIT_DEINIT) +ENDIF (LIBRCF_AUTO_INIT_DEINIT) + +#################################################################### +# SUBDIRECTORY # +#################################################################### +ADD_SUBDIRECTORY (src) + +IF (LIBRCF_BUILD_DEMOS) + # Server + ADD_EXECUTABLE (RcfServer demo/Server.cpp) + TARGET_LINK_LIBRARIES (RcfServer rcf ${LIBRCF_LIBRARIES}) + INSTALL (TARGETS RcfServer DESTINATION ${CMAKE_INSTALL_BINDIR}) + + # Client + ADD_EXECUTABLE (RcfClient demo/Client.cpp) + TARGET_LINK_LIBRARIES (RcfClient rcf ${LIBRCF_LIBRARIES}) + INSTALL (TARGETS RcfClient DESTINATION ${CMAKE_INSTALL_BINDIR}) +ENDIF (LIBRCF_BUILD_DEMOS) + +INSTALL (FILES ${CMAKE_SOURCE_DIR}/FindLibRcf.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/Modules) diff --git a/FindLibRcf.cmake b/FindLibRcf.cmake new file mode 100644 index 0000000..9d7d8cd --- /dev/null +++ b/FindLibRcf.cmake @@ -0,0 +1,63 @@ +# FindLibRcf - Find librcf headers and libraries. +# +# Sample: +# +# SET( LibRcf_USE_STATIC_LIBS OFF ) +# FIND_PACKAGE( LibRcf REQUIRED ) +# IF( LibRcf_FOUND ) +# INCLUDE_DIRECTORIES( ${LibRcf_INCLUDE_DIRS} ) +# TARGET_LINK_LIBRARIES( ... ${LibRcf_LIBRARIES} ) +# ENDIF() +# +# Variables used by this module need to be set before calling find_package +# +# LibRcf_USE_STATIC_LIBS Can be set to ON to force the use of the static +# librcf libraries. Defaults to OFF. +# +# Variables provided by this module: +# +# LibRcf_FOUND Include dir, librcf libraries. +# +# LibRcf_LIBRARIES Link to these to use all the libraries you specified. +# +# LibRcf_INCLUDE_DIRS Include directories. +# +# For each component you specify in find_package(), the following (UPPER-CASE) +# variables are set to pick and choose components instead of just using LibRcf_LIBRARIES: +# +# LIBRCF_FOUND TRUE if librcf was found +# LIBRCF_LIBRARY librcf libraries +# + +# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES +IF(LibRcf_USE_STATIC_LIBS) + SET( _ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + SET(CMAKE_FIND_LIBRARY_SUFFIXES .a ) +ENDIF() + +# Look for the header files +UNSET(LibRcf_INCLUDE_DIRS CACHE) +FIND_PATH(LibRcf_INCLUDE_DIRS NAMES RCF/RcfClient.hpp) + +# Look for the core library +UNSET(LIBRCF_LIBRARY CACHE) +FIND_LIBRARY(LIBRCF_LIBRARY NAMES rcf) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibRcf DEFAULT_MSG LIBRCF_LIBRARY LibRcf_INCLUDE_DIRS) +MARK_AS_ADVANCED( + LIBRCF_FOUND + LIBRCF_LIBRARY +) + +# Prepare return values and collectiong more components +SET(LibRcf_FOUND ${LIBRCF_FOUND}) +SET(LibRcf_LIBRARIES ${LIBRCF_LIBRARY}) +MARK_AS_ADVANCED( + LibRcf_FOUND + LibRcf_LIBRARIES + LibRcf_INCLUDE_DIRS +) + +# Restore CMAKE_FIND_LIBRARY_SUFFIXES +IF(LibRcf_USE_STATIC_LIBS) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ${_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES} ) +ENDIF() diff --git a/VERSION.cmake b/VERSION.cmake new file mode 100644 index 0000000..8b4bcdc --- /dev/null +++ b/VERSION.cmake @@ -0,0 +1,21 @@ +# ================================================== +# Versioning +# ========== +# +# MAJOR Major number for this branch. +# +# MINOR The most recent interface number this +# library implements. +# +# COMPATMINOR The latest binary compatible minor number +# this library implements. +# +# PATCH The implementation number of the current interface. +# +# +# - The package VERSION will be MAJOR.MINOR.PATCH. +# + +SET (LIBRCF_SOVERSION_MAJOR "2") +SET (LIBRCF_SOVERSION_MINOR "2") +SET (LIBRCF_SOVERSION_PATCH "0") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100755 index 0000000..c227901 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,25 @@ +IF (NOT LIBRCF_BUILD_SHARED_LIBS) + ADD_LIBRARY (rcf STATIC RCF/RCF.cpp) +ELSE (NOT LIBRCF_BUILD_SHARED_LIBS) + ADD_LIBRARY (rcf SHARED RCF/RCF.cpp) + TARGET_LINK_LIBRARIES (rcf ${LIBRCF_LIBRARIES}) + SET_TARGET_PROPERTIES (rcf PROPERTIES COMPILE_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) + SET_TARGET_PROPERTIES (rcf PROPERTIES VERSION ${LIBRCF_SOVERSION_MAJOR}.${LIBRCF_SOVERSION_MINOR}.${LIBRCF_SOVERSION_PATCH}) +ENDIF (NOT LIBRCF_BUILD_SHARED_LIBS) + +SET_TARGET_PROPERTIES (rcf PROPERTIES PROJECT_LABEL "RCF Library") +SET_TARGET_PROPERTIES (rcf PROPERTIES OUTPUT_NAME "rcf") +SET_TARGET_PROPERTIES (rcf PROPERTIES SOVERSION ${LIBRCF_SOVERSION_MAJOR}) +SET_TARGET_PROPERTIES (rcf PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_LIBDIR}) + +INSTALL (DIRECTORY "${CMAKE_SOURCE_DIR}/include/RCF" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +INSTALL (DIRECTORY "${CMAKE_SOURCE_DIR}/include/SF" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +INSTALL (TARGETS rcf LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +IF (LIBRCF_BUILD_STATIC_LIBS AND LIBRCF_BUILD_SHARED_LIBS) + ADD_LIBRARY (rcf_static STATIC RCF/RCF.cpp) + SET_TARGET_PROPERTIES (rcf_static PROPERTIES PROJECT_LABEL "RCF Static Library") + SET_TARGET_PROPERTIES (rcf_static PROPERTIES OUTPUT_NAME "rcf") + SET_TARGET_PROPERTIES (rcf_static PROPERTIES SOVERSION ${LIBRCF_SOVERSION_MAJOR}) + INSTALL (TARGETS rcf_static LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +ENDIF (LIBRCF_BUILD_STATIC_LIBS AND LIBRCF_BUILD_SHARED_LIBS) -- 1.9.1