From 1e3a6c25bc258021899c0a31ea9b68ea656d8f6b Mon Sep 17 00:00:00 2001
From: Yury G. Kudryashov <urkud.urkud@gmail.com>
Date: Sat, 8 May 2010 18:42:35 +0400
Subject: [PATCH] Find include directories as well

Makes it possible to compile phonon if gstreamer and gst-plugins-base are
installed into different prefixes. Theoretically, should work even if each
plugin is installed into dedicated prefix, but this feature is not tested.
---
 cmake/FindGStreamerPlugins.cmake |  160 +++++++++++++++-----------------------
 gstreamer/CMakeLists.txt         |    4 +-
 gstreamer/ConfigureChecks.cmake  |   10 +-
 3 files changed, 72 insertions(+), 102 deletions(-)

diff --git a/cmake/FindGStreamerPlugins.cmake b/cmake/FindGStreamerPlugins.cmake
index f6d70d5..9e7a4d0 100644
--- a/cmake/FindGStreamerPlugins.cmake
+++ b/cmake/FindGStreamerPlugins.cmake
@@ -2,19 +2,63 @@
 # Once done this will define
 #
 #  GSTREAMERPLUGINSBASE_FOUND - system has GStreamer_Plugins
-#  GSTREAMERPLUGINSBASE_INCLUDE_DIR - the GStreamer_Plugins include directory
+#  GSTREAMERPLUGINSBASE_INCLUDE_DIRS - the GStreamer_Plugins include directories
 #  GSTREAMERPLUGINSBASE_LIBRARIES - the libraries needed to use GStreamer_Plugins
-#  GSTREAMERPLUGINSBASE_DEFINITIONS - Compiler switches required for using GStreamer_Plugins
+#
+# The following variables are set for each plugin PLUGINNAME:
+#
+#  GSTREAMER_PLUGIN_PLUGINNAME_FOUND - plugin is found
+#  GSTREAMER_PLUGIN_PLUGINNAME_INCLUDE_DIR - plugin include directory
+#  GSTREAMER_PLUGIN_PLUGINNAME_LIBRARY - the library needed to use plugin
 #
 #  (c)2009 Nokia Corporation
+#  (c)2010 Yury G. Kudryashov <urkud@ya.ru>
 
 FIND_PACKAGE(PkgConfig REQUIRED)
 
 IF (NOT WIN32)
    # don't make this check required - otherwise you can't use macro_optional_find_package on this one
-   PKG_CHECK_MODULES( PKG_GSTREAMER gstreamer-plugins-base-0.10 )
+   PKG_CHECK_MODULES( PKG_GSTREAMER_PLUGINSBASE gstreamer-plugins-base-0.10 )
 ENDIF (NOT WIN32)
 
+MACRO(MACRO_FIND_GSTREAMER_PLUGIN _plugin _header)
+   STRING(TOUPPER ${_plugin} _upper)
+   IF (NOT WIN32)
+      # don't make this check required - otherwise you can't use macro_optional_find_package on this one
+      PKG_CHECK_MODULES( PKG_GSTREAMER_${_upper} gstreamer-${_plugin}-0.10 )
+   ENDIF (NOT WIN32)
+
+   FIND_LIBRARY(GSTREAMER_PLUGIN_${_upper}_LIBRARY NAMES gst${_plugin}-0.10
+      PATHS
+      ${PKG_GSTREAMER_PLUGINSBASE_LIBRARY_DIRS}
+      ${PKG_GSTREAMER_${_upper}_LIBRARY_DIRS}
+      )
+
+   FIND_PATH(GSTREAMER_PLUGIN_${_upper}_INCLUDE_DIR
+       NAMES gst/${_plugin}/${_header}
+       PATHS
+       ${PKG_GSTREAMER_PLUGINSBASE_INCLUDE_DIRS}
+       ${PKG_GSTREAMER_${_upper}_INCLUDE_DIRS}
+       )
+
+   IF(GSTREAMER_PLUGIN_${_upper}_LIBRARY AND GSTREAMER_PLUGIN_${_upper}_INCLUDE_DIR)
+      SET(GSTREAMER_PLUGIN_${_upper}_FOUND TRUE)
+      LIST(APPEND GSTREAMERPLUGINSBASE_INCLUDE_DIRS GSTREAMER_${_upper}_INCLUDE_DIR)
+      LIST(APPEND GSTREAMERPLUGINSBASE_LIBRARIES GSTREAMER_${_upper}_LIBRARY)
+   ELSE(GSTREAMER_PLUGIN_${_upper}_LIBRARY AND GSTREAMER_PLUGIN_${_upper}_INCLUDE_DIR)
+      MESSAGE(STATUS "Could not find ${_plugin} plugin")
+      MESSAGE(STATUS "${_upper} library: ${GSTREAMER_${_upper}_LIBRARY}")
+      MESSAGE(STATUS "${_upper} include dir: ${GSTREAMER_${_upper}_INCLUDE_DIR}")
+      SET(GSTREAMER_PLUGIN_${_upper}_FOUND FALSE)
+      SET(GSTREAMER_PLUGIN_${_upper}_LIBRARY GSTREAMER_${_upper}_LIBRARY-NOTFOUND)
+      SET(GSTREAMER_PLUGIN_${_upper}_INCLUDE_DIR GSTREAMER_${_upper}_INCLUDE_DIR-NOTFOUND)
+      SET(GSTREAMERPLUGINSBASE_FOUND FALSE)
+   ENDIF(GSTREAMER_PLUGIN_${_upper}_LIBRARY AND GSTREAMER_PLUGIN_${_upper}_INCLUDE_DIR)
+
+   MARK_AS_ADVANCED(GSTREAMER_PLUGIN_${_upper}_LIBRARY
+      GSTREAMER_PLUGIN_${_upper}_INCLUDE_DIR)
+ENDMACRO(MACRO_FIND_GSTREAMER_PLUGIN)
+
 #
 # Base plugins:
 #  audio
