source: nscp/CMakeLists.txt @ 2018659

0.4.00.4.10.4.2
Last change on this file since 2018659 was 2018659, checked in by Michael Medin <michael@…>, 3 years ago

Added protocol buffers for internal channels (only command as of now) this means this builds lacks "performance data" (as it has yet to be re-added) as well as requires changes to plugins as the API is NEW!

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