* [GT-1835] Resolve issues identified by code screening process: added missing header...
[profile/ivi/audiomanager.git] / CMakeLists.txt
1 #GENIVI AUDIOMANAGER
2 #
3 #Copyright (C) 2011, BMW AG
4 #
5 #Datum  20.2.2012
6 #author Christian Mueller (christian.ei.mueller@bmw.de)
7 #
8 #***********************************************************************************************************
9 #LICENSE
10 #***********************************************************************************************************
11 #
12 #GNU Lesser General Public License, version 2.1, with special exception (GENIVI clause)
13 #Copyright (C) 2011, BMW AG – Christian Mueller  Christian.ei.mueller@bmw.de
14 #
15 #This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
16 #This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License, version 2.1, for more details.
17 #You should have received a copy of the GNU Lesser General Public License, version 2.1, along with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
18 #Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may also be applicable to programs even in cases in which the program is not a library in the technical sense.
19 #Linking AudioManager statically or dynamically with other modules is making a combined work based on AudioManager. You may license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to license your linked modules under the GNU Lesser General Public License, version 2.1, you may use the program under the following exception.
20 #As a special exception, the copyright holders of AudioManager give you permission to combine AudioManager with software programs or libraries that are released under any license unless such a combination is not permitted by the license of such a software program or library. You may copy and distribute such a system following the terms of the GNU Lesser General Public License, version 2.1, including this special exception, for AudioManager and the licenses of the other code concerned.
21 #Note that people who make modified versions of AudioManager are not obligated to grant this special exception for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License, version 2.1, gives permission to release a modified version without this exception; this exception also makes it possible to release a modified version which carries forward this exception.
22 #
23
24
25 cmake_minimum_required(VERSION 2.6)
26
27 execute_process(COMMAND git describe --tags WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
28                 OUTPUT_VARIABLE DAEMONVERSION 
29                 OUTPUT_STRIP_TRAILING_WHITESPACE)
30
31 IF (DAEMON_ERROR)
32         SET( DAEMONVERSION "homebrew-${CMAKE_SOURCE_DIR}" )
33 ENDIF(DAEMON_ERROR)
34
35 message(STATUS "Build Version ${DAEMONVERSION}")
36
37 execute_process(COMMAND git log --pretty=short WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
38                 OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG)
39
40 PROJECT(AudioManagerDeamon)
41
42 OPTION( WITH_DBUS_WRAPPER 
43         "Enable Dbus Wrapper Support" ON )
44
45 OPTION( WITH_SOCKETHANDLER_LOOP 
46         "Enable SocketHandler Support (cannot work with SimpleDBusLoop)" ON )
47
48 OPTION( WITH_SIMPLEDBUS_LOOP 
49         "Enable SimpleDBusLoop (requires DBus_Wrapper,cannot work with SocketHandler)" OFF )
50
51 OPTION( WITH_TESTS
52         "Build together with all available unitTest" ON )
53
54 OPTION( WITH_DOCUMENTATION
55         "Build together with Doxygen Documentation" OFF )
56
57 OPTION( WITH_PLUGIN_COMMAND
58         "Build command pluings" ON)
59
60 OPTION( WITH_PLUGIN_CONTROL
61         "Build control pluing" ON)
62
63 OPTION( WITH_PLUGIN_ROUTING
64         "Build routing pluings" ON)
65
66 OPTION( WITH_MAIN
67         "Build with daemon" ON)
68
69 OPTION( WITH_PPOLL
70         "libc supports ppoll" ON)
71
72 OPTION( WITH_TELNET
73         "build with Telnetserver (can only work with SocketHandler)" ON)
74         
75 OPTION ( USE_BUILD_LIBS
76         "build with default library path = build path" ON)
77         
78 OPTION ( GLIB_DBUS_TYPES_TOLERANT
79     "build dbus with tolerance towards glib 16bit/32bit handling" ON)
80
81 #Can be changed via passing -DDBUS_SERVICE_PREFIX="XXX" to cmake
82 IF(NOT DEFINED DBUS_SERVICE_PREFIX)
83         SET( DBUS_SERVICE_PREFIX "org.genivi.audiomanager\0" )
84 ENDIF(NOT DEFINED DBUS_SERVICE_PREFIX)
85
86 #Can be changed via passing -DDBUS_SERVICE_OBJECT_PATH="XXX" to cmake
87 IF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
88         SET( DBUS_SERVICE_OBJECT_PATH "/org/genivi/audiomanager\0" )
89 ENDIF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
90
91 #Can be changed via passing -DDEFAULT_TELNETPORT="XXX" to cmake
92 IF(NOT DEFINED DEFAULT_TELNETPORT)
93         SET( DEFAULT_TELNETPORT 6060 )
94 ENDIF(NOT DEFINED DEFAULT_TELNETPORT)
95
96 #Can be changed via passing -DMAX_TELNETCONNECTIONS="XXX" to cmake
97 IF(NOT DEFINED MAX_TELNETCONNECTIONS)
98         SET( MAX_TELNETCONNECTIONS 3 )
99 ENDIF(NOT DEFINED MAX_TELNETCONNECTIONS)
100
101 SET(PLUGINS_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/plugins)
102 SET(LIB_INSTALL_SUFFIX "audioManager")
103
104 if(USE_BUILD_LIBS)
105         SET(DEFAULT_PLUGIN_COMMAND_DIR "${PLUGINS_OUTPUT_PATH}/command")
106         SET(DEFAULT_PLUGIN_ROUTING_DIR "${PLUGINS_OUTPUT_PATH}/routing")
107         SET(CONTROLLER_PLUGIN "${PLUGINS_OUTPUT_PATH}/control/libPluginControlInterface.so")
108 else(USE_BUILD_LIBS)
109         SET(DEFAULT_PLUGIN_COMMAND_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/command")
110         SET(DEFAULT_PLUGIN_ROUTING_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/routing")
111         SET(CONTROLLER_PLUGIN "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/control/libPluginControlInterface.so")
112 endif(USE_BUILD_LIBS)
113
114 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
115 SET(AUDIO_INCLUDES_FOLDER ${CMAKE_SOURCE_DIR}/includes)
116 SET(DOC_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/doc)
117 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
118 SET(TEST_EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/test)
119 SET(DOXY_FILE ${CMAKE_SOURCE_DIR}/cmake/DoxyFile.in)
120 SET(INTROSPECTION_COMMAND_XML_FILE "${AUDIO_INCLUDES_FOLDER}/dbus/CommandInterface.xml")
121
122 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/config.cmake ${CMAKE_SOURCE_DIR}/includes/config.h )
123
124 FIND_PACKAGE(PkgConfig)
125 pkg_check_modules(DLT REQUIRED automotive-dlt)
126
127 IF(WITH_DOCUMENTATION)
128         find_package(Doxygen)
129         configure_file(${DOXY_FILE}  ${DOC_OUTPUT_PATH}/Doxyfile  @ONLY IMMEDIATE)
130         add_custom_target (AudioManangerDoku ALL 
131                 COMMAND ${DOXYGEN_EXECUTABLE} ${DOC_OUTPUT_PATH}/Doxyfile WORKING_DIRECTORY ${DOC_OUTPUT_PATH}
132                 SOURCES ${CMAKE_SOURCE_DIR} ${DOC_OUTPUT_PATH}/Doxyfile
133         )
134 ENDIF(WITH_DOCUMENTATION)
135
136 ##global build flags set(CPACK_RPM_COMPONENT_INSTALL ON)
137 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=c++98 -D_GNU_SOURCE -pedantic -Wno-variadic-macros")
138 #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=c++98 -D_GNU_SOURCE")
139
140 if(WITH_PLUGIN_COMMAND)
141         add_subdirectory (PluginCommandInterfaceDbus)
142 endif(WITH_PLUGIN_COMMAND)
143
144 if(WITH_PLUGIN_ROUTING)
145         add_subdirectory (PluginRoutingInterfaceDbus)
146         add_subdirectory (PluginRoutingInterfaceAsync)
147 endif(WITH_PLUGIN_ROUTING)
148
149 if(WITH_PLUGIN_CONTROL)
150         add_subdirectory (PluginControlInterface)
151 endif(WITH_PLUGIN_CONTROL)
152
153 if(WITH_MAIN)
154         add_subdirectory (AudioManagerDaemon)
155 endif(WITH_MAIN)
156
157 # uninstall target
158 configure_file(
159     "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
160     "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
161     IMMEDIATE @ONLY)
162
163 add_custom_target(uninstall
164     COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
165
166 # Here starts package creation
167 SET(CPACK_SET_DESTDIR ON)
168 SET(CPACK_OUTPUT_FILE_PREFIX ${CMAKE_SOURCE_DIR}/packages)
169 SET(CPACK_GENERATOR "DEB")
170 SET(CPACK_PACKAGE_NAME "AudioManager")
171 SET(CPACK_PACKAGE_VENDOR "GENIVI")
172 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AudioManager: This component manages audio in the GENIVI context")
173 SET(CPACK_PACKAGE_VERSION "${DAEMONVERSION}")
174 SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENCE)
175 SET(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README)
176 SET(CPACK_PACKAGE_CONTACT "Christian Mueller (BMW) christian.ei.mueller@bmw.de")
177 SET(CPACK_PACKAGE_INSTALL_DIRECTORY "genivi")
178 SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
179 SET(CPACK_DEBIAN_PACKAGE_DEPENDS "*")
180 SET(CPACK_STRIP_FILES TRUE)
181 SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
182 SET(CPACK_SOURCE_GENERATOR "TGZ")
183 SET(CPACK_SOURCE_IGNORE_FILES ".settings*" ".cproject" ".project" "/\\\\.metadata" "\\\\.#" "/#" ".*~" "/\\\\.git" "${CMAKE_CURRENT_BINARY_DIR}" "bin/" "packages/" "config.h") 
184
185 #evaluate the properties
186 if(WITH_MAIN)
187 get_property(ADD_DEPEND GLOBAL PROPERTY bin_prop)
188 list(REMOVE_DUPLICATES ADD_DEPEND)
189 set(ALL_DEPEND ${ADD_DEPEND})
190 FOREACH (dep ${ADD_DEPEND})
191         SET(bin_DEPENDENCIES "${dep} ,${bin_DEPENDENCIES}")
192 ENDFOREACH(dep)
193 STRING(REGEX REPLACE ".$" "" bin_DEPENDENCIES ${bin_DEPENDENCIES})
194 endif(WITH_MAIN)
195
196 get_property(ADD_DEPEND GLOBAL PROPERTY sampleplugins_prop)
197 list(REMOVE_DUPLICATES ADD_DEPEND)
198 list(APPEND ALL_DEPEND ${ADD_DEPEND})
199 FOREACH (dep ${ADD_DEPEND})
200         SET(sampleplugins_DEPENDENCIES "${dep} ,${sampleplugins_DEPENDENCIES}")
201 ENDFOREACH(dep)
202 STRING(REGEX REPLACE ".$" "" sampleplugins_DEPENDENCIES ${sampleplugins_DEPENDENCIES})
203
204 if(WITH_TESTS)
205 get_property(ADD_DEPEND GLOBAL PROPERTY tests_prop)
206 list(REMOVE_DUPLICATES ADD_DEPEND)
207 list(APPEND ALL_DEPEND ${ADD_DEPEND})
208 FOREACH (dep ${ADD_DEPEND})     
209         SET(tests_DEPENDENCIES "${dep} ,${tests_DEPENDENCIES}")
210 ENDFOREACH(dep)
211 STRING(REGEX REPLACE ".$" "" tests_DEPENDENCIES ${tests_DEPENDENCIES})
212 endif(WITH_TESTS)
213
214 get_property(ADD_DEPEND GLOBAL PROPERTY dev_prop)
215 list(REMOVE_DUPLICATES ADD_DEPEND)
216 list(APPEND ALL_DEPEND ${ADD_DEPEND})
217 FOREACH (dep ${ADD_DEPEND})
218         SET(dev_DEPENDENCIES "${dep} ,${dev_DEPENDENCIES}")
219 ENDFOREACH(dep)
220 STRING(REGEX REPLACE ".$" "" dev_DEPENDENCIES ${dev_DEPENDENCIES})
221
222 list(REMOVE_DUPLICATES ALL_DEPEND)
223 list(REMOVE_ITEM ALL_DEPEND "audiomanager-bin")
224 FOREACH (dep ${ALL_DEPEND})
225         SET(all_DEPENDENCIES "${dep} ,${all_DEPENDENCIES}")
226 ENDFOREACH(dep)
227 STRING(REGEX REPLACE ".$" "" all_DEPENDENCIES ${all_DEPENDENCIES})
228 execute_process(COMMAND cp ${CMAKE_MODULE_PATH}/add_package_dependencies.sh ${CMAKE_CURRENT_BINARY_DIR})
229
230 #component based dep package generation is only supported above 2.8.5
231 IF (${CMAKE_VERSION} VERSION_GREATER 2.9.4)
232
233         SET(CPACK_COMPONENTS_ALL bin sampleplugins tests dev)
234         SET(CPACK_COMPONENTS_IGNORE_GROUPS 1)
235         SET(CPACK_DEB_COMPONENT_INSTALL ON)
236         ADD_CUSTOM_TARGET(genivi_package 
237                 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=ON
238                 COMMAND make package
239                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-bin.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${bin_DEPENDENCIES}\"
240                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-sampleplugins.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${sampleplugins_DEPENDENCIES}\"
241                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-tests.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${tests_DEPENDENCIES}\"
242                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-dev.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${dev_DEPENDENCIES}\"
243         ) 
244 ELSE (${CMAKE_VERSION} VERSION_GREATER 2.9.4)
245         IF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
246                 ADD_CUSTOM_TARGET(genivi_package 
247                         COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=ON
248                         COMMAND make package
249                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
250                 )
251         ELSE(${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 mkdir -p ../${CPACK_OUTPUT_FILE_PREFIX}
256                         COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX}
257                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
258                 )
259         ENDIF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
260 ENDIF (${CMAKE_VERSION} VERSION_GREATER 2.9.4)
261
262 INCLUDE(CPack)
263
264