misc patch to help opengl plugin build on win32 with msvc

comicfans44 comicfans44 at gmail.com
Fri Oct 25 01:47:48 CEST 2013


From 1b88c7c8d80d2ec91004be2a26f60ef00e6375aa Mon Sep 17 00:00:00 2001 
From: comicfans44  
Date: Thu, 24 Oct 2013 15:58:17 +0800 
Subject: [PATCH 3/3] improve cmake build script ,add install target 

currently cmake build script does not generate config.h and 
gstglconfig.h automatically, it copy pre-defined header to build dir 
instead. now you can use CMake to build gst-plugin-gl with Gstreamer 
windows version SDK(MSVC based,version 1.2). 
note: pre-defined header assumes png and jpeg is presented (packed in 
SDK), but CMake does not found png correctly ,you should copy *.h from 
include/libpng15 to include . 
--- 
 CMakeLists.txt                 |   43 ++++++++++++++++++++++++++--------- 
 gst-libs/gst/gl/CMakeLists.txt |   48 ++++++++++++++++++++++++++++++++++++++-- 
 gst/gl/CMakeLists.txt          |   36 +++++++++++++++++++++++++----- 
 gst/gl/effects/CMakeLists.txt  |   17 ++++++++++++++ 
 4 files changed, 127 insertions(+), 17 deletions(-) 
 create mode 100644 gst/gl/effects/CMakeLists.txt 

diff --git a/CMakeLists.txt b/CMakeLists.txt 
index 10f14a6..b215cfc 100644 
--- a/CMakeLists.txt 
+++ b/CMakeLists.txt 
@@ -7,7 +7,7 @@ cmake_minimum_required(VERSION "2.8.0") 
 # pkg_check_modules(GSTREAMER gstreamer-0.10) 
 # --- 
  
-list(APPEND CMAKE_MODULE_PATH  
+list(APPEND CMAKE_MODULE_PATH  
 ${CMAKE_SOURCE_DIR}/cmake/modules) 
  
 project (GST-PLUGINS-GL) 
@@ -19,16 +19,29 @@ find_package(OpenGL REQUIRED) 
 #find_package(GTK2 REQUIRED) 
 find_package(GLIB2 REQUIRED) 
 find_package(LibXml2 REQUIRED) 
-find_package(JPEG REQUIRED) 
-#find_package(PNG REQUIRED) 
+ 
+ 
+find_package(PNG) 
+if(PNG_FOUND) 
+ 
+ include_directories(${PNG_INCLUDE_DIR}) 
+ 
+ find_package(JPEG) 
+ if(JPEG_FOUND) 
+ include_directories(${JPEG_INCLUDE_DIR}) 
+ endif() 
+endif() 
+ 
+ 
+ 
+ 
+#todo generate config.h 
 find_package(ZLIB REQUIRED) 
  
  
-find_package(GStreamer REQUIRED) 
-find_package(GLEW REQUIRED) 
-#find_package(LibIconv REQUIRED) 
-#find_package(ATK REQUIRED) 
-#find_package(Cairo REQUIRED) 
+find_package(GStreamer COMPONENTS video base REQUIRED) 
+ 
+ 
  
 function(check_package name LEVEL) 
   if (${name}_FOUND) 
@@ -83,13 +96,23 @@ endif (NOT GST_USING_BINARY_REGISTRY) 
 #message("****" ${CAIRO_INCLUDE_DIR}) 
  
  
+ 
+ 
 include_directories( 
     ${GSTREAMER_INCLUDE_DIRS} 
-    ${GLIB2_INCLUDE_DIR} 
-    gst-libs) 
+    ${GLIB_glib_2_INCLUDE_DIR} 
+ ${GLIB_glibconfig_2_INCLUDE_DIR}     
+    gst-libs 
+ ${PROJECT_BINARY_DIR}/gst-libs 
+ ${PROJECT_BINARY_DIR} 
+ ) 
+ 
+ 
  
 add_definitions(-DHAVE_CONFIG_H) 
  
+ 
+ 
 add_subdirectory (gst-libs) 
  
  
diff --git a/gst-libs/gst/gl/CMakeLists.txt b/gst-libs/gst/gl/CMakeLists.txt 
index 9b441bd..6ac3013 100644 
--- a/gst-libs/gst/gl/CMakeLists.txt 
+++ b/gst-libs/gst/gl/CMakeLists.txt 
@@ -1,8 +1,8 @@ 
 set(srcs  
-    gstglapi.c 
 gstglbufferpool.c 
 gstglcontext.c 
 gstgldisplay.c 
+gstglapi.c 
 gstgldownload.c 
 gstglfeature.c 
 gstglfilter.c 
@@ -15,7 +15,51 @@ gstglupload.c 
 gstglutils.c 
 gstglwindow.c) 
  
