1
cmake_minimum_required(VERSION 2.6)
2
project(DSS)
3
4
if(WIN32)
5
  option(WITH_TESTS "Include test-suite" OFF)
6
else(WIN32)
7
  option(WITH_TESTS "Include test-suite" ON)
8
endif(WIN32)
9
option(WITH_GCOV "Compile coverage information into the dss" OFF)
10
set(LIBDSM_PREFIX CACHE STRING "Location of libdsm-api")
11
12
if(NOT WITH_DATADIR)
13
  set(WITH_DATADIR "${CMAKE_INSTALL_PREFIX}/share/dss/data" CACHE FILEPATH "Data directory")
14
endif(NOT WITH_DATADIR)
15
16
if(NOT WITH_CONFIGDIR)
17
  set(WITH_CONFIGDIR "${WITH_DATADIR}" CACHE FILEPATH "Config directory")
18
endif(NOT WITH_CONFIGDIR)
19
20
if(NOT WITH_WEBROOTDIR)
21
  set(WITH_WEBROOTDIR "${WITH_DATADIR}/webroot" CACHE FILEPATH "Webroot directory")
22
endif(NOT WITH_WEBROOTDIR)
23
24
if(NOT WITH_JSLOGDIR)
25
  set(WITH_JSLOGDIR "${WITH_DATADIR}/logs" CACHE FILEPATH "JS Log directory")
26
endif(NOT WITH_JSLOGDIR)
27
28
if(NOT WITH_SAVEDPROPSDIR)
29
  set(WITH_SAVEDPROPSDIR "${WITH_DATADIR}/savedprops" CACHE FILEPATH "Saved properties directory")
30
endif(NOT WITH_SAVEDPROPSDIR)
31
32
set(DSS_GEN_VERSION_CMD "")
33
if(WIN32)
34
  set(DSS_GEN_VERSION_CMD "tools/dss_gen_version_win32.bat")
35
endif(WIN32)
36
if(UNIX)
37
  set(DSS_GEN_VERSION_CMD "tools/dss_gen_version_unix.sh")
38
endif(UNIX)
39
40
add_custom_target(build_info.h ALL
41
        COMMAND ${DSS_GEN_VERSION_CMD} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
42
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
43
)
44
add_definitions(-DHAVE_BUILD_INFO_H)
45
46
include_directories(${CMAKE_CURRENT_BINARY_DIR})
47
48
49
add_definitions(-DXP_UNIX -DUSE_LIBXML)
50
add_definitions(-Wall)
51
include_directories(external)
52
include_directories(${DSS_SOURCE_DIR})
53
54
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
55
  include(CheckCXXCompilerFlag)
56
  check_cxx_compiler_flag("-Wno-deprecated" HAVE_WNO_DEPRECATED)
57
  if(HAVE_WNO_DEPRECATED)
58
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
59
  endif(HAVE_WNO_DEPRECATED)
60
 
61
  #check_cxx_compiler_flag("-Wold-style-cast" HAVE_WOLD_STYLE_CAST)
62
  #if(HAVE_WOLD_STYLE_CAST)
63
  #  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wold-style-cast")
64
  #endif(HAVE_WOLD_STYLE_CAST)
65
  if(WITH_GCOV)
66
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
67
    set(CMAKE_LDFLAGS "${CMAKE_LDFLAGS} -fprofile-arcs -ftest-coverage")
68
  endif(WITH_GCOV)
69
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
70
71
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
72
  set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} /opt/local/include)
73
  link_directories(/opt/local/lib)
74
  set(CMAKE_OSX_ARCHITECTURES "x86_64")
75
  set(WITH_BONJOUR 1)
76
  set(HAVE_DNS_SD 1)
77
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
78
79
# header tests
80
include(CheckIncludeFiles)
81
include(CheckIncludeFileCXX)
82
include(CheckFunctionExists)
83
84
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules")
85
if(WIN32)
86
	set(REQUIRED_LIBS dl ws2_32 wsock32)
87
else(WIN32)
88
	set(REQUIRED_LIBS dl)
