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