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