1 | project(Phonon)
|
---|
2 |
|
---|
3 | cmake_minimum_required(VERSION 2.6.2 FATAL_ERROR)
|
---|
4 |
|
---|
5 | # CMP0002: we have multiple targets with the same name for the unit tests
|
---|
6 | cmake_policy(SET CMP0002 OLD)
|
---|
7 |
|
---|
8 | # enable unit tests
|
---|
9 | option(PHONON_BUILD_TESTS "Build the tests")
|
---|
10 | option(PHONON_BUILD_EXAMPLES "Build the examples")
|
---|
11 |
|
---|
12 | if (PHONON_BUILD_TESTS)
|
---|
13 | enable_testing()
|
---|
14 | endif (PHONON_BUILD_TESTS)
|
---|
15 |
|
---|
16 | set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
---|
17 |
|
---|
18 | include(PhononMacros)
|
---|
19 |
|
---|
20 | include(MacroLogFeature)
|
---|
21 | include(MacroOptionalFindPackage)
|
---|
22 |
|
---|
23 | set(QT_MIN_VERSION 4.4.0)
|
---|
24 | find_package(Qt4 REQUIRED)
|
---|
25 | if (NOT QT_QTDBUS_FOUND)
|
---|
26 | message(STATUS "Warning: Phonon won't be compiled with DBus support.")
|
---|
27 | endif(NOT QT_QTDBUS_FOUND)
|
---|
28 |
|
---|
29 | find_package(Automoc4 REQUIRED)
|
---|
30 | include (CheckCXXCompilerFlag)
|
---|
31 | include (MacroEnsureVersion)
|
---|
32 |
|
---|
33 | if (NOT AUTOMOC4_VERSION)
|
---|
34 | set(AUTOMOC4_VERSION "0.9.83")
|
---|
35 | endif (NOT AUTOMOC4_VERSION)
|
---|
36 | macro_ensure_version("0.9.86" "${AUTOMOC4_VERSION}" _automoc4_version_ok)
|
---|
37 | if (NOT _automoc4_version_ok)
|
---|
38 | message(FATAL_ERROR "Your version of automoc4 is too old. You have ${AUTOMOC4_VERSION}, you need at least 0.9.86")
|
---|
39 | endif (NOT _automoc4_version_ok)
|
---|
40 |
|
---|
41 | if (CMAKE_COMPILER_IS_GNUCXX)
|
---|
42 | set (KDE4_ENABLE_EXCEPTIONS -fexceptions)
|
---|
43 | # Select flags.
|
---|
44 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
|
---|
45 | set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG -DQT_NO_DEBUG")
|
---|
46 | set(CMAKE_CXX_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline")
|
---|
47 | set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3 -fno-inline")
|
---|
48 | set(CMAKE_CXX_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs")
|
---|
49 | set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
|
---|
50 | set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG -DQT_NO_DEBUG")
|
---|
51 | set(CMAKE_C_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline")
|
---|
52 | set(CMAKE_C_FLAGS_DEBUGFULL "-g3 -fno-inline")
|
---|
53 | set(CMAKE_C_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs")
|
---|
54 |
|
---|
55 | if (CMAKE_SYSTEM_NAME MATCHES Linux)
|
---|
56 | set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-long-long -std=iso9899:1990 -Wundef -Wcast-align -Werror-implicit-function-declaration -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common")
|
---|
57 | set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -fno-check-new -fno-common")
|
---|
58 | add_definitions (-D_BSD_SOURCE)
|
---|
59 | endif (CMAKE_SYSTEM_NAME MATCHES Linux)
|
---|
60 |
|
---|
61 | # gcc under Windows
|
---|
62 | if (MINGW)
|
---|
63 | set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--export-all-symbols -Wl,--disable-auto-import")
|
---|
64 | set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--export-all-symbols -Wl,--disable-auto-import")
|
---|
65 |
|
---|
66 | # we always link against the release version of QT with mingw
|
---|
67 | # (even for debug builds). So we need to define QT_NO_DEBUG
|
---|
68 | # or else QPluginLoader rejects plugins because it thinks
|
---|
69 | # they're built against the wrong QT.
|
---|
70 | add_definitions(-DQT_NO_DEBUG)
|
---|
71 | endif (MINGW)
|
---|
72 |
|
---|
73 | check_cxx_compiler_flag(-fPIE HAVE_FPIE_SUPPORT)
|
---|
74 | if(KDE4_ENABLE_FPIE)
|
---|
75 | if(HAVE_FPIE_SUPPORT)
|
---|
76 | set (KDE4_CXX_FPIE_FLAGS "-fPIE")
|
---|
77 | set (KDE4_PIE_LDFLAGS "-pie")
|
---|
78 | else(HAVE_FPIE_SUPPORT)
|
---|
79 | message(STATUS "Your compiler doesn't support PIE flag")
|
---|
80 | endif(HAVE_FPIE_SUPPORT)
|
---|
81 | endif(KDE4_ENABLE_FPIE)
|
---|
82 |
|
---|
83 | check_cxx_compiler_flag(-Woverloaded-virtual __KDE_HAVE_W_OVERLOADED_VIRTUAL)
|
---|
84 | if(__KDE_HAVE_W_OVERLOADED_VIRTUAL)
|
---|
85 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual")
|
---|
86 | endif(__KDE_HAVE_W_OVERLOADED_VIRTUAL)
|
---|
87 |
|
---|
88 | # visibility support
|
---|
89 | check_cxx_compiler_flag(-fvisibility=hidden __KDE_HAVE_GCC_VISIBILITY)
|
---|
90 | set( __KDE_HAVE_GCC_VISIBILITY ${__KDE_HAVE_GCC_VISIBILITY} CACHE BOOL "GCC support for hidden visibility")
|
---|
91 |
|
---|
92 | # get the gcc version
|
---|
93 | exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
|
---|
94 |
|
---|
95 | string (REGEX MATCH "[345]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}")
|
---|
96 | # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the patch level, handle this here:
|
---|
97 | if (NOT _gcc_version)
|
---|
98 | string (REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0" _gcc_version "${_gcc_version_info}")
|
---|
99 | endif (NOT _gcc_version)
|
---|
100 |
|
---|
101 | macro_ensure_version("4.1.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_1)
|
---|
102 | macro_ensure_version("4.2.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_2)
|
---|
103 | macro_ensure_version("4.3.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_3)
|
---|
104 |
|
---|
105 | # save a little by making local statics not threadsafe
|
---|
106 | # ### do not enable it for older compilers, see
|
---|
107 | # ### http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31806
|
---|
108 | if (GCC_IS_NEWER_THAN_4_3)
|
---|
109 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-threadsafe-statics")
|
---|
110 | endif (GCC_IS_NEWER_THAN_4_3)
|
---|
111 |
|
---|
112 | set(_GCC_COMPILED_WITH_BAD_ALLOCATOR FALSE)
|
---|
113 | if (GCC_IS_NEWER_THAN_4_1)
|
---|
114 | exec_program(${CMAKE_C_COMPILER} ARGS -v OUTPUT_VARIABLE _gcc_alloc_info)
|
---|
115 | string(REGEX MATCH "(--enable-libstdcxx-allocator=mt)" _GCC_COMPILED_WITH_BAD_ALLOCATOR "${_gcc_alloc_info}")
|
---|
116 | endif (GCC_IS_NEWER_THAN_4_1)
|
---|
117 |
|
---|
118 | if (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR)
|
---|
119 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
|
---|
120 | set (KDE4_C_FLAGS "-fvisibility=hidden")
|
---|
121 | # check that Qt defines Q_DECL_EXPORT as __attribute__ ((visibility("default")))
|
---|
122 | # if it doesn't and KDE compiles with hidden default visibiltiy plugins will break
|
---|
123 | set(_source "#include <QtCore/QtGlobal>\n int main()\n {\n #ifdef QT_VISIBILITY_AVAILABLE \n return 0;\n #else \n return 1; \n #endif \n }\n")
|
---|
124 | set(_source_file ${CMAKE_BINARY_DIR}/CMakeTmp/check_qt_visibility.cpp)
|
---|
125 | file(WRITE "${_source_file}" "${_source}")
|
---|
126 | set(_include_dirs "-DINCLUDE_DIRECTORIES:STRING=${QT_INCLUDES}")
|
---|
127 |
|
---|
128 | try_run(_run_result _compile_result ${CMAKE_BINARY_DIR} ${_source_file} CMAKE_FLAGS "${_include_dirs}")
|
---|
129 |
|
---|
130 | if(NOT _compile_result)
|
---|
131 | message(FATAL_ERROR "Could not compile simple test program:\n ${_source}")
|
---|
132 | endif(NOT _compile_result)
|
---|
133 | if(_run_result)
|
---|
134 | message(FATAL_ERROR "Qt compiled without support for -fvisibility=hidden. This will break plugins and linking of some applications. Please fix your Qt installation.")
|
---|
135 | endif(_run_result)
|
---|
136 |
|
---|
137 | if (GCC_IS_NEWER_THAN_4_2)
|
---|
138 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden")
|
---|
139 | endif (GCC_IS_NEWER_THAN_4_2)
|
---|
140 | else (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR)
|
---|
141 | set (__KDE_HAVE_GCC_VISIBILITY 0)
|
---|
142 | endif (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR)
|
---|
143 |
|
---|
144 | endif (CMAKE_COMPILER_IS_GNUCXX)
|
---|
145 |
|
---|
146 | set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
---|
147 | set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
|
---|
148 | set(CMAKE_COLOR_MAKEFILE ON)
|
---|
149 |
|
---|
150 | set(PHONON_LIB_MAJOR_VERSION "4")
|
---|
151 | set(PHONON_LIB_MINOR_VERSION "3")
|
---|
152 | set(PHONON_LIB_PATCH_VERSION "1")
|
---|
153 | set(PHONON_LIB_VERSION "${PHONON_LIB_MAJOR_VERSION}.3.1")
|
---|
154 | set(PHONON_LIB_SOVERSION ${PHONON_LIB_MAJOR_VERSION})
|
---|
155 |
|
---|
156 | add_definitions(${QT_DEFINITIONS})
|
---|
157 | remove_definitions(-DQT3_SUPPORT_WARNINGS -DQT3_SUPPORT)
|
---|
158 | if(MSVC)
|
---|
159 | add_definitions( -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS )
|
---|
160 | endif(MSVC)
|
---|
161 |
|
---|
162 | # for including config.h and for includes like <kparts/foo.h>
|
---|
163 | include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/includes ${CMAKE_CURRENT_SOURCE_DIR}/phonon ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/phonon)
|
---|
164 |
|
---|
165 | macro(_SET_FANCY _var _value _comment)
|
---|
166 | if (KDESupport_SOURCE_DIR)
|
---|
167 | # when building inside kdesupport other subprojects write crap into our variables
|
---|
168 | set(${_var} "${_value}")
|
---|
169 | else (KDESupport_SOURCE_DIR)
|
---|
170 | if (NOT DEFINED ${_var})
|
---|
171 | set(${_var} "${_value}")
|
---|
172 | else (NOT DEFINED ${_var})
|
---|
173 | set(${_var} "${${_var}}" CACHE PATH "${_comment}")
|
---|
174 | endif (NOT DEFINED ${_var})
|
---|
175 | endif (KDESupport_SOURCE_DIR)
|
---|
176 | endmacro(_SET_FANCY)
|
---|
177 |
|
---|
178 | set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
|
---|
179 |
|
---|
180 | _set_fancy(EXEC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" "Base directory for executables and libraries")
|
---|
181 | _set_fancy(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share" "Base directory for files which go to share/")
|
---|
182 | _set_fancy(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" "The install dir for executables (default ${EXEC_INSTALL_PREFIX}/bin)")
|
---|
183 | _set_fancy(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}" "The subdirectory relative to the install prefix where libraries will be installed (default is ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX})")
|
---|
184 | _set_fancy(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" "The subdirectory to the header prefix")
|
---|
185 | _set_fancy(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/kde4" "The subdirectory relative to the install prefix where plugins will be installed (default is ${LIB_INSTALL_DIR}/kde4)")
|
---|
186 | _set_fancy(ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/icons" "The icon install dir (default ${SHARE_INSTALL_PREFIX}/share/icons/)")
|
---|
187 | _set_fancy(SERVICES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/kde4/services" "The install dir for service (desktop, protocol, ...) files")
|
---|
188 | _set_fancy(DBUS_INTERFACES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/dbus-1/interfaces" "The dbus interfaces install dir (default: ${SHARE_INSTALL_PREFIX}/dbus-1/interfaces)")
|
---|
189 | _set_fancy(DBUS_SERVICES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/dbus-1/services" "The dbus services install dir (default: ${SHARE_INSTALL_PREFIX}/dbus-1/services)")
|
---|
190 |
|
---|
191 | set(INSTALL_TARGETS_DEFAULT_ARGS RUNTIME DESTINATION "${BIN_INSTALL_DIR}"
|
---|
192 | LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
|
---|
193 | ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" COMPONENT Devel )
|
---|
194 |
|
---|
195 | # on the Mac support an extra install directory for application bundles
|
---|
196 | if(APPLE)
|
---|
197 | set(INSTALL_TARGETS_DEFAULT_ARGS ${INSTALL_TARGETS_DEFAULT_ARGS}
|
---|
198 | BUNDLE DESTINATION "${BUNDLE_INSTALL_DIR}" )
|
---|
199 | endif(APPLE)
|
---|
200 |
|
---|
201 | if (CMAKE_SYSTEM_NAME MATCHES Linux)
|
---|
202 | if (CMAKE_COMPILER_IS_GNUCXX)
|
---|
203 | set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}")
|
---|
204 | set ( CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_MODULE_LINKER_FLAGS}")
|
---|
205 |
|
---|
206 | set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_SHARED_LINKER_FLAGS}")
|
---|
207 | set ( CMAKE_MODULE_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_MODULE_LINKER_FLAGS}")
|
---|
208 | set ( CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_EXE_LINKER_FLAGS}")
|
---|
209 |
|
---|
210 | # we profile...
|
---|
211 | if(CMAKE_BUILD_TYPE_TOLOWER MATCHES profile)
|
---|
212 | set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
|
---|
213 | set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
|
---|
214 | endif(CMAKE_BUILD_TYPE_TOLOWER MATCHES profile)
|
---|
215 | endif (CMAKE_COMPILER_IS_GNUCXX)
|
---|
216 | if (CMAKE_C_COMPILER MATCHES "icc")
|
---|
217 | set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}")
|
---|
218 | set ( CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_MODULE_LINKER_FLAGS}")
|
---|
219 | endif (CMAKE_C_COMPILER MATCHES "icc")
|
---|
220 | endif (CMAKE_SYSTEM_NAME MATCHES Linux)
|
---|
221 |
|
---|
222 | set(PHONON_LIBS phonon ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
|
---|
223 | if(QT_QTDBUS_FOUND)
|
---|
224 | list(APPEND PHONON_LIBS phonon ${QT_QTDBUS_LIBRARY})
|
---|
225 | endif(QT_QTDBUS_FOUND)
|
---|
226 |
|
---|
227 | set(EXECUTABLE_OUTPUT_PATH ${Phonon_BINARY_DIR}/bin)
|
---|
228 | if (WIN32)
|
---|
229 | set(LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH})
|
---|
230 | else (WIN32)
|
---|
231 | set(LIBRARY_OUTPUT_PATH ${Phonon_BINARY_DIR}/lib)
|
---|
232 | endif (WIN32)
|
---|
233 |
|
---|
234 | if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER MATCHES "icc")
|
---|
235 | set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-check-new -fno-common")
|
---|
236 | endif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER MATCHES "icc")
|
---|
237 |
|
---|
238 | # Set up RPATH handling, so the libs are found if they are installed to a non-standard location.
|
---|
239 | # By default cmake builds the targets with full RPATH to everything in the build directory,
|
---|
240 | # but then removes the RPATH when installing.
|
---|
241 | # These two options below make it set the RPATH of the installed targets to all
|
---|
242 | # RPATH directories outside the current CMAKE_BINARY_DIR and also the library
|
---|
243 | # install directory. Alex
|
---|
244 | set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
---|
245 | set(CMAKE_INSTALL_RPATH "${LIB_INSTALL_DIR}" )
|
---|
246 |
|
---|
247 | if(APPLE)
|
---|
248 | set(CMAKE_INSTALL_NAME_DIR ${LIB_INSTALL_DIR})
|
---|
249 | endif(APPLE)
|
---|
250 |
|
---|
251 |
|
---|
252 | add_subdirectory(cmake)
|
---|
253 | add_subdirectory(phonon)
|
---|
254 | add_subdirectory(includes)
|
---|
255 | if (Q_WS_MAC AND BUILD_PHONON_QT7)
|
---|
256 | add_subdirectory(qt7)
|
---|
257 | endif (Q_WS_MAC AND BUILD_PHONON_QT7)
|
---|
258 | if (Q_WS_WIN)
|
---|
259 | add_subdirectory(ds9)
|
---|
260 | endif (Q_WS_WIN)
|
---|
261 |
|
---|
262 | if (Q_WS_X11)
|
---|
263 | add_subdirectory(gstreamer)
|
---|
264 | add_subdirectory(xine)
|
---|
265 | endif (Q_WS_X11)
|
---|
266 |
|
---|
267 | if(NOT WIN32) # pkgconfig file
|
---|
268 | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/phonon.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/phonon.pc @ONLY)
|
---|
269 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/phonon.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
|
---|
270 | endif(NOT WIN32)
|
---|
271 |
|
---|
272 | macro_display_feature_log()
|
---|