+if(WIN32) 
+  list(APPEND srcs win32/gstglwindow_win32.c win32/gstglcontext_wgl.c) 
+endif() 
+ 
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}) 
  
-add_library(gstgl  
+add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/config.h 
+ COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/win32/common/config.h 
+ ${CMAKE_BINARY_DIR}/config.h 
+ ) 
+ 
+ 
+set (glconfigpath ${PROJECT_BINARY_DIR}/gst-libs/gst/gl/gstglconfig.h) 
+ 
+add_custom_command(OUTPUT ${glconfigpath} 
+ COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/win32/common/gstglconfig.h ${glconfigpath} 
+ ) 
+ 
+ 
+add_library(gstgl SHARED 
+ ${PROJECT_BINARY_DIR}/config.h 
+ ${glconfigpath}  
     ${srcs} ) 
+ 
+target_link_libraries(gstgl 
+   ${GSTREAMER_BASE_LIBRARIES} 
+   ${GSTREAMER_VIDEO_LIBRARIES} 
+   ${GSTREAMER_LIBRARIES} 
+   ${OPENGL_LIBRARIES} 
+   ${GLIB2_LIBRARIES} 
+) 
+ 
+set_target_properties(gstgl PROPERTIES 
+ RUNTIME_OUTPUT libgstgl.${CMAKE_SHARED_LIBRARY_SUFFIX}) 
+ 
+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") 
+ 
+install(FILES ${headers} DESTINATION include/gstreamer-1.0/gst/gl) 
+ 
+file(GLOB protoheaders "${CMAKE_CURRENT_SOURCE_DIR}/glprototypes/*.h") 
+ 
+install (FILES ${protoheaders} DESTINATION  include/gstreamer-1.0/gst/gl/glprototypes) 
diff --git a/gst/gl/CMakeLists.txt b/gst/gl/CMakeLists.txt 
index b613ed3..f37ee46 100644 
--- a/gst/gl/CMakeLists.txt 
+++ b/gst/gl/CMakeLists.txt 
@@ -1,9 +1,12 @@ 
+ 
+add_subdirectory(effects) 
+ 
 set (plugin_srcs 
     gltestsrc.c 
-gstglbumper.c 
+ 
 gstglcolorscale.c 
 gstgldeinterlace.c 
-gstgldifferencematte.c 
+ 
 gstgleffects.c 
 gstglfilterapp.c 
 gstglfilterblur.c 
@@ -15,11 +18,34 @@ gstglfiltershader.c 
 gstglfiltersobel.c 
 gstglimagesink.c 
 gstglmosaic.c 
-gstgloverlay.c 
+ 
 gstgltestsrc.c 
 gstopengl.c) 
  
+if(PNG_FOUND) 
+ list(APPEND plugin_srcs gstglbumper.c gstgldifferencematte.c) 
+ 
+ set(dependency_libs ${PNG_LIBRARIES}) 
+ 
+ if(JPEG_FOUND) 
+ list(APPEND plugin_srcs gstgloverlay.c) 
+ list ( APPEND dependency_libs ${JPEG_LIBRARIES}) 
+ endif() 
+ 
+endif() 
+ 
+ 
+add_library(gstopengl MODULE ${plugin_srcs}) 
  
-add_library(gstglplugin MODULE ${plugin_srcs}) 
+target_link_libraries(gstopengl 
+   gstgl 
+   gstgleffects 
+   ${dependency_libs} 
+   ) 
+    
+set_target_properties(gstopengl PROPERTIES 
+ RUNTIME_OUTPUT libgstopengl.${CMAKE_SHARED_LIBRARY_SUFFIX})    
  
-target_link_libraries(gstglplugin gstgl) 
+install(TARGETS gstopengl 
+ LIBRARY DESTINATION lib/gstreamer-1.0 
+ ) 
\ No newline at end of file 
diff --git a/gst/gl/effects/CMakeLists.txt b/gst/gl/effects/CMakeLists.txt 
new file mode 100644 
index 0000000..692db51 
--- /dev/null 
+++ b/gst/gl/effects/CMakeLists.txt 
@@ -0,0 +1,17 @@ 
+add_library(gstgleffects 
+gstgleffectbulge.c 
+gstgleffectfisheye.c 
+gstgleffectglow.c 
+gstgleffectidentity.c 
+gstgleffectlumatocurve.c 
+gstgleffectmirror.c 
+gstgleffectrgbtocurve.c 
+gstgleffectsin.c 
+gstgleffectsquare.c 
+gstgleffectsqueeze.c 
+gstgleffectssources.c 
+gstgleffectstretch.c 
+gstgleffecttunnel.c 
+gstgleffecttwirl.c 
+gstgleffectxray.c 
+) 
\ No newline at end of file 
--  
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


More information about the gstreamer-devel mailing list