misc patch to help opengl plugin build on win32 with msvc

comic fans comicfans44 at gmail.com
Mon Oct 28 02:53:16 CET 2013


of course , I will put it


On Fri, Oct 25, 2013 at 5:45 PM, Tim-Philipp Müller <t.i.m at zen.co.uk> wrote:

> On Fri, 2013-10-25 at 07:49 +0800, comicfans44 wrote:
>
> Hi,
>
> > and this is the last patch
>
> could you put patches in bugzilla please, so we don't forget about them?
> Thanks!
>
> Cheers
>  -Tim
>
> > From 793fb96c58d694a8d743035b9a7450771a3ad029 Mon Sep 17 00:00:00 2001
> > From: comicfans44
> > Date: Thu, 24 Oct 2013 16:44:29 +0800
> > Subject: [PATCH] fix MSVC can not link to gstgl bug
> >
> > ---
> >  gst-libs/gst/gl/CMakeLists.txt |    3 +--
> >  1 file changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/gst-libs/gst/gl/CMakeLists.txt
> b/gst-libs/gst/gl/CMakeLists.txt
> > index 6ac3013..7a98bae 100644
> > --- a/gst-libs/gst/gl/CMakeLists.txt
> > +++ b/gst-libs/gst/gl/CMakeLists.txt
> > @@ -34,7 +34,7 @@ add_custom_command(OUTPUT ${glconfigpath}
> >   )
> >
> >
> > -add_library(gstgl SHARED
> > +add_library(gstgl
> >   ${PROJECT_BINARY_DIR}/config.h
> >   ${glconfigpath}
> >      ${srcs} )
> > @@ -53,7 +53,6 @@ set_target_properties(gstgl PROPERTIES
> >  add_dependencies(gstgl ${glconfigpath} ${PROJECT_BINARY_DIR}/config.h)
> >
> >  install(TARGETS gstgl
> > - LIBRARY DESTINATION bin
> >   ARCHIVE DESTINATION lib)
> >
> >  file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
> > --
> > 1.7.9.5
> >
> > ----- Original Message -----
> > From:   comicfans44
> > To:   gstreamer-devel
> > Date:  2013-10-24, 16:23:37
> > Subject:  misc patch to help opengl plugin build on win32 with msvc
> >
> >
> >
> > 原邮件附件清单如下:
> > 0001-improve-CMake-build-system.patch
> > 0002-improve-MSVC-vc10-compatibility.patch
> > 0003-improve-cmake-build-script-add-install-target.patch
> >
> > >Hello ,
> > >    I'm trying to implement some element based on opengl plugin on
> win32,
> > >but I found the CMake build script is incomplete, and some headers are
> not
> > >compatible with msvc , so I made some patch to complete the CMake build
> script,
> > >hopes this can help others working with msvc.
> > >    I don't know if it's good to post whole patch here,anyway I posted
> it.
> > >patch also avaiable as attachments.
> > >
> > >0001-improve-CMake-build-system.patch :
> > >
> > >From e6ba08a4872907a85f795b0a30e6d9babcd39568 Mon Sep 17 00:00:00 2001
> > >From: comicfans44
> > >Date: Tue, 22 Oct 2013 10:33:00 +0800
> > >Subject: [PATCH 1/3] improve CMake build system
> > >gstreamer main modules came with VS project for msvc build,
> > >but gl plugin's VS project is out of date. I made some
> > >improve to current (not-complete) CMake build script,makes
> > >building  msvc version easier. this script can also build in Linux ,but
> > >not behave exactly the same as autoconf.
> > >---
> > > CMakeLists.txt                    |   61 +++++++----------
> > > cmake/modules/FindGLIB2.cmake     |   46 +++++++++++++
> > > cmake/modules/FindGObject.cmake   |   78 +++++++++++++++++++++
> > > cmake/modules/FindGStreamer.cmake |  135
> +++++++++++++++++++++++++++++++++++++
> > > gst-libs/CMakeLists.txt           |    1 +
> > > gst-libs/gst/CMakeLists.txt       |    1 +
> > > gst-libs/gst/gl/CMakeLists.txt    |   21 ++++++
> > > gst/CMakeLists.txt                |    1 +
> > > gst/gl/CMakeLists.txt             |   25 +++++++
> > > 9 files changed, 332 insertions(+), 37 deletions(-)
> > > create mode 100644 cmake/modules/FindGLIB2.cmake
> > > create mode 100644 cmake/modules/FindGObject.cmake
> > > create mode 100644 cmake/modules/FindGStreamer.cmake
> > > create mode 100644 gst-libs/CMakeLists.txt
> > > create mode 100644 gst-libs/gst/CMakeLists.txt
> > > create mode 100644 gst-libs/gst/gl/CMakeLists.txt
> > > create mode 100644 gst/CMakeLists.txt
> > > create mode 100644 gst/gl/CMakeLists.txt
> > >diff --git a/CMakeLists.txt b/CMakeLists.txt
> > >index e633e59..10f14a6 100644
> > >--- a/CMakeLists.txt
> > >+++ b/CMakeLists.txt
> > >@@ -7,46 +7,28 @@ cmake_minimum_required(VERSION "2.8.0")
> > > # pkg_check_modules(GSTREAMER gstreamer-0.10)
> > > # ---
> > >
> > >-list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
> > >+list(APPEND CMAKE_MODULE_PATH
> > >+${CMAKE_SOURCE_DIR}/cmake/modules)
> > >
> > > project (GST-PLUGINS-GL)
> > >
> > >-if (WIN32)
> > >-  set(OSSBUILD_SDK_DIR $ENV{OSSBUILD_GSTREAMER_SDK_DIR})
> > >-  if (OSSBUILD_SDK_DIR)
> > >-    set(OSSBUILD_SDK_INCLUDE_DIR ${OSSBUILD_SDK_DIR}/include)
> > >-    #set(CMAKE_PREFIX_PATH ${OSSBUILD_SDK_DIR})
> > >-    set(CMAKE_INCLUDE_PATH ${OSSBUILD_SDK_INCLUDE_DIR})
> > >-    set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH}
> ${OSSBUILD_SDK_INCLUDE_DIR}/glib-2.0)
> > >-    set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH}
> ${OSSBUILD_SDK_INCLUDE_DIR}/gstreamer-0.10)
> > >-    set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH}
> ${OSSBUILD_SDK_INCLUDE_DIR}/libxml2)
> > >-  endif (OSSBUILD_SDK_DIR)
> > >-  set(OSSBUILD_DIR $ENV{OSSBUILD_GSTREAMER_DIR})
> > >-  if (OSSBUILD_DIR)
> > >-    #set(ENV{GSTREAMER_DIR} ${OSSBUILD_DIR})
> > >-    set(CMAKE_LIBRARY_PATH ${OSSBUILD_DIR}/bin)
> > >-    set(JPEG_NAMES jpeg-8)
> > >-    #set(FREETYPE_NAMES freetype-6)
> > >-    message(STATUS ${CMAKE_LIBRARY_PATH})
> > >-  endif (OSSBUILD_DIR)
> > >-endif (WIN32)
> > >+
> > >
> > > # built-in
> > > find_package(OpenGL REQUIRED)
> > >-find_package(GTK2 REQUIRED)
> > >-find_package(Glib2 REQUIRED)
> > >+#find_package(GTK2 REQUIRED)
> > >+find_package(GLIB2 REQUIRED)
> > > find_package(LibXml2 REQUIRED)
> > > find_package(JPEG REQUIRED)
> > >-find_package(PNG REQUIRED)
> > >+#find_package(PNG REQUIRED)
> > > find_package(ZLIB REQUIRED)
> > >
> > >-# home made
> > >-find_package(Glib2 REQUIRED)
> > >-find_package(Gstreamer REQUIRED)
> > >-find_package(Glew REQUIRED)
> > >-find_package(LibIconv REQUIRED)
> > >-find_package(ATK REQUIRED)
> > >-find_package(Cairo REQUIRED)
> > >+
> > >+find_package(GStreamer REQUIRED)
> > >+find_package(GLEW REQUIRED)
> > >+#find_package(LibIconv REQUIRED)
> > >+#find_package(ATK REQUIRED)
> > >+#find_package(Cairo REQUIRED)
> > >
> > > function(check_package name LEVEL)
> > >   if (${name}_FOUND)
> > >@@ -67,8 +49,6 @@ endfunction(check_package)
> > > check_package(GLIB2 1)
> > > check_package(GSTREAMER 1)
> > > check_package(OPENGL 1)
> > >-check_package(GLEW 1)
> > >-check_package(PNG 1)
> > > if (WIN32)
> > > check_package(ZLIB 1)
> > > endif (WIN32)
> > >@@ -78,13 +58,11 @@ INCLUDE (CheckIncludeFiles)
> > > CHECK_INCLUDE_FILES (${GSTREAMER_DIR}/include/gst/gstconfig.h
> GST_USING_BINARY_REGISTRY)
> > > if (NOT GST_USING_BINARY_REGISTRY)
> > > check_package(LIBXML2 1)
> > >-check_package(LIBICONV 1)
> > >+#check_package(LIBICONV 1)
> > > endif (NOT GST_USING_BINARY_REGISTRY)
> > >
> > > # optionnal packages
> > >-check_package(GTK2 0)
> > >-check_package(ATK 0)
> > >-check_package(CAIRO 0)
> > >+
> > >
> > > # debug
> > > #message("****" ${GLIB2_INCLUDE_DIR})
> > >@@ -104,10 +82,19 @@ check_package(CAIRO 0)
> > > #message("****" ${ATK_INCLUDE_DIR})
> > > #message("****" ${CAIRO_INCLUDE_DIR})
> > >
> > >+
> > >+include_directories(
> > >+    ${GSTREAMER_INCLUDE_DIRS}
> > >+    ${GLIB2_INCLUDE_DIR}
> > >+    gst-libs)
> > >+
> > >+add_definitions(-DHAVE_CONFIG_H)
> > >+
> > > add_subdirectory (gst-libs)
> > >+
> > >+
> > > add_subdirectory (gst)
> > >
> > > #add_dependencies(gstgl)
> > >
> > > #FIXME: generate config.h
> > >-add_definitions(-DHAVE_CONFIG_H)
> > >diff --git a/cmake/modules/FindGLIB2.cmake
> b/cmake/modules/FindGLIB2.cmake
> > >new file mode 100644
> > >index 0000000..d747ed5
> > >--- /dev/null
> > >+++ b/cmake/modules/FindGLIB2.cmake
> > >@@ -0,0 +1,46 @@
> > >+FILE(TO_CMAKE_PATH "$ENV{GLIB2_DIR}" TRY1_DIR)
> > >+FILE(TO_CMAKE_PATH "${GLIB2_DIR}" TRY2_DIR)
> > >+FILE(GLOB GLIB2_DIR ${TRY1_DIR} ${TRY2_DIR})
> > >+
> > >+FIND_PATH(GLIB_glib_2_INCLUDE_DIR glib.h
> > >+                                  PATHS ${GLIB2_DIR}/include
> ${GLIB2_DIR}/include/glib-2.0 /usr/local/include/glib-2.0
> /usr/include/glib-2.0 /opt/local/include/glib-2.0
> > >+                                  ENV INCLUDE DOC "Directory
> containing glib.h include file")
> > >+
> > >+FIND_PATH(GLIB_glibconfig_2_INCLUDE_DIR glibconfig.h
> > >+                                        PATHS ${GLIB2_DIR}/include
> > >+${GLIB2_DIR}/include/glib-2.0 ${GLIB2_DIR}/lib/include
> ${GLIB2_DIR}/lib/glib-2.0/include /usr/local/include/glib-2.0
> /usr/include/glib-2.0 /usr/lib/glib-2.0/include
> /usr/local/lib/glib-2.0/include /opt/local/lib/glib-2.0/include
> > >+
> > >+     /usr/lib/i386-linux-gnu/glib-2.0/include/
> > >+                                        ENV INCLUDE DOC "Directory
> containing glibconfig.h include file")
> > >+
> > >+FIND_LIBRARY(GLIB_glib_2_LIBRARY NAMES glib-2.0
> > >+                                 PATHS ${GLIB2_DIR}/bin
> ${GLIB2_DIR}/win32/bin ${GLIB2_DIR}/lib ${GLIB2_DIR}/win32/lib
> /usr/local/lib /usr/lib /opt/local/lib
> > >+                                 ENV LIB
> > >+                                 DOC "glib library to link with"
> > >+                                 NO_SYSTEM_ENVIRONMENT_PATH)
> > >+
> > >+FIND_LIBRARY(GLIB_gmodule_2_LIBRARY NAMES gmodule-2.0
> > >+                                    PATHS ${GLIB2_DIR}/bin
> ${GLIB2_DIR}/win32/bin ${GLIB2_DIR}/lib ${GLIB2_DIR}/win32/lib
> /usr/local/lib /usr/lib /opt/local/lib
> > >+                                    ENV LIB
> > >+                                    DOC "gmodule library to link with"
> > >+                                    NO_SYSTEM_ENVIRONMENT_PATH)
> > >+
> > >+FIND_LIBRARY(GLIB_gobject_2_LIBRARY NAMES gobject-2.0
> > >+                                    PATHS ${GLIB2_DIR}/bin
> ${GLIB2_DIR}/win32/bin ${GLIB2_DIR}/lib ${GLIB2_DIR}/win32/lib
> /usr/local/lib /usr/lib /opt/local/lib
> > >+                                    ENV LIB
> > >+                                    DOC "gobject library to link with"
> > >+                                    NO_SYSTEM_ENVIRONMENT_PATH)
> > >+
> > >+FIND_LIBRARY(GLIB_gthread_2_LIBRARY NAMES gthread-2.0
> > >+                                    PATHS ${GLIB2_DIR}/bin
> ${GLIB2_DIR}/win32/bin ${GLIB2_DIR}/lib ${GLIB2_DIR}/win32/lib
> /usr/local/lib /usr/lib /opt/local/lib
> > >+                                    ENV LIB
> > >+                                    DOC "gthread library to link with"
> > >+                                    NO_SYSTEM_ENVIRONMENT_PATH)
> > >+
> > >+IF (GLIB_glib_2_INCLUDE_DIR AND GLIB_glibconfig_2_INCLUDE_DIR AND
> GLIB_glib_2_LIBRARY AND GLIB_gmodule_2_LIBRARY AND GLIB_gobject_2_LIBRARY
> AND GLIB_gthread_2_LIBRARY)
> > >+  SET(GLIB2_INCLUDE_DIR ${GLIB_glib_2_INCLUDE_DIR}
> ${GLIB_glibconfig_2_INCLUDE_DIR})
> > >+  list(REMOVE_DUPLICATES GLIB2_INCLUDE_DIR)
> > >+  SET(GLIB2_LIBRARIES ${GLIB_glib_2_LIBRARY} ${GLIB_gmodule_2_LIBRARY}
> ${GLIB_gobject_2_LIBRARY} ${GLIB_gthread_2_LIBRARY})
> > >+  list(REMOVE_DUPLICATES GLIB2_LIBRARIES)
> > >+  SET(GLIB2_FOUND TRUE)
> > >+ENDIF (GLIB_glib_2_INCLUDE_DIR AND GLIB_glibconfig_2_INCLUDE_DIR AND
> GLIB_glib_2_LIBRARY AND GLIB_gmodule_2_LIBRARY AND GLIB_gobject_2_LIBRARY
> AND GLIB_gthread_2_LIBRARY)
> > >diff --git a/cmake/modules/FindGObject.cmake
> b/cmake/modules/FindGObject.cmake
> > >new file mode 100644
> > >index 0000000..51c63f0
> > >--- /dev/null
> > >+++ b/cmake/modules/FindGObject.cmake
> > >@@ -0,0 +1,78 @@
> > >+# - Try to find GObject
> > >+# Once done this will define
> > >+#
> > >+# GOBJECT_FOUND - system has GObject
> > >+# GOBJECT_INCLUDE_DIR - the GObject include directory
> > >+# GOBJECT_LIBRARIES - the libraries needed to use GObject
> > >+# GOBJECT_DEFINITIONS - Compiler switches required for using GObject
> > >+
> > >+# Copyright (c) 2006, Tim Beaulen
> > >+# Copyright (c) 2008 Helio Chissini de Castro,
> > >+#
> > >+# Redistribution and use is allowed according to the terms of the BSD
> license.
> > >+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
> > >+
> > >+
> > >+IF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
> > >+# in cache already
> > >+SET(GObject_FIND_QUIETLY TRUE)
> > >+ELSE (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
> > >+SET(GObject_FIND_QUIETLY FALSE)
> > >+ENDIF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
> > >+
> > >+IF (NOT WIN32)
> > >+FIND_PACKAGE(PkgConfig REQUIRED)
> > >+# use pkg-config to get the directories and then use these values
> > >+# in the FIND_PATH() and FIND_LIBRARY() calls
> > >+PKG_CHECK_MODULES(PKG_GOBJECT2 REQUIRED gobject-2.0)
> > >+SET(GOBJECT_DEFINITIONS ${PKG_GOBJECT2_CFLAGS})
> > >+ENDIF (NOT WIN32)
> > >+
> > >+FIND_PATH(GOBJECT_INCLUDE_DIR gobject/gobject.h
> > >+PATHS
> > >+${PKG_GOBJECT2_INCLUDE_DIRS}
> > >+/usr/include/glib-2.0/
> > >+PATH_SUFFIXES glib-2.0
> > >+)
> > >+
> > >+FIND_LIBRARY(_GObjectLibs NAMES gobject-2.0
> > >+PATHS
> > >+${PKG_GOBJECT2_LIBRARY_DIRS}
> > >+)
> > >+FIND_LIBRARY(_GModuleLibs NAMES gmodule-2.0
> > >+PATHS
> > >+${PKG_GOBJECT2_LIBRARY_DIRS}
> > >+)
> > >+FIND_LIBRARY(_GThreadLibs NAMES gthread-2.0
> > >+PATHS
> > >+${PKG_GOBJECT2_LIBRARY_DIRS}
> > >+)
> > >+FIND_LIBRARY(_GLibs NAMES glib-2.0
> > >+PATHS
> > >+${PKG_GOBJECT2_LIBRARY_DIRS}
> > >+)
> > >+
> > >+IF (WIN32)
> > >+SET (GOBJECT_LIBRARIES ${_GObjectLibs} ${_GModuleLibs} ${_GThreadLibs}
> ${_GLibs})
> > >+ELSE (WIN32)
> > >+SET (GOBJECT_LIBRARIES ${PKG_GOBJECT2_LIBRARIES})
> > >+ENDIF (WIN32)
> > >+
> > >+IF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
> > >+SET(GOBJECT_FOUND TRUE)
> > >+ELSE (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
> > >+SET(GOBJECT_FOUND FALSE)
> > >+ENDIF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
> > >+
> > >+IF (GOBJECT_FOUND)
> > >+IF (NOT GObject_FIND_QUIETLY)
> > >+MESSAGE(STATUS "Found GObject libraries: ${GOBJECT_LIBRARIES}")
> > >+MESSAGE(STATUS "Found GObject includes : ${GOBJECT_INCLUDE_DIR}")
> > >+ENDIF (NOT GObject_FIND_QUIETLY)
> > >+ELSE (GOBJECT_FOUND)
> > >+IF (GObject_FIND_REQUIRED)
> > >+MESSAGE(STATUS "Could NOT find GObject")
> > >+ENDIF(GObject_FIND_REQUIRED)
> > >+ENDIF (GOBJECT_FOUND)
> > >+
> > >+MARK_AS_ADVANCED(GOBJECT_INCLUDE_DIR GOBJECT_LIBRARIES)
> > >\ No newline at end of file
> > >diff --git a/cmake/modules/FindGStreamer.cmake
> b/cmake/modules/FindGStreamer.cmake
> > >new file mode 100644
> > >index 0000000..4414e62
> > >--- /dev/null
> > >+++ b/cmake/modules/FindGStreamer.cmake
> > >@@ -0,0 +1,135 @@
> > >+# - Try to find GStreamer and its plugins
> > >+# Once done, this will define
> > >+#
> > >+#  GSTREAMER_FOUND - system has GStreamer
> > >+#  GSTREAMER_INCLUDE_DIRS - the GStreamer include directories
> > >+#  GSTREAMER_LIBRARIES - link these to use GStreamer
> > >+#
> > >+# Additionally, gstreamer-base is always looked for and required, and
> > >+# the following related variables are defined:
> > >+#
> > >+#  GSTREAMER_BASE_INCLUDE_DIRS - gstreamer-base's include directory
> > >+#  GSTREAMER_BASE_LIBRARIES - link to these to use gstreamer-base
> > >+#
> > >+# Optionally, the COMPONENTS keyword can be passed to find_package()
> > >+# and GStreamer plugins can be looked for.  Currently, the following
> > >+# plugins can be searched, and they define the following variables if
> > >+# found:
> > >+#
> > >+#  gstreamer-app:        GSTREAMER_APP_INCLUDE_DIRS and
> GSTREAMER_APP_LIBRARIES
> > >+#  gstreamer-audio:      GSTREAMER_AUDIO_INCLUDE_DIRS and
> GSTREAMER_AUDIO_LIBRARIES
> > >+#  gstreamer-fft:        GSTREAMER_FFT_INCLUDE_DIRS and
> GSTREAMER_FFT_LIBRARIES
> > >+#  gstreamer-pbutils:    GSTREAMER_PBUTILS_INCLUDE_DIRS and
> GSTREAMER_PBUTILS_LIBRARIES
> > >+#  gstreamer-video:      GSTREAMER_VIDEO_INCLUDE_DIRS and
> GSTREAMER_VIDEO_LIBRARIES
> > >+#  gstreamer-gl:     GSTREAMER_GL_INCLUDE_DIRS and
> GSTREAMER_GL_LIBRARIES
> > >+#
> > >+# Copyright (C) 2012 Raphael Kubo da Costa
> > >+#
> > >+# Redistribution and use in source and binary forms, with or without
> > >+# modification, are permitted provided that the following conditions
> > >+# are met:
> > >+# 1.  Redistributions of source code must retain the above copyright
> > >+#     notice, this list of conditions and the following disclaimer.
> > >+# 2.  Redistributions in binary form must reproduce the above copyright
> > >+#     notice, this list of conditions and the following disclaimer in
> the
> > >+#     documentation and/or other materials provided with the
> distribution.
> > >+#
> > >+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS
> CONTRIBUTORS ``AS
> > >+# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> LIMITED TO,
> > >+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
> PARTICULAR
> > >+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
> > >+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> > >+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> > >+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
> PROFITS;
> > >+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> LIABILITY,
> > >+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
> OR
> > >+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
> IF
> > >+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> > >+
> > >+find_package(PkgConfig)
> > >+
> > >+# Helper macro to find a GStreamer plugin (or GStreamer itself)
> > >+#   _component_prefix is prepended to the _INCLUDE_DIRS and _LIBRARIES
> variables (eg. "GSTREAMER_AUDIO")
> > >+#   _pkgconfig_name is the component's pkg-config name (eg.
> "gstreamer-1.0", or "gstreamer-video-1.0").
> > >+#   _header is the component's header, relative to the gstreamer-1.0
> directory (eg. "gst/gst.h").
> > >+#   _library is the component's library name (eg. "gstreamer-1.0" or
> "gstvideo-1.0")
> > >+macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name
> _header _library)
> > >+    # FIXME: The QUIET keyword can be used once we require CMake 2.8.2.
> > >+    pkg_check_modules(PC_${_component_prefix} ${_pkgconfig_name})
> > >+
> > >+    find_path(${_component_prefix}_INCLUDE_DIRS
> > >+        NAMES ${_header}
> > >+        HINTS ${PC_${_component_prefix}_INCLUDE_DIRS}
> ${PC_${_component_prefix}_INCLUDEDIR}
> > >+        PATH_SUFFIXES gstreamer-1.0
> > >+    )
> > >+
> > >+    find_library(${_component_prefix}_LIBRARIES
> > >+        NAMES ${_library}
> > >+        HINTS ${PC_${_component_prefix}_LIBRARY_DIRS}
> ${PC_${_component_prefix}_LIBDIR}
> > >+    )
> > >+endmacro()
> > >+
> > >+# ------------------------
> > >+# 1. Find GStreamer itself
> > >+# ------------------------
> > >+
> > >+# 1.1. Find headers and libraries
> > >+FIND_GSTREAMER_COMPONENT(GSTREAMER gstreamer-1.0 gst/gst.h
> gstreamer-1.0)
> > >+FIND_GSTREAMER_COMPONENT(GSTREAMER_BASE gstreamer-base-1.0 gst/gst.h
> gstbase-1.0)
> > >+
> > >+# 1.2. Check GStreamer version
> > >+if (GSTREAMER_INCLUDE_DIRS)
> > >+    if (EXISTS "${GSTREAMER_INCLUDE_DIRS}/gst/gstversion.h")
> > >+        file(READ "${GSTREAMER_INCLUDE_DIRS}/gst/gstversion.h"
> GSTREAMER_VERSION_CONTENTS)
> > >+
> > >+        string(REGEX MATCH "#define +GST_VERSION_MAJOR
> +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
> > >+        set(GSTREAMER_VERSION_MAJOR "${CMAKE_MATCH_1}")
> > >+
> > >+        string(REGEX MATCH "#define +GST_VERSION_MINOR
> +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
> > >+        set(GSTREAMER_VERSION_MINOR "${CMAKE_MATCH_1}")
> > >+
> > >+        string(REGEX MATCH "#define +GST_VERSION_MICRO
> +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
> > >+        set(GSTREAMER_VERSION_MICRO "${CMAKE_MATCH_1}")
> > >+
> > >+        set(GSTREAMER_VERSION
> "${GSTREAMER_VERSION_MAJOR}.${GSTREAMER_VERSION_MINOR}.${GSTREAMER_VERSION_MICRO}")
> > >+    endif ()
> > >+endif ()
> > >+
> > >+# FIXME: With CMake 2.8.3 we can just pass GSTREAMER_VERSION to
> FIND_PACKAGE_HANDLE_STANDARD_ARGS as VERSION_VAR
> > >+#        and remove the version check here (GSTREAMER_FIND_VERSION
> would be passed to FIND_PACKAGE).
> > >+set(VERSION_OK TRUE)
> > >+if (GSTREAMER_FIND_VERSION_EXACT)
> > >+    if (NOT(("${GSTREAMER_FIND_VERSION}" VERSION_EQUAL
> "${GSTREAMER_VERSION}")))
> > >+        set(VERSION_OK FALSE)
> > >+    endif ()
> > >+else ()
> > >+    if ("${GSTREAMER_VERSION}" VERSION_LESS
> "${GSTREAMER_FIND_VERSION}")
> > >+        set(VERSION_OK FALSE)
> > >+    endif ()
> > >+endif ()
> > >+
> > >+# -------------------------
> > >+# 2. Find GStreamer plugins
> > >+# -------------------------
> > >+
> > >+FIND_GSTREAMER_COMPONENT(GSTREAMER_APP gstreamer-app-1.0
> gst/app/gstappsink.h gstapp-1.0)
> > >+FIND_GSTREAMER_COMPONENT(GSTREAMER_AUDIO gstreamer-audio-1.0
> gst/audio/audio.h gstaudio-1.0)
> > >+FIND_GSTREAMER_COMPONENT(GSTREAMER_FFT gstreamer-fft-1.0
> gst/fft/gstfft.h gstfft-1.0)
> > >+FIND_GSTREAMER_COMPONENT(GSTREAMER_PBUTILS gstreamer-pbutils-1.0
> gst/pbutils/pbutils.h gstpbutils-1.0)
> > >+FIND_GSTREAMER_COMPONENT(GSTREAMER_VIDEO gstreamer-video-1.0
> gst/video/video.h gstvideo-1.0)
> > >+FIND_GSTREAMER_COMPONENT(GSTREAMER_GL gstreamer-gl-1.0 gst/gl/gl.h
> gstgl-1.0)
> > >+
> > >+# ------------------------------------------------
> > >+# 3. Process the COMPONENTS passed to FIND_PACKAGE
> > >+# ------------------------------------------------
> > >+set(_GSTREAMER_REQUIRED_VARS GSTREAMER_INCLUDE_DIRS
> GSTREAMER_LIBRARIES VERSION_OK GSTREAMER_BASE_INCLUDE_DIRS
> GSTREAMER_BASE_LIBRARIES)
> > >+
> > >+foreach (_component ${GStreamer_FIND_COMPONENTS})
> > >+    set(_gst_component "GSTREAMER_${_component}")
> > >+    string(TOUPPER ${_gst_component} _UPPER_NAME)
> > >+
> > >+    list(APPEND _GSTREAMER_REQUIRED_VARS ${_UPPER_NAME}_INCLUDE_DIRS
> ${_UPPER_NAME}_LIBRARIES)
> > >+endforeach ()
> > >+
> > >+include(FindPackageHandleStandardArgs)
> > >+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GStreamer DEFAULT_MSG
> ${_GSTREAMER_REQUIRED_VARS})
> > >diff --git a/gst-libs/CMakeLists.txt b/gst-libs/CMakeLists.txt
> > >new file mode 100644
> > >index 0000000..02b235e
> > >--- /dev/null
> > >+++ b/gst-libs/CMakeLists.txt
> > >@@ -0,0 +1 @@
> > >+add_subdirectory(gst)
> > >diff --git a/gst-libs/gst/CMakeLists.txt b/gst-libs/gst/CMakeLists.txt
> > >new file mode 100644
> > >index 0000000..ef32dd6
> > >--- /dev/null
> > >+++ b/gst-libs/gst/CMakeLists.txt
> > >@@ -0,0 +1 @@
> > >+add_subdirectory(gl)
> > >diff --git a/gst-libs/gst/gl/CMakeLists.txt
> b/gst-libs/gst/gl/CMakeLists.txt
> > >new file mode 100644
> > >index 0000000..9b441bd
> > >--- /dev/null
> > >+++ b/gst-libs/gst/gl/CMakeLists.txt
> > >@@ -0,0 +1,21 @@
> > >+set(srcs
> > >+    gstglapi.c
> > >+gstglbufferpool.c
> > >+gstglcontext.c
> > >+gstgldisplay.c
> > >+gstgldownload.c
> > >+gstglfeature.c
> > >+gstglfilter.c
> > >+gstglframebuffer.c
> > >+gstglmemory.c
> > >+gstglmixer.c
> > >+gstglshader.c
> > >+gstglshadervariables.c
> > >+gstglupload.c
> > >+gstglutils.c
> > >+gstglwindow.c)
> > >+
> > >+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
> > >+
> > >+add_library(gstgl
> > >+    ${srcs} )
> > >diff --git a/gst/CMakeLists.txt b/gst/CMakeLists.txt
> > >new file mode 100644
> > >index 0000000..ef32dd6
> > >--- /dev/null
> > >+++ b/gst/CMakeLists.txt
> > >@@ -0,0 +1 @@
> > >+add_subdirectory(gl)
> > >diff --git a/gst/gl/CMakeLists.txt b/gst/gl/CMakeLists.txt
> > >new file mode 100644
> > >index 0000000..b613ed3
> > >--- /dev/null
> > >+++ b/gst/gl/CMakeLists.txt
> > >@@ -0,0 +1,25 @@
> > >+set (plugin_srcs
> > >+    gltestsrc.c
> > >+gstglbumper.c
> > >+gstglcolorscale.c
> > >+gstgldeinterlace.c
> > >+gstgldifferencematte.c
> > >+gstgleffects.c
> > >+gstglfilterapp.c
> > >+gstglfilterblur.c
> > >+gstglfiltercube.c
> > >+gstglfilterglass.c
> > >+gstglfilterlaplacian.c
> > >+gstglfilterreflectedscreen.c
> > >+gstglfiltershader.c
> > >+gstglfiltersobel.c
> > >+gstglimagesink.c
> > >+gstglmosaic.c
> > >+gstgloverlay.c
> > >+gstgltestsrc.c
> > >+gstopengl.c)
> > >+
> > >+
> > >+add_library(gstglplugin MODULE ${plugin_srcs})
> > >+
> > >+target_link_libraries(gstglplugin gstgl)
> > >--
> > >1.7.9.5
> > >
> > >
> > >
> > >本邮件附件清单如下:
> > >  (1) 0001-improve-CMake-build-system.patch (18.7 K)
> > >  (2) 0002-improve-MSVC-vc10-compatibility.patch (7.5 K)
> > >  (3) 0003-improve-cmake-build-script-add-install-target.patch (6.0 K)
> > >
> > >
> > >comicfans44
> > _______________________________________________
> > gstreamer-devel mailing list
> > gstreamer-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20131028/87cc3c93/attachment-0001.html>


More information about the gstreamer-devel mailing list