cmake_minimum_required(VERSION 2.8) project(libjson-rpc-cpp) cmake_policy(SET CMP0054 OLD) # list command no longer ignores empty elements cmake_policy(SET CMP0007 NEW) cmake_policy(SET CMP0012 NEW) if (${CMAKE_MAJOR_VERSION} GREATER 2) # old policy do not use MACOSX_RPATH cmake_policy(SET CMP0042 OLD) endif() set(MAJOR_VERSION 0) set(MINOR_VERSION 7) set(PATCH_VERSION 0) set(SO_VERSION 0) option (BUILD_SHARED_LIBS "Build shared libraries" ON) option (BUILD_STATIC_LIBS "Build static libraries" OFF) if (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) message(FATAL_ERROR "Both BUILD_SHARED_LIBS and BUILD_STATIC_LIBS are disabled") endif() # defaults for modules that can be enabled/disabled if(UNIX) option (UNIX_DOMAIN_SOCKET_SERVER "Include Unix Domain Socket server" ON) option (UNIX_DOMAIN_SOCKET_CLIENT "Include Unix Domain Socket client" ON) endif(UNIX) option (TCP_SOCKET_SERVER "Include Tcp Socket server" OFF) option (TCP_SOCKET_CLIENT "Include Tcp Socket client" OFF) option (HTTP_SERVER "Include HTTP server using libmicrohttpd" ON) option (HTTP_CLIENT "Include HTTP client support using curl" ON) option (COMPILE_TESTS "Compile test framework" ON) option (COMPILE_STUBGEN "Compile the stubgenerator" ON) option (COMPILE_EXAMPLES "Compile example programs" ON) # print actual settings if(UNIX) message(STATUS "UNIX_DOMAIN_SOCKET_SERVER: ${UNIX_DOMAIN_SOCKET_SERVER}") message(STATUS "UNIX_DOMAIN_SOCKET_CLIENT: ${UNIX_DOMAIN_SOCKET_CLIENT}") endif(UNIX) message(STATUS "TCP_SOCKET_SERVER: ${TCP_SOCKET_SERVER}") message(STATUS "TCP_SOCKET_CLIENT: ${TCP_SOCKET_CLIENT}") message(STATUS "HTTP_SERVER: ${HTTP_SERVER}") message(STATUS "HTTP_CLIENT: ${HTTP_CLIENT}") if(UNIX) message(STATUS "UNIXDOMAINSOCKET_SERVER: ${UNIX_DOMAIN_SOCKET_SERVER}") message(STATUS "UNIXDOMAINSOCKET_CLIENT: ${UNIX_DOMAIN_SOCKET_CLIENT}") endif(UNIX) message(STATUS "COMPILE_TESTS: ${COMPILE_TESTS}") message(STATUS "COMPILE_STUBGEN: ${COMPILE_STUBGEN}") message(STATUS "COMPILE_EXAMPLES: ${COMPILE_EXAMPLES}") # setup directory where we should look for cmake files set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") # setup dependencies find_package(Jsoncpp REQUIRED) find_package(Threads) if(COMPILE_STUBGEN) find_package(Argtable REQUIRED) endif(COMPILE_STUBGEN) if(HTTP_CLIENT) find_package(CURL REQUIRED) endif(HTTP_CLIENT) if (HTTP_SERVER) find_package(MHD REQUIRED) endif(HTTP_SERVER) find_package(Doxygen) if (COMPILE_TESTS) find_package(Catch REQUIRED) include_directories (${CATCH_INCLUDE_DIRS}) endif(COMPILE_TESTS) # setup global include_directories (for backwards compatibility) include_directories("${CMAKE_BINARY_DIR}/gen/") include_directories("${CMAKE_BINARY_DIR}/gen/jsonrpccpp/common") # the core framework add_subdirectory(src/jsonrpccpp) #the stubgenerator if (COMPILE_STUBGEN) add_subdirectory(src/stubgenerator) endif (COMPILE_STUBGEN) # setup examples if (COMPILE_EXAMPLES) add_subdirectory(src/examples) endif(COMPILE_EXAMPLES) # setup test suite if (COMPILE_TESTS) enable_testing(true) add_subdirectory(src/test) endif(COMPILE_TESTS) # create documentation if (DOXYGEN_FOUND) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doc) message(STATUS "Found doxygen: ${DOXYGEN_EXECUTABLE}") configure_file("${PROJECT_SOURCE_DIR}/doc/doxyfile.in" "${CMAKE_BINARY_DIR}/Doxyfile" @ONLY) add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc COMMENT "Generating API documentation") endif(DOXYGEN_FOUND) # setup uninstall target configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY ) add_custom_target( uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) # packaging stuff include(CMakePackaging)