[0.11] gst-editing-services: building: add python bindings
Edward Hervey
bilboed at kemper.freedesktop.org
Tue Oct 11 01:12:28 PDT 2011
Module: gst-editing-services
Branch: 0.11
Commit: f9b9ec62045822593a05c62af0802196c8ac5550
URL: http://cgit.freedesktop.org/gstreamer/gst-editing-services/commit/?id=f9b9ec62045822593a05c62af0802196c8ac5550
Author: Thibault Saunier <thibault.saunier at collabora.com>
Date: Tue Jun 7 19:18:27 2011 -0400
building: add python bindings
---
Makefile.am | 2 +-
acinclude.m4 | 66 +++++++++++++++++++++++++++++++++++
bindings/makefile.am | 1 +
bindings/python/Makefile.am | 41 +++++++++++++++++++++
bindings/python/codegen/Makefile.am | 15 ++++++++
configure.ac | 52 +++++++++++++++++++++++++++
6 files changed, 176 insertions(+), 1 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index f32edf7..c4d7ae0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
-SUBDIRS = ges tests tools common m4 pkgconfig docs
+SUBDIRS = ges tests tools common m4 pkgconfig docs bindings
DIST_SUBDIRS = $(SUBDIRS)
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..04a283b
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,66 @@
+## this one is commonly used with AM_PATH_PYTHONDIR ...
+dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]])
+dnl Check if a module containing a given symbol is visible to python.
+AC_DEFUN([AM_CHECK_PYMOD],
+[AC_REQUIRE([AM_PATH_PYTHON])
+py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'`
+AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1)
+AC_CACHE_VAL(py_cv_mod_$py_mod_var, [
+ifelse([$2],[], [prog="
+import sys
+try:
+ import $1
+except ImportError:
+ sys.exit(1)
+except:
+ sys.exit(0)
+sys.exit(0)"], [prog="
+import $1
+$1.$2"])
+if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC
+ then
+ eval "py_cv_mod_$py_mod_var=yes"
+ else
+ eval "py_cv_mod_$py_mod_var=no"
+ fi
+])
+py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"`
+if test "x$py_val" != xno; then
+ AC_MSG_RESULT(yes)
+ ifelse([$3], [],, [$3
+])dnl
+else
+ AC_MSG_RESULT(no)
+ ifelse([$4], [],, [$4
+])dnl
+fi
+])
+
+dnl a macro to check for ability to create python extensions
+dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
+dnl function also defines PYTHON_INCLUDES
+AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
+[AC_REQUIRE([AM_PATH_PYTHON])
+AC_MSG_CHECKING(for headers required to compile python extensions)
+dnl deduce PYTHON_INCLUDES
+py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+if $PYTHON-config --help 2>/dev/null; then
+ PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null`
+else
+ PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+ if test "$py_prefix" != "$py_exec_prefix"; then
+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+ fi
+fi
+AC_SUBST(PYTHON_INCLUDES)
+dnl check if the headers exist:
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+AC_TRY_CPP([#include <Python.h>],dnl
+[AC_MSG_RESULT(found)
+$1],dnl
+[AC_MSG_RESULT(not found)
+$2])
+CPPFLAGS="$save_CPPFLAGS"
+])
diff --git a/bindings/makefile.am b/bindings/makefile.am
new file mode 100644
index 0000000..96fcb3e
--- /dev/null
+++ b/bindings/makefile.am
@@ -0,0 +1 @@
+SUBDIRS = python
diff --git a/bindings/python/Makefile.am b/bindings/python/Makefile.am
new file mode 100644
index 0000000..c731be0
--- /dev/null
+++ b/bindings/python/Makefile.am
@@ -0,0 +1,41 @@
+SUBDIRS = codegen
+pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst
+
+# we install everything in pyexecdir; otherwise you end up with a mess for
+# multilib
+pygesdir = $(pkgpyexecdir)
+pyges_PYTHON =
+
+pygesexecdir = $(pkgpyexecdir)
+pygesexec_LTLIBRARIES = ges.la
+
+DEFS = $(srcdir)/ges-types.defs $(srcdir)/ges.defs
+defs_DATA = $(DEFS)
+defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs
+OVERRIDES = ges.override
+
+INCLUDES = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
+
+ges_la_CFLAGS = -I$(top_srcdir)\
+ $(PYGOBJECT_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) -Wno-write-strings
+ges_la_LDFLAGS = -export-symbols-regex "^(initges|_PyGObject_API).*" \
+ -module -avoid-version $(GST_PLUGIN_LDFLAGS)
+ges_la_LIBADD = $(top_builddir)/ges/libges- at GST_MAJORMINOR@.la \
+ $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) \
+ -lges- at GST_MAJORMINOR@ -lges- at GST_MAJORMINOR@ \
+ -lges- at GST_MAJORMINOR@ $(GST_LIBS) $(LIBM)
+ges_la_SOURCES = gesmodule.c
+nodist_ges_la_SOURCES = ges.c
+
+EXTRA_DIST = $(defs_DATA) $(OVERRIDES) arg-types.py
+
+CLEANFILES = ges.c
+
+.defs.c:
+ ($(PYTHON) $(srcdir)/codegen/codegen.py \
+ --load-types $(srcdir)/codegen/argtypes.py \
+ --register $(srcdir)/ges-types.defs \
+ --override $(srcdir)/$*.override \
+ --prefix pyges $<) > gen-$*.c \
+ && cp gen-$*.c $*.c \
+ && rm -f gen-$*.c
diff --git a/bindings/python/codegen/Makefile.am b/bindings/python/codegen/Makefile.am
new file mode 100644
index 0000000..dd3eea0
--- /dev/null
+++ b/bindings/python/codegen/Makefile.am
@@ -0,0 +1,15 @@
+EXTRA_DIST = \
+ argtypes.py \
+ code-coverage.py \
+ codegen.py \
+ definitions.py \
+ defsparser.py \
+ docextract.py \
+ docgen.py \
+ h2def.py \
+ __init__.py \
+ mergedefs.py \
+ mkskel.py \
+ override.py \
+ reversewrapper.py \
+ scmexpr.py
diff --git a/configure.ac b/configure.ac
index 4a415e4..cd17b89 100644
--- a/configure.ac
+++ b/configure.ac
@@ -60,6 +60,7 @@ AS_AUTOTOOLS_ALTERNATE
dnl Add parameters for aclocal
AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4")
+AC_CONFIG_MACRO_DIR([m4])
dnl *** check for arguments to configure ***
@@ -117,6 +118,54 @@ GTK_DOC_CHECK([1.3])
AS_PATH_PYTHON([2.1])
AG_GST_PLUGIN_DOCS([1.3],[2.1])
+dnl check for python
+AM_PATH_PYTHON
+AC_MSG_CHECKING(for python >= 2.3)
+prog="
+import sys, string
+minver = (2,3,0,'final',0)
+if sys.version_info < minver:
+ sys.exit(1)
+sys.exit(0)"
+
+if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC
+then
+ HAVE_PYTHON=yes
+ AC_MSG_RESULT(okay)
+else
+ HAVE_PYTHON=no
+ AC_MSG_RESULT(no python)
+fi
+
+AM_CHECK_PYTHON_HEADERS([HAVE_PYTHON_HEADERS=yes],[HAVE_PYTHON_HEADERS=no])
+
+dnl check for pygobject (optional, used in the bindings)
+PYGOBJECT_REQ=2.11.2
+PKG_CHECK_MODULES(PYGOBJECT, pygobject-2.0 >= $PYGOBJECT_REQ,
+ [HAVE_PYGOBJECT="yes"], [HAVE_PYGOBJECT="no"])
+AC_SUBST(PYGOBJECT_CFLAGS)
+
+dnl check for gst-python
+PKG_CHECK_MODULES(PYGST, gst-python-0.10,
+ [HAVE_PYGST="yes"], [HAVE_PYGST="no"])
+
+if test "x$HAVE_PYGST" = "xyes"; then
+ PYGST_DEFSDIR=`pkg-config gst-python-0.10 --variable=defsdir`
+fi
+AC_SUBST(PYGST_DEFSDIR, $PYGST_DEFSDIR)
+
+if test \
+ "x$HAVE_PYTHON" = "xyes" -a \
+ "x$HAVE_PYTHON_HEADERS" = "xyes" -a \
+ "x$HAVE_PYGOBJECT" = "xyes" -a \
+ "x$HAVE_PYGST" = "xyes"; then
+ HAVE_PYTHON_BINDINGS="yes"
+else
+ HAVE_PYTHON_BINDINGS="no"
+fi
+
+AM_CONDITIONAL(WITH_PYTHON, [test "x$HAVE_PYTHON_BINDINGS" = "xyes"])
+
dnl *** checks for libraries ***
dnl check for libm, for sin() etc.
@@ -301,6 +350,9 @@ common/m4/Makefile
gst-editing-services.spec
m4/Makefile
ges/Makefile
+bindings/makefile
+bindings/python/Makefile
+bindings/python/codegen/Makefile
tests/Makefile
tests/check/Makefile
tests/examples/Makefile
More information about the gstreamer-commits
mailing list