| 1 | cmake_minimum_required(VERSION 2.6) |
|---|
| 2 | |
|---|
| 3 | include(build.cmake) |
|---|
| 4 | |
|---|
| 5 | PROJECT(NSCP) |
|---|
| 6 | |
|---|
| 7 | SET(VERSION_SERIES 0) |
|---|
| 8 | SET(VERSION_MAJOR 4) |
|---|
| 9 | SET(VERSION_MINOR 0) |
|---|
| 10 | |
|---|
| 11 | IF(NOT SHARED_LIBS) |
|---|
| 12 | IF(WIN32) |
|---|
| 13 | OPTION(SHARED_LIBS "Compile shared libraries" OFF) |
|---|
| 14 | ELSE(WIN32) |
|---|
| 15 | OPTION(SHARED_LIBS "Compile shared libraries" ON) |
|---|
| 16 | ENDIF(WIN32) |
|---|
| 17 | ENDIF(NOT SHARED_LIBS) |
|---|
| 18 | |
|---|
| 19 | IF(NOT SHARED_LIBS) |
|---|
| 20 | SET(NSCP_STATIC true) |
|---|
| 21 | ENDIF(NOT SHARED_LIBS) |
|---|
| 22 | |
|---|
| 23 | IF(NOT MULTI_THREADED) |
|---|
| 24 | OPTION(MULTI_THREADED "Build multi-threaded httpd deamon (if possible)" ON) |
|---|
| 25 | ENDIF(NOT MULTI_THREADED) |
|---|
| 26 | |
|---|
| 27 | SET(NSCP_INCLUDE_PATH "${NSCP_SOURCE_DIR}/include" CACHE PATH "directory containing NSCP specific includes") |
|---|
| 28 | INCLUDE_DIRECTORIES(${NSCP_INCLUDE_PATH}) |
|---|
| 29 | |
|---|
| 30 | SET(BOOST_LIBRARYDIR ${BOOST_LIBRARYDIR} CACHE PATH "") |
|---|
| 31 | SET(BOOST_INCLUDEDIR ${BOOST_INCLUDEDIR} CACHE PATH "") |
|---|
| 32 | SET(BOOST_LIB_SUFFIX ${BOOST_LIB_SUFFIX} CACHE STRING "Look for Boost libraries ending with this") |
|---|
| 33 | |
|---|
| 34 | IF(WIN32) |
|---|
| 35 | SET(LIB_INSTALL_DIR "lib" CACHE STRING "Default path for libraries within ${CMAKE_INSTALL_PREFIX}") |
|---|
| 36 | SET(RUNDIR "c:/nscp" CACHE PATH "Not really used in WIN32") |
|---|
| 37 | |
|---|
| 38 | |
|---|
| 39 | #SET(BOOST_VERSION "1_34_1" CACHE STRING "Use boost version in BOOST_DIR") |
|---|
| 40 | #OPTION(BOOST_DYNAMIC "Link to boost DLLs (OFF means static link)" OFF) |
|---|
| 41 | |
|---|
| 42 | ELSE(WIN32) |
|---|
| 43 | SET(USERLIB_ROOT /usr CACHE PATH "Other installation prefix for dependent libraries") |
|---|
| 44 | SET(LIB_INSTALL_DIR "lib" CACHE STRING "Default path for libraries within ${CMAKE_INSTALL_PREFIX}") |
|---|
| 45 | SET(RUNDIR "/usr/wt/run" CACHE PATH "Default path for wt session management (only used by FCGI connector; not relative to CMAKE_INSTALL_PREFIX)") |
|---|
| 46 | SET(CONFIGURATION /etc/nscp/boot.ini CACHE PATH "Path to the boot configuration file") |
|---|
| 47 | SET(MAIN_CONFIGURATION /etc/nscp/nscp.xml CACHE PATH "Path for the client configurtion file") |
|---|
| 48 | SET(DEPLOYROOT /usr/bin CACHE PATH "Path to deploy examples into)") |
|---|
| 49 | ENDIF(WIN32) |
|---|
| 50 | |
|---|
| 51 | SET(OPENSSL_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR} CACHE PATH "Look for OPENSSL headers here") |
|---|
| 52 | SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} CACHE PATH "Look for libraries here") |
|---|
| 53 | |
|---|
| 54 | FIND_PACKAGE(OpenSSL) |
|---|
| 55 | if(OPENSSL_FOUND) |
|---|
| 56 | if(WIN32) |
|---|
| 57 | FIND_LIBRARY(LIB_EAY_DEBUG NAMES libeay32MDd libeay32) |
|---|
| 58 | FIND_LIBRARY(LIB_EAY_RELEASE NAMES libeay32MD libeay32) |
|---|
| 59 | IF(LIB_EAY_DEBUG AND LIB_EAY_RELEASE) |
|---|
| 60 | SET(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} optimized ${LIB_EAY_RELEASE} debug ${LIB_EAY_DEBUG}) |
|---|
| 61 | ELSE(LIB_EAY_DEBUG AND LIB_EAY_RELEASE) |
|---|
| 62 | SET(OPENSSL_FOUND FALSE) |
|---|
| 63 | SET(OPENSSL_LIBRARIES NOTFOUND) |
|---|
| 64 | MESSAGE(STATUS "Could not find the debug and release version of openssl") |
|---|
| 65 | ENDIF(LIB_EAY_DEBUG AND LIB_EAY_RELEASE) |
|---|
| 66 | endif(WIN32) |
|---|
| 67 | endif(OPENSSL_FOUND) |
|---|
| 68 | |
|---|
| 69 | if(OPENSSL_FOUND) |
|---|
| 70 | message(STATUS, "Found openssl: ${OPENSSL_LIBRARIES}") |
|---|
| 71 | SET(NSCP_GLOBAL_DEFINES ${NSCP_GLOBAL_DEFINES} -DUSE_SSL) |
|---|
| 72 | else(OPENSSL_FOUND) |
|---|
| 73 | message(STATUS, "openssl NOT found (no ssl support)") |
|---|
| 74 | endif(OPENSSL_FOUND) |
|---|
| 75 | |
|---|
| 76 | FIND_PACKAGE(Boost COMPONENTS system filesystem thread REQUIRED) |
|---|
| 77 | |
|---|
| 78 | if(Boost_FOUND) |
|---|
| 79 | message(STATUS, "Found boost in: ${Boost_INCLUDE_DIRS}") |
|---|
| 80 | else(Boost_FOUND) |
|---|
| 81 | message(FATAL_ERROR, "boost NOT fround: ${Boost_ERROR_REASON}") |
|---|
| 82 | endif(Boost_FOUND) |
|---|
| 83 | |
|---|
| 84 | #INCLUDE(cmake/WtFindAsio.txt) |
|---|
| 85 | #INCLUDE(cmake/WtFindSsl.txt) |
|---|
| 86 | #INCLUDE(cmake/FindICU.cmake) |
|---|
| 87 | |
|---|
| 88 | |
|---|
| 89 | |
|---|
| 90 | #IF(NOT WIN32) |
|---|
| 91 | # FIND_PACKAGE(ICU REQUIRED) |
|---|
| 92 | # IF(NOT ICU_FOUND) |
|---|
| 93 | # MESSAGE(FATAL_ERROR "ICU package not found..") |
|---|
| 94 | # ELSE(NOT ICU_FOUND) |
|---|
| 95 | # ADD_DEFINITIONS( -DSI_CONVERT_ICU ) |
|---|
| 96 | # ENDIF(NOT ICU_FOUND) |
|---|
| 97 | #ENDIF(NOT WIN32) |
|---|
| 98 | |
|---|
| 99 | IF(NOT WIN32) |
|---|
| 100 | FIND_PACKAGE(Threads REQUIRED) |
|---|
| 101 | IF (NOT CMAKE_USE_PTHREADS_INIT) |
|---|
| 102 | message(FATAL_ERROR "Could not find POSIX threads") |
|---|
| 103 | ELSE (NOT CMAKE_USE_PTHREADS_INIT) |
|---|
| 104 | #add_definitions(-D_REENTRANT) |
|---|
| 105 | ENDIF (NOT CMAKE_USE_PTHREADS_INIT) |
|---|
| 106 | FIND_PACKAGE(Threads REQUIRED) |
|---|
| 107 | ENDIF(NOT WIN32) |
|---|
| 108 | |
|---|
| 109 | |
|---|
| 110 | SET(NSCP_GLOBAL_DEFINES ${NSCP_GLOBAL_DEFINES} -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0400) |
|---|
| 111 | |
|---|
| 112 | IF(CMAKE_HOST_UNIX) |
|---|
| 113 | SET(UNIX_FLAVOUR LINUX CACHE STRING "Choose your unix flavour UNIX, AIX, HPUX" FORCE) |
|---|
| 114 | IF(UNIX_FLAVOUR STREQUAL LINUX) |
|---|
| 115 | SET(NSCP_GLOBAL_DEFINES ${NSCP_GLOBAL_DEFINES} -DLINUX) |
|---|
| 116 | ENDIF(UNIX_FLAVOUR STREQUAL LINUX) |
|---|
| 117 | |
|---|
| 118 | SET(EXTRA_LIBS ${EXTRA_LIBS} ${CMAKE_DL_LIBS}) |
|---|
| 119 | ENDIF() |
|---|
| 120 | |
|---|
| 121 | # Boost is used nearly everywhere, so we can put these here |
|---|
| 122 | INCLUDE_DIRECTORIES(${BOOST_INCLUDE_DIRS}) |
|---|
| 123 | LINK_DIRECTORIES(${BOOST_LIB_DIRS}) |
|---|
| 124 | IF(WIN32) |
|---|
| 125 | IF(BOOST_DYNAMIC) |
|---|
| 126 | ADD_DEFINITIONS(-DBOOST_ALL_DYN_LINK) |
|---|
| 127 | ENDIF(BOOST_DYNAMIC) |
|---|
| 128 | set (EXTRA_LIBS ${EXTRA_LIBS} Userenv ole32) |
|---|
| 129 | ENDIF(WIN32) |
|---|
| 130 | |
|---|
| 131 | IF(NOT CMAKE_BUILD_TYPE) |
|---|
| 132 | SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING |
|---|
| 133 | "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." |
|---|
| 134 | FORCE) |
|---|
| 135 | ENDIF(NOT CMAKE_BUILD_TYPE) |
|---|
| 136 | |
|---|
| 137 | # Compile time constants & make sure our build finds it |
|---|
| 138 | CONFIGURE_FILE( |
|---|
| 139 | ${NSCP_INCLUDE_PATH}/config.h.in |
|---|
| 140 | ${NSCP_INCLUDE_PATH}/config.h |
|---|
| 141 | ) |
|---|
| 142 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) |
|---|
| 143 | INCLUDE_DIRECTORIES(${NSCP_LOCAL_INCLUDE_PATH}) |
|---|
| 144 | INSTALL_FILES(/include FILES ${WCONFIG_H_PATH}) |
|---|
| 145 | |
|---|
| 146 | add_definitions(-DUNICODE -D_UNICODE) |
|---|
| 147 | |
|---|
| 148 | include_directories("${PROJECT_BINARY_DIR}") |
|---|
| 149 | |
|---|
| 150 | MESSAGE(STATUS "Build path: ${PROJECT_BINARY_DIR}") |
|---|
| 151 | ADD_SUBDIRECTORY("service") |
|---|
| 152 | |
|---|
| 153 | SET(ALL_MODULE_NAMES) |
|---|
| 154 | FILE(GLOB ALL_MODULES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "modules/*/CMakeLists.txt") |
|---|
| 155 | foreach(CURRENT_MODULE ${ALL_MODULES}) |
|---|
| 156 | get_filename_component(CURRENT_MODULE_PATH ${CURRENT_MODULE} PATH) |
|---|
| 157 | get_filename_component(CURRENT_MODULE_NAME ${CURRENT_MODULE_PATH} NAME) |
|---|
| 158 | message(STATUS "Adding module: ${CURRENT_MODULE_PATH} (${CURRENT_MODULE_NAME})") |
|---|
| 159 | ADD_SUBDIRECTORY("${CURRENT_MODULE_PATH}") |
|---|
| 160 | SET(ALL_MODULE_NAMES ${ALL_MODULE_NAMES} ${CURRENT_MODULE_NAME}) |
|---|
| 161 | endforeach(CURRENT_MODULE ${ALL_MODULES}) |
|---|
| 162 | |
|---|
| 163 | |
|---|
| 164 | SET_TARGET_PROPERTIES("nsclient++" ${ALL_MODULE_NAMES} PROPERTIES |
|---|
| 165 | RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}" |
|---|
| 166 | LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/modules" |
|---|
| 167 | MODULE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/modules" |
|---|
| 168 | COMPILE_DEFINITIONS_DEBUG _DEBUG |
|---|
| 169 | ) |
|---|
| 170 | |
|---|
| 171 | if (MSVC_IDE) |
|---|
| 172 | # hack to get around the "Debug" and "Release" directories cmake tries to add on Windows |
|---|
| 173 | set_target_properties ("nsclient++" ${ALL_MODULE_NAMES} PROPERTIES PREFIX "../") |
|---|
| 174 | endif() |
|---|