* fix for package building with lower cmake versions
[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( USE_BUILD_LIBS
54         "Sets the default path to the libs that are compiled with the AudioManager together. If turned off, the default location will be the one of the install path" OFF) 
55
56 OPTION( WITH_MAIN
57         "Build with daemon" ON)
58
59 OPTION( WITH_PPOLL
60         "libc supports ppoll" ON)
61
62 OPTION( WITH_TELNET
63         "build with Telnetserver" OFF)
64         
65 OPTION ( USE_BUILD_LIBS
66         "build with default library path = build path" ON)
67         
68 OPTION ( GLIB_DBUS_TYPES_TOLERANT
69     "build dbus with tolerance towards glib 16bit/32bit handling" ON)
70
71 #Can be changed via passing -DDBUS_SERVICE_PREFIX="XXX" to cmake
72 IF(NOT DEFINED DBUS_SERVICE_PREFIX)
73         SET( DBUS_SERVICE_PREFIX "org.genivi.audiomanager\0" )
74 ENDIF(NOT DEFINED DBUS_SERVICE_PREFIX)
75
76 #Can be changed via passing -DDBUS_SERVICE_OBJECT_PATH="XXX" to cmake
77 IF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
78         SET( DBUS_SERVICE_OBJECT_PATH "/org/genivi/audiomanager\0" )
79 ENDIF(NOT DEFINED DBUS_SERVICE_OBJECT_PATH)
80
81 #Can be changed via passing -DDEFAULT_TELNETPORT="XXX" to cmake
82 IF(NOT DEFINED DEFAULT_TELNETPORT)
83         SET( DEFAULT_TELNETPORT 6060 )
84 ENDIF(NOT DEFINED DEFAULT_TELNETPORT)
85
86 #Can be changed via passing -DMAX_TELNETCONNECTIONS="XXX" to cmake
87 IF(NOT DEFINED MAX_TELNETCONNECTIONS)
88         SET( MAX_TELNETCONNECTIONS 3 )
89 ENDIF(NOT DEFINED MAX_TELNETCONNECTIONS)
90
91 SET(DLT_CONTEXT AudioManager)
92 SET(PLUGINS_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/plugins)
93 SET(LIB_INSTALL_SUFFIX "audioManager")
94
95 if(USE_BUILD_LIBS)
96         SET(DEFAULT_PLUGIN_COMMAND_DIR "${PLUGINS_OUTPUT_PATH}/command")
97         SET(DEFAULT_PLUGIN_ROUTING_DIR "${PLUGINS_OUTPUT_PATH}/routing")
98         SET(CONTROLLER_PLUGIN "${PLUGINS_OUTPUT_PATH}/control/libPluginControlInterface.so")
99 else(USE_BUILD_LIBS)
100         SET(DEFAULT_PLUGIN_COMMAND_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/command")
101         SET(DEFAULT_PLUGIN_ROUTING_DIR "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/routing")
102         SET(CONTROLLER_PLUGIN "${CMAKE_INSTALL_PREFIX}/lib/${LIB_INSTALL_SUFFIX}/control/libPluginControlInterface.so")
103 endif(USE_BUILD_LIBS)
104
105 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
106 SET(AUDIO_INCLUDES_FOLDER ${CMAKE_SOURCE_DIR}/includes)
107 SET(DOC_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/doc)
108 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
109 SET(TEST_EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/test)
110 SET(DOXY_FILE ${CMAKE_SOURCE_DIR}/cmake/DoxyFile.in)
111 SET(INTROSPECTION_COMMAND_XML_FILE "${AUDIO_INCLUDES_FOLDER}/dbus/CommandInterface.xml")
112
113 CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/config.cmake ${CMAKE_SOURCE_DIR}/includes/config.h )
114
115 FIND_PACKAGE(PkgConfig)
116 pkg_check_modules(DLT REQUIRED automotive-dlt)
117
118 IF(WITH_DOCUMENTATION)
119         find_package(Doxygen)
120         file(MAKE_DIRECTORY ${DOC_OUTPUT_PATH}/Interfaces)
121         configure_file(${DOXY_FILE}  ${DOC_OUTPUT_PATH}/Interfaces/Doxyfile  @ONLY IMMEDIATE)
122         add_custom_target (Interfaces ALL 
123                 COMMAND ${DOXYGEN_EXECUTABLE} ${DOC_OUTPUT_PATH}/Interfaces/Doxyfile WORKING_DIRECTORY ${DOC_OUTPUT_PATH}/Interfaces
124                 SOURCES ${AUDIO_INCLUDES_FOLDER} ${DOC_OUTPUT_PATH}/Interfaces/Doxyfile
125         )
126 ENDIF(WITH_DOCUMENTATION)
127
128 ##global build flags set(CPACK_RPM_COMPONENT_INSTALL ON)
129 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -std=c++98 -D_GNU_SOURCE")
130
131 if(WITH_PLUGIN_COMMAND)
132         add_subdirectory (PluginCommandInterfaceDbus)
133 endif(WITH_PLUGIN_COMMAND)
134
135 if(WITH_PLUGIN_ROUTING)
136         add_subdirectory (PluginRoutingInterfaceDbus)
137         add_subdirectory (PluginRoutingInterfaceAsync)
138 endif(WITH_PLUGIN_ROUTING)
139
140 if(WITH_PLUGIN_CONTROL)
141         add_subdirectory (PluginControlInterface)
142 endif(WITH_PLUGIN_CONTROL)
143
144 if(WITH_MAIN)
145         add_subdirectory (AudioManagerDaemon)
146 endif(WITH_MAIN)
147
148 # uninstall target
149 configure_file(
150     "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
151     "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
152     IMMEDIATE @ONLY)
153
154 add_custom_target(uninstall
155     COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
156
157 # Here starts package creation
158 SET(CPACK_SET_DESTDIR ON)
159 SET(CPACK_OUTPUT_FILE_PREFIX ${CMAKE_SOURCE_DIR}/packages)
160 SET(CPACK_GENERATOR "DEB")
161 SET(CPACK_PACKAGE_NAME "AudioManager")
162 SET(CPACK_PACKAGE_VENDOR "GENIVI")
163 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AudioManager: This component manages audio in the GENIVI context")
164 SET(CPACK_PACKAGE_VERSION "${DAEMONVERSION}")
165 SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENCE)
166 SET(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README)
167 SET(CPACK_PACKAGE_CONTACT "Christian Mueller (BMW) christian.ei.mueller@bmw.de")
168 SET(CPACK_PACKAGE_INSTALL_DIRECTORY "genivi")
169 SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
170 SET(CPACK_DEBIAN_PACKAGE_DEPENDS "*")
171 SET(CPACK_STRIP_FILES TRUE)
172 SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
173 SET(CPACK_SOURCE_GENERATOR "TGZ")
174 SET(CPACK_SOURCE_IGNORE_FILES ".settings*" ".cproject" ".project" "/\\\\.metadata" "\\\\.#" "/#" ".*~" "/\\\\.git" "${CMAKE_CURRENT_BINARY_DIR}" "bin/" "packages/" "config.h") 
175
176 #evaluate the properties
177 if(WITH_MAIN)
178 get_property(ADD_DEPEND GLOBAL PROPERTY bin_prop)
179 list(REMOVE_DUPLICATES ADD_DEPEND)
180 set(ALL_DEPEND ${ADD_DEPEND})
181 FOREACH (dep ${ADD_DEPEND})
182         SET(bin_DEPENDENCIES "${dep} ,${bin_DEPENDENCIES}")
183 ENDFOREACH(dep)
184 STRING(REGEX REPLACE ".$" "" bin_DEPENDENCIES ${bin_DEPENDENCIES})
185 endif(WITH_MAIN)
186
187 get_property(ADD_DEPEND GLOBAL PROPERTY sampleplugins_prop)
188 list(REMOVE_DUPLICATES ADD_DEPEND)
189 list(APPEND ALL_DEPEND ${ADD_DEPEND})
190 FOREACH (dep ${ADD_DEPEND})
191         SET(sampleplugins_DEPENDENCIES "${dep} ,${sampleplugins_DEPENDENCIES}")
192 ENDFOREACH(dep)
193 STRING(REGEX REPLACE ".$" "" sampleplugins_DEPENDENCIES ${sampleplugins_DEPENDENCIES})
194
195 if(WITH_TESTS)
196 get_property(ADD_DEPEND GLOBAL PROPERTY tests_prop)
197 list(REMOVE_DUPLICATES ADD_DEPEND)
198 list(APPEND ALL_DEPEND ${ADD_DEPEND})
199 FOREACH (dep ${ADD_DEPEND})     
200         SET(tests_DEPENDENCIES "${dep} ,${tests_DEPENDENCIES}")
201 ENDFOREACH(dep)
202 STRING(REGEX REPLACE ".$" "" tests_DEPENDENCIES ${tests_DEPENDENCIES})
203 endif(WITH_TESTS)
204
205 get_property(ADD_DEPEND GLOBAL PROPERTY dev_prop)
206 list(REMOVE_DUPLICATES ADD_DEPEND)
207 list(APPEND ALL_DEPEND ${ADD_DEPEND})
208 FOREACH (dep ${ADD_DEPEND})
209         SET(dev_DEPENDENCIES "${dep} ,${dev_DEPENDENCIES}")
210 ENDFOREACH(dep)
211 STRING(REGEX REPLACE ".$" "" dev_DEPENDENCIES ${dev_DEPENDENCIES})
212
213 list(REMOVE_DUPLICATES ALL_DEPEND)
214 list(REMOVE_ITEM ALL_DEPEND "audiomanager-bin")
215 FOREACH (dep ${ALL_DEPEND})
216         SET(all_DEPENDENCIES "${dep} ,${all_DEPENDENCIES}")
217 ENDFOREACH(dep)
218 STRING(REGEX REPLACE ".$" "" all_DEPENDENCIES ${all_DEPENDENCIES})
219 execute_process(COMMAND cp ${CMAKE_MODULE_PATH}/add_package_dependencies.sh ${CMAKE_CURRENT_BINARY_DIR})
220
221 #component based dep package generation is only supported above 2.8.5
222 IF (${CMAKE_VERSION} VERSION_GREATER 2.9.4)
223
224         SET(CPACK_COMPONENTS_ALL bin sampleplugins tests dev)
225         SET(CPACK_COMPONENTS_IGNORE_GROUPS 1)
226         SET(CPACK_DEB_COMPONENT_INSTALL ON)
227         ADD_CUSTOM_TARGET(genivi_package 
228                 COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=ON
229                 COMMAND make package
230                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-bin.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${bin_DEPENDENCIES}\"
231                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-sampleplugins.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${sampleplugins_DEPENDENCIES}\"
232                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-tests.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${tests_DEPENDENCIES}\"
233                 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux-dev.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${dev_DEPENDENCIES}\"
234         ) 
235 ELSE (${CMAKE_VERSION} VERSION_GREATER 2.9.4)
236         IF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
237                 ADD_CUSTOM_TARGET(genivi_package 
238                         COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=ON
239                         COMMAND make package
240                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
241                 )
242         ELSE(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
243                 ADD_CUSTOM_TARGET(genivi_package 
244                         COMMAND ${CMAKE_COMMAND} ${CMAKE_BINARY_DIR} -DUSE_BUILD_LIBS=ON
245                         COMMAND make package
246                         COMMAND mkdir -p ../${CPACK_OUTPUT_FILE_PREFIX}
247                         COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX}
248                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/add_package_dependencies.sh ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux.deb ${CPACK_OUTPUT_FILE_PREFIX} \"${all_DEPENDENCIES}\"
249                 )
250         ENDIF(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
251 ENDIF (${CMAKE_VERSION} VERSION_GREATER 2.9.4)
252
253 INCLUDE(CPack)
254
255