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