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