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