@@ -31,87 +75,21 @@ ENDIF (NOT WIN32)
 # The gstinterfaces-0.10 library is found by FindGStreamer.cmake
 #
 
-FIND_LIBRARY(GSTREAMER_PLUGIN_AUDIO_LIBRARIES NAMES gstaudio-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_CDDA_LIBRARIES NAMES gstcdda-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_NETBUFFER_LIBRARIES NAMES gstnetbuffer-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_PBUTILS_LIBRARIES NAMES gstpbutils-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_RIFF_LIBRARIES NAMES gstriff-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_RTP_LIBRARIES NAMES gstrtp-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_RTSP_LIBRARIES NAMES gstrtsp-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_SDP_LIBRARIES NAMES gstsdp-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_TAG_LIBRARIES NAMES gsttag-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-FIND_LIBRARY(GSTREAMER_PLUGIN_VIDEO_LIBRARIES NAMES gstvideo-0.10
-   PATHS
-   ${PKG_GSTREAMER_LIBRARY_DIRS}
-   )
-
-IF (GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND
-    GSTREAMER_PLUGIN_CDDA_LIBRARIES AND
-    GSTREAMER_PLUGIN_NETBUFFER_LIBRARIES AND
-    GSTREAMER_PLUGIN_PBUTILS_LIBRARIES AND
-    GSTREAMER_PLUGIN_RIFF_LIBRARIES AND
-    GSTREAMER_PLUGIN_RTP_LIBRARIES AND
-    GSTREAMER_PLUGIN_RTSP_LIBRARIES AND
-    GSTREAMER_PLUGIN_SDP_LIBRARIES AND
-    GSTREAMER_PLUGIN_TAG_LIBRARIES AND
-    GSTREAMER_PLUGIN_VIDEO_LIBRARIES)
-   SET(GSTREAMERPLUGINSBASE_FOUND TRUE)
-ELSE (GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND
-    GSTREAMER_PLUGIN_CDDA_LIBRARIES AND
-    GSTREAMER_PLUGIN_NETBUFFER_LIBRARIES AND
-    GSTREAMER_PLUGIN_PBUTILS_LIBRARIES AND
-    GSTREAMER_PLUGIN_RIFF_LIBRARIES AND
-    GSTREAMER_PLUGIN_RTP_LIBRARIES AND
-    GSTREAMER_PLUGIN_RTSP_LIBRARIES AND
-    GSTREAMER_PLUGIN_SDP_LIBRARIES AND
-    GSTREAMER_PLUGIN_TAG_LIBRARIES AND
-    GSTREAMER_PLUGIN_VIDEO_LIBRARIES)
-   SET(GSTREAMERPLUGINSBASE_FOUND FALSE)
-ENDIF (GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND
-    GSTREAMER_PLUGIN_CDDA_LIBRARIES AND
-    GSTREAMER_PLUGIN_NETBUFFER_LIBRARIES AND
-    GSTREAMER_PLUGIN_PBUTILS_LIBRARIES AND
-    GSTREAMER_PLUGIN_RIFF_LIBRARIES AND
-    GSTREAMER_PLUGIN_RTP_LIBRARIES AND
-    GSTREAMER_PLUGIN_RTSP_LIBRARIES AND
-    GSTREAMER_PLUGIN_SDP_LIBRARIES AND
-    GSTREAMER_PLUGIN_TAG_LIBRARIES AND
-    GSTREAMER_PLUGIN_VIDEO_LIBRARIES)
+SET(GSTREAMER_PLUGINSBASE_FOUND TRUE)
+MACRO_FIND_GSTREAMER_PLUGIN(audio audio.h)
+MACRO_FIND_GSTREAMER_PLUGIN(cdda gstcddabasesrc.h)
+MACRO_FIND_GSTREAMER_PLUGIN(netbuffer gstnetbuffer.h)
+MACRO_FIND_GSTREAMER_PLUGIN(pbutils pbutils.h)
+MACRO_FIND_GSTREAMER_PLUGIN(riff riff-ids.h)
+MACRO_FIND_GSTREAMER_PLUGIN(rtp gstrtpbuffer.h)
+MACRO_FIND_GSTREAMER_PLUGIN(rtsp gstrtspdefs.h)
+MACRO_FIND_GSTREAMER_PLUGIN(sdp gstsdp.h)
+MACRO_FIND_GSTREAMER_PLUGIN(tag tag.h)
+MACRO_FIND_GSTREAMER_PLUGIN(video video.h)
 
 IF (GSTREAMERPLUGINSBASE_FOUND)
-   SET(GSTREAMERPLUGINS_FOUND TRUE)
-ELSE (GSTREAMERPLUGINSBASE_FOUND)
-   SET(GSTREAMERPLUGINS_FOUND FALSE)
-ENDIF (GSTREAMERPLUGINSBASE_FOUND)
-
-IF (GSTREAMERPLUGINS_FOUND)
+   LIST(REMOVE_DUPLICATES GSTREAMERPLUGINSBASE_LIBRARIES)
+   LIST(REMOVE_DUPLICATES GSTREAMERPLUGINSBASE_INCLUDE_DIRS)
    IF (NOT GStreamer_Plugins_FIND_QUIETLY)
       MESSAGE(STATUS "Found GStreamer Plugins:
     ${GSTREAMER_PLUGIN_AUDIO_LIBRARIES}
@@ -125,20 +103,10 @@ IF (GSTREAMERPLUGINS_FOUND)
     ${GSTREAMER_PLUGIN_TAG_LIBRARIES}
     ${GSTREAMER_PLUGIN_VIDEO_LIBRARIES}")
    ENDIF (NOT GStreamer_Plugins_FIND_QUIETLY)
-ELSE (GSTREAMERPLUGINS_FOUND)
+ELSE (GSTREAMERPLUGINSBASE_FOUND)
+   SET(GSTREAMERPLUGINSBASE_LIBRARIES GSTREAMERPLUGINSBASE_LIBRARIES-NOTFOUND)
+   SET(GSTREAMERPLUGINSBASE_INCLUDE_DIRS GSTREAMERPLUGINSBASE_INCLUDE_DIRS-NOTFOUND)
    IF (GStreamer_Plugins_FIND_REQUIRED)
       MESSAGE(SEND_ERROR "Could NOT find GStreamer Plugins")
    ENDIF (GStreamer_Plugins_FIND_REQUIRED)
-ENDIF (GSTREAMERPLUGINS_FOUND)
-
-MARK_AS_ADVANCED(GSTREAMERPLUGINS_DEFINITIONS
-    GSTREAMER_PLUGIN_AUDIO_LIBRARIES
-    GSTREAMER_PLUGIN_CDDA_LIBRARIES
-    GSTREAMER_PLUGIN_NETBUFFER_LIBRARIES
-    GSTREAMER_PLUGIN_PBUTILS_LIBRARIES
-    GSTREAMER_PLUGIN_RIFF_LIBRARIES
-    GSTREAMER_PLUGIN_RTP_LIBRARIES
-    GSTREAMER_PLUGIN_RTSP_LIBRARIES
-    GSTREAMER_PLUGIN_SDP_LIBRARIES
-    GSTREAMER_PLUGIN_TAG_LIBRARIES
-    GSTREAMER_PLUGIN_VIDEO_LIBRARIES)
+ENDIF (GSTREAMERPLUGINSBASE_FOUND)
diff --git a/gstreamer/CMakeLists.txt b/gstreamer/CMakeLists.txt
index d529fb6..c42710b 100644
--- a/gstreamer/CMakeLists.txt
+++ b/gstreamer/CMakeLists.txt
@@ -20,6 +20,8 @@ if (BUILD_PHONON_GSTREAMER)
    include_directories(
 	  ${CMAKE_CURRENT_BINARY_DIR}
 	  ${GSTREAMER_INCLUDE_DIR}
+	  ${GSTREAMER_PLUGIN_VIDEO_INCLUDE_DIR}
+	  ${GSTREAMER_PLUGIN_AUDIO_INCLUDE_DIR}
 	  ${GLIB2_INCLUDE_DIR}
       ${LIBXML2_INCLUDE_DIR}
 	  ${X11_X11_INCLUDE_PATH})
@@ -78,7 +80,7 @@ if (BUILD_PHONON_GSTREAMER)
       ${QT_QTOPENGL_LIBRARY}
       ${PHONON_LIBS} ${OPENGL_gl_LIBRARY}
       ${GSTREAMER_LIBRARIES} ${GSTREAMER_BASE_LIBRARY} ${GSTREAMER_INTERFACE_LIBRARY}
-      ${GSTREAMER_PLUGIN_VIDEO_LIBRARIES} ${GSTREAMER_PLUGIN_AUDIO_LIBRARIES}
+      ${GSTREAMER_PLUGIN_VIDEO_LIBRARY} ${GSTREAMER_PLUGIN_AUDIO_LIBRARY}
       ${GLIB2_LIBRARIES} ${GOBJECT_LIBRARIES})
    if(ALSA_FOUND)
       target_link_libraries(phonon_gstreamer ${ASOUND_LIBRARY})
diff --git a/gstreamer/ConfigureChecks.cmake b/gstreamer/ConfigureChecks.cmake
index 095a0e9..73616fa 100644
--- a/gstreamer/ConfigureChecks.cmake
+++ b/gstreamer/ConfigureChecks.cmake
@@ -16,8 +16,8 @@ macro_optional_find_package(GStreamer)
 macro_log_feature(GSTREAMER_FOUND "GStreamer" "gstreamer 0.10 is required for the multimedia backend" "http://gstreamer.freedesktop.org/modules/" FALSE "0.10")
 
 macro_optional_find_package(GStreamerPlugins)
-macro_log_feature(GSTREAMER_PLUGIN_VIDEO_LIBRARIES "GStreamer video plugin" "The gstreamer video plugin (part of gstreamer-plugins-base 0.10) is required for the multimedia gstreamer backend" "http://gstreamer.freedesktop.org/modules/" FALSE "0.10")
-macro_log_feature(GSTREAMER_PLUGIN_AUDIO_LIBRARIES "GStreamer audio plugin" "The gstreamer audio plugin (part of gstreamer-plugins-base 0.10) is required for the multimedia gstreamer backend" "http://gstreamer.freedesktop.org/modules/" FALSE "0.10")
+macro_log_feature(GSTREAMER_PLUGIN_VIDEO_FOUND "GStreamer video plugin" "The gstreamer video plugin (part of gstreamer-plugins-base 0.10) is required for the multimedia gstreamer backend" "http://gstreamer.freedesktop.org/modules/" FALSE "0.10")
+macro_log_feature(GSTREAMER_PLUGIN_AUDIO_FOUND "GStreamer audio plugin" "The gstreamer audio plugin (part of gstreamer-plugins-base 0.10) is required for the multimedia gstreamer backend" "http://gstreamer.freedesktop.org/modules/" FALSE "0.10")
 
 macro_optional_find_package(GLIB2)
 macro_log_feature(GLIB2_FOUND "GLib2" "GLib 2 is required to compile the gstreamer backend for Phonon" "http://www.gtk.org/download/" FALSE)
@@ -31,8 +31,8 @@ macro_log_feature(LIBXML2_FOUND "LibXml2" "LibXml2 is required to compile the gs
 macro_optional_find_package(OpenGL)
 macro_log_feature(OPENGL_FOUND "OpenGL" "OpenGL support is required to compile the gstreamer backend for Phonon" "" FALSE)
 
-if (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND)
+if (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_FOUND AND GSTREAMER_PLUGIN_AUDIO_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND)
    set(BUILD_PHONON_GSTREAMER TRUE)
-else (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND)
+else (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_FOUND AND GSTREAMER_PLUGIN_AUDIO_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND)
    set(BUILD_PHONON_GSTREAMER FALSE)
-endif (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_LIBRARIES AND GSTREAMER_PLUGIN_AUDIO_LIBRARIES AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND)
+endif (GSTREAMER_FOUND AND GSTREAMER_PLUGIN_VIDEO_FOUND AND GSTREAMER_PLUGIN_AUDIO_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND LIBXML2_FOUND AND OPENGL_FOUND)
-- 
1.7.1