89
endif(WIN32)
90
check_include_files(stdint.h HAVE_STDINT)
91
92
# check for backtrace
93
check_function_exists(backtrace HAVE_BACKTRACE)
94
check_function_exists(backtrace_symbols HAVE_BACKTRACE_SYMBOLS)
95
96
include(CheckLibraryExists)
97
check_library_exists(rt clock_gettime "" HAVE_RT)
98
if(HAVE_RT)
99
  set(REQUIRED_LIBS ${REQUIRED_LIBS} rt)
100
endif(HAVE_RT)
101
102
# check for a library providing zeroconf (avahi/dnssd)
103
find_package(Avahi)
104
if(AVAHI_FOUND)
105
  include_directories(${AVAHI_INCLUDE_DIRS})
106
  set(REQUIRED_LIBS ${REQUIRED_LIBS} ${AVAHI_LIBRARIES})
107
  set(WITH_BONJOUR 1)
108
  set(HAVE_AVAHI 1)
109
else(AVAHI_FOUND)
110
  find_package(DNSSD)
111
  if(DNSSD_FOUND)
112
    include_directories(${DNSSD_INCLUDE_DIRS})
113
    set(REQUIRED_LIBS ${REQUIRED_LIBS} ${DNSSD_LIBRARIES})
114
    set(WITH_BONJOUR 1)
115
    set(HAVE_DNS_SD 1)
116
  endif(DNSSD_FOUND)
117
endif(AVAHI_FOUND)
118
119
# check for SpiderMonkey headers and library
120
set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DXP_UNIX)
121
find_package(SpiderMonkey REQUIRED)
122
include_directories(${SPIDERMONKEY_INCLUDE_DIRS})
123
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${SPIDERMONKEY_INCLUDE_DIRS})
124
check_include_files(mozjs/jsapi.h HAVE_MOZJS_JSAPI_H)
125
check_include_files(js/jsapi.h HAVE_JS_JSAPI_H)
126
check_include_files(jsapi.h HAVE_JSAPI_H)
127
set(REQUIRED_LIBS ${REQUIRED_LIBS} ${SPIDERMONKEY_LIBRARIES})
128
if(DEFINED SPIDERMONKEY_LIBRARY_DIRS)
129
  link_directories(${SPIDERMONKEY_LIBRARY_DIRS})
130
endif()
131
132
# check for pthread
133
find_package(Threads REQUIRED)
134
135
include(GGLCheckFunctionExists)
136
set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DJS_THREADSAFE)
137
set(CMAKE_REQUIRED_LIBRARIES ${SPIDERMONKEY_LIBRARIES})
138
set(CMAKE_REQUIRED_LINK_DIR ${SPIDERMONKEY_LIBRARY_DIRS})
139
GGL_CHECK_FUNCTION_EXISTS(JS_ClearContextThread HAVE_THREADSAFE_JS)
140
if(HAVE_THREADSAFE_JS)
141
  add_definitions(-DJS_THREADSAFE)
142
else()
143
  MESSAGE (FATAL_ERROR "Need SpiderMonkey (libjs) built with JS_THREADSAFE")
144
endif()
145
146
include(${CMAKE_ROOT}/Modules/FindOpenSSL.cmake)
147
if (OPENSSL_FOUND)
148
  set(REQUIRED_LIBS ${REQUIRED_LIBS} ${OPENSSL_LIBRARIES})
149
  include_directories(${OPENSSL_INCLUDE_DIR})
