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