3 #Copyright (C) 2011, BMW AG
6 #author Christian Mueller (christian.ei.mueller@bmw.de)
8 #***********************************************************************************************************
10 #***********************************************************************************************************
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
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.
25 cmake_minimum_required(VERSION 2.6)
27 execute_process(COMMAND git describe --tags WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
28 OUTPUT_VARIABLE DAEMONVERSION
29 OUTPUT_STRIP_TRAILING_WHITESPACE)
32 SET( DAEMONVERSION "homebrew-${CMAKE_SOURCE_DIR}" )
35 message(STATUS "Build Version ${DAEMONVERSION}")
37 execute_process(COMMAND git log --pretty=short WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
38 OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG)
40 PROJECT(AudioManagerDeamon)
42 OPTION( WITH_DBUS_WRAPPER
43 "Enable Dbus Wrapper Support" ON )
45 OPTION( WITH_SOCKETHANDLER_LOOP
46 "Enable SocketHandler Support (cannot work with SimpleDBusLoop)" ON )
48 OPTION( WITH_SIMPLEDBUS_LOOP
49 "Enable SimpleDBusLoop (requires DBus_Wrapper,cannot work with SocketHandler)" OFF )
52 "Build together with all available unitTest" ON )
54 OPTION( WITH_DOCUMENTATION
55 "Build together with Doxygen Documentation" OFF )
57 OPTION( WITH_PLUGIN_COMMAND
58 "Build command pluings" ON)
60 OPTION( WITH_PLUGIN_CONTROL
61 "Build control pluing" ON)
63 OPTION( WITH_PLUGIN_ROUTING
64 "Build routing pluings" ON)
67 "Build with daemon" ON)
70 "libc supports ppoll" ON)
73 "build with Telnetserver (can only work with SocketHandler)" ON)
75 OPTION ( USE_BUILD_LIBS
76 "build with default library path = build path" ON)
78 OPTION ( GLIB_DBUS_TYPES_TOLERANT
79 "build dbus with tolerance towards glib 16bit/32bit handling" ON)
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)
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)
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)
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)
101 SET(PLUGINS_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/plugins)
102 SET(LIB_INSTALL_SUFFIX "audioManager")
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")
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)
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")
122 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/config.cmake ${CMAKE_SOURCE_DIR}/includes/config.h )
124 FIND_PACKAGE(PkgConfig)
125 pkg_check_modules(DLT REQUIRED automotive-dlt)
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
134 ENDIF(WITH_DOCUMENTATION)
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")
140 if(WITH_PLUGIN_COMMAND)
141 add_subdirectory (PluginCommandInterfaceDbus)
142 endif(WITH_PLUGIN_COMMAND)
144 if(WITH_PLUGIN_ROUTING)
145 add_subdirectory (PluginRoutingInterfaceDbus)
146 add_subdirectory (PluginRoutingInterfaceAsync)
147 endif(WITH_PLUGIN_ROUTING)
149 if(WITH_PLUGIN_CONTROL)
150 add_subdirectory (PluginControlInterface)
151 endif(WITH_PLUGIN_CONTROL)
154 add_subdirectory (AudioManagerDaemon)
159 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
160 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
163 add_custom_target(uninstall
164 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
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")
185 #evaluate the properties
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}")
193 STRING(REGEX REPLACE ".$" "" bin_DEPENDENCIES ${bin_DEPENDENCIES})
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}")
202 STRING(REGEX REPLACE ".$" "" sampleplugins_DEPENDENCIES ${sampleplugins_DEPENDENCIES})
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}")
211 STRING(REGEX REPLACE ".$" "" tests_DEPENDENCIES ${tests_DEPENDENCIES})
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}")
220 STRING(REGEX REPLACE ".$" "" dev_DEPENDENCIES ${dev_DEPENDENCIES})
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}")
227 STRING(REGEX REPLACE ".$" "" all_DEPENDENCIES ${all_DEPENDENCIES})
228 execute_process(COMMAND cp ${CMAKE_MODULE_PATH}/add_package_dependencies.sh ${CMAKE_CURRENT_BINARY_DIR})
230 #component based dep package generation is only supported above 2.8.5
231 IF (${CMAKE_VERSION} VERSION_GREATER 2.9.4)
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
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}\"
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
249 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
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
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}\"
259 ENDIF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
260 ENDIF (${CMAKE_VERSION} VERSION_GREATER 2.9.4)