150
else()
151
  MESSAGE (FATAL_ERROR "Cannot build without OpenSSL. Please install
152
                    OpenSSL")
153
endif()
154
add_definitions(-DJS_THREADSAFE)
155
156
# check for gsoap headers and library
157
find_package(GSOAP REQUIRED)
158
include_directories(${GSOAP_INCLUDE_DIRS})
159
check_include_files(stdsoap2.h HAVE_STDSOAP2_H)
160
set(REQUIRED_LIBS ${REQUIRED_LIBS} ${GSOAP_LIBRARIES})
161
162
# check for libical headers and library
163
find_package(Libical REQUIRED)
164
include_directories(${LIBICAL_INCLUDE_DIRS})
165
check_include_files(libical/ical.h HAVE_LIBICAL_ICAL_H)
166
set(REQUIRED_LIBS ${REQUIRED_LIBS} ${LIBICAL_LIBRARIES})
167
168
# check for libpoco headers and library
169
find_package(Poco REQUIRED)
170
include_directories(${POCO_INCLUDE_DIRS})
171
set(REQUIRED_LIBS ${REQUIRED_LIBS} ${POCO_LIBRARIES} PocoFoundation PocoNet)
172
173
# check for libxml
174
find_package(LibXml2 REQUIRED)
175
include_directories(${LIBXML2_INCLUDE_DIR})
176
set(REQUIRED_LIBS ${REQUIRED_LIBS} ${LIBXML2_LIBRARIES})
177
178
# generate config.h header file
179
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
180
               ${CMAKE_CURRENT_BINARY_DIR}/config.h)
181
add_definitions(-DHAVE_CONFIG_H)
182
183
set(BOOST_REQUIRED_LIBS thread filesystem system program_options)
184
185
# check for Boost unit testing
186
if(WITH_TESTS)
187
  set(BOOST_REQUIRED_LIBS unit_test_framework ${BOOST_REQUIRED_LIBS})
188
endif(WITH_TESTS)
189
190
# check for Boost
191
set(Boost_USE_MULTITHREADED ON)
192
find_package(Boost 1.35.0 COMPONENTS ${BOOST_REQUIRED_LIBS})
193
if(Boost_FOUND)
194
  set(REQUIRED_LIBS ${Boost_LIBRARIES} ${REQUIRED_LIBS})
195
else()
196
  MESSAGE (FATAL_ERROR "Cannot build without Boost.")
197
endif()
198
199
if(CMAKE_HAVE_PTHREAD_CREATE)
200
  set(REQUIRED_LIBS ${REQUIRED_LIBS} pthread)
201
endif(CMAKE_HAVE_PTHREAD_CREATE)
202
203
# libdsm-api
204
if(LIBDSM_PREFIX)
205
  link_directories(${LIBDSM_PREFIX}/lib)
206
  include_directories(${LIBDSM_PREFIX}/include)
207
endif()
208
209
set(REQUIRED_LIBS ${REQUIRED_LIBS} dsm-api-v2)
210
211
#include test-directory if needed
212
set(TEST_LIB)
213
if(WITH_TESTS)
214
  set(TEST_LIB tests)
215
  add_subdirectory(tests)
216
  add_dependencies(dsstests build_info.h)
217
endif(WITH_TESTS)
218
219
add_subdirectory(core)
220
add_subdirectory(unix)
221
add_subdirectory(webservices)
222
add_subdirectory(external)
223
add_subdirectory(doc)
224
225
add_executable(dss main.cpp namespaces.cpp)
226
227
target_link_libraries(dss ${TEST_LIB} core ds485 model unix webservices simulation core
228
                          mongoose
229
                          ${REQUIRED_LIBS})
230
231
add_dependencies(dss build_info.h)
232
233
## -- install targets:
234
install(TARGETS dss RUNTIME DESTINATION bin)
235
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/
236
		  DESTINATION ${WITH_DATADIR}
237
		  PATTERN "webroot" EXCLUDE
238
		  PATTERN "*.xml" EXCLUDE
239
		  PATTERN "*.js"
240
		  )
241
242
243
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/webroot/ DESTINATION ${WITH_WEBROOTDIR})
244
install(FILES
245
          ${CMAKE_CURRENT_SOURCE_DIR}/data/config.xml
246
          ${CMAKE_CURRENT_SOURCE_DIR}/data/subscriptions.xml
247
          ${CMAKE_CURRENT_SOURCE_DIR}/data/sim.xml
248
	DESTINATION ${WITH_CONFIGDIR}
249
       )
250
251
252
add_custom_target(debian
253
	COMMAND dpkg-buildpackage -rfakeroot
254
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
255
)