ec2782dcbad4302ed2162b7f8d96b0deea810364
[profile/ivi/genivi/genivi-audio-manager.git] / CMakeLists.txt
1 # Copyright (C) 2012, BMW AG
2 #
3 # This file is part of GENIVI Project AudioManager.
4
5 # Contributions are licensed to the GENIVI Alliance under one or more
6 # Contribution License Agreements.
7
8 # copyright
9 # This Source Code Form is subject to the terms of the
10 # Mozilla Public License, v. 2.0. If a  copy of the MPL was not distributed with
11 # this file, You can obtain one at http://mozilla.org/MPL/2.0/.
12
13 # author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012
14 #
15 # For further information see http://www.genivi.org/.
16 #
17
18
19 cmake_minimum_required(VERSION 2.6)
20
21 execute_process(COMMAND git describe --tags WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
22                 OUTPUT_VARIABLE DAEMONVERSION 
23                 OUTPUT_STRIP_TRAILING_WHITESPACE)           
24
25 IF (NOT DAEMONVERSION)
26     #Can be changed via passing -DVERSION="XXX" to cmake
27     IF(NOT DEFINED VERSION)
28         SET( DAEMONVERSION "homebrew-${CMAKE_SOURCE_DIR}" )
29     ELSE (NOT DEFINED VERSION)
30         SET( DAEMONVERSION "${VERSION}" )   
31     ENDIF(NOT DEFINED VERSION)
32 ELSE (NOT DAEMONVERSION)
33     STRING(REGEX REPLACE "(-)[^-]+$" "" DAEMONVERSION ${DAEMONVERSION})
34     STRING(REGEX REPLACE "-" "." DAEMONVERSION ${DAEMONVERSION})
35 ENDIF(NOT DAEMONVERSION)
36
37 message(STATUS "Build Version ${DAEMONVERSION}")
38
39 execute_process(COMMAND git log --pretty=short WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
40                 OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG)
41
42 PROJECT(AudioManagerDeamon)
43
44 FIND_PACKAGE(PkgConfig)
45
46 OPTION( WITH_DBUS_WRAPPER 
47         "Enable Dbus Wrapper Support" ON )
48         
49 OPTION( WITH_DLT 
50     "Enable automotive-DLT Support" ON )
51
52 OPTION( WITH_TESTS
53         "Build together with all available unitTest" ON )
54
55 OPTION( WITH_DOCUMENTATION
56         "Build together with Doxygen Documentation" OFF )
57
58 OPTION( WITH_PLUGIN_COMMAND
59         "Build command pluings" ON)
60
61 OPTION( WITH_PLUGIN_CONTROL
62         "Build control plugin" ON)
63
64 OPTION( WITH_PLUGIN_ROUTING
65         "Build routing pluings" ON)
66
67 OPTION( WITH_TELNET
68         "build with Telnetserver (can only work with SocketHandler)" ON)
69         
70 OPTION ( WITH_SYSTEMD_WATCHDOG
71     "build with systemD support & watchdog" OFF)
72         
73 OPTION ( USE_BUILD_LIBS
74         "build with default library path = build path" ON)
75         
76 OPTION ( GLIB_DBUS_TYPES_TOLERANT
77     "build dbus with tolerance towards glib 16bit/32bit handling" ON)
78
79 OPTION ( WITH_NSM
80     "build with NSM support" ON)
81     
82  OPTION ( WITH_DATABASE_STORAGE
83     "build with sqlite as in memory storage" OFF)
84     
85 IF (NOT WITH_DBUS_WRAPPER)
86     SET (WITH_NSM OFF)
87 ENDIF (NOT WITH_DBUS_WRAPPER)
88  
89 #Can be changed via passing -DDBUS_SERVICE_PREFIX="XXX" to cmake
90 IF(NOT DEFINED DBUS_SERVICE_PREFIX)
91         SET( DBUS_SERVICE_PREFIX "org.genivi.audiomanager\0")
92 ENDIF(NOT DEFINED DBUS_SERVICE_PREFIX)
93
94 #Can be changed via passing -DDBUS_SERVICE_OBJECT_PATH="XXX" to cmake
95 IF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
96         SET( DBUS_SERVICE_OBJECT_PATH "/org/genivi/audiomanager\0" )
97 ENDIF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
98
99 #Can be changed via passing -DDEFAULT_TELNETPORT="XXX" to cmake
100 IF(NOT DEFINED DEFAULT_TELNETPORT)
101         SET( DEFAULT_TELNETPORT 6080 )
102 ENDIF(NOT DEFINED DEFAULT_TELNETPORT)
103
104 #Can be changed via passing -DMAX_TELNETCONNECTIONS="XXX" to cmake
105 IF(NOT DEFINED MAX_TELNETCONNECTIONS)
106         SET( MAX_TELNETCONNECTIONS 3 )
107 ENDIF(NOT DEFINED MAX_TELNETCONNECTIONS)
108
109 #Can be changed via passing -DNSM_BUS_INTERFACE="XXX" to cmake
110 IF(NOT DEFINED NSM_BUS_INTERFACE)
111         SET( NSM_BUS_INTERFACE "org.genivi.NodeStateManager")
112 ENDIF(NOT DEFINED NSM_BUS_INTERFACE)
113
114 #Can be changed via passing -DNSM_PATH="XXX" to cmake
115 IF(NOT DEFINED NSM_PATH)
116         SET( NSM_PATH "/org/genivi/NodeStateManager")
117 ENDIF(NOT DEFINED NSM_PATH)
118
119 #Can be changed via passing -DNSM_INTERFACE="XXX" to cmake
120 IF(NOT DEFINED NSM_INTERFACE)
121         SET( NSM_INTERFACE "org.genivi.NodeStateManager.Consumer")
122 ENDIF(NOT DEFINED NSM_INTERFACE)
123
124 SET(PLUGINS_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/plugins)
125 SET(LIB_INSTALL_SUFFIX "audioManager")
126
127 if(USE_BUILD_LIBS)
128         IF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
129                 SET(DEFAULT_PLUGIN_COMMAND_DIR "${PLUGINS_OUTPUT_PATH}/command")
130         ENDIF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)   
131         IF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)      
132                 SET(DEFAULT_PLUGIN_ROUTING_DIR "${PLUGINS_OUTPUT_PATH}/routing")
133         ENDIF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)           
134         IF(NOT DEFINED CONTROLLER_PLUGIN)
135                 SET(CONTROLLER_PLUGIN "${PLUGINS_OUTPUT_PATH}/control/libPluginControlInterface.so")
136         ENDIF(NOT DEFINED CONTROLLER_PLUGIN)
137 else(USE_BUILD_LIBS)
138         IF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
139                 SET(DEFAULT_PLUGIN_COMMAND_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/command")
140         ENDIF(NOT DEFINED DEFAULT_PLUGIN_COMMAND_DIR)
141         IF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
142                 SET(DEFAULT_PLUGIN_ROUTING_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/routing")
143         ENDIF(NOT DEFINED DEFAULT_PLUGIN_ROUTING_DIR)
144         IF(NOT DEFINED CONTROLLER_PLUGIN)
145                 SET(CONTROLLER_PLUGIN "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/control/libPluginControlInterface.so")
146         ENDIF(NOT DEFINED CONTROLLER_PLUGIN)
147 endif(USE_BUILD_LIBS)
148
149 IF(EXISTS "ProjectSpecific/")
150     SET(PROJECT_INCLUDE_FOLDER ${CMAKE_SOURCE_DIR}/ProjectSpecific/include)
151 endif(EXISTS "ProjectSpecific/")
152
153 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
154 SET(AUDIO_INCLUDE_FOLDER ${CMAKE_SOURCE_DIR}/include)
155 SET(DOC_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/doc)
156 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
157 SET(TEST_EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/test)
158 SET(DOXY_PROTOTYPE ${CMAKE_SOURCE_DIR}/cmake/DoxyFile.in)
159 SET(DOXY_FILE ${CMAKE_CURRENT_BINARY_DIR}/DoxyFile)
160
161 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/AudioManagerDaemon/docx/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/DoxyFile )
162
163 IF(WITH_DLT)    
164     pkg_check_modules(DLT REQUIRED automotive-dlt>=2.2.0)   
165 ENDIF(WITH_DLT)
166
167 IF(WITH_TESTS)  
168         add_subdirectory(googleMock)
169         set(GMOCK_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/googleMock/include")
170         set(GOOGLE_TEST_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/googleMock/gtest/include")
171 ENDIF(WITH_TESTS)
172
173 IF(WITH_DOCUMENTATION)
174         find_package(Doxygen)
175         configure_file(${DOXY_FILE}  ${DOC_OUTPUT_PATH}/Doxyfile  @ONLY IMMEDIATE)
176         add_custom_target (AudioManangerDoku ALL 
177                 COMMAND ${DOXYGEN_EXECUTABLE} ${DOC_OUTPUT_PATH}/Doxyfile WORKING_DIRECTORY ${DOC_OUTPUT_PATH}
178                 SOURCES ${CMAKE_SOURCE_DIR} ${DOC_OUTPUT_PATH}/Doxyfile
179         )
180 ENDIF(WITH_DOCUMENTATION)
181
182 ##global build flags set(CPACK_RPM_COMPONENT_INSTALL ON)
183 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=gnu++0x -D_GNU_SOURCE -pedantic -Wno-variadic-macros -Wno-long-long")
184 #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=c++98 -D_GNU_SOURCE")
185
186 if(WITH_PLUGIN_COMMAND)
187         add_subdirectory (PluginCommandInterfaceDbus)
188 endif(WITH_PLUGIN_COMMAND)
189
190 if(WITH_PLUGIN_ROUTING)
191         add_subdirectory (PluginRoutingInterfaceDbus)
192         add_subdirectory (PluginRoutingInterfaceAsync)
193 endif(WITH_PLUGIN_ROUTING)
194
195 if(WITH_PLUGIN_CONTROL)
196         add_subdirectory (PluginControlInterface)
197 endif(WITH_PLUGIN_CONTROL)
198
199 add_subdirectory (AudioManagerDaemon)
200
201 IF(EXISTS "${CMAKE_SOURCE_DIR}/ProjectSpecific/")
202     add_subdirectory (ProjectSpecific)
203 endif(EXISTS "${CMAKE_SOURCE_DIR}/ProjectSpecific/")
204
205 # uninstall target
206 configure_file(
207     "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
208     "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
209     IMMEDIATE @ONLY)
210
211 add_custom_target(uninstall
212     COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
213
214 # Here starts package creation
215 SET(CPACK_SET_DESTDIR ON)
216 SET(CPACK_OUTPUT_FILE_PREFIX ${CMAKE_SOURCE_DIR}/packages)
217 SET(CPACK_GENERATOR "DEB")
218 SET(CPACK_PACKAGE_NAME "AudioManager")
219 SET(CPACK_PACKAGE_VENDOR "GENIVI")
220 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AudioManager: This component manages audio in the GENIVI context")
221 SET(CPACK_PACKAGE_VERSION "${DAEMONVERSION}")
222 SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENCE)
223 SET(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README)
224 SET(CPACK_PACKAGE_CONTACT "Christian Linke(BMW) christian.linke@bmw.de")
225 SET(CPACK_PACKAGE_INSTALL_DIRECTORY "genivi")
226 SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
227 SET(CPACK_DEBIAN_PACKAGE_DEPENDS "*")
228 SET(CPACK_STRIP_FILES TRUE)
229 SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
230 SET(CPACK_SOURCE_GENERATOR "TGZ")
231 SET(CPACK_SOURCE_IGNORE_FILES ".settings*" ".cproject" "/\\\\.metadata" "\\\\.#" "/#" ".*~" "/\\\\.git" "${CMAKE_CURRENT_BINARY_DIR}" "bin/" "packages/" "config.h") 
232
233 IF(WITH_TESTS)
234         get_property(ADD_DEPEND GLOBAL PROPERTY tests_prop)
235         list(REMOVE_DUPLICATES ADD_DEPEND)
236         list(APPEND ALL_DEPEND ${ADD_DEPEND})
237         FOREACH (dep ${ADD_DEPEND})     
238                 SET(tests_DEPENDENCIES "${dep} ,${tests_DEPENDENCIES}")
239         ENDFOREACH(dep)
240         STRING(REGEX REPLACE ".$" "" tests_DEPENDENCIES ${tests_DEPENDENCIES})
241 ENDIF(WITH_TESTS)
242
243 #evaluate the properties
244 if(WITH_MAIN)
245 get_property(ADD_DEPEND GLOBAL PROPERTY bin_prop)
246 list(REMOVE_DUPLICATES ADD_DEPEND)
247 set(ALL_DEPEND ${ADD_DEPEND})
248 FOREACH (dep ${ADD_DEPEND})
249         SET(bin_DEPENDENCIES "${dep} ,${bin_DEPENDENCIES}")
250 ENDFOREACH(dep)
251 STRING(REGEX REPLACE ".$" "" bin_DEPENDENCIES ${bin_DEPENDENCIES})
252 endif(WITH_MAIN)
253
254 if(WITH_PLUGIN_COMMAND OR WITH_PLUGIN_CONTROL OR WITH_PLUGIN_ROUTING)
255 get_property(ADD_DEPEND GLOBAL PROPERTY sampleplugins_prop)
256 list(REMOVE_DUPLICATES ADD_DEPEND)
257 list(APPEND ALL_DEPEND ${ADD_DEPEND})
258 FOREACH (dep ${ADD_DEPEND})
259         SET(sampleplugins_DEPENDENCIES "${dep} ,${sampleplugins_DEPENDENCIES}")
260 ENDFOREACH(dep)
261 STRING(REGEX REPLACE ".$" "" sampleplugins_DEPENDENCIES ${sampleplugins_DEPENDENCIES})
262 endif(WITH_PLUGIN_COMMAND OR WITH_PLUGIN_CONTROL OR WITH_PLUGIN_ROUTING)
263
264 get_property(ADD_DEPEND GLOBAL PROPERTY dev_prop)
265 list(REMOVE_DUPLICATES ADD_DEPEND)
266 list(APPEND ALL_DEPEND ${ADD_DEPEND})
267 FOREACH (dep ${ADD_DEPEND})
268         SET(dev_DEPENDENCIES "${dep} ,${dev_DEPENDENCIES}")
269 ENDFOREACH(dep)
270 STRING(REGEX REPLACE ".$" "" dev_DEPENDENCIES ${dev_DEPENDENCIES})
271
272 list(REMOVE_DUPLICATES ALL_DEPEND)
273 list(REMOVE_ITEM ALL_DEPEND "audiomanager-bin")
274 FOREACH (dep ${ALL_DEPEND})
275         SET(all_DEPENDENCIES "${dep} ,${all_DEPENDENCIES}")
276 ENDFOREACH(dep)
277 STRING(REGEX REPLACE ".$" "" all_DEPENDENCIES ${all_DEPENDENCIES})
278 execute_process(COMMAND cp ${CMAKE_MODULE_PATH}/add_package_dependencies.sh ${CMAKE_CURRENT_BINARY_DIR})
279
280 #component based dep package generation is only supported above 2.8.5
281 IF (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
282
283         SET(CPACK_COMPONENTS_ALL bin sampleplugins tests dev)
284         SET(CPACK_COMPONENTS_IGNORE_GROUPS 1)
285         SET(CPACK_DEB_COMPONENT_INSTALL ON)
286         ADD_CUSTOM_TARGET(genivi_package 
287                 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
288                 COMMAND make package
289                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-bin.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${bin_DEPENDENCIES}\"
290                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-sampleplugins.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${sampleplugins_DEPENDENCIES}\"
291                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-tests.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${tests_DEPENDENCIES}\"
292                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-dev.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${dev_DEPENDENCIES}\"
293         ) 
294 ELSE (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
295         IF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
296                 ADD_CUSTOM_TARGET(genivi_package 
297                         COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
298                         COMMAND make package
299                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}A logical block opening on t/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
300                 )
301         ELSE(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
302                 ADD_CUSTOM_TARGET(genivi_package 
303                         COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=OFF
304                         COMMAND make package
305                         COMMAND mkdir -p ../${CPACK_OUTPUT_FILE_PREFIX}
306                         COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX}
307                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
308                 )
309         ENDIF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
310 ENDIF (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
311
312 INCLUDE(CPack)
313
314