From 46b70d076fba9bce1d25e4f017b45e783e10940e Mon Sep 17 00:00:00 2001 From: Jimmy Huang Date: Fri, 31 Aug 2012 15:02:20 -0700 Subject: [PATCH] Initial import to Tizen Signed-off-by: Jimmy Huang --- AUTHORS | 1 + COPYING | 510 + ChangeLog | 5539 +++++++++ INSTALL | 182 + Makefile.am | 78 + Makefile.in | 1241 ++ NEWS | 355 + README | 1 + RELEASE | 79 + TODO | 1 + acinclude.m4 | 122 + aclocal.m4 | 1287 ++ codegen/Makefile.am | 15 + codegen/Makefile.in | 478 + codegen/__init__.py | 15 + codegen/argtypes.py | 1085 ++ codegen/code-coverage.py | 42 + codegen/codegen.py | 1577 +++ codegen/definitions.py | 607 + codegen/defsparser.py | 143 + codegen/docextract.py | 185 + codegen/docgen.py | 752 ++ codegen/h2def.py | 536 + codegen/mergedefs.py | 26 + codegen/mkskel.py | 89 + codegen/override.py | 290 + codegen/reversewrapper.py | 771 ++ codegen/scmexpr.py | 144 + common/ChangeLog | 1712 +++ common/Makefile.am | 22 + common/Makefile.in | 686 ++ common/c-to-xml.py | 34 + common/check-exports | 72 + common/check.mak | 181 + common/coverage/coverage-report-entry.pl | 69 + common/coverage/coverage-report.pl | 125 + common/coverage/coverage-report.xsl | 235 + common/coverage/lcov.mak | 43 + common/cruft.mak | 56 + common/download-translations | 152 + common/extract-release-date-from-doap-file | 32 + common/gettext.patch | 12 + common/glib-gen.mak | 44 + common/gst-autogen.sh | 376 + common/gst-indent | 49 + common/gst.supp | 3963 ++++++ common/gstdoc-scangobj | 1598 +++ common/gtk-doc-plugins.mak | 387 + common/gtk-doc.mak | 231 + common/m4/Makefile.am | 42 + common/m4/Makefile.in | 505 + common/m4/README | 3 + common/m4/as-ac-expand.m4 | 43 + common/m4/as-auto-alt.m4 | 50 + common/m4/as-compiler-flag.m4 | 64 + common/m4/as-compiler.m4 | 44 + common/m4/as-docbook.m4 | 66 + common/m4/as-gcc-inline-assembly.m4 | 52 + common/m4/as-libtool-tags.m4 | 83 + common/m4/as-libtool.m4 | 45 + common/m4/as-objc.m4 | 56 + common/m4/as-python.m4 | 152 + common/m4/as-scrub-include.m4 | 36 + common/m4/as-version.m4 | 75 + common/m4/ax_create_stdint_h.m4 | 734 ++ common/m4/check.m4 | 181 + common/m4/glib-gettext.m4 | 432 + common/m4/gst-arch.m4 | 141 + common/m4/gst-args.m4 | 327 + common/m4/gst-check.m4 | 262 + common/m4/gst-debuginfo.m4 | 46 + common/m4/gst-default.m4 | 120 + common/m4/gst-doc.m4 | 148 + common/m4/gst-dowhile.m4 | 24 + common/m4/gst-error.m4 | 213 + common/m4/gst-feature.m4 | 254 + common/m4/gst-function.m4 | 63 + common/m4/gst-gettext.m4 | 21 + common/m4/gst-glib2.m4 | 73 + common/m4/gst-libxml2.m4 | 52 + common/m4/gst-package-release-datetime.m4 | 89 + common/m4/gst-parser.m4 | 55 + common/m4/gst-platform.m4 | 67 + common/m4/gst-plugin-docs.m4 | 21 + common/m4/gst-plugindir.m4 | 17 + common/m4/gst-valgrind.m4 | 35 + common/m4/gst-x11.m4 | 70 + common/m4/gst.m4 | 31 + common/m4/gtk-doc.m4 | 42 + common/m4/introspection.m4 | 88 + common/m4/orc.m4 | 70 + common/m4/pkg.m4 | 157 + common/mangle-tmpl.py | 163 + common/orc.mak | 76 + common/parallel-subdirs.mak | 13 + common/plugins.xsl | 209 + common/po.mak | 4 + common/release.mak | 25 + common/scangobj-merge.py | 309 + common/upload-doc.mak | 66 + common/win32.mak | 72 + compile | 143 + config.guess | 1517 +++ config.h.in | 110 + config.sub | 1760 +++ configure | 17674 +++++++++++++++++++++++++++ configure.ac | 448 + depcomp | 630 + examples/Makefile.am | 22 + examples/Makefile.in | 532 + examples/audio-controller.py | 40 + examples/audioconcat.py | 192 + examples/bps.py | 120 + examples/cp.py | 83 + examples/debugslider.py | 59 + examples/decodebin.py | 109 + examples/f2f.py | 64 + examples/filesrc.py | 99 + examples/fvumeter.py | 239 + examples/gst-discover | 89 + examples/gstfile.py | 73 + examples/maemogst.py | 101 + examples/mixer.py | 31 + examples/pipeline-tester | 263 + examples/play.py | 299 + examples/remuxer.py | 840 ++ examples/sinkelement.py | 68 + examples/vumeter.py | 108 + gst-python.doap | 270 + gst-python.spec | 100 + gst-python.spec.in | 100 + gst/Makefile.am | 195 + gst/Makefile.in | 1313 ++ gst/__init__.py | 229 + gst/__init__.py.in | 229 + gst/arg-types.py | 418 + gst/audio.defs | 872 ++ gst/audio.override | 72 + gst/audiomodule.c | 58 + gst/base.defs | 1164 ++ gst/common.h | 73 + gst/extend/Makefile.am | 5 + gst/extend/Makefile.in | 532 + gst/extend/__init__.py | 21 + gst/extend/discoverer.py | 355 + gst/extend/jukebox.py | 356 + gst/extend/leveller.py | 285 + gst/extend/pygobject.py | 172 + gst/extend/sources.py | 165 + gst/extend/utils.py | 77 + gst/gst-0.10.21.ignore | 11 + gst/gst-0.10.22.ignore | 18 + gst/gst-0.10.23.ignore | 23 + gst/gst-0.10.24.ignore | 46 + gst/gst-0.10.25.ignore | 4 + gst/gst-0.10.26.ignore | 20 + gst/gst-0.10.29.ignore | 9 + gst/gst-0.10.30.ignore | 14 + gst/gst-0.10.31.ignore | 26 + gst/gst-0.10.32.ignore | 8 + gst/gst-argtypes.c | 65 + gst/gst-disable-loadsave.ignore | 14 + gst/gst-extrafuncs.defs | 150 + gst/gst-pb-0.10.23.ignore | 19 + gst/gst-pb-0.10.25.ignore | 9 + gst/gst-pb-0.10.26.ignore | 10 + gst/gst-pb-0.10.29.ignore | 9 + gst/gst-pb-0.10.30.ignore | 7 + gst/gst-pb-0.10.31.ignore | 31 + gst/gst-pb-0.10.32.ignore | 50 + gst/gst-types.defs | 1240 ++ gst/gst.defs | 9482 ++++++++++++++ gst/gst.override | 1748 +++ gst/gstbase.override | 905 ++ gst/gstbin.override | 265 + gst/gstbuffer.override | 611 + gst/gstbus.override | 272 + gst/gstcaps.override | 474 + gst/gstelement.override | 637 + gst/gstelementfactory.override | 153 + gst/gstevent.override | 331 + gst/gstlibs.override | 402 + gst/gstmessage.override | 540 + gst/gstmodule.c | 395 + gst/gstobject.override | 165 + gst/gstpad.override | 1682 +++ gst/gstquery.override | 324 + gst/gststructure.override | 348 + gst/gsttaglist.override | 160 + gst/gstversion.override.in | 21 + gst/interfaces.defs | 1255 ++ gst/interfaces.override | 486 + gst/interfacesmodule.c | 55 + gst/libs.defs | 684 ++ gst/pbutils.defs | 1056 ++ gst/pbutils.override | 486 + gst/pbutilsmodule.c | 65 + gst/pygst-private.h | 44 + gst/pygst.h | 102 + gst/pygstexception.c | 269 + gst/pygstexception.h | 36 + gst/pygstiterator.c | 160 + gst/pygstminiobject.c | 381 + gst/pygstminiobject.h | 39 + gst/pygstvalue.c | 414 + gst/pygstvalue.h | 29 + gst/tag.defs | 306 + gst/tag.override | 105 + gst/tagmodule.c | 58 + gst/video.defs | 371 + gst/video.override | 66 + gst/videomodule.c | 58 + gst/xoverlay.defs | 53 + gst/xoverlay.override | 24 + gstlibtoolimporter.py | 112 + gstoptionmodule.c | 50 + install-sh | 520 + ltmain.sh | 9642 +++++++++++++++ m4/libtool.m4 | 7851 ++++++++++++ m4/ltoptions.m4 | 369 + m4/ltsugar.m4 | 123 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 98 + missing | 376 + packaging/gstreamer-python.changes | 2 + packaging/gstreamer-python.spec | 60 + pkgconfig/Makefile.am | 27 + pkgconfig/Makefile.in | 543 + pkgconfig/gst-python-uninstalled.pc.in | 16 + pkgconfig/gst-python.pc.in | 15 + plugin/Makefile.am | 11 + plugin/Makefile.in | 652 + plugin/gstpythonplugin.c | 426 + py-compile | 146 + pygst.py.in | 63 + testsuite/Makefile.am | 140 + testsuite/Makefile.in | 745 ++ testsuite/cleanup.py | 4 + testsuite/common.py | 204 + testsuite/gstpython.supp | 241 + testsuite/python.supp | 520 + testsuite/runtests.py | 60 + testsuite/test-object.c | 25 + testsuite/test-object.h | 23 + testsuite/test_adapter.py | 83 + testsuite/test_audio.py | 38 + testsuite/test_bin.py | 196 + testsuite/test_buffer.py | 178 + testsuite/test_caps.py | 196 + testsuite/test_element.py | 268 + testsuite/test_event.py | 244 + testsuite/test_ghostpad.py | 194 + testsuite/test_gst.py | 36 + testsuite/test_interface.py | 92 + testsuite/test_message.py | 202 + testsuite/test_pad.py | 568 + testsuite/test_pbutils.py | 63 + testsuite/test_pipeline.py | 250 + testsuite/test_registry.py | 68 + testsuite/test_segment.py | 62 + testsuite/test_struct.py | 123 + testsuite/test_taglist.py | 71 + testsuite/test_xml.py | 53 + testsuite/testhelpermodule.c | 56 + win32/MANIFEST | 6 + win32/common/config.h | 88 + win32/common/config.h.in | 88 + win32/vs6/gst_python.dsw | 41 + win32/vs6/libgstpython.dsp | 205 + win32/vs6/pygenfiles.dsp | 123 + 270 files changed, 119069 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 RELEASE create mode 100644 TODO create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100644 codegen/Makefile.am create mode 100644 codegen/Makefile.in create mode 100644 codegen/__init__.py create mode 100644 codegen/argtypes.py create mode 100755 codegen/code-coverage.py create mode 100644 codegen/codegen.py create mode 100644 codegen/definitions.py create mode 100644 codegen/defsparser.py create mode 100644 codegen/docextract.py create mode 100644 codegen/docgen.py create mode 100755 codegen/h2def.py create mode 100755 codegen/mergedefs.py create mode 100755 codegen/mkskel.py create mode 100644 codegen/override.py create mode 100644 codegen/reversewrapper.py create mode 100644 codegen/scmexpr.py create mode 100644 common/ChangeLog create mode 100644 common/Makefile.am create mode 100644 common/Makefile.in create mode 100644 common/c-to-xml.py create mode 100755 common/check-exports create mode 100644 common/check.mak create mode 100644 common/coverage/coverage-report-entry.pl create mode 100644 common/coverage/coverage-report.pl create mode 100644 common/coverage/coverage-report.xsl create mode 100644 common/coverage/lcov.mak create mode 100644 common/cruft.mak create mode 100755 common/download-translations create mode 100755 common/extract-release-date-from-doap-file create mode 100644 common/gettext.patch create mode 100644 common/glib-gen.mak create mode 100644 common/gst-autogen.sh create mode 100755 common/gst-indent create mode 100644 common/gst.supp create mode 100755 common/gstdoc-scangobj create mode 100644 common/gtk-doc-plugins.mak create mode 100644 common/gtk-doc.mak create mode 100644 common/m4/Makefile.am create mode 100644 common/m4/Makefile.in create mode 100644 common/m4/README create mode 100644 common/m4/as-ac-expand.m4 create mode 100644 common/m4/as-auto-alt.m4 create mode 100644 common/m4/as-compiler-flag.m4 create mode 100644 common/m4/as-compiler.m4 create mode 100644 common/m4/as-docbook.m4 create mode 100644 common/m4/as-gcc-inline-assembly.m4 create mode 100644 common/m4/as-libtool-tags.m4 create mode 100644 common/m4/as-libtool.m4 create mode 100644 common/m4/as-objc.m4 create mode 100644 common/m4/as-python.m4 create mode 100644 common/m4/as-scrub-include.m4 create mode 100644 common/m4/as-version.m4 create mode 100644 common/m4/ax_create_stdint_h.m4 create mode 100644 common/m4/check.m4 create mode 100644 common/m4/glib-gettext.m4 create mode 100644 common/m4/gst-arch.m4 create mode 100644 common/m4/gst-args.m4 create mode 100644 common/m4/gst-check.m4 create mode 100644 common/m4/gst-debuginfo.m4 create mode 100644 common/m4/gst-default.m4 create mode 100644 common/m4/gst-doc.m4 create mode 100644 common/m4/gst-dowhile.m4 create mode 100644 common/m4/gst-error.m4 create mode 100644 common/m4/gst-feature.m4 create mode 100644 common/m4/gst-function.m4 create mode 100644 common/m4/gst-gettext.m4 create mode 100644 common/m4/gst-glib2.m4 create mode 100644 common/m4/gst-libxml2.m4 create mode 100644 common/m4/gst-package-release-datetime.m4 create mode 100644 common/m4/gst-parser.m4 create mode 100644 common/m4/gst-platform.m4 create mode 100644 common/m4/gst-plugin-docs.m4 create mode 100644 common/m4/gst-plugindir.m4 create mode 100644 common/m4/gst-valgrind.m4 create mode 100644 common/m4/gst-x11.m4 create mode 100644 common/m4/gst.m4 create mode 100644 common/m4/gtk-doc.m4 create mode 100644 common/m4/introspection.m4 create mode 100644 common/m4/orc.m4 create mode 100644 common/m4/pkg.m4 create mode 100644 common/mangle-tmpl.py create mode 100644 common/orc.mak create mode 100644 common/parallel-subdirs.mak create mode 100644 common/plugins.xsl create mode 100644 common/po.mak create mode 100644 common/release.mak create mode 100755 common/scangobj-merge.py create mode 100644 common/upload-doc.mak create mode 100644 common/win32.mak create mode 100755 compile create mode 100755 config.guess create mode 100644 config.h.in create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100755 depcomp create mode 100644 examples/Makefile.am create mode 100644 examples/Makefile.in create mode 100644 examples/audio-controller.py create mode 100644 examples/audioconcat.py create mode 100755 examples/bps.py create mode 100755 examples/cp.py create mode 100644 examples/debugslider.py create mode 100644 examples/decodebin.py create mode 100755 examples/f2f.py create mode 100755 examples/filesrc.py create mode 100644 examples/fvumeter.py create mode 100755 examples/gst-discover create mode 100644 examples/gstfile.py create mode 100644 examples/maemogst.py create mode 100644 examples/mixer.py create mode 100755 examples/pipeline-tester create mode 100644 examples/play.py create mode 100644 examples/remuxer.py create mode 100644 examples/sinkelement.py create mode 100755 examples/vumeter.py create mode 100644 gst-python.doap create mode 100644 gst-python.spec create mode 100644 gst-python.spec.in create mode 100644 gst/Makefile.am create mode 100644 gst/Makefile.in create mode 100644 gst/__init__.py create mode 100644 gst/__init__.py.in create mode 100644 gst/arg-types.py create mode 100644 gst/audio.defs create mode 100644 gst/audio.override create mode 100644 gst/audiomodule.c create mode 100644 gst/base.defs create mode 100644 gst/common.h create mode 100644 gst/extend/Makefile.am create mode 100644 gst/extend/Makefile.in create mode 100644 gst/extend/__init__.py create mode 100644 gst/extend/discoverer.py create mode 100644 gst/extend/jukebox.py create mode 100644 gst/extend/leveller.py create mode 100644 gst/extend/pygobject.py create mode 100644 gst/extend/sources.py create mode 100644 gst/extend/utils.py create mode 100644 gst/gst-0.10.21.ignore create mode 100644 gst/gst-0.10.22.ignore create mode 100644 gst/gst-0.10.23.ignore create mode 100644 gst/gst-0.10.24.ignore create mode 100644 gst/gst-0.10.25.ignore create mode 100644 gst/gst-0.10.26.ignore create mode 100644 gst/gst-0.10.29.ignore create mode 100644 gst/gst-0.10.30.ignore create mode 100644 gst/gst-0.10.31.ignore create mode 100644 gst/gst-0.10.32.ignore create mode 100644 gst/gst-argtypes.c create mode 100644 gst/gst-disable-loadsave.ignore create mode 100644 gst/gst-extrafuncs.defs create mode 100644 gst/gst-pb-0.10.23.ignore create mode 100644 gst/gst-pb-0.10.25.ignore create mode 100644 gst/gst-pb-0.10.26.ignore create mode 100644 gst/gst-pb-0.10.29.ignore create mode 100644 gst/gst-pb-0.10.30.ignore create mode 100644 gst/gst-pb-0.10.31.ignore create mode 100644 gst/gst-pb-0.10.32.ignore create mode 100644 gst/gst-types.defs create mode 100644 gst/gst.defs create mode 100644 gst/gst.override create mode 100644 gst/gstbase.override create mode 100644 gst/gstbin.override create mode 100644 gst/gstbuffer.override create mode 100644 gst/gstbus.override create mode 100644 gst/gstcaps.override create mode 100644 gst/gstelement.override create mode 100644 gst/gstelementfactory.override create mode 100644 gst/gstevent.override create mode 100644 gst/gstlibs.override create mode 100644 gst/gstmessage.override create mode 100644 gst/gstmodule.c create mode 100644 gst/gstobject.override create mode 100644 gst/gstpad.override create mode 100644 gst/gstquery.override create mode 100644 gst/gststructure.override create mode 100644 gst/gsttaglist.override create mode 100644 gst/gstversion.override.in create mode 100644 gst/interfaces.defs create mode 100644 gst/interfaces.override create mode 100644 gst/interfacesmodule.c create mode 100644 gst/libs.defs create mode 100644 gst/pbutils.defs create mode 100644 gst/pbutils.override create mode 100644 gst/pbutilsmodule.c create mode 100644 gst/pygst-private.h create mode 100644 gst/pygst.h create mode 100644 gst/pygstexception.c create mode 100644 gst/pygstexception.h create mode 100644 gst/pygstiterator.c create mode 100644 gst/pygstminiobject.c create mode 100644 gst/pygstminiobject.h create mode 100644 gst/pygstvalue.c create mode 100644 gst/pygstvalue.h create mode 100644 gst/tag.defs create mode 100644 gst/tag.override create mode 100644 gst/tagmodule.c create mode 100644 gst/video.defs create mode 100644 gst/video.override create mode 100644 gst/videomodule.c create mode 100644 gst/xoverlay.defs create mode 100644 gst/xoverlay.override create mode 100644 gstlibtoolimporter.py create mode 100644 gstoptionmodule.c create mode 100755 install-sh create mode 100755 ltmain.sh create mode 100644 m4/libtool.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100755 missing create mode 100644 packaging/gstreamer-python.changes create mode 100644 packaging/gstreamer-python.spec create mode 100644 pkgconfig/Makefile.am create mode 100644 pkgconfig/Makefile.in create mode 100644 pkgconfig/gst-python-uninstalled.pc.in create mode 100644 pkgconfig/gst-python.pc.in create mode 100644 plugin/Makefile.am create mode 100644 plugin/Makefile.in create mode 100644 plugin/gstpythonplugin.c create mode 100755 py-compile create mode 100644 pygst.py.in create mode 100644 testsuite/Makefile.am create mode 100644 testsuite/Makefile.in create mode 100644 testsuite/cleanup.py create mode 100644 testsuite/common.py create mode 100644 testsuite/gstpython.supp create mode 100644 testsuite/python.supp create mode 100644 testsuite/runtests.py create mode 100644 testsuite/test-object.c create mode 100644 testsuite/test-object.h create mode 100644 testsuite/test_adapter.py create mode 100644 testsuite/test_audio.py create mode 100644 testsuite/test_bin.py create mode 100644 testsuite/test_buffer.py create mode 100644 testsuite/test_caps.py create mode 100644 testsuite/test_element.py create mode 100644 testsuite/test_event.py create mode 100644 testsuite/test_ghostpad.py create mode 100644 testsuite/test_gst.py create mode 100644 testsuite/test_interface.py create mode 100644 testsuite/test_message.py create mode 100644 testsuite/test_pad.py create mode 100644 testsuite/test_pbutils.py create mode 100644 testsuite/test_pipeline.py create mode 100644 testsuite/test_registry.py create mode 100644 testsuite/test_segment.py create mode 100644 testsuite/test_struct.py create mode 100644 testsuite/test_taglist.py create mode 100644 testsuite/test_xml.py create mode 100644 testsuite/testhelpermodule.c create mode 100644 win32/MANIFEST create mode 100644 win32/common/config.h create mode 100644 win32/common/config.h.in create mode 100644 win32/vs6/gst_python.dsw create mode 100644 win32/vs6/libgstpython.dsp create mode 100644 win32/vs6/pygenfiles.dsp diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..92ffc66 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +This file will be autogenerated. Please read README-docs. diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..2c24624 --- /dev/null +++ b/COPYING @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..5f46f49 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,5539 @@ +=== release 0.10.22 === + +2011-10-29 Tim-Philipp Müller + + * configure.ac: + releasing 0.10.22, "Ninety Tons of Thunder" + +2011-10-29 16:01:24 +0100 Tim-Philipp Müller + + * configure.ac: + configure: use AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO + For python plugin, but also to ensure there's an entry in the + doap file for releases. + +2011-10-20 13:24:59 +0100 Tim-Philipp Müller + + * configure.ac: + 0.10.21.2 pre-release + +2011-08-26 15:22:16 +0200 Sebastian Dröge + + * pkgconfig/gst-python-uninstalled.pc.in: + * pkgconfig/gst-python.pc.in: + pkgconfig: Add Cflags with the include path for the headers + https://bugzilla.gnome.org/show_bug.cgi?id=657435 + +2011-10-11 23:33:21 +0100 Tim-Philipp Müller + + * gst/Makefile.am: + * gst/audio.override: + * gst/common.h: + * gst/interfaces.override: + * gst/pbutils.override: + * gst/pygst-private.h: + * gst/pygst.h: + * gst/pygstminiobject.c: + * gst/pygstminiobject.h: + * gst/pygstvalue.h: + * gst/tag.override: + * gst/video.override: + Don't install common.h and remove from public headers + Doesn't seem to be needed anyway. Also remove duplicate + pygobject.h include in common.h while at it. + https://bugzilla.gnome.org/show_bug.cgi?id=657435 + +2011-10-11 22:59:05 +0100 Tim-Philipp Müller + + * gst/Makefile.am: + Install headers into $includedir/gstreamer-0.10/gst not .../pygst/ + This matches the directory layout in the source tree and makes it + possible to find the headers (e.g. from g-e-s) in an uninstalled + setup. + https://bugzilla.gnome.org/show_bug.cgi?id=657435 + +2011-10-11 22:57:30 +0100 Tim-Philipp Müller + + * gst/Makefile.am: + Keep pygst-private.h in noinst_HEADERS + Makes sure it gets disted. + +2011-01-13 14:59:16 +0000 Vincent Penquerc'h + + * examples/remuxer.py: + remuxer.py: allow more than one stream of the same type + Queue names would collide otherwise, so just pass None for now. Also + guarantees that we don't get silly names like "queue_audio/x-foobar". + https://bugzilla.gnome.org/show_bug.cgi?id=639427 + +2011-01-13 14:15:34 +0000 Vincent Penquerc'h + + * examples/remuxer.py: + remuxer.py: do not crash when clicking open without having selected a file + https://bugzilla.gnome.org/show_bug.cgi?id=639421 + +2011-01-13 14:19:05 +0000 Vincent Penquerc'h + + * examples/remuxer.py: + remuxer.py: list files named *.og[gvax], not only *.ogg + These are all recommended extensions for Ogg streams. + https://bugzilla.gnome.org/show_bug.cgi?id=639423 + +2011-09-06 21:53:08 +0200 Stefan Sauer + + * common: + Automatic update of common submodule + From a39eb83 to 11f0cd5 + +2011-09-06 19:13:44 +0100 Tim-Philipp Müller + + * gst/gstcaps.override: + caps.override: fix compiler warning + Re-use the already-extracted caps and structure pointers, instead + of getting them again, thus fixing: + gstcaps.override: In function 'pygst_caps_sq_item': + gstcaps.override:361:16: error: variable 'structure' set but not used + +2011-09-06 19:07:35 +0100 Tim-Philipp Müller + + * gst/gstpad.override: + pad.override: fix pad probe return value handling + Don't forget to return the return value, makes buffer and event probes + work much better. + +2011-09-06 16:06:39 +0200 Stefan Sauer + + * common: + Automatic update of common submodule + From 605cd9a to a39eb83 + +2011-08-10 17:10:01 +0200 Thibault Saunier + + * configure.ac: + * gst/Makefile.am: + * pkgconfig/gst-python.pc.in: + Install pygst.h so it can be reused by other bindings + Also add a PYGST_CFLAGS + https://bugzilla.gnome.org/show_bug.cgi?id=656289 + +2011-08-10 17:13:17 +0200 Thibault Saunier + + * gst/pygst.h: + * gst/pygstminiobject.c: + * gst/pygstminiobject.h: + gst: Move PyGstMiniObject to public API. + Allows it to be reused from 3rd party modules. + https://bugzilla.gnome.org/show_bug.cgi?id=656289 + +2011-06-23 11:29:46 -0700 David Schleef + + * common: + Automatic update of common submodule + From 69b981f to 605cd9a + +2011-05-25 09:38:22 +0200 Sebastian Dröge + + * gst/gstpad.override: + gst: Don't use private GstPad API to add data/buffer/event probes + This does not work anymore with latest core because of the + pad cache that enables use of a fast path during data passing + in many situations. + Fixes bug #650987. + +2011-05-24 19:20:44 +0200 Andoni Morales Alastruey + + * gst/gstpad.override: + gst: Fix override of pad probes + Fixes bug #650986. + +2011-05-19 22:59:28 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 9e5bbd5 to 69b981f + +2011-05-18 16:13:11 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From fd35073 to 9e5bbd5 + +2011-05-18 12:26:36 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 46dfcea to fd35073 + +2011-05-03 09:37:36 -0300 Thiago Santos + + * gst/pbutils.defs: + pbutils: Encoding profiles accept null caps restrictions + Add 'null-ok' for encoding video/audio profiles constructor + so they accept None as caps restriction parameter + +2011-05-02 16:59:30 -0300 Thiago Santos + + * gst/gstmodule.c: + gstmodule: Check for Py_None when setting a miniobject + Check if we got a None value before trying to use it as a + PyGstMiniObject. + https://bugzilla.gnome.org/show_bug.cgi?id=649227 + +2011-04-24 14:05:55 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From c3cafe1 to 46dfcea + +2011-04-04 15:58:52 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 1ccbe09 to c3cafe1 + +2011-03-25 22:35:52 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 193b717 to 1ccbe09 + +2011-03-25 14:57:27 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From b77e2bf to 193b717 + +2011-03-25 09:34:04 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From d8814b6 to b77e2bf + +2011-03-25 09:10:14 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 6aaa286 to d8814b6 + +2011-03-24 18:50:52 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 6aec6b9 to 6aaa286 + +2011-03-22 13:04:02 +0100 Luis de Bethencourt + + * configure.ac: + configure.ac: redundant uses of AC_MSG_RESULT() + cleaned the redundant uses of AC_MSG_RESULT() in configure.ac + +2011-03-18 19:34:57 +0100 Luis de Bethencourt + + * autogen.sh: + autogen: wingo signed comment + +2011-02-28 18:34:03 +0100 Mark Nauwelaerts + + * common: + Automatic update of common submodule + From 1de7f6a to 6aec6b9 + +2011-02-14 12:54:46 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From f94d739 to 1de7f6a + +2011-02-09 09:40:17 +0000 Tim-Philipp Müller + + * gst/gst-0.10.31.ignore: + gst-0.10.31.ignore: fix build against core 0.10.30 + +2011-01-24 17:55:55 +0530 Arun Raghavan + + * codegen/codegen.py: + codegen: Respect ignore-type for miniobjects + https://bugzilla.gnome.org/show_bug.cgi?id=640410 + +2011-01-24 17:56:16 +0530 Arun Raghavan + + * codegen/override.py: + codegen: Handle empty lines in overrides gracefully + Without this, having an empty line in an override will cause codegen to + unceremoniously choke to death. + https://bugzilla.gnome.org/show_bug.cgi?id=640341 + +2011-02-06 12:08:14 +0100 Edward Hervey + + * gst/pbutils.defs: + pbutils: Specify which string variables can be NULL + Without this you can't pass None to the various methods/constructors + +2011-01-28 16:59:11 +0000 Tim-Philipp Müller + + * gst/gstmodule.c: + gstmodule: remove unused label to fix compiler warning + gstmodule.c: In function 'pygst_fraction_to_value': + gstmodule.c:129:1: error: label 'out' defined but not used + https://bugzilla.gnome.org/show_bug.cgi?id=640837 + +2011-01-21 18:13:57 +0100 Andoni Morales Alastruey + + * testsuite/runtests.py: + tests: fix checks when the locale is not the default one + Some tests (test_pbutils.py) checks against strings for the + english locale, so we should force it before running any test + https://bugzilla.gnome.org/show_bug.cgi?id=640207 + +2011-01-25 11:17:12 +0100 Edward Hervey + + * configure.ac: + configure.ac: And back to development we go + +=== release 0.10.21 === + +2011-01-20 21:16:38 +0100 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.21 + +2011-01-06 17:40:28 +0000 christian schaller + + * gst-python.spec.in: + Update spec file with latest changes + +2011-01-16 14:58:37 +0100 Edward Hervey + + * gst/gstmodule.c: + gstmodule: Add tags introduced in 0.10.31 + Fixes #639632 + +2011-01-16 14:55:26 +0100 Edward Hervey + + * gst/gstmodule.c: + gstmodule: Use a macro to register tags + Avoids human error when registering them (like USER_RATING previously + being TRACK_PEAK). + +2011-01-12 18:12:29 +0530 Arun Raghavan + + * codegen/codegen.py: + codegen: Ignore functions whose return type is ignored + This makes sure that if X is an ignored type, then functions that return + an object of type X (or a pointer type based on X) are also ignored. + Fixes #639293 + +2011-01-12 18:11:23 +0530 Arun Raghavan + + * codegen/override.py: + codegen: Handle pointer types in is_type_ignored() + This ensures that if type X is ignored, then pointers to X (and pointers + to pointers to X, etc.) are also ignored. + Caveat: this also means that ignore-type should only be used with base + types and not pointer types. + Fixes #639293 + +2011-01-12 15:01:39 +0100 Edward Hervey + + * testsuite/Makefile.am: + testsuite: Add a make command to run tests forever + And will stop once they fail. Useful to debug racy tests. + +2011-01-11 20:31:59 +0100 Edward Hervey + + * configure.ac: + 0.10.20.3 pre-release + +2011-01-11 15:51:55 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From e572c87 to f94d739 + +2011-01-10 16:38:09 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From ccbaa85 to e572c87 + +2011-01-10 14:55:31 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 46445ad to ccbaa85 + +2011-01-07 21:52:03 +0100 Edward Hervey + + * gst/pbutils.defs: + pbutils: Fix discoverer miniobject methods + They were declared as functions and not methods :( + +2011-01-07 17:20:44 +0100 Edward Hervey + + * configure.ac: + 0.10.20.2 pre-release + +2011-01-07 17:17:05 +0100 Edward Hervey + + * gst/pbutils.override: + pbutils: Add overrides for new API + +2011-01-05 22:18:46 +0100 Edward Hervey + + * gst/pbutils.defs: + encoding: encoding_profile_get_output_caps => _get_input_caps + +2011-01-05 21:28:12 +0100 Edward Hervey + + * gst/gst-0.10.32.ignore: + * gst/gst.defs: + gst: update for latest API addition + +2011-01-05 21:25:37 +0100 Edward Hervey + + * gst/gst-pb-0.10.32.ignore: + * gst/pbutils.defs: + pbutils: Update .defs for latest addition + +2011-01-05 15:04:05 +0100 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.32.ignore: + * gst/gst-pb-0.10.32.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/pbutils.defs: + * gst/video.defs: + gst: Update to 0.10.32 core/base API + +2011-01-05 15:04:25 +0100 Edward Hervey + + * gst/arg-types.py: + arg-types: Properly handle const-GstCaps* return values + +2010-12-20 17:48:03 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From 169462a to 46445ad + +2010-12-15 14:57:05 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 20742ae to 169462a + +2010-12-13 16:24:39 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 011bcc8 to 20742ae + +2010-12-05 14:08:05 +0100 Edward Hervey + + * testsuite/test_pad.py: + test_pad: Fix pad refcount checking due to fix in core + The event source wasn't previously set correctly. Now that it is, + check the refcount on the proper pad. + +2010-12-03 14:49:13 +0100 Edward Hervey + + * configure.ac: + configure.ac: back to development + And the crowd goes mad \o/ + +=== release 0.10.20 === + +2010-12-01 23:43:57 +0100 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Release 0.10.20 + +2010-11-22 13:27:15 +0000 Tim-Philipp Müller + + * .gitignore: + * configure.ac: + 0.10.19.5 pre-release + +2010-11-22 14:18:05 +0100 Alessandro Decina + + * gst/Makefile.am: + * testsuite/common.py: + Fix distcheck some more. + In testsuite/common.py look for gst/__init__.py in builddir now. + Clean gst/__init__.pyc after make check. + +2010-11-22 13:41:17 +0100 Alessandro Decina + + * configure.ac: + * gst/Makefile.am: + * gst/__init__.py: + * gst/__init__.py.in: + Fix distcheck. + Before this change gst/__init__.py wasn't being copied to + $(top_builddir)/gst/, making make check fail to import gst. + +2010-11-17 09:36:44 -0300 Thiago Santos + + * gst/gst.defs: + gst: updating datetime functions + Updating datetime _from_unix functions for the new 2 variants (utc/local) + https://bugzilla.gnome.org/show_bug.cgi?id=635031 + +2010-11-09 10:58:04 +0100 Edward Hervey + + * gst/pbutilsmodule.c: + pbutils: Check that pygst_init() succeeded + +2010-11-09 11:00:16 +0100 Edward Hervey + + * gst/audiomodule.c: + * gst/gst-argtypes.c: + * gst/interfacesmodule.c: + * gst/pbutilsmodule.c: + * gst/pygstexception.c: + * gst/pygstiterator.c: + * gst/pygstminiobject.c: + * gst/tagmodule.c: + * gst/videomodule.c: + gst: run gst-indent all C files + We hadn't done it since the switch to git... whoops + +2010-11-09 10:57:31 +0100 Edward Hervey + + * gst/pygst.h: + pygst: Get the _PyGst_API symbol from the proper module + https://bugzilla.gnome.org/show_bug.cgi?id=634365 + +2010-11-08 19:01:50 +0100 Edward Hervey + + * gst/pbutils.defs: + * gst/pbutils.override: + pbutils: Update for latest API change in gstdiscoverer + +2010-11-01 19:37:03 +0000 Tim-Philipp Müller + + * configure.ac: + configure.ac: 0.10.19.4 pre-release + Skip .3 to align number with the other pre-releases. + +2010-10-30 16:18:59 +0100 Tim-Philipp Müller + + * gst/pbutils.defs: + pbutils: update for discoverer API changes in last gst-plugins-base pre-release + https://bugzilla.gnome.org/show_bug.cgi?id=633311 + +2010-10-27 16:58:12 +0200 David Hoyt + + * plugin/gstpythonplugin.c: + plugin: Fix build on MSVC + Fixes #633141 + +2010-10-27 13:17:57 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 7bbd708 to 011bcc8 + +2010-10-26 17:53:42 +0100 Jan Schmidt + + * examples/filesrc.py: + filesrc.py: Call gobject.threads_init() in the example + Fixes: #633033 + +2010-10-22 18:17:34 +0200 Edward Hervey + + * configure.ac: + configure.ac: 0.10.19.2 pre-release + +2010-10-22 13:28:03 +0200 Edward Hervey + + * gst/pbutils.defs: + * gst/pbutils.override: + pbutils: Overrides for GstDiscoverer API + +2010-10-22 13:27:33 +0200 Edward Hervey + + * gst/gstmodule.c: + gst: Register new GST_ELEMENT_FACTORY_LIST_TYPE constants + +2010-10-22 13:27:02 +0200 Edward Hervey + + * gst/gstmessage.override: + gst: Add override for new qos messages + +2010-10-22 13:26:44 +0200 Edward Hervey + + * gst/gstevent.override: + gst: Add override for gst_event_parse_sink_message + +2010-10-22 13:26:21 +0200 Edward Hervey + + * gst/gstelementfactory.override: + gst: Add overrides for new GstElementFactoryList functions + +2010-10-22 13:25:45 +0200 Edward Hervey + + * gst/arg-types.py: + arg-types: GstElementFactoryListType is a guint64 + +2010-10-22 13:25:22 +0200 Edward Hervey + + * gst/gst-types.defs: + gst: Add GstDateTime as a boxed + +2010-10-18 11:59:03 +0200 Edward Hervey + + * gst/audio.override: + * gst/audiomodule.c: + * gst/interfaces.override: + * gst/interfacesmodule.c: + * gst/pbutils.override: + * gst/pbutilsmodule.c: + * gst/tag.override: + * gst/tagmodule.c: + * gst/video.override: + * gst/videomodule.c: + gst: Make all libraries use shared PyGst_API + Fixes #590348 + +2010-10-18 11:50:19 +0200 Edward Hervey + + * gst/Makefile.am: + * gst/common.h: + * gst/gst.override: + * gst/gstmodule.c: + * gst/pygst-private.h: + * gst/pygst.h: + * gst/pygstiterator.c: + * gst/pygstminiobject.h: + * gst/pygstvalue.c: + gst: Export some pygst API to be used by external modules + Partially fixes #590348 + +2010-10-18 10:14:19 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.20.ignore: + * gst/gst.override: + * gst/gstmodule.c: + * gst/gstversion.override.in: + * gst/pbutilsmodule.c: + gst: Bump required core/base to 0.10.20 + And clean up code accordingly + +2010-10-18 09:36:13 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/audio.defs: + * gst/base.defs: + * gst/gst-0.10.31.ignore: + * gst/gst-pb-0.10.31.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/pbutils.defs: + * gst/video.defs: + gst: Update to latest 0.10.31 core/base API + +2010-10-14 12:32:36 -0700 David Schleef + + * common: + Automatic update of common submodule + From 5a668bf to 7bbd708 + +2010-10-08 12:45:07 -0700 David Schleef + + * common: + Automatic update of common submodule + From c4a8adc to 5a668bf + +2010-10-08 12:56:45 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 5e3c9bf to c4a8adc + +2010-09-21 18:34:55 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From aa0d1d0 to 5e3c9bf + +2010-09-07 14:28:14 +0300 Артём Попов + + * examples/segments.py: + examples: add an example to show looping using segments + Fixes #339772. + +2010-09-07 11:43:30 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From c2e10bf to aa0d1d0 + +2010-09-05 18:59:06 -0700 David Schleef + + * common: + Automatic update of common submodule + From d3d9acf to c2e10bf + +2010-09-05 12:21:07 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From ec60217 to d3d9acf + +2010-08-30 17:12:12 +0200 Alessandro Decina + + * acinclude.m4: + acinclude.m4: also look in ${py_prefix}/lib for libpythonX.Y.so. + Fixes loading the python plugin loader in gentoo. + +2010-08-30 11:57:07 +0200 Leo Singer + + * plugin/gstpythonplugin.c: + plugin: fix spurious exceptions in pygst_require. Fixes #624592. + +2010-08-30 11:52:58 +0200 Leo Singer + + * plugin/gstpythonplugin.c: + plugin: refresh the plugin registry when plugins change. + +2010-08-27 13:20:24 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: call pygtk.require("2.0") before importing pygobject. Fixes #623105. + Based on a patch from Leo Singer. + +2010-08-27 12:43:09 +0200 Leo Singer + + * gst/gst.defs: + gst: add bindings for more gst.util_uint64_scale_* + +2010-08-27 01:16:43 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: remove an unneeded PyType_Check call. Makes it work on centos for real. + +2010-08-26 23:34:04 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: declare _PyGstElement_Type as void*. + Declaring _PyGstElement_Type as PyTypeObject makes the loader on centos fail + because of a missing symbol. + +2010-08-26 17:14:32 +0200 Alessandro Decina + + * acinclude.m4: + * plugin/Makefile.am: + * plugin/gstpythonplugin.c: + Make the plugin loader work on OSX with the standard python install. + +2010-08-26 14:45:06 +0200 Alessandro Decina + + Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-python + +2010-08-26 12:14:33 +0200 Alessandro Decina + + * plugin/Makefile.am: + plugin: don't link to libpython + +2010-08-26 12:13:34 +0200 Alessandro Decina + + * acinclude.m4: + acinclude.m4: use a better way to find the correct PYTHON_LIB_LOC. + +2010-08-26 12:09:31 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: refactor the initialization code. + Remove references to global python objects from the initialization code. This + makes it possible to avoid linking to libpython. + +2010-08-25 12:36:14 +0200 Alessandro Decina + + * acinclude.m4: + * plugin/Makefile.am: + plugin: fix the manual loading of libpythonX.Y.so. + +2010-08-25 11:08:15 +0200 Alessandro Decina + + * plugin/gstpythonplugin.c: + plugin: check for _Py_NoneStruct instead of Py_None. + When checking if CPython is already loaded, don't check for Py_None which is a + macro but use _Py_NoneStruct which is a real symbol. + +2010-08-13 17:25:05 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 3e8db1d to ec60217 + +2010-08-10 10:59:39 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From bd2054b to 3e8db1d + +2010-08-06 23:18:02 +0200 Alessandro Decina + + * gst/gststructure.override: + * gst/pygstvalue.c: + * testsuite/test_caps.py: + gst.Structure: raise TypeError when assigning None to a key + +2010-08-05 13:57:53 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From a519571 to bd2054b + +2010-08-04 19:31:40 +0200 Sebastian Dröge + + * configure.ac: + configure: Check if the compiler supports ISO C89 or C99 and which parameters are required + This first checks what is required for ISO C99 support and sets the relevant + compiler parameters and if no C99 compiler is found, it checks for a + C89 compiler. This enables us to check for and use C89/C99 functions + that gcc hides from us without the correct compiler parameters. + +2010-07-26 19:41:43 +0200 Alessandro Decina + + * testsuite/test_fraction.py: + test_fraction: add a test for gobject property marshalling. + +2010-07-26 19:29:53 +0200 Alessandro Decina + + * gst/gstmodule.c: + gst: implement getters and setters for GST_TYPE_FRACTION properties. Fixes #624882. + +2010-07-16 12:44:46 +0200 Edward Hervey + + * configure.ac: + Back to development. + +=== release 0.10.19 === + +2010-07-15 21:01:35 +0200 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.19 "Insert Casablanca quote here" + +2010-07-14 12:33:58 +0200 Alessandro Decina + + * gst/gst.defs: + * testsuite/test_ghostpad.py: + gst.GhostPad: allow set_target(None) to unset the target. Fixes #590735. + +2010-07-07 12:08:29 +0200 Edward Hervey + + * configure.ac: + configure.ac: 0.10.18.4 pre-release + +2010-07-07 12:11:46 +0200 Edward Hervey + + * gst/gstmodule.c: + gst: Add GST_TAG_IMAGE_ORIENTATION + +2010-07-07 12:07:55 +0200 Edward Hervey + + * gst/base.defs: + * gst/gst-0.10.30.ignore: + base: Add new GstBaseSink methods + +2010-06-30 10:26:25 +0200 Edward Hervey + + * configure.ac: + configure.ac: 0.10.18.3 pre-release + +2010-06-30 10:25:50 +0200 Edward Hervey + + * autogen.sh: + * configure.ac: + Bump automake requirements to 1.10 and autoconf to 2.60 + +2010-06-27 10:46:14 +0200 Edward Hervey + + * configure.ac: + 0.10.18.2 pre-release + +2010-06-27 10:35:55 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-pb-0.10.29.ignore: + * gst/gst-pb-0.10.30.ignore: + * gst/gstversion.override.in: + * gst/tag.defs: + * gst/video.defs: + * gst/xoverlay.defs: + Add gst-plugins-base 0.10.29/0.10.30 API additions + +2010-06-27 10:14:58 +0200 Edward Hervey + + * gst/base.defs: + * gst/gst-0.10.30.ignore: + Add new core library API from 0.10.30 + +2010-06-27 10:07:28 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.29.ignore: + * gst/gst-0.10.30.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + Add new core 0.10.29 and 0.10.30 API definitions + +2010-06-24 15:10:08 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 35617c2 to a519571 + +2010-06-15 16:50:48 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From 9339ccc to 35617c2 + +2010-06-15 16:55:09 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 5adb1ca to 9339ccc + +2010-06-15 16:36:19 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 57c89b7 to 5adb1ca + +2010-06-15 15:50:39 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From c804988 to 57c89b7 + +2010-06-14 13:28:28 +0200 Sebastian Dröge + + * configure.ac: + configure: Use GLIB_EXTRA_CFLAGS + +2010-06-14 13:05:52 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 7a0fdf5 to c804988 + +2010-06-14 11:35:37 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 6da3bab to 7a0fdf5 + +2010-06-12 08:29:58 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 733fca9 to 6da3bab + +2010-06-09 12:40:32 -0700 David Schleef + + * common: + Automatic update of common submodule + From fad145b to 733fca9 + +2010-06-09 12:34:26 -0700 David Schleef + + * common: + Automatic update of common submodule + From 47683c1 to fad145b + +2010-06-09 17:07:40 +0200 Edward Hervey + + * pkgconfig/gst-python-uninstalled.pc.in: + * pkgconfig/gst-python.pc.in: + pkgconfig: Remove the includedir variables + First of all because we don't install anything (doh!), and secondly + because it confuses the hell out of 3rd party python modules + using the values from those .pc files. + +2010-06-03 13:09:28 +0100 Tim-Philipp Müller + + * autogen.sh: + autogen.sh: remove undefined configure options + +2010-06-01 23:49:45 -0700 David Schleef + + * common: + Automatic update of common submodule + From 17f89e5 to 47683c1 + +2010-06-01 22:55:32 -0700 David Schleef + + * common: + Automatic update of common submodule + From fd7ca04 to 17f89e5 + +2010-05-28 10:32:28 +0100 Tim-Philipp Müller + + * .gitignore: + * Makefile.am: + * autogen.sh: + * configure.ac: + build: put build files into m4/ instead of common/m4/ + We don't want the common submodule directory contaminated with + random build cruft. + +2010-04-26 00:33:04 +0100 Tim-Philipp Müller + + * gst-python.doap: + doap: update repository info from cvs->git and maintainers + +2010-05-26 11:56:24 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 357b0db to fd7ca04 + +2010-05-14 18:26:13 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 4d67bd6 to 357b0db + +2010-04-28 01:12:25 -0300 Thiago Santos + + * gst/gstmodule.c: + gstmodule: Add missing tags + Map GST_TAG_* that were missing in gst-python bindings + +2009-07-24 17:36:18 +0200 Olivier Aubert + + * gst/gstbuffer.override: + Implement setter for gst.Buffer.size + https://bugzilla.gnome.org/show_bug.cgi?id=589582 + +2010-04-28 00:27:43 -0300 Thiago Santos + + * gst/tag.defs: + * testsuite/test_libtag.py: + tag: Adds xmp functions mappings + Maps gst_tag_list_from_xmp_buffer and + gst_tag_list_to_xmp_buffer + https://bugzilla.gnome.org/show_bug.cgi?id=617068 + +2010-04-28 00:26:50 -0300 Thiago Santos + + * gst/arg-types.py: + arg-types: Map const GstMiniObject + Adds GstMiniObjectArg to be able to use GstMiniObject objects + and its const versions in functions + https://bugzilla.gnome.org/show_bug.cgi?id=617068 + +2010-04-29 16:02:20 +0200 Edward Hervey + + * testsuite/test_interface.py: + test_interface: Don't assert the missing mixer, gracefully ignore it + Fixes make check on systems that don't have a GstMixer element available + +2010-04-23 14:42:16 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From fc85867 to 4d67bd6 + +2010-04-09 11:23:51 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From c1d07dd to fc85867 + +2010-03-24 18:56:05 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From 55cd514 to c1d07dd + +2010-03-15 10:26:25 +0100 Emilio Pozuelo Monfort + + * gst/__init__.py: + Fix import on GNU/Hurd + +2010-03-12 14:00:28 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From e272f71 to 55cd514 + +2010-03-11 11:21:39 +0100 Benjamin Otte + + * common: + Automatic update of common submodule + From df8a7c8 to e272f71 + +2010-03-10 21:52:56 +0100 Benjamin Otte + + * common: + Automatic update of common submodule + From 9720a7d to df8a7c8 + +2010-03-10 20:44:42 +0100 Benjamin Otte + + * common: + Automatic update of common submodule + From 0b6e072 to 9720a7d + +2010-03-10 16:10:41 +0100 Benjamin Otte + + * common: + Automatic update of common submodule + From 7cc5eb4 to 0b6e072 + +2010-03-10 01:11:23 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 7aa65b5 to 7cc5eb4 + +2010-03-09 21:41:38 +0000 Sebastian Dröge + + * common: + Automatic update of common submodule + From 44ecce7 to 7aa65b5 + +2010-02-26 16:37:50 +0100 Sebastian Dröge + + * gst/Makefile.am: + * pkgconfig/Makefile.am: + * testsuite/Makefile.am: + build: Make some more rules silent if requested + +2010-02-26 15:46:58 +0100 Sebastian Dröge + + * configure.ac: + configure: Use automake 1.11 silent rules instead of shave if available + This makes sure that we use something that is still maintained and + also brings back libtool 1.5 support. + +2010-02-14 23:19:13 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 96dc793 to 44ecce7 + +2010-02-12 11:38:54 +0100 Edward Hervey + + * configure.ac: + configure.ac: And back to development we go + +=== release 0.10.18 === + +2010-02-11 16:33:04 +0100 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Release 0.10.18 "A pigeon carrying a 500ton block" + +2010-01-30 15:20:24 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 15d47a6 to 96dc793 + +2010-01-25 20:27:39 +0100 Edward Hervey + + * configure.ac: + configure.ac: 0.10.17.2 pre-release + +2010-01-23 12:39:46 +0100 Luca Bruno + + * gst/__init__.py: + Fix importing of gst module on GNU/kFreeBSD + +2010-01-20 00:55:39 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 14cec89 to 15d47a6 + +2010-01-15 17:49:03 +0100 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.13.ignore: + * gst/gst-0.10.14.ignore: + * gst/gst-0.10.15.ignore: + * gst/gst-0.10.16.ignore: + * gst/gst-0.10.18.ignore: + * gst/gst-pb-0.10.14.ignore: + * gst/gst-pb-0.10.16.ignore: + * gst/gst-pb-0.10.18.ignore: + * gst/gstversion.override.in: + * gst/interfaces.override: + * gst/pbutils.override: + bump minimum requirement to 0.10.18 and remove cruft + +2010-01-15 17:44:41 +0100 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.26.ignore: + * gst/gst-pb-0.10.26.ignore: + * gst/gstversion.override.in: + ignore new API additions for 0.10.26 core/base releases + +2010-01-15 17:26:20 +0100 Edward Hervey + + * gst/base.defs: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/tag.defs: + * gst/video.defs: + gst: Update .defs to new API + +2010-01-18 09:06:28 -0300 Thiago Santos + + * gst/extend/discoverer.py: + python: Do not pop tags in discoverer.py + Do not use pop on dicts because it destroys the tags info. + Fixes #592459 + +2009-12-21 19:13:28 +0100 Mark Nauwelaerts + + * common: + Automatic update of common submodule + From 47cb23a to 14cec89 + +2009-12-01 15:08:40 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 87bf428 to 47cb23a + +2009-12-01 14:18:28 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From da4c75c to 87bf428 + +2009-11-27 18:56:43 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From 53a2485 to da4c75c + +2009-11-19 10:31:56 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 0702fe1 to 53a2485 + +2009-10-16 10:17:39 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 85d1530 to 0702fe1 + +2009-10-15 14:15:37 +0100 Zaheer Abbas Merali + + * examples/Makefile.am: + * examples/maemogst.py: + examples: add a simple Maemo 5 example + +2009-10-14 10:42:11 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From a3e3ce4 to 85d1530 + +2009-10-08 11:01:32 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 19fa4f3 to a3e3ce4 + +2009-10-06 19:48:48 +0100 Jan Schmidt + + * configure.ac: + back to development -> 0.10.17.1 + +2009-10-05 14:29:41 +0100 Jan Schmidt + + * gst-python.doap: + Add 0.10.17 release to the doap file + +=== release 0.10.17 === + +2009-10-05 14:06:11 +0100 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Release 0.10.17 + +2009-09-17 01:21:47 +0100 Jan Schmidt + + * configure.ac: + 0.10.16.3 pre-release + +2009-09-16 16:23:27 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.25.ignore: + * gst/gst-pb-0.10.25.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/interfaces.defs: + * gst/interfaces.override: + Update definitions and ignores for core/base 0.10.25. Fixes #587432 + +2009-09-12 00:26:57 +0100 Jan Schmidt + + * ChangeLog: + * configure.ac: + 0.10.16.2 pre-release + +2009-09-11 22:41:28 +0100 Jan Schmidt + + * testsuite/test_message.py: + test: Fix the structure_changed message test + The core changed to use sink pads for the structure changed + message instead of source pads. Might as well fix the test too. + +2009-09-05 10:25:19 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 94f95e3 to 19fa4f3 + +2009-08-21 16:41:29 +0200 Edward Hervey + + * testsuite/Makefile.am: + * testsuite/test_audio.py: + Add test_audio.py. + +2009-08-21 16:22:38 +0200 Johannes Berg + + * gst/Makefile.am: + Use only one copy of pygstminiobject. Fixes #590348. + Instead of linking pygstminiobject.c into all the modules, + we can link it only into _gst and export the symbols for + the other modules. This fixes bug #590348 because now the + class key/id is common for all modules as a side-effect. + Also makes the modules smaller. + +2009-08-20 15:46:53 +0200 Alessandro Decina + + * gst/base.defs: + Fix leak in gst_base_sink_get_lasy_buffer. Fixes #592447. + +2009-08-18 14:45:41 +0100 Christian Schaller + + * gst-python.spec.in: + Update spec file + +2009-08-13 11:45:51 +0200 Alessandro Decina + + * gst/gstpad.override: + Release the GIL around gst_pad_link. + +2009-08-13 11:00:49 +0200 Edward Hervey + + * gst/gstpad.override: + gstpad: Don't forget to acquire/release the GIL in pac_block_destroy_data + +2009-08-08 22:49:16 +0200 Sebastian Dröge + + * testsuite/Makefile.am: + Use LC_ALL=C for the tests as some are comparing localized strings + Fixes bug #590803. + +2009-05-10 11:17:26 +0200 Marc-Andre Lureau + + * autogen.sh: + Run libtoolize before aclocal + This unbreaks the build in some cases. Fixes bug #582021 + +2009-08-06 01:45:07 +0100 Jan Schmidt + + * configure.ac: + back to development -> 0.10.16.1 + +2009-08-05 02:04:12 +0100 Jan Schmidt + + * gst-python.doap: + Add 0.10.16 release to the doap file + +=== release 0.10.16 === + +2009-08-05 01:34:03 +0100 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Release 0.10.16 + +2009-07-24 00:43:35 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From fedaaee to 94f95e3 + +2009-07-20 17:52:10 +0100 Jan Schmidt + + * configure.ac: + 0.10.15.3 pre-release + +2009-07-17 11:34:50 +0200 Edward Hervey + + * gst/base.defs: + * gst/gst-0.10.24.ignore: + gst: More API additions to gstreamer core. Fixes #587432 + +2009-07-14 19:00:28 +0100 Jan Schmidt + + * ChangeLog: + * configure.ac: + 0.10.15.2 pre-release + +2009-07-13 12:24:35 -0400 Olivier Crête + + * common: + Automatic update of common submodule + From 5845b63 to fedaaee + +2009-07-01 16:01:53 +0200 Edward Hervey + + * gst/gstquery.override: + gstquery.override: Wrap remainig gst_query_parse*() methods. + +2009-07-01 16:01:41 +0200 Edward Hervey + + * gst/gstevent.override: + gstevent.override: Fix typos. + +2009-07-01 13:54:57 +0200 Edward Hervey + + * gst/gstmessage.override: + * testsuite/test_message.py: + gst.Message: Wrap remaining parse_*() methods. + +2009-07-01 13:54:40 +0200 Edward Hervey + + * gst/gstevent.override: + gst.Event: wrap parse_new_segment_full() + +2009-07-01 13:53:54 +0200 Edward Hervey + + * gst/gst.defs: + gst.defs: Properly mark functions returning new objects + +2009-07-01 12:29:22 +0200 Edward Hervey + + * gst/gstmessage.override: + * testsuite/test_message.py: + gst.Message: Add overrides for new 0.10.24 messages + +2009-07-01 12:28:52 +0200 Edward Hervey + + * gst/gstevent.override: + * testsuite/test_event.py: + gst.Event: Add override for step event + +2009-07-01 10:58:42 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.24.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + Update .defs for core API additions + +2009-07-01 10:57:29 +0200 Edward Hervey + + * codegen/argtypes.py: + codegen: Fix const GBoxed return wrapping. + +2009-06-26 13:43:51 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From f810030 to 5845b63 + +2009-06-24 15:16:20 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From c572721 to f810030 + +2009-06-05 23:26:11 +0100 Jan Schmidt + + * gst/pygstvalue.c: + values: Fix segfault in the testsuite + It seems pygst_value_from_pyobject should not unref the passed + in object. Wrap the original pygst_value_from_pyobject in a function + that converts unicode python objects and then unrefs the temporary + object after extraction into a GValue. + +2009-06-01 22:02:47 +0200 Thomas Vander Stichele + + * gst/gsttaglist.override: + * gst/tag.override: + * testsuite/common.py: + * testsuite/test_pipeline.py: + * testsuite/test_taglist.py: + wrap gst_tag_to_vorbis_comment; fix uint tag setting + Setting gst.TAG_TRACK_NUMBER was failing because GStreamer + expects a uint while Python object -> GValue conversion was + giving an int. gst_tag_to_vorbis_comment was wrapped so + this conversion could be tested and failed on properly. + +2009-06-01 19:08:47 +0200 Thomas Vander Stichele + + * gst/pygstvalue.c: + * testsuite/test_struct.py: + * testsuite/test_taglist.py: + Convert unicode objects to utf-8 encoded G_STRINGs + +2009-06-01 12:46:03 +0200 Thomas Vander Stichele + + * gst/gst.override: + fix some grammar, add some debug + +2009-05-26 21:01:35 +0200 Edward Hervey + + * gst/gst.defs: + gst.defs: Replace gchar** by GStrv to wrap more methods. Fixes #580992 + +2009-05-26 17:20:32 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 888e0a2 to c572721 + +2009-05-22 12:05:28 +0200 Edward Hervey + + * plugin/gstpythonplugin.c: + gstpythonplugin: Don't use pyg_gil_* in pure python. Fixes #583378 + At this point, pygobject wasn't loaded yet ... cause pyg_gil_state_ensured + to not be initialized to the proper method. + +2009-05-22 10:21:17 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 6ab11d1 to 888e0a2 + +2009-05-12 11:52:11 +0200 Edward Hervey + + * gst/gst-pb-0.10.23.ignore: + gst-pb-0.10.23.ignore: Remove stray empty line. + This caused some issues on some systems. + +2009-05-11 21:22:35 +0100 Jan Schmidt + + * configure.ac: + Back to development -> 0.10.15.1 + +=== release 0.10.15 === + +2009-05-11 00:11:58 +0100 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.15 + +2009-05-07 14:57:57 +0200 Edward Hervey + + * configure.ac: + 0.10.14.5 pre-release + +2009-05-07 13:49:18 +0200 Edward Hervey + + * gst/gst-pb-0.10.23.ignore: + gst-pb-0.10.23: Fix the ignores, globs need to go in a special section. + Finishes fixing #581729 + +2009-05-07 13:48:54 +0200 Edward Hervey + + * gst/gst-0.10.23.ignore: + gst-0.10.23.ignore: Add newly added enum values. Partially fixes #581729 + +2009-05-07 13:48:01 +0200 Edward Hervey + + * codegen/codegen.py: + codegen: Allow ignoring enum values. Partially fixes #581729 + This is needed to ignore new enum values that are added in new gstreamer + core/base versions. + +2009-05-06 23:38:54 +0100 Jan Schmidt + + * examples/switch.py: + examples: Port switch.py to input-selector + The switch element hasn't existed for a while now - use the + replacement element input-selector instead. + Partially (and finally) fixes #581737 + +2009-05-06 23:38:08 +0100 Jan Schmidt + + * examples/play.py: + * examples/remuxer.py: + * examples/switch.py: + * examples/synchronizer.py: + examples: Make xoverlay installation thread safe using the GDK lock. + We can't call into the GDK functions in our sync-message handler + without taking the GDK lock, so do so. + Partially fixes #581737 + +2009-05-06 16:48:40 +0100 Jan Schmidt + + * configure.ac: + 0.10.14.4 pre-release + +2009-04-23 17:14:20 +0200 Edward Hervey + + * testsuite/Makefile.am: + testsuite: Dist new test file. + +2009-04-18 23:52:08 +0200 Thomas Vander Stichele + + * gst/gst.override: + * testsuite/test_gst.py: + TIME_ARGS: Catch bad input. Fixes #579455 + +2009-04-21 21:14:21 +0100 Jan Schmidt + + * configure.ac: + 0.10.14.3 pre-release + +2009-04-21 22:14:07 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From b3941ea to 6ab11d1 + +2009-04-18 17:13:12 +0100 Jan Schmidt + + Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-python + +2009-04-18 16:39:42 +0100 Jan Schmidt + + * gst/gstelement.override: + * gst/gstmessage.override: + * gst/gstpad.override: + python: Fix some locking problems + Add some python pyg_begin_allow_threads/end_allow_threads when calling into some gstreamer functions that might + call into python. + +2009-04-18 09:05:09 +0200 Edward Hervey + + * plugin/gstpythonplugin.c: + gstpythonplugin: Use strcmp for old glib. Fixes #579383 + +2009-04-17 19:34:23 +0200 Edward Hervey + + * Makefile.am: + Don't forget to dist gstlibtoolimporter.py. Fixes #579325 + +2009-04-17 19:28:08 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/audio.defs: + * gst/audio.override: + * gst/gst-pb-0.10.23.ignore: + * gst/gstversion.override.in: + * gst/interfaces.defs: + * gst/interfaces.override: + * gst/video.defs: + Wrap gst-plugins-base-0.10.23 API additions. Partially fixes #578848 + +2009-04-17 18:51:40 +0200 Edward Hervey + + * configure.ac: + * gst/Makefile.am: + * gst/base.defs: + * gst/gst-0.10.23.ignore: + * gst/gst-extrafuncs.defs: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gst.override: + * gst/gstmodule.c: + * gst/gstversion.override.in: + * gst/libs.defs: + Wrap new API added in gstreamer-0.10.23. Partially fixes #578848 + +2009-04-17 11:33:18 +0200 Mark Nauwelaerts + + * gst/gst.defs: + query_new_seeking wrapper must return query with refcount 1. Fixes #579183. + +2009-04-15 22:58:56 +0100 Jan Schmidt + + * configure.ac: + 0.10.14.2 pre-release + +2009-04-15 22:57:36 +0100 Jan Schmidt + + * ChangeLog: + ChangeLog: regenerate changelog with the gen-changelog script + +2009-04-15 22:38:28 +0200 Thomas Vander Stichele + + Merge branch 'bz-577735' + +2009-04-12 21:27:33 +0200 Edward Hervey + + * gst/__init__.py: + * plugin/gstpythonplugin.c: + registry: fix deadlock with recursive registry scanning. + The way to properly fix this issue was in fact to disable the registry + scanning when we import gst from the python plugin loader since... + we are 100% guaranteed this is being called from a registry scan :) + +2009-04-11 16:58:25 +0200 Laszlo Pandy + + * gst/gst.override: + debug: Implement gst.debug_log. Fixes #571380 + +2009-04-11 16:54:00 +0200 Olivier Crete + + * pkgconfig/gst-python-uninstalled.pc.in: + * pkgconfig/gst-python.pc.in: + pkgconfig: We require pygobject and not pygtk. Fixes #578435 + +2009-04-11 16:37:16 +0200 Edward Hervey + + * gst/gstbase.override: + adapter: overrides for _take/_peek. Fixes #576505. + This creates strings of the proper size, unlike the previous patch. + +2009-04-11 16:48:31 +0200 Edward Hervey + + * testsuite/test_adapter.py: + test_adapter: No longer use slices (which was wrong to start with). + +2009-04-11 16:47:07 +0200 Edward Hervey + + * gst/arg-types.py: + arg-types: Remove guint8* argtype. + Partially reverts 7aef2834cff525906db15b4af0ee54b723bdd083 + +2009-04-11 16:08:51 +0200 Edward Hervey + + * gst/__init__.py: + __init__: Postpone registry update during initialization. Fixes #576145 + +2009-04-11 16:20:11 +0200 Alessandro Decina + + * gst/__init__.py: + * gstlibtoolimporter.py: + * gstltihooks.py: + * testsuite/common.py: + Fix uninstalled usage with python 2.6. Fixes #576546 + Also imports submodules as mentionned by Philippe Normand. + +2009-04-10 15:43:35 +0200 Thomas Vander Stichele + + Merge branch 'master' of ssh://thomasvs@git.freedesktop.org/git/gstreamer/gst-python into bz-577735 + +2009-04-04 21:19:46 +0300 Felipe Contreras + + * common: + Automatic update of common submodule + From d0ea89e to b3941ea + +2009-04-04 14:55:08 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From f8b3d91 to d0ea89e + +2009-04-04 12:55:47 +0200 Thomas Vander Stichele + + * gst/gstobject.override: + handle actual GObject having been set to NULL in repr + (For example, when doing weak ref tracking) + +2009-04-04 10:05:50 +0200 Edward Hervey + + * pygst.py.in: + pygst.py.in: Fix license (LGPL). + +2009-02-10 12:07:52 +0100 Mark Nauwelaerts + + * gst/gst.defs: + * gst/gst.override: + Provide wrapper for gst_tag_get_type. Fixes #571156. + +2009-04-02 18:06:12 +0200 Thomas Vander Stichele + + * testsuite/test_pipeline.py: + make sure that we actually get the clock-provide message + +2009-04-02 17:21:58 +0200 Thomas Vander Stichele + + * gst/gstbin.override: + * testsuite/test_pipeline.py: + Fix for #577735: do_handle_message leaks messages + +2009-03-26 16:18:04 +0100 Edward Hervey + + * gst/base.defs: + Fix some leaks. + +2009-03-26 16:13:48 +0100 Edward Hervey + + * gst/arg-types.py: + * testsuite/Makefile.am: + * testsuite/test_adapter.py: + New guint8* ArgType. Wraps the various GstAdapter methods. Fixes #576505 + +2009-03-17 15:03:09 +0100 Alessandro Decina + + * gst/gstbus.override: + * testsuite/test_bus.py: + gstbus: fix refcounting in gst.Bus.set_sync_handler. + +2009-03-10 19:29:51 +0100 Edward Hervey + + * gst/base.defs: + base.defs: Allow passing NULL/None to gst.BaseTransform.suggest() + +2009-03-09 23:14:12 +0000 Jan Schmidt + + * common: + Automatic update of common submodule + From 7032163 to f8b3d91 + +2009-03-08 12:06:40 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From ffa738d to 7032163 + +2009-03-08 11:22:17 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 3f13e4e to ffa738d + +2009-03-07 11:47:49 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 3c7456b to 3f13e4e + +2009-03-07 10:47:56 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 57c83f2 to 3c7456b + +2009-03-05 13:59:30 +0100 Edward Hervey + + * gst/gstcaps.override: + gstcaps: Remove dead code. + Those two lines will never be called, because caps2 will always be NULL + if we go to error (either we haven't used it yet (first goto and in this + case it's NULL), or.. it's NULL (second goto)). + +2009-03-05 13:45:07 +0100 Edward Hervey + + * gst/pbutils.override: + pbutils: Fix leaked GStrv. Fixes #574258 + +2009-03-05 13:21:19 +0100 Edward Hervey + + * gst/gst.override: + Fix leak in gst_flow_get_name() wrapper function. Fixes #574251 + PyString_FromString will make a copy of the provided string. + +2009-03-02 15:22:33 +0100 Edward Hervey + + * .gitignore: + .gitignore: Reorder ignores and add *~ + +2009-02-27 12:29:04 +0100 Edward Hervey + + * plugin/gstpythonplugin.c: + plugin: Don't import modules that were already imported. + This avoids warnings for the cases where pygst.require() was already + called. + +2009-02-25 15:14:42 +0000 Jan Schmidt + + * common: + * configure.ac: + build: Update shave init statement for changes in common. Bump common. + +2009-02-25 11:33:13 +0000 Jan Schmidt + + * common: + Automatic update of common submodule + From 9cf8c9b to a6ce5c6 + +2009-02-24 11:43:41 +0100 Alessandro Decina + + * gst/gstbase.override: + Don't steal a ref to event in gst.BaseTransform.do_src_event. + +2009-02-22 20:39:39 +0000 Jan Schmidt + + * configure.ac: + Use shave for the build output + +2009-02-22 20:08:54 +0100 Edward Hervey + + * gst/gstbus.override: + gstbus.override: Allow using set_sync_handler with None as a parameter + +2009-02-22 20:12:23 +0100 Edward Hervey + + * gst/gstpad.override: + * testsuite/test_pad.py: + GstPad: Use gst_pad_set_blocked_async_full() if available. + Avoids leaking arguments. + Fixes #514717 + +2009-02-22 16:01:49 +0000 Jan Schmidt + + * common: + Automatic update of common submodule + From 5d7c9cc to 9cf8c9b + +2009-02-21 11:14:13 -0800 David Schleef + + * common: + Automatic update of common submodule + From 80c627d to 5d7c9cc + +2009-02-20 18:29:20 +0100 Edward Hervey + + * gst/gstpad.override: + gstpad.override: Take a copy of gst_static_pad_template_get_caps() + This means that we take a completely new caps for the sole usage of + gst-python. The GstCaps return by gst_static_pad_template_get_caps() are + (surprise) static and therefore will always exist... as long as the + GstStaticPadTemplate (and the factory providing it) still exist. + This solves the case of getting the caps of a static pad template *before* + any element was created using the GstElementFactory. When the factory is + used to create an element, a new factory is created, replacing the old one, + and plainly discarding any static values (including those caps). + +2009-02-17 10:48:25 +0100 Edward Hervey + + * plugin/gstpythonplugin.c: + Plugin Loader: Don't register non-gstElement subclasses + +2009-02-20 08:34:38 +0100 Edward Hervey + + * gstltihooks.py: + gstltihooks: Sync with upstream pygobject/ltihooks.py commit. + Apply commit from James Henstridge 2009-02-20 : "I've updated the + license block in pygtk/ltihooks.py to LGPL (not sure why I + didn't just use LGPL like the rest of pygtk)." + Partially fixes #572487 + +2009-02-09 14:02:41 +0100 Edward Hervey + + * plugin/Makefile.am: + plugin/Makefile.am : Remove commented lines + +2009-01-19 08:38:10 +0100 Edward Hervey + + * Makefile.am: + * acinclude.m4: + * configure.ac: + * plugin/Makefile.am: + * plugin/gstpythonplugin.c: + Python plugin loader implementation. + Fixes #304361. + +2009-02-09 13:23:45 +0100 Edward Hervey + + * testsuite/Makefile.am: + Add a rule to generate valgrind suppressions for a single test. + +2009-02-09 13:25:11 +0100 Edward Hervey + + * gst/arg-types.py: + GstMiniObject: Re-increment the C refcount after using a miniobject. + This behaviour is symmetrical to what we do at the very beginning (incrementing + the Python refcount of the wrapper object and decrementing the C refcount of the + actual object). + +2009-02-09 12:04:04 +0100 Edward Hervey + + * common: + Bump revision to use for common submodule. + +2009-01-30 17:41:18 +0000 Jan Schmidt + + * common: + Bump common + +2009-01-30 09:06:31 +0100 Edward Hervey + + * autogen.sh: + Fix previous commit, wasn't actually setting up a symbolic link + +2009-01-30 08:59:21 +0100 Edward Hervey + + * autogen.sh: + * common: + Use a symbolic link for the pre-commit client-side hook + +2009-01-30 08:59:07 +0100 Edward Hervey + + * gst/.gitignore: + Ignore new auto-generated .c files + +2009-01-26 11:11:18 +0200 Stefan Kost + + * examples/cp.py: + Add progress report element to cp example. + +2009-01-23 22:17:21 +0200 Stefan Kost + + * examples/tagsetter.py: + Add an example for using the tagsetter iface. + +2009-01-22 13:50:33 +0100 Sebastian Dröge + + * common: + Fix pre-commit hook + +2009-01-22 12:00:08 +0000 Jan Schmidt + + * configure.ac: + Back to devel -> 0.10.14.1 + +2009-01-22 06:10:50 +0100 Edward Hervey + + * autogen.sh: + * common: + Install and use pre-commit indentation hook from common + +2009-01-21 04:36:02 +0100 Edward Hervey + + * autogen.sh: + autogen.sh : Use git submodule + +=== release 0.10.14 === + +2009-01-19 23:18:26 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.14 + Original commit message from CVS: + Release 0.10.14 + +2009-01-09 23:45:36 +0000 Jan Schmidt + + configure.ac: 0.10.13.3 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.13.3 pre-release + +2009-01-08 12:25:26 +0000 Edward Hervey + + Raise an Exception when wrapping a NULL GstIterator. + Original commit message from CVS: + * gst/pygstiterator.c: (pygst_iterator_new): + * testsuite/test_iterator.py: + Raise an Exception when wrapping a NULL GstIterator. + Fixes #566903 + +2009-01-05 11:05:32 +0000 Vincent GENIEUX + + gst/gststructure.override: Don't leak key names in _wrap_gst_structure_keys. + Original commit message from CVS: + patch by: Vincent GENIEUX + * gst/gststructure.override: + Don't leak key names in _wrap_gst_structure_keys. + +2009-01-02 21:46:30 +0000 Edward Hervey + + gst/: Wrap more GstIndexEntry methods and properties. + Original commit message from CVS: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gst.override: + Wrap more GstIndexEntry methods and properties. + +2008-12-31 13:32:58 +0000 Edward Hervey + + Wrap gst-plugins-base's tag helper library. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/tag.defs: + * gst/tag.override: + * gst/tagmodule.c: (inittag): + Wrap gst-plugins-base's tag helper library. + Partially fixes #565762 + +2008-12-31 13:06:58 +0000 Edward Hervey + + Wrap gst-plugins-base's video helper library. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/video.defs: + * gst/video.override: + * gst/videomodule.c: (initvideo): + Wrap gst-plugins-base's video helper library. + Partially fixes #565762 + +2008-12-31 12:01:02 +0000 Edward Hervey + + Wrap gst-plugins-base's audio helper library. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/audio.defs: + * gst/audio.override: + * gst/audiomodule.c: (initaudio): + Wrap gst-plugins-base's audio helper library. + Partially fixes #565762 + +2008-12-30 19:20:31 +0000 Edward Hervey + + Updated core API additions + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.20.ignore: + * gst/gst-0.10.22.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + Updated core API additions + +2008-12-09 14:30:43 +0000 Alessandro Decina + + gst/__init__.py: Add gst.Fourcc.__eq__ and gst.Fourcc.__ne__. + Original commit message from CVS: + * gst/__init__.py: + Add gst.Fourcc.__eq__ and gst.Fourcc.__ne__. + +2008-12-09 11:48:15 +0000 Edward Hervey + + gst/Makefile.am: Don't forget to dist/install gst-0.10.21.ignore + Original commit message from CVS: + * gst/Makefile.am: + Don't forget to dist/install gst-0.10.21.ignore + +2008-12-09 10:16:08 +0000 Vincent Genieux + + gst/arg-types.py: Fix memory leak for GstMiniObjects used as parameters in class method overrides. + Original commit message from CVS: + Patch by : Vincent Genieux + * gst/arg-types.py: + Fix memory leak for GstMiniObjects used as parameters in class method + overrides. + Fixes #543961 + +2008-12-06 15:52:31 +0000 Edward Hervey + + gst/gstpad.override: Fix memory leak for functions that return a newly created buffer as a function argument. + Original commit message from CVS: + * gst/gstpad.override: + Fix memory leak for functions that return a newly created buffer as + a function argument. + Fixes #554545 + +2008-12-06 15:41:41 +0000 Edward Hervey + + codegen/argtypes.py: Add handling of 'keep-refcount' for GBoxed arguments. + Original commit message from CVS: + * codegen/argtypes.py: + Add handling of 'keep-refcount' for GBoxed arguments. + * gst/gst.defs: + Mark the appropriate 'gst_message_new_*' arguments when the method + takes the ownership of the passed gst.Structure/gst.TagList + * testsuite/test_message.py: + Test for creating messages that take a gst.Structure/gst.TagList as + argument and make sure they're properly created. + Fixes #556054 + +2008-12-06 15:39:01 +0000 Edward Hervey + + testsuite/Makefile.am: Add a way to run individual tests. 'make test_bin.py.check' for example. + Original commit message from CVS: + * testsuite/Makefile.am: + Add a way to run individual tests. + 'make test_bin.py.check' for example. + +2008-12-06 14:13:55 +0000 Edward Hervey + + examples/gst-discover: Beautify output of discoverer's duration. + Original commit message from CVS: + * examples/gst-discover: + Beautify output of discoverer's duration. + +2008-12-06 14:10:51 +0000 Edward Hervey + + testsuite/test_event.py: Sinks now send GST_EVENT_LATENCY events upstream. Adapt test for that new behaviour. + Original commit message from CVS: + * testsuite/test_event.py: + Sinks now send GST_EVENT_LATENCY events upstream. Adapt test for that + new behaviour. + +2008-12-05 08:49:05 +0000 Sebastian Dröge + + Add common to SUBDIRS and generate common/Makefile and common/m4/Makefile. + Original commit message from CVS: + * Makefile.am: + * configure.ac: + Add common to SUBDIRS and generate common/Makefile and + common/m4/Makefile. + +2008-12-04 20:11:53 +0000 Sebastian Dröge + + configure.ac: Apparently AC_CONFIG_MACRO_DIR breaks when using more than one macro directory, reverting last change. + Original commit message from CVS: + * configure.ac: + Apparently AC_CONFIG_MACRO_DIR breaks when using more + than one macro directory, reverting last change. + +2008-12-04 19:50:23 +0000 Sebastian Dröge + + configure.ac: Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to our M4 macros. + Original commit message from CVS: + * configure.ac: + Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to + our M4 macros. + +2008-11-23 12:31:42 +0000 Thomas Vander Stichele + + * common: + * gst/extend/utils.py: + pep-8 cleanups + Original commit message from CVS: + pep-8 cleanups + +2008-11-19 16:54:58 +0000 Alessandro Decina + + Wrap gst_type_find_peek. + Original commit message from CVS: + * gst/gst.override: + * testsuite/test_typefind.py: + Wrap gst_type_find_peek. + +2008-11-08 12:16:31 +0000 Alessandro Decina + + gst/: Add GstBaseTransform::transform_size virtual. + Original commit message from CVS: + * gst/base.defs: + * gst/gstbase.override: + Add GstBaseTransform::transform_size virtual. + +2008-11-08 11:49:30 +0000 Alessandro Decina + + gst/__init__.py: Fix on systems that don't have dlopen or don't support RTLD_GLOBAL and + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/__init__.py: + Fix on systems that don't have dlopen or don't support RTLD_GLOBAL and + RTLD_LAZY. + +2008-11-07 22:29:06 +0000 Jan Schmidt + + gst/gst.override: Fix compiler warning about missing format string. + Original commit message from CVS: + * gst/gst.override: + Fix compiler warning about missing format string. + +2008-10-05 11:36:16 +0000 Jan Schmidt + + configure.ac: Back to development -> 0.10.13.1 + Original commit message from CVS: + * configure.ac: + Back to development -> 0.10.13.1 + +2008-10-05 08:16:38 +0000 Thiemo Seufer + + gst/__init__.py: Use correct values for RTLD_GLOBAL and RTLD_LAZY on Linux/MIPS as the values are different there fro... + Original commit message from CVS: + Patch by: Thiemo Seufer + * gst/__init__.py: + Use correct values for RTLD_GLOBAL and RTLD_LAZY on Linux/MIPS + as the values are different there from all other Linux platforms. + Fixes bug #553134. + +2008-10-05 08:14:42 +0000 Alexander Wirt + + gst/__init__.py: Import modules in the correct order, i.e. libxml2 before + Original commit message from CVS: + Patch by: Alexander Wirt + * gst/__init__.py: + Import modules in the correct order, i.e. libxml2 before + GStreamer stuff, to prevent unresolved symbols. Fixes bug #553131. + +=== release 0.10.13 === + +2008-10-03 00:08:42 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.13 + Original commit message from CVS: + Release 0.10.13 + +2008-09-17 13:37:30 +0000 Jan Schmidt + + configure.ac: 0.10.20.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.20.2 pre-release + +2008-09-09 10:41:27 +0000 Edward Hervey + + Add API additions for upcoming 0.10.21 core release + Original commit message from CVS: + * configure.ac: + * gst/base.defs: + * gst/gst-0.10.21.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + Add API additions for upcoming 0.10.21 core release + +2008-09-04 17:57:50 +0000 Brian Cameron + + examples/pipeline-tester: Don't hardcode audio/video source and sinks, and instead use more generic sources. + Original commit message from CVS: + * examples/pipeline-tester: + Don't hardcode audio/video source and sinks, and instead use more + generic sources. + Based on a patch by Brian Cameron + Fixes #517993 + +2008-08-26 15:58:15 +0000 Edward Hervey + + gst/gstcaps.override: Override gst_caps_append_structure() and make a copy of the structure given as argument. + Original commit message from CVS: + * gst/gstcaps.override: + Override gst_caps_append_structure() and make a copy of the structure + given as argument. + Fixes #549450 + +2008-08-11 16:40:45 +0000 Edward Hervey + + gst/: Add gstdebugutils.[ch] methods that weren't wrapped previously. + Original commit message from CVS: + * gst/gst-0.10.15.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + Add gstdebugutils.[ch] methods that weren't wrapped previously. + We can now dump pipeline graphviz files from python ! :) + +2008-07-02 11:23:39 +0000 Edward Hervey + + update upstream API changes + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/base.defs: + * gst/gst-0.10.18.ignore: + * gst/gst-0.10.20.ignore: + * gst/gst-pb-0.10.18.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/interfaces.defs: + update upstream API changes + +2008-06-27 10:42:38 +0000 Edward Hervey + + testsuite/test_interface.py: Don't hardcode 'alsasrc' for testing GstMixer and GstPropertyProbe interfaces, but inste... + Original commit message from CVS: + * testsuite/test_interface.py: + Don't hardcode 'alsasrc' for testing GstMixer and GstPropertyProbe + interfaces, but instead search one through the registry. + If none are available, return gracefully. + +2008-06-27 10:29:58 +0000 Edward Hervey + + testsuite/test_xml.py: Don't attempt to test gst.XML if there's no available libxml2 module. + Original commit message from CVS: + * testsuite/test_xml.py: + Don't attempt to test gst.XML if there's no available libxml2 module. + +2008-06-27 08:39:37 +0000 Jan Schmidt + + gst/gstbuffer.override: the GstBuffer overrides seem to be confused about whether they're mini-objects or a GBoxed, a... + Original commit message from CVS: + * gst/gstbuffer.override: + the GstBuffer overrides seem to be confused about whether they're + mini-objects or a GBoxed, and it makes copy_on_write no actually + return a usable gst.Buffer. Fix up places where GstBuffers are + treated as GBoxed to use pygstminiobject functions. + Makes gst.Buffer('blah').copy_on_write() work. + * testsuite/test_buffer.py: + Add test for copy-on-write writability + * examples/buffer-draw.py: + Add an example of drawing on a GStreamer buffer with cairo + * gst/gstpad.override: + Make function static + +2008-06-26 14:57:29 +0000 Edward Hervey + + gst/: Fix double-import issues on macosx. + Original commit message from CVS: + * gst/common.h: + * gst/gstmodule.c: + * gst/interfaces.override: + * gst/pbutils.override: + * gst/pygstiterator.c: + * gst/pygstminiobject.c: + * gst/pygstminiobject.h: + Fix double-import issues on macosx. + Fixes #461838 + +2008-06-26 09:14:51 +0000 Edward Hervey + + gst/gstmodule.c: Return None if GstMiniObject GValue doesn't contain anything (NULL). + Original commit message from CVS: + * gst/gstmodule.c: (pygstminiobject_from_gvalue): + Return None if GstMiniObject GValue doesn't contain anything (NULL). + Fixes #540221 + +2008-06-20 08:55:48 +0000 Jan Schmidt + + configure.ac: Bump version back to dev -> 0.10.12.1 + Original commit message from CVS: + * configure.ac: + Bump version back to dev -> 0.10.12.1 + +=== release 0.10.12 === + +2008-06-18 14:50:35 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Release 0.10.12 + Original commit message from CVS: + Release 0.10.12 + +2008-06-13 11:21:27 +0000 Edward Hervey + + configure.ac: 0.10.11.3 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.11.3 pre-release + +2008-06-13 11:11:38 +0000 Edward Hervey + + Re-opens #530417 + Original commit message from CVS: + * gst/__init__.py: + * gst/gstelement.override: + * testsuite/test_element.py: + Revert 2008-05-08 Edward Hervey + Re-opens #530417 + +2008-06-12 11:11:49 +0000 Edward Hervey + + Re-opens #514717 + Original commit message from CVS: + * gst/gstpad.override: + * testsuite/test_pad.py: + Revert 2008-02-10 Alessandro Decina + Re-opens #514717 + +2008-06-05 09:51:17 +0000 Jan Schmidt + + configure.ac: 0.10.11.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.11.2 pre-release + +2008-05-26 10:20:06 +0000 Edward Hervey + + gst/gstevent.override: gst_event_new_tag takes ownership of the GstTagList given as argument, therefore make a copy b... + Original commit message from CVS: + * gst/gstevent.override: + gst_event_new_tag takes ownership of the GstTagList given + as argument, therefore make a copy before calling the + C function. + Fixes #534888 + +2008-05-17 13:13:05 +0000 Edward Hervey + + gst/extend/discoverer.py: Add timeout property. + Original commit message from CVS: + * gst/extend/discoverer.py: + Add timeout property. + Fix typos. + Beautify debugging. + Fix email. + +2008-05-14 16:00:39 +0000 Jan Schmidt + + gst/__init__.py: Make gst.Fraction simplify like the C counterpart + Original commit message from CVS: + Patch by: Jan Schmidt + * gst/__init__.py: + Make gst.Fraction simplify like the C counterpart + Fixes #532809 + +2008-05-14 15:48:18 +0000 Edward Hervey + + gst/gstcaps.override: Fix typo + Original commit message from CVS: + * gst/gstcaps.override: + Fix typo + +2008-05-08 14:06:45 +0000 Johan Dahlin + + New 'fancy' constructor for gst.Element, allows creating elements in a more pythonic way (i.e. myelement = gst.Elemen... + Original commit message from CVS: + Patch by: Johan Dahlin + * gst/__init__.py: + * gst/gstelement.override: + * testsuite/test_element.py: + New 'fancy' constructor for gst.Element, allows creating elements in a + more pythonic way (i.e. myelement = gst.Element("oggmux")). + Fixes #530417 + +2008-05-08 14:03:17 +0000 Edward Hervey + + gst/: Fix broken indentation + Original commit message from CVS: + * gst/__init__.py: + * gst/arg-types.py: + Fix broken indentation + Fixes #531697 + +2008-05-08 10:59:48 +0000 Edward Hervey + + gst/: Use G_GSSIZE_FORMAT for ssize_t types. + Original commit message from CVS: + * gst/gst.override: + * gst/gstbuffer.override: + Use G_GSSIZE_FORMAT for ssize_t types. + Fixes build on macosx. + +2008-05-07 16:05:19 +0000 Christian Schaller + + * common: + * gst-python.spec.in: + update spec file with latest changes + Original commit message from CVS: + update spec file with latest changes + +2008-04-28 10:49:03 +0000 Alessandro Decina + + gst/gst.override: Add wrapping of gst_type_find_register. + Original commit message from CVS: + Patch by: Alessandro Decina + * gst/gst.override: + Add wrapping of gst_type_find_register. + Fixes #529728 + +2008-04-28 10:36:10 +0000 Alessandro Decina + + gst/gstelementfactory.override: Release GIL in gst_element_factory_overrides. + Original commit message from CVS: + Patch by: Alessandro Decina + * gst/gstelementfactory.override: + Release GIL in gst_element_factory_overrides. + Fixes #529731 + +2008-04-24 11:35:38 +0000 Jan Schmidt + + examples/: Sync with the X server before giving an XID to our sink with a different display connection. This avoids s... + Original commit message from CVS: + * examples/play.py: + * examples/remuxer.py: + * examples/switch.py: + * examples/synchronizer.py: + Sync with the X server before giving an XID to our sink with a different + display connection. This avoids spurious X servers where the sink's + display connection doesn't know the XID that the GDK thread's does. + +2008-04-06 08:58:39 +0000 Damien Lespiau + + configure.ac: Actually build dlls when cross-compiling with mingw32. + Original commit message from CVS: + Patch by: Damien Lespiau + * configure.ac: + Actually build dlls when cross-compiling with mingw32. + Fixes bug #526247. + +2008-03-21 00:37:01 +0000 Jan Schmidt + + configure.ac: Back to development - 0.10.11.1 + Original commit message from CVS: + * configure.ac: + Back to development - 0.10.11.1 + +=== release 0.10.11 === + +2008-03-21 00:31:44 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * common: + * configure.ac: + * gst-python.doap: + Release 0.10.11 + Original commit message from CVS: + Release 0.10.11 + +2008-03-04 00:31:22 +0000 Jan Schmidt + + configure.ac: 0.10.10.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.10.2 pre-release + +2008-02-29 12:37:43 +0000 Rene Stadler + + gst/gst.override: Don't crash by unreffing NULL when calling the do_get_protocols_full method raises an exception. + Original commit message from CVS: + * gst/gst.override: + (_wrap_GstURIHandler__proxy_do_get_protocols_full): + Don't crash by unreffing NULL when calling the + do_get_protocols_full method raises an exception. + +2008-02-10 13:33:26 +0000 Edward Hervey + + Fix memleak in gst.Pad.set_blocked_async() + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstpad.override: + * testsuite/test_pad.py: + Fix memleak in gst.Pad.set_blocked_async() + Fixes #514717 + +2008-02-10 13:30:11 +0000 Edward Hervey + + gst/gstpad.override: Wrap gst.Pad.start_task(). + Original commit message from CVS: + * gst/gstpad.override: + Wrap gst.Pad.start_task(). + +2008-02-08 08:37:36 +0000 Edward Hervey + + gst/base.defs: gst_adapter_push steals the refcount. + Original commit message from CVS: + * gst/base.defs: + gst_adapter_push steals the refcount. + +2008-01-31 19:57:26 +0000 Stefan Kost + + examples/video-controller.py: Demo how to use the controller on videomixer. + Original commit message from CVS: + * examples/video-controller.py: + Demo how to use the controller on videomixer. + +2008-01-31 14:14:50 +0000 Jan Schmidt + + gst/.cvsignore: Ignore generated pbutils.c + Original commit message from CVS: + * gst/.cvsignore: + Ignore generated pbutils.c + * gst/gst.override: + Fix compiler warning about the return type. + +2008-01-30 12:36:06 +0000 Edward Hervey + + gst/gstmodule.c: Remove do_pending_calls timeout which has been handled more gracefully in pygobject MainLoop for the... + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + Remove do_pending_calls timeout which has been handled more gracefully + in pygobject MainLoop for the past 3 years. + Fixes #512916 + +2008-01-28 23:37:31 +0000 Jan Schmidt + + configure.ac: Back to CVS + Original commit message from CVS: + * configure.ac: + Back to CVS + +=== release 0.10.10 === + +2008-01-28 23:36:10 +0000 Jan Schmidt + + * ChangeLog: + * NEWS: + * RELEASE: + * common: + * configure.ac: + * gst-python.doap: + Release 0.10.10 + Original commit message from CVS: + Release 0.10.10 + +2008-01-21 21:34:12 +0000 Jan Schmidt + + configure.ac: 0.10.9.4 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.9.4 pre-release + +2008-01-21 21:21:00 +0000 Luca Ferretti + + Makefile.am: Include PYTHON_INCLUDES in the common CFLAGS in the top-level. + Original commit message from CVS: + * Makefile.am: + Include PYTHON_INCLUDES in the common CFLAGS in the top-level. + Fixes: #510437 + Patch By: Luca Ferretti + +2008-01-17 16:35:28 +0000 Edward Hervey + + configure.ac: 0.10.9.3 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.9.3 pre-release + +2008-01-16 16:09:39 +0000 Edward Hervey + + Fix symbol generation for win32. + Original commit message from CVS: + Reviewed by : Edward Hervey + * configure.ac: + * win32/common/config.h.in: + Fix symbol generation for win32. + Fixes #509766 + +2008-01-15 11:41:51 +0000 Jan Schmidt + + gst/pbutils.override: Fix compilation against Python 2.4. + Original commit message from CVS: + * gst/pbutils.override: + Fix compilation against Python 2.4. + Fixes: #509522 + +2008-01-14 18:42:39 +0000 Edward Hervey + + configure.ac: 0.10.9.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.9.2 pre-release + +2008-01-14 12:44:06 +0000 Edward Hervey + + Series of update for new API added to 0.10.16. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/base.defs: + * gst/gst-0.10.15.ignore: + * gst/gst-0.10.16.ignore: + * gst/gst-pb-0.10.15.ignore: + * gst/gst-pb-0.10.16.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + * gst/pbutils.override: + * testsuite/test_pbutils.py: + Series of update for new API added to 0.10.16. + Remove wrong ignore file for 0.10.15 -base. + +2008-01-13 21:51:31 +0000 Edward Hervey + + configure.ac: Bump requirement to core and -base >= 0.10.12 . + Original commit message from CVS: + * configure.ac: + Bump requirement to core and -base >= 0.10.12 . + * gst/Makefile.am: + * gst/gstversion.override.in: + * gst/gst-0.10.10.ignore: + * gst/gst-0.10.11.ignore: + * gst/gst-0.10.12.ignore: + * gst/gst-0.10.3.ignore: + * gst/gst-0.10.4.ignore: + * gst/gst-0.10.5.ignore: + * gst/gst-0.10.6.ignore: + * gst/gst-0.10.7.ignore: + * gst/gst-pb-0.10.11.ignore: + Remove no-longer needed files. + +2008-01-13 21:46:22 +0000 Sébastien Moutte + + win32/vs6/libgstpython.dsp: Setup two different builds, one for Python24 and one for Python25. + Original commit message from CVS: + * win32/vs6/libgstpython.dsp: + Setup two different builds, one for Python24 and one for Python25. + +2008-01-13 17:57:48 +0000 Edward Hervey + + Re-implement wrapping of gst_pad_add_*probe in order to avoid leaks of user-data associated with the probes. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstpad.override: + * testsuite/test_pad.py: + Re-implement wrapping of gst_pad_add_*probe in order to avoid leaks of + user-data associated with the probes. + Fixes #504786 + +2008-01-13 17:24:42 +0000 Edward Hervey + + gst/pbutils.override: Finish wrapping gst.pbutils by adding install_plugins_async() + Original commit message from CVS: + * gst/pbutils.override: + Finish wrapping gst.pbutils by adding install_plugins_async() + +2008-01-11 16:30:45 +0000 Edward Hervey + + gst/Makefile.am: gst.pbutils also needs to handle miniobjects + Original commit message from CVS: + * gst/Makefile.am: + gst.pbutils also needs to handle miniobjects + * gst/pbutils.defs: + Add new InstallPluginsContext boxed definition. + All the *_new() functions should be accessible (and not act as + constructors). + * gst/pbutils.override: + Add override for install_plugins_sync(). + * gst/pbutilsmodule.c: + Add pygst_debug debug category in this module too. + * testsuite/test_pbutils.py: + Test existence of new API. Needs more tests. + +2008-01-10 12:51:21 +0000 Sebastian Dröge + + autogen.sh: Add -Wno-portability to the automake parameters to stop warnings about GNU make extensions being used. We... + Original commit message from CVS: + * autogen.sh: + Add -Wno-portability to the automake parameters to stop warnings + about GNU make extensions being used. We require GNU make in almost + every Makefile anyway. + * configure.ac: + Check for a working C compiler with AC_PROG_CC. + Use AM_PROG_CC_C_O as a compiler that accepts both -c and -o + at the same time is required for per target flags. + +2008-01-01 13:22:21 +0000 Edward Hervey + + gst/: new gst.pbutils module that wraps the gst-plugins-base pbutils helper library. + Original commit message from CVS: + * gst/Makefile.am: + * gst/common.h: + * gst/pbutils.defs: + * gst/pbutils.override: + * gst/pbutilsmodule.c: (initpbutils): + new gst.pbutils module that wraps the gst-plugins-base pbutils + helper library. + * testsuite/Makefile.am: + * testsuite/common.py: + * testsuite/test_pbutils.py: + Test case for gst.pbutils + Fixes #472822 + +2007-12-18 16:48:32 +0000 Andy Wingo + + examples/switch.py: New file, a basic demo for a single-stream switcher. Could be expanded later -- look at flumotion... + Original commit message from CVS: + 2007-12-18 Andy Wingo + * examples/switch.py: New file, a basic demo for a single-stream + switcher. Could be expanded later -- look at + flumotion.component.combiners.switch.switch for some inspiration. + +2007-12-18 09:42:57 +0000 Tim-Philipp Müller + + Makefile.am: Include common/win32.mak for CRLF check of win32 project files (see #393626). + Original commit message from CVS: + * Makefile.am: + Include common/win32.mak for CRLF check of win32 project + files (see #393626). + * win32/vs6/gst_python.dsw: + * win32/vs6/libgstpython.dsp: + * win32/vs6/pygenfiles.dsp: + Fix line endings and do cvs admin -kb. + +2007-11-29 15:02:03 +0000 Sebastian Dröge + + acinclude.m4: Use pythonX.Y-config to detect the include path for the python version and use the old values as fallba... + Original commit message from CVS: + * acinclude.m4: + Use pythonX.Y-config to detect the include path for the python + version and use the old values as fallback if pythonX.Y-config + doesn't exist. + +2007-11-28 09:48:45 +0000 Edward Hervey + + configure.ac: Back to development cycle + Original commit message from CVS: + * configure.ac: + Back to development cycle + +=== release 0.10.9 === + +2007-11-28 09:46:34 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-python.doap: + Releasing 0.10.9 + Original commit message from CVS: + Releasing 0.10.9 + +2007-11-24 18:14:25 +0000 Edward Hervey + + configure.ac: 0.10.8.2 pre-releases + Original commit message from CVS: + * configure.ac: + 0.10.8.2 pre-releases + +2007-11-08 19:56:54 +0000 Edward Hervey + + gst/: Update API changes for core+base pre-releases + Original commit message from CVS: + * gst/base.defs: + * gst/gst-0.10.15.ignore: + * gst/gst.defs: + * gst/gst.override: + * gst/gstmodule.c: (init_gst): + Update API changes for core+base pre-releases + +2007-11-08 10:51:07 +0000 Johan Dahlin + + Add a new module, gstoption which allows you to fetch the + Original commit message from CVS: + 2007-11-05 Johan Dahlin + * gstoptionmodule.c: + * Makefile.am: + * configure.ac: + Add a new module, gstoption which allows you to fetch the + GOptionGroup from gstreamer without initializing and parsing + the command line arguments. Requires PyGObject 2.15.0 + Fixes #425847 + * examples/option-parser.py (main): Example + +2007-11-01 16:39:17 +0000 Johan Dahlin + + gst/: Make sure it still builds with GStreamer 0.10.14. + Original commit message from CVS: + 2007-11-01 Johan Dahlin + * gst/gst.override: + * gst/gst-0.10.15.ignore: + Make sure it still builds with GStreamer 0.10.14. + +2007-10-25 16:18:55 +0000 Alessandro Decina + + gst/gst.*: Patch from Alessandro Decina adding get_type_full and get_protocols_full private vfuncs to the URIHandler ... + Original commit message from CVS: + * gst/gst.defs: + * gst/gst.override: + Patch from Alessandro Decina adding get_type_full and + get_protocols_full private vfuncs to the URIHandler interface + to allow bindings to support creating URI handlers. + Partially fixes: #339279 + +2007-10-18 15:10:44 +0000 Jan Schmidt + + examples/play.py: Fix the sample player slightly so that the expose method actually gets called by pyGTK. + Original commit message from CVS: + * examples/play.py: + Fix the sample player slightly so that the expose method + actually gets called by pyGTK. + +2007-10-18 08:44:43 +0000 Edward Hervey + + gst/gst.*: Thanks to Sebastien Merle for resurrecting a patch I'd forgotten about that adds a constructor method for ... + Original commit message from CVS: + * gst/gst.defs: + * gst/gst.override: + Thanks to Sebastien Merle for resurrecting a patch I'd forgotten about + that adds a constructor method for gst.GError, so you can create + error gst.Message. + Added a few GIL releases for overrides. + +2007-10-16 15:01:59 +0000 Christian Schaller + + * gst-python.spec.in: + update spec file with latest changes + Original commit message from CVS: + update spec file with latest changes + +2007-10-13 16:32:52 +0000 Edward Hervey + + gst/gstobject.override: Release the GIL when calling gst_object_get_path_string() since it can cause deadlocks with n... + Original commit message from CVS: + * gst/gstobject.override: + Release the GIL when calling gst_object_get_path_string() since it can + cause deadlocks with new pygobject behaviour. + +2007-10-13 16:31:35 +0000 Edward Hervey + + gst/gstmodule.c: Added new gst.TAG_COMPOSER constant that appeared in core 0.10.15. + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + Added new gst.TAG_COMPOSER constant that appeared in core 0.10.15. + +2007-10-09 16:17:28 +0000 Edward Hervey + + gst/: Update API definitions for GStreamer core and gst-plugins-base. + Original commit message from CVS: + * gst/base.defs: + * gst/libs.defs: + * gst/gst.defs: + * gst/gst.override: + Update API definitions for GStreamer core and gst-plugins-base. + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.15.ignore: + * gst/gst-pb-0.10.15.ignore: + * gst/gstversion.override.in: + New .ignore for 0.10.14.* API + +2007-10-09 14:27:18 +0000 Edward Hervey + + testsuite/: Fix unit tests for pygobject >= 2.13.0 + Original commit message from CVS: + * testsuite/common.py: + * testsuite/test_bin.py: + * testsuite/test_element.py: + * testsuite/test_ghostpad.py: + * testsuite/test_pad.py: + * testsuite/test_pipeline.py: + Fix unit tests for pygobject >= 2.13.0 + See the pygobject bug #320428 for more information about the changes. + +2007-10-08 22:05:29 +0000 Sébastien Moutte + + win32/vs6/: win32/MANIFEST + Original commit message from CVS: + * win32/vs6/gst_python.dsw: + * win32/vs6/libgstpython.dsp: + * win32/vs6/pygenfiles.dsp: + * win32/MANIFEST + Add new project files to build with VS6. + +2007-10-08 22:04:18 +0000 Sébastien Moutte + + gst/pygstminiobject.c: Move up variable declaration to the top of the function. + Original commit message from CVS: + * gst/pygstminiobject.c: (pygstminiobject_dealloc): + Move up variable declaration to the top of the function. + * win32/vs6/gst_python.dsw: + * win32/vs6/libgstpython.dsp: + * win32/vs6/pygenfiles.dsp: + * win32/MANIFEST + Add new project files to build with VS6. + +2007-09-11 11:49:50 +0000 Andy Wingo + + gst/gstmodule.c (DL_EXPORT): Remove the atexit(gst_deinit). + Original commit message from CVS: + 2007-09-11 Andy Wingo + * gst/gstmodule.c (DL_EXPORT): Remove the atexit(gst_deinit). + Atexit handlers are run after python has finalized (see Py_Exit in + pythonrun.c), but gst_deinit can potentially call back into python + e.g. for python-defined plugins. Not sure how other people are + avoiding this segfault, but I see it all the time on Gusty x86-64 + with Flumotion. + +2007-08-16 12:42:13 +0000 Stefan Kost + + gst/: Make ro memory to share. + Original commit message from CVS: + * ChangeLog: + * gst/pygstminiobject.c: + Make ro memory to share. + +2007-08-01 17:18:05 +0000 Edward Hervey + + configure.ac: Back to development cycle. + Original commit message from CVS: + * configure.ac: + Back to development cycle. + +=== release 0.10.8 === + +2007-08-01 17:14:09 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Releasing 0.10.8 + Original commit message from CVS: + Releasing 0.10.8 + +2007-07-30 16:10:03 +0000 Edward Hervey + + configure.ac: 0.10.7.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.7.2 pre-release + +2007-07-30 11:57:26 +0000 Edward Hervey + + gst/gst.override: And the dataqueue header only landed in 0.10.11 too. + Original commit message from CVS: + * gst/gst.override: + And the dataqueue header only landed in 0.10.11 too. + +2007-07-30 11:39:08 +0000 Edward Hervey + + gst/gst-0.10.11.ignore: GstDataQueue was added in gstreamer-0.10.11 + Original commit message from CVS: + * gst/gst-0.10.11.ignore: + GstDataQueue was added in gstreamer-0.10.11 + * gst/gst-0.10.14.ignore: + some GstDataQueue methods were added in 0.10.14 + +2007-07-28 14:26:54 +0000 Edward Hervey + + gst/: Adding new API additions + Original commit message from CVS: + * gst/base.defs: + * gst/gst.defs: + * gst/interfaces.defs: + * gst/libs.defs: + * gst/gst.override: + * gst/gstmodule.c: (init_gst): + Adding new API additions + * gst/gstmessage.override: + wrap GstMessage.parse_buffering. + * gst/interfaces.override: + wrap gst_mixer_message_parse_*() functions. + wrap GstVideoOrientation::get_*() methods. + +2007-07-28 14:22:49 +0000 Edward Hervey + + Adding version overrides for new core/base releases. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.14.ignore: + * gst/gst-pb-0.10.14.ignore: + * gst/gstversion.override.in: + Adding version overrides for new core/base releases. + +2007-07-28 13:41:22 +0000 Edward Hervey + + gst/interfaces.override: Add more threadsafety in the overrides. + Original commit message from CVS: + * gst/interfaces.override: + Add more threadsafety in the overrides. + +2007-07-27 11:47:16 +0000 Edward Hervey + + Add win32 requirements. + Original commit message from CVS: + * Makefile.am: + * configure.ac: + * win32/MANIFEST: + * win32/common/.cvsignore: + * win32/common/config.h.in: + Add win32 requirements. + Fixes #433375 + +2007-07-27 11:21:31 +0000 Edward Hervey + + gst/gst.defs: Make .get_uri_type() methods return a GstURIType enum instead of an integer. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gst.defs: + Make .get_uri_type() methods return a GstURIType enum instead of an + integer. + Fixes #436620 + +2007-07-27 11:12:33 +0000 Edward Hervey + + gst/extend/discoverer.py: New parameter to the discoverer to change the default maximum frame interleave. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/extend/discoverer.py: + New parameter to the discoverer to change the default maximum frame + interleave. + Fixes #418222 + +2007-07-27 11:04:55 +0000 Edward Hervey + + examples/gst-discover: Show duration of audio/video streams. + Original commit message from CVS: + reviewed by: Edward Hervey + * examples/gst-discover: + Show duration of audio/video streams. + Specify units for values. + Fixes #432521 + +2007-07-20 08:50:18 +0000 Stefan Kost + + gst/gst-disable-loadsave.ignore: Override more when having now xml. + Original commit message from CVS: + * gst/gst-disable-loadsave.ignore: + Override more when having now xml. + +2007-07-09 19:42:31 +0000 Edward Hervey + + gst/gstelement.override: Override the proxy method for GstElement::request_new_pad virtual methods since it can be ca... + Original commit message from CVS: + * gst/gstelement.override: + Override the proxy method for GstElement::request_new_pad virtual + methods since it can be called with NULL as the name. + Fixes #454259 + +2007-07-09 19:30:26 +0000 Zaheer Abbas Merali + + gst/gstevent.override: Copy the GstStructure given as argument to gst_event_new_custom and gst_event_new_navigation, ... + Original commit message from CVS: + Patch by: Zaheer Abbas Merali + * gst/gstevent.override: + Copy the GstStructure given as argument to gst_event_new_custom + and gst_event_new_navigation, else it would be freed when the python + object wrapping that structure goes out of scope. + Fixes #450117 + +2007-07-05 13:57:41 +0000 Rene Stadler + + gst/: Handle 'gchar**' (GStrv) arguments in a uniform way. + Original commit message from CVS: + Patch by: Rene Stadler + * gst/arg-types.py: + * gst/gst.defs: + * gst/gst.override: + Handle 'gchar**' (GStrv) arguments in a uniform way. + Fixes #385841 + +2007-06-27 15:40:12 +0000 Edward Hervey + + gst/gstbuffer.override: whoapadoooo wabada bada ... + Original commit message from CVS: + * gst/gstbuffer.override: + whoapadoooo wabada bada ... + nothing here... :) + Fixes #451645 + +2007-06-16 12:08:45 +0000 Edward Hervey + + gst/extend/: Fixes for thread-safety, changes in behaviour with gst.Pad and cleanup. Still has some issues. + Original commit message from CVS: + * gst/extend/jukebox.py: + * gst/extend/sources.py: + Fixes for thread-safety, changes in behaviour with gst.Pad and + cleanup. Still has some issues. + +2007-06-14 14:53:28 +0000 Edward Hervey + + gst/__init__.py: Cleaner way of checking for existence of symbols in gst module. + Original commit message from CVS: + * gst/__init__.py: + Cleaner way of checking for existence of symbols in gst module. + +2007-06-14 14:14:12 +0000 Jan Schmidt + + examples/sinkelement-registry.py: A quick modification of the sinkelement.py example that shows how to register a pur... + Original commit message from CVS: + * examples/sinkelement-registry.py: + A quick modification of the sinkelement.py example that + shows how to register a pure-python gst.Element into the + registry for use in autoplugging or parse_launch lines. + +2007-06-12 19:01:25 +0000 Edward Hervey + + gst/__init__.py: Fix API cleanups that cause API breakage. + Original commit message from CVS: + * gst/__init__.py: + Fix API cleanups that cause API breakage. + Fixes #446674 + +2007-06-11 22:00:20 +0000 Jan Schmidt + + gst/gstpad.override: Wrap gst_pad_set_blocked_async in pyg thread unlock/lock. + Original commit message from CVS: + * gst/gstpad.override: + Wrap gst_pad_set_blocked_async in pyg thread unlock/lock. + +2007-06-08 16:16:34 +0000 Michael Smith + + gst/extend/discoverer.py: Better support for demuxers that don't create all pads at startup. + Original commit message from CVS: + Patch by : Michael Smith + * gst/extend/discoverer.py: + Better support for demuxers that don't create all pads at startup. + Fixes #380966 + +2007-06-08 16:06:10 +0000 Edward Hervey + + gst/gst-0.10.12.ignore: Add more API additions that weren't explicit in the release notes. + Original commit message from CVS: + * gst/gst-0.10.12.ignore: + Add more API additions that weren't explicit in the release notes. + * gst/gst-0.10.13.ignore: + Personal note : remember to save file before commiting it. + +2007-06-08 15:16:08 +0000 Edward Hervey + + Updating ignores for API additions + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.12.ignore: + * gst/gst-0.10.13.ignore: + * gst/gstversion.override.in: + Updating ignores for API additions + * gst/base.defs: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/interfaces.defs: + * gst/libs.defs: + Massive wrapping of new API additions + * gst/gstbase.override: + * gst/gstevent.override: + * gst/gstmessage.override: + * gst/gstquery.override: + Overrides for methods with return values as arguments. + * gst/xwindowlistener.defs: + What the $#@# is this file still doing here ?? Removing it. + +2007-05-23 09:49:07 +0000 Edward Hervey + + Example of how to properly ignore methods that aren't available if some feature is disabled in GStreamer core. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-disable-loadsave.ignore: + * gst/gstversion.override.in: + Example of how to properly ignore methods that aren't available if + some feature is disabled in GStreamer core. + +2007-04-23 14:42:25 +0000 Stefan Kost + + configure.ac: Add example for the new AG_GST_PARSE_SUBSYSTEM_DISABLE macro. + Original commit message from CVS: + * configure.ac: + Add example for the new AG_GST_PARSE_SUBSYSTEM_DISABLE macro. + +2007-04-19 15:43:16 +0000 Edward Hervey + + gst/gstbin.override: Release the GIL in GstBin overrides. + Original commit message from CVS: + * gst/gstbin.override: + Release the GIL in GstBin overrides. + +2007-04-13 11:26:43 +0000 Jan Schmidt + + gst/gstelement.override: Release the python lock when performing GStreamer calls that might result in callbacks into ... + Original commit message from CVS: + * gst/gstelement.override: + Release the python lock when performing GStreamer calls that might + result in callbacks into python. + +2007-04-11 09:33:37 +0000 Jan Schmidt + + gst/gstbase.override: Unroll the GIL state in an error case where it was missing. + Original commit message from CVS: + * gst/gstbase.override: + Unroll the GIL state in an error case where it was missing. + +2007-04-11 09:22:15 +0000 Jan Schmidt + + gst/gstpad.override: Release the GIL lock while executing queries in GStreamer. + Original commit message from CVS: + * gst/gstpad.override: + Release the GIL lock while executing queries in GStreamer. + +2007-04-10 18:01:25 +0000 Jan Schmidt + + Implement pad query proxying so that python elements can answer pad queries. Fixes: #428299 + Original commit message from CVS: + * examples/pyidentity.py: + * gst/common.h: + * gst/gstpad.override: + Implement pad query proxying so that python elements can + answer pad queries. Fixes: #428299 + +2007-04-10 12:44:44 +0000 Jan Schmidt + + examples/pyidentity.py: Add a simple example that implements an identity-like element in python and passes buffers th... + Original commit message from CVS: + * examples/pyidentity.py: + Add a simple example that implements an identity-like element in + python and passes buffers through. It lacks buffer-alloc & query + handling at the moment, because the required gstreamer funcs aren't + wrapped. + * examples/sinkelement.py: + Make sure to call gobject.threads_init() in the example. + +2007-04-04 12:57:32 +0000 Edward Hervey + + codegen/codegen.py: Also ignore pointers and boxed if they're in ignore-type. + Original commit message from CVS: + * codegen/codegen.py: + Also ignore pointers and boxed if they're in ignore-type. + * gst/gst-0.10.7.ignore: + Add gst_type_find_factory_call_function to functions ignored before + 0.10.7 since it requires GstTypeFind arguments. + +2007-04-04 12:27:03 +0000 Jan Schmidt + + * ChangeLog: + Changelog surgery: Attribute the previous release to Monsieur Hervey + Original commit message from CVS: + Changelog surgery: Attribute the previous release to Monsieur Hervey + +2007-04-04 12:22:03 +0000 Jan Schmidt + + gst/: Fix the build for x86_64 when compiling against Python 2.5. + Original commit message from CVS: + * gst/common.h: + * gst/gst.override: + * gst/gstbuffer.override: + * gst/gstcaps.override: + * gst/gststructure.override: + * gst/gsttaglist.override: + * gst/interfaces.override: + Fix the build for x86_64 when compiling against Python 2.5. + Keeps backwards compatibility with Python 2.4. Tested on Ubuntu + Edgy 32-bit with python 2.4 & Feisty 64-bit with Python 2.4 & 2.5 + Fixes #415003. + +2007-03-25 19:02:23 +0000 Tim-Philipp Müller + + gst/interfaces.defs: GstTunerChannel and GstTunerNorm are not GstObjects, only GObjects. + Original commit message from CVS: + * gst/interfaces.defs: + GstTunerChannel and GstTunerNorm are not GstObjects, only GObjects. + +2007-03-19 01:21:12 +0000 Johan Dahlin + + gst/: Make it compilable on Python 2.4 and Python 2.5 + Original commit message from CVS: + * gst/common.h: + * gst/gsttaglist.override: + Make it compilable on Python 2.4 and Python 2.5 + +2007-03-18 17:45:16 +0000 Johan Dahlin + + gst/__init__.py: Implement multiplication, divison and float coercing for fractions. + Original commit message from CVS: + * gst/__init__.py: Implement multiplication, divison and float + coercing for fractions. + * testsuite/test_fraction.py: + Add fraction tests + +2007-03-17 13:36:48 +0000 Johan Dahlin + + Implement sq_contains and add tests for gst.TagList. + Original commit message from CVS: + * gst/gsttaglist.override (_wrap_gst_tag_list_contains): + * testsuite/test_taglist.py (TestTagList.testKeys): + Implement sq_contains and add tests for gst.TagList. + +2007-03-02 11:03:46 +0000 Edward Hervey + + gst/__init__.py: Import libxml2 (if available) at import time with GLOBAL and LAZY flags. + Original commit message from CVS: + * gst/__init__.py: + Import libxml2 (if available) at import time with GLOBAL and LAZY flags. + Fixes #398567 + +2007-03-01 14:21:52 +0000 Edward Hervey + + gst/__init__.py: Added __eq__ method to fractions so we can check if two fractions are equal. + Original commit message from CVS: + * gst/__init__.py: + Added __eq__ method to fractions so we can check if two fractions are + equal. + * gst/pygstvalue.c: (my_gcd), (pygst_value_from_pyobject): + Attempt to simplify gst.Fraction before filling in a GValue. + Fixes #381243 + * testsuite/test_caps.py: + * testsuite/test_struct.py: + Minor beauty fixes. framerates are fractions, not floats. + +2007-03-01 13:47:12 +0000 Edward Hervey + + gst/interfacesmodule.c: initialize pygobject in the gst.interfaces modules. The absence of it causes segfaults on Sol... + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/interfacesmodule.c: (initinterfaces): + initialize pygobject in the gst.interfaces modules. The absence of it + causes segfaults on Solaris and MIPS machines. + Fixes #343980 + +2007-02-28 22:09:33 +0000 Thomas Vander Stichele + + * common: + * configure.ac: + trigger rebuild + Original commit message from CVS: + trigger rebuild + +2007-02-27 10:44:21 +0000 Michael Smith + + gst/base.defs: Limitations in the code generator mean that we can't handle PushSrc in a way which works, so just comm... + Original commit message from CVS: + * gst/base.defs: + Limitations in the code generator mean that we can't handle PushSrc + in a way which works, so just comment this out until someone wants + to tackle this more completely. + +2007-02-25 12:11:34 +0000 Michael Smith + + gst/pygstvalue.c: Make buffers-in-gvalues more generic: handle all miniobjects + Original commit message from CVS: + * gst/pygstvalue.c: (pygst_value_init_for_pyobject), + (pygst_value_from_pyobject): + Make buffers-in-gvalues more generic: handle all miniobjects + * testsuite/test_caps.py: + Add a bit to one the test for buffers in caps. + +2007-02-24 14:14:14 +0000 Michael Smith + + testsuite/test_caps.py: Add test for gst.Buffer in caps. + Original commit message from CVS: + * testsuite/test_caps.py: + Add test for gst.Buffer in caps. + +2007-02-22 16:13:53 +0000 Michael Smith + + gst/pygstvalue.c: Implement gst.Buffer support in GValues (e.g. for caps containing buffers) + Original commit message from CVS: + * gst/pygstvalue.c: (pygst_value_as_pyobject), + (pygst_value_init_for_pyobject), (pygst_value_from_pyobject): + Implement gst.Buffer support in GValues (e.g. for caps containing + buffers) + +2007-02-16 02:39:56 +0000 David Schleef + + Makefile.am: Add ACLOCAL_AMFLAGS + Original commit message from CVS: + * Makefile.am: Add ACLOCAL_AMFLAGS + +2007-02-04 11:40:09 +0000 Edward Hervey + + testsuite/common.py: A private variable of unittest.TestCase changed name in python 2.5. + Original commit message from CVS: + * testsuite/common.py: + A private variable of unittest.TestCase changed name in python 2.5. + This fixes make check with python2.5 + +2007-02-04 10:54:48 +0000 Edward Hervey + + gst/gstpad.override: Allow removing the negotiated pads of a cap by setting them to None. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstpad.override: + Allow removing the negotiated pads of a cap by setting them to None. + * testsuite/test_pad.py: + Added un-negotian of pads' caps to test above patch. + Fixes #363795 + +2007-02-04 10:44:40 +0000 Edward Hervey + + gst/interfaces.override: Gracefully handle the case where gst_property_probe_get_values_name() returns NULL. + Original commit message from CVS: + * gst/interfaces.override: + Gracefully handle the case where gst_property_probe_get_values_name() + returns NULL. + +2007-02-04 10:23:38 +0000 Edward Hervey + + Fully implement GstPropertyProbe interface, with unit test. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/interfaces.defs: + * gst/interfaces.override: + * testsuite/test_interface.py: + Fully implement GstPropertyProbe interface, with unit test. + Fixes #376996 + +2007-01-31 16:53:15 +0000 Edward Hervey + + configure.ac: Back to development cycle. + Original commit message from CVS: + * configure.ac: + Back to development cycle. + +=== release 0.10.7 === + +2007-01-31 16:51:37 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + Releasing 0.10.7 + Original commit message from CVS: + Releasing 0.10.7 + +2007-01-29 12:27:46 +0000 Edward Hervey + + codegen/codegen.py: Don't register interface if it is ignored + Original commit message from CVS: + * codegen/codegen.py: + Don't register interface if it is ignored + * configure.ac: + GST_PB_MINOR_VERSION doesn't appear by magic, you actually have to + parse it from pkg-config ! + * gst/gst-pb-0.10.11.ignore: + Ignore GstVideoOrientation type altogether. + * gst/interfaces.override: + Include gstversion.override so that non-existent API is properly ignored. + Should fix #401051 once and for good now. + +2007-01-29 11:17:45 +0000 Edward Hervey + + * ChangeLog: + ChangeLog surgery : Indicate which bug last ocmmit fixed. + Original commit message from CVS: + ChangeLog surgery : Indicate which bug last ocmmit fixed. + ---------------------------------------------------------------------- + +2007-01-29 11:16:35 +0000 Edward Hervey + + configure.ac: Check for availability of video-orientation interface + Original commit message from CVS: + * configure.ac: + Check for availability of video-orientation interface + * gst/gst.override: + don't forget to increment the refcount of Py_None before returning it. + * gst/interfaces.override: + If video-orientation interface isn't available, don't include the + header. + +2007-01-26 11:58:55 +0000 Edward Hervey + + Add ignore file for 0.10.12 API additions + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gstversion.override.in: + * gst/gst-0.10.12.ignore: + Add ignore file for 0.10.12 API additions + * gst/gst.defs: + * gst/base.defs: + * gst/gst-types.defs: + Add new API definitions + * gst/gst-0.10.10.ignore: + * gst/gst-0.10.11.ignore: + Fixup ignore files. + * testsuite/test_segment.py: + The update return value is uncertain and will soon be deprecated, don't + check against it anymore. + +2007-01-17 11:22:04 +0000 Thomas Vander Stichele + + wrap mixer set_volume, use tuple to match get_volume + Original commit message from CVS: + * examples/mixer.py: + * gst/interfaces.override: + wrap mixer set_volume, use tuple to match get_volume + +2007-01-17 07:30:11 +0000 Thomas Vander Stichele + + gst/pygstexception.*: gst.element_factory_make should raise ElementNotFoundError. + Original commit message from CVS: + * gst/pygstexception.c: (element_not_found_error_init), + (pygst_exceptions_register_classes): + * gst/pygstexception.h: + gst.element_factory_make should raise ElementNotFoundError. + Subclass it from PluginNotFoundError so we can add it compatibly + and remove the wrong one later. + * gst/gstelementfactory.override: + raise ElementNotFoundError + +2007-01-17 06:27:38 +0000 Thomas Vander Stichele + + gst/interfaces.*: wrap mixer get_volume + Original commit message from CVS: + * gst/interfaces.defs: + * gst/interfaces.override: + wrap mixer get_volume + * examples/Makefile.am: + * examples/mixer.py: + add an example using it + +2007-01-17 06:27:12 +0000 Thomas Vander Stichele + + * gst/gst-pb-0.10.11.ignore: + add pb ignore file + Original commit message from CVS: + add pb ignore file + +2007-01-17 06:15:33 +0000 Thomas Vander Stichele + + configure.ac: fix use of PKG_CHECK_MODULES check for a pygobject of at least 2.11 for a value_from_pyobject fix + Original commit message from CVS: + * configure.ac: + fix use of PKG_CHECK_MODULES + check for a pygobject of at least 2.11 for a value_from_pyobject fix + * gst/gstobject.override: + use it + +2007-01-17 05:02:01 +0000 Thomas Vander Stichele + + gst/extend/discoverer.py: this is a module, not a program, so don't require versions + Original commit message from CVS: + * gst/extend/discoverer.py: + this is a module, not a program, so don't require versions + +2007-01-17 04:40:33 +0000 Thomas Vander Stichele + + configure.ac: check for stuff added in gst-pb 0.10.11 + Original commit message from CVS: + * configure.ac: + check for stuff added in gst-pb 0.10.11 + * gst/Makefile.am: + * gst/interfaces.defs: + * gst/interfaces.override: + add video orientation interface + +2007-01-11 17:45:46 +0000 Edward Hervey + + gst/gst.defs: Add declaration of gst_object_set_property so we can use our MT-safe version of set_property(). + Original commit message from CVS: + * gst/gst.defs: + Add declaration of gst_object_set_property so we can use our MT-safe + version of set_property(). + * gst/gstobject.override: + Implement a MT-safe version of g_object_set_property for GstObject. + The problem is that currently g_object_set_property is called in + pygobject with the GIL lock taken. This can cause deadlocks. + Remove this hack once bug #395048 is fixed in pygobject and we depend on + the fixed version. + Thanks to Lord Wingo of the "realm.py haters club" for proposing the + idea. + +2007-01-10 16:13:29 +0000 Edward Hervey + + codegen/codegen.py: When chaining up to the parent class methods from python to C, we need to allow threads (i.e. rel... + Original commit message from CVS: + * codegen/codegen.py: + When chaining up to the parent class methods from python to C, we need + to allow threads (i.e. release the GIL). + * gst/gstbase.override: + * gst/gstbin.override: + Modify __do_*() overrides in the same way as above. + +2007-01-05 10:48:36 +0000 Thomas Vander Stichele + + gst/extend/discoverer.py: No shebang line needed since there is no main code. + Original commit message from CVS: + * gst/extend/discoverer.py: + No shebang line needed since there is no main code. + +2006-12-19 11:38:01 +0000 Edward Hervey + + gst/gst.defs: Update API definitions. + Original commit message from CVS: + * gst/gst.defs: + Update API definitions. + * gst/common.h: + * gst/gstpad.override: + Add wrapper functions for settings activate, activatepull and + activatepush functions on pads. + * gst/gst.override: + Wrapper for gst_segment_set_seek() and gst_segment_clip() + Remove global ignore for *_init(), allows gst_segment_init() to be + properly code-generated. + * testsuite/Makefile.am: + * testsuite/test_segment.py: + Add unit test for gst.Segment object. + +2006-12-16 15:33:02 +0000 Edward Hervey + + testsuite/test_pad.py: Activate pads before using them. + Original commit message from CVS: + * testsuite/test_pad.py: + Activate pads before using them. + +2006-12-16 15:16:33 +0000 Edward Hervey + + RELEASE: Commit 0.10.6 RELEASE file. Better late than never :( + Original commit message from CVS: + * RELEASE: + Commit 0.10.6 RELEASE file. Better late than never :( + +2006-12-16 14:41:21 +0000 Edward Hervey + + Move GstIterator ArgType definition and usage for the codegenerator to gst/arg-types.py. It has nothing to do in the ... + Original commit message from CVS: + * codegen/argtypes.py: + * gst/arg-types.py: + Move GstIterator ArgType definition and usage for the codegenerator + to gst/arg-types.py. It has nothing to do in the codegenerator code. + +2006-12-15 17:02:31 +0000 Thomas Vander Stichele + + add doap file + Original commit message from CVS: + * Makefile.am: + * gst-python.doap: + * gst-python.spec.in: + add doap file + +2006-12-11 09:58:51 +0000 Tim-Philipp Müller + + gst/interfaces.defs: GstColorBalanceChannel is a GObject, not a GstObject. Fixes #383805. + Original commit message from CVS: + * gst/interfaces.defs: + GstColorBalanceChannel is a GObject, not a GstObject. Fixes #383805. + +2006-12-04 19:54:19 +0000 Edward Hervey + + * ChangeLog: + changelog surgery, remove the conflict that has been there for 7 month + Original commit message from CVS: + changelog surgery, remove the conflict that has been there for 7 month + +2006-12-04 17:54:39 +0000 Edward Hervey + + configure.ac: Back to development cycle + Original commit message from CVS: + * configure.ac: + Back to development cycle + +=== release 0.10.6 === + +2006-12-04 17:19:44 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + * configure.ac: + Releasing gst-python 0.10.6 + Original commit message from CVS: + Releasing gst-python 0.10.6 + +2006-12-04 16:41:12 +0000 Edward Hervey + + configure.ac: 0.10.5.4 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.5.4 pre-release + +2006-12-01 17:41:28 +0000 Edward Hervey + + gst/: Add implementation of gst.Pad.set_setcaps_function(). + Original commit message from CVS: + * gst/common.h: + * gst/gstpad.override: + Add implementation of gst.Pad.set_setcaps_function(). + +2006-11-28 15:36:50 +0000 Edward Hervey + + configure.ac: 0.10.5.3 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.5.3 pre-release + +2006-11-22 17:31:02 +0000 Edward Hervey + + examples/audio-controller.py: Fix example, use proper property name. Doesn't change anything to the way it used to wo... + Original commit message from CVS: + * examples/audio-controller.py: + Fix example, use proper property name. Doesn't change anything to the + way it used to work, but since it's an example it should be done + properly. + +2006-11-22 17:20:21 +0000 Edward Hervey + + codegen/override.py: Fix the lookup of override files in the specified search directories. + Original commit message from CVS: + * codegen/override.py: + Fix the lookup of override files in the specified search directories. + * gst/Makefile.am: + Don't distribute gstversion.override + Fixup .defs => .c make instructions + All the above fixes the cases where you're building in a directory + different from the source directory. + +2006-11-20 11:26:46 +0000 Christian Schaller + + * gst-python.spec.in: + Update spec file for latest changes + Original commit message from CVS: + Update spec file for latest changes + +2006-11-15 14:36:39 +0000 Michael Smith + + gst/extend/discoverer.py: Avoid buffering infinite amounts of decoded data if a decoder is feeding us data without a ... + Original commit message from CVS: + * gst/extend/discoverer.py: + Avoid buffering infinite amounts of decoded data if a decoder is + feeding us data without a duration (or with bad duration values). + +2006-11-07 12:24:13 +0000 Edward Hervey + + gst/extend/discoverer.py: Make the queue buffer up 1s of data before outputting to the sinks. This should give time f... + Original commit message from CVS: + * gst/extend/discoverer.py: Make the queue buffer up 1s of data before + outputting to the sinks. This should give time for some demuxers like + mpegdemux or fluasfdemux to discover a bit more about the muxed + stream and add the correct pads. + Fixes #371969 + +2006-11-07 11:47:26 +0000 Andy Wingo + + examples/: New tool, runs the discoverer on a file and prints out what we get. + Original commit message from CVS: + 2006-11-07 Andy Wingo + * examples/Makefile.am (examples_DATA): + * examples/gst-discover: New tool, runs the discoverer on a file + and prints out what we get. + +2006-11-03 15:54:47 +0000 Edward Hervey + + gst/gst.override: Use a copy of the caps. + Original commit message from CVS: + * gst/gst.override: + Use a copy of the caps. + +2006-10-20 11:51:35 +0000 Edward Hervey + + configure.ac: 0.10.5.2 pre-release + Original commit message from CVS: + * configure.ac: + 0.10.5.2 pre-release + +2006-10-20 11:33:01 +0000 Edward Hervey + + gst/gst-0.10.10.ignore: Added symbols added in 0.10.10 + Original commit message from CVS: + * gst/gst-0.10.10.ignore: + Added symbols added in 0.10.10 + * gst/gst-0.10.6.ignore: + gst_dp_packetizer_new() addition + * gst/gst.defs: + Updated API for 0.10.10 symbols + * gst/gstmodule.c: (init_gst): + Added GST_TAG_EXTENDED_COMMENT which appeared in 0.10.10 + * gst/libs.defs: + Added gst_dp_packetizer_new() which was added in 0.10.6. It still won't + work because GstDPPacketizer is a pointer. It needs to have a GBoxed + definition in order to be used properly within gst-python. + Also added controller-related additions + +2006-10-20 10:41:46 +0000 Edward Hervey + + Added ignore files for 0.10.11 gstreamer core + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.11.ignore: + * gst/gstversion.override.in: + Added ignore files for 0.10.11 gstreamer core + * gst/base.defs: + Updated API for base libs + * gst/gst.defs: + Updated API for core + * gst/gst.override: + remove #ifdef for methods which weren't available in versions of pygtk + we don't support anymore. + * gst/gstbase.override: + Added overrides for GstBaseSink::get_times() virtual method + * gst/gstbin.override: + Added override for GstBin::handle_message() virtual method + +2006-10-20 09:51:25 +0000 Edward Hervey + + examples/Makefile.am: Remove gst123 and vorbisplay.py from sources, and add decodebin.py + Original commit message from CVS: + * examples/Makefile.am: + Remove gst123 and vorbisplay.py from sources, and add decodebin.py + +2006-10-20 09:47:16 +0000 Edward Hervey + + examples/: Removed gst123 and vorbisplay examples which weren't working with 0.10, and replaced them with decodebin.py + Original commit message from CVS: + reviewed by: Edward Hervey + * examples/decodebin.py: + * examples/gst123: + * examples/vorbisplay.py: + Removed gst123 and vorbisplay examples which weren't working with + 0.10, and replaced them with decodebin.py + Closes #362183 and #362202 + +2006-10-20 09:27:43 +0000 Edward Hervey + + examples/: Closes #362290 and #362272 + Original commit message from CVS: + * examples/audioconcat.py: + * examples/cp.py: + Port to 0.10 by Jason Gerard DeRose + Closes #362290 and #362272 + * examples/bps.py: + Indentation fixes by Jason Gerard DeRose + Closes #362011 + Also small fix for Usage string + +2006-10-16 14:46:19 +0000 Tim-Philipp Müller + + gst/gst.defs: Don't use 'interface' as variable name, MingW doesn't like that (fixes #359375). + Original commit message from CVS: + * gst/gst.defs: + Don't use 'interface' as variable name, MingW doesn't like that + (fixes #359375). + +2006-10-12 19:02:41 +0000 Thomas Vander Stichele + + * common: + * gst/extend/.gitignore: + moap ignore + Original commit message from CVS: + moap ignore + +2006-10-05 18:27:58 +0000 Tim-Philipp Müller + + gst/pygstiterator.c: Printf format fix. + Original commit message from CVS: + * gst/pygstiterator.c: (pygst_iterator_new): + Printf format fix. + +2006-10-03 09:24:11 +0000 Edward Hervey + + codegen/argtypes.py: Revert the UInt64Arg modifications from upstream. It forces us to give a PyLong, whereas we can ... + Original commit message from CVS: + * codegen/argtypes.py: + Revert the UInt64Arg modifications from upstream. It forces us to give + a PyLong, whereas we can directly use the 'K' argument parsing for that. + +2006-09-29 09:53:11 +0000 Edward Hervey + + ltihooks.py: Removed + Original commit message from CVS: + * ltihooks.py: + Removed + * testsuite/common.py: + ltihooks is dead, long live gstltihooks. This should complete thomas' + fix of #357310. + +2006-09-28 10:03:22 +0000 Jan Schmidt + + gst/Makefile.am: Explicitly export _PyGObject_API from our modules, as it's apparently needed for import. Previously ... + Original commit message from CVS: + * gst/Makefile.am: + Explicitly export _PyGObject_API from our modules, as it's apparently + needed for import. Previously we implicitly relied on a bug in the + core providing --export-dynamic as a link flag. + +2006-09-23 10:43:18 +0000 Thomas Vander Stichele + + Fix #357310 + Original commit message from CVS: + * Makefile.am: + * gst/__init__.py: + * gstltihooks.py: + Fix #357310 + +2006-09-22 13:21:59 +0000 Rene Stadler + + gst/gstlibs.override: Fixes for GstController creation memleak fixes. + Original commit message from CVS: + Patch by: Rene Stadler + * gst/gstlibs.override: + Fixes for GstController creation + memleak fixes. + +2006-09-12 11:16:08 +0000 Edward Hervey + + gst/extend/Makefile.am: Forgot to add 3 previous files to the Makefile so they get installed. + Original commit message from CVS: + * gst/extend/Makefile.am: + Forgot to add 3 previous files to the Makefile so they get + installed. + +2006-09-12 11:14:24 +0000 Edward Hervey + + gst/extend/: Revival of the jukebox (and leveller) using 0.10 and gnonlin. + Original commit message from CVS: + * gst/extend/jukebox.py: + * gst/extend/leveller.py: + * gst/extend/sources.py: + Revival of the jukebox (and leveller) using 0.10 and gnonlin. + Still needs a bit of love, but functionnal enough. + +2006-09-10 08:56:22 +0000 Edward Hervey + + * ChangeLog: + Give proper credits to the author of the patch + Original commit message from CVS: + Give proper credits to the author of the patch + +2006-09-10 08:53:26 +0000 Edward Hervey + + gst/libs.defs: Add definition for GstParamFlags, extension of the GParamFlags. + Original commit message from CVS: + * gst/libs.defs: + Add definition for GstParamFlags, extension of the GParamFlags. + Only contains one flag, gst.PARAM_CONTROLLABLE. + Closes #355150 + +2006-08-31 14:03:44 +0000 Edward Hervey + + gst/gst-0.10.10.ignore: API addition + Original commit message from CVS: + * gst/gst-0.10.10.ignore: + API addition + * gst/gst.defs: + Added new ghostpad functions. + +2006-08-29 10:05:40 +0000 Edward Hervey + + gst/gst.override: We don't own a reference on the elements contained in the list returned by gst_xml_get_topelements(). + Original commit message from CVS: + * gst/gst.override: + We don't own a reference on the elements contained in the list + returned by gst_xml_get_topelements(). + +2006-08-29 09:23:59 +0000 Edward Hervey + + testsuite/test_pad.py: The bug was not a bug. Fixed the typo. + Original commit message from CVS: + * testsuite/test_pad.py: + The bug was not a bug. Fixed the typo. + +2006-08-29 07:43:42 +0000 Thomas Vander Stichele + + testsuite/test_pad.py: add a test for event probes - shows a bug, for which I commented the failUnless out + Original commit message from CVS: + * testsuite/test_pad.py: + add a test for event probes - shows a bug, for which I commented + the failUnless out + +2006-08-21 12:55:37 +0000 Edward Hervey + + configure.ac: Whoops, typo error :) + Original commit message from CVS: + * configure.ac: + Whoops, typo error :) + +2006-08-21 11:43:01 +0000 Edward Hervey + + configure.ac: attempt to fix build. + Original commit message from CVS: + * configure.ac: + attempt to fix build. + +2006-08-21 11:31:51 +0000 Edward Hervey + + configure.ac: If pygobject is available, only build with it, else try to find pygtk to stay compatible with older ver... + Original commit message from CVS: + * configure.ac: + If pygobject is available, only build with it, else try to find pygtk + to stay compatible with older version. + * gst/Makefile.am: + Switch to pygobject CFLAGS. + * testsuite/Makefile.am: + Switch to pygobject CFLAGS. + +2006-08-08 19:21:51 +0000 Edward Hervey + + codegen/codegen.py: newer pygobject's pyg_constant_strip_prefix() now return a const gchar * whereas PyModule_AddIntC... + Original commit message from CVS: + * codegen/codegen.py: + newer pygobject's pyg_constant_strip_prefix() now return a const gchar * + whereas PyModule_AddIntConstant() takes a normal gchar*. + Closes #349623 + +2006-08-05 17:15:52 +0000 Andy Wingo + + examples/synchronizer.py: Actually appears to work now, will have to try with guadec videos on Monday. + Original commit message from CVS: + 2006-08-05 Andy Wingo + * examples/synchronizer.py: Actually appears to work now, will + have to try with guadec videos on Monday. + * examples/remuxer.py (PlayerWindow.create_ui): Disable the + auto-adjusting of cut in and cut out times, it's annoying. + +2006-08-04 17:04:27 +0000 Andy Wingo + + * examples/synchronizer.py: + small updates, still ui only + Original commit message from CVS: + small updates, still ui only + +2006-08-04 16:42:15 +0000 Andy Wingo + + examples/synchronizer.py: New file, a bit of a hack to remuxer.py, but for resyncing a bad ogg. Only UI at the moment.. + Original commit message from CVS: + 2006-08-04 Andy Wingo + * examples/synchronizer.py: New file, a bit of a hack to + remuxer.py, but for resyncing a bad ogg. Only UI at the moment.. + +2006-07-28 13:56:43 +0000 Andy Wingo + + * ChangeLog: + changelog + Original commit message from CVS: + changelog + +2006-07-28 13:56:20 +0000 James Doc Livingston + + examples/remuxer.py (RemuxBin._do_seek, Remuxer._bus_watch): Use normal seeks instead of segment seeks so that EOS is... + Original commit message from CVS: + 2006-07-28 Andy Wingo + * examples/remuxer.py (RemuxBin._do_seek, Remuxer._bus_watch): Use + normal seeks instead of segment seeks so that EOS is handled + properly. Patch by James "Doc" Livingston . (#348416) + * examples/remuxer.py (RemuxBin._new_demuxed_pad): Increase the + buffer size for dealing with terribly muxed files. + +2006-07-20 17:05:22 +0000 Edward Hervey + + configure.ac: Back to development cycle + Original commit message from CVS: + * configure.ac: + Back to development cycle + +=== release 0.10.5 === + +2006-07-20 17:03:57 +0000 Edward Hervey + + * ChangeLog: + * NEWS: + 0.10.5 "My Little Poney wants some Funk" release + Original commit message from CVS: + 0.10.5 "My Little Poney wants some Funk" release + ---------------------------------------------------------------------- + +2006-07-19 14:21:36 +0000 Edward Hervey + + configure.ac: 0.10.4.2 pre-release + Original commit message from CVS: + * configure.ac: 0.10.4.2 pre-release + +2006-07-18 15:33:41 +0000 Edward Hervey + + Add new ignore for 0.10.10 API additions + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.10.ignore: + * gst/gstversion.override.in: + Add new ignore for 0.10.10 API additions + * gst/gst.defs: + Added definitions for new segtrap functions + +2006-07-05 11:35:12 +0000 Edward Hervey + + gst/gstmodule.c: Added gst.BUFFER_OFFSET_NONE for proper (guint64) -1 conversion between python and C. + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + Added gst.BUFFER_OFFSET_NONE for proper (guint64) -1 conversion between + python and C. + +2006-07-03 14:44:20 +0000 Edward Hervey + + gst/: Repeat 100 times : "I shouldn't commit patches without checking them thoroughly, especially if they come from s... + Original commit message from CVS: + * gst/gstelement.override: + * gst/gstevent.override: + * gst/gstmessage.override: + * gst/gstquery.override: + Repeat 100 times : "I shouldn't commit patches without checking + them thoroughly, especially if they come from someone I trust". + Fix the broken Py_BuildValue. + +2006-07-03 13:32:08 +0000 Thomas Vander Stichele + + add gcov stuff + Original commit message from CVS: + * Makefile.am: + * configure.ac: + * gst/Makefile.am: + add gcov stuff + +2006-07-03 13:31:19 +0000 Thomas Vander Stichele + + gst/gstmodule.c: don't crash when error is NULL + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + don't crash when error is NULL + +2006-07-03 09:31:26 +0000 Edward Hervey + + gst/gstmessage.override: State change is a list and not a tuple + Original commit message from CVS: + * gst/gstmessage.override: + State change is a list and not a tuple + * gst/gstpad.override: + query_position() got busted in previous commit. + +2006-07-03 09:01:18 +0000 Edward Hervey + + gst/: Use Py_BuildValue to construct tuples. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstelement.override: + * gst/gstevent.override: + * gst/gstmessage.override: + * gst/gstpad.override: + * gst/gstquery.override: + Use Py_BuildValue to construct tuples. + Use tuples for collection of different objects. + See http://www.python.org/doc/faq/general/#why-are-there-separate-tuple-and-list-data-types + * testsuite/test_event.py: + [message|query|event].parse_* now return tuples and not list. + Fixes #334548 + +2006-07-02 15:25:04 +0000 Edward Hervey + + Removal of all glib < 2.8 cruft since GStreamer core now requires glib >= 2.8 + Original commit message from CVS: + Removal of all glib < 2.8 cruft since GStreamer core now requires + glib >= 2.8 + * codegen/argtypes.py: + remove gstobject cruft from ObjectArg + * configure.ac: + Require glib >= 2.8.0 + * gst/Makefile.am: + * gst/pygstobject.c: + * gst/pygstobject.h: + Remove pygstobject.[ch] + * gst/common.h: + Don't include removed header file. + * gst/gst.override: + * gst/gstbin.override: + * gst/gstbus.override: + * gst/gstelement.override: + * gst/gstelementfactory.override: + * gst/gstmessage.override: + * gst/gstobject.override: + * gst/gstpad.override: + * gst/interfaces.override: + * gst/pygstiterator.c: (pygst_iterator_iter_next): + Switch from using pygstobject* functions to using pygobject* functions. + * gst/gstmodule.c: (sink_gstobject), (init_gst): + Move GstObject sink function here and use standard gobject refcounting. + +2006-06-22 19:12:36 +0000 Edward Hervey + + configure.ac: 0.10.7 ignore file is for 0.10.7 AND 0.10.8 (due to brown paperbag release). + Original commit message from CVS: + * configure.ac: (GST_LIBS): + 0.10.7 ignore file is for 0.10.7 AND 0.10.8 (due to brown paperbag + release). + +2006-06-15 09:58:08 +0000 Edward Hervey + + codegen/codegen.py: Always unblock threads when going to C. + Original commit message from CVS: + * codegen/codegen.py: + Always unblock threads when going to C. + * gst/gst.defs: + Revert unblock-threads noise. + +2006-06-14 10:00:32 +0000 Edward Hervey + + gst/gst-types.defs: Added fields for GstPadTemplate. + Original commit message from CVS: + * gst/gst-types.defs: + Added fields for GstPadTemplate. + * gst/gst.defs: + Made gst_element_class_get_template_list a GstElement method. + * gst/gstelement.override: + Override for gst.Element.get_template_list() + * gst/gstpad.override: + Override getter for GstStaticPadTemplate.static_caps so that it uses + the correct pointer. + +2006-06-13 17:43:40 +0000 Edward Hervey + + testsuite/gstpython.supp: Keeping suppresions + Original commit message from CVS: + * testsuite/gstpython.supp: + Keeping suppresions + +2006-06-13 16:52:05 +0000 Edward Hervey + + testsuite/gstpython.supp: Tim might have fixed this suppression. Commenting it. + Original commit message from CVS: + * testsuite/gstpython.supp: + Tim might have fixed this suppression. Commenting it. + +2006-06-13 14:43:41 +0000 Edward Hervey + + testsuite/gstpython.supp: One more suppression added to bug #344761 + Original commit message from CVS: + * testsuite/gstpython.supp: + One more suppression added to bug #344761 + +2006-06-13 13:45:33 +0000 Edward Hervey + + .cvsignore: Ignore more files + Original commit message from CVS: + * .cvsignore: + Ignore more files + +2006-06-13 13:28:47 +0000 Edward Hervey + + testsuite/gstpython.supp: Added suppresion for leaks of bug #344761. + Original commit message from CVS: + * testsuite/gstpython.supp: + Added suppresion for leaks of bug #344761. + +2006-06-13 11:05:08 +0000 Edward Hervey + + Ignore log files. + Original commit message from CVS: + * .cvsignore: + * testsuite/.cvsignore: + Ignore log files. + +2006-06-13 10:59:44 +0000 Edward Hervey + + Makefile.am: Cleanup pygst.pyc file. + Original commit message from CVS: + * Makefile.am: (CLEANFILES): + Cleanup pygst.pyc file. + +2006-06-13 10:55:09 +0000 Edward Hervey + + gst/gst.defs: Add 'unblock-threads #t' for critical functions/methods. + Original commit message from CVS: + * gst/gst.defs: + Add 'unblock-threads #t' for critical functions/methods. + +2006-06-12 16:51:36 +0000 Edward Hervey + + testsuite/: Added cleanup file to initialize registry before running checks. + Original commit message from CVS: + * testsuite/Makefile.am: + * testsuite/runtests.py: + * testsuite/cleanup.py: + Added cleanup file to initialize registry before running checks. + Added G_DEBUG=gc-friendly to valgrinding + Only test test_*.py files + +2006-06-11 16:32:18 +0000 Edward Hervey + + .cvsignore: more files to ignore + Original commit message from CVS: + * .cvsignore: + more files to ignore + +2006-06-09 17:21:40 +0000 Edward Hervey + + pygst.py.in: Raise RequiredVersionError(ValueError, AssertionError) wherever applicable. This makes the new system (r... + Original commit message from CVS: + * pygst.py.in: + Raise RequiredVersionError(ValueError, AssertionError) wherever + applicable. This makes the new system (raising an error) compatible + with the old system (assertions). + Fixes #341114 + +2006-06-09 14:19:16 +0000 Edward Hervey + + pygst.py.in: Don't import non-used modules + Original commit message from CVS: + * pygst.py.in: + Don't import non-used modules + * testsuite/Makefile.am: + Heavy valgrinding por favor ! + (%.valgrind): with always-malloc for GSlice + +2006-06-09 14:15:53 +0000 Edward Hervey + + pygst.py.in: Don't import non-used modules + Original commit message from CVS: + * pygst.py.in: + Don't import non-used modules + * testsuite/Makefile.am: + Heavy valgrinding por favor ! + +2006-06-09 10:50:21 +0000 Edward Hervey + + codegen/: Updated codegenerator to current pygtk one. + Original commit message from CVS: + * codegen/Makefile.am: + * codegen/argtypes.py: + * codegen/codegen.py: + * codegen/definitions.py: + * codegen/defsconvert.py: + * codegen/defsparser.py: + * codegen/docextract.py: + * codegen/docextract_to_xml.py: + * codegen/docgen.py: + * codegen/h2def.py: + * codegen/mergedefs.py: + * codegen/missingdefs.py: + * codegen/mkskel.py: + * codegen/override.py: + * codegen/reversewrapper.py: + Updated codegenerator to current pygtk one. + * gst/gst.defs: + * gst/gst.override: + * gst/gstpad.override: + Update defs for new constructor definition. + * testsuite/test_bin.py: + With new constructors, pygobject will try to convert the argument to the + proper GType (here a string). + +2006-06-09 10:12:16 +0000 Edward Hervey + + gst/: Update for API additions. + Original commit message from CVS: + * gst/base.defs: + * gst/gst-0.10.7.ignore: + * gst/gst-types.defs: + * gst/gst.defs: + * gst/gstbase.override: + * gst/libs.defs: + Update for API additions. + * gst/gstmodule.c: (init_gst): + Added new GST_TAG_IMAGE and GST_TAG_PREVIEW_IMAGE + +2006-05-27 12:18:54 +0000 Edward Hervey + + gst/__init__.py: Make gst-python work on OS without dl.so + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/__init__.py: + Make gst-python work on OS without dl.so + Fixes #341799 + +2006-05-27 12:13:46 +0000 Edward Hervey + + examples/filesrc.py: Port to 0.10. + Original commit message from CVS: + reviewed by: Edward Hervey + * examples/filesrc.py: Port to 0.10. + +2006-05-27 12:08:08 +0000 Edward Hervey + + examples/audio-controller.py: Make it work with 0.10, still had cruft from 0.9 + Original commit message from CVS: + * examples/audio-controller.py: + Make it work with 0.10, still had cruft from 0.9 + +2006-05-19 08:48:22 +0000 Edward Hervey + + Added ignore file for core 0.10.7 + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.7.ignore: + * gst/gstversion.override.in: + Added ignore file for core 0.10.7 + * gst/base.defs: + Added gst_adapter_take_buffer + * gst/gst-0.10.6.ignore: + Filed API addition for 0.10.6 + * gst/gst-types.defs: + Added GstTypeFind pointer definition + * gst/gst.defs: + * gst/gst.override: + Added fake function gst_type_find_new() to create a GstTypeFind that can + be used in all typefinding function. + GstTypeFind * + gst_type_find_new(data, peekfunction, suggestfunction [, getlenghtfunction]) + +2006-05-09 14:24:02 +0000 Edward Hervey + + Update for API changes. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/gst-0.10.6.ignore: + * gst/gst.defs: + * gst/gstversion.override.in: + Update for API changes. + Added ignore files for core 0.10.6 API additions. + +2006-05-09 14:00:10 +0000 Edward Hervey + + gst/gst.override: Reverting previous patches for conditional ignore. + Original commit message from CVS: + * gst/gst.override: + Reverting previous patches for conditional ignore. + It can't be done from within override files. + The only one left is the python gst_debug_log function + which will do nothing #ifdef GST_DISABLE_GST_DEBUG. + Also removed the conditional ignore for API changes since it didn't + have any effect either. + +2006-05-09 13:36:51 +0000 Edward Hervey + + gst/gst.override: Better conditional ignore for types and methods. + Original commit message from CVS: + * gst/gst.override: + Better conditional ignore for types and methods. + +2006-05-09 13:13:48 +0000 Edward Hervey + + codegen/: Added code to ignore type and the function/methods/classes that use them. + Original commit message from CVS: + * codegen/codegen.py: + * codegen/override.py: + Added code to ignore type and the function/methods/classes that use + them. + * gst/gst.override: + ignore methods/classes/types depending on how GStreamer core was built: + _ GST_DISABLE_GST_DEBUG + _ GST_DISABLE_LOADSAVE + _ GST_DISABLE_PARSE + +2006-05-09 10:25:17 +0000 Edward Hervey + + testsuite/python.supp: Added suppressions for FC5 64 bit + Original commit message from CVS: + * testsuite/python.supp: + Added suppressions for FC5 64 bit + +2006-05-08 11:59:56 +0000 Edward Hervey + + autogen.sh: libtoolize on Darwin/MacOSX is called glibtoolize + Original commit message from CVS: + * autogen.sh: (CONFIGURE_DEF_OPT): + libtoolize on Darwin/MacOSX is called glibtoolize + +2006-05-05 13:32:37 +0000 Andy Wingo + + * examples/remuxer.py: + smaller title + Original commit message from CVS: + smaller title + +2006-05-05 13:30:01 +0000 Andy Wingo + + examples/remuxer.py (PlayerWindow.update_scale_cb): Fix a race condition getting the initial cutin time via inserting... + Original commit message from CVS: + 2006-05-05 Andy Wingo + * examples/remuxer.py (PlayerWindow.update_scale_cb): Fix a race + condition getting the initial cutin time via inserting whitespace. + (all over): UI fixes to make Mike happy. + +2006-05-05 11:00:44 +0000 Andy Wingo + + examples/remuxer.py: Updates! Nothing gstreamery, it's all ui, so I won't bother you with the details. + Original commit message from CVS: + 2006-05-05 Andy Wingo + * examples/remuxer.py: Updates! Nothing gstreamery, it's all ui, + so I won't bother you with the details. + +2006-04-29 16:59:16 +0000 Edward Hervey + + examples/gstfile.py: Threaded application, we NEED gobject.threads_init(). + Original commit message from CVS: + * examples/gstfile.py: + Threaded application, we NEED gobject.threads_init(). + This should finally gets rid of the crashes when used on single files. + * gst/extend/discoverer.py: + Re-order the imports. + +2006-04-28 17:35:26 +0000 Edward Hervey + + gst/arg-types.py: Caps used as arguments of virtual methods should keep their initial refcount when calling the pytho... + Original commit message from CVS: + * gst/arg-types.py: + Caps used as arguments of virtual methods should keep their initial + refcount when calling the python methods. + This is similar to the patch done for GstMiniObjects. + * gst/gstbase.override: + Adjust the gst.BaseTransform.get_unit_size() virtual method for above + fix. + +2006-04-28 15:23:52 +0000 Edward Hervey + + gst/gstbase.override: gst.BaseTransform.get_unit_size() virtual method override. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstbase.override: + gst.BaseTransform.get_unit_size() virtual method override. + Closes #339248 + +2006-04-28 15:07:41 +0000 Edward Hervey + + gst/arg-types.py: GstMiniObject used as virtual methods parameters should be unreffed before calling the method and t... + Original commit message from CVS: + * gst/arg-types.py: + GstMiniObject used as virtual methods parameters should be unreffed + before calling the method and the ref-ed. + Added Params and Returns for const-gchar*, GType and gulong so the + code generator can generate more virtual methods handlers/proxys. + * gst/gst-types.defs: + * gst/gst.defs: + * gst/interfaces.defs: + Added vtable and virtual method definition for interfaces so we can properly use virtual + methods from those interfaces in python. + +2006-04-28 14:55:15 +0000 Edward Hervey + + gst/gstpad.override: (pad_block_callback_marshal) + Original commit message from CVS: + 2006-04-19 Andy Wingo + * gst/gstpad.override: (pad_block_callback_marshal) + (_wrap_gst_pad_set_blocked_async): Fix refcounting problems and + indent. + Fixes #338982 + +2006-04-28 14:54:45 +0000 Edward Hervey + + gst/gstmodule.c: Wrap the gstreamer error domains quark. + Original commit message from CVS: + * gst/gstmodule.c: (init_gst): + Wrap the gstreamer error domains quark. + Fixes #339040 + +2006-04-28 14:51:52 +0000 Edward Hervey + + * ChangeLog: + gst/gstpad.override (pad_block_callback_marshal) + Original commit message from CVS: + * gst/gstpad.override (pad_block_callback_marshal) + (_wrap_gst_pad_set_blocked_async): Fix refcounting problems and + indent. + Fixes #338982 + +2006-04-28 14:07:38 +0000 Thomas Vander Stichele + + * ChangeLog: + * configure.ac: + back to HEAD + Original commit message from CVS: + back to HEAD + +=== release 0.10.4 === + +2006-04-28 14:06:21 +0000 Thomas Vander Stichele + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + releasing 0.10.4 + Original commit message from CVS: + releasing 0.10.4 + +2006-04-19 12:04:56 +0000 Andy Wingo + + * examples/fvumeter.py: + BPB(tm) + Original commit message from CVS: + BPB(tm) + +2006-04-19 12:04:19 +0000 Andy Wingo + + * ChangeLog: + * examples/fvumeter.py: + * gst/arg-types.py: + gst/arg-types.py (GstCapsArg.write_const_param) + Original commit message from CVS: + 2006-04-19 Andy Wingo + * gst/arg-types.py (GstCapsArg.write_const_param) + (GstCapsArg.write_param): If there is a default value, initialize + the py_caps variable to NULL. PyArgs_Parse* doesn't touch c + variables if the optional arg isn't there. Fixes #339010. + +2006-04-19 11:58:14 +0000 Andy Wingo + + examples/remuxer.py (GstPlayer.seek): Don't do accurate seeks, because the output won't be readable without a keyfram... + Original commit message from CVS: + 2006-04-19 Andy Wingo + * examples/remuxer.py (GstPlayer.seek): Don't do accurate seeks, + because the output won't be readable without a keyframe anyway. + +2006-04-19 08:50:48 +0000 Andy Wingo + + examples/remuxer.py: Another code dump. I know it breaks the freeze but it's just a wee example :) + Original commit message from CVS: + 2006-04-19 Andy Wingo + * examples/remuxer.py: Another code dump. I know it breaks the + freeze but it's just a wee example :) + +2006-04-13 16:38:41 +0000 Thomas Vander Stichele + + * configure.ac: + prereleasing gst-python + Original commit message from CVS: + prereleasing gst-python + +2006-04-10 14:47:19 +0000 Edward Hervey + + gst/gsttaglist.override: Return tag value if present more than once (instead of exactly once). + Original commit message from CVS: + * gst/gsttaglist.override: (tag_foreach_func_list): + Return tag value if present more than once (instead of exactly once). + Fixes #337876 + +2006-04-10 09:21:09 +0000 Edward Hervey + + codegen/argtypes.py: Update from upstream codegen for UInt argtype. + Original commit message from CVS: + * codegen/argtypes.py: + Update from upstream codegen for UInt argtype. + * gst/gst-types.defs: + Added GstIndexEntry boxed type. + * gst/gstbase.override: + Wrapped gst.BaseSrc::get_times() and gst.PushSrc::create() virtual + methods. + gst.BaseSrc and gst.PushSrc virtual methods are now completely wrapped. + +2006-04-08 18:46:44 +0000 Stefan Kost + + testsuite/test-object.h: Fix broken GObject macros + Original commit message from CVS: + * testsuite/test-object.h: + Fix broken GObject macros + +2006-04-07 18:33:35 +0000 Andy Wingo + + examples/remuxer.py: Code dump, work in progress... + Original commit message from CVS: + 2006-04-07 Andy Wingo + * examples/remuxer.py: Code dump, work in progress... + +2006-04-07 17:58:18 +0000 Edward Hervey + + testsuite/test_ghostpad.py: more assertions to figure out an speed issue. + Original commit message from CVS: + * testsuite/test_ghostpad.py: + more assertions to figure out an speed issue. + +2006-04-07 17:21:27 +0000 Andy Wingo + + gst/arg-types.py (GstCapsArg.beforenull): py_caps can be NULL if it is an optional argument. Translate this python no... + Original commit message from CVS: + 2006-04-07 Andy Wingo + * gst/arg-types.py (GstCapsArg.beforenull): py_caps can be NULL if + it is an optional argument. Translate this python non-value to the + C NULL. + * gst/gst.defs (get_compatible_pad): Filter caps is optional and + can be None. It defaults to None. + +2006-04-07 15:41:00 +0000 Edward Hervey + + Makefile.am: make check-valgrind calls make valgrind in the testsuite directory. + Original commit message from CVS: + * Makefile.am: + make check-valgrind calls make valgrind in the testsuite directory. + * testsuite/Makefile.am: + prepend $(top_srcdir) to PYTHONPATH for all tests so it uses the built + library and not the installed one. + * testsuite/python.supp: + Added suppressions discovered on x86/gentoo. + +2006-04-07 14:54:49 +0000 Andy Wingo + + gst/gstelement.override (_wrap_gst_element_link): Allow errors parsing the optional filter caps to propagate up. + Original commit message from CVS: + 2006-04-07 Andy Wingo + * gst/gstelement.override (_wrap_gst_element_link): Allow errors + parsing the optional filter caps to propagate up. + +2006-04-07 14:32:08 +0000 Andy Wingo + + gst/gst.defs (element_make_from_uri): Element name is optional and can be None. It defaults to None. + Original commit message from CVS: + 2006-04-07 Andy Wingo + * gst/gst.defs (element_make_from_uri): Element name is optional + and can be None. It defaults to None. + +2006-04-05 17:05:43 +0000 Edward Hervey + + testsuite/test_message.py: GstBus is flushing in NULL, so we need to set the pipeline to READY in order to receive th... + Original commit message from CVS: + * testsuite/test_message.py: + GstBus is flushing in NULL, so we need to set the pipeline to READY in + order to receive the messages in the bus watch. + +2006-04-05 11:55:48 +0000 Andy Wingo + + configure.ac (PYGST_MICRO_VERSION): Doc fix. + Original commit message from CVS: + 2006-04-05 Andy Wingo + * configure.ac (PYGST_MICRO_VERSION): Doc fix. + (PYGST_NANO_VERSION): New define. + * gst/__init__.py (version): Add as an alias for get_gst_version. + Should use the deprecation infrastructure here. + * gst/gst.defs: Add defs for the new wrapped functions. + * gst/gst.override (_wrap_gst_get_pygst_version) + (_wrap_gst_get_gst_version): New overrides, functions to access + the gstreamer and pygst versions. The first used to be called + gst_version(); we ignore gst_version now. + +2006-04-05 08:37:32 +0000 Andy Wingo + + gst/gstpad.override (_wrap_gst_pad_set_blocked_async): PyObject_IsTrue, not PyBool_Check. Grr. + Original commit message from CVS: + 2006-04-05 Andy Wingo + * gst/gstpad.override (_wrap_gst_pad_set_blocked_async): + PyObject_IsTrue, not PyBool_Check. Grr. + +2006-04-04 16:16:46 +0000 Edward Hervey + + gst/gst.defs: gst_element_post_message: Adding keep-refcount tag to the message since the function will unref it. + Original commit message from CVS: + * gst/gst.defs: + gst_element_post_message: Adding keep-refcount tag to the message since + the function will unref it. + +2006-04-01 10:10:48 +0000 Thomas Vander Stichele + + * examples/Makefile.am: + fix makefile + Original commit message from CVS: + fix makefile + +2006-04-01 10:07:07 +0000 Thomas Vander Stichele + + configure.ac: use AS_VERSION and AS_NANO + Original commit message from CVS: + * configure.ac: + use AS_VERSION and AS_NANO + +2006-03-31 17:12:50 +0000 Andy Wingo + + examples/remuxer.py: Example GUI for a remuxer, unfinished -- dropping it here while I hack on it. Based on player.py. + Original commit message from CVS: + 2006-03-31 Andy Wingo + * examples/remuxer.py: Example GUI for a remuxer, unfinished -- + dropping it here while I hack on it. Based on player.py. + * examples/Makefile.am (examples_DATA): Add remuxer.py, reorder + list. + +2006-03-30 03:46:56 +0000 David I. Lehn + + configure.ac: Better empty string test fix for "Fixes to how we figure out what API to ignore" + Original commit message from CVS: + * configure.ac: + Better empty string test fix for "Fixes to how we figure out what API + to ignore" + +2006-03-24 11:07:22 +0000 Edward Hervey + + configure.ac: Fixes in how we figure out what API to ignore + Original commit message from CVS: + * configure.ac: + Fixes in how we figure out what API to ignore + * gst/Makefile.am: + * gst/gst-0.10.5.ignore: + * gst/gstversion.override.in: + Added file for handling API additions for gstreamer 0.10.5 + * gst/base.defs: + * gst/gst.defs: + New API + * gst/gstpad.override: + Overrides for gst.Pad.query_peer_*() + +2006-03-21 21:49:46 +0000 Jan Schmidt + + * configure.ac: + Bump nano back to CVS + Original commit message from CVS: + Bump nano back to CVS + +=== release 0.10.3 === + +2006-03-21 21:48:08 +0000 Jan Schmidt + + configure.ac: releasing 0.10.3, "Maybe not today. Maybe not tomorrow, but soon..." + Original commit message from CVS: + === release 0.10.3 === + 2006-03-21 Jan Schmidt + * configure.ac: + releasing 0.10.3, "Maybe not today. Maybe not tomorrow, but soon..." + +2006-03-21 14:01:07 +0000 Jan Schmidt + + testsuite/: Another attempt at making the tests deterministic on the buildbots + Original commit message from CVS: + * testsuite/test_ghostpad.py: + * testsuite/test_pad.py: + Another attempt at making the tests deterministic on the buildbots + +2006-03-21 00:14:38 +0000 Jan Schmidt + + configure.ac: pre-release 0.10.2.2 + Original commit message from CVS: + 2006-03-20 Jan Schmidt + * configure.ac: + pre-release 0.10.2.2 + +2006-03-20 19:08:34 +0000 Jan Schmidt + + testsuite/test_ghostpad.py: Add while loop in teardown to wait for the pipeline state to hit NULL. Hopefully this wil... + Original commit message from CVS: + * testsuite/test_ghostpad.py: + Add while loop in teardown to wait for the pipeline state + to hit NULL. Hopefully this will ensure the refcount has always hit 1. + +2006-03-14 12:56:46 +0000 Edward Hervey + + configure.ac: Only require GStreamer core >= 0.10.2 + Original commit message from CVS: + * configure.ac: + Only require GStreamer core >= 0.10.2 + Detect version of core the bindings are being compiled against and + write gst/gstversion.override file with eventual API additions that + should be ignored. + * gst/Makefile.am: + * gst/base.defs: + Added gst_base_sync_[set|get]_[sync|max_lateness]() and + gst_type_find_helper_get_range() definitions + * gst/gst-0.10.3.ignore: + API added in gstreamer core 0.10.3 + * gst/gst-0.10.4.ignore: + API added in gstreamer core 0.10.4 + * gst/gst.override: + Include gstversion.override. + * gst/gstversion.override.in: + Magic file for API additions to ignore. + +2006-03-14 12:25:22 +0000 Edward Hervey + + codegen/: New --extendpath option for codegenerator so we can add extra path to search for included override files. + Original commit message from CVS: + * codegen/codegen.py: + * codegen/override.py: + New --extendpath option for codegenerator so we can add + extra path to search for included override files. + +2006-03-13 11:19:10 +0000 Edward Hervey + + gst/: Added base elements override file. + Original commit message from CVS: + * gst/Makefile.am: + * gst/gst.override: + * gst/gstbase.override: + Added base elements override file. + * gst/gstpad.override: + Added override for gst_pad_alloc_buffer_and_set_caps + +2006-03-10 11:28:01 +0000 Edward Hervey + + gst/gst.override: Commited a bit too much :) + Original commit message from CVS: + * gst/gst.override: + Commited a bit too much :) + +2006-03-10 11:22:31 +0000 Edward Hervey + + gst/base.defs: typo fix for gst_type_find_helper() + Original commit message from CVS: + * gst/base.defs: + typo fix for gst_type_find_helper() + Added new API : gst_type_find_helper_for_buffer() + * gst/gst.override: + override for gst.type_find_helper_for_buffer() + +2006-03-10 10:54:40 +0000 Edward Hervey + + gst/: Added new API: gst_pipeline_[get|set]_auto_flush_bus() gst_uri_has_protocol() + Original commit message from CVS: + * gst/gst-types.defs: + * gst/gst.defs: + Added new API: + gst_pipeline_[get|set]_auto_flush_bus() + gst_uri_has_protocol() + GST_RESOURCE_ERROR_NO_SPACE_LEFT + +2006-03-07 19:44:35 +0000 Edward Hervey + + gst/arg-types.py: Add ReturnType and Parameter for GstCaps. + Original commit message from CVS: + * gst/arg-types.py: + Add ReturnType and Parameter for GstCaps. + This allows the codegenerator to wrap properly more virtual proxies. + +2006-03-07 19:08:43 +0000 Edward Hervey + + gst/base.defs: Update for new check_get_range virtual method in GstBaseSrc + Original commit message from CVS: + * gst/base.defs: + Update for new check_get_range virtual method in GstBaseSrc + +2006-03-06 16:24:53 +0000 Michael Smith + + gst/: Don't leak PyObjects wrapping GValues when indexing into a + Original commit message from CVS: + * gst/gststructure.override: + * gst/gsttaglist.override: + Don't leak PyObjects wrapping GValues when indexing into a + GStStructure. Also fix a copy/paste identical bug in taglists. + +2006-03-02 09:40:13 +0000 Edward Hervey + + gst/pygstminiobject.h: Some crack distributions do weirdo stuff with PYGIL_API_IS_BUGGY. + Original commit message from CVS: + * gst/pygstminiobject.h: + Some crack distributions do weirdo stuff with PYGIL_API_IS_BUGGY. + Let's keep our own detection. + Closes #333055 + +2006-02-28 00:17:45 +0000 Jan Schmidt + + pygst.py.in: Fix a silly logic inversion typo + Original commit message from CVS: + * pygst.py.in: + Fix a silly logic inversion typo + +2006-02-27 16:22:10 +0000 Edward Hervey + + pygst.py.in: use 'raise StandardError' instead of 'assert' so that compiled code raise a noticeable exception. + Original commit message from CVS: + * pygst.py.in: + use 'raise StandardError' instead of 'assert' so that compiled code + raise a noticeable exception. + Closes #332586 + +2006-02-22 10:16:33 +0000 Edward Hervey + + gst/gstmodule.c: gst.gst_version uses the result of gst_version() rather than use the GST_VERSION_* hardcoded values. + Original commit message from CVS: + reviewed by: Edward Hervey + * gst/gstmodule.c: (init_gst): + gst.gst_version uses the result of gst_version() rather than use + the GST_VERSION_* hardcoded values. + Closes #331616 + +2006-02-20 18:07:59 +0000 Edward Hervey + + examples/vumeter.py: In fact it wasn't an application message, but an element message :) + Original commit message from CVS: + * examples/vumeter.py: + In fact it wasn't an application message, but an element message :) + +2006-02-20 16:58:14 +0000 Zaheer Abbas Merali + + * ChangeLog: + * examples/vumeter.py: + fix vumeter example + Original commit message from CVS: + fix vumeter example + +2006-02-17 15:35:34 +0000 Edward Hervey + + gst/: Updated and properly wrapped new GstQuery formats API. + Original commit message from CVS: + * gst/gst.defs: + * gst/gstquery.override: + Updated and properly wrapped new GstQuery formats API. + +2006-02-10 17:49:47 +0000 Andy Wingo + + gst/gst.defs (disable_sync_message_emission) + Original commit message from CVS: + 2006-02-10 Andy Wingo + * gst/gst.defs (disable_sync_message_emission) + (enable_sync_message_emission): Wrap new functions from GStreamer + CVS. + * configure.ac (GST_REQ): Require GStreamer 0.10.3.1. + * examples/play.py: A bit of refactoring. Make use of the + sync-message signals. Reacts to events on the bus. Keeps aspect + ratio. Better scrubbing, play/pause button instead of + play+pause+stop. Not a bad player now, although the code still + lacks cleanliness. + +2006-02-10 10:53:22 +0000 Andy Wingo + + examples/play.py (GstPlayer.query_position) + Original commit message from CVS: + 2006-02-10 Andy Wingo + * examples/play.py (GstPlayer.query_position) + (PlayerWindow.update_scale_cb): Only return position, duration + from query_position -- fixes a bugaboo. + (main): Add some input validation. + * examples/pipeline-tester (data): Add a pipeline to test software + scaling. + +2006-02-07 18:54:52 +0000 Edward Hervey + + gst/: Remove deprecated code dating back from 0.8 era. + Original commit message from CVS: + * gst/gst.override: + * gst/gstmodule.c: (python_do_pending_calls): + Remove deprecated code dating back from 0.8 era. + +2006-02-06 16:24:23 +0000 Andy Wingo + + codegen/argtypes.py (UInt64Arg.write_param): Parse long arguments using ParseTuple and friends; allows ints to passed... + Original commit message from CVS: + 2006-02-06 Andy Wingo + * codegen/argtypes.py (UInt64Arg.write_param): Parse long + arguments using ParseTuple and friends; allows ints to passed for + longs as a side benefit. + +2006-02-02 16:30:01 +0000 Edward Hervey + + gst/gst.override: (gst.TIME_ARGS) return "CLOCK_TIME_NONE" for invalid times instead of outputing gibberish value. + Original commit message from CVS: + * gst/gst.override: + (gst.TIME_ARGS) return "CLOCK_TIME_NONE" for invalid times instead of + outputing gibberish value. + +2006-02-02 15:54:07 +0000 Edward Hervey + + gst/gst.defs: Update for current GStreamer core API + Original commit message from CVS: + * gst/gst.defs: + Update for current GStreamer core API + +2006-02-01 16:37:41 +0000 Edward Hervey + + testsuite/test_event.py: Properly use tempfile + Original commit message from CVS: + * testsuite/test_event.py: + Properly use tempfile + +2006-02-01 14:19:55 +0000 Edward Hervey + + gst/gst.defs: When using gst.Element.send_event() and gst.Pad.send_event() we keep a refcount on the sent event. + Original commit message from CVS: + * gst/gst.defs: + When using gst.Element.send_event() and gst.Pad.send_event() we keep + a refcount on the sent event. + * testsuite/test_event.py: + Uncomment test to prove above fix + +2006-02-01 11:52:04 +0000 Thomas Vander Stichele + + testsuite/test_event.py: add a test case for autoplugging behaviour: create a source, connect probes, store new-segme... + Original commit message from CVS: + * testsuite/test_event.py: + add a test case for autoplugging behaviour: + create a source, connect probes, store new-segment event, + add element in buffer probe callback, and forward event + Currently fails due to refcounting on the stored new-segment + event + +2006-02-01 11:14:20 +0000 Thomas Vander Stichele + + testsuite/test_element.py: add another link test + Original commit message from CVS: + 2006-02-01 Thomas Vander Stichele + * testsuite/test_element.py: + add another link test + +2006-01-30 12:57:02 +0000 Edward Hervey + + Link against Gst Data protocol libraries. + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + Link against Gst Data protocol libraries. + * gst/__init__.py: + Restore dlopenflags after importing gst. + Closes #329110 + +2006-01-25 11:23:20 +0000 Christian Schaller + + * common: + * gst-python.spec.in: + update spec file + Original commit message from CVS: + update spec file + +2006-01-16 21:01:03 +0000 Thomas Vander Stichele + + * configure.ac: + back to head + Original commit message from CVS: + back to head + +=== release 0.10.2 === + +2006-01-16 20:59:29 +0000 Thomas Vander Stichele + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + releasing 0.10.2 + Original commit message from CVS: + releasing 0.10.2 + +2006-01-14 22:59:52 +0000 Thomas Vander Stichele + + * ChangeLog: + * configure.ac: + prerelease + Original commit message from CVS: + prerelease + +2006-01-13 17:40:09 +0000 Edward Hervey + + gst/gstlibs.override: GstController : don't use values that are now in non-public API. + Original commit message from CVS: + * gst/gstlibs.override: + GstController : don't use values that are now in non-public API. + +2006-01-09 11:42:25 +0000 Edward Hervey + + gst/base.defs: Revert guint8* to gchar* modifications for the adapter + Original commit message from CVS: + * gst/base.defs: + Revert guint8* to gchar* modifications for the adapter + * gst/gst.defs: + Cleanups and API additions + +2006-01-08 12:26:35 +0000 Edward Hervey + + gst/gststructure.override: Properly check for gstvalue data types. This makes it possible to set fields with fractions. + Original commit message from CVS: + * gst/gststructure.override: (_wrap_gst_structure_set_value): + Properly check for gstvalue data types. This makes it possible to + set fields with fractions. + * testsuite/test_caps.py: + * testsuite/test_struct.py: + Test for above modifications + +2006-01-05 14:49:27 +0000 Edward Hervey + + gst/base.defs: Use gchar* instead of guint8* for GstAdapter + Original commit message from CVS: + * gst/base.defs: + Use gchar* instead of guint8* for GstAdapter + Added virtual methods definitions for base classes. + Still have to override some functions, and figure + out how to properly add reverse wrappers to the codegenerator. + +2006-01-01 21:18:28 +0000 Edward Hervey + + First step at wrapping base elements in gst-python + Original commit message from CVS: + First step at wrapping base elements in gst-python + * configure.ac: + Commenting out weird debugging statement dating from gst-python's + and which causes problems with gstbasesrc.h anonymous union. + * gst/Makefile.am: + Added base.defs + * gst/base.defs: + New base elements definition files + * gst/gst.defs: + * gst/gst.override: + Add base elements + +2005-12-23 18:16:44 +0000 Thomas Vander Stichele + + * configure.ac: + back to HEAD + Original commit message from CVS: + back to HEAD + +=== release 0.10.1 === + +2005-12-23 18:10:51 +0000 Thomas Vander Stichele + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + releasing 0.10.1 + Original commit message from CVS: + releasing 0.10.1 + +2005-12-22 19:02:03 +0000 Thomas Vander Stichele + + * pygst.py.in: + duh, typo + Original commit message from CVS: + duh, typo + +2005-12-22 15:56:41 +0000 Thomas Vander Stichele + + install in pyexecdir as well + Original commit message from CVS: + * configure.ac: + * gst/Makefile.am: + * gst/extend/Makefile.am: + install in pyexecdir as well + +2005-12-22 11:20:44 +0000 Thomas Vander Stichele + + pygst.py.in: give the correct error when not finding the version + Original commit message from CVS: + * pygst.py.in: give the correct error when not finding the version + +2005-12-20 15:58:02 +0000 Thomas Vander Stichele + + * configure.ac: + * gst-python.spec.in: + * testsuite/test_message.py: + prereleasing + Original commit message from CVS: + prereleasing + +2005-12-20 11:15:50 +0000 Edward Hervey + + gst/gst-types.defs: Added GstStaticCaps and GstStaticPadTemplate, using the new GType. + Original commit message from CVS: + * gst/gst-types.defs: + Added GstStaticCaps and GstStaticPadTemplate, using the new GType. + * gst/gst.defs: + Doesn't return a const anymore. + * gst/gstelementfactory.override: + Wrapped gst_element_factory_get_static_pad_templates() + +2005-12-19 17:49:30 +0000 Martin Soto + + gst/gstbus.override (_wrap_gst_bus_add_watch): This function incorrectly returned self, which was causing the message... + Original commit message from CVS: + 2005-12-19 Martin Soto + * gst/gstbus.override (_wrap_gst_bus_add_watch): This function + incorrectly returned self, which was causing the message bus to + get prematurely destroyed by the Python interpreter. Now returns + Py_None. + +2005-12-19 16:05:34 +0000 Edward Hervey + + gst/gst.override: ignore gst_object_sink + Original commit message from CVS: + * gst/gst.override: + ignore gst_object_sink + +2005-12-19 10:45:45 +0000 Edward Hervey + + gst/: Properly wrap the gst_dp_* functions (cast gchar* to guint8*). + Original commit message from CVS: + * gst/gstlibs.override: + * gst/libs.defs: + Properly wrap the gst_dp_* functions (cast gchar* to guint8*). + +2005-12-18 18:15:57 +0000 Edward Hervey + + gst/gst.override: ignore gst_plugin_get_module, GModule aren't wrapped in pygtk anyway. + Original commit message from CVS: + * gst/gst.override: + ignore gst_plugin_get_module, GModule aren't wrapped in + pygtk anyway. + wrap gst_clock_get_calibration + * gst/gstbus.override: + Ignore the following: + gst_bus_create_watch, since GSource aren't wrapped in pygtk + gst_bus_sync_signal_handler and gst_bus_async_signal_func since + these functions are used by the default bus handler anyway. + * gst/gstevent.override: + wrapped gst_event_parse_buffer_size + * gst/libs.defs: + Replace all guint8* for gst_dp_ functions by gchar * since they + are the same, but at least get generated properly by the code + generator. + +2005-12-18 17:20:12 +0000 Edward Hervey + + gst/gst.defs: gst_object_sink is a method of GstObject const of enums is a stupidity (_element_make_from_uri) + Original commit message from CVS: + * gst/gst.defs: + gst_object_sink is a method of GstObject + const of enums is a stupidity (_element_make_from_uri) + * gst/gst.override: + Ignore more functions that have no place in bindings or have better + python equivalents (list filtering for example) + Wrapped gst_version() and gst_type_find_factory_get_list() + * gst/gststructure.override: + More ignores + * gst/gsttaglist.override: + ignore gst_is_tag_list. + * gst/interfaces.override: + wrap gst_mixer_options_get_values() + +2005-12-16 14:47:12 +0000 Andy Wingo + + * ChangeLog: + * gst/gstpad.override: + gst/gstpad.override (handle_event_function_exception) + Original commit message from CVS: + 2005-12-16 Andy Wingo + * gst/gstpad.override (handle_event_function_exception) + (handle_chain_function_exception): GCC told me I needed braces + here. + +2005-12-14 17:18:38 +0000 Thomas Vander Stichele + + Follow pygtk's lead in installing pygst.py and .pth in pyexecdir - this will do the right thing on multilib 64 bit + Original commit message from CVS: + * Makefile.am: + * configure.ac: + Follow pygtk's lead in installing pygst.py and .pth in pyexecdir - + this will do the right thing on multilib 64 bit + +2005-12-12 15:15:28 +0000 Edward Hervey + + examples/gstfile.py: Moved the Discoverer class to gst.extend + Original commit message from CVS: + * examples/gstfile.py: + Moved the Discoverer class to gst.extend + Now works asynchronous... bl**dy fast :) + * gst/extend/Makefile.am: + * gst/extend/discoverer.py: + Discoverer has landed in extend and is now asynchronous. + It emits a 'discovered' signal when it has finished. + +2005-12-09 13:06:43 +0000 Edward Hervey + + gst/arg-types.py: This covers for the codegenerator not being able to handle (unsigned) int64 as parameters and retur... + Original commit message from CVS: + * gst/arg-types.py: + This covers for the codegenerator not being able to handle + (unsigned) int64 as parameters and return values. + +2005-12-09 12:49:08 +0000 Edward Hervey + + gst/arg-types.py: Added (reverse_)wrapper for GBoxed and GstMiniObject + Original commit message from CVS: + * gst/arg-types.py: + Added (reverse_)wrapper for GBoxed and GstMiniObject + * gst/gst.defs: + push_event() and chain() takes the reference on the + MiniObject. + +2005-12-07 14:41:37 +0000 Edward Hervey + + gst/gstmessage.override: Fix for memleak + Original commit message from CVS: + * gst/gstmessage.override: + Fix for memleak + +2005-12-05 18:12:42 +0000 Thomas Vander Stichele + + * configure.ac: + back to HEAD + Original commit message from CVS: + back to HEAD + +=== release 0.10.0 === + +2005-12-05 18:04:34 +0000 Thomas Vander Stichele + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + releasing 0.10.0 + Original commit message from CVS: + releasing 0.10.0 + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..b42a17a --- /dev/null +++ b/INSTALL @@ -0,0 +1,182 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..89721d5 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,78 @@ +SUBDIRS = common codegen gst examples plugin testsuite pkgconfig + +common_cflags = $(PYTHON_INCLUDES) $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS) +common_ldflags = -module -avoid-version + +# include before EXTRA_DIST for win32 assignment +include $(top_srcdir)/common/win32.mak + +ACLOCAL_AMFLAGS = -I m4 -I common/m4 + +pyexec_LTLIBRARIES = + +if HAVE_PYGOBJECT_2_16 +pyexec_LTLIBRARIES += gstoption.la +endif + +# GStreamer option bindings +gstoption_la_CFLAGS = $(common_cflags) +gstoption_la_LIBADD = $(common_libadd) +gstoption_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initgstoption|_PyGObject_API).*" +gstoption_la_SOURCES = gstoptionmodule.c + +EXTRA_DIST = \ + gstlibtoolimporter.py \ + pygst.py.in \ + gst-python.spec.in \ + gst-python.spec \ + RELEASE gst-python.doap \ + $(win32) + +BUILT_SOURCES = pygst.py +CLEANFILES = pygst.py pygst.pyc + +include $(top_srcdir)/common/release.mak + +pygst.py: $(top_srcdir)/pygst.py.in Makefile + if test -f $@; then chmod +w $@; fi + sed -e "s|@PYGSTDIR\@|$(shell pwd)|g" \ + -e "s|@GST_MAJORMINOR\@|$(GST_MAJORMINOR)|g" \ + $< > $@ + chmod -w $@ + +# rewrite pygst path in installed pygst.py, install pth file. +# they go in pyexecdir, should make 64bit users happy +install-exec-local: Makefile + $(mkinstalldirs) $(DESTDIR)$(pyexecdir) + sed -e "s|@PYGSTDIR\@|$(PYEXECDIR)/gst-$(GST_MAJORMINOR)|g" \ + -e "s|@GST_MAJORMINOR\@|$(GST_MAJORMINOR)|g" \ + $(srcdir)/pygst.py.in > $(DESTDIR)$(pyexecdir)/pygst.py + chmod 644 $(DESTDIR)$(pyexecdir)/pygst.py + echo "gst-$(GST_MAJORMINOR)" > $(DESTDIR)$(pyexecdir)/pygst.pth + +uninstall-local: + @rm $(DESTDIR)/$(pyexecdir)/pygst.py > /dev/null 2>&1 || true + @rm $(DESTDIR)/$(pyexecdir)/pygst.pth > /dev/null 2>&1 || true + +check-valgrind: + cd testsuite/ && make check-valgrind + +check-torture: + @true + +include $(top_srcdir)/common/coverage/lcov.mak + +CRUFT_FILES = \ + $(top_builddir)/common/shave \ + $(top_builddir)/common/shave-libtool \ + $(top_builddir)/common/m4/libtool.m4 \ + $(top_builddir)/common/m4/ltoptions.m4 \ + $(top_builddir)/common/m4/ltsugar.m4 \ + $(top_builddir)/common/m4/ltversion.m4 \ + $(top_builddir)/common/m4/lt~obsolete.m4 + +include $(top_srcdir)/common/cruft.mak + +all-local: check-cruft diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..5206c2c --- /dev/null +++ b/Makefile.in @@ -0,0 +1,1241 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# various tests to make sure we dist the win32 stuff (for MSVC builds) right + +# include this snippet to add a common release: target by using +# include $(top_srcdir)/common/release.mak + +# checks for left-over files in the (usually uninstalled) tree, ie. for +# stuff that best be deleted to avoid problems like having old plugin binaries +# lying around. +# +# set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/gst-python.spec.in \ + $(top_srcdir)/common/coverage/lcov.mak \ + $(top_srcdir)/common/cruft.mak \ + $(top_srcdir)/common/release.mak \ + $(top_srcdir)/common/win32.mak $(top_srcdir)/configure \ + $(top_srcdir)/win32/common/config.h.in AUTHORS COPYING \ + ChangeLog INSTALL NEWS TODO compile config.guess config.sub \ + depcomp install-sh ltmain.sh missing py-compile +@HAVE_PYGOBJECT_2_16_TRUE@am__append_1 = gstoption.la +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = win32/common/config.h gst-python.spec +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pyexecdir)" +LTLIBRARIES = $(pyexec_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +gstoption_la_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_gstoption_la_OBJECTS = gstoption_la-gstoptionmodule.lo +gstoption_la_OBJECTS = $(am_gstoption_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +gstoption_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gstoption_la_CFLAGS) \ + $(CFLAGS) $(gstoption_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_PYGOBJECT_2_16_TRUE@am_gstoption_la_rpath = -rpath $(pyexecdir) +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(gstoption_la_SOURCES) +DIST_SOURCES = $(gstoption_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ + +# include before EXTRA_DIST for win32 assignment +ACLOCAL_AMFLAGS = -I m4 -I common/m4 +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = common codegen gst examples plugin testsuite pkgconfig +common_cflags = $(PYTHON_INCLUDES) $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS) +common_ldflags = -module -avoid-version + +# the MANIFEST contains all win32 related files that should be disted +win32 = $(shell cat $(top_srcdir)/win32/MANIFEST) + +# wildcard is apparently not portable to other makes, hence the use of find +# these are library .def files with the symbols to export +win32defs = $(shell find $(top_srcdir)/win32/common -name '*.def') + +# wildcard is apparently not portable to other makes, hence the use of find +# these are files that need to be disted with CRLF line endings: +win32crlf = $(shell find $(top_srcdir)/win32 -name '*.dsw' -o -name '*.dsp') +pyexec_LTLIBRARIES = $(am__append_1) + +# GStreamer option bindings +gstoption_la_CFLAGS = $(common_cflags) +gstoption_la_LIBADD = $(common_libadd) +gstoption_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initgstoption|_PyGObject_API).*" + +gstoption_la_SOURCES = gstoptionmodule.c +EXTRA_DIST = \ + gstlibtoolimporter.py \ + pygst.py.in \ + gst-python.spec.in \ + gst-python.spec \ + RELEASE gst-python.doap \ + $(win32) + +BUILT_SOURCES = pygst.py +CLEANFILES = pygst.py pygst.pyc + +# make bz2 as well +AUTOMAKE_OPTIONS = dist-bzip2 +CRUFT_FILES = \ + $(top_builddir)/common/shave \ + $(top_builddir)/common/shave-libtool \ + $(top_builddir)/common/m4/libtool.m4 \ + $(top_builddir)/common/m4/ltoptions.m4 \ + $(top_builddir)/common/m4/ltsugar.m4 \ + $(top_builddir)/common/m4/ltversion.m4 \ + $(top_builddir)/common/m4/lt~obsolete.m4 + +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +win32/common/config.h: $(top_builddir)/config.status $(top_srcdir)/win32/common/config.h.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +gst-python.spec: $(top_builddir)/config.status $(srcdir)/gst-python.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-pyexecLTLIBRARIES: $(pyexec_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pyexecdir)" + @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pyexecdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pyexecdir)"; \ + } + +uninstall-pyexecLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pyexecdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pyexecdir)/$$f"; \ + done + +clean-pyexecLTLIBRARIES: + -test -z "$(pyexec_LTLIBRARIES)" || rm -f $(pyexec_LTLIBRARIES) + @list='$(pyexec_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +gstoption.la: $(gstoption_la_OBJECTS) $(gstoption_la_DEPENDENCIES) + $(AM_V_CCLD)$(gstoption_la_LINK) $(am_gstoption_la_rpath) $(gstoption_la_OBJECTS) $(gstoption_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstoption_la-gstoptionmodule.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +gstoption_la-gstoptionmodule.lo: gstoptionmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gstoption_la_CFLAGS) $(CFLAGS) -MT gstoption_la-gstoptionmodule.lo -MD -MP -MF $(DEPDIR)/gstoption_la-gstoptionmodule.Tpo -c -o gstoption_la-gstoptionmodule.lo `test -f 'gstoptionmodule.c' || echo '$(srcdir)/'`gstoptionmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gstoption_la-gstoptionmodule.Tpo $(DEPDIR)/gstoption_la-gstoptionmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstoptionmodule.c' object='gstoption_la-gstoptionmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gstoption_la_CFLAGS) $(CFLAGS) -c -o gstoption_la-gstoptionmodule.lo `test -f 'gstoptionmodule.c' || echo '$(srcdir)/'`gstoptionmodule.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LTLIBRARIES) config.h all-local +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pyexecdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-pyexecLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-exec-local install-pyexecLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-local uninstall-pyexecLTLIBRARIES + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local am--refresh check check-am clean \ + clean-generic clean-libtool clean-pyexecLTLIBRARIES ctags \ + ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ + dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-local \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-pyexecLTLIBRARIES install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-local uninstall-pyexecLTLIBRARIES + + +win32-debug: + @echo; \ + echo win32 = $(win32); \ + echo; \ + echo win32defs = $(win32defs); \ + echo; \ + echo win32crlf = $(win32crlf); \ + echo + +win32-check-crlf: + @echo Checking win32 files for CR LF line endings ...; \ + fail=0 ; \ + for each in $(win32crlf) ; do \ + result=`perl -e 'print grep(/\r\n/,<>)' "$$each" | wc -l`; \ + if test "$$result" = 0 ; then \ + echo $$each must be fixed to have CRLF line endings ; \ + fail=1; \ + fi ; \ + done ; \ + exit $$fail + +# make sure all symbols we export on linux are defined in the win32 .def too +# (don't care about other unixes for now, it's enough if it works on one of +# the linux build bots; we assume .so ) +check-exports: + @fail=0 ; \ + for l in $(win32defs); do \ + libbase=`basename "$$l" ".def"`; \ + libso=`find "$(top_builddir)" -name "$$libbase-@GST_MAJORMINOR@.so" | grep -v /_build/ | head -n1`; \ + libdef="$(top_srcdir)/win32/common/$$libbase.def"; \ + if test "x$$libso" != "x"; then \ + echo Checking symbols in $$libso; \ + if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \ + fail=1; \ + fi; \ + fi; \ + done ; \ + if test $$fail != 0; then \ + echo '-----------------------------------------------------------'; \ + echo 'Run this to update the .def files:'; \ + echo 'make check-exports 2>&1 | patch -p1'; \ + echo '-----------------------------------------------------------'; \ + fi; \ + exit $$fail + +# complain about nonportable printf format strings (%lld, %llu, %zu etc.) +check-nonportable-print-format: + @fail=0 ; \ + loc=`find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'`; \ + if test "x$$loc" != "x"; then \ + echo "Please fix the following print format strings:" ; \ + find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'; \ + fail=1; \ + fi; \ + exit $$fail + +dist-hook: check-exports win32-check-crlf + +release: dist + $(MAKE) $(PACKAGE)-$(VERSION).tar.gz.md5 + $(MAKE) $(PACKAGE)-$(VERSION).tar.bz2.md5 + +# generate md5 sum files +%.md5: % + md5sum $< > $@ + +# check that no marshal or enumtypes files are included +# this in turn ensures that distcheck fails for missing .list files which is currently +# shadowed when the corresponding .c and .h files are included. +distcheck-hook: + @test "x" = "x`find $(distdir) -name \*-enumtypes.[ch] | grep -v win32`" && \ + test "x" = "x`find $(distdir) -name \*-marshal.[ch]`" || \ + ( $(ECHO) "*** Leftover enumtypes or marshal files in the tarball." && \ + $(ECHO) "*** Make sure the following files are not disted:" && \ + find $(distdir) -name \*-enumtypes.[ch] | grep -v win32 && \ + find $(distdir) -name \*-marshal.[ch] && \ + false ) + +pygst.py: $(top_srcdir)/pygst.py.in Makefile + if test -f $@; then chmod +w $@; fi + sed -e "s|@PYGSTDIR\@|$(shell pwd)|g" \ + -e "s|@GST_MAJORMINOR\@|$(GST_MAJORMINOR)|g" \ + $< > $@ + chmod -w $@ + +# rewrite pygst path in installed pygst.py, install pth file. +# they go in pyexecdir, should make 64bit users happy +install-exec-local: Makefile + $(mkinstalldirs) $(DESTDIR)$(pyexecdir) + sed -e "s|@PYGSTDIR\@|$(PYEXECDIR)/gst-$(GST_MAJORMINOR)|g" \ + -e "s|@GST_MAJORMINOR\@|$(GST_MAJORMINOR)|g" \ + $(srcdir)/pygst.py.in > $(DESTDIR)$(pyexecdir)/pygst.py + chmod 644 $(DESTDIR)$(pyexecdir)/pygst.py + echo "gst-$(GST_MAJORMINOR)" > $(DESTDIR)$(pyexecdir)/pygst.pth + +uninstall-local: + @rm $(DESTDIR)/$(pyexecdir)/pygst.py > /dev/null 2>&1 || true + @rm $(DESTDIR)/$(pyexecdir)/pygst.pth > /dev/null 2>&1 || true + +check-valgrind: + cd testsuite/ && make check-valgrind + +check-torture: + @true +.PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload + +# run lcov from scratch, always +lcov-reset: + $(MAKE) lcov-run + $(MAKE) lcov-report + +# run lcov from scratch if the dir is not there +lcov: + $(MAKE) lcov-reset + +# reset run coverage tests +@GST_GCOV_ENABLED_TRUE@lcov-run: +@GST_GCOV_ENABLED_TRUE@ @-rm -rf lcov +@GST_GCOV_ENABLED_TRUE@ lcov --directory . --zerocounters +@GST_GCOV_ENABLED_TRUE@ -if test -d tests/check; then $(MAKE) -C tests/check inspect; fi +@GST_GCOV_ENABLED_TRUE@ -$(MAKE) check + +# generate report based on current coverage data +@GST_GCOV_ENABLED_TRUE@lcov-report: +@GST_GCOV_ENABLED_TRUE@ mkdir lcov +@GST_GCOV_ENABLED_TRUE@ lcov --compat-libtool --directory . --capture --output-file lcov/lcov.info +@GST_GCOV_ENABLED_TRUE@ lcov --list-full-path -l lcov/lcov.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d\| -f1 > lcov/remove +@GST_GCOV_ENABLED_TRUE@ lcov --list-full-path -l lcov/lcov.info | grep "tests/check/" | cut -d\| -f1 >> lcov/remove +@GST_GCOV_ENABLED_TRUE@ lcov --list-full-path -l lcov/lcov.info | grep "docs/plugins/" | cut -d\| -f1 >> lcov/remove +@GST_GCOV_ENABLED_TRUE@ lcov -r lcov/lcov.info `cat lcov/remove` > lcov/lcov.cleaned.info +@GST_GCOV_ENABLED_TRUE@ rm lcov/remove +@GST_GCOV_ENABLED_TRUE@ mv lcov/lcov.cleaned.info lcov/lcov.info +@GST_GCOV_ENABLED_TRUE@ genhtml -t "$(PACKAGE_STRING)" -o lcov --num-spaces 2 lcov/lcov.info + +@GST_GCOV_ENABLED_TRUE@lcov-upload: lcov +@GST_GCOV_ENABLED_TRUE@ rsync -rvz -e ssh --delete lcov/* gstreamer.freedesktop.org:/srv/gstreamer.freedesktop.org/www/data/coverage/lcov/$(PACKAGE) + +@GST_GCOV_ENABLED_FALSE@lcov-run: +@GST_GCOV_ENABLED_FALSE@ echo "Need to reconfigure with --enable-gcov" + +@GST_GCOV_ENABLED_FALSE@lcov-report: +@GST_GCOV_ENABLED_FALSE@ echo "Need to reconfigure with --enable-gcov" + +check-cruft: + @cruft_files=""; cruft_dirs=""; \ + for f in $(CRUFT_FILES); do \ + if test -e $$f; then \ + cruft_files="$$cruft_files $$f"; \ + fi \ + done; \ + for d in $(CRUFT_DIRS); do \ + if test -e $$d; then \ + cruft_dirs="$$cruft_dirs $$d"; \ + fi \ + done; \ + if test "x$$cruft_files$$cruft_dirs" != x; then \ + echo; \ + echo "**** CRUFT ALERT *****"; \ + echo; \ + echo "The following files and directories may not be needed any "; \ + echo "longer (usually because a plugin has been merged into "; \ + echo "another plugin, moved to a different module, or been "; \ + echo "renamed), and you probably want to clean them up if you "; \ + echo "don't have local changes: "; \ + echo; \ + for f in $$cruft_files; do echo "file $$f"; done; \ + echo; \ + for d in $$cruft_dirs; do echo "directory $$d"; done; \ + echo; \ + echo "'make clean-cruft' will remove these for you."; \ + echo; \ + fi + +clean-cruft-dirs: + @for d in $(CRUFT_DIRS); do \ + if test -e $$d; then \ + rm -r "$$d" && echo "Removed directory $$d"; \ + fi \ + done + +clean-cruft-files: + @for f in $(CRUFT_FILES); do \ + if test -e $$f; then \ + rm "$$f" && echo "Removed file $$f"; \ + fi \ + done + +clean-cruft: clean-cruft-dirs clean-cruft-files + +# also might want to add this to your Makefile.am: +# +# all-local: check-cruft + +all-local: check-cruft + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..c479baa --- /dev/null +++ b/NEWS @@ -0,0 +1,355 @@ +This is GStreamer Python Bindings 0.10.22, "Ninety Tons of Thunder" + +Changes since 0.10.21: + + * pad probes working properly with recent GStreamer + * fixes for encoding profiles and encodebin + * build fixes + * install pygst.h, pygstminiobject.h and other headers + so they can be used by other python bindings such the + ones for gstreamer-editing-services + +Bugs fixed since 0.10.21: + + * 587432 : Update .defs for changed API + * 639421 : remuxer.py: do not crash when clicking open without having selected a file + * 639423 : remuxer.py: list files named *.og[gvax], not only *.ogg + * 639427 : remuxer.py: allow more than one stream of the same type + * 640207 : Fix make check when locale is not the default one + * 640341 : gst-python 0.10.21 does not compile + * 640410 : codegen: Respect ignore-type for miniobjects + * 640837 : GStreamer-python fails to build + * 649227 : Check for Py_None when setting a miniobject + * 650986 : Fix overrides of pad probes + * 650987 : 0.10.34 gstreamer has pad_probe counting issues + * 656289 : We should be able to reuse (Py)GstMiniObject and its subclasses from outside of pygst + * 657435 : Does not add the include path to the pkg-config file, needed in an uninstalled setup by g-e-s + +Changes since 0.10.20: + + * gstreamer core/base 0.10.32 API additions + * Fix GstDiscover methods + +Changes since 0.10.19: + + * libpython loading fixes + * MacOSX standard python support + +Changes since 0.10.18: + + * Updates to 0.10.29/0.10.30 core/base API addition + +Changes since 0.10.17: + + * Updates to 0.10.26 core/base API addition + +Bugs fixed since 0.10.17: + + * 592459 : info.print_info() uses info.tags.pop() to get values, but pop is destructive, so calling print_info twice can return different results + * 599818 : Import of pygst fails with Element missing + +Changes since 0.10.16: + + * Fix leak in gst_base_sink_get_last_buffer() + * Fix linking of pygstminiobject + * Add test_audio.py example + * Fix deadlocks calling gst_pad_link() + +Bugs fixed since 0.10.16: + + * 590348 : [audio (and other modules)] can't use pygstminiobject ! + * 590803 : checks fail in non-English locale + * 592447 : memory leak on certain pipelines with appsink + +Changes since 0.10.15: + + * Update bindings for GStreamer 0.10.24 + * Fixes for the python plugin loader + +Bugs fixed since 0.10.15: + + * 580992 : gst_preset_get_preset_names not wrapped in gst-python + * 583378 : libgstpython.so causes a segfault + * 583607 : Error when building from tarball + * 584445 : gst.TagList getters and setters should convert unicode ob... + +Changes since 0.10.14: + + * Support new API in core/base + * Fixes for python 2.6 + * Other bug-fixes and improvements + +Bugs fixed since 0.10.14: + + * 304361 : Python plugin loader + * 576145 : pygst programs skip python plugins on registry update + * 514717 : memleak in Pad.set_blocked_async() + * 571156 : gst_tag_get_type not wrapped + * 571380 : Allow user to specify filename and line number for gst_de... + * 572487 : Fix licensing screwups + * 574251 : leaks the flow name + * 574258 : _wrap_gst_install_plugins_sync might leak details + * 574272 : Python plugin loader causes SIGSEGV if " import gst " fails + * 576505 : not all gst_adapter_* methods are wrapped + * 577735 : python bins with do_handle_message leak messages + * 578435 : gst-python pkgconfig file lies about needing pygtk + * 578731 : Python plugin loader deadlocks registry scanning + * 578848 : Wrap new core/base API + * 579183 : freshly created QUERY_SEEKING is immutable + * 579325 : gstlibtoolimporter is not disted + * 579383 : gst-python doesn't compile with glib < = 2.16.0 + * 581546 : Elements do_query function is broken + * 581729 : Fails to build with previous core/base releases (0.10.22) + * 581737 : Python examples need to take the GDK lock + * 579416 : Nasty gst-python deadlock + * 579455 : gst.TIME_ARGS doesn't validate input + * 576546 : Problems with Python 2.6 + +Changes since 0.10.13: + + * Handle keep-refcount for GBoxed arguments + * Mark gst.message* that take ownership of the gst.Structure/gst.TagList + * Wrap new API in Core and Base + * Various other bug fixes and improvements + +Bugs fixed since 0.10.13: + + * 543961 : Memory leak in gst.Bin.do_handle_message + * 553131 : Import modules in correct order + * 553134 : Assumes wrong RTLD constants for Linux/MIPS + * 554545 : gst.Pad methods that return a new buffer as function argu... + * 556054 : codegen: Add 'keep-refcount' handling for GBoxed arguments + * 559406 : Add proxy for gst_base_transform_transform_size + * 559768 : Fix gst-python on systems that don't support RTLD_GLOBAL ... + * 564580 : Memory leak in gst.Structure.keys() + * 566903 : gst.Pad.iterate_internal_links may raise critical warning... + +Changes since 0.10.12: + + * Updated for GStreamer 0.10.21 API + * New examples + * Fix double import issues on OS/X + * Bug fixes + +Bugs fixed since 0.10.12: + + * 553131 : Import modules in correct order + * 553134 : Assumes wrong RTLD constants for Linux/MIPS + * 461838 : Fails to build on Mac OS X i686 with multiply defined sym... + * 517993 : pipeline-tester should not be hardcoded to ALSA + * 540221 : Empty GstMiniObject GValues raise a SystemError + * 546689 : Add GST_DEBUG_BIN_TO_DOT_FILE* to python bindings + * 549450 : caps.append_structure() gives warnings if structure is no... + +Changes since 0.10.11: + + * Build fixes + * make gst.Fraction do simplification like GstFraction does in C + * Wrap gst_type_find_register + * Various bug-fixes + +Bugs fixed since 0.10.11: + + * 529728 : wrap gst_type_find_register + * 529731 : release the GIL around gst_element_factory_make + * 531697 : wrong indentation + * 532809 : gst-python version of gst.Fraction doesn't simplify + * 534888 : gst-python refcount error with gst_event_new_tag + +Changes since 0.10.10: + + * Wrap gst.Pad.start_task + * New videomixer example + * Various other fixes + +Bugs fixed since 0.10.10: + + * 512916 : python_do_pending_calls timer is apparently redundant + * 514717 : memleak in Pad.set_blocked_async() + +Changes since 0.10.9: + + * Wrap new API for 0.10.16 GStreamer and Base releases. + * New gst.pbutils module wraps the gst-plugins-base pbutils library. + * Rework gst_pad_add_*probe function wrapping to avoid leaks. + * Various build fixes. + +Bugs fixed since 0.10.9: + + * 509522 : New gst-python bindings don't compile with python2.4 + * 472822 : Wrap -base utils helper library + * 504786 : pad probes leak refs to their data + * 509766 : generated win32/common/config.h miss some defines + * 510437 : Build failure due to missing Python.h + +Changes since 0.10.8 + * Major crasher fixed when using latest pygobject + * Build system for Visual Studio 6 + * Added wrapping for 0.10.15 gstreamer core/base + +Bugs fixed since 0.10.8: + + * 490195 : [gst.URIHandler] interfaces with class-global virtual met... + * 425847 : Silently overrides some functions of default module optparse + +Changes since 0.10.7: + +Bugs fixed since 0.10.7: + + * 398567 : undefined symbol: libxml_xmlDocPtrWrap + * 343980 : [solaris] import gst crash python + * 363795 : Impossible to reset a pad to " unnegotiated " from Python + * 380966 : Discoverer doesn't cope well with demuxers that don't cre... + * 381243 : No checks are made when converting from gst.Fraction to G... + * 385841 : Handle gchar** (GStrv) arguments + * 410838 : gst-python doesn't handle gst.Buffers in GValues (e.g. in... + * 418222 : New parameter to the discoverer to change the default max... + * 432521 : [gst-discover] show audio and video length in ms + * 433375 : [win32] autogenerated win32/common/config.h needed + * 436620 : get_uri_type methods should return enum objects + * 446674 : API break + * 450117 : [PATCH] gst.event_new_custom needs to copy structure as C... + * 451645 : gst.Buffer.stamp() is broked + * 454259 : Requestable Pad Segfaults When No Name Is Supplied + * 376996 : [PATCH] Fully implement GstPropertyProbe interface + * 415003 : build warnings against python 2.5 on x86_64 + * 428299 : Allow python elements to implement pad queries + +Changes since 0.10.6: + * Threadsafe fix + +Bugs fixed since 0.10.6: + + * 383805 : segfault with videobalance + * 401051 : Fails to build with gst-plugins-base < 0.10.11 + +Changes since 0.10.5: + + * Can now build without requiring pygtk and its dependencies + * installation fixes + +Bugs fixed since 0.10.5: + + * 355150 : Expose GST_PARAM_CONTROLLABLE in the bindings + * 343980 : import gst crash python + * 346190 : allow build/install without pygtk (ie pygobject) + * 349623 : Build failure due to "discards qualifiers from pointer ta... + * 359375 : variable 'interface' results in syntax error with MingW + * 362011 : [patch] Indentation typo in examples/bps.py + * 362183 : Please remove examples/gst123 + * 362202 : [patch] A replacement of examples/vorbisplay.py for 0.10 + * 362272 : [patch] Ports examples/audioconcat.py to 0.10 + * 362290 : [patch] Ports examples/cp.py to 0.10 + * 371969 : [Discoverer] Issues with demuxers that don't create pads ... + * 348416 : remuxer example should use normal seek + * 349107 : gst.BaseSrc can't negotiate with ffmpegcolorspace + +Changes since 0.10.4: + + * now requires glib >= 2.8 + * switch to up-to-date pygtk codegenerator + +Bugs fixed since 0.10.4: + + * 319871 : drop GIL state lock when doing something that can cause a... + * 338982 : python refcounting problems in gstpad.override + * 313138 : Need to update constructors to use properties + * 329075 : __gsignals__ doesn' t work in classes derived from gst.Pi... + * 334548 : Proper use of PyTuple and PyList for return values + * 339040 : [patch] Error domains from gsterror are not wrapped + * 339248 : Wrapper for virtual method GstBaseTransform.get_unit_size + * 339308 : MiniObject arguments for virtual methods shouldn't have t... + * 339767 : An example of subclassing GstBaseTransform + * 339938 : filesrc.py example still uses 0.8 API + * 341114 : pygst.require uses asserts rather than real error checking + * 341799 : patch to make gst-python work on OSes without dl.so + * 342493 : audio-controller.py needs slight updates for 0.10 + * 343652 : gstfile.py sometimes results in " *** glibc detected *** c... + +Changes since 0.10.3: + + * Conditional compile of core API additions + * wrapped gst.BaseSrc and gst.PushSrc + +Bugs fixed since 0.10.3: + + * 339010 : segfault/undefined behavior with optional GstCaps args + * 337876 : TagList does not retreive tags by key if 2 or more tags w... + +API added since 0.10.3: + + * gst.get_gst_version() + * gst.get_pygst_version() + +Changes since 0.10.2: + + * Backwards compatibility with older GStreamer installations + * Wrapping of new API in GStreamer + * Bug-fixes and enhancements + +Bugs fixed since 0.10.2: + + * 329110 : gst-python sets RTLD_GLOBAL when importing, but doesn't s... + * 332586 : pygst.require should raise an error based on StandardErro... + * 333055 : PYGIL_API_IS_BUGGY is already defined in pygobect.h + * 331616 : gst.version and gst.gst_version differ + +Changes since 0.10.1: + + * Parallel installability with 0.8.x series + * Threadsafe design and API + * allow fractions in structures + * added vmethods for base classes + +Bugs fixed since 0.10.1: + + * 325459 : Fractions cannot be used as values for gst.Structure fileds + +Changes since 0.10.0: + + * added discoverer + * updated for core API additions + +API changed since 0.10.0: + + * gst.extend.discoverer + * wrapped gst_version() + * wrapped gst_type_find_factory_get_list() + * wrapped gst_mixer_options_get_values() + * wrapped gst_dp_*() + * wrapped gst_element_factory_get_static_pad_templates() + +Changes since 0.9.6: + + * Updates for API changes + +Bugs fixed since 0.9.6: + + * 322250 : Remove *_full wrappers + +Changes since 0.9.5: + + * added FractionRange + * updated for API changes + +Bugs fixed since 0.9.5: + + * 318793 : check whether new date/tag API needs wrapping + * 321839 : pipeline hangs in get_state after changing trival pipeline + +Changes since 0.9.4: + + * Remove mini-object caching, fixes crashes + * added gst.TagList + * added gst.TIME_ARGS + +Bugs fixed since 0.9.4: + + * 306817 : No way to set tags in gst-python + * 320357 : element_query_duration not wrapped + +Bugs fixed since 0.9.3: + + * 315433 : gst.element_factory_make and some other functions should ... + * 318684 : [PATCH] reference leaks when using PyList_Append to popul... + * 318692 : gst-python fails to build with python 2.3 diff --git a/README b/README new file mode 100644 index 0000000..92ffc66 --- /dev/null +++ b/README @@ -0,0 +1 @@ +This file will be autogenerated. Please read README-docs. diff --git a/RELEASE b/RELEASE new file mode 100644 index 0000000..692cabc --- /dev/null +++ b/RELEASE @@ -0,0 +1,79 @@ + +Release notes for GStreamer Python bindings 0.10.22 "Ninety Tons of Thunder" + + + +The GStreamer team is proud to announce a new release +in the 0.10.x stable series of the +GStreamer Python Bindings. + + +The 0.10.x series is a stable series targeted at end users. + + + + +Features of this release + + * pad probes working properly with recent GStreamer + * fixes for encoding profiles and encodebin + * build fixes + * install pygst.h, pygstminiobject.h and other headers so they can be used by other python bindings such the ones for gstreamer-editing-services + +Bugs fixed in this release + + * 587432 : Update .defs for changed API + * 639421 : remuxer.py: do not crash when clicking open without having selected a file + * 639423 : remuxer.py: list files named *.og[gvax], not only *.ogg + * 639427 : remuxer.py: allow more than one stream of the same type + * 640207 : Fix make check when locale is not the default one + * 640341 : gst-python 0.10.21 does not compile + * 640410 : codegen: Respect ignore-type for miniobjects + * 640837 : GStreamer-python fails to build + * 649227 : [python] Check for Py_None when setting a miniobject + * 650986 : [gst-python] Fix overrides of pad probes + * 650987 : 0.10.34 gstreamer has pad_probe counting issues + * 656289 : We should be able to reuse (Py)GstMiniObject and its subclasses from outside of pygst + * 657435 : Does not add the include path to the pkg-config file, needed in an uninstalled setup by g-e-s + +Download + +You can find source releases of gst-python in the download directory: +http://gstreamer.freedesktop.org/src/gst-python/ + +GStreamer Homepage + +More details can be found on the project's website: +http://gstreamer.freedesktop.org/ + +Support and Bugs + +We use GNOME's bugzilla for bug reports and feature requests: +http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer + +Developers + +GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned from there. +Interested developers of the core library, plug-ins, and applications should +subscribe to the gstreamer-devel list. If there is sufficient interest we +will create more lists as necessary. + + +Applications + +Contributors to this release + + * Andoni Morales Alastruey + * Arun Raghavan + * David Schleef + * Edward Hervey + * Luis de Bethencourt + * Mark Nauwelaerts + * Sebastian Dröge + * Stefan Kost + * Stefan Sauer + * Thiago Santos + * Thibault Saunier + * Tim-Philipp Müller + * Vincent Penquerc'h +  \ No newline at end of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..c882122 --- /dev/null +++ b/TODO @@ -0,0 +1 @@ +Add a pygst-private.h and put some common stuff in there. diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..85e7805 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,122 @@ +## 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 ],dnl +[AC_MSG_RESULT(found) +$1],dnl +[AC_MSG_RESULT(not found) +$2]) +CPPFLAGS="$save_CPPFLAGS" +]) + +dnl a macro to check for ability to embed python +dnl AM_CHECK_PYTHON_LIBS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) +dnl function also defines PYTHON_LIBS +AC_DEFUN([AM_CHECK_PYTHON_LIBS], +[AC_REQUIRE([AM_CHECK_PYTHON_HEADERS]) +AC_MSG_CHECKING(for libraries required to embed python) + +dnl deduce PYTHON_LIBS +if $PYTHON-config --help 2>/dev/null; then + PYTHON_LIBS=`$PYTHON-config --ldflags 2>/dev/null` + PYTHON_LIB=`$PYTHON -c "import distutils.sysconfig as s; print s.get_python_lib(standard_lib=1)"` + if echo "$host_os" | grep darwin >/dev/null 2>&1; then + dnl OSX is a pain. Python as shipped by apple installs libpython in /usr/lib + dnl so we hardcode that. Other systems can use --with-libpython-dir to + dnl overrid this. + PYTHON_LIB_LOC=/usr/lib + else + PYTHON_LIB_LOC=$PYTHON_LIB/config + + # default to prefix/lib for distros that don't have a link in + # .../pythonX.Y/config/ + if test ! -e $PYTHON_LIB_LOC/libpython${PYTHON_VERSION}.so; then + PYTHON_LIB_LOC=${py_prefix}/lib + fi + fi +else + PYTHON_LIBS="-L${py_prefix}/lib -lpython${PYTHON_VERSION}" + PYTHON_LIB_LOC="${py_prefix}/lib" +fi + +AC_ARG_WITH([libpython-dir], + AS_HELP_STRING([--with-libpython-dir], [the directory containing libpython${PYTHON_VERSION}]), + [ + PYTHON_LIB_LOC=`echo "$withval" | sed -e 's/\/$//g'` + ] +) + +if echo "$host_os" | grep darwin >/dev/null 2>&1; then + dnl workaround libtool brokenness under OSX + PYTHON_LIB_SUFFIX=\\\"dylib\\\" +else + PYTHON_LIB_SUFFIX=G_MODULE_SUFFIX +fi + +AC_SUBST(PYTHON_LIBS) +AC_SUBST(PYTHON_LIB_LOC) +AC_SUBST(PYTHON_LIB_SUFFIX) +dnl check if the headers exist: +save_LIBS="$LIBS" +LIBS="$LIBS $PYTHON_LIBS" +AC_TRY_LINK_FUNC(Py_Initialize, dnl + [LIBS="$save_LIBS"; AC_MSG_RESULT(yes); $1], dnl + [LIBS="$save_LIBS"; AC_MSG_RESULT(no); $2]) + +]) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..6a80734 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1287 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([common/m4/as-ac-expand.m4]) +m4_include([common/m4/as-compiler-flag.m4]) +m4_include([common/m4/as-version.m4]) +m4_include([common/m4/gst-args.m4]) +m4_include([common/m4/gst-error.m4]) +m4_include([common/m4/gst-feature.m4]) +m4_include([common/m4/gst-package-release-datetime.m4]) +m4_include([common/m4/gst-plugindir.m4]) +m4_include([common/m4/gst-valgrind.m4]) +m4_include([common/m4/gst.m4]) +m4_include([common/m4/pkg.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([acinclude.m4]) diff --git a/codegen/Makefile.am b/codegen/Makefile.am new file mode 100644 index 0000000..dd3eea0 --- /dev/null +++ b/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/codegen/Makefile.in b/codegen/Makefile.in new file mode 100644 index 0000000..208b34b --- /dev/null +++ b/codegen/Makefile.in @@ -0,0 +1,478 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = codegen +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +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 + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu codegen/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu codegen/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/codegen/__init__.py b/codegen/__init__.py new file mode 100644 index 0000000..cfa896e --- /dev/null +++ b/codegen/__init__.py @@ -0,0 +1,15 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- + +__all__ = [ + 'argtypes', + 'codegen', + 'definitions', + 'defsparser', + 'docextract', + 'docgen', + 'h2def', + 'mergedefs', + 'mkskel', + 'override', + 'scmexpr' +] diff --git a/codegen/argtypes.py b/codegen/argtypes.py new file mode 100644 index 0000000..4dc5faa --- /dev/null +++ b/codegen/argtypes.py @@ -0,0 +1,1085 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +import string +import keyword +import struct + +class VarList: + """Nicely format a C variable list""" + def __init__(self): + self.vars = {} + def add(self, ctype, name): + if self.vars.has_key(ctype): + self.vars[ctype] = self.vars[ctype] + (name,) + else: + self.vars[ctype] = (name,) + def __str__(self): + ret = [] + for type in self.vars.keys(): + ret.append(' ') + ret.append(type) + ret.append(' ') + ret.append(string.join(self.vars[type], ', ')) + ret.append(';\n') + if ret: + ret.append('\n') + return string.join(ret, '') + return '' + +class WrapperInfo: + """A class that holds information about variable defs, code + snippets, etcd for use in writing out the function/method + wrapper.""" + def __init__(self): + self.varlist = VarList() + self.parsestr = '' + self.parselist = ['', 'kwlist'] + self.codebefore = [] + self.codeafter = [] + self.arglist = [] + self.kwlist = [] + def get_parselist(self): + return string.join(self.parselist, ', ') + def get_codebefore(self): + return string.join(self.codebefore, '') + def get_codeafter(self): + return string.join(self.codeafter, '') + def get_arglist(self): + return string.join(self.arglist, ', ') + def get_varlist(self): + return str(self.varlist) + def get_kwlist(self): + ret = ' static char *kwlist[] = { %s };\n' % \ + string.join(self.kwlist + [ 'NULL' ], ', ') + if not self.get_varlist(): + ret = ret + '\n' + return ret + + def add_parselist(self, codes, parseargs, keywords): + self.parsestr = self.parsestr + codes + for arg in parseargs: + self.parselist.append(arg) + for kw in keywords: + if keyword.iskeyword(kw): + kw = kw + '_' + self.kwlist.append('"%s"' % kw) + +class ArgType: + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + """Add code to the WrapperInfo instance to handle + parameter.""" + raise RuntimeError, "write_param not implemented for %s" % \ + self.__class__.__name__ + def write_return(self, ptype, ownsreturn, info): + """Adds a variable named ret of the return type to + info.varlist, and add any required code to info.codeafter to + convert the return value to a python object.""" + raise RuntimeError, "write_return not implemented for %s" % \ + self.__class__.__name__ + +class NoneArg(ArgType): + def write_return(self, ptype, ownsreturn, info): + info.codeafter.append(' Py_INCREF(Py_None);\n' + + ' return Py_None;') + +class StringArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + if pdflt != 'NULL': pdflt = '"' + pdflt + '"' + info.varlist.add('char', '*' + pname + ' = ' + pdflt) + else: + info.varlist.add('char', '*' + pname) + info.arglist.append(pname) + if pnull: + info.add_parselist('z', ['&' + pname], [pname]) + else: + info.add_parselist('s', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + if ownsreturn: + # have to free result ... + info.varlist.add('gchar', '*ret') + info.codeafter.append(' if (ret) {\n' + + ' PyObject *py_ret = PyString_FromString(ret);\n' + + ' g_free(ret);\n' + + ' return py_ret;\n' + + ' }\n' + + ' Py_INCREF(Py_None);\n' + + ' return Py_None;') + else: + info.varlist.add('const gchar', '*ret') + info.codeafter.append(' if (ret)\n' + + ' return PyString_FromString(ret);\n'+ + ' Py_INCREF(Py_None);\n' + + ' return Py_None;') + +class UCharArg(ArgType): + # allows strings with embedded NULLs. + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('guchar', '*' + pname + ' = "' + pdflt + '"') + else: + info.varlist.add('guchar', '*' + pname) + info.varlist.add('int', pname + '_len') + info.arglist.append(pname) + if pnull: + info.add_parselist('z#', ['&' + pname, '&' + pname + '_len'], + [pname]) + else: + info.add_parselist('s#', ['&' + pname, '&' + pname + '_len'], + [pname]) + +class CharArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('char', pname + " = '" + pdflt + "'") + else: + info.varlist.add('char', pname) + info.arglist.append(pname) + info.add_parselist('c', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('gchar', 'ret') + info.codeafter.append(' return PyString_FromStringAndSize(&ret, 1);') +class GUniCharArg(ArgType): + ret_tmpl = ('#if !defined(Py_UNICODE_SIZE) || Py_UNICODE_SIZE == 2\n' + ' if (ret > 0xffff) {\n' + ' PyErr_SetString(PyExc_RuntimeError, "returned character can not be represented in 16-bit unicode");\n' + ' return NULL;\n' + ' }\n' + '#endif\n' + ' py_ret = (Py_UNICODE)ret;\n' + ' return PyUnicode_FromUnicode(&py_ret, 1);\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('gunichar', pname + " = '" + pdflt + "'") + else: + info.varlist.add('gunichar', pname) + info.arglist.append(pname) + info.add_parselist('O&', ['pyg_pyobj_to_unichar_conv', '&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('gunichar', 'ret') + info.varlist.add('Py_UNICODE', 'py_ret') + info.codeafter.append(self.ret_tmpl) + + +class IntArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('int', pname + ' = ' + pdflt) + else: + info.varlist.add('int', pname) + info.arglist.append(pname) + info.add_parselist('i', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('int', 'ret') + info.codeafter.append(' return PyInt_FromLong(ret);') + +class UIntArg(ArgType): + dflt = (' if (py_%(name)s) {\n' + ' if (PyLong_Check(py_%(name)s))\n' + ' %(name)s = PyLong_AsUnsignedLong(py_%(name)s);\n' + ' else if (PyInt_Check(py_%(name)s))\n' + ' %(name)s = PyInt_AsLong(py_%(name)s);\n' + ' else\n' + ' PyErr_SetString(PyExc_TypeError, "Parameter \'%(name)s\' must be an int or a long");\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n' + ' }\n') + before = (' if (PyLong_Check(py_%(name)s))\n' + ' %(name)s = PyLong_AsUnsignedLong(py_%(name)s);\n' + ' else if (PyInt_Check(py_%(name)s))\n' + ' %(name)s = PyInt_AsLong(py_%(name)s);\n' + ' else\n' + ' PyErr_SetString(PyExc_TypeError, "Parameter \'%(name)s\' must be an int or a long");\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if not pdflt: + pdflt = '0'; + + info.varlist.add(ptype, pname + ' = ' + pdflt) + info.codebefore.append(self.dflt % {'name':pname}) + info.varlist.add('PyObject', "*py_" + pname + ' = NULL') + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + info.codeafter.append(' return PyLong_FromUnsignedLong(ret);') + +class SizeArg(ArgType): + + if struct.calcsize('P') <= struct.calcsize('l'): + llp64 = True + else: + llp64 = False + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(ptype, pname + ' = ' + pdflt) + else: + info.varlist.add(ptype, pname) + info.arglist.append(pname) + if self.llp64: + info.add_parselist('k', ['&' + pname], [pname]) + else: + info.add_parselist('K', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + if self.llp64: + info.codeafter.append(' return PyLong_FromUnsignedLongLong(ret);\n') + else: + info.codeafter.append(' return PyLong_FromUnsignedLong(ret);\n') + +class SSizeArg(ArgType): + + if struct.calcsize('P') <= struct.calcsize('l'): + llp64 = True + else: + llp64 = False + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(ptype, pname + ' = ' + pdflt) + else: + info.varlist.add(ptype, pname) + info.arglist.append(pname) + if self.llp64: + info.add_parselist('l', ['&' + pname], [pname]) + else: + info.add_parselist('L', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + if self.llp64: + info.codeafter.append(' return PyLong_FromLongLong(ret);\n') + else: + info.codeafter.append(' return PyLong_FromLong(ret);\n') + +class LongArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(ptype, pname + ' = ' + pdflt) + else: + info.varlist.add(ptype, pname) + info.arglist.append(pname) + info.add_parselist('l', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + info.codeafter.append(' return PyInt_FromLong(ret);\n') + +class BoolArg(IntArg): + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('int', 'ret') + info.codeafter.append(' return PyBool_FromLong(ret);\n') + +class TimeTArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('time_t', pname + ' = ' + pdflt) + else: + info.varlist.add('time_t', pname) + info.arglist.append(pname) + info.add_parselist('i', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('time_t', 'ret') + info.codeafter.append(' return PyInt_FromLong(ret);') + +class ULongArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('unsigned long', pname + ' = ' + pdflt) + else: + info.varlist.add('unsigned long', pname) + info.arglist.append(pname) + info.add_parselist('k', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype, 'ret') + info.codeafter.append(' return PyLong_FromUnsignedLong(ret);\n') + +class UInt32Arg(ULongArg): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + ULongArg.write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info) + ## if sizeof(unsigned long) > sizeof(unsigned int), we need to + ## check the value is within guint32 range + if struct.calcsize('L') > struct.calcsize('I'): + info.codebefore.append(( + ' if (%(pname)s > G_MAXUINT32) {\n' + ' PyErr_SetString(PyExc_ValueError,\n' + ' "Value out of range in conversion of"\n' + ' " %(pname)s parameter to unsigned 32 bit integer");\n' + ' return NULL;\n' + ' }\n') % vars()) + +class Int64Arg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('gint64', pname + ' = ' + pdflt) + else: + info.varlist.add('gint64', pname) + info.arglist.append(pname) + info.add_parselist('L', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('gint64', 'ret') + info.codeafter.append(' return PyLong_FromLongLong(ret);') + +class UInt64Arg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('guint64', pname + ' = ' + pdflt) + else: + info.varlist.add('guint64', pname) + info.arglist.append(pname) + info.add_parselist('K', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('guint64', 'ret') + info.codeafter.append(' return PyLong_FromUnsignedLongLong(ret);') + + +class DoubleArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('double', pname + ' = ' + pdflt) + else: + info.varlist.add('double', pname) + info.arglist.append(pname) + info.add_parselist('d', ['&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('double', 'ret') + info.codeafter.append(' return PyFloat_FromDouble(ret);') + +class FileArg(ArgType): + nulldflt = (' if (py_%(name)s == Py_None)\n' + ' %(name)s = NULL;\n' + ' else if (py_%(name)s && PyFile_Check(py_%(name)s)\n' + ' %s = PyFile_AsFile(py_%(name)s);\n' + ' else if (py_%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a file object or None");\n' + ' return NULL;\n' + ' }') + null = (' if (py_%(name)s && PyFile_Check(py_%(name)s)\n' + ' %(name)s = PyFile_AsFile(py_%(name)s);\n' + ' else if (py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a file object or None");\n' + ' return NULL;\n' + ' }\n') + dflt = (' if (py_%(name)s)\n' + ' %(name)s = PyFile_AsFile(py_%(name)s);\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + if pdflt: + info.varlist.add('FILE', '*' + pname + ' = ' + pdflt) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.nulldflt % {'name':pname}) + else: + info.varlist.add('FILE', '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname) + info.codebefore.append(self.null & {'name':pname}) + info.arglist.appned(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + if pdflt: + info.varlist.add('FILE', '*' + pname + ' = ' + pdflt) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.dflt % {'name':pname}) + info.arglist.append(pname) + else: + info.varlist.add('PyObject', '*' + pname) + info.arglist.append('PyFile_AsFile(' + pname + ')') + info.add_parselist('O!', ['&PyFile_Type', '&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('FILE', '*ret') + info.codeafter.append(' if (ret)\n' + + ' return PyFile_FromFile(ret, "", "", fclose);\n' + + ' Py_INCREF(Py_None);\n' + + ' return Py_None;') + +class EnumArg(ArgType): + enum = (' if (pyg_enum_get_value(%(typecode)s, py_%(name)s, (gint *)&%(name)s))\n' + ' return NULL;\n') + def __init__(self, enumname, typecode): + self.enumname = enumname + self.typecode = typecode + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(self.enumname, pname + ' = ' + pdflt) + else: + info.varlist.add(self.enumname, pname) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.enum % { 'typecode': self.typecode, + 'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]); + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('gint', 'ret') + info.codeafter.append(' return pyg_enum_from_gtype(%s, ret);' % self.typecode) + +class FlagsArg(ArgType): + flag = (' if (%(default)spyg_flags_get_value(%(typecode)s, py_%(name)s, (gint *)&%(name)s))\n' + ' return NULL;\n') + def __init__(self, flagname, typecode): + self.flagname = flagname + self.typecode = typecode + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add(self.flagname, pname + ' = ' + pdflt) + default = "py_%s && " % (pname,) + else: + info.varlist.add(self.flagname, pname) + default = "" + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.flag % {'default':default, + 'typecode':self.typecode, + 'name':pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('guint', 'ret') + info.codeafter.append(' return pyg_flags_from_gtype(%s, ret);' % self.typecode) + +class ObjectArg(ArgType): + # should change these checks to more typesafe versions that check + # a little further down in the class heirachy. + nulldflt = (' if ((PyObject *)py_%(name)s == Py_None)\n' + ' %(name)s = NULL;\n' + ' else if (py_%(name)s && pygobject_check(py_%(name)s, &Py%(type)s_Type))\n' + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + ' else if (py_%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + null = (' if (py_%(name)s && pygobject_check(py_%(name)s, &Py%(type)s_Type))\n' + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + ' else if ((PyObject *)py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + dflt = ' if (py_%(name)s)\n' \ + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + def __init__(self, objname, parent, typecode): + self.objname = objname + self.cast = string.replace(typecode, '_TYPE_', '_', 1) + self.parent = parent + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + if pdflt: + info.varlist.add(self.objname, '*' + pname + ' = ' + pdflt) + info.varlist.add('PyGObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.nulldflt % {'name':pname, + 'cast':self.cast, + 'type':self.objname}) + else: + info.varlist.add(self.objname, '*' + pname + ' = NULL') + info.varlist.add('PyGObject', '*py_' + pname) + info.codebefore.append(self.null % {'name':pname, + 'cast':self.cast, + 'type':self.objname}) + if ptype.endswith('*'): + typename = ptype[:-1] + try: + const, typename = typename.split('const-') + except ValueError: + const = '' + if typename != ptype: + info.arglist.append('(%s *) %s' % (ptype[:-1], pname)) + else: + info.arglist.append(pname) + + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + if pdflt: + info.varlist.add(self.objname, '*' + pname + ' = ' + pdflt) + info.varlist.add('PyGObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.dflt % {'name':pname, + 'cast':self.cast}) + info.arglist.append(pname) + info.add_parselist('O!', ['&Py%s_Type' % self.objname, + '&py_' + pname], [pname]) + else: + info.varlist.add('PyGObject', '*' + pname) + info.arglist.append('%s(%s->obj)' % (self.cast, pname)) + info.add_parselist('O!', ['&Py%s_Type' % self.objname, + '&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + if ptype.endswith('*'): + typename = ptype[:-1] + try: + const, typename = typename.split('const-') + except ValueError: + const = '' + info.varlist.add(typename, '*ret') + if ownsreturn: + info.varlist.add('PyObject', '*py_ret') + # < GLib 2.8: using our custom _new and _unref functions + # makes sure we update the proper GstObject refcount + info.codeafter.append(' py_ret = pygobject_new((GObject *)ret);\n' + ' if (ret != NULL)\n' + ' g_object_unref((GObject *)ret);\n' + ' return py_ret;') + else: + info.codeafter.append(' /* pygobject_new handles NULL checking */\n' + + ' return pygobject_new((GObject *)ret);') + +class MiniObjectArg(ArgType): + # should change these checks to more typesafe versions that check + # a little further down in the class heirachy. + nulldflt = (' if ((PyObject *)py_%(name)s == Py_None)\n' + ' %(name)s = NULL;\n' + ' else if (py_%(name)s) && pygstminiobject_check(py_%(name)s, &Py%(type)s_Type))\n' + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + ' else if (py_%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + null = (' if (py_%(name)s && pygstminiobject_check(py_%(name)s, &Py%(type)s_Type))\n' + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + ' else if ((PyObject *)py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + dflt = ' if (py_%(name)s)\n' \ + ' %(name)s = %(cast)s(py_%(name)s->obj);\n' + def __init__(self, objname, parent, typecode): + self.objname = objname + self.cast = string.replace(typecode, '_TYPE_', '_', 1) + self.parent = parent + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + if pdflt: + info.varlist.add(self.objname, '*' + pname + ' = ' + pdflt) + info.varlist.add('PyGstMiniObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.nulldflt % {'name':pname, + 'cast':self.cast, + 'type':self.objname}) + else: + info.varlist.add(self.objname, '*' + pname + ' = NULL') + info.varlist.add('PyGstMiniObject', '*py_' + pname) + info.codebefore.append(self.null % {'name':pname, + 'cast':self.cast, + 'type':self.objname}) + if ptype.endswith('*'): + typename = ptype[:-1] + try: + const, typename = typename.split('const-') + except ValueError: + const = '' + if typename != ptype: + info.arglist.append('(%s *) %s' % (ptype[:-1], pname)) + else: + info.arglist.append(pname) + + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + if pdflt: + info.varlist.add(self.objname, '*' + pname + ' = ' + pdflt) + info.varlist.add('PyGstMiniObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.dflt % {'name':pname, + 'cast':self.cast}) + info.arglist.append(pname) + info.add_parselist('O', ['&Py%s_Type' % self.objname, + '&py_' + pname], [pname]) + else: + info.varlist.add('PyGstMiniObject', '*' + pname) + info.arglist.append('%s(%s->obj)' % (self.cast, pname)) + info.add_parselist('O!', ['&Py%s_Type' % self.objname, + '&' + pname], [pname]) + if keeprefcount: + info.codebefore.append(' gst_mini_object_ref(GST_MINI_OBJECT(%s->obj));\n' % pname) + def write_return(self, ptype, ownsreturn, info): + if ptype.endswith('*'): + typename = ptype[:-1] + try: + const, typename = typename.split('const-') + except ValueError: + const = '' + info.varlist.add(typename, '*ret') + if ownsreturn: + info.varlist.add('PyObject', '*py_ret') + info.codeafter.append(' py_ret = pygstminiobject_new((GstMiniObject *)ret);\n' + ' if (ret != NULL)\n' + ' gst_mini_object_unref((GstMiniObject *)ret);\n' + ' return py_ret;') + else: + info.codeafter.append(' /* pygobject_new handles NULL checking */\n' + + ' return pygstminiobject_new((GstMiniObject *)ret);') + +class BoxedArg(ArgType): + # haven't done support for default args. Is it needed? + check = (' if (pyg_boxed_check(py_%(name)s, %(typecode)s))\n' + ' %(name)s = pyg_boxed_get(py_%(name)s, %(typename)s);\n' + ' else {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(typename)s");\n' + ' return NULL;\n' + ' }\n') + null = (' if (pyg_boxed_check(py_%(name)s, %(typecode)s))\n' + ' %(name)s = pyg_boxed_get(py_%(name)s, %(typename)s);\n' + ' else if (py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(typename)s or None");\n' + ' return NULL;\n' + ' }\n') + acopy = (' %(name)s = g_boxed_copy(%(typecode)s, %(name)s);\n') + def __init__(self, ptype, typecode): + self.typename = ptype + self.typecode = typecode + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add(self.typename, '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.codebefore.append(self.null % {'name': pname, + 'typename': self.typename, + 'typecode': self.typecode}) + else: + info.varlist.add(self.typename, '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname) + info.codebefore.append(self.check % {'name': pname, + 'typename': self.typename, + 'typecode': self.typecode}) + if keeprefcount: + # We need to grab a copy of the GBoxed + info.codebefore.append(self.acopy % {'name': pname, + 'typecode': self.typecode}) + if ptype[-1] == '*': + typename = ptype[:-1] + if typename[:6] == 'const-': typename = typename[6:] + if typename != self.typename: + info.arglist.append('(%s *)%s' % (ptype[:-1], pname)) + else: + info.arglist.append(pname) + else: + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + ret_tmpl = ' /* pyg_boxed_new handles NULL checking */\n' \ + ' return pyg_boxed_new(%(typecode)s, (%(saferet)s) %(ret)s, %(copy)s, TRUE);' + def write_return(self, ptype, ownsreturn, info): + if ptype[:6] == 'const-': + ptype = "const " + ptype[6:] + if ptype[-1] == '*': + info.varlist.add(ptype[:-1], '*ret') + ret = 'ret' + stype = self.typename + '*' + else: + info.varlist.add(ptype, 'ret') + ret = '&ret' + ownsreturn = 0 # of course it can't own a ref to a local var ... + stype = self.typename + info.codeafter.append(self.ret_tmpl % + { 'typecode': self.typecode, + 'ret': ret, + 'saferet' : stype, + 'copy': ownsreturn and 'FALSE' or 'TRUE'}) + +class CustomBoxedArg(ArgType): + # haven't done support for default args. Is it needed? + null = (' if (%(check)s(py_%(name)s))\n' + ' %(name)s = %(get)s(py_%(name)s);\n' + ' else if (py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(type)s or None");\n' + ' return NULL;\n' + ' }\n') + def __init__(self, ptype, pytype, getter, new): + self.pytype = pytype + self.getter = getter + self.checker = 'Py' + ptype + '_Check' + self.new = new + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add(ptype[:-1], '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.codebefore.append(self.null % {'name': pname, + 'get': self.getter, + 'check': self.checker, + 'type': ptype[:-1]}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + info.varlist.add('PyObject', '*' + pname) + info.arglist.append(self.getter + '(' + pname + ')') + info.add_parselist('O!', ['&' + self.pytype, '&' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add(ptype[:-1], '*ret') + info.codeafter.append(' if (ret)\n' + + ' return ' + self.new + '(ret);\n' + + ' Py_INCREF(Py_None);\n' + + ' return Py_None;') + +class PointerArg(ArgType): + # haven't done support for default args. Is it needed? + check = (' if (pyg_pointer_check(py_%(name)s, %(typecode)s))\n' + ' %(name)s = pyg_pointer_get(py_%(name)s, %(typename)s);\n' + ' else {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(typename)s");\n' + ' return NULL;\n' + ' }\n') + null = (' if (pyg_pointer_check(py_%(name)s, %(typecode)s))\n' + ' %(name)s = pyg_pointer_get(py_%(name)s, %(typename)s);\n' + ' else if (py_%(name)s != Py_None) {\n' + ' PyErr_SetString(PyExc_TypeError, "%(name)s should be a %(typename)s or None");\n' + ' return NULL;\n' + ' }\n') + def __init__(self, ptype, typecode): + self.typename = ptype + self.typecode = typecode + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add(self.typename, '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.codebefore.append(self.null % {'name': pname, + 'typename': self.typename, + 'typecode': self.typecode}) + else: + info.varlist.add(self.typename, '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname) + info.codebefore.append(self.check % {'name': pname, + 'typename': self.typename, + 'typecode': self.typecode}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + if ptype[-1] == '*': + info.varlist.add(self.typename, '*ret') + info.codeafter.append(' /* pyg_pointer_new handles NULL checking */\n' + + ' return pyg_pointer_new(' + self.typecode + ', ret);') + else: + info.varlist.add(self.typename, 'ret') + info.codeafter.append(' /* pyg_pointer_new handles NULL checking */\n' + + ' return pyg_pointer_new(' + self.typecode + ', &ret);') + +class AtomArg(IntArg): + dflt = ' if (py_%(name)s) {\n' \ + ' %(name)s = pygdk_atom_from_pyobject(py_%(name)s);\n' \ + ' if (PyErr_Occurred())\n' \ + ' return NULL;\n' \ + ' }\n' + atom = (' %(name)s = pygdk_atom_from_pyobject(py_%(name)s);\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + info.varlist.add('GdkAtom', pname + ' = ' + pdflt) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.dflt % {'name': pname}) + else: + info.varlist.add('GdkAtom', pname) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.atom % {'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GdkAtom', 'ret') + info.varlist.add('PyObject *', 'py_ret') + info.varlist.add('gchar *', 'name') + info.codeafter.append(' name = gdk_atom_name(ret);\n' + ' py_ret = PyString_FromString(name);\n' + ' g_free(name);\n' + ' return py_ret;') + +class GTypeArg(ArgType): + gtype = (' if ((%(name)s = pyg_type_from_object(py_%(name)s)) == 0)\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + info.varlist.add('GType', pname) + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + info.codebefore.append(self.gtype % {'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GType', 'ret') + info.codeafter.append(' return pyg_type_wrapper_new(ret);') + +# simple GError handler. +class GErrorArg(ArgType): + handleerror = (' if (pyg_error_check(&%(name)s))\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + info.varlist.add('GError', '*' + pname + ' = NULL') + info.arglist.append('&' + pname) + info.codeafter.append(self.handleerror % { 'name': pname }) + +class GtkTreePathArg(ArgType): + # haven't done support for default args. Is it needed? + normal = (' %(name)s = pygtk_tree_path_from_pyobject(py_%(name)s);\n' + ' if (!%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "could not convert %(name)s to a GtkTreePath");\n' + ' return NULL;\n' + ' }\n') + null = (' if (py_%(name)s != Py_None) {\n' + ' %(name)s = pygtk_tree_path_from_pyobject(py_%(name)s);\n' + ' if (!%(name)s) {\n' + ' PyErr_SetString(PyExc_TypeError, "could not convert %(name)s to a GtkTreePath");\n' + ' return NULL;\n' + ' }\n' + ' }\n') + freepath = (' if (%(name)s)\n' + ' gtk_tree_path_free(%(name)s);\n') + def __init__(self): + pass + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add('GtkTreePath', '*' + pname + ' = NULL') + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.codebefore.append(self.null % {'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + else: + info.varlist.add('GtkTreePath', '*' + pname) + info.varlist.add('PyObject', '*py_' + pname) + info.codebefore.append(self.normal % {'name': pname}) + info.arglist.append(pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + info.codeafter.append(self.freepath % {'name': pname}) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GtkTreePath', '*ret') + if ownsreturn: + info.codeafter.append(' if (ret) {\n' + ' PyObject *py_ret = pygtk_tree_path_to_pyobject(ret);\n' + ' gtk_tree_path_free(ret);\n' + ' return py_ret;\n' + ' }\n' + ' Py_INCREF(Py_None);\n' + ' return Py_None;') + else: + info.codeafter.append(' if (ret) {\n' + ' PyObject *py_ret = pygtk_tree_path_to_pyobject(ret);\n' + ' return py_ret;\n' + ' }\n' + ' Py_INCREF(Py_None);\n' + ' return Py_None;') + +class GdkRectanglePtrArg(ArgType): + normal = (' if (!pygdk_rectangle_from_pyobject(py_%(name)s, &%(name)s))\n' + ' return NULL;\n') + null = (' if (py_%(name)s == Py_None)\n' + ' %(name)s = NULL;\n' + ' else if (pygdk_rectangle_from_pyobject(py_%(name)s, &%(name)s_rect))\n' + ' %(name)s = &%(name)s_rect;\n' + ' else\n' + ' return NULL;\n') + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pnull: + info.varlist.add('GdkRectangle', pname + '_rect = { 0, 0, 0, 0 }') + info.varlist.add('GdkRectangle', '*' + pname) + info.varlist.add('PyObject', '*py_' + pname + ' = Py_None') + info.add_parselist('O', ['&py_' + pname], [pname]) + info.arglist.append(pname) + info.codebefore.append(self.null % {'name': pname}) + else: + info.varlist.add('GdkRectangle', pname + ' = { 0, 0, 0, 0 }') + info.varlist.add('PyObject', '*py_' + pname) + info.add_parselist('O', ['&py_' + pname], [pname]) + info.arglist.append('&' + pname) + info.codebefore.append(self.normal % {'name': pname}) + +class GdkRectangleArg(ArgType): + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GdkRectangle', 'ret') + info.codeafter.append(' return pyg_boxed_new(GDK_TYPE_RECTANGLE, &ret, TRUE, TRUE);') + +class PyObjectArg(ArgType): + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + info.varlist.add('PyObject', '*' + pname) + info.add_parselist('O', ['&' + pname], [pname]) + info.arglist.append(pname) + def write_return(self, ptype, ownsreturn, info): + info.varlist.add("PyObject", "*ret") + if ownsreturn: + info.codeafter.append(' if (ret) {\n' + ' return ret;\n' + ' }\n' + ' Py_INCREF(Py_None);\n' + ' return Py_None;') + else: + info.codeafter.append(' if (!ret) ret = Py_None;\n' + ' Py_INCREF(ret);\n' + ' return ret;') + +class ArgMatcher: + def __init__(self): + self.argtypes = {} + self.reverse_argtypes = {} + self.reverse_rettypes = {} + + def register(self, ptype, handler): + self.argtypes[ptype] = handler + def register_reverse(self, ptype, handler): + self.reverse_argtypes[ptype] = handler + def register_reverse_ret(self, ptype, handler): + self.reverse_rettypes[ptype] = handler + + def register_enum(self, ptype, typecode): + if typecode is None: + typecode = "G_TYPE_NONE" + self.register(ptype, EnumArg(ptype, typecode)) + def register_flag(self, ptype, typecode): + if typecode is None: + typecode = "G_TYPE_NONE" + self.register(ptype, FlagsArg(ptype, typecode)) + def register_object(self, ptype, parent, typecode): + oa = ObjectArg(ptype, parent, typecode) + self.register(ptype, oa) # in case I forget the * in the .defs + self.register(ptype+'*', oa) + self.register('const-'+ptype+'*', oa) + if ptype == 'GdkPixmap': + # hack to handle GdkBitmap synonym. + self.register('GdkBitmap', oa) + self.register('GdkBitmap*', oa) + def register_miniobject(self, ptype, parent, typecode): + oa = MiniObjectArg(ptype, parent, typecode) + self.register(ptype, oa) # in case I forget the * in the .defs + self.register(ptype+'*', oa) + def register_boxed(self, ptype, typecode): + if self.argtypes.has_key(ptype): return + arg = BoxedArg(ptype, typecode) + self.register(ptype, arg) + self.register(ptype+'*', arg) + self.register('const-'+ptype+'*', arg) + def register_custom_boxed(self, ptype, pytype, getter, new): + arg = CustomBoxedArg(ptype, pytype, getter, new) + self.register(ptype+'*', arg) + self.register('const-'+ptype+'*', arg) + def register_pointer(self, ptype, typecode): + arg = PointerArg(ptype, typecode) + self.register(ptype, arg) + self.register(ptype+'*', arg) + self.register('const-'+ptype+'*', arg) + + def get(self, ptype): + try: + return self.argtypes[ptype] + except KeyError: + if ptype[:8] == 'GdkEvent' and ptype[-1] == '*': + return self.argtypes['GdkEvent*'] + raise + def _get_reverse_common(self, ptype, registry): + props = dict(c_type=ptype) + try: + return registry[ptype], props + except KeyError: + try: + handler = self.argtypes[ptype] + except KeyError: + if ptype.startswith('GdkEvent') and ptype.endswith('*'): + handler = self.argtypes['GdkEvent*'] + else: + raise + if isinstance(handler, ObjectArg): + return registry['GObject*'], props + elif isinstance(handler, EnumArg): + props['typecode'] = handler.typecode + props['enumname'] = handler.enumname + return registry['GEnum'], props + elif isinstance(handler, FlagsArg): + props['typecode'] = handler.typecode + props['flagname'] = handler.flagname + return registry['GFlags'], props + elif isinstance(handler, BoxedArg): + props['typecode'] = handler.typecode + props['typename'] = handler.typename + return registry['GBoxed'], props + else: + raise + def get_reverse(self, ptype): + return self._get_reverse_common(ptype, self.reverse_argtypes) + def get_reverse_ret(self, ptype): + return self._get_reverse_common(ptype, self.reverse_rettypes) + + def object_is_a(self, otype, parent): + if otype == None: return 0 + if otype == parent: return 1 + if not self.argtypes.has_key(otype): return 0 + return self.object_is_a(self.get(otype).parent, parent) + +matcher = ArgMatcher() + +arg = NoneArg() +matcher.register(None, arg) +matcher.register('none', arg) + +arg = StringArg() +matcher.register('char*', arg) +matcher.register('gchar*', arg) +matcher.register('const-char*', arg) +matcher.register('char-const*', arg) +matcher.register('const-gchar*', arg) +matcher.register('gchar-const*', arg) +matcher.register('string', arg) +matcher.register('static_string', arg) + +arg = UCharArg() +matcher.register('unsigned-char*', arg) +matcher.register('const-guchar*', arg) +matcher.register('guchar*', arg) + +arg = CharArg() +matcher.register('char', arg) +matcher.register('gchar', arg) +matcher.register('guchar', arg) + +arg = GUniCharArg() +matcher.register('gunichar', arg) + +arg = IntArg() +matcher.register('int', arg) +matcher.register('gint', arg) +matcher.register('short', arg) +matcher.register('gshort', arg) +matcher.register('gushort', arg) +matcher.register('gsize', SizeArg()) +matcher.register('gssize', SSizeArg()) +matcher.register('guint8', arg) +matcher.register('gint8', arg) +matcher.register('guint16', arg) +matcher.register('gint16', arg) +matcher.register('gint32', arg) +matcher.register('GTime', arg) + +arg = LongArg() +matcher.register('long', arg) +matcher.register('glong', arg) + +arg = UIntArg() +matcher.register('guint', arg) + +arg = BoolArg() +matcher.register('gboolean', arg) + +arg = TimeTArg() +matcher.register('time_t', arg) + +matcher.register('guint32', UInt32Arg()) + +arg = ULongArg() +matcher.register('gulong', arg) + +arg = Int64Arg() +matcher.register('gint64', arg) +matcher.register('long-long', arg) + +arg = UInt64Arg() +matcher.register('guint64', arg) +matcher.register('unsigned-long-long', arg) + +arg = DoubleArg() +matcher.register('double', arg) +matcher.register('gdouble', arg) +matcher.register('float', arg) +matcher.register('gfloat', arg) + +arg = FileArg() +matcher.register('FILE*', arg) + +# enums, flags, objects + +matcher.register('GdkAtom', AtomArg()) + +matcher.register('GType', GTypeArg()) +matcher.register('GtkType', GTypeArg()) + +matcher.register('GError**', GErrorArg()) +matcher.register('GtkTreePath*', GtkTreePathArg()) +matcher.register('GdkRectangle*', GdkRectanglePtrArg()) +matcher.register('GtkAllocation*', GdkRectanglePtrArg()) +matcher.register('GdkRectangle', GdkRectangleArg()) +matcher.register('PyObject*', PyObjectArg()) + +matcher.register('GdkNativeWindow', ULongArg()) + +matcher.register_object('GObject', None, 'G_TYPE_OBJECT') +matcher.register_miniobject('GstMiniObject', None, 'GST_TYPE_MINI_OBJECT') + +del arg diff --git a/codegen/code-coverage.py b/codegen/code-coverage.py new file mode 100755 index 0000000..fd15034 --- /dev/null +++ b/codegen/code-coverage.py @@ -0,0 +1,42 @@ +from __future__ import generators +import sys, os + +def read_symbols(file, type=None, dynamic=0): + if dynamic: + cmd = 'nm -D %s' % file + else: + cmd = 'nm %s' % file + for line in os.popen(cmd, 'r'): + if line[0] != ' ': # has an address as first bit of line + while line[0] != ' ': + line = line[1:] + while line[0] == ' ': + line = line[1:] + # we should be up to "type symbolname" now + sym_type = line[0] + symbol = line[1:].strip() + + if not type or type == sym_type: + yield symbol + +def main(): + if len(sys.argv) != 3: + sys.stderr.write('usage: coverage-check library.so wrapper.so\n') + sys.exit(1) + library = sys.argv[1] + wrapper = sys.argv[2] + + # first create a dict with all referenced symbols in the wrapper + # should really be a set, but a dict will do ... + wrapper_symbols = {} + for symbol in read_symbols(wrapper, type='U', dynamic=1): + wrapper_symbols[symbol] = 1 + + # now go through the library looking for matches on the defined symbols: + for symbol in read_symbols(library, type='T', dynamic=1): + if symbol[0] == '_': continue + if symbol not in wrapper_symbols: + print symbol + +if __name__ == '__main__': + main() diff --git a/codegen/codegen.py b/codegen/codegen.py new file mode 100644 index 0000000..740199d --- /dev/null +++ b/codegen/codegen.py @@ -0,0 +1,1577 @@ +import getopt +import keyword +import os +import string +import sys + +import argtypes +import definitions +import defsparser +import override +import reversewrapper + +class Coverage(object): + def __init__(self, name): + self.name = name + self.wrapped = 0 + self.not_wrapped = 0 + + def declare_wrapped(self): + self.wrapped += 1 + + def declare_not_wrapped(self): + self.not_wrapped += 1 + + def printstats(self): + total = self.wrapped + self.not_wrapped + fd = sys.stderr + if total: + fd.write("***INFO*** The coverage of %s is %.2f%% (%i/%i)\n" % + (self.name, + float(self.wrapped*100)/total, + self.wrapped, + total)) + else: + fd.write("***INFO*** There are no declared %s." % self.name) + +functions_coverage = Coverage("global functions") +methods_coverage = Coverage("methods") +vproxies_coverage = Coverage("virtual proxies") +vaccessors_coverage = Coverage("virtual accessors") +iproxies_coverage = Coverage("interface proxies") + +def exc_info(): + #traceback.print_exc() + etype, value, tb = sys.exc_info() + ret = "" + try: + sval = str(value) + if etype == KeyError: + ret = "No ArgType for %s" % (sval,) + else: + ret = sval + finally: + del etype, value, tb + return ret + +def fixname(name): + if keyword.iskeyword(name): + return name + '_' + return name + +class FileOutput: + '''Simple wrapper for file object, that makes writing #line + statements easier.''' # " + def __init__(self, fp, filename=None): + self.fp = fp + self.lineno = 1 + if filename: + self.filename = filename + else: + self.filename = self.fp.name + # handle writing to the file, and keep track of the line number ... + def write(self, str): + self.fp.write(str) + self.lineno = self.lineno + string.count(str, '\n') + def writelines(self, sequence): + for line in sequence: + self.write(line) + def close(self): + self.fp.close() + def flush(self): + self.fp.flush() + + def setline(self, linenum, filename): + '''writes out a #line statement, for use by the C + preprocessor.''' # " + self.write('#line %d "%s"\n' % (linenum, filename)) + def resetline(self): + '''resets line numbering to the original file''' + self.setline(self.lineno + 1, self.filename) + +class Wrapper: + type_tmpl = ( + 'PyTypeObject Py%(typename)s_Type = {\n' + ' PyObject_HEAD_INIT(NULL)\n' + ' 0, /* ob_size */\n' + ' "%(classname)s", /* tp_name */\n' + ' sizeof(%(tp_basicsize)s), /* tp_basicsize */\n' + ' 0, /* tp_itemsize */\n' + ' /* methods */\n' + ' (destructor)%(tp_dealloc)s, /* tp_dealloc */\n' + ' (printfunc)0, /* tp_print */\n' + ' (getattrfunc)%(tp_getattr)s, /* tp_getattr */\n' + ' (setattrfunc)%(tp_setattr)s, /* tp_setattr */\n' + ' (cmpfunc)%(tp_compare)s, /* tp_compare */\n' + ' (reprfunc)%(tp_repr)s, /* tp_repr */\n' + ' (PyNumberMethods*)%(tp_as_number)s, /* tp_as_number */\n' + ' (PySequenceMethods*)%(tp_as_sequence)s, /* tp_as_sequence */\n' + ' (PyMappingMethods*)%(tp_as_mapping)s, /* tp_as_mapping */\n' + ' (hashfunc)%(tp_hash)s, /* tp_hash */\n' + ' (ternaryfunc)%(tp_call)s, /* tp_call */\n' + ' (reprfunc)%(tp_str)s, /* tp_str */\n' + ' (getattrofunc)%(tp_getattro)s, /* tp_getattro */\n' + ' (setattrofunc)%(tp_setattro)s, /* tp_setattro */\n' + ' (PyBufferProcs*)%(tp_as_buffer)s, /* tp_as_buffer */\n' + ' %(tp_flags)s, /* tp_flags */\n' + ' %(tp_doc)s, /* Documentation string */\n' + ' (traverseproc)%(tp_traverse)s, /* tp_traverse */\n' + ' (inquiry)%(tp_clear)s, /* tp_clear */\n' + ' (richcmpfunc)%(tp_richcompare)s, /* tp_richcompare */\n' + ' %(tp_weaklistoffset)s, /* tp_weaklistoffset */\n' + ' (getiterfunc)%(tp_iter)s, /* tp_iter */\n' + ' (iternextfunc)%(tp_iternext)s, /* tp_iternext */\n' + ' (struct PyMethodDef*)%(tp_methods)s, /* tp_methods */\n' + ' (struct PyMemberDef*)0, /* tp_members */\n' + ' (struct PyGetSetDef*)%(tp_getset)s, /* tp_getset */\n' + ' NULL, /* tp_base */\n' + ' NULL, /* tp_dict */\n' + ' (descrgetfunc)%(tp_descr_get)s, /* tp_descr_get */\n' + ' (descrsetfunc)%(tp_descr_set)s, /* tp_descr_set */\n' + ' %(tp_dictoffset)s, /* tp_dictoffset */\n' + ' (initproc)%(tp_init)s, /* tp_init */\n' + ' (allocfunc)%(tp_alloc)s, /* tp_alloc */\n' + ' (newfunc)%(tp_new)s, /* tp_new */\n' + ' (freefunc)%(tp_free)s, /* tp_free */\n' + ' (inquiry)%(tp_is_gc)s /* tp_is_gc */\n' + '};\n\n' + ) + + slots_list = [ + 'tp_getattr', 'tp_setattr', 'tp_getattro', 'tp_setattro', + 'tp_compare', 'tp_repr', + 'tp_as_number', 'tp_as_sequence', 'tp_as_mapping', 'tp_hash', + 'tp_call', 'tp_str', 'tp_as_buffer', 'tp_richcompare', 'tp_iter', + 'tp_iternext', 'tp_descr_get', 'tp_descr_set', 'tp_init', + 'tp_alloc', 'tp_new', 'tp_free', 'tp_is_gc', + 'tp_traverse', 'tp_clear', 'tp_dealloc', 'tp_flags', 'tp_doc' + ] + + getter_tmpl = ( + 'static PyObject *\n' + '%(funcname)s(PyObject *self, void *closure)\n' + '{\n' + '%(varlist)s' + ' ret = %(field)s;\n' + '%(codeafter)s\n' + '}\n\n' + ) + + parse_tmpl = ( + ' if (!PyArg_ParseTupleAndKeywords(args, kwargs,' + '"%(typecodes)s:%(name)s"%(parselist)s))\n' + ' return %(errorreturn)s;\n' + ) + + deprecated_tmpl = ( + ' if (PyErr_Warn(PyExc_DeprecationWarning, ' + '"%(deprecationmsg)s") < 0)\n' + ' return %(errorreturn)s;\n' + ) + + methdef_tmpl = ( + ' { "%(name)s", (PyCFunction)%(cname)s, %(flags)s,\n' + ' %(docstring)s },\n' + ) + + noconstructor = ( + 'static int\n' + 'pygobject_no_constructor(PyObject *self, PyObject *args, ' + 'PyObject *kwargs)\n' + '{\n' + ' gchar buf[512];\n' + '\n' + ' g_snprintf(buf, sizeof(buf), "%s is an abstract widget", ' + 'self->ob_type->tp_name);\n' + ' PyErr_SetString(PyExc_NotImplementedError, buf);\n' + ' return -1;\n' + '}\n\n' + ) + + function_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(begin_allow_threads)s\n' + ' %(setreturn)s%(cname)s(%(arglist)s);\n' + ' %(end_allow_threads)s\n' + '%(codeafter)s\n' + '}\n\n' + ) + + virtual_accessor_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *cls%(extraparams)s)\n' + '{\n' + ' gpointer klass;\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' klass = g_type_class_ref(pyg_type_from_object(cls));\n' + ' if (%(class_cast_macro)s(klass)->%(virtual)s) {\n' + ' pyg_begin_allow_threads;\n' + ' %(setreturn)s%(class_cast_macro)s(klass)->' + '%(virtual)s(%(arglist)s);\n' + ' pyg_end_allow_threads;\n' + ' } else {\n' + ' PyErr_SetString(PyExc_NotImplementedError, ' + '"virtual method %(name)s not implemented");\n' + ' g_type_class_unref(klass);\n' + ' return NULL;\n' + ' }\n' + ' g_type_class_unref(klass);\n' + '%(codeafter)s\n' + '}\n\n' + ) + + # template for method calls + constructor_tmpl = None + method_tmpl = None + + def __init__(self, parser, objinfo, overrides, fp=FileOutput(sys.stdout)): + self.parser = parser + self.objinfo = objinfo + self.overrides = overrides + self.fp = fp + + def get_lower_name(self): + return string.lower(string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1)) + + def get_field_accessor(self, fieldname): + raise NotImplementedError + + def get_initial_class_substdict(self): return {} + + def get_initial_constructor_substdict(self, constructor): + return { 'name': '%s.__init__' % self.objinfo.c_name, + 'errorreturn': '-1' } + def get_initial_method_substdict(self, method): + substdict = { 'name': '%s.%s' % (self.objinfo.c_name, method.name) } + substdict['begin_allow_threads'] = 'pyg_begin_allow_threads;' + substdict['end_allow_threads'] = 'pyg_end_allow_threads;' + return substdict + + def write_class(self): + if self.overrides.is_type_ignored(self.objinfo.c_name): + return + self.fp.write('\n/* ----------- %s ----------- */\n\n' % + self.objinfo.c_name) + substdict = self.get_initial_class_substdict() + if not substdict.has_key('tp_flags'): + substdict['tp_flags'] = 'Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE' + substdict['typename'] = self.objinfo.c_name + if self.overrides.modulename: + substdict['classname'] = '%s.%s' % (self.overrides.modulename, + self.objinfo.name) + else: + substdict['classname'] = self.objinfo.name + substdict['tp_doc'] = self.objinfo.docstring + + # Maybe this could be done in a nicer way, but I'll leave it as it is + # for now: -- Johan + if not self.overrides.slot_is_overriden('%s.tp_init' % + self.objinfo.c_name): + substdict['tp_init'] = self.write_constructor() + substdict['tp_methods'] = self.write_methods() + substdict['tp_getset'] = self.write_getsets() + + # handle slots ... + for slot in self.slots_list: + + slotname = '%s.%s' % (self.objinfo.c_name, slot) + slotfunc = '_wrap_%s_%s' % (self.get_lower_name(), slot) + if slot[:6] == 'tp_as_': + slotfunc = '&' + slotfunc + if self.overrides.slot_is_overriden(slotname): + data = self.overrides.slot_override(slotname) + self.write_function(slotname, data) + substdict[slot] = slotfunc + else: + if not substdict.has_key(slot): + substdict[slot] = '0' + + self.fp.write(self.type_tmpl % substdict) + + self.write_virtuals() + + def write_function_wrapper(self, function_obj, template, + handle_return=0, is_method=0, kwargs_needed=0, + substdict=None): + '''This function is the guts of all functions that generate + wrappers for functions, methods and constructors.''' + if not substdict: substdict = {} + + info = argtypes.WrapperInfo() + + substdict.setdefault('errorreturn', 'NULL') + + # for methods, we want the leading comma + if is_method: + info.arglist.append('') + + if function_obj.varargs: + raise ValueError, "varargs functions not supported" + + for param in function_obj.params: + if param.pdflt and '|' not in info.parsestr: + info.add_parselist('|', [], []) + handler = argtypes.matcher.get(param.ptype) + handler.write_param(param.ptype, param.pname, param.pdflt, + param.pnull, param.keeprefcount, info) + + substdict['setreturn'] = '' + if handle_return: + if function_obj.ret not in ('none', None): + substdict['setreturn'] = 'ret = ' + handler = argtypes.matcher.get(function_obj.ret) + handler.write_return(function_obj.ret, + function_obj.caller_owns_return, info) + + if function_obj.deprecated != None: + deprecated = self.deprecated_tmpl % { + 'deprecationmsg': function_obj.deprecated, + 'errorreturn': substdict['errorreturn'] } + else: + deprecated = '' + + # if name isn't set, set it to function_obj.name + substdict.setdefault('name', function_obj.name) + + substdict['begin_allow_threads'] = 'pyg_begin_allow_threads;' + substdict['end_allow_threads'] = 'pyg_end_allow_threads;' + + if self.objinfo: + substdict['typename'] = self.objinfo.c_name + substdict.setdefault('cname', function_obj.c_name) + substdict['varlist'] = info.get_varlist() + substdict['typecodes'] = info.parsestr + substdict['parselist'] = info.get_parselist() + substdict['arglist'] = info.get_arglist() + substdict['codebefore'] = deprecated + ( + string.replace(info.get_codebefore(), + 'return NULL', 'return ' + substdict['errorreturn']) + ) + substdict['codeafter'] = ( + string.replace(info.get_codeafter(), + 'return NULL', + 'return ' + substdict['errorreturn'])) + + if info.parsestr or kwargs_needed: + substdict['parseargs'] = self.parse_tmpl % substdict + substdict['extraparams'] = ', PyObject *args, PyObject *kwargs' + flags = 'METH_VARARGS|METH_KEYWORDS' + + # prepend the keyword list to the variable list + substdict['varlist'] = info.get_kwlist() + substdict['varlist'] + else: + substdict['parseargs'] = '' + substdict['extraparams'] = '' + flags = 'METH_NOARGS' + + return template % substdict, flags + + def write_constructor(self): + initfunc = '0' + constructor = self.parser.find_constructor(self.objinfo,self.overrides) + if not constructor: + return self.write_default_constructor() + + funcname = constructor.c_name + try: + if self.overrides.is_overriden(funcname): + data = self.overrides.override(funcname) + self.write_function(funcname, data) + self.objinfo.has_new_constructor_api = ( + self.objinfo.typecode in + self.overrides.newstyle_constructors) + else: + # ok, a hack to determine if we should use + # new-style constructores :P + property_based = getattr(self, + 'write_property_based_constructor', + None) + if property_based: + if (len(constructor.params) == 0 or + isinstance(constructor.params[0], + definitions.Property)): + # write_property_based_constructor is only + # implemented in GObjectWrapper + return self.write_property_based_constructor( + constructor) + else: + sys.stderr.write( + "Warning: generating old-style constructor for:" + + constructor.c_name + '\n') + + # write constructor from template ... + code = self.write_function_wrapper(constructor, + self.constructor_tmpl, + handle_return=0, is_method=0, kwargs_needed=1, + substdict=self.get_initial_constructor_substdict( + constructor))[0] + self.fp.write(code) + initfunc = '_wrap_' + funcname + except: + sys.stderr.write('Could not write constructor for %s: %s\n' + % (self.objinfo.c_name, exc_info())) + + initfunc = self.write_noconstructor() + return initfunc + + def write_noconstructor(self): + # this is a hack ... + if not hasattr(self.overrides, 'no_constructor_written'): + self.fp.write(self.noconstructor) + self.overrides.no_constructor_written = 1 + initfunc = 'pygobject_no_constructor' + return initfunc + + def write_default_constructor(self): + return self.write_noconstructor() + + def get_methflags(self, funcname): + if self.overrides.wants_kwargs(funcname): + flags = 'METH_VARARGS|METH_KEYWORDS' + elif self.overrides.wants_noargs(funcname): + flags = 'METH_NOARGS' + elif self.overrides.wants_onearg(funcname): + flags = 'METH_O' + else: + flags = 'METH_VARARGS' + if self.overrides.is_staticmethod(funcname): + flags += '|METH_STATIC' + elif self.overrides.is_classmethod(funcname): + flags += '|METH_CLASS' + return flags + + def write_function(self, funcname, data): + lineno, filename = self.overrides.getstartline(funcname) + self.fp.setline(lineno, filename) + self.fp.write(data) + self.fp.resetline() + self.fp.write('\n\n') + + def _get_class_virtual_substdict(self, meth, cname, parent): + substdict = self.get_initial_method_substdict(meth) + substdict['virtual'] = substdict['name'].split('.')[1] + substdict['cname'] = cname + substdict['class_cast_macro'] = parent.typecode.replace( + '_TYPE_', '_', 1) + "_CLASS" + substdict['typecode'] = self.objinfo.typecode + substdict['cast'] = string.replace(parent.typecode, '_TYPE_', '_', 1) + return substdict + + def write_methods(self): + methods = [] + klass = self.objinfo.c_name + # First, get methods from the defs files + for meth in self.parser.find_methods(self.objinfo): + method_name = meth.c_name + if self.overrides.is_ignored(method_name): + continue + try: + if self.overrides.is_overriden(method_name): + if not self.overrides.is_already_included(method_name): + data = self.overrides.override(method_name) + self.write_function(method_name, data) + + methflags = self.get_methflags(method_name) + else: + # write constructor from template ... + code, methflags = self.write_function_wrapper(meth, + self.method_tmpl, handle_return=1, is_method=1, + substdict=self.get_initial_method_substdict(meth)) + self.fp.write(code) + methods.append(self.methdef_tmpl % + { 'name': fixname(meth.name), + 'cname': '_wrap_' + method_name, + 'flags': methflags, + 'docstring': meth.docstring }) + methods_coverage.declare_wrapped() + except: + methods_coverage.declare_not_wrapped() + sys.stderr.write('Could not write method %s.%s: %s\n' + % (klass, meth.name, exc_info())) + + # Now try to see if there are any defined in the override + for method_name in self.overrides.get_defines_for(klass): + c_name = override.class2cname(klass, method_name) + if self.overrides.is_already_included(method_name): + continue + + try: + data = self.overrides.define(klass, method_name) + self.write_function(method_name, data) + methflags = self.get_methflags(method_name) + + methods.append(self.methdef_tmpl % + { 'name': method_name, + 'cname': '_wrap_' + c_name, + 'flags': methflags, + 'docstring': meth.docstring }) + methods_coverage.declare_wrapped() + except: + methods_coverage.declare_not_wrapped() + sys.stderr.write('Could not write method %s.%s: %s\n' + % (klass, meth.name, exc_info())) + + # Add GObject virtual method accessors, for chaining to parent + # virtuals from subclasses + methods += self.write_virtual_accessors() + + if methods: + methoddefs = '_Py%s_methods' % self.objinfo.c_name + # write the PyMethodDef structure + methods.append(' { NULL, NULL, 0, NULL }\n') + self.fp.write('static const PyMethodDef %s[] = {\n' % methoddefs) + self.fp.write(string.join(methods, '')) + self.fp.write('};\n\n') + else: + methoddefs = 'NULL' + return methoddefs + + def write_virtual_accessors(self): + klass = self.objinfo.c_name + methods = [] + for meth in self.parser.find_virtuals(self.objinfo): + method_name = self.objinfo.c_name + "__do_" + meth.name + if self.overrides.is_ignored(method_name): + continue + try: + if self.overrides.is_overriden(method_name): + if not self.overrides.is_already_included(method_name): + data = self.overrides.override(method_name) + self.write_function(method_name, data) + methflags = self.get_methflags(method_name) + else: + # temporarily add a 'self' parameter as first argument + meth.params.insert(0, definitions.Parameter( + ptype=(self.objinfo.c_name + '*'), + pname='self', pdflt=None, pnull=None)) + try: + # write method from template ... + code, methflags = self.write_function_wrapper( + meth, self.virtual_accessor_tmpl, + handle_return=True, is_method=False, + substdict=self._get_class_virtual_substdict( + meth, method_name, self.objinfo)) + self.fp.write(code) + finally: + del meth.params[0] + methods.append(self.methdef_tmpl % + { 'name': "do_" + fixname(meth.name), + 'cname': '_wrap_' + method_name, + 'flags': methflags + '|METH_CLASS', + 'docstring': 'NULL'}) + vaccessors_coverage.declare_wrapped() + except: + vaccessors_coverage.declare_not_wrapped() + sys.stderr.write( + 'Could not write virtual accessor method %s.%s: %s\n' + % (klass, meth.name, exc_info())) + return methods + + def write_virtuals(self): + ''' + Write _wrap_FooBar__proxy_do_zbr() reverse wrapers for + GObject virtuals + ''' + klass = self.objinfo.c_name + virtuals = [] + for meth in self.parser.find_virtuals(self.objinfo): + method_name = self.objinfo.c_name + "__proxy_do_" + meth.name + if self.overrides.is_ignored(method_name): + continue + try: + if self.overrides.is_overriden(method_name): + if not self.overrides.is_already_included(method_name): + data = self.overrides.override(method_name) + self.write_function(method_name, data) + else: + # write virtual proxy ... + ret, props = argtypes.matcher.get_reverse_ret(meth.ret) + wrapper = reversewrapper.ReverseWrapper( + '_wrap_' + method_name, is_static=True) + wrapper.set_return_type(ret(wrapper, **props)) + wrapper.add_parameter(reversewrapper.PyGObjectMethodParam( + wrapper, "self", method_name="do_" + meth.name, + c_type=(klass + ' *'))) + for param in meth.params: + handler, props = argtypes.matcher.get_reverse( + param.ptype) + props["direction"] = param.pdir + wrapper.add_parameter(handler(wrapper, + param.pname, **props)) + buf = reversewrapper.MemoryCodeSink() + wrapper.generate(buf) + self.fp.write(buf.flush()) + virtuals.append((fixname(meth.name), '_wrap_' + method_name)) + vproxies_coverage.declare_wrapped() + except (KeyError, ValueError): + vproxies_coverage.declare_not_wrapped() + virtuals.append((fixname(meth.name), None)) + sys.stderr.write('Could not write virtual proxy %s.%s: %s\n' + % (klass, meth.name, exc_info())) + if virtuals: + # Write a 'pygtk class init' function for this object, + # except when the object type is explicitly ignored (like + # GtkPlug and GtkSocket on win32). + if self.overrides.is_ignored(self.objinfo.typecode): + return + class_cast_macro = self.objinfo.typecode.replace( + '_TYPE_', '_', 1) + "_CLASS" + cast_macro = self.objinfo.typecode.replace('_TYPE_', '_', 1) + funcname = "__%s_class_init" % klass + self.objinfo.class_init_func = funcname + have_implemented_virtuals = not not [True + for name, cname in virtuals + if cname is not None] + self.fp.write( + ('\nstatic int\n' + '%(funcname)s(gpointer gclass, PyTypeObject *pyclass)\n' + '{\n') % vars()) + + if have_implemented_virtuals: + self.fp.write(' PyObject *o;\n') + self.fp.write( + ' %(klass)sClass *klass = ' + '%(class_cast_macro)s(gclass);\n' + ' PyObject *gsignals = ' + 'PyDict_GetItemString(pyclass->tp_dict, "__gsignals__");\n' + % vars()) + + for name, cname in virtuals: + do_name = 'do_' + name + if cname is None: + self.fp.write('\n /* overriding %(do_name)s ' + 'is currently not supported */\n' % vars()) + else: + self.fp.write(''' + o = PyObject_GetAttrString((PyObject *) pyclass, "%(do_name)s"); + if (o == NULL) + PyErr_Clear(); + else { + if (!PyObject_TypeCheck(o, &PyCFunction_Type) + && !(gsignals && PyDict_GetItemString(gsignals, "%(name)s"))) + klass->%(name)s = %(cname)s; + Py_DECREF(o); + } +''' % vars()) + self.fp.write(' return 0;\n}\n') + + def write_getsets(self): + lower_name = self.get_lower_name() + getsets_name = lower_name + '_getsets' + getterprefix = '_wrap_' + lower_name + '__get_' + setterprefix = '_wrap_' + lower_name + '__set_' + + # no overrides for the whole function. If no fields, + # don't write a func + if not self.objinfo.fields: + return '0' + getsets = [] + for ftype, cfname in self.objinfo.fields: + fname = cfname.replace('.', '_') + gettername = '0' + settername = '0' + attrname = self.objinfo.c_name + '.' + fname + if self.overrides.attr_is_overriden(attrname): + code = self.overrides.attr_override(attrname) + self.write_function(attrname, code) + if string.find(code, getterprefix + fname) >= 0: + gettername = getterprefix + fname + if string.find(code, setterprefix + fname) >= 0: + settername = setterprefix + fname + if gettername == '0': + try: + funcname = getterprefix + fname + info = argtypes.WrapperInfo() + handler = argtypes.matcher.get(ftype) + # for attributes, we don't own the "return value" + handler.write_return(ftype, 0, info) + self.fp.write(self.getter_tmpl % + { 'funcname': funcname, + 'varlist': info.varlist, + 'field': self.get_field_accessor(cfname), + 'codeafter': info.get_codeafter() }) + gettername = funcname + except: + sys.stderr.write( + "Could not write getter for %s.%s: %s\n" + % (self.objinfo.c_name, fname, exc_info())) + if gettername != '0' or settername != '0': + getsets.append(' { "%s", (getter)%s, (setter)%s },\n' % + (fixname(fname), gettername, settername)) + + if not getsets: + return '0' + self.fp.write('static const PyGetSetDef %s[] = {\n' % getsets_name) + for getset in getsets: + self.fp.write(getset) + self.fp.write(' { NULL, (getter)0, (setter)0 },\n') + self.fp.write('};\n\n') + + return getsets_name + + def write_functions(self, prefix): + self.fp.write('\n/* ----------- functions ----------- */\n\n') + functions = [] + + # First, get methods from the defs files + for func in self.parser.find_functions(): + funcname = func.c_name + if self.overrides.is_ignored(funcname) or \ + self.overrides.is_type_ignored(func.ret): + continue + try: + if self.overrides.is_overriden(funcname): + data = self.overrides.override(funcname) + self.write_function(funcname, data) + + methflags = self.get_methflags(funcname) + else: + # write constructor from template ... + code, methflags = self.write_function_wrapper(func, + self.function_tmpl, handle_return=1, is_method=0) + self.fp.write(code) + functions.append(self.methdef_tmpl % + { 'name': func.name, + 'cname': '_wrap_' + funcname, + 'flags': methflags, + 'docstring': func.docstring }) + functions_coverage.declare_wrapped() + except: + functions_coverage.declare_not_wrapped() + sys.stderr.write('Could not write function %s: %s\n' + % (func.name, exc_info())) + + # Now try to see if there are any defined in the override + for funcname in self.overrides.get_functions(): + try: + data = self.overrides.function(funcname) + self.write_function(funcname, data) + methflags = self.get_methflags(funcname) + functions.append(self.methdef_tmpl % + { 'name': funcname, + 'cname': '_wrap_' + funcname, + 'flags': methflags, + 'docstring': 'NULL'}) + functions_coverage.declare_wrapped() + except: + functions_coverage.declare_not_wrapped() + sys.stderr.write('Could not write function %s: %s\n' + % (funcname, exc_info())) + + # write the PyMethodDef structure + functions.append(' { NULL, NULL, 0, NULL }\n') + + self.fp.write('const PyMethodDef ' + prefix + '_functions[] = {\n') + self.fp.write(string.join(functions, '')) + self.fp.write('};\n\n') + +class GObjectWrapper(Wrapper): + constructor_tmpl = ( + 'static int\n' + '_wrap_%(cname)s(PyGObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' self->obj = (GObject *)%(cname)s(%(arglist)s);\n' + '%(codeafter)s\n' + ' if (!self->obj) {\n' + ' PyErr_SetString(PyExc_RuntimeError, ' + '"could not create %(typename)s object");\n' + ' return -1;\n' + ' }\n' + '%(aftercreate)s' + ' pygobject_register_wrapper((PyObject *)self);\n' + ' return 0;\n' + '}\n\n' + ) + + method_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyGObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(begin_allow_threads)s\n' + ' %(setreturn)s%(cname)s(%(cast)s(self->obj)%(arglist)s);\n' + ' %(end_allow_threads)s\n' + '%(codeafter)s\n' + '}\n\n' + ) + def __init__(self, parser, objinfo, overrides, fp=FileOutput(sys.stdout)): + Wrapper.__init__(self, parser, objinfo, overrides, fp) + if self.objinfo: + self.castmacro = string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyGObject', + 'tp_weaklistoffset' : 'offsetof(PyGObject, weakreflist)', + 'tp_dictoffset' : 'offsetof(PyGObject, inst_dict)' } + + def get_field_accessor(self, fieldname): + castmacro = string.replace(self.objinfo.typecode, '_TYPE_', '_', 1) + return '%s(pygobject_get(self))->%s' % (castmacro, fieldname) + + def get_initial_constructor_substdict(self, constructor): + substdict = Wrapper.get_initial_constructor_substdict(self, + constructor) + if not constructor.caller_owns_return: + substdict['aftercreate'] = " g_object_ref(self->obj);\n" + else: + substdict['aftercreate'] = '' + return substdict + + def get_initial_method_substdict(self, method): + substdict = Wrapper.get_initial_method_substdict(self, method) + substdict['cast'] = string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1) + return substdict + + def write_default_constructor(self): + try: + parent = self.parser.find_object(self.objinfo.parent) + except ValueError: + parent = None + if parent is not None: + ## just like the constructor is inheritted, we should + # inherit the new API compatibility flag + self.objinfo.has_new_constructor_api = ( + parent.has_new_constructor_api) + elif self.objinfo.parent == 'GObject': + self.objinfo.has_new_constructor_api = True + return '0' + + def write_property_based_constructor(self, constructor): + self.objinfo.has_new_constructor_api = True + out = self.fp + print >> out, "static int" + print >> out, '_wrap_%s(PyGObject *self, PyObject *args,' \ + ' PyObject *kwargs)\n{' % constructor.c_name + if constructor.params: + s = " GType obj_type = pyg_type_from_object((PyObject *) self);" + print >> out, s + + def py_str_list_to_c(arg): + if arg: + return "{" + ", ".join( + map(lambda s: '"' + s + '"', arg)) + ", NULL }" + else: + return "{ NULL }" + + classname = '%s.%s' % (self.overrides.modulename, + self.objinfo.name) + + if constructor.params: + mandatory_arguments = [param for param in constructor.params + if not param.optional] + optional_arguments = [param for param in constructor.params + if param.optional] + arg_names = py_str_list_to_c( + [param.argname + for param in mandatory_arguments + optional_arguments]) + + prop_names = py_str_list_to_c( + [param.pname + for param in mandatory_arguments + optional_arguments]) + + print >> out, " GParameter params[%i];" % \ + len(constructor.params) + print >> out, " PyObject *parsed_args[%i] = {NULL, };" % \ + len(constructor.params) + print >> out, " char *arg_names[] = %s;" % arg_names + print >> out, " char *prop_names[] = %s;" % prop_names + print >> out, " guint nparams, i;" + print >> out + if constructor.deprecated is not None: + out.write( + ' if (PyErr_Warn(PyExc_DeprecationWarning, ' + '"%s") < 0)\n' % + constructor.deprecated) + print >> out, ' return -1;' + print >> out + out.write(" if (!PyArg_ParseTupleAndKeywords(args, kwargs, ") + template = '"' + if mandatory_arguments: + template += "O"*len(mandatory_arguments) + if optional_arguments: + template += "|" + "O"*len(optional_arguments) + template += ':%s.__init__"' % classname + print >> out, template, ", arg_names", + for i in range(len(constructor.params)): + print >> out, ", &parsed_args[%i]" % i, + + out.write( + "))\n" + " return -1;\n" + "\n" + " memset(params, 0, sizeof(GParameter)*%i);\n" + " if (!pyg_parse_constructor_args(obj_type, arg_names,\n" + " prop_names, params, \n" + " &nparams, parsed_args))\n" + " return -1;\n" + " pygobject_constructv(self, nparams, params);\n" + " for (i = 0; i < nparams; ++i)\n" + " g_value_unset(¶ms[i].value);\n" + % len(constructor.params)) + else: + out.write( + " static char* kwlist[] = { NULL };\n" + "\n") + + if constructor.deprecated is not None: + out.write( + ' if (PyErr_Warn(PyExc_DeprecationWarning, "%s") < 0)\n' + ' return -1;\n' + '\n' % constructor.deprecated) + + out.write( + ' if (!PyArg_ParseTupleAndKeywords(args, kwargs,\n' + ' ":%s.__init__",\n' + ' kwlist))\n' + ' return -1;\n' + '\n' + ' pygobject_constructv(self, 0, NULL);\n' % classname) + out.write( + ' if (!self->obj) {\n' + ' PyErr_SetString(\n' + ' PyExc_RuntimeError, \n' + ' "could not create %s object");\n' + ' return -1;\n' + ' }\n' % classname) + + if not constructor.caller_owns_return: + print >> out, " g_object_ref(self->obj);\n" + + out.write( + ' return 0;\n' + '}\n\n') + + return "_wrap_%s" % constructor.c_name + + +## TODO : Add GstMiniObjectWrapper(Wrapper) +class GstMiniObjectWrapper(Wrapper): + constructor_tmpl = ( + 'static int\n' + '_wrap_%(cname)s(PyGstMiniObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' self->obj = (GstMiniObject *)%(cname)s(%(arglist)s);\n' + '%(codeafter)s\n' + ' if (!self->obj) {\n' + ' PyErr_SetString(PyExc_RuntimeError, ' + '"could not create %(typename)s miniobject");\n' + ' return -1;\n' + ' }\n' + '%(aftercreate)s' + ' pygstminiobject_register_wrapper((PyObject *)self);\n' + ' return 0;\n' + '}\n\n' + ) + method_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyGstMiniObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(begin_allow_threads)s\n' + ' %(setreturn)s%(cname)s(%(cast)s(self->obj)%(arglist)s);\n' + ' %(end_allow_threads)s\n' + '%(codeafter)s\n' + '}\n\n' + ) + def __init__(self, parser, objinfo, overrides, fp=FileOutput(sys.stdout)): + Wrapper.__init__(self, parser, objinfo, overrides, fp) + if self.objinfo: + self.castmacro = string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyGstMiniObject', + 'tp_weaklistoffset' : 'offsetof(PyGstMiniObject, weakreflist)', + 'tp_dictoffset' : 'offsetof(PyGstMiniObject, inst_dict)' } + + def get_field_accessor(self, fieldname): + castmacro = string.replace(self.objinfo.typecode, '_TYPE_', '_', 1) + return '%s(pygstminiobject_get(self))->%s' % (castmacro, fieldname) + + def get_initial_constructor_substdict(self, constructor): + substdict = Wrapper.get_initial_constructor_substdict(self, + constructor) + if not constructor.caller_owns_return: + substdict['aftercreate'] = " gst_mini_object_ref(self->obj);\n" + else: + substdict['aftercreate'] = '' + return substdict + + def get_initial_method_substdict(self, method): + substdict = Wrapper.get_initial_method_substdict(self, method) + substdict['cast'] = string.replace(self.objinfo.typecode, + '_TYPE_', '_', 1) + return substdict + + + +class GInterfaceWrapper(GObjectWrapper): + virtual_accessor_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *cls%(extraparams)s)\n' + '{\n' + ' %(vtable)s *iface;\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' iface = g_type_interface_peek(' + 'g_type_class_peek(pyg_type_from_object(cls)), %(typecode)s);\n' + ' if (iface->%(virtual)s)\n' + ' %(setreturn)siface->%(virtual)s(%(arglist)s);\n' + ' else {\n' + ' PyErr_SetString(PyExc_NotImplementedError, ' + '"interface method %(name)s not implemented");\n' + ' return NULL;\n' + ' }\n' + '%(codeafter)s\n' + '}\n\n' + ) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyObject', + 'tp_weaklistoffset' : '0', + 'tp_dictoffset' : '0'} + + def write_constructor(self): + # interfaces have no constructors ... + return '0' + def write_getsets(self): + # interfaces have no fields ... + return '0' + + def _get_class_virtual_substdict(self, meth, cname, parent): + substdict = self.get_initial_method_substdict(meth) + substdict['virtual'] = substdict['name'].split('.')[1] + substdict['cname'] = cname + substdict['typecode'] = self.objinfo.typecode + substdict['vtable'] = self.objinfo.vtable + return substdict + + def write_virtuals(self): + ## Now write reverse method wrappers, which let python code + ## implement interface methods. + # First, get methods from the defs files + klass = self.objinfo.c_name + proxies = [] + for meth in self.parser.find_virtuals(self.objinfo): + method_name = self.objinfo.c_name + "__proxy_do_" + meth.name + if self.overrides.is_ignored(method_name): + continue + try: + if self.overrides.is_overriden(method_name): + if not self.overrides.is_already_included(method_name): + data = self.overrides.override(method_name) + self.write_function(method_name, data) + else: + # write proxy ... + ret, props = argtypes.matcher.get_reverse_ret(meth.ret) + wrapper = reversewrapper.ReverseWrapper( + '_wrap_' + method_name, is_static=True) + wrapper.set_return_type(ret(wrapper, **props)) + wrapper.add_parameter(reversewrapper.PyGObjectMethodParam( + wrapper, "self", method_name="do_" + meth.name, + c_type=(klass + ' *'))) + for param in meth.params: + handler, props = argtypes.matcher.get_reverse( + param.ptype) + props["direction"] = param.pdir + wrapper.add_parameter( + handler(wrapper, param.pname, **props)) + buf = reversewrapper.MemoryCodeSink() + wrapper.generate(buf) + self.fp.write(buf.flush()) + proxies.append((fixname(meth.name), '_wrap_' + method_name)) + iproxies_coverage.declare_wrapped() + except (KeyError, ValueError): + iproxies_coverage.declare_not_wrapped() + proxies.append((fixname(meth.name), None)) + sys.stderr.write('Could not write interface proxy %s.%s: %s\n' + % (klass, meth.name, exc_info())) + + if not proxies: + return + + # Make sure we have at least one proxy function + if not [cname for name,cname in proxies if not cname is None]: + return + + ## Write an interface init function for this object + funcname = "__%s__interface_init" % klass + vtable = self.objinfo.vtable + self.fp.write( + '\nstatic void\n' + '%(funcname)s(%(vtable)s *iface, PyTypeObject *pytype)\n' + '{\n' + ' %(vtable)s *parent_iface = ' + 'g_type_interface_peek_parent(iface);\n' + ' PyObject *py_method;\n' + '\n' + % vars()) + + for name, cname in proxies: + do_name = 'do_' + name + if cname is None: + continue + + self.fp.write(( + ' py_method = pytype? PyObject_GetAttrString(' + '(PyObject *) pytype, "%(do_name)s") : NULL;\n' + ' if (py_method && !PyObject_TypeCheck(py_method, ' + '&PyCFunction_Type)) {\n' + ' iface->%(name)s = %(cname)s;\n' + ' } else {\n' + ' PyErr_Clear();\n' + ' if (parent_iface) {\n' + ' iface->%(name)s = parent_iface->%(name)s;\n' + ' }\n' + ' Py_XDECREF(py_method);\n' + ' }\n' + ) % vars()) + self.fp.write('}\n\n') + interface_info = "__%s__iinfo" % klass + self.fp.write(''' +static const GInterfaceInfo %s = { + (GInterfaceInitFunc) %s, + NULL, + NULL +}; +''' % (interface_info, funcname)) + self.objinfo.interface_info = interface_info + +class GBoxedWrapper(Wrapper): + constructor_tmpl = ( + 'static int\n' + '_wrap_%(cname)s(PyGBoxed *self%(extraparams)s)\n' + '{\n' \ + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' self->gtype = %(typecode)s;\n' + ' self->free_on_dealloc = FALSE;\n' + ' self->boxed = %(cname)s(%(arglist)s);\n' + '%(codeafter)s\n' + ' if (!self->boxed) {\n' + ' PyErr_SetString(PyExc_RuntimeError, ' + '"could not create %(typename)s object");\n' + ' return -1;\n' + ' }\n' + ' self->free_on_dealloc = TRUE;\n' + ' return 0;\n' + '}\n\n' + ) + + method_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(begin_allow_threads)s\n' + ' %(setreturn)s%(cname)s(pyg_boxed_get(self, ' + '%(typename)s)%(arglist)s);\n' + ' %(end_allow_threads)s\n' + '%(codeafter)s\n' + '}\n\n' + ) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyGBoxed', + 'tp_weaklistoffset' : '0', + 'tp_dictoffset' : '0' } + + def get_field_accessor(self, fieldname): + return 'pyg_boxed_get(self, %s)->%s' % (self.objinfo.c_name, fieldname) + + def get_initial_constructor_substdict(self, constructor): + substdict = Wrapper.get_initial_constructor_substdict( + self, constructor) + substdict['typecode'] = self.objinfo.typecode + return substdict + +class GPointerWrapper(GBoxedWrapper): + constructor_tmpl = ( + 'static int\n' + '_wrap_%(cname)s(PyGPointer *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' self->gtype = %(typecode)s;\n' + ' self->pointer = %(cname)s(%(arglist)s);\n' + '%(codeafter)s\n' + ' if (!self->pointer) {\n' + ' PyErr_SetString(PyExc_RuntimeError, ' + '"could not create %(typename)s object");\n' + ' return -1;\n' + ' }\n' + ' return 0;\n' + '}\n\n' + ) + + method_tmpl = ( + 'static PyObject *\n' + '_wrap_%(cname)s(PyObject *self%(extraparams)s)\n' + '{\n' + '%(varlist)s' + '%(parseargs)s' + '%(codebefore)s' + ' %(setreturn)s%(cname)s(pyg_pointer_get(self, ' + '%(typename)s)%(arglist)s);\n' + '%(codeafter)s\n' + '}\n\n' + ) + + def get_initial_class_substdict(self): + return { 'tp_basicsize' : 'PyGPointer', + 'tp_weaklistoffset' : '0', + 'tp_dictoffset' : '0' } + + def get_field_accessor(self, fieldname): + return 'pyg_pointer_get(self, %s)->%s' % (self.objinfo.c_name, + fieldname) + + def get_initial_constructor_substdict(self, constructor): + substdict = Wrapper.get_initial_constructor_substdict( + self, constructor) + substdict['typecode'] = self.objinfo.typecode + return substdict + +def write_headers(data, fp): + fp.write('/* -- THIS FILE IS GENERATED - DO NOT EDIT */') + fp.write('/* -*- Mode: C; c-basic-offset: 4 -*- */\n\n') + fp.write('#include \n\n\n') + fp.write(data) + fp.resetline() + fp.write('\n\n') + +def write_body(data, fp): + fp.write(data) + fp.resetline() + fp.write('\n\n') + +def write_imports(overrides, fp): + fp.write('/* ---------- types from other modules ---------- */\n') + for module, pyname, cname in overrides.get_imports(): + fp.write('static PyTypeObject *_%s;\n' % cname) + fp.write('#define %s (*_%s)\n' % (cname, cname)) + fp.write('\n\n') + +def write_type_declarations(parser, fp): + fp.write('/* ---------- forward type declarations ---------- */\n') + for obj in parser.boxes: + fp.write('PyTypeObject Py' + obj.c_name + '_Type;\n') + for obj in parser.objects: + fp.write('PyTypeObject Py' + obj.c_name + '_Type;\n') + for obj in parser.miniobjects: + fp.write('PyTypeObject Py' + obj.c_name + '_Type;\n') + for interface in parser.interfaces: + fp.write('PyTypeObject Py' + interface.c_name + '_Type;\n') + fp.write('\n') + + +def sort_parent_children(objects): + objects = list(objects) + modified = True + while modified: + modified = False + parent_index = None + child_index = None + for i, obj in enumerate(objects): + if obj.parent == 'GObject': + continue + if obj.parent not in [info.c_name for info in objects[:i]]: + for j, info in enumerate(objects[i+1:]): + if info.c_name == obj.parent: + parent_index = i + 1 + j + child_index = i + break + else: + continue + break + if child_index is not None and parent_index is not None: + if child_index != parent_index: + objects.insert(child_index, objects.pop(parent_index)) + modified = True + return objects + +def write_classes(parser, overrides, fp): + ## Sort the objects, so that we generate code for the parent types + ## before their children. + objects = sort_parent_children(parser.objects) + for klass, items in ((GBoxedWrapper, parser.boxes), + (GPointerWrapper, parser.pointers), + (GObjectWrapper, objects), + (GstMiniObjectWrapper, parser.miniobjects), + (GInterfaceWrapper, parser.interfaces)): + for item in items: + instance = klass(parser, item, overrides, fp) + instance.write_class() + fp.write('\n') + +def write_enums(parser, overrides, prefix, fp=sys.stdout): + if not parser.enums: + return + fp.write('\n/* ----------- enums and flags ----------- */\n\n') + fp.write( + 'void\n' + prefix + + '_add_constants(PyObject *module, const gchar *strip_prefix)\n{\n') + + for enum in parser.enums: + if overrides.is_type_ignored(enum.c_name): + continue + if enum.typecode is None: + for nick, value in enum.values: + if overrides.is_ignored(value): + continue + fp.write( + ' PyModule_AddIntConstant(module, ' + '(char *) pyg_constant_strip_prefix("%s", strip_prefix), %s);\n' + % (value, value)) + else: + if enum.deftype == 'enum': + fp.write(' pyg_enum_add(module, "%s", strip_prefix, %s);\n' + % (enum.name, enum.typecode)) + else: + fp.write(' pyg_flags_add(module, "%s", strip_prefix, %s);\n' + % (enum.name, enum.typecode)) + + fp.write('\n') + fp.write(' if (PyErr_Occurred())\n') + fp.write(' PyErr_Print();\n') + fp.write('}\n\n') + +def write_extension_init(overrides, prefix, fp): + fp.write('/* initialise stuff extension classes */\n') + fp.write('void\n' + prefix + '_register_classes(PyObject *d)\n{\n') + imports = overrides.get_imports()[:] + if imports: + bymod = {} + for module, pyname, cname in imports: + bymod.setdefault(module, []).append((pyname, cname)) + fp.write(' PyObject *module;\n\n') + for module in bymod: + fp.write( + ' if ((module = PyImport_ImportModule("%s")) != NULL) {\n' + % module) + fp.write( + ' PyObject *moddict = PyModule_GetDict(module);\n\n') + for pyname, cname in bymod[module]: + fp.write( + ' _%s = (PyTypeObject *)PyDict_GetItemString(' + 'moddict, "%s");\n' % (cname, pyname)) + fp.write(' if (_%s == NULL) {\n' % cname) + fp.write(' PyErr_SetString(PyExc_ImportError,\n') + fp.write(' "cannot import name %s from %s");\n' + % (pyname, module)) + fp.write(' return;\n') + fp.write(' }\n') + fp.write(' } else {\n') + fp.write(' PyErr_SetString(PyExc_ImportError,\n') + fp.write(' "could not import %s");\n' % module) + fp.write(' return;\n') + fp.write(' }\n') + fp.write('\n') + fp.write(overrides.get_init() + '\n') + fp.resetline() + +def write_registers(parser, overrides, fp): + for boxed in parser.boxes: + if overrides.is_type_ignored(boxed.c_name): + continue + fp.write(' pyg_register_boxed(d, "' + boxed.name + + '", ' + boxed.typecode + + ', &Py' + boxed.c_name + + '_Type);\n') + for pointer in parser.pointers: + if overrides.is_type_ignored(pointer.c_name): + continue + fp.write(' pyg_register_pointer(d, "' + pointer.name + + '", ' + pointer.typecode + + ', &Py' + pointer.c_name + '_Type);\n') + for interface in parser.interfaces: + if overrides.is_type_ignored(interface.c_name): + continue + fp.write(' pyg_register_interface(d, "' + interface.name + + '", '+ interface.typecode + ', &Py' + interface.c_name + + '_Type);\n') + if interface.interface_info is not None: + fp.write(' pyg_register_interface_info(%s, &%s);\n' % + (interface.typecode, interface.interface_info)) + + objects = parser.objects[:] + pos = 0 + while pos < len(objects): + parent = objects[pos].parent + for i in range(pos+1, len(objects)): + if objects[i].c_name == parent: + objects.insert(i+1, objects[pos]) + del objects[pos] + break + else: + pos = pos + 1 + for obj in objects: + if overrides.is_type_ignored(obj.c_name): + continue + bases = [] + if obj.parent != None: + bases.append(obj.parent) + bases = bases + obj.implements + if bases: + fp.write(' pygobject_register_class(d, "' + obj.c_name + + '", ' + obj.typecode + ', &Py' + obj.c_name + + '_Type, Py_BuildValue("(' + 'O' * len(bases) + ')", ' + + string.join(map(lambda s: '&Py'+s+'_Type', bases), ', ') + + '));\n') + else: + fp.write(' pygobject_register_class(d, "' + obj.c_name + + '", ' + obj.typecode + ', &Py' + obj.c_name + + '_Type, NULL);\n') + if obj.has_new_constructor_api: + fp.write(' pyg_set_object_has_new_constructor(%s);\n' % + obj.typecode) + else: + print >> sys.stderr, ( + "Warning: Constructor for %s needs to be updated to new API\n" + " See http://live.gnome.org/PyGTK_2fWhatsNew28" + "#update-constructors") % obj.c_name + if obj.class_init_func is not None: + fp.write(' pyg_register_class_init(%s, %s);\n' % + (obj.typecode, obj.class_init_func)) + #TODO: register mini-objects + miniobjects = parser.miniobjects[:] + for obj in miniobjects: + if overrides.is_type_ignored(obj.c_name): + continue + bases = [] + if obj.parent != None: + bases.append(obj.parent) + bases = bases + obj.implements + if bases: + fp.write(' pygstminiobject_register_class(d, "' + obj.c_name + + '", ' + obj.typecode + ', &Py' + obj.c_name + + '_Type, Py_BuildValue("(' + 'O' * len(bases) + ')", ' + + string.join(map(lambda s: '&Py'+s+'_Type', bases), ', ') + + '));\n') + else: + fp.write(' pygstminiobject_register_class(d, "' + obj.c_name + + '", ' + obj.typecode + ', &Py' + obj.c_name + + '_Type, NULL);\n') + + fp.write('}\n') + +def write_source(parser, overrides, prefix, fp=FileOutput(sys.stdout)): + write_headers(overrides.get_headers(), fp) + write_imports(overrides, fp) + write_type_declarations(parser, fp) + write_body(overrides.get_body(), fp) + write_classes(parser, overrides, fp) + + wrapper = Wrapper(parser, None, overrides, fp) + wrapper.write_functions(prefix) + + write_enums(parser, overrides, prefix, fp) + write_extension_init(overrides, prefix, fp) + write_registers(parser, overrides, fp) + +def register_types(parser): + for boxed in parser.boxes: + argtypes.matcher.register_boxed(boxed.c_name, boxed.typecode) + for pointer in parser.pointers: + argtypes.matcher.register_pointer(pointer.c_name, pointer.typecode) + for obj in parser.objects: + argtypes.matcher.register_object(obj.c_name, obj.parent, obj.typecode) + for obj in parser.miniobjects: + argtypes.matcher.register_miniobject(obj.c_name, obj.parent, obj.typecode) + for obj in parser.interfaces: + argtypes.matcher.register_object(obj.c_name, None, obj.typecode) + for enum in parser.enums: + if enum.deftype == 'flags': + argtypes.matcher.register_flag(enum.c_name, enum.typecode) + else: + argtypes.matcher.register_enum(enum.c_name, enum.typecode) + +usage = 'usage: codegen.py [-o overridesfile] [-p prefix] defsfile' +def main(argv): + o = override.Overrides() + prefix = 'pygtk' + outfilename = None + errorfilename = None + extendpath = [] + opts, args = getopt.getopt(argv[1:], "o:p:r:t:D:x", + ["override=", "prefix=", "register=", "outfilename=", + "load-types=", "errorfilename=", "extendpath="]) + defines = {} # -Dkey[=val] options + + for opt, arg in opts: + if opt in ('-x', '--extendpath'): + extendpath.append(arg) + extendpath.insert(0, os.getcwd()) + o = override.Overrides(path=extendpath) + + for opt, arg in opts: + if opt in ('-o', '--override'): + o = override.Overrides(arg, path=extendpath) + elif opt in ('-p', '--prefix'): + prefix = arg + elif opt in ('-r', '--register'): + # Warning: user has to make sure all -D options appear before -r + p = defsparser.DefsParser(arg, defines) + p.startParsing() + register_types(p) + del p + elif opt == '--outfilename': + outfilename = arg + elif opt == '--errorfilename': + errorfilename = arg + elif opt in ('-t', '--load-types'): + globals = {} + execfile(arg, globals) + elif opt == '-D': + nameval = arg.split('=') + try: + defines[nameval[0]] = nameval[1] + except IndexError: + defines[nameval[0]] = None + if len(args) < 1: + print >> sys.stderr, usage + return 1 + if errorfilename: + sys.stderr = open(errorfilename, "w") + p = defsparser.DefsParser(args[0], defines) + if not outfilename: + outfilename = os.path.splitext(args[0])[0] + '.c' + + p.startParsing() + + register_types(p) + write_source(p, o, prefix, FileOutput(sys.stdout, outfilename)) + + functions_coverage.printstats() + methods_coverage.printstats() + vproxies_coverage.printstats() + vaccessors_coverage.printstats() + iproxies_coverage.printstats() + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/codegen/definitions.py b/codegen/definitions.py new file mode 100644 index 0000000..911c8dd --- /dev/null +++ b/codegen/definitions.py @@ -0,0 +1,607 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +import copy +import sys + +def get_valid_scheme_definitions(defs): + return [x for x in defs if isinstance(x, tuple) and len(x) >= 2] + +def unescape(s): + s = s.replace('\r\n', '\\r\\n').replace('\t', '\\t') + return s.replace('\r', '\\r').replace('\n', '\\n') + +def make_docstring(lines): + return "(char *) " + '\n'.join(['"%s"' % unescape(s) for s in lines]) + +# New Parameter class, wich emulates a tuple for compatibility reasons +class Parameter(object): + def __init__(self, ptype, pname, pdflt, pnull, pdir=None, keeprefcount = False): + self.ptype = ptype + self.pname = pname + self.pdflt = pdflt + self.pnull = pnull + self.pdir = pdir + self.keeprefcount = keeprefcount + + def __len__(self): return 4 + def __getitem__(self, i): + return (self.ptype, self.pname, self.pdflt, self.pnull)[i] + + def merge(self, old): + if old.pdflt is not None: + self.pdflt = old.pdflt + if old.pnull is not None: + self.pnull = old.pnull + +# Parameter for property based constructors +class Property(object): + def __init__(self, pname, optional, argname): + self.pname = pname + self.optional = optional + self.argname = argname + + def merge(self, old): + if old.optional is not None: + self.optional = old.optional + if old.argname is not None: + self.argname = old.argname + + +class Definition: + docstring = "NULL" + def __init__(self, *args): + """Create a new defs object of this type. The arguments are the + components of the definition""" + raise RuntimeError, "this is an abstract class" + def merge(self, old): + """Merge in customisations from older version of definition""" + raise RuntimeError, "this is an abstract class" + def write_defs(self, fp=sys.stdout): + """write out this definition in defs file format""" + raise RuntimeError, "this is an abstract class" + + def guess_return_value_ownership(self): + "return 1 if caller owns return value" + if getattr(self, 'is_constructor_of', False): + self.caller_owns_return = True + elif self.ret in ('char*', 'gchar*', 'string'): + self.caller_owns_return = True + else: + self.caller_owns_return = False + + +class ObjectDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.parent = None + self.c_name = None + self.typecode = None + self.fields = [] + self.implements = [] + self.class_init_func = None + self.has_new_constructor_api = False + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'docstring': + self.docstring = make_docstring(arg[1:]) + elif arg[0] == 'parent': + self.parent = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'fields': + for parg in arg[1:]: + self.fields.append((parg[0], parg[1])) + elif arg[0] == 'implements': + self.implements.append(arg[1]) + def merge(self, old): + # currently the .h parser doesn't try to work out what fields of + # an object structure should be public, so we just copy the list + # from the old version ... + self.fields = old.fields + self.implements = old.implements + def write_defs(self, fp=sys.stdout): + fp.write('(define-object ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.parent != (None, None): + fp.write(' (parent "' + self.parent + '")\n') + for interface in self.implements: + fp.write(' (implements "' + interface + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.fields: + fp.write(' (fields\n') + for (ftype, fname) in self.fields: + fp.write(' \'("' + ftype + '" "' + fname + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + +class MiniObjectDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.parent = None + self.c_name = None + self.typecode = None + self.fields = [] + self.implements = [] + for arg in args: + if type(arg) != type(()) or len(arg) < 2: + continue + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'parent': + self.parent = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'fields': + for parg in arg[1:]: + self.fields.append((parg[0], parg[1])) + elif arg[0] == 'implements': + self.implements.append(arg[1]) + def merge(self, old): + # currently the .h parser doesn't try to work out what fields of + # an object structure should be public, so we just copy the list + # from the old version ... + self.fields = old.fields + self.implements = old.implements + def write_defs(self, fp=sys.stdout): + fp.write('(define-object ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.parent != (None, None): + fp.write(' (parent "' + self.parent + '")\n') + for interface in self.implements: + fp.write(' (implements "' + interface + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.fields: + fp.write(' (fields\n') + for (ftype, fname) in self.fields: + fp.write(' \'("' + ftype + '" "' + fname + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + + +class InterfaceDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.c_name = None + self.typecode = None + self.vtable = None + self.fields = [] + self.interface_info = None + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'docstring': + self.docstring = make_docstring(arg[1:]) + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'vtable': + self.vtable = arg[1] + if self.vtable is None: + self.vtable = self.c_name + "Iface" + def write_defs(self, fp=sys.stdout): + fp.write('(define-interface ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + fp.write(')\n\n') + +class EnumDef(Definition): + def __init__(self, name, *args): + self.deftype = 'enum' + self.name = name + self.in_module = None + self.c_name = None + self.typecode = None + self.values = [] + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.in_module = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'values': + for varg in arg[1:]: + self.values.append((varg[0], varg[1])) + def merge(self, old): + pass + def write_defs(self, fp=sys.stdout): + fp.write('(define-' + self.deftype + ' ' + self.name + '\n') + if self.in_module: + fp.write(' (in-module "' + self.in_module + '")\n') + fp.write(' (c-name "' + self.c_name + '")\n') + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.values: + fp.write(' (values\n') + for name, val in self.values: + fp.write(' \'("' + name + '" "' + val + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + +class FlagsDef(EnumDef): + def __init__(self, *args): + apply(EnumDef.__init__, (self,) + args) + self.deftype = 'flags' + +class BoxedDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.c_name = None + self.typecode = None + self.copy = None + self.release = None + self.fields = [] + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'copy-func': + self.copy = arg[1] + elif arg[0] == 'release-func': + self.release = arg[1] + elif arg[0] == 'fields': + for parg in arg[1:]: + self.fields.append((parg[0], parg[1])) + def merge(self, old): + # currently the .h parser doesn't try to work out what fields of + # an object structure should be public, so we just copy the list + # from the old version ... + self.fields = old.fields + def write_defs(self, fp=sys.stdout): + fp.write('(define-boxed ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.copy: + fp.write(' (copy-func "' + self.copy + '")\n') + if self.release: + fp.write(' (release-func "' + self.release + '")\n') + if self.fields: + fp.write(' (fields\n') + for (ftype, fname) in self.fields: + fp.write(' \'("' + ftype + '" "' + fname + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + +class PointerDef(Definition): + def __init__(self, name, *args): + self.name = name + self.module = None + self.c_name = None + self.typecode = None + self.fields = [] + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.module = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'fields': + for parg in arg[1:]: + self.fields.append((parg[0], parg[1])) + def merge(self, old): + # currently the .h parser doesn't try to work out what fields of + # an object structure should be public, so we just copy the list + # from the old version ... + self.fields = old.fields + def write_defs(self, fp=sys.stdout): + fp.write('(define-pointer ' + self.name + '\n') + if self.module: + fp.write(' (in-module "' + self.module + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.fields: + fp.write(' (fields\n') + for (ftype, fname) in self.fields: + fp.write(' \'("' + ftype + '" "' + fname + '")\n') + fp.write(' )\n') + fp.write(')\n\n') + +class MethodDefBase(Definition): + def __init__(self, name, *args): + dump = 0 + self.name = name + self.ret = None + self.caller_owns_return = None + self.unblock_threads = None + self.c_name = None + self.typecode = None + self.of_object = None + self.params = [] # of form (type, name, default, nullok) + self.varargs = 0 + self.deprecated = None + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'of-object': + self.of_object = arg[1] + elif arg[0] == 'docstring': + self.docstring = make_docstring(arg[1:]) + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'return-type': + self.ret = arg[1] + elif arg[0] == 'caller-owns-return': + self.caller_owns_return = arg[1] in ('t', '#t') + elif arg[0] == 'unblock-threads': + self.unblock_threads = arg[1] in ('t', '#t') + elif arg[0] == 'parameters': + for parg in arg[1:]: + ptype = parg[0] + pname = parg[1] + pdflt = None + pnull = 0 + pdir = None + keeprefcount = False + for farg in parg[2:]: + assert isinstance(farg, tuple) + if farg[0] == 'default': + pdflt = farg[1] + elif farg[0] == 'null-ok': + pnull = 1 + elif farg[0] == 'direction': + pdir = farg[1] + elif farg[0] == 'keep-refcount': + keeprefcount = True + self.params.append(Parameter(ptype, pname, pdflt, pnull, pdir, + keeprefcount=keeprefcount)) + elif arg[0] == 'varargs': + self.varargs = arg[1] in ('t', '#t') + elif arg[0] == 'deprecated': + self.deprecated = arg[1] + else: + sys.stderr.write("Warning: %s argument unsupported.\n" + % (arg[0])) + dump = 1 + if dump: + self.write_defs(sys.stderr) + + if self.caller_owns_return is None and self.ret is not None: + self.guess_return_value_ownership() + + def merge(self, old, parmerge): + self.caller_owns_return = old.caller_owns_return + self.varargs = old.varargs + # here we merge extra parameter flags accross to the new object. + if not parmerge: + self.params = copy.deepcopy(old.params) + return + for i in range(len(self.params)): + ptype, pname, pdflt, pnull = self.params[i] + for p2 in old.params: + if p2[1] == pname: + self.params[i] = (ptype, pname, p2[2], p2[3]) + break + def _write_defs(self, fp=sys.stdout): + if self.of_object != (None, None): + fp.write(' (of-object "' + self.of_object + '")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.caller_owns_return: + fp.write(' (caller-owns-return #t)\n') + if self.unblock_threads: + fp.write(' (unblock_threads #t)\n') + if self.ret: + fp.write(' (return-type "' + self.ret + '")\n') + if self.deprecated: + fp.write(' (deprecated "' + self.deprecated + '")\n') + if self.params: + fp.write(' (parameters\n') + for ptype, pname, pdflt, pnull in self.params: + fp.write(' \'("' + ptype + '" "' + pname +'"') + if pdflt: fp.write(' (default "' + pdflt + '")') + if pnull: fp.write(' (null-ok)') + fp.write(')\n') + fp.write(' )\n') + if self.varargs: + fp.write(' (varargs #t)\n') + fp.write(')\n\n') + + +class MethodDef(MethodDefBase): + def __init__(self, name, *args): + MethodDefBase.__init__(self, name, *args) + for item in ('c_name', 'of_object'): + if self.__dict__[item] == None: + self.write_defs(sys.stderr) + raise RuntimeError, "definition missing required %s" % (item,) + + def write_defs(self, fp=sys.stdout): + fp.write('(define-method ' + self.name + '\n') + self._write_defs(fp) + +class VirtualDef(MethodDefBase): + def write_defs(self, fp=sys.stdout): + fp.write('(define-virtual ' + self.name + '\n') + self._write_defs(fp) + +class FunctionDef(Definition): + def __init__(self, name, *args): + dump = 0 + self.name = name + self.in_module = None + self.is_constructor_of = None + self.ret = None + self.caller_owns_return = None + self.unblock_threads = None + self.c_name = None + self.typecode = None + self.params = [] # of form (type, name, default, nullok) + self.varargs = 0 + self.deprecated = None + for arg in get_valid_scheme_definitions(args): + if arg[0] == 'in-module': + self.in_module = arg[1] + elif arg[0] == 'docstring': + self.docstring = make_docstring(arg[1:]) + elif arg[0] == 'is-constructor-of': + self.is_constructor_of = arg[1] + elif arg[0] == 'c-name': + self.c_name = arg[1] + elif arg[0] == 'gtype-id': + self.typecode = arg[1] + elif arg[0] == 'return-type': + self.ret = arg[1] + elif arg[0] == 'caller-owns-return': + self.caller_owns_return = arg[1] in ('t', '#t') + elif arg[0] == 'unblock-threads': + self.unblock_threads = arg[1] in ('t', '#t') + elif arg[0] == 'parameters': + for parg in arg[1:]: + ptype = parg[0] + pname = parg[1] + pdflt = None + pnull = 0 + keeprefcount = False + for farg in parg[2:]: + if farg[0] == 'default': + pdflt = farg[1] + elif farg[0] == 'null-ok': + pnull = 1 + elif farg[0] == 'keep-refcount': + keeprefcount = True + self.params.append(Parameter(ptype, pname, pdflt, pnull, + keeprefcount = keeprefcount)) + elif arg[0] == 'properties': + if self.is_constructor_of is None: + print >> sys.stderr, "Warning: (properties ...) "\ + "is only valid for constructors" + for prop in arg[1:]: + pname = prop[0] + optional = False + argname = pname + for farg in prop[1:]: + if farg[0] == 'optional': + optional = True + elif farg[0] == 'argname': + argname = farg[1] + self.params.append(Property(pname, optional, argname)) + elif arg[0] == 'varargs': + self.varargs = arg[1] in ('t', '#t') + elif arg[0] == 'deprecated': + self.deprecated = arg[1] + else: + sys.stderr.write("Warning: %s argument unsupported\n" + % (arg[0],)) + dump = 1 + if dump: + self.write_defs(sys.stderr) + + if self.caller_owns_return is None and self.ret is not None: + self.guess_return_value_ownership() + for item in ('c_name',): + if self.__dict__[item] == None: + self.write_defs(sys.stderr) + raise RuntimeError, "definition missing required %s" % (item,) + + _method_write_defs = MethodDef.__dict__['write_defs'] + + def merge(self, old, parmerge): + self.caller_owns_return = old.caller_owns_return + self.varargs = old.varargs + if not parmerge: + self.params = copy.deepcopy(old.params) + return + # here we merge extra parameter flags accross to the new object. + def merge_param(param): + for old_param in old.params: + if old_param.pname == param.pname: + if isinstance(old_param, Property): + # h2def never scans Property's, therefore if + # we have one it was manually written, so we + # keep it. + return copy.deepcopy(old_param) + else: + param.merge(old_param) + return param + raise RuntimeError, "could not find %s in old_parameters %r" % ( + param.pname, [p.pname for p in old.params]) + try: + self.params = map(merge_param, self.params) + except RuntimeError: + # parameter names changed and we can't find a match; it's + # safer to keep the old parameter list untouched. + self.params = copy.deepcopy(old.params) + + if not self.is_constructor_of: + try: + self.is_constructor_of = old.is_constructor_of + except AttributeError: + pass + if isinstance(old, MethodDef): + self.name = old.name + # transmogrify from function into method ... + self.write_defs = self._method_write_defs + self.of_object = old.of_object + del self.params[0] + def write_defs(self, fp=sys.stdout): + fp.write('(define-function ' + self.name + '\n') + if self.in_module: + fp.write(' (in-module "' + self.in_module + '")\n') + if self.is_constructor_of: + fp.write(' (is-constructor-of "' + self.is_constructor_of +'")\n') + if self.c_name: + fp.write(' (c-name "' + self.c_name + '")\n') + if self.typecode: + fp.write(' (gtype-id "' + self.typecode + '")\n') + if self.caller_owns_return: + fp.write(' (caller-owns-return #t)\n') + if self.unblock_threads: + fp.write(' (unblock-threads #t)\n') + if self.ret: + fp.write(' (return-type "' + self.ret + '")\n') + if self.deprecated: + fp.write(' (deprecated "' + self.deprecated + '")\n') + if self.params: + if isinstance(self.params[0], Parameter): + fp.write(' (parameters\n') + for ptype, pname, pdflt, pnull in self.params: + fp.write(' \'("' + ptype + '" "' + pname +'"') + if pdflt: fp.write(' (default "' + pdflt + '")') + if pnull: fp.write(' (null-ok)') + fp.write(')\n') + fp.write(' )\n') + elif isinstance(self.params[0], Property): + fp.write(' (properties\n') + for prop in self.params: + fp.write(' \'("' + prop.pname +'"') + if prop.optional: fp.write(' (optional)') + fp.write(')\n') + fp.write(' )\n') + else: + assert False, "strange parameter list %r" % self.params[0] + if self.varargs: + fp.write(' (varargs #t)\n') + + fp.write(')\n\n') diff --git a/codegen/defsparser.py b/codegen/defsparser.py new file mode 100644 index 0000000..e24a969 --- /dev/null +++ b/codegen/defsparser.py @@ -0,0 +1,143 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +import os, sys +import scmexpr +from definitions import BoxedDef, EnumDef, FlagsDef, FunctionDef, \ + InterfaceDef, MethodDef, ObjectDef, MiniObjectDef, PointerDef, \ + VirtualDef + +class IncludeParser(scmexpr.Parser): + """A simple parser that follows include statements automatically""" + def include(self, filename): + if not os.path.isabs(filename): + filename = os.path.join(os.path.dirname(self.filename), filename) + + # set self.filename to the include name, to handle recursive includes + oldfile = self.filename + self.filename = filename + self.startParsing() + self.filename = oldfile + +class DefsParser(IncludeParser): + def __init__(self, arg, defines={}): + IncludeParser.__init__(self, arg) + self.objects = [] + self.miniobjects = [] + self.interfaces = [] + self.enums = [] # enums and flags + self.boxes = [] # boxed types + self.pointers = [] # pointer types + self.functions = [] # functions and methods + self.virtuals = [] # virtual methods + self.c_name = {} # hash of c names of functions + self.methods = {} # hash of methods of particular objects + self.defines = defines # -Dfoo=bar options, as dictionary + + def define_object(self, *args): + odef = apply(ObjectDef, args) + self.objects.append(odef) + self.c_name[odef.c_name] = odef + # TODO: define_mini_object + def define_miniobject(self, *args): + odef = apply(MiniObjectDef, args) + self.miniobjects.append(odef) + self.c_name[odef.c_name] = odef + def define_interface(self, *args): + idef = apply(InterfaceDef, args) + self.interfaces.append(idef) + self.c_name[idef.c_name] = idef + def define_enum(self, *args): + edef = apply(EnumDef, args) + self.enums.append(edef) + self.c_name[edef.c_name] = edef + def define_flags(self, *args): + fdef = apply(FlagsDef, args) + self.enums.append(fdef) + self.c_name[fdef.c_name] = fdef + def define_boxed(self, *args): + bdef = apply(BoxedDef, args) + self.boxes.append(bdef) + self.c_name[bdef.c_name] = bdef + def define_pointer(self, *args): + pdef = apply(PointerDef, args) + self.pointers.append(pdef) + self.c_name[pdef.c_name] = pdef + def define_function(self, *args): + fdef = apply(FunctionDef, args) + self.functions.append(fdef) + self.c_name[fdef.c_name] = fdef + def define_method(self, *args): + mdef = apply(MethodDef, args) + self.functions.append(mdef) + self.c_name[mdef.c_name] = mdef + def define_virtual(self, *args): + vdef = apply(VirtualDef, args) + self.virtuals.append(vdef) + def merge(self, old, parmerge): + for obj in self.objects: + if old.c_name.has_key(obj.c_name): + obj.merge(old.c_name[obj.c_name]) + for f in self.functions: + if old.c_name.has_key(f.c_name): + f.merge(old.c_name[f.c_name], parmerge) + + def printMissing(self, old): + for obj in self.objects: + if not old.c_name.has_key(obj.c_name): + obj.write_defs() + for f in self.functions: + if not old.c_name.has_key(f.c_name): + f.write_defs() + + def write_defs(self, fp=sys.stdout): + for obj in self.objects: + obj.write_defs(fp) + # TODO: Add miniobject + for obj in self.miniobjects: + obj.write_defs(fp) + for enum in self.enums: + enum.write_defs(fp) + for boxed in self.boxes: + boxed.write_defs(fp) + for pointer in self.pointers: + pointer.write_defs(fp) + for func in self.functions: + func.write_defs(fp) + + def find_object(self, c_name): + for obj in self.objects: + if obj.c_name == c_name: + return obj + else: + raise ValueError, 'object not found' + + def find_constructor(self, obj, overrides): + for func in self.functions: + if isinstance(func, FunctionDef) and \ + func.is_constructor_of == obj.c_name and \ + not overrides.is_ignored(func.c_name): + return func + + def find_methods(self, obj): + objname = obj.c_name + return filter(lambda func, on=objname: isinstance(func, MethodDef) and + func.of_object == on, self.functions) + + def find_virtuals(self, obj): + objname = obj.c_name + retval = filter(lambda func, on=objname: isinstance(func, VirtualDef) and + func.of_object == on, self.virtuals) + return retval + + def find_functions(self): + return filter(lambda func: isinstance(func, FunctionDef) and + not func.is_constructor_of, self.functions) + + def ifdef(self, *args): + if args[0] in self.defines: + for arg in args[1:]: + self.handle(arg) + + def ifndef(self, *args): + if args[0] not in self.defines: + for arg in args[1:]: + self.handle(arg) diff --git a/codegen/docextract.py b/codegen/docextract.py new file mode 100644 index 0000000..e6c6505 --- /dev/null +++ b/codegen/docextract.py @@ -0,0 +1,185 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +'''Simple module for extracting GNOME style doc comments from C +sources, so I can use them for other purposes.''' + +import sys, os, string, re + +__all__ = ['extract'] + +class FunctionDoc: + def __init__(self): + self.name = None + self.params = [] + self.description = '' + self.ret = '' + def set_name(self, name): + self.name = name + def add_param(self, name, description): + if name == '...': + name = 'Varargs' + self.params.append((name, description)) + def append_to_last_param(self, extra): + self.params[-1] = (self.params[-1][0], self.params[-1][1] + extra) + def append_to_named_param(self, name, extra): + for i in range(len(self.params)): + if self.params[i][0] == name: + self.params[i] = (name, self.params[i][1] + extra) + return + # fall through to adding extra parameter ... + self.add_param(name, extra) + def append_description(self, extra): + self.description = self.description + extra + def append_return(self, extra): + self.ret = self.ret + extra + + def get_param_description(self, name): + for param, description in self.params: + if param == name: + return description + else: + return '' + +comment_start_pat = re.compile(r'^\s*/\*\*\s') +comment_end_pat = re.compile(r'^\s*\*+/') +comment_line_lead = re.compile(r'^\s*\*\s*') +funcname_pat = re.compile(r'^(\w+)\s*:?') +return_pat = re.compile(r'^(returns:|return\s+value:|returns\s*)(.*\n?)$', + re.IGNORECASE) +param_pat = re.compile(r'^@(\S+)\s*:(.*\n?)$') + +def parse_file(fp, doc_dict): + line = fp.readline() + in_comment_block = 0 + while line: + if not in_comment_block: + if comment_start_pat.match(line): + in_comment_block = 1 + cur_doc = FunctionDoc() + in_description = 0 + in_return = 0 + line = fp.readline() + continue + + # we are inside a comment block ... + if comment_end_pat.match(line): + if not cur_doc.name: + sys.stderr.write("no function name found in doc comment\n") + else: + doc_dict[cur_doc.name] = cur_doc + in_comment_block = 0 + line = fp.readline() + continue + + # inside a comment block, and not the end of the block ... + line = comment_line_lead.sub('', line) + if not line: line = '\n' + + if not cur_doc.name: + match = funcname_pat.match(line) + if match: + cur_doc.set_name(match.group(1)) + elif in_return: + match = return_pat.match(line) + if match: + # assume the last return statement was really part of the + # description + return_start = match.group(1) + cur_doc.ret = match.group(2) + cur_doc.description = cur_doc.description + return_start + \ + cur_doc.ret + else: + cur_doc.append_return(line) + elif in_description: + if line[:12] == 'Description:': + line = line[12:] + match = return_pat.match(line) + if match: + in_return = 1 + return_start = match.group(1) + cur_doc.append_return(match.group(2)) + else: + cur_doc.append_description(line) + elif line == '\n': + # end of parameters + in_description = 1 + else: + match = param_pat.match(line) + if match: + param = match.group(1) + desc = match.group(2) + if param == 'returns': + cur_doc.ret = desc + else: + cur_doc.add_param(param, desc) + else: + # must be continuation + try: + if param == 'returns': + cur_doc.append_return(line) + else: + cur_doc.append_to_last_param(line) + except: + sys.stderr.write('something weird while reading param\n') + line = fp.readline() + +def parse_dir(dir, doc_dict): + for file in os.listdir(dir): + if file in ('.', '..'): continue + path = os.path.join(dir, file) + if os.path.isdir(path): + parse_dir(path, doc_dict) + if len(file) > 2 and file[-2:] == '.c': + parse_file(open(path, 'r'), doc_dict) + +def extract(dirs, doc_dict=None): + if not doc_dict: doc_dict = {} + for dir in dirs: + parse_dir(dir, doc_dict) + return doc_dict + +tmpl_section_pat = re.compile(r'^$') +def parse_tmpl(fp, doc_dict): + cur_doc = None + + line = fp.readline() + while line: + match = tmpl_section_pat.match(line) + if match: + cur_doc = None # new input shouldn't affect the old doc dict + sect_type = match.group(1) + sect_name = match.group(2) + + if sect_type == 'FUNCTION': + cur_doc = doc_dict.get(sect_name) + if not cur_doc: + cur_doc = FunctionDoc() + cur_doc.set_name(sect_name) + doc_dict[sect_name] = cur_doc + elif line == '\n': + cur_doc = None # don't worry about unused params. + elif cur_doc: + if line[:10] == '@Returns: ': + if string.strip(line[10:]): + cur_doc.append_return(line[10:]) + elif line[0] == '@': + pos = string.find(line, ':') + if pos >= 0: + cur_doc.append_to_named_param(line[1:pos], line[pos+1:]) + else: + cur_doc.append_description(line) + else: + cur_doc.append_description(line) + + line = fp.readline() + +def extract_tmpl(dirs, doc_dict=None): + if not doc_dict: doc_dict = {} + for dir in dirs: + for file in os.listdir(dir): + if file in ('.', '..'): continue + path = os.path.join(dir, file) + if os.path.isdir(path): + continue + if len(file) > 2 and file[-2:] == '.sgml': + parse_tmpl(open(path, 'r'), doc_dict) + return doc_dict diff --git a/codegen/docgen.py b/codegen/docgen.py new file mode 100644 index 0000000..6905a14 --- /dev/null +++ b/codegen/docgen.py @@ -0,0 +1,752 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- +import sys, os, string, re, getopt + +import defsparser +import definitions +import override +import docextract + +class Node: + def __init__(self, name, interfaces=[]): + self.name = name + self.interfaces = interfaces + self.subclasses = [] + def add_child(self, node): + self.subclasses.append(node) + +def build_object_tree(parser): + # reorder objects so that parent classes come first ... + objects = parser.objects[:] + pos = 0 + while pos < len(objects): + parent = objects[pos].parent + for i in range(pos+1, len(objects)): + if objects[i].c_name == parent: + objects.insert(i+1, objects[pos]) + del objects[pos] + break + else: + pos = pos + 1 + + root = Node(None) + nodes = { None: root } + for obj_def in objects: + print obj_def.name + parent_node = nodes[obj_def.parent] + node = Node(obj_def.c_name, obj_def.implements) + parent_node.add_child(node) + nodes[node.name] = node + + if parser.interfaces: + interfaces = Node('gobject.GInterface') + root.add_child(interfaces) + nodes[interfaces.name] = interfaces + for obj_def in parser.interfaces: + node = Node(obj_def.c_name) + interfaces.add_child(node) + nodes[node.name] = node + + if parser.boxes: + boxed = Node('gobject.GBoxed') + root.add_child(boxed) + nodes[boxed.name] = boxed + for obj_def in parser.boxes: + node = Node(obj_def.c_name) + boxed.add_child(node) + nodes[node.name] = node + + if parser.pointers: + pointers = Node('gobject.GPointer') + root.add_child(pointers) + nodes[pointers.name] = pointers + for obj_def in parser.pointers: + node = Node(obj_def.c_name) + pointers.add_child(node) + nodes[node.name] = node + + return root + +class DocWriter: + def __init__(self): + # parse the defs file + self.parser = defsparser.DefsParser(()) + self.overrides = override.Overrides() + self.classmap = {} + self.docs = {} + + def add_sourcedirs(self, source_dirs): + self.docs = docextract.extract(source_dirs, self.docs) + def add_tmpldirs(self, tmpl_dirs): + self.docs = docextract.extract_tmpl(tmpl_dirs, self.docs) + + def add_docs(self, defs_file, overrides_file, module_name): + '''parse information about a given defs file''' + self.parser.filename = defs_file + self.parser.startParsing(defs_file) + if overrides_file: + self.overrides.handle_file(overrides_file) + + for obj in self.parser.objects: + if not self.classmap.has_key(obj.c_name): + self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + for obj in self.parser.interfaces: + if not self.classmap.has_key(obj.c_name): + self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + for obj in self.parser.boxes: + if not self.classmap.has_key(obj.c_name): + self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + for obj in self.parser.pointers: + if not self.classmap.has_key(obj.c_name): + self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + + def pyname(self, name): + return self.classmap.get(name, name) + + def __compare(self, obja, objb): + return cmp(self.pyname(obja.c_name), self.pyname(objb.c_name)) + def output_docs(self, output_prefix): + files = [] + + # class hierarchy + hierarchy = build_object_tree(self.parser) + filename = self.create_filename('hierarchy', output_prefix) + fp = open(filename, 'w') + self.write_full_hierarchy(hierarchy, fp) + fp.close() + + obj_defs = self.parser.objects + self.parser.interfaces + \ + self.parser.boxes + self.parser.pointers + obj_defs.sort(self.__compare) + for obj_def in obj_defs: + filename = self.create_filename(obj_def.c_name, output_prefix) + fp = open(filename, 'w') + if isinstance(obj_def, definitions.ObjectDef): + self.output_object_docs(obj_def, fp) + elif isinstance(obj_def, definitions.InterfaceDef): + self.output_interface_docs(obj_def, fp) + elif isinstance(obj_def, definitions.BoxedDef): + self.output_boxed_docs(obj_def, fp) + elif isinstance(obj_def, definitions.PointerDef): + self.output_boxed_docs(obj_def, fp) + fp.close() + files.append((os.path.basename(filename), obj_def)) + + if files: + filename = self.create_toc_filename(output_prefix) + fp = open(filename, 'w') + self.output_toc(files, fp) + fp.close() + + def output_object_docs(self, obj_def, fp=sys.stdout): + self.write_class_header(obj_def.c_name, fp) + + self.write_heading('Synopsis', fp) + self.write_synopsis(obj_def, fp) + self.close_section(fp) + + # construct the inheritence hierarchy ... + ancestry = [ (obj_def.c_name, obj_def.implements) ] + try: + parent = obj_def.parent + while parent != None: + if parent == 'GObject': + ancestry.append(('GObject', [])) + parent = None + else: + parent_def = self.parser.find_object(parent) + ancestry.append((parent_def.c_name, parent_def.implements)) + parent = parent_def.parent + except ValueError: + pass + ancestry.reverse() + self.write_heading('Ancestry', fp) + self.write_hierarchy(obj_def.c_name, ancestry, fp) + self.close_section(fp) + + constructor = self.parser.find_constructor(obj_def, self.overrides) + if constructor: + self.write_heading('Constructor', fp) + self.write_constructor(constructor, + self.docs.get(constructor.c_name, None), + fp) + self.close_section(fp) + + methods = self.parser.find_methods(obj_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + if methods: + self.write_heading('Methods', fp) + for method in methods: + self.write_method(method, self.docs.get(method.c_name, None), fp) + self.close_section(fp) + + self.write_class_footer(obj_def.c_name, fp) + + def output_interface_docs(self, int_def, fp=sys.stdout): + self.write_class_header(int_def.c_name, fp) + + self.write_heading('Synopsis', fp) + self.write_synopsis(int_def, fp) + self.close_section(fp) + + methods = self.parser.find_methods(int_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + if methods: + self.write_heading('Methods', fp) + for method in methods: + self.write_method(method, self.docs.get(method.c_name, None), fp) + self.close_section(fp) + + self.write_class_footer(int_def.c_name, fp) + + def output_boxed_docs(self, box_def, fp=sys.stdout): + self.write_class_header(box_def.c_name, fp) + + self.write_heading('Synopsis', fp) + self.write_synopsis(box_def, fp) + self.close_section(fp) + + constructor = self.parser.find_constructor(box_def, self.overrides) + if constructor: + self.write_heading('Constructor', fp) + self.write_constructor(constructor, + self.docs.get(constructor.c_name, None), + fp) + self.close_section(fp) + + methods = self.parser.find_methods(box_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + if methods: + self.write_heading('Methods', fp) + for method in methods: + self.write_method(method, self.docs.get(method.c_name, None), fp) + self.close_section(fp) + + self.write_class_footer(box_def.c_name, fp) + + def output_toc(self, files, fp=sys.stdout): + fp.write('TOC\n\n') + for filename, obj_def in files: + fp.write(obj_def.c_name + ' - ' + filename + '\n') + + # override the following to create a more complex output format + def create_filename(self, obj_name, output_prefix): + '''Create output filename for this particular object''' + return output_prefix + '-' + string.lower(obj_name) + '.txt' + def create_toc_filename(self, output_prefix): + return self.create_filename(self, 'docs', output_prefix) + + def write_full_hierarchy(self, hierarchy, fp): + def handle_node(node, fp, indent=''): + for child in node.subclasses: + fp.write(indent + node.name) + if node.interfaces: + fp.write(' (implements ') + fp.write(string.join(node.interfaces, ', ')) + fp.write(')\n') + else: + fp.write('\n') + handle_node(child, fp, indent + ' ') + handle_node(hierarchy, fp) + + # these need to handle default args ... + def create_constructor_prototype(self, func_def): + return func_def.is_constructor_of + '(' + \ + string.join(map(lambda x: x[1], func_def.params), ', ') + \ + ')' + def create_function_prototype(self, func_def): + return func_def.name + '(' + \ + string.join(map(lambda x: x[1], func_def.params), ', ') + \ + ')' + def create_method_prototype(self, meth_def): + return meth_def.of_object + '.' + \ + meth_def.name + '(' + \ + string.join(map(lambda x: x[1], meth_def.params), ', ') + \ + ')' + + def write_class_header(self, obj_name, fp): + fp.write('Class %s\n' % obj_name) + fp.write('======%s\n\n' % ('=' * len(obj_name))) + def write_class_footer(self, obj_name, fp): + pass + def write_heading(self, text, fp): + fp.write('\n' + text + '\n' + ('-' * len(text)) + '\n') + def close_section(self, fp): + pass + def write_synopsis(self, obj_def, fp): + fp.write('class %s' % obj_def.c_name) + if isinstance(obj_def, definitions.ObjectDef): + bases = [] + if obj_def.parent: bases.append(obj_def.parent) + bases = bases = obj_def.implements + if bases: + fp.write('(%s)' % string.join(bases, ', ')) + fp.write(':\n') + + constructor = self.parser.find_constructor(obj_def, self.overrides) + if constructor: + prototype = self.create_constructor_prototype(constructor) + fp.write(' def %s\n' % prototype) + methods = self.parser.find_methods(obj_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + for meth in methods: + prototype = self.create_method_prototype(meth) + fp.write(' def %s\n' % prototype) + + def write_hierarchy(self, obj_name, ancestry, fp): + indent = '' + for name, interfaces in ancestry: + fp.write(indent + '+-- ' + name) + if interfaces: + fp.write(' (implements ') + fp.write(string.join(interfaces, ', ')) + fp.write(')\n') + else: + fp.write('\n') + indent = indent + ' ' + fp.write('\n') + def write_constructor(self, func_def, func_doc, fp): + prototype = self.create_constructor_prototype(func_def) + fp.write(prototype + '\n\n') + for type, name, dflt, null in func_def.params: + if func_doc: + descr = func_doc.get_param_description(name) + else: + descr = 'a ' + type + fp.write(' ' + name + ': ' + descr + '\n') + if func_def.ret and func_def.ret != 'none': + if func_doc and func_doc.ret: + descr = func_doc.ret + else: + descr = 'a ' + func_def.ret + fp.write(' Returns: ' + descr + '\n') + if func_doc and func_doc.description: + fp.write(func_doc.description) + fp.write('\n\n\n') + def write_method(self, meth_def, func_doc, fp): + prototype = self.create_method_prototype(meth_def) + fp.write(prototype + '\n\n') + for type, name, dflt, null in meth_def.params: + if func_doc: + descr = func_doc.get_param_description(name) + else: + descr = 'a ' + type + fp.write(' ' + name + ': ' + descr + '\n') + if meth_def.ret and meth_def.ret != 'none': + if func_doc and func_doc.ret: + descr = func_doc.ret + else: + descr = 'a ' + meth_def.ret + fp.write(' Returns: ' + descr + '\n') + if func_doc and func_doc.description: + fp.write('\n') + fp.write(func_doc.description) + fp.write('\n\n') + +class DocbookDocWriter(DocWriter): + def __init__(self, use_xml=0): + DocWriter.__init__(self) + self.use_xml = use_xml + + def create_filename(self, obj_name, output_prefix): + '''Create output filename for this particular object''' + stem = output_prefix + '-' + string.lower(obj_name) + if self.use_xml: + return stem + '.xml' + else: + return stem + '.sgml' + def create_toc_filename(self, output_prefix): + if self.use_xml: + return self.create_filename('classes', output_prefix) + else: + return self.create_filename('docs', output_prefix) + + # make string -> reference translation func + __transtable = [ '-' ] * 256 + for digit in '0123456789': + __transtable[ord(digit)] = digit + for letter in 'abcdefghijklmnopqrstuvwxyz': + __transtable[ord(letter)] = letter + __transtable[ord(string.upper(letter))] = letter + __transtable = string.join(__transtable, '') + + def make_class_ref(self, obj_name): + return 'class-' + string.translate(obj_name, self.__transtable) + def make_method_ref(self, meth_def): + return 'method-' + string.translate(meth_def.of_object, + self.__transtable) + \ + '--' + string.translate(meth_def.name, self.__transtable) + + __function_pat = re.compile(r'(\w+)\s*\(\)') + def __format_function(self, match): + info = self.parser.c_name.get(match.group(1), None) + if info: + if isinstance(info, defsparser.FunctionDef): + if info.is_constructor_of is not None: + # should have a link here + return '%s()' % \ + self.pyname(info.is_constructor_of) + else: + return '' + info.name + '()' + if isinstance(info, defsparser.MethodDef): + return '' + self.pyname(info.of_object) + '.' + \ + info.name + '()' + # fall through through + return '' + match.group(1) + '()' + __parameter_pat = re.compile(r'\@(\w+)') + def __format_param(self, match): + return '' + match.group(1) + '' + __constant_pat = re.compile(r'\%(-?\w+)') + def __format_const(self, match): + return '' + match.group(1) + '' + __symbol_pat = re.compile(r'#([\w-]+)') + def __format_symbol(self, match): + info = self.parser.c_name.get(match.group(1), None) + if info: + if isinstance(info, defsparser.FunctionDef): + if info.is_constructor_of is not None: + # should have a link here + return '' + self.pyname(info.is_constructor_of) + \ + '' + else: + return '' + info.name + '' + if isinstance(info, defsparser.MethodDef): + return '' + self.pyname(info.of_object) + '.' + \ + info.name + '' + if isinstance(info, defsparser.ObjectDef) or \ + isinstance(info, defsparser.InterfaceDef) or \ + isinstance(info, defsparser.BoxedDef) or \ + isinstance(info, defsparser.PointerDef): + return '' + self.pyname(info.c_name) + \ + '' + # fall through through + return '' + match.group(1) + '' + + def reformat_text(self, text, singleline=0): + # replace special strings ... + text = self.__function_pat.sub(self.__format_function, text) + text = self.__parameter_pat.sub(self.__format_param, text) + text = self.__constant_pat.sub(self.__format_const, text) + text = self.__symbol_pat.sub(self.__format_symbol, text) + + # don't bother with expansion for single line text. + if singleline: return text + + lines = string.split(string.strip(text), '\n') + for index in range(len(lines)): + if string.strip(lines[index]) == '': + lines[index] = '\n' + continue + lines.insert(0, '') + lines.append('') + return string.join(lines, '\n') + + # write out hierarchy + def write_full_hierarchy(self, hierarchy, fp): + def handle_node(node, fp, indent=''): + if node.name: + fp.write('%s%s' % + (indent, self.make_class_ref(node.name), + self.pyname(node.name))) + if node.interfaces: + fp.write(' (implements ') + for i in range(len(node.interfaces)): + fp.write('%s' % + (self.make_class_ref(node.interfaces[i]), + self.pyname(node.interfaces[i]))) + if i != len(node.interfaces) - 1: + fp.write(', ') + fp.write(')\n') + else: + fp.write('\n') + + indent = indent + ' ' + node.subclasses.sort(lambda a,b: + cmp(self.pyname(a.name), self.pyname(b.name))) + for child in node.subclasses: + handle_node(child, fp, indent) + if self.use_xml: + fp.write('\n') + fp.write('\n') + fp.write('') + handle_node(hierarchy, fp) + fp.write('\n') + + # these need to handle default args ... + def create_constructor_prototype(self, func_def): + sgml = [ '\n'] + sgml.append(' __init__\n') + for type, name, dflt, null in func_def.params: + sgml.append(' ') + sgml.append(name) + sgml.append('') + if dflt: + sgml.append('') + sgml.append(dflt) + sgml.append('') + sgml.append('\n') + if not func_def.params: + sgml.append(' ') + sgml.append(' ') + return string.join(sgml, '') + def create_function_prototype(self, func_def): + sgml = [ '\n \n'] + sgml.append(' ') + sgml.append(func_def.name) + sgml.append('\n') + for type, name, dflt, null in func_def.params: + sgml.append(' ') + sgml.append(name) + sgml.append('') + if dflt: + sgml.append('') + sgml.append(dflt) + sgml.append('') + sgml.append('\n') + if not func_def.params: + sgml.append(' \n ') + return string.join(sgml, '') + def create_method_prototype(self, meth_def, addlink=0): + sgml = [ '\n'] + sgml.append(' ') + if addlink: + sgml.append('' % self.make_method_ref(meth_def)) + sgml.append(self.pyname(meth_def.name)) + if addlink: + sgml.append('') + sgml.append('\n') + for type, name, dflt, null in meth_def.params: + sgml.append(' ') + sgml.append(name) + sgml.append('') + if dflt: + sgml.append('') + sgml.append(dflt) + sgml.append('') + sgml.append('\n') + if not meth_def.params: + sgml.append(' ') + sgml.append(' ') + return string.join(sgml, '') + + def write_class_header(self, obj_name, fp): + if self.use_xml: + fp.write('\n') + fp.write('\n') + fp.write('\n') + fp.write(' \n') + fp.write(' %s\n' + % self.pyname(obj_name)) + fp.write(' 3\n') + fp.write(' PyGTK Docs\n') + fp.write(' \n\n') + fp.write(' \n') + fp.write(' %s\n' + % self.pyname(obj_name)) + fp.write(' \n\n') + def write_class_footer(self, obj_name, fp): + fp.write('\n') + def write_heading(self, text, fp): + fp.write(' \n') + fp.write(' ' + text + '\n\n') + def close_section(self, fp): + fp.write(' \n') + + def write_synopsis(self, obj_def, fp): + fp.write('\n') + fp.write(' %s\n' + % self.pyname(obj_def.c_name)) + if isinstance(obj_def, definitions.ObjectDef): + if obj_def.parent: + fp.write(' %s' + '\n' + % (self.make_class_ref(obj_def.parent), + self.pyname(obj_def.parent))) + for base in obj_def.implements: + fp.write(' %s' + '\n' + % (self.make_class_ref(base), self.pyname(base))) + elif isinstance(obj_def, definitions.InterfaceDef): + fp.write(' gobject.GInterface' + '\n') + elif isinstance(obj_def, definitions.BoxedDef): + fp.write(' gobject.GBoxed' + '\n') + elif isinstance(obj_def, definitions.PointerDef): + fp.write(' gobject.GPointer' + '\n') + + constructor = self.parser.find_constructor(obj_def, self.overrides) + if constructor: + fp.write('%s\n' % self.create_constructor_prototype(constructor)) + methods = self.parser.find_methods(obj_def) + methods = filter(lambda meth, self=self: + not self.overrides.is_ignored(meth.c_name), methods) + for meth in methods: + fp.write('%s\n' % self.create_method_prototype(meth, addlink=1)) + fp.write('\n\n') + + def write_hierarchy(self, obj_name, ancestry, fp): + fp.write('') + indent = '' + for name, interfaces in ancestry: + fp.write(indent + '+-- '+ self.pyname(name) + '') + if interfaces: + fp.write(' (implements ') + for i in range(len(interfaces)): + fp.write('%s' % + (self.make_class_ref(interfaces[i]), + self.pyname(interfaces[i]))) + if i != len(interfaces) - 1: + fp.write(', ') + fp.write(')\n') + else: + fp.write('\n') + indent = indent + ' ' + fp.write('\n\n') + + def write_params(self, params, ret, func_doc, fp): + if not params and (not ret or ret == 'none'): + return + fp.write(' \n') + for type, name, dflt, null in params: + if func_doc: + descr = string.strip(func_doc.get_param_description(name)) + else: + descr = 'a ' + type + fp.write(' \n') + fp.write(' %s :\n' % name) + fp.write(' %s\n' % + self.reformat_text(descr, singleline=1)) + fp.write(' \n') + if ret and ret != 'none': + if func_doc and func_doc.ret: + descr = string.strip(func_doc.ret) + else: + descr = 'a ' + ret + fp.write(' \n') + fp.write(' Returns :\n') + fp.write(' %s\n' % + self.reformat_text(descr, singleline=1)) + fp.write(' \n') + fp.write(' \n') + + def write_constructor(self, func_def, func_doc, fp): + prototype = self.create_constructor_prototype(func_def) + fp.write('%s\n' % prototype) + self.write_params(func_def.params, func_def.ret, func_doc, fp) + + if func_doc and func_doc.description: + fp.write(self.reformat_text(func_doc.description)) + fp.write('\n\n\n') + + def write_method(self, meth_def, func_doc, fp): + fp.write(' \n') + fp.write(' ' + self.pyname(meth_def.of_object) + '.' + + meth_def.name + '\n\n') + prototype = self.create_method_prototype(meth_def) + fp.write('%s\n' % prototype) + self.write_params(meth_def.params, meth_def.ret, func_doc, fp) + if func_doc and func_doc.description: + fp.write(self.reformat_text(func_doc.description)) + fp.write(' \n\n\n') + + def output_toc(self, files, fp=sys.stdout): + if self.use_xml: + fp.write('\n') + fp.write('\n') + #for filename, obj_def in files: + # fp.write(' \n') + #fp.write(']>\n\n') + + #fp.write('\n') + #fp.write(' Class Documentation\n') + #for filename, obj_def in files: + # fp.write('&' + string.translate(obj_def.c_name, + # self.__transtable) + ';\n') + #fp.write('\n') + + fp.write('\n') + fp.write(' Class Reference\n') + for filename, obj_def in files: + fp.write(' \n' % filename) + fp.write('\n') + else: + fp.write('\n') + fp.write(']>\n\n') + + fp.write('\n\n') + fp.write(' \n') + fp.write(' PyGTK Docs\n') + fp.write(' \n') + fp.write(' \n') + fp.write(' James\n') + fp.write(' Henstridge\n') + fp.write(' \n') + fp.write(' \n') + fp.write(' \n\n') + + fp.write(' \n') + fp.write(' Class Hierarchy\n') + fp.write(' Not done yet\n') + fp.write(' \n\n') + + fp.write(' \n') + fp.write(' Class Documentation\n') + for filename, obj_def in files: + fp.write('&' + string.translate(obj_def.c_name, + self.__transtable) + ';\n') + + fp.write(' \n') + fp.write('\n') + +if __name__ == '__main__': + try: + opts, args = getopt.getopt(sys.argv[1:], "d:s:o:", + ["defs-file=", "override=", "source-dir=", + "output-prefix="]) + except getopt.error, e: + sys.stderr.write('docgen.py: %s\n' % e) + sys.stderr.write( + 'usage: docgen.py -d file.defs [-s /src/dir] [-o output-prefix]\n') + sys.exit(1) + defs_file = None + overrides_file = None + source_dirs = [] + output_prefix = 'docs' + for opt, arg in opts: + if opt in ('-d', '--defs-file'): + defs_file = arg + if opt in ('--override',): + overrides_file = arg + elif opt in ('-s', '--source-dir'): + source_dirs.append(arg) + elif opt in ('-o', '--output-prefix'): + output_prefix = arg + if len(args) != 0 or not defs_file: + sys.stderr.write( + 'usage: docgen.py -d file.defs [-s /src/dir] [-o output-prefix]\n') + sys.exit(1) + + d = DocbookDocWriter() + d.add_sourcedirs(source_dirs) + d.add_docs(defs_file, overrides_file, 'gtk') + d.output_docs(output_prefix) diff --git a/codegen/h2def.py b/codegen/h2def.py new file mode 100755 index 0000000..d4b2135 --- /dev/null +++ b/codegen/h2def.py @@ -0,0 +1,536 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- +# Search through a header file looking for function prototypes. +# For each prototype, generate a scheme style definition. +# GPL'ed +# Toby D. Reeves +# +# Modified by James Henstridge to output stuff in +# Havoc's new defs format. Info on this format can be seen at: +# http://www.gnome.org/mailing-lists/archives/gtk-devel-list/2000-January/0085.shtml +# Updated to be PEP-8 compatible and refactored to use OOP + +import getopt +import os +import re +import string +import sys + +import defsparser + +# ------------------ Create typecodes from typenames --------- + +_upperstr_pat1 = re.compile(r'([^A-Z])([A-Z])') +_upperstr_pat2 = re.compile(r'([A-Z][A-Z])([A-Z][0-9a-z])') +_upperstr_pat3 = re.compile(r'^([A-Z])([A-Z])') + +def to_upper_str(name): + """Converts a typename to the equivalent upercase and underscores + name. This is used to form the type conversion macros and enum/flag + name variables""" + name = _upperstr_pat1.sub(r'\1_\2', name) + name = _upperstr_pat2.sub(r'\1_\2', name) + name = _upperstr_pat3.sub(r'\1_\2', name, count=1) + return string.upper(name) + +def typecode(typename): + """create a typecode (eg. GTK_TYPE_WIDGET) from a typename""" + return string.replace(to_upper_str(typename), '_', '_TYPE_', 1) + + +# ------------------ Find object definitions ----------------- + +def strip_comments(buf): + parts = [] + lastpos = 0 + while 1: + pos = string.find(buf, '/*', lastpos) + if pos >= 0: + parts.append(buf[lastpos:pos]) + pos = string.find(buf, '*/', pos) + if pos >= 0: + lastpos = pos + 2 + else: + break + else: + parts.append(buf[lastpos:]) + break + return string.join(parts, '') + +obj_name_pat = "[A-Z][a-z]*[A-Z][A-Za-z0-9]*" + +split_prefix_pat = re.compile('([A-Z]+[a-z]*)([A-Za-z0-9]+)') + +def find_obj_defs(buf, objdefs=[]): + """ + Try to find object definitions in header files. + """ + + # filter out comments from buffer. + buf = strip_comments(buf) + + maybeobjdefs = [] # contains all possible objects from file + + # first find all structures that look like they may represent a GtkObject + pat = re.compile("struct _(" + obj_name_pat + ")\s*{\s*" + + "(" + obj_name_pat + ")\s+", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + maybeobjdefs.append((m.group(1), m.group(2))) + pos = m.end() + + # handle typedef struct { ... } style struct defs. + pat = re.compile("typedef struct\s+[_\w]*\s*{\s*" + + "(" + obj_name_pat + ")\s+[^}]*}\s*" + + "(" + obj_name_pat + ")\s*;", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + maybeobjdefs.append((m.group(2), m.group(2))) + pos = m.end() + + # now find all structures that look like they might represent a class: + pat = re.compile("struct _(" + obj_name_pat + ")Class\s*{\s*" + + "(" + obj_name_pat + ")Class\s+", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + t = (m.group(1), m.group(2)) + # if we find an object structure together with a corresponding + # class structure, then we have probably found a GtkObject subclass. + if t in maybeobjdefs: + objdefs.append(t) + pos = m.end() + + pat = re.compile("typedef struct\s+[_\w]*\s*{\s*" + + "(" + obj_name_pat + ")Class\s+[^}]*}\s*" + + "(" + obj_name_pat + ")Class\s*;", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + t = (m.group(2), m.group(1)) + # if we find an object structure together with a corresponding + # class structure, then we have probably found a GtkObject subclass. + if t in maybeobjdefs: + objdefs.append(t) + pos = m.end() + + # now find all structures that look like they might represent + # a class inherited from GTypeInterface: + pat = re.compile("struct _(" + obj_name_pat + ")Class\s*{\s*" + + "GTypeInterface\s+", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + t = (m.group(1), '') + t2 = (m.group(1)+'Class', 'GTypeInterface') + # if we find an object structure together with a corresponding + # class structure, then we have probably found a GtkObject subclass. + if t2 in maybeobjdefs: + objdefs.append(t) + pos = m.end() + + # now find all structures that look like they might represent + # an Iface inherited from GTypeInterface: + pat = re.compile("struct _(" + obj_name_pat + ")Iface\s*{\s*" + + "GTypeInterface\s+", re.MULTILINE) + pos = 0 + while pos < len(buf): + m = pat.search(buf, pos) + if not m: break + t = (m.group(1), '') + t2 = (m.group(1)+'Iface', 'GTypeInterface') + # if we find an object structure together with a corresponding + # class structure, then we have probably found a GtkObject subclass. + if t2 in maybeobjdefs: + objdefs.append(t) + pos = m.end() + +def sort_obj_defs(objdefs): + objdefs.sort() # not strictly needed, but looks nice + pos = 0 + while pos < len(objdefs): + klass,parent = objdefs[pos] + for i in range(pos+1, len(objdefs)): + # parent below subclass ... reorder + if objdefs[i][0] == parent: + objdefs.insert(i+1, objdefs[pos]) + del objdefs[pos] + break + else: + pos = pos + 1 + return objdefs + +# ------------------ Find enum definitions ----------------- + +def find_enum_defs(buf, enums=[]): + # strip comments + # bulk comments + buf = strip_comments(buf) + + buf = re.sub('\n', ' ', buf) + + enum_pat = re.compile(r'enum\s*{([^}]*)}\s*([A-Z][A-Za-z]*)(\s|;)') + splitter = re.compile(r'\s*,\s', re.MULTILINE) + pos = 0 + while pos < len(buf): + m = enum_pat.search(buf, pos) + if not m: break + + name = m.group(2) + vals = m.group(1) + isflags = string.find(vals, '<<') >= 0 + entries = [] + for val in splitter.split(vals): + if not string.strip(val): continue + entries.append(string.split(val)[0]) + if name != 'GdkCursorType': + enums.append((name, isflags, entries)) + + pos = m.end() + +# ------------------ Find function definitions ----------------- + +def clean_func(buf): + """ + Ideally would make buf have a single prototype on each line. + Actually just cuts out a good deal of junk, but leaves lines + where a regex can figure prototypes out. + """ + # bulk comments + buf = strip_comments(buf) + + # compact continued lines + pat = re.compile(r"""\\\n""", re.MULTILINE) + buf = pat.sub('', buf) + + # Preprocess directives + pat = re.compile(r"""^[#].*?$""", re.MULTILINE) + buf = pat.sub('', buf) + + #typedefs, stucts, and enums + pat = re.compile(r"""^(typedef|struct|enum)(\s|.|\n)*?;\s*""", + re.MULTILINE) + buf = pat.sub('', buf) + + #strip DECLS macros + pat = re.compile(r"""G_BEGIN_DECLS|BEGIN_LIBGTOP_DECLS""", re.MULTILINE) + buf = pat.sub('', buf) + + #extern "C" + pat = re.compile(r"""^\s*(extern)\s+\"C\"\s+{""", re.MULTILINE) + buf = pat.sub('', buf) + + #multiple whitespace + pat = re.compile(r"""\s+""", re.MULTILINE) + buf = pat.sub(' ', buf) + + #clean up line ends + pat = re.compile(r""";\s*""", re.MULTILINE) + buf = pat.sub('\n', buf) + buf = buf.lstrip() + + #associate *, &, and [] with type instead of variable + #pat = re.compile(r'\s+([*|&]+)\s*(\w+)') + pat = re.compile(r' \s* ([*|&]+) \s* (\w+)', re.VERBOSE) + buf = pat.sub(r'\1 \2', buf) + pat = re.compile(r'\s+ (\w+) \[ \s* \]', re.VERBOSE) + buf = pat.sub(r'[] \1', buf) + + # make return types that are const work. + buf = string.replace(buf, 'G_CONST_RETURN ', 'const-') + buf = string.replace(buf, 'const ', 'const-') + + return buf + +proto_pat=re.compile(r""" +(?P(-|\w|\&|\*)+\s*) # return type +\s+ # skip whitespace +(?P\w+)\s*[(] # match the function name until the opening ( +\s*(?P.*?)\s*[)] # group the function arguments +""", re.IGNORECASE|re.VERBOSE) +#""" +arg_split_pat = re.compile("\s*,\s*") + +get_type_pat = re.compile(r'(const-)?([A-Za-z0-9]+)\*?\s+') +pointer_pat = re.compile('.*\*$') +func_new_pat = re.compile('(\w+)_new$') + +class DefsWriter: + def __init__(self, fp=None, prefix=None, verbose=False, + defsfilter=None): + if not fp: + fp = sys.stdout + + self.fp = fp + self.prefix = prefix + self.verbose = verbose + + self._enums = {} + self._objects = {} + self._functions = {} + if defsfilter: + filter = defsparser.DefsParser(defsfilter) + filter.startParsing() + for func in filter.functions + filter.methods.values(): + self._functions[func.c_name] = func + for obj in filter.objects + filter.boxes + filter.interfaces: + self._objects[obj.c_name] = func + for obj in filter.enums: + self._enums[obj.c_name] = func + + def write_def(self, deffile): + buf = open(deffile).read() + + self.fp.write('\n;; From %s\n\n' % os.path.basename(deffile)) + self._define_func(buf) + self.fp.write('\n') + + def write_enum_defs(self, enums, fp=None): + if not fp: + fp = self.fp + + fp.write(';; Enumerations and flags ...\n\n') + trans = string.maketrans(string.uppercase + '_', + string.lowercase + '-') + filter = self._enums + for cname, isflags, entries in enums: + if filter: + if cname in filter: + continue + name = cname + module = None + m = split_prefix_pat.match(cname) + if m: + module = m.group(1) + name = m.group(2) + if isflags: + fp.write('(define-flags ' + name + '\n') + else: + fp.write('(define-enum ' + name + '\n') + if module: + fp.write(' (in-module "' + module + '")\n') + fp.write(' (c-name "' + cname + '")\n') + fp.write(' (gtype-id "' + typecode(cname) + '")\n') + prefix = entries[0] + for ent in entries: + # shorten prefix til we get a match ... + # and handle GDK_FONT_FONT, GDK_FONT_FONTSET case + while ent[:len(prefix)] != prefix or len(prefix) >= len(ent): + prefix = prefix[:-1] + prefix_len = len(prefix) + fp.write(' (values\n') + for ent in entries: + fp.write(' \'("%s" "%s")\n' % + (string.translate(ent[prefix_len:], trans), ent)) + fp.write(' )\n') + fp.write(')\n\n') + + def write_obj_defs(self, objdefs, fp=None): + if not fp: + fp = self.fp + + fp.write(';; -*- scheme -*-\n') + fp.write('; object definitions ...\n') + + filter = self._objects + for klass, parent in objdefs: + if filter: + if klass in filter: + continue + m = split_prefix_pat.match(klass) + cmodule = None + cname = klass + if m: + cmodule = m.group(1) + cname = m.group(2) + fp.write('(define-object ' + cname + '\n') + if cmodule: + fp.write(' (in-module "' + cmodule + '")\n') + if parent: + fp.write(' (parent "' + parent + '")\n') + fp.write(' (c-name "' + klass + '")\n') + fp.write(' (gtype-id "' + typecode(klass) + '")\n') + # should do something about accessible fields + fp.write(')\n\n') + + def _define_func(self, buf): + buf = clean_func(buf) + buf = string.split(buf,'\n') + filter = self._functions + for p in buf: + if not p: + continue + m = proto_pat.match(p) + if m == None: + if self.verbose: + sys.stderr.write('No match:|%s|\n' % p) + continue + func = m.group('func') + if func[0] == '_': + continue + if filter: + if func in filter: + continue + ret = m.group('ret') + args = m.group('args') + args = arg_split_pat.split(args) + for i in range(len(args)): + spaces = string.count(args[i], ' ') + if spaces > 1: + args[i] = string.replace(args[i], ' ', '-', spaces - 1) + + self._write_func(func, ret, args) + + def _write_func(self, name, ret, args): + if len(args) >= 1: + # methods must have at least one argument + munged_name = name.replace('_', '') + m = get_type_pat.match(args[0]) + if m: + obj = m.group(2) + if munged_name[:len(obj)] == obj.lower(): + self._write_method(obj, name, ret, args) + return + + if self.prefix: + l = len(self.prefix) + if name[:l] == self.prefix and name[l] == '_': + fname = name[l+1:] + else: + fname = name + else: + fname = name + + # it is either a constructor or normal function + self.fp.write('(define-function ' + fname + '\n') + self.fp.write(' (c-name "' + name + '")\n') + + # Hmmm... Let's asume that a constructor function name + # ends with '_new' and it returns a pointer. + m = func_new_pat.match(name) + if pointer_pat.match(ret) and m: + cname = '' + for s in m.group(1).split ('_'): + cname += s.title() + if cname != '': + self.fp.write(' (is-constructor-of "' + cname + '")\n') + + self._write_return(ret) + self._write_arguments(args) + + def _write_method(self, obj, name, ret, args): + regex = string.join(map(lambda x: x+'_?', string.lower(obj)),'') + mname = re.sub(regex, '', name, 1) + if self.prefix: + l = len(self.prefix) + 1 + if mname[:l] == self.prefix and mname[l+1] == '_': + mname = mname[l+1:] + self.fp.write('(define-method ' + mname + '\n') + self.fp.write(' (of-object "' + obj + '")\n') + self.fp.write(' (c-name "' + name + '")\n') + self._write_return(ret) + self._write_arguments(args[1:]) + + def _write_return(self, ret): + if ret != 'void': + self.fp.write(' (return-type "' + ret + '")\n') + else: + self.fp.write(' (return-type "none")\n') + + def _write_arguments(self, args): + is_varargs = 0 + has_args = len(args) > 0 + for arg in args: + if arg == '...': + is_varargs = 1 + elif arg in ('void', 'void '): + has_args = 0 + if has_args: + self.fp.write(' (parameters\n') + for arg in args: + if arg != '...': + tupleArg = tuple(string.split(arg)) + if len(tupleArg) == 2: + self.fp.write(' \'("%s" "%s")\n' % tupleArg) + self.fp.write(' )\n') + if is_varargs: + self.fp.write(' (varargs #t)\n') + self.fp.write(')\n\n') + +# ------------------ Main function ----------------- + +def main(args): + verbose = False + onlyenums = False + onlyobjdefs = False + separate = False + modulename = None + defsfilter = None + opts, args = getopt.getopt(args[1:], 'vs:m:f:', + ['onlyenums', 'onlyobjdefs', + 'modulename=', 'separate=', + 'defsfilter=']) + for o, v in opts: + if o == '-v': + verbose = True + if o == '--onlyenums': + onlyenums = True + if o == '--onlyobjdefs': + onlyobjdefs = True + if o in ('-s', '--separate'): + separate = v + if o in ('-m', '--modulename'): + modulename = v + if o in ('-f', '--defsfilter'): + defsfilter = v + + if not args[0:1]: + print 'Must specify at least one input file name' + return -1 + + # read all the object definitions in + objdefs = [] + enums = [] + for filename in args: + buf = open(filename).read() + find_obj_defs(buf, objdefs) + find_enum_defs(buf, enums) + objdefs = sort_obj_defs(objdefs) + + if separate: + methods = file(separate + '.defs', 'w') + types = file(separate + '-types.defs', 'w') + + dw = DefsWriter(methods, prefix=modulename, verbose=verbose, + defsfilter=defsfilter) + dw.write_obj_defs(objdefs, types) + dw.write_enum_defs(enums, types) + print "Wrote %s-types.defs" % separate + + for filename in args: + dw.write_def(filename) + print "Wrote %s.defs" % separate + else: + dw = DefsWriter(prefix=modulename, verbose=verbose, + defsfilter=defsfilter) + + if onlyenums: + dw.write_enum_defs(enums) + elif onlyobjdefs: + dw.write_obj_defs(objdefs) + else: + dw.write_obj_defs(objdefs) + dw.write_enum_defs(enums) + + for filename in args: + dw.write_def(filename) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/codegen/mergedefs.py b/codegen/mergedefs.py new file mode 100755 index 0000000..773e499 --- /dev/null +++ b/codegen/mergedefs.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- + +import optparse + +import defsparser + +parser = optparse.OptionParser( + usage="usage: %prog [options] generated-defs old-defs") +parser.add_option("-p", "--merge-parameters", + help="Merge changes in function/methods parameter lists", + action="store_true", dest="parmerge", default=False) +(options, args) = parser.parse_args() + +if len(args) != 2: + parser.error("wrong number of arguments") + +newp = defsparser.DefsParser(args[0]) +oldp = defsparser.DefsParser(args[1]) + +newp.startParsing() +oldp.startParsing() + +newp.merge(oldp, options.parmerge) + +newp.write_defs() diff --git a/codegen/mkskel.py b/codegen/mkskel.py new file mode 100755 index 0000000..61f520b --- /dev/null +++ b/codegen/mkskel.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- + +import sys, os, getopt + +module_init_template = \ +'/* -*- Mode: C; c-basic-offset: 4 -*- */\n' + \ +'#ifdef HAVE_CONFIG_H\n' + \ +'# include "config.h"\n' + \ +'#endif\n' + \ +'#include \n' + \ +'#include \n' + \ +'\n' + \ +'/* include any extra headers needed here */\n' + \ +'\n' + \ +'void %(prefix)s_register_classes(PyObject *d);\n' + \ +'extern PyMethodDef %(prefix)s_functions[];\n' + \ +'\n' + \ +'DL_EXPORT(void)\n' + \ +'init%(module)s(void)\n' + \ +'{\n' + \ +' PyObject *m, *d;\n' + \ +'\n' + \ +' /* perform any initialisation required by the library here */\n' + \ +'\n' + \ +' m = Py_InitModule("%(module)s", %(prefix)s_functions);\n' + \ +' d = PyModule_GetDict(m);\n' + \ +'\n' + \ +' init_pygtk();\n' + \ +'\n' + \ +' %(prefix)s_register_classes(d);\n' + \ +'\n' + \ +' /* add anything else to the module dictionary (such as constants) */\n' +\ +'\n' + \ +' if (PyErr_Occurred())\n' + \ +' Py_FatalError("could not initialise module %(module)s");\n' + \ +'}\n' + +override_template = \ +'/* -*- Mode: C; c-basic-offset: 4 -*- */\n' + \ +'%%%%\n' + \ +'headers\n' + \ +'/* include any required headers here */\n' + \ +'%%%%\n' + \ +'init\n' + \ +' /* include any code here that needs to be executed before the\n' + \ +' * extension classes get initialised */\n' + \ +'%%%%\n' + \ +'\n' + \ +'/* you should add appropriate ignore, ignore-glob and\n' + \ +' * override sections here */\n' + +def open_with_backup(file): + if os.path.exists(file): + try: + os.rename(file, file+'~') + except OSError: + # fail silently if we can't make a backup + pass + return open(file, 'w') + +def write_skels(fileprefix, prefix, module): + fp = open_with_backup(fileprefix+'module.c') + fp.write(module_init_template % { 'prefix': prefix, 'module': module }) + fp.close() + fp = open_with_backup(fileprefix+'.override') + fp.write(override_template % { 'prefix': prefix, 'module': module }) + fp.close() + +if __name__ == '__main__': + opts, args = getopt.getopt(sys.argv[1:], 'f:p:m:h', + ['file-prefix=', 'prefix=', 'module=', 'help']) + fileprefix = None + prefix = None + module = None + for opt, arg in opts: + if opt in ('-f', '--file-prefix'): + fileprefix = arg + elif opt in ('-p', '--prefix'): + prefix = arg + elif opt in ('-m', '--module'): + module = arg + elif opt in ('-h', '--help'): + print 'usage: mkskel.py -f fileprefix -p prefix -m module' + sys.exit(0) + if not fileprefix or not prefix or not module: + print 'usage: mkskel.py -f fileprefix -p prefix -m module' + sys.exit(1) + write_skels(fileprefix, prefix, module) diff --git a/codegen/override.py b/codegen/override.py new file mode 100644 index 0000000..c5932ee --- /dev/null +++ b/codegen/override.py @@ -0,0 +1,290 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- + +# this file contains code for loading up an override file. The override file +# provides implementations of functions where the code generator could not +# do its job correctly. + +import fnmatch +import os +import re +import string +import sys + +def class2cname(klass, method): + c_name = '' + for c in klass: + if c.isupper(): + c_name += '_' + c.lower() + else: + c_name += c + return c_name[1:] + '_' + method + +import_pat = re.compile(r'\s*import\s+(\S+)\.([^\s.]+)\s+as\s+(\S+)') + +class Overrides: + def __init__(self, filename=None, path=[]): + self.modulename = None + self.ignores = {} + self.glob_ignores = [] + self.type_ignores = {} + self.overrides = {} + self.overridden = {} + self.kwargs = {} + self.noargs = {} + self.onearg = {} + self.staticmethod = {} + self.classmethod = {} + self.startlines = {} + self.override_attrs = {} + self.override_slots = {} + self.headers = '' + self.body = '' + self.init = '' + self.imports = [] + self.defines = {} + self.functions = {} + self.newstyle_constructors = {} + self.path = [os.path.abspath(x) for x in path] + if filename: + self.handle_file(filename) + + def handle_file(self, filename): + oldpath = os.getcwd() + + fp = None + for path in self.path: + os.chdir(oldpath) + os.chdir(path) + try: + fp = open(filename, 'r') + break + except: + os.chdir(oldpath) + if not fp: + raise Exception, "Couldn't find file %s" % filename + + dirname = path + + if dirname != oldpath: + os.chdir(dirname) + + # read all the components of the file ... + bufs = [] + startline = 1 + lines = [] + line = fp.readline() + linenum = 1 + while line: + if line == '%%\n' or line == '%%': + if lines: + bufs.append((string.join(lines, ''), startline)) + startline = linenum + 1 + lines = [] + else: + lines.append(line) + line = fp.readline() + linenum = linenum + 1 + if lines: + bufs.append((string.join(lines, ''), startline)) + if not bufs: return + + for buf, startline in bufs: + self.__parse_override(buf, startline, filename) + + os.chdir(oldpath) + + def __parse_override(self, buffer, startline, filename): + pos = string.find(buffer, '\n') + if pos >= 0: + line = buffer[:pos] + rest = buffer[pos+1:] + else: + line = buffer ; rest = '' + words = string.split(line) + if len(words) == 0: + return + command = words[0] + if (command == 'ignore' or + command == 'ignore-' + sys.platform): + "ignore/ignore-platform [functions..]" + for func in words[1:]: + self.ignores[func] = 1 + for func in string.split(rest): + self.ignores[func] = 1 + elif (command == 'ignore-glob' or + command == 'ignore-glob-' + sys.platform): + "ignore-glob/ignore-glob-platform [globs..]" + for func in words[1:]: + self.glob_ignores.append(func) + for func in string.split(rest): + self.glob_ignores.append(func) + elif (command == 'ignore-type' or + command == 'ignore-type-' + sys.platform): + "ignore-type/ignore-type-platform [typenames..]" + for typename in words[1:]: + self.type_ignores[typename] = 1 + for typename in string.split(rest): + self.type_ignores[typename] = 1 + elif command == 'override': + "override function/method [kwargs|noargs|onearg] [staticmethod|classmethod]" + func = words[1] + if 'kwargs' in words[1:]: + self.kwargs[func] = 1 + elif 'noargs' in words[1:]: + self.noargs[func] = 1 + elif 'onearg' in words[1:]: + self.onearg[func] = True + + if 'staticmethod' in words[1:]: + self.staticmethod[func] = True + elif 'classmethod' in words[1:]: + self.classmethod[func] = True + if func in self.overrides: + raise RuntimeError("Function %s is being overridden more than once" % (func,)) + self.overrides[func] = rest + self.startlines[func] = (startline + 1, filename) + elif command == 'override-attr': + "override-slot Class.attr" + attr = words[1] + self.override_attrs[attr] = rest + self.startlines[attr] = (startline + 1, filename) + elif command == 'override-slot': + "override-slot Class.slot" + slot = words[1] + self.override_slots[slot] = rest + self.startlines[slot] = (startline + 1, filename) + elif command == 'headers': + "headers" + self.headers = '%s\n#line %d "%s"\n%s' % \ + (self.headers, startline + 1, filename, rest) + elif command == 'body': + "body" + self.body = '%s\n#line %d "%s"\n%s' % \ + (self.body, startline + 1, filename, rest) + elif command == 'init': + "init" + self.init = '%s\n#line %d "%s"\n%s' % \ + (self.init, startline + 1, filename, rest) + elif command == 'modulename': + "modulename name" + self.modulename = words[1] + elif command == 'include': + "include filename" + for filename in words[1:]: + self.handle_file(filename) + for filename in string.split(rest): + self.handle_file(filename) + elif command == 'import': + "import module1 [\n module2, \n module3 ...]" + for line in string.split(buffer, '\n'): + match = import_pat.match(line) + if match: + self.imports.append(match.groups()) + elif command == 'define': + "define funcname [kwargs|noargs|onearg] [classmethod|staticmethod]" + "define Class.method [kwargs|noargs|onearg] [classmethod|staticmethod]" + func = words[1] + klass = None + if func.find('.') != -1: + klass, func = func.split('.', 1) + + if not self.defines.has_key(klass): + self.defines[klass] = {} + self.defines[klass][func] = rest + else: + self.functions[func] = rest + + if 'kwargs' in words[1:]: + self.kwargs[func] = 1 + elif 'noargs' in words[1:]: + self.noargs[func] = 1 + elif 'onearg' in words[1:]: + self.onearg[func] = 1 + + if 'staticmethod' in words[1:]: + self.staticmethod[func] = True + elif 'classmethod' in words[1:]: + self.classmethod[func] = True + + self.startlines[func] = (startline + 1, filename) + + elif command == 'new-constructor': + "new-constructor GType" + gtype, = words[1:] + self.newstyle_constructors[gtype] = True + + def is_ignored(self, name): + if self.ignores.has_key(name): + return 1 + for glob in self.glob_ignores: + if fnmatch.fnmatchcase(name, glob): + return 1 + return 0 + + def is_type_ignored(self, name): + return name.rstrip('*') in self.type_ignores + + def is_overriden(self, name): + return self.overrides.has_key(name) + + def is_already_included(self, name): + return self.overridden.has_key(name) + + def override(self, name): + self.overridden[name] = 1 + return self.overrides[name] + + def define(self, klass, name): + self.overridden[class2cname(klass, name)] = 1 + return self.defines[klass][name] + + def function(self, name): + return self.functions[name] + + def getstartline(self, name): + return self.startlines[name] + + def wants_kwargs(self, name): + return self.kwargs.has_key(name) + + def wants_noargs(self, name): + return self.noargs.has_key(name) + + def wants_onearg(self, name): + return self.onearg.has_key(name) + + def is_staticmethod(self, name): + return self.staticmethod.has_key(name) + + def is_classmethod(self, name): + return self.classmethod.has_key(name) + + def attr_is_overriden(self, attr): + return self.override_attrs.has_key(attr) + + def attr_override(self, attr): + return self.override_attrs[attr] + + def slot_is_overriden(self, slot): + return self.override_slots.has_key(slot) + + def slot_override(self, slot): + return self.override_slots[slot] + + def get_headers(self): + return self.headers + + def get_body(self): + return self.body + + def get_init(self): + return self.init + + def get_imports(self): + return self.imports + + def get_defines_for(self, klass): + return self.defines.get(klass, {}) + + def get_functions(self): + return self.functions diff --git a/codegen/reversewrapper.py b/codegen/reversewrapper.py new file mode 100644 index 0000000..f528828 --- /dev/null +++ b/codegen/reversewrapper.py @@ -0,0 +1,771 @@ +### -*- python -*- +### Code to generate "Reverse Wrappers", i.e. C->Python wrappers +### (C) 2004 Gustavo Carneiro +import argtypes +import os + +DEBUG_MODE = ('PYGTK_CODEGEN_DEBUG' in os.environ) + +def join_ctype_name(ctype, name): + '''Joins a C type and a variable name into a single string''' + if ctype[-1] != '*': + return " ".join((ctype, name)) + else: + return "".join((ctype, name)) + + +class CodeSink(object): + def __init__(self): + self.indent_level = 0 # current indent level + self.indent_stack = [] # previous indent levels + + def _format_code(self, code): + assert isinstance(code, str) + l = [] + for line in code.split('\n'): + l.append(' '*self.indent_level + line) + if l[-1]: + l.append('') + return '\n'.join(l) + + def writeln(self, line=''): + raise NotImplementedError + + def indent(self, level=4): + '''Add a certain ammount of indentation to all lines written + from now on and until unindent() is called''' + self.indent_stack.append(self.indent_level) + self.indent_level += level + + def unindent(self): + '''Revert indentation level to the value before last indent() call''' + self.indent_level = self.indent_stack.pop() + + +class FileCodeSink(CodeSink): + def __init__(self, fp): + CodeSink.__init__(self) + assert isinstance(fp, file) + self.fp = fp + + def writeln(self, line=''): + self.fp.write(self._format_code(line)) + +class MemoryCodeSink(CodeSink): + def __init__(self): + CodeSink.__init__(self) + self.lines = [] + + def writeln(self, line=''): + self.lines.append(self._format_code(line)) + + def flush_to(self, sink): + assert isinstance(sink, CodeSink) + for line in self.lines: + sink.writeln(line.rstrip()) + self.lines = [] + + def flush(self): + l = [] + for line in self.lines: + l.append(self._format_code(line)) + self.lines = [] + return "".join(l) + +class ReverseWrapper(object): + '''Object that generates a C->Python wrapper''' + def __init__(self, cname, is_static=True): + assert isinstance(cname, str) + + self.cname = cname + ## function object we will call, or object whose method we will call + self.called_pyobj = None + ## name of method of self.called_pyobj we will call + self.method_name = None + self.is_static = is_static + + self.parameters = [] + self.declarations = MemoryCodeSink() + self.post_return_code = MemoryCodeSink() + self.body = MemoryCodeSink() + self.cleanup_actions = [] + self.pyargv_items = [] + self.pyargv_optional_items = [] + self.pyret_parse_items = [] # list of (format_spec, parameter) + + def set_call_target(self, called_pyobj, method_name=None): + assert called_pyobj is not None + assert self.called_pyobj is None + self.called_pyobj = called_pyobj + self.method_name = method_name + + def set_return_type(self, return_type): + assert isinstance(return_type, ReturnType) + self.return_type = return_type + + def add_parameter(self, param): + assert isinstance(param, Parameter) + self.parameters.append(param) + + def add_declaration(self, decl_code): + self.declarations.writeln(decl_code) + + def add_pyargv_item(self, variable, optional=False): + if optional: + self.pyargv_optional_items.append(variable) + else: + self.pyargv_items.append(variable) + + def add_pyret_parse_item(self, format_specifier, parameter, prepend=False): + if prepend: + self.pyret_parse_items.insert(0, (format_specifier, parameter)) + else: + self.pyret_parse_items.append((format_specifier, parameter)) + + def write_code(self, code, + cleanup=None, + failure_expression=None, + failure_cleanup=None, + failure_exception=None, + code_sink=None): + '''Add a chunk of code with cleanup and error handling + + This method is to be used by TypeHandlers when generating code + + Keywork arguments: + code -- code to add + cleanup -- code to cleanup any dynamic resources created by @code + (except in case of failure) (default None) + failure_expression -- C boolean expression to indicate + if anything failed (default None) + failure_cleanup -- code to cleanup any dynamic resources + created by @code in case of failure (default None) + failure_exception -- code to raise an exception in case of + failure (which will be immediately + printed and cleared), (default None) + code_sink -- "code sink" to use; by default, + ReverseWrapper.body is used, which writes the + main body of the wrapper, before calling the + python method. Alternatively, + ReverseWrapper.after_pyret_parse can be used, to + write code after the PyArg_ParseTuple that + parses the python method return value. + ''' + if code_sink is None: + code_sink = self.body + if code is not None: + code_sink.writeln(code) + if failure_expression is not None: + code_sink.writeln("if (%s) {" % (failure_expression,)) + code_sink.indent() + if failure_exception is None: + code_sink.writeln("if (PyErr_Occurred())") + code_sink.indent() + code_sink.writeln("PyErr_Print();") + code_sink.unindent() + else: + code_sink.writeln(failure_exception) + code_sink.writeln("PyErr_Print();") + if failure_cleanup is not None: + code_sink.writeln(failure_cleanup) + for cleanup_action in self.cleanup_actions: + code_sink.writeln(cleanup_action) + self.return_type.write_error_return() + code_sink.unindent() + code_sink.writeln("}") + if cleanup is not None: + self.cleanup_actions.insert(0, cleanup) + + def generate(self, sink): + '''Generate the code into a CodeSink object''' + assert isinstance(sink, CodeSink) + + if DEBUG_MODE: + self.declarations.writeln("/* begin declarations */") + self.body.writeln("/* begin main body */") + self.post_return_code.writeln("/* begin post-return code */") + + self.add_declaration("PyGILState_STATE __py_state;") + self.write_code(code="__py_state = pyg_gil_state_ensure();", + cleanup="pyg_gil_state_release(__py_state);") + + for param in self.parameters: + param.convert_c2py() + + assert self.called_pyobj is not None,\ + "Parameters failed to provide a target function or method." + + if self.is_static: + sink.writeln('static %s' % self.return_type.get_c_type()) + else: + sink.writeln(self.return_type.get_c_type()) + c_proto_params = map(Parameter.format_for_c_proto, self.parameters) + sink.writeln("%s(%s)\n{" % (self.cname, ", ".join(c_proto_params))) + + self.return_type.write_decl() + self.add_declaration("PyObject *py_retval;") + + ## Handle number of arguments + if self.pyargv_items: + self.add_declaration("PyObject *py_args;") + py_args = "py_args" + if self.pyargv_optional_items: + self.add_declaration("int argc = %i;" % len(self.pyargv_items)) + argc = "argc" + for arg in self.pyargv_optional_items: + self.body.writeln("if (%s)" % arg) + self.body.indent() + self.body.writeln("++argc;") + self.body.unindent() + else: + argc = str(len(self.pyargv_items)) + else: + if self.pyargv_optional_items: + self.add_declaration("PyObject *py_args;") + py_args = "py_args" + self.add_declaration("int argc = 0;") + argc = "argc" + for arg in self.pyargv_optional_items: + self.body.writeln("if (%s)" % arg) + self.body.indent() + self.body.writeln("++argc;") + self.body.unindent() + else: + py_args = "NULL" + argc = None + + self.body.writeln() + + if py_args != "NULL": + self.write_code("py_args = PyTuple_New(%s);" % argc, + cleanup="Py_DECREF(py_args);") + pos = 0 + for arg in self.pyargv_items: + try: # try to remove the Py_DECREF cleanup action, if we can + self.cleanup_actions.remove("Py_DECREF(%s);" % arg) + except ValueError: # otherwise we have to Py_INCREF.. + self.body.writeln("Py_INCREF(%s);" % arg) + self.body.writeln("PyTuple_SET_ITEM(%s, %i, %s);" % (py_args, pos, arg)) + pos += 1 + for arg in self.pyargv_optional_items: + self.body.writeln("if (%s) {" % arg) + self.body.indent() + try: # try to remove the Py_DECREF cleanup action, if we can + self.cleanup_actions.remove("Py_XDECREF(%s);" % arg) + except ValueError: # otherwise we have to Py_INCREF.. + self.body.writeln("Py_INCREF(%s);" % arg) + self.body.writeln("PyTuple_SET_ITEM(%s, %i, %s);" % (py_args, pos, arg)) + self.body.unindent() + self.body.writeln("}") + pos += 1 + + self.body.writeln() + + ## Call the python method + if self.method_name is None: + self.write_code("py_retval = PyObject_Call(%s, %s);" + % (self.called_pyobj, py_args), + cleanup="Py_DECREF(py_retval);", + failure_expression="!py_retval") + else: + self.add_declaration("PyObject *py_method;") + self.write_code("py_method = PyObject_GetAttrString(%s, \"%s\");" + % (self.called_pyobj, self.method_name), + cleanup="Py_DECREF(py_method);", + failure_expression="!py_method") + self.write_code("py_retval = PyObject_CallObject(py_method, %s);" + % (py_args,), + cleanup="Py_DECREF(py_retval);", + failure_expression="!py_retval") + + ## -- Handle the return value -- + + ## we need to check if the return_type object is prepared to cooperate with multiple return values + len_before = len(self.pyret_parse_items) + self.return_type.write_conversion() + len_after = len(self.pyret_parse_items) + assert (self.return_type.get_c_type() == 'void' + or not (len_before == len_after and len_after > 0)),\ + ("Bug in reverse wrappers: return type handler %s" + " is not prepared to cooperate multiple return values") % (type(self.return_type),) + + sink.indent() + + if len(self.pyret_parse_items) == 1: + ## if retval is one item only, pack it in a tuple so we + ## can use PyArg_ParseTuple as usual.. + self.write_code('py_retval = Py_BuildValue("(N)", py_retval);') + if len(self.pyret_parse_items) > 0: + ## Parse return values using PyArg_ParseTuple + self.write_code(code=None, failure_expression=( + '!PyArg_ParseTuple(py_retval, "%s", %s)' % ( + "".join([format for format, param in self.pyret_parse_items]), + ", ".join([param for format, param in self.pyret_parse_items])))) + + if DEBUG_MODE: + self.declarations.writeln("/* end declarations */") + self.declarations.flush_to(sink) + sink.writeln() + if DEBUG_MODE: + self.body.writeln("/* end main body */") + self.body.flush_to(sink) + sink.writeln() + if DEBUG_MODE: + self.post_return_code.writeln("/* end post-return code */") + self.post_return_code.flush_to(sink) + sink.writeln() + + for cleanup_action in self.cleanup_actions: + sink.writeln(cleanup_action) + if self.return_type.get_c_type() != 'void': + sink.writeln() + sink.writeln("return retval;") + sink.unindent() + sink.writeln("}") + +class TypeHandler(object): + def __init__(self, wrapper, **props): + assert isinstance(wrapper, ReverseWrapper) + self.wrapper = wrapper + self.props = props + +class ReturnType(TypeHandler): + + def get_c_type(self): + raise NotImplementedError + + def write_decl(self): + raise NotImplementedError + + def write_error_return(self): + '''Write "return " code in case of error''' + raise NotImplementedError + + def write_conversion(self): + '''Writes code to convert Python return value in 'py_retval' + into C 'retval'. Returns a string with C boolean expression + that determines if anything went wrong. ''' + raise NotImplementedError + +class Parameter(TypeHandler): + + def __init__(self, wrapper, name, **props): + TypeHandler.__init__(self, wrapper, **props) + self.name = name + + def get_c_type(self): + raise NotImplementedError + + def convert_c2py(self): + '''Write some code before calling the Python method.''' + pass + + def format_for_c_proto(self): + return join_ctype_name(self.get_c_type(), self.name) + + +###--- +class StringParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'char *').replace('const-', 'const ') + + def convert_c2py(self): + if self.props.get('optional', False): + self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name) + self.wrapper.write_code(code=("if (%s)\n" + " py_%s = PyString_FromString(%s);\n" + % (self.name, self.name, self.name)), + cleanup=("Py_XDECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name, optional=True) + else: + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyString_FromString(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +for ctype in ('char*', 'gchar*', 'const-char*', 'char-const*', 'const-gchar*', + 'gchar-const*', 'string', 'static_string'): + argtypes.matcher.register_reverse(ctype, StringParam) +del ctype + +class StringReturn(ReturnType): + + def get_c_type(self): + return "char *" + + def write_decl(self): + self.wrapper.add_declaration("char *retval;") + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.add_pyret_parse_item("s", "&retval", prepend=True) + self.wrapper.write_code("retval = g_strdup(retval);", code_sink=self.wrapper.post_return_code) + +for ctype in ('char*', 'gchar*'): + argtypes.matcher.register_reverse_ret(ctype, StringReturn) +del ctype + + +class VoidReturn(ReturnType): + + def get_c_type(self): + return "void" + + def write_decl(self): + pass + + def write_error_return(self): + self.wrapper.write_code("return;") + + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="py_retval != Py_None", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be None");') + +argtypes.matcher.register_reverse_ret('void', VoidReturn) +argtypes.matcher.register_reverse_ret('none', VoidReturn) + +class GObjectParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'GObject *') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name) + self.wrapper.write_code(code=("if (%s)\n" + " py_%s = pygobject_new((GObject *) %s);\n" + "else {\n" + " Py_INCREF(Py_None);\n" + " py_%s = Py_None;\n" + "}" + % (self.name, self.name, self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse('GObject*', GObjectParam) + +class GObjectReturn(ReturnType): + + def get_c_type(self): + return self.props.get('c_type', 'GObject *') + + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyObject_TypeCheck(py_retval, &PyGObject_Type)", + failure_exception='PyErr_SetString(PyExc_TypeError, "retval should be a GObject");') + self.wrapper.write_code("retval = (%s) pygobject_get(py_retval);" + % self.get_c_type()) + self.wrapper.write_code("g_object_ref((GObject *) retval);") + +argtypes.matcher.register_reverse_ret('GObject*', GObjectReturn) + + + +class IntParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'int') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyInt_FromLong(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class IntReturn(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'int') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXINT;") + def write_conversion(self): + self.wrapper.add_pyret_parse_item("i", "&retval", prepend=True) + +for argtype in ('int', 'gint', 'guint', 'short', 'gshort', 'gushort', 'long', + 'glong', 'gsize', 'gssize', 'guint8', 'gint8', 'guint16', + 'gint16', 'gint32', 'GTime'): + argtypes.matcher.register_reverse(argtype, IntParam) + argtypes.matcher.register_reverse_ret(argtype, IntReturn) +del argtype + +class IntPtrParam(Parameter): + def __init__(self, wrapper, name, **props): + if "direction" not in props: + raise ValueError("cannot use int* parameter without direction") + if props["direction"] not in ("out", "inout"): + raise ValueError("cannot use int* parameter with direction '%s'" % (props["direction"],)) + Parameter.__init__(self, wrapper, name, **props) + def get_c_type(self): + return self.props.get('c_type', 'int*') + def convert_c2py(self): + if self.props["direction"] == "inout": + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyInt_FromLong(*%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + self.wrapper.add_pyret_parse_item("i", self.name) +for argtype in ('int*', 'gint*'): + argtypes.matcher.register_reverse(argtype, IntPtrParam) +del argtype + + +class GEnumReturn(IntReturn): + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression=("pyg_enum_get_value(%s, py_retval, (gint *)&retval)" % + self.props['typecode'])) + +argtypes.matcher.register_reverse_ret("GEnum", GEnumReturn) + +class GEnumParam(IntParam): + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = pyg_enum_from_gtype(%s, %s);" % + (self.name, self.props['typecode'], self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GEnum", GEnumParam) + +class GFlagsReturn(IntReturn): + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression=("pyg_flags_get_value(%s, py_retval, (gint *)&retval)" % + self.props['typecode'])) + +argtypes.matcher.register_reverse_ret("GFlags", GFlagsReturn) + +class GFlagsParam(IntParam): + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = pyg_flags_from_gtype(%s, %s);" % + (self.name, self.props['typecode'], self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GFlags", GFlagsParam) + + +class GtkTreePathParam(IntParam): + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = pygtk_tree_path_to_pyobject(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GtkTreePath*", GtkTreePathParam) + + +class BooleanReturn(ReturnType): + def get_c_type(self): + return "gboolean" + def write_decl(self): + self.wrapper.add_declaration("gboolean retval;") + self.wrapper.add_declaration("PyObject *py_main_retval;") + def write_error_return(self): + self.wrapper.write_code("return FALSE;") + def write_conversion(self): + self.wrapper.add_pyret_parse_item("O", "&py_main_retval", prepend=True) + self.wrapper.write_code("retval = PyObject_IsTrue(py_main_retval)? TRUE : FALSE;", + code_sink=self.wrapper.post_return_code) +argtypes.matcher.register_reverse_ret("gboolean", BooleanReturn) + +class BooleanParam(Parameter): + def get_c_type(self): + return "gboolean" + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code("py_%s = %s? Py_True : Py_False;" + % (self.name, self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("gboolean", BooleanParam) + + +class DoubleParam(Parameter): + def get_c_type(self): + return self.props.get('c_type', 'gdouble') + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyFloat_FromDouble(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class DoublePtrParam(Parameter): + def __init__(self, wrapper, name, **props): + if "direction" not in props: + raise ValueError("cannot use double* parameter without direction") + if props["direction"] not in ("out", ): # inout not yet implemented + raise ValueError("cannot use double* parameter with direction '%s'" % (props["direction"],)) + Parameter.__init__(self, wrapper, name, **props) + def get_c_type(self): + return self.props.get('c_type', 'double*') + def convert_c2py(self): + self.wrapper.add_pyret_parse_item("d", self.name) +for argtype in ('double*', 'gdouble*'): + argtypes.matcher.register_reverse(argtype, DoublePtrParam) +del argtype + +class DoubleReturn(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'gdouble') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXFLOAT;") + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyFloat_AsDouble(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be a float");') + self.wrapper.write_code("retval = PyFloat_AsDouble(py_retval);") + +for argtype in ('float', 'double', 'gfloat', 'gdouble'): + argtypes.matcher.register_reverse(argtype, DoubleParam) + argtypes.matcher.register_reverse_ret(argtype, DoubleReturn) + + +class GBoxedParam(Parameter): + def get_c_type(self): + return self.props.get('c_type').replace('const-', 'const ') + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + ctype = self.get_c_type() + if ctype.startswith('const '): + ctype_no_const = ctype[len('const '):] + self.wrapper.write_code( + code=('py_%s = pyg_boxed_new(%s, (%s) %s, TRUE, TRUE);' % + (self.name, self.props['typecode'], + ctype_no_const, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + else: + self.wrapper.write_code( + code=('py_%s = pyg_boxed_new(%s, %s, FALSE, FALSE);' % + (self.name, self.props['typecode'], self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GBoxed", GBoxedParam) + +class GBoxedReturn(ReturnType): + def get_c_type(self): + return self.props.get('c_type') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return retval;") + def write_conversion(self): + self.wrapper.write_code( + failure_expression=("!pyg_boxed_check(py_retval, %s)" % + (self.props['typecode'],)), + failure_cleanup=('PyErr_SetString(PyExc_TypeError, "retval should be a %s");' + % (self.props['typename'],))) + self.wrapper.write_code('retval = pyg_boxed_get(py_retval, %s);' % + self.props['typename']) + +argtypes.matcher.register_reverse_ret("GBoxed", GBoxedReturn) + + +class GdkRectanglePtrParam(Parameter): + def get_c_type(self): + return self.props.get('c_type').replace('const-', 'const ') + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code( + code=('py_%s = pyg_boxed_new(GDK_TYPE_RECTANGLE, %s, TRUE, TRUE);' % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +argtypes.matcher.register_reverse("GdkRectangle*", GdkRectanglePtrParam) +argtypes.matcher.register_reverse('GtkAllocation*', GdkRectanglePtrParam) + + +class PyGObjectMethodParam(Parameter): + def __init__(self, wrapper, name, method_name, **props): + Parameter.__init__(self, wrapper, name, **props) + self.method_name = method_name + + def get_c_type(self): + return self.props.get('c_type', 'GObject *') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = pygobject_new((GObject *) %s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name), + failure_expression=("!py_%s" % self.name)) + self.wrapper.set_call_target("py_%s" % self.name, self.method_name) + +class CallbackInUserDataParam(Parameter): + def __init__(self, wrapper, name, free_it, **props): + Parameter.__init__(self, wrapper, name, **props) + self.free_it = free_it + + def get_c_type(self): + return "gpointer" + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject **_user_data;") + cleanup = self.free_it and ("g_free(%s);" % self.name) or None + self.wrapper.write_code(code=("_real_user_data = (PyObject **) %s;" + % self.name), + cleanup=cleanup) + + self.wrapper.add_declaration("PyObject *py_func;") + cleanup = self.free_it and "Py_DECREF(py_func);" or None + self.wrapper.write_code(code="py_func = _user_data[0];", + cleanup=cleanup) + self.wrapper.set_call_target("py_func") + + self.wrapper.add_declaration("PyObject *py_user_data;") + cleanup = self.free_it and "Py_XDECREF(py_user_data);" or None + self.wrapper.write_code(code="py_user_data = _user_data[1];", + cleanup=cleanup) + self.wrapper.add_pyargv_item("py_user_data", optional=True) + +def _test(): + import sys + + if 1: + wrapper = ReverseWrapper("this_is_the_c_function_name", is_static=True) + wrapper.set_return_type(StringReturn(wrapper)) + wrapper.add_parameter(PyGObjectMethodParam(wrapper, "self", method_name="do_xxx")) + wrapper.add_parameter(StringParam(wrapper, "param2", optional=True)) + wrapper.add_parameter(GObjectParam(wrapper, "param3")) + #wrapper.add_parameter(InoutIntParam(wrapper, "param4")) + wrapper.generate(FileCodeSink(sys.stderr)) + + if 0: + wrapper = ReverseWrapper("this_a_callback_wrapper") + wrapper.set_return_type(VoidReturn(wrapper)) + wrapper.add_parameter(StringParam(wrapper, "param1", optional=False)) + wrapper.add_parameter(GObjectParam(wrapper, "param2")) + wrapper.add_parameter(CallbackInUserDataParam(wrapper, "data", free_it=True)) + wrapper.generate(FileCodeSink(sys.stderr)) + +if __name__ == '__main__': + _test() diff --git a/codegen/scmexpr.py b/codegen/scmexpr.py new file mode 100644 index 0000000..d08c517 --- /dev/null +++ b/codegen/scmexpr.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python +# -*- Mode: Python; py-indent-offset: 4 -*- +from __future__ import generators + +import string +import types +from cStringIO import StringIO + +class error(Exception): + def __init__(self, filename, lineno, msg): + Exception.__init__(self, msg) + self.filename = filename + self.lineno = lineno + self.msg = msg + def __str__(self): + return '%s:%d: error: %s' % (self.filename, self.lineno, self.msg) + +trans = [' '] * 256 +for i in range(256): + if chr(i) in string.letters + string.digits + '_': + trans[i] = chr(i) + else: + trans[i] = '_' +trans = string.join(trans, '') + +def parse(filename): + if isinstance(filename, str): + fp = open(filename, 'r') + else: # if not string, assume it is some kind of iterator + fp = filename + filename = getattr(fp, 'name', '') + whitespace = ' \t\n\r\x0b\x0c' + nonsymbol = whitespace + '();\'"' + stack = [] + openlines = [] + lineno = 0 + for line in fp: + pos = 0 + lineno += 1 + while pos < len(line): + if line[pos] in whitespace: # ignore whitespace + pass + elif line[pos] == ';': # comment + break + elif line[pos:pos+2] == "'(": + pass # the open parenthesis will be handled next iteration + elif line[pos] == '(': + stack.append(()) + openlines.append(lineno) + elif line[pos] == ')': + if len(stack) == 0: + raise error(filename, lineno, 'close parenthesis found when none open') + closed = stack[-1] + del stack[-1] + del openlines[-1] + if stack: + stack[-1] += (closed,) + else: + yield closed + elif line[pos] == '"': # quoted string + if not stack: + raise error(filename, lineno, + 'string found outside of s-expression') + endpos = pos + 1 + chars = [] + while endpos < len(line): + if endpos+1 < len(line) and line[endpos] == '\\': + endpos += 1 + if line[endpos] == 'n': + chars.append('\n') + elif line[endpos] == 'r': + chars.append('\r') + elif line[endpos] == 't': + chars.append('\t') + else: + chars.append('\\') + chars.append(line[endpos]) + elif line[endpos] == '"': + break + else: + chars.append(line[endpos]) + endpos += 1 + if endpos >= len(line): + raise error(filename, lineno, "unclosed quoted string") + pos = endpos + stack[-1] += (''.join(chars),) + else: # symbol/number + if not stack: + raise error(filename, lineno, + 'identifier found outside of s-expression') + endpos = pos + while endpos < len(line) and line[endpos] not in nonsymbol: + endpos += 1 + symbol = line[pos:endpos] + pos = max(pos, endpos-1) + try: symbol = int(symbol) + except ValueError: + try: symbol = float(symbol) + except ValueError: pass + stack[-1] += (symbol,) + pos += 1 + if len(stack) != 0: + msg = '%d unclosed parentheses found at end of ' \ + 'file (opened on line(s) %s)' % (len(stack), + ', '.join(map(str, openlines))) + raise error(filename, lineno, msg) + +class Parser: + def __init__(self, filename): + """Argument is either a string, a parse tree, or file object""" + self.filename = filename + def startParsing(self, filename=None): + statements = parse(filename or self.filename) + for statement in statements: + self.handle(statement) + def handle(self, tup): + cmd = string.translate(tup[0], trans) + if hasattr(self, cmd): + getattr(self, cmd)(*tup[1:]) + else: + self.unknown(tup) + def unknown(self, tup): + pass + +_testString = """; a scheme file +(define-func gdk_font_load ; a comment at end of line + GdkFont + ((string name))) + +(define-boxed GdkEvent + gdk_event_copy + gdk_event_free + "sizeof(GdkEvent)") +""" + +if __name__ == '__main__': + import sys + if sys.argv[1:]: + fp = open(sys.argv[1]) + else: + fp = StringIO(_testString) + statements = parse(fp) + for s in statements: + print `s` diff --git a/common/ChangeLog b/common/ChangeLog new file mode 100644 index 0000000..92d0d25 --- /dev/null +++ b/common/ChangeLog @@ -0,0 +1,1712 @@ +2008-12-17 Edward Hervey + + * gst.supp: + And yet another variation of the GstAudioFilter leak. + +2008-12-15 Sebastian Dröge + + Patch by: Roland Illig + + * m4/gst-parser.m4: + Fix AG_GST_BISON_CHECK to handle version numbers with more than + two components (i.e. 2.4.1). Fixes bug #564507. + +2008-12-14 Edward Hervey + + * gst.supp: + And yet another variant of the GstAudioFilter leak. + +2008-12-13 Edward Hervey + + * gst.supp: + Added variants of leaks of dynamic pad templates created in + GstAudioFilter. + Add conditional jump triggered by getaddrinfo (maybe glibc-2.9). + +2008-12-12 Edward Hervey + + * gst.supp: + Fix leak in GIO called by gnomevfs. Nothing we can do about this. + +2008-12-12 Edward Hervey + + * gst.supp: + Added another suppression for dynamic pad templates, in this case + GstAudioFilter. + Added suppression for PangoLanguage which can never be freed + according to the Pango API. + +2008-12-12 Edward Hervey + + * gst.supp: + A whole bunch of suppressions detected on latest gentoo ~amd64. + Make some existing suppressions more generic (for subtle dependecy + code changes). + Added suppressions for glibc-2.9. + Added suppressions for new variants of ALSA leaks. + Added suppressions for a series of leaks in plugins registrations due + to some pad templates' caps calculated at runtime. + Added suppressions for variants of some leaks in pango/fontconfig. + Added suppressions for leak in gstffmpegcsp.c (nothing we can do + about it, but will only exist once). + +2008-12-04 Sebastian Dröge + + * m4/gst-plugin-docs.m4: + Remove the check if $have_gtk_doc equals yes as it's not defined + and $enable_gtk_doc should be good enough. + Also this restores the build of the plugin documentation. + +2008-12-01 Mark Nauwelaerts + + * gst.supp: + Add suppression variant for Ubuntu Hardy x86/64bit. + +2008-12-01 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Simplily uninstall rule. Its closer to upstream and fixes #150331. + +2008-11-29 Sebastian Dröge + + * m4/glib-gettext.m4: + Update glib-gettext.m4 from latest stable GLib release. + +2008-11-29 Sebastian Dröge + + Patch by: Cygwin Ports maintainer + + + * gettext.patch: + Update the gettext patch for use with gettext 0.17 which is + required to build with libtool 2.2 because of conflicts. + First part of bug #556091. + +2008-11-29 Sebastian Dröge + + * m4/gtk-doc.m4: + * m4/pkg.m4: + Update gtk-doc and pkg-config m4 macros from their latest releases. + +2008-11-20 Michael Smith + + * m4/as-objc.m4: + Fix objective C test macro when none of the compilers are found at all. + +2008-10-30 Stefan Kost + + * gtk-doc.mak: + Also cp the entities here to all xinlcude based docs (workaround for + not being able to set up a search path). + +2008-10-17 Jan Schmidt + + * gtk-doc.mak: + Don't clobber the real registry cache file when + building docs. + +2008-10-07 Jan Schmidt - Sun Microsystems + + * m4/gst-error.m4: + Also disable the bogus "loop not entered at top" warnings appearing on Sparc Forte builds. + +2008-10-06 Stefan Kost + + * gtk-doc.mak: + Apply the same fix as below to gtk-doc.mak. Somehow did not end up in + CVS. + +2008-09-05 David Schleef + + * gtk-doc-plugins.mak: Fix the check for gtkdoc-rebase: don't + pass the 'which' error back to make. This fix is more specific + than what is in upstream. + +2008-09-05 David Schleef + + * gtk-doc.mak: Fix the check for gtkdoc-rebase: don't pass the + 'which' error back to make. This fix is more specific than + what is in upstream. + +2008-09-04 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Get closer to upstream makefiles. Don't install index.sgml twice. Call + gtkdoc-rebase (if exists). + +2008-08-21 Stefan Kost + + * gtk-doc-plugins.mak: + Revert $(top_builddir) -> $(builddir) change of rev. 1.39 as there is + no variable called builddir. + +2008-07-31 Mark Nauwelaerts + + * gst.supp: + Add suppressions for Ubunty Hardy x86/64bit, similar to earlier + versions and 32bit variant. + +2008-07-31 Sebastian Dröge + + * m4/gst-feature.m4: + Remove GST_DISABLE_(ENUMTYPES|INDEX|URI). + +2008-07-21 Tim-Philipp Müller + + * m4/gst-error.m4:: + When checking for GST_ERROR_CXXFLAGS, check each compiler flag + individually, not all together. + +2008-07-20 Tim-Philipp Müller + + * m4/gst-parser.m4:: + Fix bison version number detection for older --version + output format (as bison 1.28 on OSX 10.4 outputs). + Fixes #543853. + +2008-07-12 Stefan Kost + + * plugins.xsl: + Split refsect2 also here to make "Element Pads" subtitle visible. + +2008-07-08 Sebastian Dröge + + * m4/gst-error.m4: + Add compiler flags to warn if declarations after statements or + variable length arrays are used. These are C99/GCC extensions and + are not supported by some compilers we want to support. + +2008-07-02 Mark Nauwelaerts + + * gtk-doc-plugins.mak: + Only clean doc maintainer stamps in maintainer-clean. Fixes #539977. + +2008-06-20 Sebastian Dröge + + * gstdoc-scangobj: + Always use format strings for printf-like functions, even if they just + print a string. Fixes bug #536981. + +2008-06-20 Sebastian Dröge + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Include CFLAGS and LDFLAGS in GTKDOC_CFLAGS and GTKDOC_LDFLAGS, + otherwise the values passed to configure are ignored. + Fixes bug #536978. + +2008-06-05 Tim-Philipp Müller + + * m4/gst-error.m4: + Add -fno-strict-aliasing when compiling with -Werror, to work around + warnings caused by G_LOCK with recent GLib versions (2.16.x) (#316221). + +2008-06-05 Jan Schmidt + + * gtk-doc.mak: + Don't copy html/*.png files unless they don't already exist + in the destdir. Fixes distcheck failure caused by permissions + problems trying to copy a file into the destdir when it already + exists. + +2008-05-28 Stefan Kost + + * plugins.xsl: + The class was not shown in plugin docs. Fix typo in changelog below. + +2008-05-22 Jan Schmidt + + * gstdoc-scangobj: + Emit warnings if one of the GTypes we're expecting is 0 + when scanning. + +2008-05-21 Felipe Contreras + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Fix installing png images when gtk-doc is disabled. + +2008-05-21 Felipe Contreras + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Fix make clean when gtk-doc is disabled and other cleanups. + +2008-05-17 Jan Schmidt + + * gtk-doc-plugins.mak: + Be more quiet when the files don't yet exist. + +2008-05-16 Jan Schmidt + + * gstdoc-scangobj: + Add a mechanism for adding 'implicitly created' GTypes into the + scan, allowing for documenting plugin-private base classes that + provide signals or properties for public elements. + + * gtk-doc-plugins.mak: + Use $(builddir) instead of $(top_builddir) in a few places - there's + no need to hard code 'docs/plugins' as the only useable path. + +2008-05-14 Peter Kjellerstedt + + * m4/gst-feature.m4: + Report plug-ins without external dependencies that will not be built + even when the name of the plug-in is a substring of another plug-in, + e.g., goom vs. goom2k1. + +2008-05-14 Tim-Philipp Müller + + * gst.supp: + Add suppression for glibc bug on gutsy/x86-64 + +2008-05-12 Stefan Kost + + * plugins.xsl: + Improve the layout of the caps, but splitting them on ";". + +2008-05-09 Sebastian Dröge + + Patch by: Brian Cameron + + * m4/gst-default.m4: + Don't set the default audio sink to the default visualizer. + Fixes bug #532295. + +2008-05-07 Tim-Philipp Müller + + * check.mak: (help): + Document GST_CHECKS environment variable in checks 'make help'. + +2008-05-06 Sebastian Dröge + + Patch by: Marc-Andre Lureau + + * scangobj-merge.py: + Don't depend on Twisted just for the OrderedDict but implement our + own ordered dictionary class. Fixes bug #531577. + +2008-04-23 Edward Hervey + + * gst.supp: + Re-arrange latest suppressions. + Add all known suppressions for ubuntu hardy. Same as for older + ubuntus, but with different codepaths. + +2008-04-22 Edward Hervey + + * gst.supp: Make tls leak suppression a bit more generic. + +2008-04-22 Edward Hervey + + * gst.supp: Fix ommission in latest commit. + Make tls leak suppression more generic in order to cover more + distributions (and hopefully also future distributions). + +2008-04-22 Edward Hervey + + * gst.supp: Add suppressions for Hardy. + They're just the newer versions of similar suppressions we had + for the previous versions of ubuntu. + +2008-04-15 Sebastian Dröge + + * Makefile.am: + * m4/Makefile.am: + Dist all files in common. Fixes bug #527984. + +2008-04-14 Tim-Philipp Müller + + * m4/gst-function.m4: + Rename AC_CACHE_VAL cache-ids to contain '_cv_' in order to make + autoconf-2.62 complain less. + +2008-04-13 Tim-Philipp Müller + + * m4/gst-args.m4: + * m4/gst-valgrind.m4: + Bump valgrind requirement to 3.0 (which was released in August 2005). + Fixes #489269. Also, check for version >=REQ and not >REQ. + +2008-04-09 Tim-Philipp Müller + + * m4/gst-default.m4: + Add --with-default-{audiosink|audiosrc|videosink|videosrc|visualizer} + configure switches (#519417). + +2008-04-03 Tim-Philipp Müller + + * m4/gst-args.m4: + Add --disable-foo switch for dependency-less plugins (#525586). + +2008-04-01 Sebastian Dröge + + * m4/gst-parser.m4: + Unconditionally require flex 2.5.31 and bison 1.875. + +2008-03-23 Sebastian Dröge + + * m4/gst-arch.m4: + amd64/x86_64 allows unaligned memory access too. + +2008-03-21 Sebastian Dröge + + * m4/gst-dowhile.m4: + Add macro that checks if the compiler supports do {} while (0) + macros and define HAVE_DOWHILE_MACROS if it does. This is + needed by glib/gmacros.h to use something else than + if (1) else for G_STMT_START/END when compling C++, which + causes compiler warnings because of ambigious else with g++ 4.3. + +2008-03-21 Sebastian Dröge + + * m4/gst-plugin-docs.m4: + * mangle-tmpl.py: + Don't depend on PyXML and use only XML modules that are shipped + with python. Fixes bug #519635. + +2008-03-07 Edward Hervey + + * m4/gtk-doc.m4: (GTK_DOC_CHECK): + The previous commit to this file by Stefan Kost mentionned checking for + SED, but NOT checking for gtkdoc-check (wth is that doing there ??). + Therefore, removing the check for gtkdoc-check + +2008-03-03 David Schleef + + * m4/ax_create_stdint_h.m4: Oops, checked in the wrong copy of + this file. (Update from upstream) + +2008-03-03 David Schleef + + * m4/ax_create_stdint_h.m4: Update from upstream. Fixes a bug + compiling with MSVC. + +2008-03-03 Edward Hervey + + * m4/pkg.m4: + Allow override of pkg-config results, as proposed by configure --help. + This is in fact just a backport from upstream pkg.m4. + Fixes #518892 + +2008-03-03 Peter Kjellerstedt + + * ChangeLog: + Changelog surgery of my previous commit to add bugzilla reference. + * m4/gst-args.m4: + Add AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to make it easier + to include and exclude plug-ins without external references, i.e., + plug-ins listed in GST_PLUGINS_SELECTED. (#498222) + +2008-03-03 Sebastian Dröge + + * gst.supp: + Add another glibc suppression. + +2008-02-29 Peter Kjellerstedt + + * m4/gst-feature.m4: + Make the comment before defines generated via AG_GST_CHECK_FEATURE + look nicer. (#498222) + +2008-02-26 Jan Schmidt + + * m4/Makefile.am: + * m4/as-gcc-inline-assembly.m4: + Add Dave Schleef's GCC inline assembly detection macro + for using in gst-plugins-good in the goom 2k4 plugin. + +2008-02-25 Andy Wingo + + * gst-autogen.sh: Instead of only passing certain arguments to + configure, pass anything that we didn't handle. Much friendlier. + Fixes #34412. + +2008-02-23 Jan Schmidt + + * m4/gst-error.m4: + Store the detected compiler flags into ERROR_CFLAGS rather than + ERROR_CXXFLAGS, and use the macro that checks the C compiler, not + the C++ one. + +2008-02-23 Tim-Philipp Müller + + * m4/gst-error.m4: + Reflow checks for additional warning flags so they're not + nested, which fixes the result reporting in the configure + output. + +2008-02-22 Tim-Philipp Müller + + * m4/as-compiler-flag.m4: + Add AS_CXX_COMPILER_FLAG + + * m4/gst-error.m4: + Add AG_GST_SET_ERROR_CXXFLAGS (Forte bits need testing) + +2008-02-22 Tim-Philipp Müller + + * gtk-doc-plugins.mak: + Add 'check-inspected-versions' target; this helps identify + files that should have been removed or where the version + number should (ideally) be updated before a release + (which doesn't happen automatically if the releaser doesn't + build that plugin locally). Not adding at a distcheck hook + yet though, because it's not really that important and would + probably also be a problem on buildbots. + +2008-02-22 Sebastian Dröge + + * gst.supp: + Add even more glibc 2.7 suppressions. + +2008-02-22 Sebastian Dröge + + * gst.supp: + Add another suppression for GLib caching some values after + the first call. + +2008-02-12 Sebastian Dröge + + Patch by: + Tim Mooney + + * m4/gst-error.m4: + Use no%E_MACRO_REDEFINED on Solaris to prevent compiler warnings. + Fixes bug #515905. + +2008-02-11 Sebastian Dröge + + * gst.supp: + Add a few more glibc 2.7 suppressions to make the avisubtitle unit + test valgrind clean. Fixes bug #515703. + +2008-02-08 Stefan Kost + + * ChangeLog: + Changelog surgery for last commit. + +2008-02-08 Stefan Kost + + * m4/gtk-doc.m4: + Conditionally check for SED. Also sync a bit with upstream macro. + +2008-02-08 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + Use '$(SED)' instead of 'sed'. Don't use -i for in-place as its gnu + only, move to a temp file instead. + +2008-02-06 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + As our docs are versioned, we need to patch the index.sgml file to have + correct paths there, unless we also want to fork gtk-doc's xsl (which + we don't). This hopefully fixes xrefs between modules. + +2008-02-02 Sebastian Dröge + + * m4/gst-feature.m4: + Use printf instead of echo as "echo -e" isn't POSIX and doesn't work + with strict POSIX shells like tcsh or dash and also not every platform + has a /bin/echo that supports it. + +2008-01-24 Stefan Kost + + * ChangeLog: + ChangeLog surgery. + + * gstdoc-scangobj: + Sync the object scanner with gtk-doc fixes. Update args and hierarchy + files. + +2008-01-20 Sebastian Dröge + + * check.mak: + * coverage/lcov.mak: + * gtk-doc-plugins.mak: + * release.mak: + Use $(MAKE) instead of make to fix the build if GNU make is called + something else on the system. + + * m4/as-docbook.m4: + Fix path for docbook.xsl if we have no /etc/xml/catalog and add a + docbook-xsl search path for FreeBSD. + +2008-01-18 Sebastian Dröge + + * gst.supp: + Add a suppression for a glibc bug: + http://valgrind.org/docs/manual/faq.html#faq.exit_errors> + +2008-01-18 Sebastian Dröge + + * gst.supp: + Add some more glibc 2.7 suppressions and make the GLib suppressions + for the home/tmp/etc directory caching a bit more generic. + +2008-01-18 Sebastian Dröge + + * gst.supp: + Add some glibc 2.7 supressions as found on Debian/unstable. + +2008-01-14 Jan Schmidt + + * download-translations: + Apparently I have problems with leaving things commented out when + I edit shell scripts. + +2008-01-12 Jan Schmidt + + * download-translations: + Remove bash-isms + +2008-01-12 Jan Schmidt + + * check-exports: + Restore the cleanup rm of our tmp file which I didn't mean to leave + commented out. + +2008-01-12 Jan Schmidt + + * check-exports: + Fixes to make check-export work on both Solaris and Linux + + * m4/gst-error.m4: + Disable extra warning category (argument mismatch) as an error + on Forte, as it prevents the libcheck fail_if macros from compiling. + + * win32.mak: + Substitute the GStreamer version so things will keep working in 0.11 + +2008-01-11 Tim-Philipp Müller + + Patch by: Peter Kjellerstedt + + * m4/gst-glib2.m4: + * m4/gst-libxml2.m4: + Improve/fix output from configure if either glib-2.0 or + libxml2 are not installed (#498222). + +2008-01-09 Stefan Kost + + * coverage/lcov.mak: + Update coverage make-rules: use them conditionaly, use libtool mode + and use lcov to cleanup. + +2007-12-18 Sebastian Dröge + + * glib-gen.mak: + Also use #include "header" instead of #include
for the + headers that were used to generate the source files for the same + reason as below. + + Remove whitespace before #include. + +2007-12-18 Sebastian Dröge + + * glib-gen.mak: + Use #include "header" instead of #include
for the generated + enum C files as the file will always be in the same directory and + some compilers seem to be a bit strict about that unless . is added + to the include path. + + Include all headers that were used to generate the source files in + the C file as they're used there. + +2007-12-17 Tim-Philipp Müller + + * win32.mak: (win32), (win32defs), (win32crlf): + Make check for CR LF in Visual C++ 6.0 project files + work, based on patch by David Schleef (#496722, #393626). + +2007-12-17 Tim-Philipp Müller + + * Makefile.am: + Don't forget to dist the new win32.mak. + +2007-12-17 Tim-Philipp Müller + + * win32.mak: (win32), (win32defs): + Move common win32 Makefile foo into this new file. + +2007-12-15 Stefan Kost + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + We should have never forked this that much :/. + +2007-12-13 Tim-Philipp Müller + + * check-exports: + Fix build on the ppc64 build bot. + +2007-12-13 Tim-Philipp Müller + + * check-exports: + Suppress more unintentional exports (too much hassle to rename them, + since the win32 project files would need changing too). + +2007-12-12 Tim-Philipp Müller + + * Makefile.am: + check-exports should be disted. + +2007-12-12 Tim-Philipp Müller + + * check-exports: + Add quick'n'dirty script to check the exported symbols of a library + against the symbols in the corresponding .def file (#493983). Based + on script by Ole André Vadla Ravnås. + +2007-11-06 Jan Schmidt + + * gtk-doc-plugins.mak: + Fix distcheck by making sure the types files are treated like the + other gtkdoc-scangobj generated files. + +2007-09-21 Sebastian Dröge + + * m4/gst-args.m4: + Let the AG_GST_ARG_ENABLE_EXPERIMENTAL macro default to disable + building of experimental plugins. Nobody uses it yet and the + --enable--experimental stuff from gst-plugins-good defaults to + disable too. + +2007-09-06 Tim-Philipp Müller + + * gtk-doc-plugins.mak: + Just use the normal 'check' target and avoid a circular + dependency. + +2007-09-06 Tim-Philipp Müller + + * gtk-doc-plugins.mak: + Add rule to error out if .hierarchy file contains tabs. + +2007-08-20 Tim-Philipp Müller + + * download-translations: + * po.mak: + If there are new languages, they need to be added to po/LINGUAS. + +2007-08-20 Tim-Philipp Müller + + * download-translations: + * po.mak: + Fix up 'download-po' a bit, so that we find new translations + for languages that aren't in our po/LINGUAS file yet too. + +2007-07-16 Jan Schmidt + + * gst.supp: + Add a suppression for GLib caching the tmp dir seen on an + Ubuntu Feisty system. + +2007-07-13 Jan Schmidt + + * m4/gst-feature.m4: + If we want to use 'echo -e', call /bin/echo instead of the shell's + since -e is a bash extension, and our /bin/sh might not be being + provided by bash. + +2007-07-01 Thomas Vander Stichele + + * po.mak: + Translation project has moved. Also, no idea how this used to + work given that we weren't downloading a .po file. + +2007-06-25 Stefan Kost + + * gst-xmlinspect.py: + * plugins.xsl: + Also extract element caps for plugin-docs. Fixes parts of #117692. + +2007-06-21 Tim-Philipp Müller + + Patch by: Andreas Schwab + + * m4/gst-feature.m4: + Fix quoting (#449493). + +2007-06-10 Sebastian Dröge + + * m4/gst-parser.m4: + Only generate the parser if bison >= 1.875 _and_ flex >= 2.5.31 is + installed and use pre-generated sources otherwise. Fixes bug #444820. + +2007-05-11 Michael Smith + + * gst.supp: + Suppression variant for our good friend the TLS leak, this time for + Ubuntu Feisty/x86. + +2007-05-09 Tim-Philipp Müller + + * gtk-doc-plugins.mak: + Fix make distcheck again; change some spaces to tabs in makefile. + +2007-04-29 Thomas Vander Stichele + + * gtk-doc-plugins.mak (-module): + Error out when the html build step gives warnings, so they get + fixed properly. + +2007-04-23 Stefan Kost + + * m4/gst-feature.m4: + Add macro AG_GST_PARSE_SUBSYSTEM_DISABLES that checks the defines in + the configuration header and AC_DEFINES the setings. + +2007-04-19 Sebastian Dröge + + Patch by: Vincent Torri + + * m4/gst-parser.m4: + Put the AC_MSG_RESULT output in brackets to get it properly written to + the terminal. + +2007-04-18 Sebastian Dröge + + * m4/gst-parser.m4: + Check for flex >= 2.5.31 and set GENERATE_PARSER if we have at least + that version. Otherwise use pre-generated parser sources as we can't + raise the required flex version. HAVE_MT_SAVE_FLEX is obsolete now + as we use a new enough flex version anyway. First part of #349180 + +2007-04-10 Thomas Vander Stichele + + * m4/gst-check.m4: + Allow pre-setting the GST(PB)_TOOLS/PLUGINS_DIR variables to help + builds against older GStreamer. + +2007-03-25 Sebastian Dröge + + * m4/gst-parser.m4: + Fix the flex version check. It ignored the micro version before. + +2007-03-09 Jan Schmidt + + * check.mak: + Use the same timeout when generating valgrind suppressions as + running the valgrind test. + + * gst.supp: + Add some more suppressions and stuff. + +2007-03-08 Jan Schmidt + + * check.mak: + Make sure GSlice is disabled when building suppressions too. + + * gst.supp: + Add around *850* lines of suppressions for one-time initialisations + inside libasound and gconf/bonobo/ORBit. I feel so dirty. + +2007-03-07 Jan Schmidt + + * gst.supp: + add a suppression for this GConf flup on the FC5 buildbot. + +2007-03-06 Jan Schmidt + + * gst.supp: + Make the suppression a little more generic, to catch the FC5 + backtrace too. + +2007-03-06 Jan Schmidt + + * gst.supp: + Add a suppression for libcdio 0.76. It leaks an internal struct + when the CD-ROM device is not accessible. + +2007-02-28 Thomas Vander Stichele + + * m4/gst-arch.m4: + Move a line that was in the wrong macro + +2007-02-28 Thomas Vander Stichele + + * m4/gst.m4: + Add + * m4/gst-arch.m4: + * m4/gst-args.m4: + * m4/gst-check.m4: + * m4/gst-debuginfo.m4: + * m4/gst-default.m4: + * m4/gst-doc.m4: + * m4/gst-error.m4: + * m4/gst-feature.m4: + * m4/gst-function.m4: + * m4/gst-gettext.m4: + * m4/gst-glib2.m4: + * m4/gst-libxml2.m4: + * m4/gst-parser.m4: + * m4/gst-plugin-docs.m4: + * m4/gst-plugindir.m4: + * m4/gst-valgrind.m4: + * m4/gst-x11.m4: + Convert all macros to use AG_GST style so we can properly warn + when they're missing if configure.ac calls AG_GST_INIT + Will require update in all GStreamer modules. + +2007-02-11 Stefan Kost + + * m4/gst-args.m4: + Remove 'enable' from configure switch description as this leads to + confusing lines like "disable enable builing ...". + * m4/gst-feature.m4: + Fix comment to sound less horrible. + +2007-02-07 Tim-Philipp Müller + + Patch by: Will Newton + + * m4/gst-check.m4: + Use $PKG_CONFIG rather than pkg-config directly, the one in our path + might not be the one we want, like when cross-compiling. Also, other + macros such as PKG_CHECK_MODULES use $PKG_CONFIG, so we should + probably too just for consistency. Fixes #405288. + +2007-01-08 Tim-Philipp Müller + + * m4/gst-parser.m4: + Need to use double square brackets again so m4 doesn't remove them + (fixes #378931). + + * m4/gst-args.m4: + Use double square brackets here as well, for the same reason. + +2007-01-05 Tim-Philipp Müller + + * m4/gst-parser.m4: + Use 'sed' rather than 'tr' to strip trailing letters from version + numbers, since 'tr' might not be available and we know sed is + (#378931). + +2006-10-21 Tim-Philipp Müller + + * check.mak: + Increase default timeout under valgrind, 60 is just too short and + some tests take a bit longer these days and not everyone has a + beefy machine. + +2006-09-29 Michael Smith + + * gst.supp: + More suppressions for edgy. + +2006-09-28 Jan Schmidt + + * m4/gst-glib2.m4: + Use gmodule-no-export-2.0.pc instead of gmodule-2.0.pc - we neither + want nor need --export-dynamic (which ends up making us export a bunch + of unneeded symbols) + +2006-09-14 Tim-Philipp Müller + + * gst.supp: + Some suppressions for the more recent ld.so in ubuntu edgy. + +2006-08-23 Tim-Philipp Müller + + * gst.supp: + Shorten function trail so the suppression works on + my ubuntu dapper system with core cvs as well. + +2006-07-28 Jan Schmidt + + * gst.supp: + Extra suppressions from my Ubuntu x86_64 machine + +2006-07-24 Tim-Philipp Müller + + Patch by: Frederic Peters + + * m4/gst-parser.m4: + Need to double square brackets in .m4 files. Should fix bison + version detection with version numbers like 1.23a (#348354). + +2006-07-24 Jan Schmidt + + * check.mak: + Valgrind fails to find tests written in tests/check/ directly (rather + than a subdir) - because valgrind gets run with a filename that + doesn't contain a relative path, it goes searching /usr/bin instead. + Run with ./.... to make things work either way. + + * gtk-doc-plugins.mak: + Add $(top_builddir)/src as a place to look for plugins + when building too, since that's where gst-template keeps things + +2006-07-23 Stefan Kost + + Patch by: Frederic Peters + + * m4/gst-parser.m4: + Fix bison detection (#348354) + +2006-07-21 Stefan Kost + + * m4/gst-parser.m4: + check for bison and flex + +2006-07-13 Thomas Vander Stichele + + * m4/gst-plugin-docs.m4: + remove the configure argument for enabling plugin doc build; + having gtk-doc enabled and pyxml present is enough of a trigger + +2006-07-03 Thomas Vander Stichele + + * coverage/lcov.mak: + fix up rules to work with gst-python as well + run "make lcov" to test and generate the reports + run "make lcov-reset" to redo it after that + +2006-07-02 Thomas Vander Stichele + + * Makefile.am: + * check.mak: + add an inspect target that inspects every element feature, + so we can have that added for coverage + * coverage/lcov.mak: + add support for lcov + +2006-07-02 Thomas Vander Stichele + + * m4/gst-args.m4: + when building with gcov, reset CFLAGS and friends to O0 + +2006-07-02 Thomas Vander Stichele + + * m4/gst-args.m4: + Find the gcov that matches the gcc version + Only allow gcov if we use gcc + +2006-07-02 Thomas Vander Stichele + + * Makefile.am: + * coverage/coverage-report-entry.pl: + * coverage/coverage-report.pl: + * coverage/coverage-report.xsl: + copy coverage reporting files from dbus + +2006-07-01 Thomas Vander Stichele + + * m4/gst-args.m4: + libtool strips gcov's -f flags, so libgcov does not get + linked in. Setting GCOV_LIBS with -lgcov fixes libtool's + stripping + also show what pkg-config-path we set + +2006-06-22 Tim-Philipp Müller + + Patch by: Peter Kjellerstedt + + * m4/gst-feature.m4: + Show list of plugins without external dependencies that + will not be built as well (#344136). + +2006-06-15 Tim-Philipp Müller + + * m4/gst-plugin-docs.m4: + add GST_PLUGIN_DOCS, which checks for everything needed + to build the plugin docs (namely gtk-doc and pyxml); also + adds a new --enable-plugin-docs configure switch; will + set ENABLE_PLUGIN_DOCS conditional for use in Makefile.am + files (see #344039). + +2006-06-11 Thomas Vander Stichele + + * m4/gst-check.m4: + add GST_PKG_CHECK_MODULES, which in the normal case of checking + for a dependency lib for a plug-in only needs two arguments + to do the right thing. + * m4/gst-feature.m4: + clean up output a little of feature checking; also deal with + non-plug-in feature checks + * m4/Makefile.am: + * m4/gst-gstreamer.m4: + remove this file; it's a useless check + +2006-06-06 Thomas Vander Stichele + + * m4/gst-arch.m4: + add PPC64 so we can have separate structure sizes for it + +2006-06-05 Edward Hervey + + * gtk-doc.mak: + Check for the proper .devhelp2 file to remove. + +2006-05-31 Thomas Vander Stichele + + * gtk-doc.mak: + allow a magic variable to suppress errors from docbuilding + +2006-05-30 Thomas Vander Stichele + + * gtk-doc.mak: + error out if gtkdoc-mktmpl finds unused declarations + +2006-05-28 Edward Hervey + + * gst.supp: + Reverting previous commit. That's good to know, Edward, but why ? + +2006-05-28 Edward Hervey + + * gst.supp: + Added suppresion for memleak in g_option_context_parse on fc5-64 + +2006-05-19 Thomas Vander Stichele + + * m4/gst-check.m4: + set GSTPB_PLUGINS_DIR just like GST_PLUGINS_DIR + +2006-05-18 Tim-Philipp Müller + + * check.mak: + Fix 'make help' in check directories, it should be + 'valgrind.gen-suppressions' not 'valgrind-gen-suppressions' + (not changing target to match help string on purpose to keep + scripts etc. functional). + +2006-05-18 Thomas Vander Stichele + + Patch by: Peter Kjellerstedt + + * m4/gst-arch.m4: + add support for CRIS and CRISv32. + +2006-05-17 Jan Schmidt + + * m4/gst-args.m4: + Fix the macros for command-line supplied package and origin names + so they don't end up being configure as "" (Fixes #341479) + +2006-05-14 Jan Schmidt + + * gtk-doc.mak: + Add uninstall rule to remove .devhelp2 files. + +2006-05-09 Edward Hervey + + * gst.supp: + Add suppression for GSlice version of + g_type_init calloc leak + +2006-04-05 Michael Smith + + * gst.supp: + Delete a bogus suppression for the registry code. + Generalise a suppression for a glib bug (see #337404) + +2006-04-04 Michael Smith + + * gst.supp: + Add a leak suppression: the existing glibc-doesn't-free-TLS one + wasn't triggering here. + +2006-04-04 Michael Smith + + * gst.supp: + Add some minimally-neccesary suppressions for my x86/dapper system. + +2006-04-01 Thomas Vander Stichele + + * plugins.xsl: + Do not display an origin link if origin does not start with http + See #323798 + +2006-04-01 Thomas Vander Stichele + + * m4/gst-args.m4: + * m4/gst-feature.m4: + add more macros + * m4/gst-x11.m4: + X11-related checks + +2006-04-01 Thomas Vander Stichele + + * m4/as-version.m4: + newer version + * m4/gst-args.m4: + * m4/gst-doc.m4: + update and add other macros to be shared across projects + +2006-03-24 Thomas Vander Stichele + + * gst.supp: + add a suppression for g_parse_debug_string + +2006-03-23 Stefan Kost + + * gstdoc-scangobj: + sync fully with gtkdoc-0.15 + +2006-03-23 Stefan Kost + + * gstdoc-scangobj: + * gtk-doc.mak: + sync a little with gtk-doc mainline + +2006-03-17 Wim Taymans + + * gst.supp: + add another clone suppression + change all glibc suppressions to match 2.3.* + +2006-03-09 Thomas Vander Stichele + + * m4/check.m4: + fix test so it actually works when the normal check is used + over debian's/ubuntu's + +2006-03-08 Jan Schmidt + + * check.mak: + Set G_SLICE=always-malloc when valgrinding tests + (closes #333272) + +2006-02-21 Jan Schmidt + + * m4/gst-glib2.m4: + Fix debug output when the GLib version prerequisite is not found + +2006-02-13 Andy Wingo + + * m4/check.m4: Hack around Debian/Ubuntu's broken installation of + the PIC version of check as libcheck_pic.a. Should work with + cross-compilation too. Grr. + +2006-02-06 Thomas Vander Stichele + + * m4/gst-default.m4: + switch to auto* sinks for defaults + +2006-02-02 Wim Taymans + + * check.mak: + add a .valgrind.gen-suppressions target to aid in generating + suppressions + * gst.supp: + add more repressions from my debian glibc as of today + +2006-02-02 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + only add srcdir/gst if it exists + +2006-01-30 Thomas Vander Stichele + + * release.mak: + don't complain about disted enums in win32 + +2006-01-20 Thomas Vander Stichele + + * m4/gst-check.m4: + AC_SUBST CFLAGS and LIBS + do a non-command because something is stripping out our AC_SUBST + +2006-01-20 Thomas Vander Stichele + + * m4/gst-args.m4: + * m4/gst-valgrind.m4: + properly give a "no" result manually when providing a + not-found action to fix configure output + +2006-01-20 Thomas Vander Stichele + + * m4/pkg.m4: + update with a more recent version + +2006-01-07 Thomas Vander Stichele + + * gettext.patch: + make Makefile depend on LINGUAS, so rebuilds work when adding + a language + +2006-01-03 Michael Smith + + * check.mak: + Clarify error message from valgrind test runs. + +2005-12-16 Thomas Vander Stichele + + * m4/gst-arch.m4: + define HOST_CPU + +2005-11-29 Thomas Vander Stichele + + * check.mak: + add a valgrind-forever target for tests + +2005-11-28 Thomas Vander Stichele + + * check.mak: + when a "make test.check" run fails, make it rerun the test with + at least debug level 2 + +2005-11-14 Thomas Vander Stichele + + * m4/Makefile.am: + * m4/gst-check.m4: + fix check for base plugins + * m4/gst-default.m4: + add m4 to set default elements + +2005-10-18 Thomas Vander Stichele + + * m4/gst-check.m4: + check for tools correctly + +2005-10-18 Thomas Vander Stichele + + * gtk-doc.mak: + only enable breaking on new API when make distcheck passes, + not before + +2005-10-18 Thomas Vander Stichele + + * m4/gst-check.m4: + Resurrect Julien's dead body and wipe his mind clean + +2005-10-18 Thomas Vander Stichele + + * m4/gst-check.m4: + Kill Julien + +2005-10-17 Julien MOUTTE + + * m4/gst-check.m4: I know Thomas will kill me but this + ifelse statement seems incorrect as it is always setting + required to "yes". With this one it seems to work. Fixes + build of gst-plugins-base on my setup where gstreamer-check + is definitely not present/required. + +2005-10-18 Stefan Kost + + * gtk-doc.mak: + make build break on new api that has not been added to the + sections file + +2005-10-17 Thomas Vander Stichele + + * m4/gst-glib2.m4: + * m4/Makefile.am: + * m4/gst-check.m4: + add macro for easy checks for GStreamer libs + +2005-10-16 Thomas Vander Stichele + + * m4/gst-glib2.m4: + update, warn in error cases + +2005-10-16 Thomas Vander Stichele + + * m4/gst-error.m4: + add GST_SET_DEFAULT_LEVEL + +2005-10-16 Thomas Vander Stichele + + * m4/Makefile.am: + * m4/gst-gettext.m4: + remove the AM_GNU_GETTEXT* calls, they need to be in configure.ac + * m4/gst-glib2.m4: + clean up and re-use in core soon + * m4/gst-plugindir.m4: + macro to set up PLUGINDIR and plugindir define/var + +2005-10-15 Thomas Vander Stichele + + * m4/Makefile.am: + * m4/gst-gettext.m4: + add macro for setting up gettext + +2005-10-15 Thomas Vander Stichele + + * m4/gst-args.m4: + add some .m4's for argument checking that can be shared among modules + +2005-10-15 Thomas Vander Stichele + + * m4/as-libtool.m4: + set _LT_LDFLAGS + * m4/gst-libxml2.m4: + document + +2005-10-15 Thomas Vander Stichele + + * m4/gst-arch.m4: + indent a little + add AC_REQUIRE + * m4/gst-error.m4: + clean up + +2005-10-12 Thomas Vander Stichele + + * gst-autogen.sh: + update version detection expression to catch stuff like + Libtool (libtool15) 1.5.0 + +2005-10-11 Thomas Vander Stichele + + * gst.supp: + commit 6 new suppressions related to g_module_open; can these + really not be folded into one ? + +2005-10-11 Edward Hervey + + * gst.supp: + made the suppression more generic + Added pthread memleak suppresions + Added nss_parse_* memleak suppresion (used by g_option_context_parse) + +2005-10-11 Thomas Vander Stichele + + * check.mak: + be more strict, more leak resolution + * gst.supp: + clean up the g_type_init suppressions + +2005-10-07 Thomas Vander Stichele + + * m4/Makefile.am: + * m4/gst-valgrind.m4: + put the valgrind detection in an .m4 + +2005-09-29 Thomas Vander Stichele + + * check.mak: + add some more targets, like "help", but also more intensive tests + +2005-09-23 Thomas Vander Stichele + + * gtk-doc.mak: + make certain doc warnings fatal so people maintain docs again + +2005-09-23 Thomas Vander Stichele + + * Makefile.am: + * gtk-doc-plugins.mak: + * scangobj-merge.py: + merge additions from the .signals.new and .args.new file in + the original ones, only updating if necessary + +2005-09-23 Thomas Vander Stichele + + * gst-xmlinspect.py: + * gstdoc-scangobj: + * gtk-doc-plugins.mak: + fix properly for new API; make update in plugins dir now works + +2005-09-20 Thomas Vander Stichele + + * gst-xmlinspect.py: + * gstdoc-scangobj: + some fixes for new API + * gtk-doc-plugins.mak: + set environment properly + +2005-09-17 David Schleef + + * gtk-doc-plugins.mak: Use new environment variables. + +2005-09-16 Michael Smith + + * gstdoc-scangobj: + Make the scanobj code reflect registry/plugin API changes + +2005-09-15 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + split out scanobj step (which will be run by doc maintainer) + from scan step (which will be run on every build) + clean up some of the commands for make distcheck + +2005-09-15 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + * mangle-tmpl.py: + first stab at reorganizing the plugins build so we can maintain + element docs + +2005-09-14 David Schleef + + * as-libtool.mak: Remove + * m4/as-libtool.m4: The libtool bug that this worked around has + been fixed. + * m4/as-version.m4: Don't define GST_RELEASE, since it causes + config.h to be regenerated needlessly, and we don't use it. + +2005-09-14 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + error out on inspect failure + +2005-09-14 Michael Smith + + * glib-gen.mak: + Don't call glib-mkenums with arguments that confuse/break MinGW, + fixes 316155. + +2005-09-03 Thomas Vander Stichele + + * gtk-doc-plugins.mak: + * gtk-doc.mak: + * m4/gst-doc.m4: + separate out gtk-doc and docbook stuff + have two separate --enable configure flags + +2005-08-26 Thomas Vander Stichele + + * check.mak: + add a .gdb target; rebuild registry for each target, otherwise + a code rebuild always triggers a reg rebuild, and it's just too + annoying + * gstdoc-scangobj: + +2005-08-21 Thomas Vander Stichele + + * check.mak: + separate out REGISTRY_ENVIRONMENT; we want to use that from + our valgrind runs, but we also want TESTS_ENVIRONMENT to contain + everything that the first test, gst-register, needs + +2005-08-21 Thomas Vander Stichele + + * check.mak: + parse output of valgrind and check for definitely lost, and error + out; somehow I was led to believe valgrind returns non-zero for + leaks, but I can't make it do that, so let's parse + +2005-08-20 Thomas Vander Stichele + + * check.mak: + for some weird reason valgrind does not report actual memleaks + if GST_PLUGIN_PATH is set to anything but the core gstreamer dir + while valgrind is running. Since the registry is going to go + anyway, I don't want to waste any more time on this; I just run + valgrind without GST_PLUGIN_PATH set. Since the registry loading + doesn't check if GST_PLUGIN_PATH got changed as a reason to rebuild + the registry, that's actually fine. + +2005-08-15 Thomas Vander Stichele + + * mangle-tmpl.py: + keep original Long_Description; only insert an include if it's + not already the first line in there + * plugins.xsl: + output more information for plugins, including an origin hyperlink + +2005-08-15 Thomas Vander Stichele + + * gst-xmlinspect.py: + a first stab at inspecting plugins and outputting an xml description + * gtk-doc-plugins.mak: + a gtk-doc using snippet for plugins documentation + * plugins.xsl: + a stylesheet to convert gst-xmlinspect.py output to docbook output + for inclusion in the gtk-doc stuff + +2005-07-20 Ronald S. Bultje + + * m4/gst-doc.m4: + s/pdf/eps/ in test for whether we output EPS images (#309379). + +2005-07-18 Andy Wingo + + * m4/as-libtool-tags.m4: Ooh, backported from libtool 1.6. Much + better. Thanks, Paolo Bonzini! + + * m4/Makefile.am (EXTRA_DIST): + * m4/as-libtool-tags.m4: New file, tries to disable some CXX and + fortran checks. + +2005-07-08 Thomas Vander Stichele + + * m4/gst-error.m4: + add macro to set ERROR_CFLAGS + +2005-06-30 Jan Schmidt + + * gst-autogen.sh: + Remove the old autoregen.sh if it exists before recreating it, + to prevent confusing any shell process that might be reading it + currently. + +2005-06-29 Thomas Vander Stichele + + * m4/gtk-doc.m4: + added + +2005-06-03 Stefan Kost + + * gst-autogen.sh: create autoregen.sh *before* shifting the options + +2005-05-17 Thomas Vander Stichele + + * gst-autogen.sh: only update autoregen.sh on actual runs + +2005-03-11 Thomas Vander Stichele + + * m4/check.m4: m4 from the check unit test suite + +2004-12-14 David Schleef + + * m4/gst-arch.m4: remove MMX stuff, since it doesn't work and + isn't needed anywhere + +2004-12-08 Thomas Vander Stichele + + * gst-autogen.sh: + allow failure command to be run so we can clean upfrom autopoint + +2004-09-03 Zeeshan Ali Khattak + * m4/gst-feature.m4: Trying to correct the GST_CHECK_CONFIGPROG macro + +2004-07-21 Benjamin Otte + + * m4/.cvsignore: exciting updates for libtool m4 files + +2004-07-12 David Schleef + + * m4/as-objc.m4: Add a macro to test for objective C + +2004-06-12 Thomas Vander Stichele + + * m4/gst-feature.m4: + not all of them support --plugin-libs, so redirect stderr + +2004-06-12 Thomas Vander Stichele + + * m4/as-scrub-include.m4: + sync with upstream to 0.1.4. Fixes #132440 + +2004-06-07 Benjamin Otte + + * m4/gst-feature.m4: + write a big marker into configure output when checking next plugin + to allow easier parsing of why plugins are(n't) built. + +2004-06-01 Thomas Vander Stichele + + * m4/as-compiler-flag.m4: + * m4/as-compiler.m4: + * m4/as-libtool.m4: + * m4/as-version.m4: + sync with upstream, change sticky options to -ko + +2004-05-24 Thomas Vander Stichele + + * m4/as-scrub-include.m4: synced with upstream + +2004-05-03 Thomas Vander Stichele + + * po.mak: + snippet for updating .po files + +2004-03-18 Thomas Vander Stichele + + * Makefile.am: + * m4/Makefile.am: + integrate these with the dist + +2004-03-17 Thomas Vander Stichele + + * release.mak: add a release target + +2004-03-09 Thomas Vander Stichele + + patch by: Stephane Loeuillet + + * m4/ax_create_stdint_h.m4: + use head -n instead of head - (#136500) + +2004-03-05 Thomas Vander Stichele + + * m4/gst-doc.m4: don't build PS without dvips binary + +2004-02-22 Julio M. Merino Vidal + + reviewed by: Benjamin Otte + + * m4/as-docbook.m4: + don't use == operator with test(1) (fixes #135115) + +2004-02-16 Thomas Vander Stichele + + * common/m4/gst-arch.m4: x86_64 is x86 too (clue from Fedora 2 test) + +2004-02-13 Thomas Vander Stichele + + * m4/gst-feature.m4: + remove AM_CONDITIONAL for the subsystem since automake 1.6.x + requires that call be in configure.ac + +2004-02-13 Thomas Vander Stichele + + * m4/gst-libxml2.m4: + take required version as argument, and default to 2.4.9 if not + specified + +2004-02-12 Thomas Vander Stichele + + * m4/gst-feature.m4: + rename and fix up GST_CHECK_DISABLE_SUBSYSTEM + +2004-02-11 Thomas Vander Stichele + + * common/m4/as-ac-expand.m4: + * common/m4/as-auto-alt.m4: + * common/m4/as-compiler-flag.m4: + * common/m4/as-compiler.m4: + * common/m4/as-docbook.m4: + * common/m4/as-libtool.m4: + * common/m4/as-scrub-include.m4: + * common/m4/as-version.m4: + * common/m4/glib-gettext.m4: + * common/m4/gst-arch.m4: + * common/m4/gst-debuginfo.m4: + * common/m4/gst-doc.m4: + * common/m4/gst-feature.m4: + * common/m4/gst-function.m4: + * common/m4/gst-glib2.m4: + * common/m4/gst-gstreamer.m4: + * common/m4/gst-libxml2.m4: + * common/m4/gst-makecontext.m4: + * common/m4/gst-mcsc.m4: + * common/m4/pkg.m4: + fix underquoted macros as reported by automake 1.8.x (#133800) + +2004-02-11 Johan Dahlin + + * gst-autogen.sh: Use A-Z instead of A-z in sed expression to + avoid a warning + +2004-02-05 Thomas Vander Stichele + + * m4/gst-doc.m4: + we use --output-format=xml and --ingnore-files options to + gtkdoc-mkdb, which got added between 0.9 and 1.0 + +2004-02-04 Thomas Vander Stichele + + * m4/as-libtool.m4: remove AM_PROG_LIBTOOL so it can move back + to configure.ac to shut up libtoolize + +2004-02-03 Thomas Vander Stichele + + * glib-gen.mak: added; used to generate enums and marshal code + +2004-01-13 Thomas Vander Stichele + + * gettext.patch: added; used by autogen.sh to make sure + GETTEXT_PACKAGE is understood from po/Makefile.in.in -> po/Makefile.in + diff --git a/common/Makefile.am b/common/Makefile.am new file mode 100644 index 0000000..25966fc --- /dev/null +++ b/common/Makefile.am @@ -0,0 +1,22 @@ +SUBDIRS = m4 + +EXTRA_DIST = \ + ChangeLog \ + gettext.patch \ + glib-gen.mak gtk-doc.mak upload-doc.mak \ + cruft.mak release.mak win32.mak po.mak \ + parallel-subdirs.mak \ + gst-autogen.sh \ + check-exports \ + c-to-xml.py mangle-tmpl.py scangobj-merge.py \ + gtk-doc-plugins.mak \ + plugins.xsl gstdoc-scangobj \ + gst.supp check.mak \ + coverage/lcov.mak \ + coverage/coverage-report.pl \ + coverage/coverage-report.xsl \ + coverage/coverage-report-entry.pl \ + download-translations \ + extract-release-date-from-doap-file \ + gst-indent \ + orc.mak diff --git a/common/Makefile.in b/common/Makefile.in new file mode 100644 index 0000000..0b6542e --- /dev/null +++ b/common/Makefile.in @@ -0,0 +1,686 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = common +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = m4 +EXTRA_DIST = \ + ChangeLog \ + gettext.patch \ + glib-gen.mak gtk-doc.mak upload-doc.mak \ + cruft.mak release.mak win32.mak po.mak \ + parallel-subdirs.mak \ + gst-autogen.sh \ + check-exports \ + c-to-xml.py mangle-tmpl.py scangobj-merge.py \ + gtk-doc-plugins.mak \ + plugins.xsl gstdoc-scangobj \ + gst.supp check.mak \ + coverage/lcov.mak \ + coverage/coverage-report.pl \ + coverage/coverage-report.xsl \ + coverage/coverage-report-entry.pl \ + download-translations \ + extract-release-date-from-doap-file \ + gst-indent \ + orc.mak + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu common/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/common/c-to-xml.py b/common/c-to-xml.py new file mode 100644 index 0000000..397c112 --- /dev/null +++ b/common/c-to-xml.py @@ -0,0 +1,34 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +""" +Convert a C program to valid XML to be included in docbook +""" + +import sys +import os +from xml.sax import saxutils + +def main(): + if len(sys.argv) == 1: + sys.stderr.write("Please specify a source file to convert") + sys.exit(1) + source = sys.argv[1] + + if not os.path.exists(source): + sys.stderr.write("%s does not exist.\n" % source) + sys.exit(1) + + content = open(source, "r").read() + + # print header + print '' + print '' + print + print '' + + # print content + print saxutils.escape(content).encode('UTF-8') + print '' + +main() diff --git a/common/check-exports b/common/check-exports new file mode 100755 index 0000000..c6d3eca --- /dev/null +++ b/common/check-exports @@ -0,0 +1,72 @@ +#!/bin/sh +# check-exports +# +# quick'n'dirty script that retrieves the list of exported symbols of a given +# library using 'nm', and compares that against the list of symbols-to-export +# of our win32/common/libfoo.def files. + +if [ $# -ne 2 ]; then + echo "Usage: $0 library.def library.so" + exit 1 +fi + +def_path="$1" +def_name="$(basename $def_path)" +lib_path="$2" + +lib_result="`mktemp /tmp/defname.XXXXXX`" + +LC_ALL=C +export LC_ALL + +# On Solaris, add -p to get the correct output format +NMARGS= +if nm -V 2>&1 |grep Solaris > /dev/null; then + NMARGS=-p +fi + +# FIXME 0.11: in 0.11, we should change the export filter to only export +# _gst_foo, but not __gst_foo (we can't change this now, since we added +# __gst_debug_min and __gst_debug_enabled at some point and need to keep +# ABI compatibility). So below we special-case some symbols that shouldn't +# really be exported, either because we're too lazy to rename them to something +# that's not exported (like the _gst_parse_* stuff) or because we had them in +# public headers at some point although they shouldn't be and so we need to +# keep them exported now (like _gst_debug_init, +# __gst_element_factory_add_interface or +# __gst_element_factory_add_static_pad_template). We suppress them here to +# make sure they're at least not exported in the windows msvc build (they +# were never in the .def file, so they never got exported). +# _end is special cased because for some reason it is reported as an exported +# BSS symbol, unlike on linux where it's a local absolute symbol. +nm $NMARGS $lib_path | awk \ + '{ + if ($3 !~ /^_gst_parse_yy/ && \ + $3 !~ /^_gst_[a-z]*_init/ && \ + $3 !~ /^_gst_parse_launch/ && \ + $3 !~ /^__gst_element_details_/ && \ + $3 !~ /^__gst_element_factory_add_/ && \ + $3 !~ /^gst_interfaces_marshal/ && \ + $3 ~ /^[_]*(gst_|Gst|GST_).*/) + { + if ($2 ~ /^[BSDG]$/) + print "\t" $3 " DATA" + else if ($2 == "T") + print "\t" $3 + } + }' | sort | awk '{ if (NR == 1) print "EXPORTS"; print $0; }' \ + > $lib_result + +diffoutput=`diff -u $def_path $lib_result` +diffresult=$? + +rm $lib_result + +if test "$diffresult" -eq 0; then + exit 0; +else + echo -n "$diffoutput" >&2 + echo >&2 + exit 1; +fi + diff --git a/common/check.mak b/common/check.mak new file mode 100644 index 0000000..30487f1 --- /dev/null +++ b/common/check.mak @@ -0,0 +1,181 @@ +# keep target around, since it's referenced in the modules' Makefiles +clean-local-check: + @echo + +if HAVE_VALGRIND +# hangs spectacularly on some machines, so let's not do this by default yet +check-valgrind: + $(MAKE) valgrind +else +check-valgrind: + @true +endif + +LOOPS = 10 + +# run any given test by running make test.check +# if the test fails, run it again at at least debug level 2 +%.check: % + @$(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=20 \ + $* || \ + $(TESTS_ENVIRONMENT) \ + GST_DEBUG=$$GST_DEBUG,*:2 \ + CK_DEFAULT_TIMEOUT=20 \ + $* + +# run any given test in a loop +%.torture: % + @for i in `seq 1 $(LOOPS)`; do \ + $(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=20 \ + $*; done + +# run any given test in an infinite loop +%.forever: % + @while true; do \ + $(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=20 \ + $* || break; done + +# valgrind any given test by running make test.valgrind +%.valgrind: % + @$(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=360 \ + G_SLICE=always-malloc \ + $(LIBTOOL) --mode=execute \ + $(VALGRIND_PATH) -q \ + $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=20 \ + ./$* 2>&1 | tee valgrind.log + @if grep "==" valgrind.log > /dev/null 2>&1; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +# valgrind any given test and generate suppressions for it +%.valgrind.gen-suppressions: % + @$(TESTS_ENVIRONMENT) \ + CK_DEFAULT_TIMEOUT=360 \ + G_SLICE=always-malloc \ + $(LIBTOOL) --mode=execute \ + $(VALGRIND_PATH) -q \ + $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=20 \ + --gen-suppressions=all \ + ./$* 2>&1 | tee suppressions.log + +# valgrind any given test until failure by running make test.valgrind-forever +%.valgrind-forever: % + @while $(MAKE) $*.valgrind; do \ + true; done + +# gdb any given test by running make test.gdb +%.gdb: % + @$(TESTS_ENVIRONMENT) \ + CK_FORK=no \ + $(LIBTOOL) --mode=execute \ + gdb $* + +# torture tests +torture: $(TESTS) + -rm test-registry.xml + @echo "Torturing tests ..." + @for i in `seq 1 $(LOOPS)`; do \ + $(MAKE) check || \ + (echo "Failure after $$i runs"; exit 1) || \ + exit 1; \ + done + @banner="All $(LOOPS) loops passed"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo $$dashes; echo $$banner; echo $$dashes + +# forever tests +forever: $(TESTS) + -rm test-registry.xml + @echo "Forever tests ..." + @while true; do \ + $(MAKE) check || \ + (echo "Failure"; exit 1) || \ + exit 1; \ + done + +# valgrind all tests +valgrind: $(TESTS) + @echo "Valgrinding tests ..." + @failed=0; \ + for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do \ + $(MAKE) $$t.valgrind; \ + if test "$$?" -ne 0; then \ + echo "Valgrind error for test $$t"; \ + failed=`expr $$failed + 1`; \ + whicht="$$whicht $$t"; \ + fi; \ + done; \ + if test "$$failed" -ne 0; then \ + echo "$$failed tests had leaks or errors under valgrind:"; \ + echo "$$whicht"; \ + false; \ + fi + +# valgrind all tests and generate suppressions +valgrind.gen-suppressions: $(TESTS) + @echo "Valgrinding tests ..." + @failed=0; \ + for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do \ + $(MAKE) $$t.valgrind.gen-suppressions; \ + if test "$$?" -ne 0; then \ + echo "Valgrind error for test $$t"; \ + failed=`expr $$failed + 1`; \ + whicht="$$whicht $$t"; \ + fi; \ + done; \ + if test "$$failed" -ne 0; then \ + echo "$$failed tests had leaks or errors under valgrind:"; \ + echo "$$whicht"; \ + false; \ + fi + +# inspect every plugin feature +GST_INSPECT = $(GST_TOOLS_DIR)/gst-inspect-$(GST_MAJORMINOR) +inspect: + @echo "Inspecting features ..." + @for e in `$(TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 \ + | cut -d: -f2`; \ + do echo Inspecting $$e; \ + $(GST_INSPECT) $$e > /dev/null 2>&1; done + +help: + @echo + @echo "make check -- run all checks" + @echo "make torture -- run all checks $(LOOPS) times" + @echo "make (dir)/(test).check -- run the given check once" + @echo "make (dir)/(test).forever -- run the given check forever" + @echo "make (dir)/(test).torture -- run the given check $(LOOPS) times" + @echo + @echo "make (dir)/(test).gdb -- start up gdb for the given test" + @echo + @echo "make valgrind -- valgrind all tests" + @echo "make valgrind.gen-suppressions -- generate suppressions for all tests" + @echo " and save to suppressions.log" + @echo "make (dir)/(test).valgrind -- valgrind the given test" + @echo "make (dir)/(test).valgrind-forever -- valgrind the given test forever" + @echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions" + @echo " and save to suppressions.log" + @echo "make inspect -- inspect all plugin features" + @echo + @echo + @echo "Additionally, you can use the GST_CHECKS environment variable to" + @echo "specify which test(s) should be run. This is useful if you are" + @echo "debugging a failure in one particular test, or want to reproduce" + @echo "a race condition in a single test." + @echo + @echo "Examples:" + @echo + @echo " GST_CHECKS=test_this,test_that make element/foobar.check" + @echo " GST_CHECKS=test_many_threads make element/foobar.forever" + @echo + diff --git a/common/coverage/coverage-report-entry.pl b/common/coverage/coverage-report-entry.pl new file mode 100644 index 0000000..51c506c --- /dev/null +++ b/common/coverage/coverage-report-entry.pl @@ -0,0 +1,69 @@ +#!/usr/bin/perl +# +# Copyright (C) 2006 Daniel Berrange +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +print < + +Coverage report for $ARGV[0] + + + +

Coverage report for $ARGV[0]

+ +
+EOF
+
+
+while (<>) {
+    s/&/&/g;
+    s//>/g;
+
+    if (/^\s*function (\S+) called (\d+) returned \d+% blocks executed \d+%/) {
+	my $class = $2 > 0 ? "perfect" : "terrible";
+	$_ = "$_";
+    } elsif (/^\s*branch\s+\d+\s+taken\s+(\d+)%\s+.*$/) {
+	my $class = $1 > 0 ? "perfect" : "terrible";
+	$_ = "$_";
+    } elsif (/^\s*branch\s+\d+\s+never executed.*$/) {
+	my $class = "terrible";
+	$_ = "$_";
+    } elsif (/^\s*call\s+\d+\s+never executed.*$/) {
+	my $class = "terrible";
+	$_ = "$_";
+    } elsif (/^\s*call\s+\d+\s+returned\s+(\d+)%.*$/) {
+	my $class = $1 > 0 ? "perfect" : "terrible";
+	$_ = "$_";
+    }
+
+    print;
+}
+
+print <
+
+
+EOF
diff --git a/common/coverage/coverage-report.pl b/common/coverage/coverage-report.pl
new file mode 100644
index 0000000..ed30f8d
--- /dev/null
+++ b/common/coverage/coverage-report.pl
@@ -0,0 +1,125 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2006 Daniel Berrange
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+use warnings;
+use strict;
+
+my %coverage = ( functions => {}, files => {} );
+
+my %filemap;
+
+my $type;
+my $name;
+
+my @functions;
+
+while (<>) {
+    if (/^Function '(.*)'\s*$/) {
+	$type = "function";
+	$name = $1;
+	$coverage{$type}->{$name} = {};
+	push @functions, $name;
+    } elsif (/^File '(.*?)'\s*$/) {
+	$type = "file";
+	$name = $1;
+	$coverage{$type}->{$name} = {};
+
+	foreach my $func (@functions) {
+	    $coverage{"function"}->{$func}->{file} = $name;
+	}
+	@functions = ();
+    } elsif (/^Lines executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{lines} = $2;
+	$coverage{$type}->{$name}->{linesCoverage} = $1;
+    } elsif (/^Branches executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{branches} = $2;
+	$coverage{$type}->{$name}->{branchesCoverage} = $1;
+    } elsif (/^Taken at least once:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{conds} = $2;
+	$coverage{$type}->{$name}->{condsCoverage} = $1;
+    } elsif (/^Calls executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{calls} = $2;
+	$coverage{$type}->{$name}->{callsCoverage} = $1;
+    } elsif (/^No branches$/) {
+	$coverage{$type}->{$name}->{branches} = 0;
+	$coverage{$type}->{$name}->{branchesCoverage} = "100.00";
+	$coverage{$type}->{$name}->{conds} = 0;
+	$coverage{$type}->{$name}->{condsCoverage} = "100.00";
+    } elsif (/^No calls$/) {
+	$coverage{$type}->{$name}->{calls} = 0;
+	$coverage{$type}->{$name}->{callsCoverage} = "100.00";
+    } elsif (/^\s*(.*):creating '(.*)'\s*$/) {
+	$filemap{$1} = $2;
+    } elsif (/^\s*$/) {
+	# nada
+    } else {
+	warn "Shit [$_]\n";
+    }
+}
+
+my %summary;
+foreach my $type ("function", "file") {
+    $summary{$type} = {};
+    foreach my $m ("lines", "branches", "conds", "calls") {
+	my $totalGot = 0;
+	my $totalMiss = 0;
+	my $count = 0;
+	foreach my $func (keys %{$coverage{function}}) {
+	    $count++;
+	    my $got = $coverage{function}->{$func}->{$m};
+	    $totalGot += $got;
+	    my $miss = $got * $coverage{function}->{$func}->{$m ."Coverage"} / 100;
+	    $totalMiss += $miss;
+	}
+	$summary{$type}->{$m} = sprintf("%d", $totalGot);
+	$summary{$type}->{$m . "Coverage"} = sprintf("%.2f", $totalMiss / $totalGot * 100);
+    }
+}
+
+
+
+print "\n";
+
+foreach my $type ("function", "file") {
+    printf "<%ss>\n", $type;
+    foreach my $name (sort { $a cmp $b } keys %{$coverage{$type}}) {
+	my $rec = $coverage{$type}->{$name};
+	printf "  \n", $name, ($type eq "file" ? $filemap{$name} : $filemap{$rec->{file}});
+	printf "    \n", $rec->{lines}, $rec->{linesCoverage};
+	if (exists $rec->{branches}) {
+	    printf "    \n", $rec->{branches}, $rec->{branchesCoverage};
+	}
+	if (exists $rec->{conds}) {
+	    printf "    \n", $rec->{conds}, $rec->{condsCoverage};
+	}
+	if (exists $rec->{calls}) {
+	    printf "    \n", $rec->{calls}, $rec->{callsCoverage};
+	}
+	print  "  \n";
+    }
+
+    printf "  \n";
+    printf "    \n", $summary{$type}->{lines}, $summary{$type}->{linesCoverage};
+    printf "    \n", $summary{$type}->{branches}, $summary{$type}->{branchesCoverage};
+    printf "    \n", $summary{$type}->{conds}, $summary{$type}->{condsCoverage};
+    printf "    \n", $summary{$type}->{calls}, $summary{$type}->{callsCoverage};
+    printf  "  \n";
+    printf "\n", $type;
+}
+
+print "\n";
diff --git a/common/coverage/coverage-report.xsl b/common/coverage/coverage-report.xsl
new file mode 100644
index 0000000..b19ebb6
--- /dev/null
+++ b/common/coverage/coverage-report.xsl
@@ -0,0 +1,235 @@
+
+
+
+
+  
+
+  
+    
+      
+        Coverage report
+        
+      
+      
+        

Coverage report

+ + + +
+ + +

Function coverage

+ + + +
+ + + +

File coverage

+ + + +
+ + + + + + + + + + + + + + + + + + + + + odd + + + even + + + + + + + + + + + + + + odd + + + even + + + + + + +
NameLinesBranchesConditionsCalls
+
+ + + + + + + + + + + + + + Summary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + perfect + + + excellant + + + good + + + poor + + + bad + + + terrible + + + + + % of + + +
diff --git a/common/coverage/lcov.mak b/common/coverage/lcov.mak new file mode 100644 index 0000000..fc1f6b2 --- /dev/null +++ b/common/coverage/lcov.mak @@ -0,0 +1,43 @@ +## .PHONY so it always rebuilds it +.PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload + +# run lcov from scratch, always +lcov-reset: + $(MAKE) lcov-run + $(MAKE) lcov-report + +# run lcov from scratch if the dir is not there +lcov: + $(MAKE) lcov-reset + +if GST_GCOV_ENABLED +# reset run coverage tests +lcov-run: + @-rm -rf lcov + lcov --directory . --zerocounters + -if test -d tests/check; then $(MAKE) -C tests/check inspect; fi + -$(MAKE) check + +# generate report based on current coverage data +lcov-report: + mkdir lcov + lcov --compat-libtool --directory . --capture --output-file lcov/lcov.info + lcov --list-full-path -l lcov/lcov.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d\| -f1 > lcov/remove + lcov --list-full-path -l lcov/lcov.info | grep "tests/check/" | cut -d\| -f1 >> lcov/remove + lcov --list-full-path -l lcov/lcov.info | grep "docs/plugins/" | cut -d\| -f1 >> lcov/remove + lcov -r lcov/lcov.info `cat lcov/remove` > lcov/lcov.cleaned.info + rm lcov/remove + mv lcov/lcov.cleaned.info lcov/lcov.info + genhtml -t "$(PACKAGE_STRING)" -o lcov --num-spaces 2 lcov/lcov.info + +lcov-upload: lcov + rsync -rvz -e ssh --delete lcov/* gstreamer.freedesktop.org:/srv/gstreamer.freedesktop.org/www/data/coverage/lcov/$(PACKAGE) + +else +lcov-run: + echo "Need to reconfigure with --enable-gcov" + +lcov-report: + echo "Need to reconfigure with --enable-gcov" +endif + diff --git a/common/cruft.mak b/common/cruft.mak new file mode 100644 index 0000000..53eec24 --- /dev/null +++ b/common/cruft.mak @@ -0,0 +1,56 @@ +# checks for left-over files in the (usually uninstalled) tree, ie. for +# stuff that best be deleted to avoid problems like having old plugin binaries +# lying around. +# +# set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this + +check-cruft: + @cruft_files=""; cruft_dirs=""; \ + for f in $(CRUFT_FILES); do \ + if test -e $$f; then \ + cruft_files="$$cruft_files $$f"; \ + fi \ + done; \ + for d in $(CRUFT_DIRS); do \ + if test -e $$d; then \ + cruft_dirs="$$cruft_dirs $$d"; \ + fi \ + done; \ + if test "x$$cruft_files$$cruft_dirs" != x; then \ + echo; \ + echo "**** CRUFT ALERT *****"; \ + echo; \ + echo "The following files and directories may not be needed any "; \ + echo "longer (usually because a plugin has been merged into "; \ + echo "another plugin, moved to a different module, or been "; \ + echo "renamed), and you probably want to clean them up if you "; \ + echo "don't have local changes: "; \ + echo; \ + for f in $$cruft_files; do echo "file $$f"; done; \ + echo; \ + for d in $$cruft_dirs; do echo "directory $$d"; done; \ + echo; \ + echo "'make clean-cruft' will remove these for you."; \ + echo; \ + fi + +clean-cruft-dirs: + @for d in $(CRUFT_DIRS); do \ + if test -e $$d; then \ + rm -r "$$d" && echo "Removed directory $$d"; \ + fi \ + done + +clean-cruft-files: + @for f in $(CRUFT_FILES); do \ + if test -e $$f; then \ + rm "$$f" && echo "Removed file $$f"; \ + fi \ + done + +clean-cruft: clean-cruft-dirs clean-cruft-files + +# also might want to add this to your Makefile.am: +# +# all-local: check-cruft + diff --git a/common/download-translations b/common/download-translations new file mode 100755 index 0000000..aef1d31 --- /dev/null +++ b/common/download-translations @@ -0,0 +1,152 @@ +#!/bin/sh +# Shell script to download the latest translations for a given GStreamer +# package from translationproject.org + + +# DOMAINS based on http://translationproject.org/extra/matrix.html +# We need to check all domains, not only po/LINGUAS, since there might be +# new translations +DOMAINS=\ +"af am ar az be bg pt_BR bs ca zh_CN cs cy da de el eo es et eu fa fi fr "\ +"ga en_GB gl gu he hi zh_HK hr hu id is it ja ko ku ky lg lt lv mk mn ms "\ +"mt nb ne nl nn or pa pl pt rm ro ru rw sk sl sq sr sv ta tq th tk "\ +"tr zh_TW uk ven vi wa xh zu" + +# for testing/debugging: +#DOMAINS="es fr hu sv pl xx" + +# check for 'diff' program +diff --version 2>/dev/null >/dev/null +if [ ! $? ]; then + echo "==== You must have the 'diff' program installed for this script ====" + exit 1 +fi + +# check for 'wget' program +wget --version 2>/dev/null >/dev/null +if [ ! $? ]; then + echo "==== You must have the 'wget' program installed for this script ====" + exit 1 +fi + +# make sure we're in the top-level directory +if [ ! -d ./po ]; then + echo "==== No ./po directory in the current working directory ====" + exit 1 +fi + +# make sure a package argument was passed to us +if [ -z "$1" ]; then + echo "Usage: $0 PACKAGE, e.g. $0 gst-plugins-good" + exit 1 +fi + +if test "$1" != "gstreamer" -a \ + "$1" != "gst-plugins-base" -a \ + "$1" != "gst-plugins-good" -a \ + "$1" != "gst-plugins-ugly" -a \ + "$1" != "gst-plugins-bad"; then + echo "Unexpected package '$1' ?!" + exit 1 +fi + +PACKAGE="$1" + +DOMAINS_TO_ADD="" +DOMAINS_UPDATED="" +DOMAINS_NOT_IN_LINGUAS="" + +echo "Downloading latest translation files for package $PACKAGE ..." +echo + +for d in $DOMAINS +do + PACKAGE_PO_URL_BASE="http://translationproject.org/latest/$PACKAGE" + PO_URL="$PACKAGE_PO_URL_BASE/$d.po" + PO_FILENAME="$PACKAGE.$d.po" + if wget -q -nc -O $PO_FILENAME $PO_URL; then + # we want all .po files in UTF-8 format really, so convert if needed.. + CHARSET=`grep Content-Type $PO_FILENAME | sed -e 's/.*charset=\(.*\)\\\\n.*/\1/'` + if test "x$CHARSET" != "xUTF-8" -a "x$CHARSET" != "xutf-8"; then + # note: things like the bugs address will be added back by make update-po + if msguniq $PO_FILENAME --no-location \ + --output-file=$PO_FILENAME.utf8 \ + --to-code=UTF-8; then + mv $PO_FILENAME.utf8 $PO_FILENAME + else + echo "**** $d: conversion from $CHARSET to UTF-8 failed ****" + fi + fi + if [ -f "po/$d.po" ]; then + # ./po/foo.po exists, so let's check if ours matches the latest from the + # translation project website + REVDATE_NEW=`grep PO-Revision-Date $PO_FILENAME`; + REVDATE_OLD=`grep PO-Revision-Date po/$d.po`; + CHARSET_OLD=`grep Content-Type po/$d.po | sed -e 's/.*charset=\(.*\)\\\\n.*/\1/'` + if test "x$REVDATE_NEW" = "x$REVDATE_OLD" -a "x$CHARSET_OLD" = "xUTF-8"; then + # note: source code line markers will be removed later by make upload-po + echo "$d.po: up-to-date" + rm -f $PO_FILENAME + else + mv $PO_FILENAME "po/$d.po" + if test "x$CHARSET_OLD" != "xUTF-8" -a "x$CHARSET_OLD" != "xutf-8"; then + echo "$d.po: update (and charset converted from $CHARSET_OLD to UTF-8)" + else + echo "$d.po: updated" + fi + DOMAINS_UPDATED="$DOMAINS_UPDATED $d" + fi + # make sure domain is listed in LINGUAS + if ! grep $d "po/LINGUAS" >/dev/null 2>/dev/null; then + DOMAINS_NOT_IN_LINGUAS="$DOMAINS_NOT_IN_LINGUAS $d" + fi + else + # ./po/foo.po doesn't exist, but foo.po exists on the translation project + # website, so it's probably a new translation + echo "$d.po: new language" + mv $PO_FILENAME "po/$d.po" + DOMAINS_UPDATED="$DOMAINS_UPDATED $d" + DOMAINS_TO_ADD="$DOMAINS_TO_ADD $d" + fi + else + rm -f $PO_FILENAME + echo "$d.po: failure (does probably not exist)" + fi +done + +if [ -n "$DOMAINS_UPDATED" ]; then + echo "====================================================================" + echo + echo "Language domains updated :$DOMAINS_UPDATED" + echo "Language domains to git add :$DOMAINS_TO_ADD" + echo + echo "Source: http://translationproject.org/latest/$PACKAGE/" + echo + if [ -n "$DOMAINS_TO_ADD" ]; then + CMD_STRING="git add" + for d in $DOMAINS_TO_ADD; do + CMD_STRING="$CMD_STRING po/$d.po" + done + echo "Please run" + echo + echo " $CMD_STRING" + echo + echo "now and add the following domains to the po/LINGUAS file:" + echo + echo " $DOMAINS_TO_ADD" + echo + echo + fi + echo "====================================================================" +fi + +if [ -n "$DOMAINS_NOT_IN_LINGUAS" ]; then + echo + echo "Existing domains missing from the po/LINGUAS file:" + echo + echo " $DOMAINS_NOT_IN_LINGUAS" + echo + echo +fi + + diff --git a/common/extract-release-date-from-doap-file b/common/extract-release-date-from-doap-file new file mode 100755 index 0000000..f2bc418 --- /dev/null +++ b/common/extract-release-date-from-doap-file @@ -0,0 +1,32 @@ +#!/bin/sh +# Shell script to extract the date given a release version and a .doap file + +if test "x$1" = "x" -o "x$2" = "x" -o ! -s "$2"; then + echo "Usage: $0 RELEASE-VERSION-NUMBER DOAP-FILE" >&2; + exit 1 +fi + +if ! grep '/dev/null ; then + echo "$2 does not look lika a .doap file" >&2; + exit 1 +fi + +if ! grep "$1" "$2" >/dev/null ; then + echo "$2 contains no reference to a version $1" >&2; + exit 1 +fi + +awk 'BEGIN {x=0} +{ +if ($0~"") {x=1; chunk=""} +if (x==1) { + if ($0~"") { chunk = chunk $0 } + if ($0~"") { chunk = chunk $0 } +} +if ($0~"") {x=0; print chunk} +}' < "$2" | \ +\ +grep ''"$1"'' | \ +\ +sed -e 's/^.*//' -e 's/<\/created>.*$//' + diff --git a/common/gettext.patch b/common/gettext.patch new file mode 100644 index 0000000..682b905 --- /dev/null +++ b/common/gettext.patch @@ -0,0 +1,12 @@ +--- po/Makefile.in.in.orig 2006-01-07 12:03:45.000000000 +0100 ++++ po/Makefile.in.in 2006-01-07 12:04:23.000000000 +0100 +@@ -11,6 +11,9 @@ + PACKAGE = @PACKAGE@ + VERSION = @VERSION@ + ++# thomas: add GETTEXT_PACKAGE substitution as used in Makevars ++GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ ++ + SHELL = /bin/sh + @SET_MAKE@ + diff --git a/common/glib-gen.mak b/common/glib-gen.mak new file mode 100644 index 0000000..ef93a5f --- /dev/null +++ b/common/glib-gen.mak @@ -0,0 +1,44 @@ +# these are the variables your Makefile.am should set +# the example is based on the colorbalance interface + +#glib_enum_headers=$(colorbalance_headers) +#glib_enum_define=GST_COLOR_BALANCE +#glib_enum_prefix=gst_color_balance + +enum_headers=$(foreach h,$(glib_enum_headers),\n\#include \"$(h)\") + +# these are all the rules generating the relevant files +%-marshal.h: %-marshal.list + $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_enum_prefix)_marshal $^ > $*-marshal.h.tmp && \ + mv $*-marshal.h.tmp $*-marshal.h + +%-marshal.c: %-marshal.list + $(AM_V_GEN)echo "#include \"$*-marshal.h\"" >> $*-marshal.c.tmp && \ + glib-genmarshal --body --prefix=$(glib_enum_prefix)_marshal $^ >> $*-marshal.c.tmp && \ + mv $*-marshal.c.tmp $*-marshal.c + +%-enumtypes.h: $(glib_enum_headers) + $(AM_V_GEN)glib-mkenums \ + --fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include \n\nG_BEGIN_DECLS\n" \ + --fprod "\n/* enumerations from \"@filename@\" */\n" \ + --vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ + --ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \ + $^ > $@ + +%-enumtypes.c: $(glib_enum_headers) + @if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi + $(AM_V_GEN)glib-mkenums \ + --fhead "#include \"$*-enumtypes.h\"\n$(enum_headers)" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n };\n GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n }\n return g_define_type_id__volatile;\n}\n" \ + $^ > $@ + +# a hack rule to make sure .Plo files exist because they get include'd +# from Makefile's +.deps/%-marshal.Plo: + @touch $@ + +.deps/%-enumtypes.Plo: + @touch $@ diff --git a/common/gst-autogen.sh b/common/gst-autogen.sh new file mode 100644 index 0000000..f05e021 --- /dev/null +++ b/common/gst-autogen.sh @@ -0,0 +1,376 @@ +# a silly hack that generates autoregen.sh but it's handy +# Remove the old autoregen.sh first to create a new file, +# as the current one may be being read by the shell executing +# this script. +if [ -f "autoregen.sh" ]; then + rm autoregen.sh +fi +echo "#!/bin/sh" > autoregen.sh +echo "./autogen.sh $@ \$@" >> autoregen.sh +chmod +x autoregen.sh + +# helper functions for autogen.sh + +debug () +# print out a debug message if DEBUG is a defined variable +{ + if test ! -z "$DEBUG" + then + echo "DEBUG: $1" + fi +} + +version_get () +# based on the command's version output, set variables +# _MAJOR, _MINOR, _MICRO, _VERSION, using the given prefix as variable prefix +# +# arg 1: command binary name +# arg 2: (uppercased) variable name prefix +{ + COMMAND=$1 + VARPREFIX=`echo $2 | tr .,- _` + + # strip everything that's not a digit, then use cut to get the first field + pkg_version=`$COMMAND --version|head -n 1|sed 's/^.*)[^0-9]*//'|cut -d' ' -f1` + debug "pkg_version $pkg_version" + # remove any non-digit characters from the version numbers to permit numeric + # comparison + pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g` + pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g` + pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g` + test -z "$pkg_major" && pkg_major=0 + test -z "$pkg_minor" && pkg_minor=0 + test -z "$pkg_micro" && pkg_micro=0 + debug "found major $pkg_major minor $pkg_minor micro $pkg_micro" + eval ${VARPREFIX}_MAJOR=$pkg_major + eval ${VARPREFIX}_MINOR=$pkg_minor + eval ${VARPREFIX}_MICRO=$pkg_micro + eval ${VARPREFIX}_VERSION=$pkg_version +} + +version_compare () +# Checks whether the version of VARPREFIX is equal to or +# newer than the requested version +# arg1: VARPREFIX +# arg2: MAJOR +# arg3: MINOR +# arg4: MICRO +{ + VARPREFIX=`echo $1 | tr .,- _` + MAJOR=$2 + MINOR=$3 + MICRO=$4 + + eval pkg_major=\$${VARPREFIX}_MAJOR; + eval pkg_minor=\$${VARPREFIX}_MINOR; + eval pkg_micro=\$${VARPREFIX}_MICRO; + + #start checking the version + debug "version_compare: $VARPREFIX against $MAJOR.$MINOR.$MICRO" + + # reset check + WRONG= + + if [ ! "$pkg_major" -gt "$MAJOR" ]; then + debug "major: $pkg_major <= $MAJOR" + if [ "$pkg_major" -lt "$MAJOR" ]; then + debug "major: $pkg_major < $MAJOR" + WRONG=1 + elif [ ! "$pkg_minor" -gt "$MINOR" ]; then + debug "minor: $pkg_minor <= $MINOR" + if [ "$pkg_minor" -lt "$MINOR" ]; then + debug "minor: $pkg_minor < $MINOR" + WRONG=1 + elif [ "$pkg_micro" -lt "$MICRO" ]; then + debug "micro: $pkg_micro < $MICRO" + WRONG=1 + fi + fi + fi + if test ! -z "$WRONG"; then + debug "version_compare: $VARPREFIX older than $MAJOR.$MINOR.$MICRO" + return 1 + fi + debug "version_compare: $VARPREFIX equal to/newer than $MAJOR.$MINOR.$MICRO" + return 0 +} + + +version_check () +# check the version of a package +# first argument : package name (executable) +# second argument : optional path where to look for it instead +# third argument : source download url +# rest of arguments : major, minor, micro version +# all consecutive ones : suggestions for binaries to use +# (if not specified in second argument) +{ + PACKAGE=$1 + PKG_PATH=$2 + URL=$3 + MAJOR=$4 + MINOR=$5 + MICRO=$6 + + # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null + if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi + debug "major $MAJOR minor $MINOR micro $MICRO" + VERSION=$MAJOR + if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi + if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi + + debug "major $MAJOR minor $MINOR micro $MICRO" + + for SUGGESTION in $PKG_PATH; do + COMMAND="$SUGGESTION" + + # don't check if asked not to + test -z "$NOCHECK" && { + printf " checking for $COMMAND >= $VERSION ... " + } || { + # we set a var with the same name as the package, but stripped of + # unwanted chars + VAR=`echo $PACKAGE | sed 's/-//g'` + debug "setting $VAR" + eval $VAR="$COMMAND" + return 0 + } + + which $COMMAND > /dev/null 2>&1 + if test $? -eq 1; + then + debug "$COMMAND not found" + continue + fi + + VARPREFIX=`echo $COMMAND | sed 's/-//g' | tr [:lower:] [:upper:]` + version_get $COMMAND $VARPREFIX + + version_compare $VARPREFIX $MAJOR $MINOR $MICRO + if test $? -ne 0; then + echo "found $pkg_version, not ok !" + continue + else + echo "found $pkg_version, ok." + # we set a var with the same name as the package, but stripped of + # unwanted chars + VAR=`echo $PACKAGE | sed 's/-//g'` + debug "setting $VAR" + eval $VAR="$COMMAND" + return 0 + fi + done + + echo "$PACKAGE not found !" + echo "You must have $PACKAGE installed to compile $package." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at $URL" + return 1; +} + +aclocal_check () +{ + # normally aclocal is part of automake + # so we expect it to be in the same place as automake + # so if a different automake is supplied, we need to adapt as well + # so how's about replacing automake with aclocal in the set var, + # and saving that in $aclocal ? + # note, this will fail if the actual automake isn't called automake* + # or if part of the path before it contains it + if [ -z "$automake" ]; then + echo "Error: no automake variable set !" + return 1 + else + aclocal=`echo $automake | sed s/automake/aclocal/` + debug "aclocal: $aclocal" + if [ "$aclocal" != "aclocal" ]; + then + CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal" + fi + if [ ! -x `which $aclocal` ]; then + echo "Error: cannot execute $aclocal !" + return 1 + fi + fi +} + +autoheader_check () +{ + # same here - autoheader is part of autoconf + # use the same voodoo + if [ -z "$autoconf" ]; then + echo "Error: no autoconf variable set !" + return 1 + else + autoheader=`echo $autoconf | sed s/autoconf/autoheader/` + debug "autoheader: $autoheader" + if [ "$autoheader" != "autoheader" ]; + then + CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader" + fi + if [ ! -x `which $autoheader` ]; then + echo "Error: cannot execute $autoheader !" + return 1 + fi + fi + +} + +autoconf_2_52d_check () +{ + # autoconf 2.52d has a weird issue involving a yes:no error + # so don't allow it's use + test -z "$NOCHECK" && { + ac_version=`$autoconf --version|head -n 1|sed 's/^[a-zA-Z\.\ ()]*//;s/ .*$//'` + if test "$ac_version" = "2.52d"; then + echo "autoconf 2.52d has an issue with our current build." + echo "We don't know who's to blame however. So until we do, get a" + echo "regular version. RPM's of a working version are on the gstreamer site." + exit 1 + fi + } + return 0 +} +libtool_2_2_gettext_check () +{ + # libtool 2.2 needs autopoint 0.17 or higher + version_compare LIBTOOLIZE 2 2 0 + if test $? -eq 0 + then + version_compare AUTOPOINT 0 17 0 + if test $? -ne 0 + then + echo "libtool 2.2 requires autopoint 0.17 or higher" + return 1 + fi + fi + return 0 +} + + +die_check () +{ + # call with $DIE + # if set to 1, we need to print something helpful then die + DIE=$1 + if test "x$DIE" = "x1"; + then + echo + echo "- Please get the right tools before proceeding." + echo "- Alternatively, if you're sure we're wrong, run with --nocheck." + exit 1 + fi +} + +autogen_options () +{ + if test "x$1" = "x"; then + return 0 + fi + + while test "x$1" != "x" ; do + optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + case "$1" in + --noconfigure) + NOCONFIGURE=defined + AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --noconfigure" + echo "+ configure run disabled" + shift + ;; + --nocheck) + AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --nocheck" + NOCHECK=defined + echo "+ autotools version check disabled" + shift + ;; + -d|--debug) + DEBUG=defined + AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --debug" + echo "+ debug output enabled" + shift + ;; + -h|--help) + echo "autogen.sh (autogen options) -- (configure options)" + echo "autogen.sh help options: " + echo " --noconfigure don't run the configure script" + echo " --nocheck don't do version checks" + echo " --debug debug the autogen process" + echo + echo " --with-autoconf PATH use autoconf in PATH" + echo " --with-automake PATH use automake in PATH" + echo + echo "Any argument either not in the above list or after a '--' will be " + echo "passed to ./configure." + exit 1 + ;; + --with-automake=*) + AUTOMAKE=$optarg + echo "+ using alternate automake in $optarg" + CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-automake=$AUTOMAKE" + shift + ;; + --with-autoconf=*) + AUTOCONF=$optarg + echo "+ using alternate autoconf in $optarg" + CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoconf=$AUTOCONF" + shift + ;; + --) shift ; break ;; + *) + echo "+ passing argument $1 to configure" + CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $1" + shift + ;; + esac + done + + for arg do CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $arg"; done + if test ! -z "$CONFIGURE_EXT_OPT" + then + echo "+ options passed to configure: $CONFIGURE_EXT_OPT" + fi +} + +toplevel_check () +{ + srcfile=$1 + test -f $srcfile || { + echo "You must run this script in the top-level $package directory" + exit 1 + } +} + +tool_run () +{ + tool=$1 + options=$2 + run_if_fail=$3 + echo "+ running $tool $options..." + $tool $options || { + echo + echo $tool failed + eval $run_if_fail + exit 1 + } +} + +install_git_hooks () +{ + if test -d .git; then + # install pre-commit hook for doing clean commits + for hook in pre-commit; do + if test ! \( -x .git/hooks/$hook -a -L .git/hooks/$hook \); then + echo "+ Installing git $hook hook" + rm -f .git/hooks/$hook + ln -s ../../common/hooks/$hook.hook .git/hooks/$hook || { + # if we couldn't create a symbolic link, try doing a plain cp + if cp common/hooks/pre-commit.hook .git/hooks/pre-commit; then + chmod +x .git/hooks/pre-commit; + else + echo "********** Couldn't install git $hook hook **********"; + fi + } + fi + done + fi +} diff --git a/common/gst-indent b/common/gst-indent new file mode 100755 index 0000000..732b2ba --- /dev/null +++ b/common/gst-indent @@ -0,0 +1,49 @@ +#!/bin/sh +# +# Check that the code follows a consistant code style +# + +# Check for existence of indent, and error out if not present. +# On some *bsd systems the binary seems to be called gnunindent, +# so check for that first. + +version=`gnuindent --version 2>/dev/null` +if test "x$version" = "x"; then + version=`indent --version 2>/dev/null` + if test "x$version" = "x"; then + echo "GStreamer git pre-commit hook:" + echo "Did not find GNU indent, please install it before continuing." + exit 1 + fi + INDENT=indent +else + INDENT=gnuindent +fi + +case `$INDENT --version` in + GNU*) + ;; + default) + echo "GStreamer git pre-commit hook:" + echo "Did not find GNU indent, please install it before continuing." + echo "(Found $INDENT, but it doesn't seem to be GNU indent)" + exit 1 + ;; +esac + +INDENT_PARAMETERS="--braces-on-if-line \ + --case-brace-indentation0 \ + --case-indentation2 \ + --braces-after-struct-decl-line \ + --line-length80 \ + --no-tabs \ + --cuddle-else \ + --dont-line-up-parentheses \ + --continuation-indentation4 \ + --honour-newlines \ + --tab-size8 \ + --indent-level2 \ + --leave-preprocessor-space" + +$INDENT ${INDENT_PARAMETERS} $@ + diff --git a/common/gst.supp b/common/gst.supp new file mode 100644 index 0000000..c10005f --- /dev/null +++ b/common/gst.supp @@ -0,0 +1,3963 @@ +### this file contains suppressions for valgrind when running +### the gstreamer unit tests +### it might be useful for wider use as well + +### syscall suppressions + +{ + + Memcheck:Param + clone(parent_tidptr) + fun:clone + fun:clone +} + +{ + + Memcheck:Param + clone(child_tidptr) + fun:clone + fun:clone +} + +{ + + Memcheck:Param + clone(tlsinfo) + fun:clone + fun:clone +} + +### glibc suppressions + +{ + + Memcheck:Cond + obj:/lib/ld-2.*.so + fun:dl_open_worker + obj:/lib/ld-2.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.*.so + fun:_dlerror_run + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_file +} + +{ + + Memcheck:Cond + fun:strlen + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start + obj:/lib64/ld-2.*.so + obj:* + obj:* +} + +{ + + Memcheck:Cond + fun:_dl_relocate_object + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start +} + +{ + + Memcheck:Cond + fun:* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +# glibc does not deallocate thread-local storage + +{ + + Memcheck:Leak + fun:calloc + fun:_dl_allocate_tls + fun:pthread_create@@* +} + +# I get an extra stack entry on x86/dapper +{ + + Memcheck:Leak + fun:calloc + obj:/lib/ld-2.3.*.so + fun:_dl_allocate_tls + fun:pthread_create@@* +} + + +{ + + Memcheck:Cond + fun:strstr + fun:__pthread_initialize_minimal + obj:/lib/libpthread-*.so + obj:/lib/libpthread-*.so + fun:call_init + fun:_dl_init + obj:/lib/ld-*.so +} + +# a thread-related free problem in glibc from Edgard +{ + __libc_freeres_rw_acess + Memcheck:Addr4 + obj:* + obj:* + obj:* + obj:* + obj:* + fun:__libc_freeres +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so +} + +# g_module_open-related problems +{ + + Memcheck:Addr2 + fun:memcpy + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path_level + fun:init_post + fun:g_option_context_parse + fun:gst_init_check + fun:gst_init + fun:gst_check_init + fun:main +} + +{ + + Memcheck:Addr4 + fun:memcpy + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path_level + fun:init_post + fun:g_option_context_parse + fun:gst_init_check + fun:gst_init + fun:gst_check_init + fun:main +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:do_sym + fun:_dl_sym + fun:dlsym_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlsym + fun:g_module_symbol + fun:g_module_open + fun:gst_plugin_load_file +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file +} +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_plugin_load_by_name + fun:gst_plugin_feature_load +} + +{ + + Memcheck:Leak + fun:malloc + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_plugin_load_by_name +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:dl_open_worker + obj:/lib/ld-2.3.*.so + fun:_dl_open + fun:dlopen_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:do_sym + fun:_dl_sym + fun:dlsym_doit + obj:/lib/ld-2.3.*.so + fun:_dlerror_run + fun:dlsym + fun:g_module_symbol + fun:g_module_open +} + +{ + + Memcheck:Param + futex(uaddr2) + fun:pthread_once + obj:/lib/libc-2.3.*.so + obj:/lib/libc-2.3.*.so + fun:mbsnrtowcs + fun:vfprintf + fun:vsprintf + fun:sprintf + obj:/lib/libc-2.3.*.so + fun:tmpfile + fun:setup_pipe + fun:setup_messaging_with_key + fun:setup_messaging +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + fun:_dl_sym + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlsym + fun:g_module_symbol + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + fun:iconv_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + obj:/lib/i686/cmov/libc-2.7.so + fun:iconv_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + fun:iconv_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libc-2.7.so + fun:iconv_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/i686/cmov/libdl-2.7.so + fun:dlopen +} + +# suppression for a glibc bug: +# http://valgrind.org/docs/manual/faq.html#faq.exit_errors> +{ + + Memcheck:Free + fun:free + obj:*libc-*.so + fun:__libc_freeres + fun:* + fun:_Exit +} + +# same as above, just so it works for tpm on gutsy/x86-64 +{ + + Memcheck:Free + fun:free + fun:free_mem + fun:__libc_freeres +} + +# valgrind doesn't allow me to specify a suppression for Addr1, Addr2, Addr4 +# as Addr*, so 3 copies for that; and then 2 of each for that pesky memcpy +{ + + Memcheck:Addr1 + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr2 + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} +{ + + Memcheck:Addr4 + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr1 + fun:memcpy + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr2 + fun:memcpy + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} +{ + + Memcheck:Addr4 + fun:memcpy + fun:_dl_signal_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/libc-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:_dl_open + obj:/lib/libdl-2.3.*.so + obj:/lib/ld-2.3.*.so +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.*.so + obj:/lib/libc-2.3.*.so + obj:/lib/ld-2.3.*.so + fun:_dl_open + obj:/lib/libdl-2.3.*.so + obj:/lib/ld-2.3.*.so + obj:/lib/libdl-2.3.*.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_file + fun:gst_plugin_load_by_name + fun:gst_plugin_feature_load +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libc-2.3.6.so + obj:/lib/ld-2.3.6.so + fun:_dl_open + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libc-2.3.6.so + obj:/lib/ld-2.3.6.so + fun:_dl_open + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + fun:dlopen +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libc-2.3.6.so + obj:/lib/ld-2.3.6.so + fun:_dl_open + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/tls/i686/cmov/libdl-2.3.6.so + fun:dlopen +} + +### glib suppressions +{ + + Memcheck:Cond + fun:g_parse_debug_string + obj:/usr/lib*/libglib-2.0.so.* + fun:g_slice_alloc + fun:g_slice_alloc0 +} + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_init* + fun:init_pre +} + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_register_fundamental +} + +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:type_node_any_new_W +} + +{ + + Memcheck:Leak + fun:realloc + fun:g_realloc + fun:type_node_any_new_W +} + +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:g_type_class_ref +} + +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:type_add_flags_W +} + +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:type_add_flags_W +} + +#pthread memleaks + +{ + Thread creation leak + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate* + fun:_dl_allocate* + fun:__pthread_initialize_minimal +} + +{ + Thread management leak + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate* + fun:_dl_allocate* + fun:__pthread_* +} + +{ + Thread management leak 2 + Memcheck:Leak + fun:memalign + fun:_dl_allocate* + fun:_dl_allocate* + fun:__pthread_* +} + +{ + pthread_create Syscall param write(buf) points to uninitialised byte(s) + Memcheck:Param + write(buf) + fun:pthread_create@@GLIBC_2.2.5 + fun:g_thread_create* + +} + +# nss_parse_* memleak (used by g_option_context_parse) +{ + nss_parse_* memleak + Memcheck:Leak + fun:malloc + fun:nss_parse_service_list + fun:__nss_database_lookup +} + +# liboil suppressions +{ + + Memcheck:Value8 + obj:/usr/lib/liboil-0.3.so.0.1.0 + obj:/usr/lib/liboil-0.3.so.0.1.0 + obj:/usr/lib/liboil-0.3.so.0.1.0 + fun:oil_cpu_fault_check_try + fun:oil_test_check_impl + fun:oil_class_optimize + fun:oil_optimize_all + fun:oil_init +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.3.6.so +} + +{ + + Memcheck:Param + futex(uaddr2) + fun:pthread_once + obj:/lib/libc-2.3.6.so + obj:/lib/libc-2.3.6.so + fun:setlocale + fun:init_pre + fun:g_option_context_parse + fun:gst_init_check + fun:gst_init + fun:gst_check_init + fun:main +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.3.6.so + obj:/lib/ld-2.3.6.so + fun:_dl_open + obj:/lib/libdl-2.3.6.so + obj:/lib/ld-2.3.6.so + obj:/lib/libdl-2.3.6.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_file +} +# this exists in a bunch of different variations, hence the short tail/trace +{ + + Memcheck:Addr4 + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so +} +{ + + Memcheck:Addr8 + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so +} + +# More edgy suppressions (Mike) +{ + + Memcheck:Cond + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + fun:dlopen_doit + obj:/lib/ld-2.4.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + fun:dlopen_doit + obj:/lib/ld-2.4.so + fun:_dlerror_run + fun:dlopen@@GLIBC_2.1 +} + +{ + + Memcheck:Cond + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + fun:do_sym + fun:_dl_sym +} + +# This one's overly general, but there's zero other information in the stack +# trace - just these five lines! +{ + + Memcheck:Cond + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so + obj:/lib/ld-2.4.so +} + +{ + + Memcheck:Leak + fun:calloc + obj:/lib/ld-2.4.so + fun:_dl_allocate_tls + fun:pthread_create@@GLIBC_2.1 +} + +# TLS leaks for feisty/x86 +{ + + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls + fun:pthread_create@@GLIBC_2.1 +} + +{ + + Memcheck:Leak + fun:calloc + obj:/usr/lib/libcdio.so.6.0.1 + fun:cdio_open_am_linux + obj:/usr/lib/libcdio.so.6.0.1 + fun:cdio_open_am +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.5.so +} + +{ + + Memcheck:Cond + fun:snd_pcm_direct_shm_create_or_connect + fun:snd_pcm_dsnoop_open + fun:_snd_pcm_dsnoop_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_plug_open + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_asym_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 +} + +{ + + Memcheck:Cond + fun:snd*_pcm_hw_param_set_near +} + +{ + + Memcheck:Cond + ... + fun:snd*_pcm_hw_param_set_near +} + +{ + + Memcheck:Cond + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_close + obj:/*lib/libasound.so.2.0.0 +} +{ + + Memcheck:Cond + fun:snd_pcm_direct_shm_create_or_connect + fun:snd_pcm_dmix_open + fun:_snd_pcm_dmix_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_softvol_open + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_plug_open + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_asym_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 +} +{ + + Memcheck:Leak + fun:malloc + fun:strdup + fun:snd_dlobj_cache_add + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:snd_pcm_dsnoop_open + fun:_snd_pcm_dsnoop_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_plug_open + obj:/*lib/libasound.so.2.0.0 + fun:snd_pcm_open_slave + fun:_snd_pcm_asym_open + obj:/*lib/libasound.so.2.0.0 + obj:/*lib/libasound.so.2.0.0 +} +# Catch about 15 variations on inserting info into an ALSA +# internal cache +{ + + Memcheck:Leak + fun:malloc + ... + fun:snd*_dlobj_cache_add + obj:/*lib*/libasound.so.2.0.0 +} + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:snd_pcm_open_conf +} + +{ + + Memcheck:Leak + fun:*alloc + obj:/*lib*/libasound.so.2.0.0 + ... + fun:snd_config_hook_load +} + +{ + + Memcheck:Leak + fun:*alloc + obj:/*lib*/libasound.so.2.0.0 + ... + fun:snd_config_update_r + fun:snd_config_update +} +{ + + Memcheck:Leak + fun:*alloc + fun:strdup + ... + fun:snd_config_update_r + fun:snd_config_update +} +{ + + Memcheck:Leak + fun:malloc + obj:/lib/libc*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getgrnam_r + fun:getgrnam + fun:snd_pcm_direct_parse_open_conf +} + +{ + + Memcheck:Leak + fun:calloc + fun:_XCBInitDisplayLock + fun:XOpenDisplay +} + +# GConf internal initialisations related to getting the default client. +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + obj:/usr/lib/libORBit-2.so.* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so.* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so.* + obj:/usr/lib/libgconf-2.so.* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + obj:* + fun:PortableServer_POA_servant_to_reference + fun:* + fun:* + fun:* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + obj:/usr/lib/libORBit-2.so.* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so.* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so.* + obj:/usr/lib/libgconf-2.so.* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:ORBit_demarshal_value + fun:* + fun:ORBit_small_invoke_stub + fun:ConfigServer_get_default_database + fun:* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:* + fun:IOP_generate_profiles + fun:ORBit_marshal_object + fun:ORBit_marshal_value + fun:* + fun:ORBit_small_invoke_stub + fun:ConfigServer_add_client + fun:* + fun:* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_by_tc + fun:* + fun:PortableServer_POA_servant_to_reference + fun:* + fun:* + fun:* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_by_tc + obj:/usr/lib/libORBit-2.so.* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so.* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so.* + obj:/usr/lib/libgconf-2.so.* + fun:gconf_engine_get_default +} + +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:* + fun:* + fun:gconf_activate_server +} + +# Some libORBit/bonobo initialisation stuff +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:ORBit_alloc_string + fun:CORBA_string_dup + fun:Bonobo_ActivationEnvValue_set + fun:bonobo_activation_init_activation_env + fun:bonobo_activation_orb_init + fun:bonobo_activation_init +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:PortableServer_POA_servant_to_reference + obj:/usr/lib/libbonobo-2.so* +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + fun:ORBit_small_allocbuf + fun:ORBit_adaptor_setup + obj:/usr/lib/libORBit-2.so* + fun:ORBit_POA_setup_root + fun:ORBit_init_internals + fun:CORBA_ORB_init +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc_tcval + fun:ORBit_adaptor_setup + fun:* + fun:ORBit_POA_setup_root + fun:ORBit_init_internals + fun:CORBA_ORB_init +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_allocbuf + fun:bonobo_activation_init_activation_env + fun:bonobo_activation_orb_init + fun:bonobo_activation_init +} + +# More GConf stuff from the FC5 buildbot, mostly variations on the +# above stack traces +{ + + Memcheck:Param + writev(vector[...]) + fun:writev + obj:/usr/lib/libORBit-2.so* + fun:link_connection_writev + fun:giop_send_buffer_write + obj:/usr/lib/libORBit-2.so* + fun:ORBit_small_invoke_stub + fun:ORBit_small_invoke_stub_n + fun:ORBit_c_stub_invoke + fun:ConfigServer_ping + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:PortableServer_POA_servant_to_reference + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc + obj:/usr/lib/libORBit-2.so* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:CORBA_ORB_string_to_object + obj:/usr/lib/libgconf-2.so* + fun:gconf_get_current_lock_holder + fun:gconf_activate_server + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:ORBit_demarshal_IOR + fun:ORBit_demarshal_object + fun:ORBit_demarshal_value + obj:/usr/lib/libORBit-2.so* + fun:ORBit_small_invoke_stub + fun:ORBit_small_invoke_stub_n + fun:ORBit_c_stub_invoke + fun:ConfigServer_get_default_database + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:ORBit_alloc* + fun:ORBit_small_alloc* + obj:/usr/lib/libORBit-2.so* + fun:ORBit_OAObject_object_to_objkey + fun:IOP_generate_profiles + fun:ORBit_marshal_object + fun:ORBit_marshal_value + obj:/usr/lib/libORBit-2.so* + fun:ORBit_small_invoke_stub + fun:ORBit_small_invoke_stub_n + fun:ORBit_c_stub_invoke + fun:ConfigServer_add_client + obj:/usr/lib/libgconf-2.so* + obj:/usr/lib/libgconf-2.so* + fun:gconf_engine_get_default +} +{ + + Memcheck:Leak + fun:malloc + obj:*libc-*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwnam_r + obj:/usr/lib*/libglib-2.0.so.* + fun:g_get_home_dir +} +{ + + Memcheck:Leak + fun:malloc + obj:*libc-*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwnam_r + obj:/usr/lib*/libglib-2.0.so.* + fun:g_get_user_name +} +{ + + Memcheck:Leak + fun:malloc + obj:*libc-*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwnam_r + obj:/usr/lib*/libglib-2.0.so.* + fun:g_get_tmp_dir +} + +{ + + Memcheck:Leak + fun:malloc + obj:*libc-*.so + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwnam_r + obj:/usr/lib*/libglib-2.0.so.0.* + fun:g_get_host_name +} + + +## Some Fontconfig errors. +{ + + Memcheck:Leak + fun:malloc + fun:FcPatternObjectInsertElt + fun:FcPatternObjectAddWithBinding + fun:FcPatternAppend + fun:FcEndElement + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + fun:XML_ParseBuffer + fun:FcConfigParseAndLoad + fun:FcConfigParseAndLoad + fun:FcParseInclude + fun:FcEndElement + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + obj:/usr/lib/libexpat.so.* + fun:XML_ParseBuffer + fun:FcConfigParseAndLoad +} +{ + + Memcheck:Leak + fun:*alloc + ... + fun:FcInitLoadConfig +} + +# Issues with ubuntu Hardy, same crack as for previous ubuntus +{ + + Memcheck:Leak + fun:calloc + obj:* + fun:_dl_allocate_tls + fun:pthread_create@@* + obj:/usr/lib/libgthread* + fun:g_thread_* +} + +# I've made this version generic, so that it covers future modifications +# of library names +{ + + Memcheck:Leak + fun:calloc + obj:* + fun:_dl_allocate_tls + fun:pthread_create@@* + fun:g_thread_* +} + +# series of invalid read of size 4 in g_module_open for ubuntu +# hardy x86/32bit +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load_* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlopen + fun:g_module_open + fun:gst_plugin_load* +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + fun:_dl_sym + obj:/lib/tls/i686/cmov/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libdl-2.7.so + fun:dlsym + fun:g_module_symbol + fun:g_module_open + fun:gst_plugin_load_* +} + +# series of invalid read of size 8 in g_module_open for ubuntu +# hardy x86/64bit +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlopen + fun:g_module_open +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/libdl-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libdl-2.7.so + fun:dlsym + fun:g_module_symbol + fun:g_module_open +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/tls/i686/cmov/libc-2.7.so + fun:__nss_passwd_lookup + fun:getpwnam_r +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/tls/i686/cmov/libc-2.7.so + fun:__nss_passwd_lookup + fun:getpwnam_r +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/tls/i686/cmov/libnss_compat-2.7.so + fun:_nss_compat_getpwnam_r + fun:getpwnam_r +} + +{ + + Memcheck:Addr4 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/tls/i686/cmov/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/tls/i686/cmov/libnss_compat-2.7.so + fun:_nss_compat_getpwnam_r + fun:getpwnam_r +} + +{ + + Memcheck:Addr8 + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/ld-2.7.so + obj:/lib/libc-2.7.so + obj:/lib/ld-2.7.so + fun:__libc_dlopen_mode + fun:__nss_lookup_function + obj:/lib/libc-2.7.so + fun:getpwnam_r +} + +## Leaks in ALSA (variations of leak from snd_config_load1) + +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:snd_config_load1 +} +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:snd_config_load1 +} +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} +{ + + Memcheck:Leak + fun:calloc + fun:_snd_config_make + fun:_snd_config_make_add + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:malloc + fun:snd1_dlobj_cache_add + fun:snd_ctl_open_noupdate +} + +{ + + Memcheck:Leak + fun:malloc + fun:* + fun:snd1_dlobj_cache_add + fun:snd_ctl_open_noupdate +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:snd_config_load1 +} + + +# The following are leaks of caps that need to be created dynamically +# in the type registration of the plugin (used for pad templates). + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_new_simple + fun:* + fun:g_type_class_ref + fun:gst_element_register +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:* + fun:* + fun:g_type_class_ref + fun:gst_element_register + fun:gst_ogm_parse_plugin_init + fun:plugin_init +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_video_test_src_base_init + fun:g_type_class_ref + fun:gst_element_register +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_video_test_src_getcaps + fun:gst_video_test_src_base_init + fun:g_type_class_ref + fun:gst_element_register +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_ffmpegcsp_codectype_to_caps + fun:gst_ffmpegcolorspace_register + fun:plugin_init +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_ffmpegcolorspace_register + fun:plugin_init +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_new_any + fun:gst_ffmpegdemux_register + fun:plugin_init +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:realloc + fun:g_realloc + fun:g_ptr_array_maybe_expand + fun:g_ptr_array_add + fun:gst_caps_append + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:g_ptr_array_maybe_expand + fun:g_ptr_array_add + fun:gst_caps_append + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:g_ptr_array_maybe_expand + fun:g_ptr_array_add + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_ptr_array_sized_new + fun:gst_caps_new_empty + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:g_array_maybe_expand + fun:g_array_sized_new + fun:* + fun:* + fun:* + fun:gst_value_init_and_copy + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:g_array_maybe_expand + fun:g_array_sized_new + fun:* + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_array_sized_new + fun:* + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_audio_filter_class_add_pad_templates +} + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_riff_create_*_template_caps +} +{ + + Memcheck:Leak + fun:malloc + fun:realloc + fun:g_realloc + fun:* + fun:* + fun:* + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_caps_append + fun:gst_riff_create_*_template_caps +} +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_array_sized_new + fun:* + fun:gst_structure_copy + fun:gst_caps_copy + fun:gst_caps_append + fun:gst_riff_create_*_template_caps +} + +## Leaks in pango (bilboed: gentoo unstable amd64) + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:pango_layout_get_pixel_extents +} +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:pango_language_from_string + fun:pango_language_get_default + fun:pango_context_init + fun:g_type_create_instance + fun:g_object_constructor + fun:g_object_newv + fun:g_object_new_valist + fun:g_object_new + fun:pango_font_map_create_context +} + +{ + + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:pango_language_from_string +} + + +## Leak of property_list in gstffmpegcfg.c +## This list is created in gst_ffmpegcsp_init(), called from +## gst_ffmpegenc_register. +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_datalist_id_set_data_full + fun:gst_ffmpeg_cfg_init + fun:gst_ffmpegenc_register + fun:plugin_init +} +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:g_datalist_id_set_data_full + fun:g_param_spec_set_qdata_full + fun:gst_ffmpeg_cfg_init + fun:gst_ffmpegenc_register + fun:plugin_init +} + + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:gst_ffmpeg_cfg_init + fun:gst_ffmpegenc_register +} + +## Leak of GIO module through gnomevfs + +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:* + fun:* + fun:g_type_create_instance + fun:* + fun:* + fun:* + fun:* + fun:g_io_module_new + fun:g_io_modules_load_all_in_directory + fun:* + fun:get_default_vfs +} + +## Conditional jump in getaddrinfo (bilboed, gentoo ~amd64, Dec 13 2008) +{ + + Memcheck:Cond + fun:gaih_inet + fun:getaddrinfo +} + +## Dynamic pad templates in mxfmux +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_slice_alloc + fun:gst_caps_new_empty + fun:gst_caps_from_string + fun:mxf_*_init + fun:plugin_init +} + +## We don't know if ffmpeg frees this or not and better pass a copy for safety +{ + + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_strdup + fun:gst_ffmpeg_cfg_fill_context + fun:gst_ffmpegenc_setcaps + fun:gst_pad_set_caps +} + +## Leak/overreads with glibc-2.10 + +{ + + Memcheck:Value8 + fun:do_sym + fun:dlsym_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlsym +} +{ + + Memcheck:Cond + fun:do_sym + fun:dlsym_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlsym +} + +{ + + Memcheck:Value8 + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + fun:_dl_relocate_object + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + fun:_dl_check_map_versions + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:_dl_relocate_object + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:_dl_check_map_versions + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:_dl_map_object* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + fun:_dl_map_object* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + fun:_dl_check_caller + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Cond + fun:_dl_check_caller + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen* +} + +{ + + Memcheck:Value8 + obj:/lib*/libc-2.10.*.so + obj:/lib*/libc-2.10.*.so + fun:_vgnU_freeres +} +{ + + Memcheck:Cond + obj:/lib*/libc-2.10.*.so + obj:/lib*/libc-2.10.*.so + fun:_vgnU_freeres +} +{ + + Memcheck:Free + fun:free + obj:/lib*/libc-2.10.*.so + obj:/lib*/libc-2.10.*.so + fun:_vgnU_freeres +} + +{ + + Memcheck:Value8 + fun:_dl_fini + fun:__run_exit_handlers + fun:exit +} + +{ + + Memcheck:Cond + fun:_dl_fini + fun:__run_exit_handlers + fun:exit +} +{ + + Memcheck:Value8 + fun:_dl_sort_fini + fun:_dl_fini + fun:__run_exit_handlers + fun:exit +} + +{ + + Memcheck:Cond + fun:_dl_sort_fini + fun:_dl_fini + fun:__run_exit_handlers + fun:exit +} + +# glibc-2.10 dl overreads +{ + + Memcheck:Value8 + fun:_dl_fixup + fun:_dl_runtime_resolve +} +{ + + Memcheck:Cond + fun:_dl_fixup + fun:_dl_runtime_resolve +} + +{ + + Memcheck:Value8 + fun:_dl_lookup_symbol_x + fun:_dl_fixup + fun:_dl_runtime_resolve +} +{ + + Memcheck:Cond + fun:_dl_lookup_symbol_x + fun:_dl_fixup + fun:_dl_runtime_resolve +} +{ + + Memcheck:Value8 + fun:call_init + fun:_dl_init +} +{ + + Memcheck:Value8 + fun:_dl_init +} +{ + + Memcheck:Value8 + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} +{ + + Memcheck:Cond + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_relocate_object + fun:dl_main +} +{ + + Memcheck:Value8 + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start +} +{ + + Memcheck:Cond + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start +} + +{ + + Memcheck:Cond + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_check_map_versions + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_check_map_versions + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_check_map_versions + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} +{ + + Memcheck:Cond + fun:* + fun:_dl_check_map_versions + fun:_dl_check_all_versions + fun:version_check_doit + fun:_dl_receive_error + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:init_tls + fun:dl_main +} +{ + + Memcheck:Cond + fun:init_tls + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_map_object_deps + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_protect_relro + fun:_dl_relocate_object + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_setup_hash + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:* + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:* + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Cond + fun:* + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:open_path + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Cond + fun:* + fun:open_path + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_name_match_p + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:* + fun:* + fun:_dl_map_object +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_name_match_p + fun:_dl_check_map_versions + fun:_dl_check_all_versions +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} + +{ + + Memcheck:Cond + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} + +{ + + Memcheck:Value8 + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} + +{ + + Memcheck:Value8 + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} +{ + + Memcheck:Cond + fun:* + fun:do_lookup_x + fun:_dl_lookup_symbol_x +} + +{ + + Memcheck:Value8 + fun:_dl_name_match_p + fun:_dl_map_object + fun:dl_open_worker +} +{ + + Memcheck:Cond + fun:_dl_name_match_p + fun:_dl_map_object + fun:dl_open_worker +} + +{ + + Memcheck:Value8 + fun:* + fun:_dl_name_match_p + fun:_dl_map_object + fun:dl_open_worker +} +{ + + Memcheck:Cond + fun:* + fun:_dl_name_match_p + fun:_dl_map_object + fun:dl_open_worker +} + +{ + + Memcheck:Value8 + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object +} +{ + + Memcheck:Cond + fun:_dl_lookup_symbol_x + fun:_dl_relocate_object +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:_dl_check_map_versions +} +{ + + Memcheck:Value8 + fun:* + fun:_dl_check_map_versions +} +{ + + Memcheck:Cond + fun:* + fun:* + fun:_dl_check_map_versions +} +{ + + Memcheck:Cond + fun:* + fun:_dl_check_map_versions +} +{ + + Memcheck:Value8 + fun:openaux +} +{ + + Memcheck:Value8 + fun:_dl_name_match_p + fun:_dl_map_object +} + +{ + + Memcheck:Cond + fun:_dl_close_worker + fun:_dl_close + fun:_dl_catch_error + fun:dlerror_run +} +{ + + Memcheck:Value8 + fun:_dl_close_worker + fun:_dl_close + fun:_dl_catch_error + fun:dlerror_run +} +{ + + Memcheck:Cond + fun:* + fun:_dl_close_worker + fun:_dl_close + fun:_dl_catch_error + fun:dlerror_run +} +{ + + Memcheck:Value8 + fun:* + fun:_dl_close_worker + fun:_dl_close + fun:_dl_catch_error + fun:dlerror_run +} + +{ + + Memcheck:Cond + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main +} +{ + + Memcheck:Value8 + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main +} +{ + + Memcheck:Cond + fun:* + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:fillin_rpath + fun:_dl_init_paths + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_map_object + fun:map_doit + fun:_dl_catch_error + fun:do_preload + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_map_object + fun:map_doit + fun:_dl_catch_error + fun:do_preload + fun:dl_main +} +{ + + Memcheck:Param + open(filename) + fun:open + fun:open_verify + fun:_dl_map_object + fun:map_doit + fun:_dl_catch_error + fun:do_preload + fun:dl_main +} + +{ + + Memcheck:Param + stat(file_name) + fun:_xstat + fun:open_path + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_open_worker +} + +{ + + Memcheck:Cond + fun:* + fun:_dl_map_object_deps + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:_dl_map_object_deps + fun:dl_main +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:_dl_map_object_deps + fun:dl_main +} + +# glibc-2.10 tls issues +{ + + Memcheck:Cond + fun:* + fun:init_tls + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:init_tls + fun:dl_main +} +{ + + Memcheck:Cond + fun:* + fun:* + fun:init_tls + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:* + fun:init_tls + fun:dl_main +} + +{ + + Memcheck:Cond + fun:_dl_allocate_tls_init + fun:dl_main +} +{ + + Memcheck:Value8 + fun:_dl_allocate_tls_init + fun:dl_main +} +{ + + Memcheck:Cond + fun:* + fun:_dl_allocate_tls_init + fun:dl_main +} +{ + + Memcheck:Value8 + fun:* + fun:_dl_allocate_tls_init + fun:dl_main +} + +{ + + Memcheck:Cond + fun:__tls* + obj:* + obj:* + fun:_vgnU_freeres +} + +{ + + Memcheck:Param + arch_prctl(arg2) + fun:init_tls +} +# GLib caching tmp/home directories (glibc-2.10 variants) +{ + + Memcheck:Cond + fun:* + fun:dl_open_worker + fun:* + fun:* + fun:* + fun:_dl_catch_error + fun:dlerror_run + fun:* + fun:__nss_lookup_function + fun:__nss_lookup + fun:getpwnam* +} +{ + + Memcheck:Value8 + fun:* + fun:dl_open_worker + fun:* + fun:* + fun:* + fun:_dl_catch_error + fun:dlerror_run + fun:* + fun:__nss_lookup_function + fun:__nss_lookup + fun:getpwnam* +} +{ + + Memcheck:Cond + fun:dl_open_worker + fun:* + fun:* + fun:do_dlopen + fun:* + fun:dlerror_run + fun:* + fun:__nss_lookup_function + fun:__nss_lookup + fun:getpwnam* +} +{ + + Memcheck:Value8 + fun:dl_open_worker + fun:* + fun:* + fun:do_dlopen + fun:* + fun:dlerror_run + fun:* + fun:__nss_lookup_function + fun:__nss_lookup + fun:getpwnam* +} + +{ + + Memcheck:Value8 + fun:_dl_add_to_slotinfo + fun:dl_main +} +{ + + Memcheck:Param + open(filename) + fun:open + fun:open_verify + fun:open_path + fun:_dl_map_object +} + + + +# GModule issues with glibc-2.10 +{ + + Memcheck:Value8 + fun:* + fun:* + fun:dlsym + fun:g_module_symbol +} +{ + + Memcheck:Value8 + fun:g_module_* + fun:gst_plugin* +} +{ + + Memcheck:Value8 + fun:* + fun:g_module_* + fun:gst_plugin* +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:dlopen* + fun:g_module_open +} +{ + + Memcheck:Value8 + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:dlsym + fun:g_module_symbol +} + +{ + + Memcheck:Value8 + fun:* + fun:* + fun:* + fun:* + fun:* + fun:dlopen* + fun:g_module_open +} + +# Leak in GSlice +{ + + Memcheck:Value8 + fun:g_parse_debug_string + fun:slice_config_init + fun:g_slice_init_nomessage + fun:_g_slice_thread_init_nomessage + fun:g_thread_init_glib +} + +# 2.10 pthread issues +{ + + Memcheck:Value8 + fun:__pthread_initialize_minimal +} + +# glibc 2.11 conditional +{ + + Memcheck:Cond + fun:_dl_relocate_object + fun:dl_main + fun:_dl_sysdep_start + fun:_dl_start + obj:/lib64/ld-2.11.so +} + +# glibc 2.11 Leak + +{ + + Memcheck:Leak + fun:*alloc + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:_dl_* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:_dl_* + fun:_dl_* + fun:_dl_* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:_dl_* + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:_dl_map_object + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object + fun:openaux + fun:_dl_catch_error + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:_dl_* + fun:_dl_* + fun:_dl_* + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run + fun:dlopen@@GLIBC_2.2.5 +} + +# glib type leaks +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_register_static +} + +# new registry system +# all of this will only be created once when loading registry. + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:_priv_gst_registry_chunks_load_plugin +} + +# system-wide tags +# these tags are registered once + +{ + + Memcheck:Leak + fun:*alloc + fun:* + fun:* + fun:gst_tag_register + fun:_gst_tag_initialize +} + +# system-wide type classes that we keep referenced + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_class_ref +} + +# leaking cached queries which are only initialized once +{ + + Memcheck:Leak + fun:*alloc + ... + fun:_gst_query_initialize + fun:init_post +} + +# macosx (leopard) library loader leak +{ + + Memcheck:Leak + fun:_Znwm + fun:_ZNSs4_Rep9_S_createEmmRKSaIcE + fun:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag + fun:_ZNSsC2EPKcRKSaIcE + fun:_Z41__static_initialization_and_destruction_0ii + fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE +} + +# GObject type registration +{ + + Memcheck:Leak + fun:*alloc + ... + fun:_g_atomic_array_copy +} + +{ + + Memcheck:Leak + fun:*alloc + fun:getdelim + obj:*libselinux* +} + +{ + + Memcheck:Leak + fun:*alloc + ... + obj:*/sed +} + +{ + + Memcheck:Addr8 + ... + obj:*/sed +} + +# GLib 2.23 interface vtable +{ + + Memcheck:Leak + fun:*alloc + ... + fun:g_type_add_interface_static +} + +{ + + Memcheck:Leak + fun:*alloc + obj:*/dash +} + +# libtool/gentoo fake leak +# it actually runs bash and valgrind complains +{ + + Memcheck:Leak + fun:*alloc + obj:/bin/bash +} + +{ + + Memcheck:Leak + fun:*alloc + ... + fun:_gst_plugin_loader_client_run + fun:main +} + +{ + + Memcheck:Cond + fun:*strcasecmp* + ... + fun:__dcigettext +} + +{ + + Memcheck:Value8 + fun:*strcasecmp* + ... + fun:__dcigettext +} + +{ + + Memcheck:Leak + fun:malloc + ... + fun:gst_poll_new + fun:gst_poll_new_timer + fun:gst_system_clock_init +} + diff --git a/common/gstdoc-scangobj b/common/gstdoc-scangobj new file mode 100755 index 0000000..5b13352 --- /dev/null +++ b/common/gstdoc-scangobj @@ -0,0 +1,1598 @@ +#!/usr/bin/env perl +# -*- cperl -*- +# +# gtk-doc - GTK DocBook documentation generator. +# Copyright (C) 1998 Damon Chaplin +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# + +# +# This gets information about object hierarchies and signals +# by compiling a small C program. CFLAGS and LDFLAGS must be +# set appropriately before running this script. +# + +use Getopt::Long; + +my $GTK_DOC_PREFIX=`pkg-config --variable prefix gtk-doc`; +if ($GTK_DOC_PREFIX) { + chomp $GTK_DOC_PREFIX; + #print "Adding $GTK_DOC_PREFIX/share/gtk-doc/data to \@INC\n"; + unshift @INC, "$GTK_DOC_PREFIX/share/gtk-doc/data"; +} else { + unshift @INC, '/usr/share/gtk-doc/data'; +} +require "gtkdoc-common.pl"; + +# Options + +# name of documentation module +my $MODULE; +my $OUTPUT_DIR; +my $INSPECT_DIR; +my $VERBOSE; +my $PRINT_VERSION; +my $PRINT_HELP; +my $TYPE_INIT_FUNC="g_type_init ()"; + +# --nogtkinit is deprecated, as it is the default now anyway. +%optctl = (module => \$MODULE, + source => \$SOURCE, + types => \$TYPES_FILE, + nogtkinit => \$NO_GTK_INIT, + 'type-init-func' => \$TYPE_INIT_FUNC, + 'output-dir' => \$OUTPUT_DIR, + 'inspect-dir' => \$INSPECT_DIR, + 'verbose' => \$VERBOSE, + 'version' => \$PRINT_VERSION, + 'help' => \$PRINT_HELP); + +GetOptions(\%optctl, "module=s", "source=s", "types:s", "output-dir:s", "inspect-dir:s", "nogtkinit", "type-init-func:s", "verbose", "version", "help"); + +if ($NO_GTK_INIT) { + # Do nothing. This just avoids a warning. + # the option is not used anymore +} + +if ($PRINT_VERSION) { + print "1.5\n"; + exit 0; +} + +if (!$MODULE) { + $PRINT_HELP = 1; +} + +if ($PRINT_HELP) { + print <$MODULE-scan.c") || die "Cannot open $MODULE-scan.c: $!\n"; + +my $old_signals_filename = "$OUTPUT_DIR/$MODULE.signals"; +my $new_signals_filename = "$OUTPUT_DIR/$MODULE.signals.new"; +my $old_hierarchy_filename = "$OUTPUT_DIR/$MODULE.hierarchy"; +my $new_hierarchy_filename = "$OUTPUT_DIR/$MODULE.hierarchy.new"; +my $old_interfaces_filename = "$OUTPUT_DIR/$MODULE.interfaces"; +my $new_interfaces_filename = "$OUTPUT_DIR/$MODULE.interfaces.new"; +my $old_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites"; +my $new_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites.new"; +my $old_args_filename = "$OUTPUT_DIR/$MODULE.args"; +my $new_args_filename = "$OUTPUT_DIR/$MODULE.args.new"; + +my $debug_log="g_message"; +if (!defined($VERBOSE) or $VERBOSE eq "0") { + $debug_log="//$debug_log"; +} + +# write a C program to scan the types + +$includes = ""; +@types = (); +@impl_types = (); + +for () { + if (/^#include/) { + $includes .= $_; + } elsif (/^%/) { + next; + } elsif (/^\s*$/) { + next; + } elsif (/^type:(.*)$/) { + $t = $1; + chomp $t; + push @impl_types, $t; + } else { + chomp; + push @types, $_; + } +} + +$ntypes = @types + @impl_types + 1; + +print OUTPUT < +#include +#include +#include + +$includes + +#ifdef GTK_IS_WIDGET_CLASS +#include +#endif + +static GType *object_types = NULL; + +static GString *xmlstr = NULL; + +static const gchar* +xmlprint (gint indent, const gchar *tag, const gchar *data) +{ + const gchar indent_str[] = " "; + + /* reset */ + g_string_truncate (xmlstr, 0); + g_string_append_len (xmlstr, indent_str, MIN (indent, strlen (indent_str))); + g_string_append_printf (xmlstr, "<%s>", tag); + + if (data) { + gchar *s; + + s = g_markup_escape_text (data, -1); + g_string_append (xmlstr, s); + g_free (s); + } + + g_string_append_printf (xmlstr, "\\n", tag); + return xmlstr->str; +} + +static gint +gst_feature_sort_compare (gconstpointer a, gconstpointer b) +{ + return strcmp (((GstPluginFeature *)a)->name, ((GstPluginFeature *)b)->name); +} + +static gint +static_pad_template_compare (gconstpointer a, gconstpointer b) +{ + GstStaticPadTemplate *spt_a = (GstStaticPadTemplate *) a; + GstStaticPadTemplate *spt_b = (GstStaticPadTemplate *) b; + + /* we want SINK before SRC (enum is UNKNOWN, SRC, SINK) */ + if (spt_a->direction != spt_b->direction) + return spt_b->direction - spt_a->direction; + + /* we want ALWAYS first, SOMETIMES second, REQUEST last + * (enum is ALWAYS, SOMETIMES, REQUEST) */ + if (spt_a->presence != spt_b->presence) + return spt_a->presence - spt_b->presence; + + return strcmp (spt_a->name_template, spt_b->name_template); +} + +static GType * +get_object_types (void) +{ + gpointer g_object_class; + GList *plugins = NULL; + GList *factories = NULL; + GList *l; + GstElementFactory *factory = NULL; + GType type; + gint i = 0; + gboolean reinspect; + + /* get a list of features from plugins in our source module */ + plugins = gst_registry_get_plugin_list (gst_registry_get_default()); + + xmlstr = g_string_new (""); + + reinspect = !g_file_test ("scanobj-build.stamp", G_FILE_TEST_EXISTS); + + while (plugins) { + GList *features; + GstPlugin *plugin; + const gchar *source; + FILE *inspect = NULL; + gchar *inspect_name; + + plugin = (GstPlugin *) (plugins->data); + plugins = g_list_next (plugins); + source = gst_plugin_get_source (plugin); + if (!source || strcmp (source, "$SOURCE") != 0) { + continue; + } + + /* skip static coreelements plugin with pipeline and bin element factory */ + if (gst_plugin_get_filename (plugin) == NULL) + continue; + + $debug_log ("plugin: %s source: %s", plugin->desc.name, source); + + if (reinspect) { + inspect_name = g_strdup_printf ("$INSPECT_DIR" G_DIR_SEPARATOR_S "plugin-%s.xml", + plugin->desc.name); + inspect = fopen (inspect_name, "w"); + if (inspect == NULL) { + g_error ("Could not open %s for writing: %s\\n", inspect_name, + g_strerror (errno)); + } + g_free (inspect_name); + + /* output plugin data */ + fputs ("\\n",inspect); + fputs (xmlprint(2, "name", plugin->desc.name),inspect); + fputs (xmlprint(2, "description", plugin->desc.description),inspect); + fputs (xmlprint(2, "filename", plugin->filename),inspect); + fputs (xmlprint(2, "basename", plugin->basename),inspect); + fputs (xmlprint(2, "version", plugin->desc.version),inspect); + fputs (xmlprint(2, "license", plugin->desc.license),inspect); + fputs (xmlprint(2, "source", plugin->desc.source),inspect); + fputs (xmlprint(2, "package", plugin->desc.package),inspect); + fputs (xmlprint(2, "origin", plugin->desc.origin),inspect); + fputs (" \\n", inspect); + } + + features = + gst_registry_get_feature_list_by_plugin (gst_registry_get_default (), + plugin->desc.name); + + /* sort factories by feature->name */ + features = g_list_sort (features, gst_feature_sort_compare); + + while (features) { + GstPluginFeature *feature; + feature = GST_PLUGIN_FEATURE (features->data); + feature = gst_plugin_feature_load (feature); + if (!feature) { + g_warning ("Could not load plugin feature %s", + gst_plugin_feature_get_name (feature)); + } + + if (GST_IS_ELEMENT_FACTORY (feature)) { + const gchar *pad_dir[] = { "unknown","source","sink" }; + const gchar *pad_pres[] = { "always","sometimes","request" }; + GList *pads, *pad; + + $debug_log (" feature: %s", feature->name); + + factory = GST_ELEMENT_FACTORY (feature); + factories = g_list_prepend (factories, factory); + + if (reinspect) { + /* output element data */ + fputs (" \\n", inspect); + fputs (xmlprint(6, "name", feature->name),inspect); + fputs (xmlprint(6, "longname", gst_element_factory_get_longname (factory)),inspect); + fputs (xmlprint(6, "class", gst_element_factory_get_klass (factory)),inspect); + fputs (xmlprint(6, "description", gst_element_factory_get_description (factory)),inspect); + fputs (xmlprint(6, "author", gst_element_factory_get_author (factory)),inspect); + fputs (" \\n", inspect); + + /* output pad-template data */ + pads = g_list_copy ((GList *) gst_element_factory_get_static_pad_templates (factory)); + pads = g_list_sort (pads, static_pad_template_compare); + for (pad = pads; pad != NULL; pad = pad->next) { + GstStaticPadTemplate *pt = pad->data; + + fputs (" \\n", inspect); + fputs (xmlprint(10, "name", pt->name_template),inspect); + fputs (xmlprint(10, "direction", pad_dir[pt->direction]),inspect); + fputs (xmlprint(10, "presence", pad_pres[pt->presence]),inspect); + fputs (xmlprint(10, "details", pt->static_caps.string),inspect); + fputs (" \\n", inspect); + } + g_list_free (pads); + fputs (" \\n \\n", inspect); + } + } + features = g_list_next (features); + } + + if (reinspect) { + fputs (" \\n", inspect); + fclose (inspect); + } + } + + g_string_free (xmlstr, TRUE); + + $debug_log ("number of element factories: %d", g_list_length (factories)); + + /* allocate the object_types array to hold them */ + object_types = g_new0 (GType, g_list_length (factories)+$ntypes+1); + + l = factories; + i = 0; + + /* fill it */ + while (l) { + factory = GST_ELEMENT_FACTORY (l->data); + type = gst_element_factory_get_element_type (factory); + if (type != 0) { + $debug_log ("adding type for factory %s", gst_element_factory_get_longname (factory)); + object_types[i++] = type; + } else { + g_message ("type info for factory %s not found", + gst_element_factory_get_longname (factory)); + } + l = g_list_next (l); + } + +EOT + +# get_type functions: +for (@types) { +print OUTPUT < uppercase with '_' + * GFileMonitor -> file_monitor + * GIOExtensionPoint -> extension_point + * GtkTreeView -> tree_view + * if 2nd char is upper case too + * search for first lower case and go back one char + * else + * search for next upper case + */ + if (!strncmp (object_name, "Gtk", 3)) + object_arg = object_name + 3; + else if (!strncmp (object_name, "Gnome", 5)) + object_arg = object_name + 5; + else + object_arg = object_name; + + object_arg_lower = g_ascii_strdown (object_arg, -1); + sprintf (pos, "*%s\\n", object_arg_lower); + pos += strlen (pos); + if (!strncmp (object_arg_lower, "widget", 6)) + widget_num = 2; + g_free(object_arg_lower); + + /* Convert signal name to use underscores rather than dashes '-'. */ + strncpy (signal_name, query_info.signal_name, 127); + signal_name[127] = '\\0'; + for (i = 0; signal_name[i]; i++) + { + if (signal_name[i] == '-') + signal_name[i] = '_'; + } + + /* Output the signal parameters. */ + for (param = 0; param < query_info.n_params; param++) + { + type_name = get_type_name (query_info.param_types[param] & ~G_SIGNAL_TYPE_STATIC_SCOPE, &is_pointer); + + /* Most arguments to the callback are called "arg1", "arg2", etc. + GtkWidgets are called "widget", "widget2", ... + GtkCallbacks are called "callback", "callback2", ... */ + if (!strcmp (type_name, "GtkWidget")) + { + arg_name = "widget"; + arg_num = &widget_num; + } + else if (!strcmp (type_name, "GtkCallback") + || !strcmp (type_name, "GtkCCallback")) + { + arg_name = "callback"; + arg_num = &callback_num; + } + else + { + arg_name = "arg"; + arg_num = ¶m_num; + } + sprintf (pos, "%s ", type_name); + pos += strlen (pos); + + if (!arg_num || *arg_num == 0) + sprintf (pos, "%s%s\\n", is_pointer ? "*" : " ", arg_name); + else + sprintf (pos, "%s%s%i\\n", is_pointer ? "*" : " ", arg_name, + *arg_num); + pos += strlen (pos); + + if (arg_num) + { + if (*arg_num == 0) + *arg_num = 2; + else + *arg_num += 1; + } + } + + pos = flags; + /* We use one-character flags for simplicity. */ + if (query_info.signal_flags & G_SIGNAL_RUN_FIRST) + *pos++ = 'f'; + if (query_info.signal_flags & G_SIGNAL_RUN_LAST) + *pos++ = 'l'; + if (query_info.signal_flags & G_SIGNAL_RUN_CLEANUP) + *pos++ = 'c'; + if (query_info.signal_flags & G_SIGNAL_NO_RECURSE) + *pos++ = 'r'; + if (query_info.signal_flags & G_SIGNAL_DETAILED) + *pos++ = 'd'; + if (query_info.signal_flags & G_SIGNAL_ACTION) + *pos++ = 'a'; + if (query_info.signal_flags & G_SIGNAL_NO_HOOKS) + *pos++ = 'h'; + *pos = 0; + + /* Output the return type and function name. */ + ret_type = get_type_name (query_info.return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE, &is_pointer); + + fprintf (fp, + "\\n%s::%s\\n%s%s\\n%s\\n%s\\n\\n", + object_name, query_info.signal_name, ret_type, is_pointer ? "*" : "", flags, buffer); +} + + +/* Returns the type name to use for a signal argument or return value, given + the GtkType from the signal info. It also sets is_pointer to TRUE if the + argument needs a '*' since it is a pointer. */ +static const gchar * +get_type_name (GType type, gboolean * is_pointer) +{ + const gchar *type_name; + + *is_pointer = FALSE; + type_name = g_type_name (type); + + switch (type) { + case G_TYPE_NONE: + case G_TYPE_CHAR: + case G_TYPE_UCHAR: + case G_TYPE_BOOLEAN: + case G_TYPE_INT: + case G_TYPE_UINT: + case G_TYPE_LONG: + case G_TYPE_ULONG: + case G_TYPE_FLOAT: + case G_TYPE_DOUBLE: + case G_TYPE_POINTER: + /* These all have normal C type names so they are OK. */ + return type_name; + + case G_TYPE_STRING: + /* A GtkString is really a gchar*. */ + *is_pointer = TRUE; + return "gchar"; + + case G_TYPE_ENUM: + case G_TYPE_FLAGS: + /* We use a gint for both of these. Hopefully a subtype with a decent + name will be registered and used instead, as GTK+ does itself. */ + return "gint"; + + case G_TYPE_BOXED: + /* The boxed type shouldn't be used itself, only subtypes. Though we + return 'gpointer' just in case. */ + return "gpointer"; + + case G_TYPE_PARAM: + /* A GParam is really a GParamSpec*. */ + *is_pointer = TRUE; + return "GParamSpec"; + +#if GLIB_CHECK_VERSION (2, 25, 9) + case G_TYPE_VARIANT: + *is_pointer = TRUE; + return "GVariant"; +#endif + +default: + break; + } + + /* For all GObject subclasses we can use the class name with a "*", + e.g. 'GtkWidget *'. */ + if (g_type_is_a (type, G_TYPE_OBJECT)) + *is_pointer = TRUE; + + /* Also catch non GObject root types */ + if (G_TYPE_IS_CLASSED (type)) + *is_pointer = TRUE; + + /* All boxed subtypes will be pointers as well. */ + /* Exception: GStrv */ + if (g_type_is_a (type, G_TYPE_BOXED) && + !g_type_is_a (type, G_TYPE_STRV)) + *is_pointer = TRUE; + + /* All pointer subtypes will be pointers as well. */ + if (g_type_is_a (type, G_TYPE_POINTER)) + *is_pointer = TRUE; + + /* But enums are not */ + if (g_type_is_a (type, G_TYPE_ENUM) || + g_type_is_a (type, G_TYPE_FLAGS)) + *is_pointer = FALSE; + + return type_name; +} + + +/* This outputs the hierarchy of all objects which have been initialized, + i.e. by calling their XXX_get_type() initialization function. */ +static void +output_object_hierarchy (void) +{ + FILE *fp; + gint i,j; + GType root, type; + GType root_types[$ntypes] = { G_TYPE_INVALID, }; + + fp = fopen (hierarchy_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", hierarchy_filename, g_strerror(errno)); + return; + } + output_hierarchy (fp, G_TYPE_OBJECT, 0); + output_hierarchy (fp, G_TYPE_INTERFACE, 0); + + for (i=0; object_types[i]; i++) { + root = object_types[i]; + while ((type = g_type_parent (root))) { + root = type; + } + if ((root != G_TYPE_OBJECT) && (root != G_TYPE_INTERFACE)) { + for (j=0; root_types[j]; j++) { + if (root == root_types[j]) { + root = G_TYPE_INVALID; break; + } + } + if(root) { + root_types[j] = root; + output_hierarchy (fp, root, 0); + } + } + } + + fclose (fp); +} + +static int +compare_types (const void *a, const void *b) +{ + const char *na = g_type_name (*((GType *)a)); + const char *nb = g_type_name (*((GType *)b)); + + return g_strcmp0 (na, nb); +} + + +/* This is called recursively to output the hierarchy of a object. */ +static void +output_hierarchy (FILE *fp, + GType type, + guint level) +{ + guint i; + GType *children; + guint n_children; + + if (!type) + return; + + for (i = 0; i < level; i++) + fprintf (fp, " "); + fprintf (fp, "%s\\n", g_type_name (type)); + + children = g_type_children (type, &n_children); + qsort (children, n_children, sizeof (GType), compare_types); + + + for (i=0; i < n_children; i++) + output_hierarchy (fp, children[i], level + 1); + + g_free (children); +} + +static void output_object_interfaces (void) +{ + guint i; + FILE *fp; + + fp = fopen (interfaces_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", interfaces_filename, g_strerror(errno)); + return; + } + output_interfaces (fp, G_TYPE_OBJECT); + + for (i = 0; object_types[i]; i++) + { + if (!g_type_parent (object_types[i]) && + (object_types[i] != G_TYPE_OBJECT) && + G_TYPE_IS_INSTANTIATABLE (object_types[i])) + { + output_interfaces (fp, object_types[i]); + } + } + fclose (fp); +} + +static void +output_interfaces (FILE *fp, + GType type) +{ + guint i; + GType *children, *interfaces; + guint n_children, n_interfaces; + + if (!type) + return; + + interfaces = g_type_interfaces (type, &n_interfaces); + + if (n_interfaces > 0) + { + fprintf (fp, "%s", g_type_name (type)); + for (i=0; i < n_interfaces; i++) + fprintf (fp, " %s", g_type_name (interfaces[i])); + fprintf (fp, "\\n"); + } + g_free (interfaces); + + children = g_type_children (type, &n_children); + + for (i=0; i < n_children; i++) + output_interfaces (fp, children[i]); + + g_free (children); +} + +static void output_interface_prerequisites (void) +{ + FILE *fp; + + fp = fopen (prerequisites_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", prerequisites_filename, g_strerror(errno)); + return; + } + output_prerequisites (fp, G_TYPE_INTERFACE); + fclose (fp); +} + +static void +output_prerequisites (FILE *fp, + GType type) +{ +#if GLIB_CHECK_VERSION(2,1,0) + guint i; + GType *children, *prerequisites; + guint n_children, n_prerequisites; + + if (!type) + return; + + prerequisites = g_type_interface_prerequisites (type, &n_prerequisites); + + if (n_prerequisites > 0) + { + fprintf (fp, "%s", g_type_name (type)); + for (i=0; i < n_prerequisites; i++) + fprintf (fp, " %s", g_type_name (prerequisites[i])); + fprintf (fp, "\\n"); + } + g_free (prerequisites); + + children = g_type_children (type, &n_children); + + for (i=0; i < n_children; i++) + output_prerequisites (fp, children[i]); + + g_free (children); +#endif +} + +static void +output_args (void) +{ + FILE *fp; + gint i; + + fp = fopen (args_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", args_filename, g_strerror(errno)); + return; + } + + for (i = 0; object_types[i]; i++) { + output_object_args (fp, object_types[i]); + } + + fclose (fp); +} + +static gint +compare_param_specs (const void *a, const void *b) +{ + GParamSpec *spec_a = *(GParamSpec **)a; + GParamSpec *spec_b = *(GParamSpec **)b; + + return strcmp (g_param_spec_get_name (spec_a), g_param_spec_get_name (spec_b)); +} + +/* Its common to have unsigned properties restricted + * to the signed range. Therefore we make this look + * a bit nicer by spelling out the max constants. + */ + +/* Don't use "==" with floats, it might trigger a gcc warning. */ +#define GTKDOC_COMPARE_FLOAT(x, y) (x <= y && x >= y) + +static gchar* +describe_double_constant (gdouble value) +{ + gchar *desc; + + if (GTKDOC_COMPARE_FLOAT (value, G_MAXDOUBLE)) + desc = g_strdup ("G_MAXDOUBLE"); + else if (GTKDOC_COMPARE_FLOAT (value, G_MINDOUBLE)) + desc = g_strdup ("G_MINDOUBLE"); + else if (GTKDOC_COMPARE_FLOAT (value, -G_MAXDOUBLE)) + desc = g_strdup ("-G_MAXDOUBLE"); + else if (GTKDOC_COMPARE_FLOAT (value, G_MAXFLOAT)) + desc = g_strdup ("G_MAXFLOAT"); + else if (GTKDOC_COMPARE_FLOAT (value, G_MINFLOAT)) + desc = g_strdup ("G_MINFLOAT"); + else if (GTKDOC_COMPARE_FLOAT (value, -G_MAXFLOAT)) + desc = g_strdup ("-G_MAXFLOAT"); + else{ + /* make sure floats are output with a decimal dot irrespective of + * current locale. Use formatd since we want human-readable numbers + * and do not need the exact same bit representation when deserialising */ + desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE); + g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g", value); + } + + return desc; +} + +static gchar* +describe_signed_constant (gsize size, gint64 value) +{ + gchar *desc = NULL; + + switch (size) { + case 8: + if (value == G_MAXINT64) + desc = g_strdup ("G_MAXINT64"); + else if (value == G_MININT64) + desc = g_strdup ("G_MININT64"); + /* fall through */ + case 4: + if (sizeof (int) == 4) { + if (value == G_MAXINT) + desc = g_strdup ("G_MAXINT"); + else if (value == G_MININT) + desc = g_strdup ("G_MININT"); + else if (value == (gint64)G_MAXUINT) + desc = g_strdup ("G_MAXUINT"); + } + if (value == G_MAXLONG) + desc = g_strdup ("G_MAXLONG"); + else if (value == G_MINLONG) + desc = g_strdup ("G_MINLONG"); + else if (value == (gint64)G_MAXULONG) + desc = g_strdup ("G_MAXULONG"); + /* fall through */ + case 2: + if (sizeof (int) == 2) { + if (value == G_MAXINT) + desc = g_strdup ("G_MAXINT"); + else if (value == G_MININT) + desc = g_strdup ("G_MININT"); + else if (value == (gint64)G_MAXUINT) + desc = g_strdup ("G_MAXUINT"); + } + break; + default: + break; + } + if (!desc) + desc = g_strdup_printf ("%" G_GINT64_FORMAT, value); + + return desc; +} + +static gchar* +describe_unsigned_constant (gsize size, guint64 value) +{ + gchar *desc = NULL; + + switch (size) { + case 8: + if (value == G_MAXINT64) + desc = g_strdup ("G_MAXINT64"); + else if (value == G_MAXUINT64) + desc = g_strdup ("G_MAXUINT64"); + /* fall through */ + case 4: + if (sizeof (int) == 4) { + if (value == (guint64)G_MAXINT) + desc = g_strdup ("G_MAXINT"); + else if (value == G_MAXUINT) + desc = g_strdup ("G_MAXUINT"); + } + if (value == (guint64)G_MAXLONG) + desc = g_strdup ("G_MAXLONG"); + else if (value == G_MAXULONG) + desc = g_strdup ("G_MAXULONG"); + /* fall through */ + case 2: + if (sizeof (int) == 2) { + if (value == (guint64)G_MAXINT) + desc = g_strdup ("G_MAXINT"); + else if (value == G_MAXUINT) + desc = g_strdup ("G_MAXUINT"); + } + break; + default: + break; + } + if (!desc) + desc = g_strdup_printf ("%" G_GUINT64_FORMAT, value); + + return desc; +} + +static gchar* +describe_type (GParamSpec *spec) +{ + gchar *desc; + gchar *lower; + gchar *upper; + + if (G_IS_PARAM_SPEC_CHAR (spec)) + { + GParamSpecChar *pspec = G_PARAM_SPEC_CHAR (spec); + + lower = describe_signed_constant (sizeof(gchar), pspec->minimum); + upper = describe_signed_constant (sizeof(gchar), pspec->maximum); + if (pspec->minimum == G_MININT8 && pspec->maximum == G_MAXINT8) + desc = g_strdup (""); + else if (pspec->minimum == G_MININT8) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXINT8) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_UCHAR (spec)) + { + GParamSpecUChar *pspec = G_PARAM_SPEC_UCHAR (spec); + + lower = describe_unsigned_constant (sizeof(guchar), pspec->minimum); + upper = describe_unsigned_constant (sizeof(guchar), pspec->maximum); + if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT8) + desc = g_strdup (""); + else if (pspec->minimum == 0) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXUINT8) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_INT (spec)) + { + GParamSpecInt *pspec = G_PARAM_SPEC_INT (spec); + + lower = describe_signed_constant (sizeof(gint), pspec->minimum); + upper = describe_signed_constant (sizeof(gint), pspec->maximum); + if (pspec->minimum == G_MININT && pspec->maximum == G_MAXINT) + desc = g_strdup (""); + else if (pspec->minimum == G_MININT) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXINT) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_UINT (spec)) + { + GParamSpecUInt *pspec = G_PARAM_SPEC_UINT (spec); + + lower = describe_unsigned_constant (sizeof(guint), pspec->minimum); + upper = describe_unsigned_constant (sizeof(guint), pspec->maximum); + if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT) + desc = g_strdup (""); + else if (pspec->minimum == 0) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXUINT) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_LONG (spec)) + { + GParamSpecLong *pspec = G_PARAM_SPEC_LONG (spec); + + lower = describe_signed_constant (sizeof(glong), pspec->minimum); + upper = describe_signed_constant (sizeof(glong), pspec->maximum); + if (pspec->minimum == G_MINLONG && pspec->maximum == G_MAXLONG) + desc = g_strdup (""); + else if (pspec->minimum == G_MINLONG) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXLONG) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_ULONG (spec)) + { + GParamSpecULong *pspec = G_PARAM_SPEC_ULONG (spec); + + lower = describe_unsigned_constant (sizeof(gulong), pspec->minimum); + upper = describe_unsigned_constant (sizeof(gulong), pspec->maximum); + if (pspec->minimum == 0 && pspec->maximum == G_MAXULONG) + desc = g_strdup (""); + else if (pspec->minimum == 0) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXULONG) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_INT64 (spec)) + { + GParamSpecInt64 *pspec = G_PARAM_SPEC_INT64 (spec); + + lower = describe_signed_constant (sizeof(gint64), pspec->minimum); + upper = describe_signed_constant (sizeof(gint64), pspec->maximum); + if (pspec->minimum == G_MININT64 && pspec->maximum == G_MAXINT64) + desc = g_strdup (""); + else if (pspec->minimum == G_MININT64) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXINT64) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_UINT64 (spec)) + { + GParamSpecUInt64 *pspec = G_PARAM_SPEC_UINT64 (spec); + + lower = describe_unsigned_constant (sizeof(guint64), pspec->minimum); + upper = describe_unsigned_constant (sizeof(guint64), pspec->maximum); + if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT64) + desc = g_strdup (""); + else if (pspec->minimum == 0) + desc = g_strdup_printf ("<= %s", upper); + else if (pspec->maximum == G_MAXUINT64) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_FLOAT (spec)) + { + GParamSpecFloat *pspec = G_PARAM_SPEC_FLOAT (spec); + + lower = describe_double_constant (pspec->minimum); + upper = describe_double_constant (pspec->maximum); + if (GTKDOC_COMPARE_FLOAT (pspec->minimum, -G_MAXFLOAT)) + { + if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXFLOAT)) + desc = g_strdup (""); + else + desc = g_strdup_printf ("<= %s", upper); + } + else if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXFLOAT)) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } + else if (G_IS_PARAM_SPEC_DOUBLE (spec)) + { + GParamSpecDouble *pspec = G_PARAM_SPEC_DOUBLE (spec); + + lower = describe_double_constant (pspec->minimum); + upper = describe_double_constant (pspec->maximum); + if (GTKDOC_COMPARE_FLOAT (pspec->minimum, -G_MAXDOUBLE)) + { + if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXDOUBLE)) + desc = g_strdup (""); + else + desc = g_strdup_printf ("<= %s", upper); + } + else if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXDOUBLE)) + desc = g_strdup_printf (">= %s", lower); + else + desc = g_strdup_printf ("[%s,%s]", lower, upper); + g_free (lower); + g_free (upper); + } +#if GLIB_CHECK_VERSION (2, 12, 0) + else if (G_IS_PARAM_SPEC_GTYPE (spec)) + { + GParamSpecGType *pspec = G_PARAM_SPEC_GTYPE (spec); + gboolean is_pointer; + + desc = g_strdup (get_type_name (pspec->is_a_type, &is_pointer)); + } +#endif +#if GLIB_CHECK_VERSION (2, 25, 9) + else if (G_IS_PARAM_SPEC_VARIANT (spec)) + { + GParamSpecVariant *pspec = G_PARAM_SPEC_VARIANT (spec); + gchar *variant_type; + + variant_type = g_variant_type_dup_string (pspec->type); + desc = g_strdup_printf ("GVariant<%s>", variant_type); + g_free (variant_type); + } +#endif + else + { + desc = g_strdup (""); + } + + return desc; +} + +static gchar* +describe_default (GParamSpec *spec) +{ + gchar *desc; + + if (G_IS_PARAM_SPEC_CHAR (spec)) + { + GParamSpecChar *pspec = G_PARAM_SPEC_CHAR (spec); + + desc = g_strdup_printf ("%d", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_UCHAR (spec)) + { + GParamSpecUChar *pspec = G_PARAM_SPEC_UCHAR (spec); + + desc = g_strdup_printf ("%u", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_BOOLEAN (spec)) + { + GParamSpecBoolean *pspec = G_PARAM_SPEC_BOOLEAN (spec); + + desc = g_strdup_printf ("%s", pspec->default_value ? "TRUE" : "FALSE"); + } + else if (G_IS_PARAM_SPEC_INT (spec)) + { + GParamSpecInt *pspec = G_PARAM_SPEC_INT (spec); + + desc = g_strdup_printf ("%d", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_UINT (spec)) + { + GParamSpecUInt *pspec = G_PARAM_SPEC_UINT (spec); + + desc = g_strdup_printf ("%u", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_LONG (spec)) + { + GParamSpecLong *pspec = G_PARAM_SPEC_LONG (spec); + + desc = g_strdup_printf ("%ld", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_LONG (spec)) + { + GParamSpecULong *pspec = G_PARAM_SPEC_ULONG (spec); + + desc = g_strdup_printf ("%lu", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_INT64 (spec)) + { + GParamSpecInt64 *pspec = G_PARAM_SPEC_INT64 (spec); + + desc = g_strdup_printf ("%" G_GINT64_FORMAT, pspec->default_value); + } + else if (G_IS_PARAM_SPEC_UINT64 (spec)) + { + GParamSpecUInt64 *pspec = G_PARAM_SPEC_UINT64 (spec); + + desc = g_strdup_printf ("%" G_GUINT64_FORMAT, pspec->default_value); + } + else if (G_IS_PARAM_SPEC_UNICHAR (spec)) + { + GParamSpecUnichar *pspec = G_PARAM_SPEC_UNICHAR (spec); + + if (g_unichar_isprint (pspec->default_value)) + desc = g_strdup_printf ("'%c'", pspec->default_value); + else + desc = g_strdup_printf ("%u", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_ENUM (spec)) + { + GParamSpecEnum *pspec = G_PARAM_SPEC_ENUM (spec); + + GEnumValue *value = g_enum_get_value (pspec->enum_class, pspec->default_value); + if (value) + desc = g_strdup_printf ("%s", value->value_name); + else + desc = g_strdup_printf ("%d", pspec->default_value); + } + else if (G_IS_PARAM_SPEC_FLAGS (spec)) + { + GParamSpecFlags *pspec = G_PARAM_SPEC_FLAGS (spec); + guint default_value; + GString *acc; + + default_value = pspec->default_value; + acc = g_string_new (""); + + while (default_value) + { + GFlagsValue *value = g_flags_get_first_value (pspec->flags_class, default_value); + + if (!value) + break; + + if (acc->len > 0) + g_string_append (acc, "|"); + g_string_append (acc, value->value_name); + + default_value &= ~value->value; + } + + if (default_value == 0) + desc = g_string_free (acc, FALSE); + else + { + desc = g_strdup_printf ("%d", pspec->default_value); + g_string_free (acc, TRUE); + } + } + else if (G_IS_PARAM_SPEC_FLOAT (spec)) + { + GParamSpecFloat *pspec = G_PARAM_SPEC_FLOAT (spec); + + /* make sure floats are output with a decimal dot irrespective of + * current locale. Use formatd since we want human-readable numbers + * and do not need the exact same bit representation when deserialising */ + desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE); + g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g", + pspec->default_value); + } + else if (G_IS_PARAM_SPEC_DOUBLE (spec)) + { + GParamSpecDouble *pspec = G_PARAM_SPEC_DOUBLE (spec); + + /* make sure floats are output with a decimal dot irrespective of + * current locale. Use formatd since we want human-readable numbers + * and do not need the exact same bit representation when deserialising */ + desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE); + g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g", + pspec->default_value); + } + else if (G_IS_PARAM_SPEC_STRING (spec)) + { + GParamSpecString *pspec = G_PARAM_SPEC_STRING (spec); + + if (pspec->default_value) + { + gchar *esc = g_strescape (pspec->default_value, NULL); + + desc = g_strdup_printf ("\\"%s\\"", esc); + + g_free (esc); + } + else + desc = g_strdup_printf ("NULL"); + } + else + { + desc = g_strdup (""); + } + + return desc; +} + + +static void +output_object_args (FILE *fp, GType object_type) +{ + gpointer class; + const gchar *object_class_name; + guint arg; + gchar flags[16], *pos; + GParamSpec **properties; + guint n_properties; + gboolean child_prop; + gboolean style_prop; + gboolean is_pointer; + const gchar *type_name; + gchar *type_desc; + gchar *default_value; + + if (G_TYPE_IS_OBJECT (object_type)) + { + class = g_type_class_peek (object_type); + if (!class) + return; + + properties = g_object_class_list_properties (class, &n_properties); + } +#if GLIB_MAJOR_VERSION > 2 || (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION >= 3) + else if (G_TYPE_IS_INTERFACE (object_type)) + { + class = g_type_default_interface_ref (object_type); + + if (!class) + return; + + properties = g_object_interface_list_properties (class, &n_properties); + } +#endif + else + return; + + object_class_name = g_type_name (object_type); + + child_prop = FALSE; + style_prop = FALSE; + + while (TRUE) { + qsort (properties, n_properties, sizeof (GParamSpec *), compare_param_specs); + for (arg = 0; arg < n_properties; arg++) + { + GParamSpec *spec = properties[arg]; + const gchar *nick, *blurb, *dot; + + if (spec->owner_type != object_type) + continue; + + pos = flags; + /* We use one-character flags for simplicity. */ + if (child_prop && !style_prop) + *pos++ = 'c'; + if (style_prop) + *pos++ = 's'; + if (spec->flags & G_PARAM_READABLE) + *pos++ = 'r'; + if (spec->flags & G_PARAM_WRITABLE) + *pos++ = 'w'; + if (spec->flags & G_PARAM_CONSTRUCT) + *pos++ = 'x'; + if (spec->flags & G_PARAM_CONSTRUCT_ONLY) + *pos++ = 'X'; + *pos = 0; + + nick = g_param_spec_get_nick (spec); + blurb = g_param_spec_get_blurb (spec); + + dot = ""; + if (blurb) { + int str_len = strlen (blurb); + if (str_len > 0 && blurb[str_len - 1] != '.') + dot = "."; + } + + type_desc = describe_type (spec); + default_value = describe_default (spec); + type_name = get_type_name (spec->value_type, &is_pointer); + fprintf (fp, "\\n%s::%s\\n%s%s\\n%s\\n%s\\n%s\\n%s%s\\n%s\\n\\n\\n", + object_class_name, g_param_spec_get_name (spec), type_name, is_pointer ? "*" : "", type_desc, flags, nick ? nick : "(null)", blurb ? blurb : "(null)", dot, default_value); + g_free (type_desc); + g_free (default_value); + } + + g_free (properties); + +#ifdef GTK_IS_CONTAINER_CLASS + if (!child_prop && GTK_IS_CONTAINER_CLASS (class)) { + properties = gtk_container_class_list_child_properties (class, &n_properties); + child_prop = TRUE; + continue; + } +#endif + +#ifdef GTK_IS_CELL_AREA_CLASS + if (!child_prop && GTK_IS_CELL_AREA_CLASS (class)) { + properties = gtk_cell_area_class_list_cell_properties (class, &n_properties); + child_prop = TRUE; + continue; + } +#endif + +#ifdef GTK_IS_WIDGET_CLASS +#if GTK_CHECK_VERSION(2,1,0) + if (!style_prop && GTK_IS_WIDGET_CLASS (class)) { + properties = gtk_widget_class_list_style_properties (GTK_WIDGET_CLASS (class), &n_properties); + style_prop = TRUE; + continue; + } +#endif +#endif + + break; + } +} +EOT + +close OUTPUT; + +# Compile and run our file + +$CC = $ENV{CC} ? $ENV{CC} : "gcc"; +$LD = $ENV{LD} ? $ENV{LD} : $CC; +$CFLAGS = $ENV{CFLAGS} ? "$ENV{CFLAGS}" : ""; +$LDFLAGS = $ENV{LDFLAGS} ? $ENV{LDFLAGS} : ""; + +my $o_file; +if ($CC =~ /libtool/) { + $o_file = "$MODULE-scan.lo" +} else { + $o_file = "$MODULE-scan.o" +} + +my $stdout=""; +if (!defined($VERBOSE) or $VERBOSE eq "0") { + $stdout=">/dev/null"; +} + +# Compiling scanner +$command = "$CC $stdout $CFLAGS -c -o $o_file $MODULE-scan.c"; +system("($command)") == 0 or die "Compilation of scanner failed: $!\n"; + +# Linking scanner +$command = "$LD $stdout -o $MODULE-scan $o_file $LDFLAGS"; +system($command) == 0 or die "Linking of scanner failed: $!\n"; + +# Running scanner $MODULE-scan "; +system("sh -c ./$MODULE-scan") == 0 or die "Scan failed: $!\n"; + +if (!defined($ENV{"GTK_DOC_KEEP_INTERMEDIATE"})) { + unlink "./$MODULE-scan.c", "./$MODULE-scan.o", "./$MODULE-scan.lo", "./$MODULE-scan"; +} + +&UpdateFileIfChanged ($old_hierarchy_filename, $new_hierarchy_filename, 0); +# we will merge these in scangobj-merge.py +#&UpdateFileIfChanged ($old_interfaces_filename, $new_interfaces_filename, 0); +#&UpdateFileIfChanged ($old_prerequisites_filename, $new_prerequisites_filename, 0); +#&UpdateFileIfChanged ($old_signals_filename, $new_signals_filename, 0); +#&UpdateFileIfChanged ($old_args_filename, $new_args_filename, 0); + diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak new file mode 100644 index 0000000..8cc42e7 --- /dev/null +++ b/common/gtk-doc-plugins.mak @@ -0,0 +1,387 @@ +# This is an include file specifically tuned for building documentation +# for GStreamer plug-ins + +help: + @echo + @echo "If you are a doc maintainer, run 'make update' to update" + @echo "the documentation files maintained in git" + @echo + @echo Other useful make targets: + @echo + @echo check-inspected-versions: make sure the inspected plugin info + @echo is up to date before a release + @echo + +# update the stuff maintained by doc maintainers +update: + $(MAKE) scanobj-update + $(MAKE) check-outdated-docs + +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) + +# thomas: make docs parallel installable +TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@ + +MAINTAINER_DOC_STAMPS = \ + scanobj-build.stamp + +EXTRA_DIST = \ + $(MAINTAINER_DOC_STAMPS) \ + $(srcdir)/inspect/*.xml \ + $(SCANOBJ_FILES) \ + $(content_files) \ + $(extra_files) \ + $(HTML_IMAGES) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_OVERRIDES) \ + $(DOC_MODULE)-sections.txt + +# we don't add scanobj-build.stamp here since they are built manually by docs +# maintainers and result is commited to git +DOC_STAMPS = \ + scan-build.stamp \ + tmpl-build.stamp \ + sgml-build.stamp \ + html-build.stamp \ + scan.stamp \ + tmpl.stamp \ + sgml.stamp \ + html.stamp + +# files generated/updated by gtkdoc-scangobj +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals \ + $(DOC_MODULE).types + +SCANOBJ_FILES_O = \ + .libs/$(DOC_MODULE)-scan.o + +# files generated/updated by gtkdoc-scan +SCAN_FILES = \ + $(DOC_MODULE)-sections.txt \ + $(DOC_MODULE)-overrides.txt \ + $(DOC_MODULE)-decl.txt \ + $(DOC_MODULE)-decl-list.txt + + +REPORT_FILES = \ + $(DOC_MODULE)-undocumented.txt \ + $(DOC_MODULE)-undeclared.txt \ + $(DOC_MODULE)-unused.txt + +CLEANFILES = \ + $(SCANOBJ_FILES_O) \ + $(REPORT_FILES) \ + $(DOC_STAMPS) \ + inspect-registry.xml + +INSPECT_DIR = inspect + +if ENABLE_GTK_DOC +all-local: html-build.stamp + +### inspect GStreamer plug-ins; done by documentation maintainer ### + +# only look at the plugins in this module when building inspect .xml stuff +INSPECT_REGISTRY=$(top_builddir)/docs/plugins/inspect-registry.xml +INSPECT_ENVIRONMENT=\ + LC_ALL=C \ + GST_PLUGIN_SYSTEM_PATH= \ + GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(top_builddir)/plugins:$(top_builddir)/src:$(top_builddir)/gnl \ + GST_REGISTRY=$(INSPECT_REGISTRY) \ + PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(INSPECT_EXTRA_ENVIRONMENT) + +#### scan gobjects; done by documentation maintainer #### +scanobj-update: + -rm scanobj-build.stamp + $(MAKE) scanobj-build.stamp + +# gstdoc-scanobj produces 5 output files (.new) +# scangobj-merge.py merges them into the file which we commit later +# TODO: also merge the hierarchy +scanobj-build.stamp: $(SCANOBJ_DEPS) $(basefiles) + @echo " DOC Introspecting gobjects" + @if test x"$(srcdir)" != x. ; then \ + for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ + do \ + if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ + done; \ + fi; \ + mkdir -p $(INSPECT_DIR); \ + scanobj_options=""; \ + if test "x$(V)" = "x1"; then \ + scanobj_options="--verbose"; \ + fi; \ + $(INSPECT_ENVIRONMENT) \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ + CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)" \ + LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ + $(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)" \ + --module=$(DOC_MODULE) --source=$(PACKAGE) --inspect-dir=$(INSPECT_DIR) && \ + echo " DOC Merging introspection data" && \ + $(PYTHON) \ + $(top_srcdir)/common/scangobj-merge.py $(DOC_MODULE); \ + if test x"$(srcdir)" != x. ; then \ + for f in $(SCANOBJ_FILES); \ + do \ + cmp -s ./$$f $(srcdir)/$$f || cp ./$$f $(srcdir)/ ; \ + done; \ + fi; \ + touch scanobj-build.stamp + +$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(SCANOBJ_FILES_O): scan-build.stamp + @true + +### scan headers; done on every build ### +scan-build.stamp: $(HFILE_GLOB) $(EXTRA_HFILES) $(basefiles) scanobj-build.stamp + @echo ' DOC Scanning header files' + @if test x"$(srcdir)" != x. ; then \ + for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ + do \ + if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ + done; \ + fi + @_source_dir='' ; \ + for i in $(DOC_SOURCE_DIR) ; do \ + _source_dir="$${_source_dir} --source-dir=$$i" ; \ + done ; \ + gtkdoc-scan \ + $(SCAN_OPTIONS) $(EXTRA_HFILES) \ + --module=$(DOC_MODULE) \ + $${_source_dir} \ + --ignore-headers="$(IGNORE_HFILES)"; \ + touch scan-build.stamp + +#### update templates; done on every build #### + +# in a non-srcdir build, we need to copy files from the previous step +# and the files from previous runs of this step +tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES) + @echo ' DOC Rebuilding template files' + @if test x"$(srcdir)" != x. ; then \ + for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ + do \ + if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ + done; \ + fi + @gtkdoc-mktmpl --module=$(DOC_MODULE) + @$(PYTHON) \ + $(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl + @touch tmpl-build.stamp + +tmpl.stamp: tmpl-build.stamp + @true + +#### xml #### + +sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) + @echo ' DOC Building XML' + @-mkdir -p xml + @for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \ + xsltproc --stringparam module $(MODULE) \ + $(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done + @for f in $(EXAMPLE_CFILES); do \ + $(PYTHON) $(top_srcdir)/common/c-to-xml.py $$f > xml/element-`basename $$f .c`.xml; done + @gtkdoc-mkdb \ + --module=$(DOC_MODULE) \ + --source-dir=$(DOC_SOURCE_DIR) \ + --expand-content-files="$(expand_content_files)" \ + --main-sgml-file=$(srcdir)/$(DOC_MAIN_SGML_FILE) \ + --output-format=xml \ + --ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \ + $(MKDB_OPTIONS) + @cp ../version.entities xml + @touch sgml-build.stamp + +sgml.stamp: sgml-build.stamp + @true + +#### html #### + +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo ' DOC Building HTML' + @rm -rf html + @mkdir html + @cp $(srcdir)/$(DOC_MAIN_SGML_FILE) html + @for f in $(content_files); do cp $(srcdir)/$$f html; done + @cp -pr xml html + @cp ../version.entities html + @mkhtml_options=""; \ + gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + mkhtml_options="$$mkhtml_options --verbose"; \ + fi; \ + fi; \ + cd html && gtkdoc-mkhtml $$mkhtml_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) + @mv html/index.sgml html/index.sgml.bak + @$(SED) "s/ href=\"$(DOC_MODULE)\// href=\"$(DOC_MODULE)-@GST_MAJORMINOR@\//g" html/index.sgml.bak >html/index.sgml + @rm -f html/index.sgml.bak + @rm -f html/$(DOC_MAIN_SGML_FILE) + @rm -rf html/xml + @rm -f html/version.entities + @test "x$(HTML_IMAGES)" = "x" || for i in "" $(HTML_IMAGES) ; do \ + if test "$$i" != ""; then cp $(srcdir)/$$i html ; fi; done + @echo ' DOC Fixing cross-references' + @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + @touch html-build.stamp + +clean-local-gtkdoc: + @rm -rf xml tmpl html +# clean files copied for nonsrcdir templates build + @if test x"$(srcdir)" != x. ; then \ + rm -rf $(SCANOBJ_FILES) $(SCAN_FILES) $(REPORT_FILES) \ + $(MAINTAINER_DOC_STAMPS); \ + fi +else +all-local: +clean-local-gtkdoc: +endif + +clean-local: clean-local-gtkdoc + @rm -f *~ *.bak + @rm -rf .libs + +distclean-local: + @rm -f $(REPORT_FILES) \ + $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + @rm -rf tmpl/*.sgml.bak + @rm -f $(DOC_MODULE).hierarchy + @rm -f *.stamp || true + @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + rm -f $(DOC_MODULE)-docs.sgml ; \ + rm -f $(DOC_MODULE).types ; \ + rm -f $(DOC_MODULE).interfaces ; \ + rm -f $(DOC_MODULE)-overrides.txt ; \ + rm -f $(DOC_MODULE).prerequisites ; \ + rm -f $(DOC_MODULE)-sections.txt ; \ + rm -rf tmpl/*.sgml ; \ + rm -rf $(INSPECT_DIR); \ + fi + @rm -rf *.o + +MAINTAINERCLEANFILES = $(MAINTAINER_DOC_STAMPS) + +# thomas: make docs parallel installable; devhelp requires majorminor too +install-data-local: + (installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \ + if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \ + then echo '-- Nothing to install' ; \ + else \ + $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \ + for i in $$installfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + pngfiles=`echo ./html/*.png`; \ + if test "$$pngfiles" != './html/*.png'; then \ + for i in $$pngfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + fi; \ + echo '-- Installing $(builddir)/html/$(DOC_MODULE).devhelp2' ; \ + if test -e $(builddir)/html/$(DOC_MODULE).devhelp2; then \ + $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \ + $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@.devhelp2; \ + fi; \ + (which gtkdoc-rebase >/dev/null && \ + gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \ + fi) +uninstall-local: + if test -d $(DESTDIR)$(TARGET_DIR); then \ + rm -rf $(DESTDIR)$(TARGET_DIR)/*; \ + rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \ + else \ + echo '-- Nothing to uninstall' ; \ + fi; + +# +# Checks +# +if ENABLE_GTK_DOC +check-hierarchy: $(DOC_MODULE).hierarchy + @if grep ' ' $(DOC_MODULE).hierarchy; then \ + echo "$(DOC_MODULE).hierarchy contains tabs, please fix"; \ + /bin/false; \ + fi + +check: check-hierarchy +endif + +# wildcard is apparently not portable to other makes, hence the use of find +inspect_files = $(shell find $(srcdir)/$(INSPECT_DIR) -name '*.xml') + +check-inspected-versions: + @echo Checking plugin versions of inspected plugin data ...; \ + fail=0 ; \ + for each in $(inspect_files) ; do \ + if (grep -H '' $$each | grep -v '$(VERSION)'); then \ + echo $$each should be fixed to say version $(VERSION) or be removed ; \ + echo "sed -i -e 's//$(VERSION)<\/version>/'" $$each; \ + echo ; \ + fail=1; \ + fi ; \ + done ; \ + exit $$fail + +check-outdated-docs: + $(AM_V_GEN)echo Checking for outdated plugin inspect data ...; \ + fail=0 ; \ + if [ -d $(top_srcdir)/.git/ ]; then \ + files=`find $(srcdir)/inspect/ -name '*xml'`; \ + for f in $$files; do \ + ver=`grep '$(PACKAGE_VERSION)' $$f`; \ + if test "x$$ver" = "x"; then \ + plugin=`echo $$f | sed -e 's/^.*plugin-//' -e 's/.xml//'`; \ + # echo "Checking $$plugin $$f"; \ + pushd "$(top_srcdir)" >/dev/null; \ + pinit=`git grep -A3 GST_PLUGIN_DEFINE -- ext/ gst/ sys/ | grep "\"$$plugin\""`; \ + popd >/dev/null; \ + # echo "[$$pinit]"; \ + if test "x$$pinit" = "x"; then \ + printf " **** outdated docs for plugin %-15s: %s\n" $$plugin $$f; \ + fail=1; \ + fi; \ + fi; \ + done; \ + fi ; \ + exit $$fail + +# +# Require gtk-doc when making dist +# +if ENABLE_GTK_DOC +dist-check-gtkdoc: +else +dist-check-gtkdoc: + @echo "*** gtk-doc must be installed and enabled in order to make dist" + @false +endif + +# FIXME: decide whether we want to dist generated html or not +# also this only works, if the project has been build before +# we could dist html only if its there, but that might lead to missing html in +# tarballs +dist-hook: dist-check-gtkdoc dist-hook-local + mkdir $(distdir)/html + cp html/* $(distdir)/html + -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/ + -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/ + cd $(distdir) && rm -f $(DISTCLEANFILES) + -gtkdoc-rebase --online --relative --html-dir=$(distdir)/html + +.PHONY : dist-hook-local docs check-outdated-docs inspect + +# avoid spurious build errors when distchecking with -jN +.NOTPARALLEL: diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak new file mode 100644 index 0000000..dd2b5a5 --- /dev/null +++ b/common/gtk-doc.mak @@ -0,0 +1,231 @@ +########################################################################### +# Everything below here is generic and you shouldn't need to change it. +########################################################################### +# thomas: except of course that we did + +# thomas: copied from glib-2 +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) + +# thomas: make docs parallel installable +TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@ + +EXTRA_DIST = \ + $(content_files) \ + $(extra_files) \ + $(HTML_IMAGES) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_MODULE).types \ + $(DOC_OVERRIDES) \ + $(DOC_MODULE)-sections.txt + +DOC_STAMPS = \ + setup-build.stamp \ + scan-build.stamp \ + sgml-build.stamp \ + html-build.stamp \ + sgml.stamp \ + html.stamp + +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals \ + .libs/$(DOC_MODULE)-scan.o + +REPORT_FILES = \ + $(DOC_MODULE)-undocumented.txt \ + $(DOC_MODULE)-undeclared.txt \ + $(DOC_MODULE)-unused.txt + +CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) doc-registry.xml + +if ENABLE_GTK_DOC +all-local: html-build.stamp + +#### setup #### + +setup-build.stamp: $(content_files) + -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + echo ' DOC Preparing build'; \ + files=`echo $(DOC_MAIN_SGML_FILE) $(DOC_OVERRIDES) $(DOC_MODULE)-sections.txt $(DOC_MODULE).types $(content_files)`; \ + if test "x$$files" != "x" ; then \ + for file in $$files ; do \ + test -f $(abs_srcdir)/$$file && \ + cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ + done; \ + fi; \ + fi + @touch setup-build.stamp + +#### scan #### + +# in the case of non-srcdir builds, the built gst directory gets added +# to gtk-doc scanning; but only then, to avoid duplicates +scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) + @echo ' DOC Scanning header files' + @_source_dir='' ; \ + for i in $(DOC_SOURCE_DIR) ; do \ + _source_dir="$${_source_dir} --source-dir=$$i" ; \ + done ; \ + gtkdoc-scan \ + $(SCAN_OPTIONS) $(EXTRA_HFILES) \ + --module=$(DOC_MODULE) \ + $${_source_dir} \ + --ignore-headers="$(IGNORE_HFILES)" + @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then \ + echo " DOC Introspecting gobjects"; \ + GST_PLUGIN_SYSTEM_PATH=`cd $(top_builddir) && pwd` \ + GST_PLUGIN_PATH= \ + GST_REGISTRY=doc-registry.xml \ + $(GTKDOC_EXTRA_ENVIRONMENT) \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ + CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" \ + LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ + gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)" \ + --module=$(DOC_MODULE) ; \ + else \ + for i in $(SCANOBJ_FILES) ; do \ + test -f $$i || touch $$i ; \ + done \ + fi + @touch scan-build.stamp + +$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp + @true + +#### xml #### + +sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(expand_content_files) + @echo ' DOC Building XML' + @gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS) + @cp ../version.entities xml + @touch sgml-build.stamp + +sgml.stamp: sgml-build.stamp + @true + +#### html #### + +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo ' DOC Building HTML' + @rm -rf html + @mkdir html + @cp -pr xml html + @cp ../version.entities ./ + @mkhtml_options=""; \ + gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + mkhtml_options="$$mkhtml_options --verbose"; \ + fi; \ + fi; \ + @gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ + if test "$(?)" = "0"; then \ + mkhtml_options=--path="$(abs_srcdir)"; \ + fi; \ + cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) + @mv html/index.sgml html/index.sgml.bak + @$(SED) "s/ href=\"$(DOC_MODULE)\// href=\"$(DOC_MODULE)-@GST_MAJORMINOR@\//g" html/index.sgml.bak >html/index.sgml + @rm -f html/index.sgml.bak + @rm -rf html/xml + @rm -f version.entities + @test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) $(abs_builddir)/html ) + @echo ' DOC Fixing cross-references' + @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + @touch html-build.stamp + +clean-local-gtkdoc: + @rm -rf xml tmpl html +# clean files copied for nonsrcdir templates build + @if test x"$(srcdir)" != x. ; then \ + rm -rf $(DOC_MODULE).types; \ + fi +else +all-local: +clean-local-gtkdoc: +endif + +clean-local: clean-local-gtkdoc + @rm -f *~ *.bak + @rm -rf .libs + +distclean-local: + @rm -f $(REPORT_FILES) \ + $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + @rm -rf tmpl/*.sgml.bak + @rm -f $(DOC_MODULE).hierarchy + @rm -f *.stamp || true + @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + rm -f $(DOC_MAIN_SGML_FILE) ; \ + rm -f $(DOC_OVERRIDES) ; \ + rm -f $(DOC_MODULE).types ; \ + rm -f $(DOC_MODULE).interfaces ; \ + rm -f $(DOC_MODULE).prerequisites ; \ + rm -f $(DOC_MODULE)-sections.txt ; \ + rm -f $(content_files) ; \ + rm -rf tmpl/*.sgml ; \ + fi + @rm -rf *.o + +maintainer-clean-local: clean + @cd $(srcdir) && rm -rf html \ + xml $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + +# thomas: make docs parallel installable; devhelp requires majorminor too +install-data-local: + (installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \ + if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \ + then echo '-- Nothing to install' ; \ + else \ + $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \ + for i in $$installfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + echo '-- Installing $(builddir)/html/$(DOC_MODULE).devhelp2' ; \ + if test -e $(builddir)/html/$(DOC_MODULE).devhelp2; then \ + $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \ + $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@.devhelp2; \ + fi; \ + (which gtkdoc-rebase >/dev/null && \ + gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \ + fi) +uninstall-local: + if test -d $(DESTDIR)$(TARGET_DIR); then \ + rm -rf $(DESTDIR)$(TARGET_DIR)/*; \ + rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \ + else \ + echo '-- Nothing to uninstall' ; \ + fi; + + +# +# Require gtk-doc when making dist +# +if ENABLE_GTK_DOC +dist-check-gtkdoc: +else +dist-check-gtkdoc: + @echo "*** gtk-doc must be installed and enabled in order to make dist" + @false +endif + +dist-hook: dist-check-gtkdoc dist-hook-local + mkdir $(distdir)/html + cp html/* $(distdir)/html + -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/ + -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/ + cd $(distdir) && rm -f $(DISTCLEANFILES) + -gtkdoc-rebase --online --relative --html-dir=$(distdir)/html + +.PHONY : dist-hook-local docs + +# avoid spurious build errors when distchecking with -jN +.NOTPARALLEL: diff --git a/common/m4/Makefile.am b/common/m4/Makefile.am new file mode 100644 index 0000000..2ddb8a7 --- /dev/null +++ b/common/m4/Makefile.am @@ -0,0 +1,42 @@ +EXTRA_DIST = \ + README \ + as-ac-expand.m4 \ + as-auto-alt.m4 \ + as-compiler-flag.m4 \ + as-compiler.m4 \ + as-docbook.m4 \ + as-gcc-inline-assembly.m4 \ + as-libtool.m4 \ + as-libtool-tags.m4 \ + as-objc.m4 \ + as-python.m4 \ + as-scrub-include.m4 \ + as-version.m4 \ + ax_create_stdint_h.m4 \ + glib-gettext.m4 \ + gst-arch.m4 \ + gst-args.m4 \ + gst-check.m4 \ + gst-debuginfo.m4 \ + gst-default.m4 \ + gst-doc.m4 \ + gst-dowhile.m4 \ + gst-error.m4 \ + gst-feature.m4 \ + gst-function.m4 \ + gst-gettext.m4 \ + gst-glib2.m4 \ + gst-libxml2.m4 \ + gst-parser.m4 \ + gst-package-release-datetime.m4 \ + gst-platform.m4 \ + gst-plugindir.m4 \ + gst-plugin-docs.m4 \ + gst-valgrind.m4 \ + gst-x11.m4 \ + gst.m4 \ + gtk-doc.m4 \ + introspection.m4 \ + pkg.m4 \ + check.m4 \ + orc.m4 diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in new file mode 100644 index 0000000..e27962d --- /dev/null +++ b/common/m4/Makefile.in @@ -0,0 +1,505 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = common/m4 +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + README \ + as-ac-expand.m4 \ + as-auto-alt.m4 \ + as-compiler-flag.m4 \ + as-compiler.m4 \ + as-docbook.m4 \ + as-gcc-inline-assembly.m4 \ + as-libtool.m4 \ + as-libtool-tags.m4 \ + as-objc.m4 \ + as-python.m4 \ + as-scrub-include.m4 \ + as-version.m4 \ + ax_create_stdint_h.m4 \ + glib-gettext.m4 \ + gst-arch.m4 \ + gst-args.m4 \ + gst-check.m4 \ + gst-debuginfo.m4 \ + gst-default.m4 \ + gst-doc.m4 \ + gst-dowhile.m4 \ + gst-error.m4 \ + gst-feature.m4 \ + gst-function.m4 \ + gst-gettext.m4 \ + gst-glib2.m4 \ + gst-libxml2.m4 \ + gst-parser.m4 \ + gst-package-release-datetime.m4 \ + gst-platform.m4 \ + gst-plugindir.m4 \ + gst-plugin-docs.m4 \ + gst-valgrind.m4 \ + gst-x11.m4 \ + gst.m4 \ + gtk-doc.m4 \ + introspection.m4 \ + pkg.m4 \ + check.m4 \ + orc.m4 + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/m4/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu common/m4/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/common/m4/README b/common/m4/README new file mode 100644 index 0000000..867a344 --- /dev/null +++ b/common/m4/README @@ -0,0 +1,3 @@ +All aclocal .m4 files we need are put here and cat'd to acinclude.m4 in +the source root. Official ones (taken from the relevant devel packages) +are named as-is, unofficial ones (or changed ones) get a gst-prefix. diff --git a/common/m4/as-ac-expand.m4 b/common/m4/as-ac-expand.m4 new file mode 100644 index 0000000..d6c9e33 --- /dev/null +++ b/common/m4/as-ac-expand.m4 @@ -0,0 +1,43 @@ +dnl as-ac-expand.m4 0.2.0 +dnl autostars m4 macro for expanding directories using configure's prefix +dnl thomas@apestaart.org + +dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR) +dnl example +dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir) +dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local + +AC_DEFUN([AS_AC_EXPAND], +[ + EXP_VAR=[$1] + FROM_VAR=[$2] + + dnl first expand prefix and exec_prefix if necessary + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + dnl if no prefix given, then use /usr/local, the default prefix + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + dnl if no exec_prefix given, then use prefix + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + dnl loop until it doesn't change anymore + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + dnl clean up + full_var=$new_full_var + AC_SUBST([$1], "$full_var") + + dnl restore prefix and exec_prefix + prefix=$prefix_save + exec_prefix=$exec_prefix_save +]) diff --git a/common/m4/as-auto-alt.m4 b/common/m4/as-auto-alt.m4 new file mode 100644 index 0000000..3f7920d --- /dev/null +++ b/common/m4/as-auto-alt.m4 @@ -0,0 +1,50 @@ +dnl as-auto-alt.m4 0.0.2 +dnl autostars m4 macro for supplying alternate autotools versions to configure +dnl thomas@apestaart.org +dnl +dnl AS_AUTOTOOLS_ALTERNATE() +dnl +dnl supplies --with arguments for autoconf, autoheader, automake, aclocal + +AC_DEFUN([AS_AUTOTOOLS_ALTERNATE], +[ + dnl allow for different autoconf version + AC_ARG_WITH(autoconf, + AC_HELP_STRING([--with-autoconf], + [use a different autoconf for regeneration of Makefiles]), + [ + unset AUTOCONF + AM_MISSING_PROG(AUTOCONF, ${withval}) + AC_MSG_NOTICE([Using $AUTOCONF as autoconf]) + ]) + + dnl allow for different autoheader version + AC_ARG_WITH(autoheader, + AC_HELP_STRING([--with-autoheader], + [use a different autoheader for regeneration of Makefiles]), + [ + unset AUTOHEADER + AM_MISSING_PROG(AUTOHEADER, ${withval}) + AC_MSG_NOTICE([Using $AUTOHEADER as autoheader]) + ]) + + dnl allow for different automake version + AC_ARG_WITH(automake, + AC_HELP_STRING([--with-automake], + [use a different automake for regeneration of Makefiles]), + [ + unset AUTOMAKE + AM_MISSING_PROG(AUTOMAKE, ${withval}) + AC_MSG_NOTICE([Using $AUTOMAKE as automake]) + ]) + + dnl allow for different aclocal version + AC_ARG_WITH(aclocal, + AC_HELP_STRING([--with-aclocal], + [use a different aclocal for regeneration of Makefiles]), + [ + unset ACLOCAL + AM_MISSING_PROG(ACLOCAL, ${withval}) + AC_MSG_NOTICE([Using $ACLOCAL as aclocal]) + ]) +]) diff --git a/common/m4/as-compiler-flag.m4 b/common/m4/as-compiler-flag.m4 new file mode 100644 index 0000000..882a4c7 --- /dev/null +++ b/common/m4/as-compiler-flag.m4 @@ -0,0 +1,64 @@ +dnl as-compiler-flag.m4 0.1.0 + +dnl autostars m4 macro for detection of compiler flags + +dnl David Schleef +dnl Tim-Philipp Müller + +dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CFLAGS. +dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, +dnl and ACTION-IF-NOT-ACCEPTED otherwise. + +AC_DEFUN([AS_COMPILER_FLAG], +[ + AC_MSG_CHECKING([to see if compiler understands $1]) + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $1" + + AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + $2 + true + else + $3 + true + fi + AC_MSG_RESULT([$flag_ok]) +]) + +dnl AS_CXX_COMPILER_FLAG(CPPFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CPPFLAGS. +dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, +dnl and ACTION-IF-NOT-ACCEPTED otherwise. + +AC_DEFUN([AS_CXX_COMPILER_FLAG], +[ + AC_REQUIRE([AC_PROG_CXX]) + + AC_MSG_CHECKING([to see if c++ compiler understands $1]) + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $1" + + AC_LANG_PUSH(C++) + + AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) + CPPFLAGS="$save_CPPFLAGS" + + if test "X$flag_ok" = Xyes ; then + $2 + true + else + $3 + true + fi + + AC_LANG_POP(C++) + + AC_MSG_RESULT([$flag_ok]) +]) + diff --git a/common/m4/as-compiler.m4 b/common/m4/as-compiler.m4 new file mode 100644 index 0000000..309a060 --- /dev/null +++ b/common/m4/as-compiler.m4 @@ -0,0 +1,44 @@ +dnl as-compiler.m4 0.1.0 + +dnl autostars m4 macro for detection of compiler flavor + +dnl Thomas Vander Stichele + +dnl $Id: as-compiler.m4,v 1.4 2004/06/01 09:44:19 thomasvs Exp $ + +dnl AS_COMPILER(COMPILER) +dnl will set variable COMPILER to +dnl - gcc +dnl - forte +dnl - (empty) if no guess could be made + +AC_DEFUN([AS_COMPILER], +[ + as_compiler= + AC_MSG_CHECKING(for compiler flavour) + + dnl is it gcc ? + if test "x$GCC" = "xyes"; then + as_compiler="gcc" + fi + + dnl is it forte ? + AC_TRY_RUN([ +int main +(int argc, char *argv[]) +{ +#ifdef __sun + return 0; +#else + return 1; +#endif +} + ], as_compiler="forte", ,) + + if test "x$as_compiler" = "x"; then + AC_MSG_RESULT([unknown !]) + else + AC_MSG_RESULT($as_compiler) + fi + [$1]=$as_compiler +]) diff --git a/common/m4/as-docbook.m4 b/common/m4/as-docbook.m4 new file mode 100644 index 0000000..8a1b32a --- /dev/null +++ b/common/m4/as-docbook.m4 @@ -0,0 +1,66 @@ +dnl AS_DOCBOOK([, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl checks if xsltproc can build docbook documentation +dnl (which is possible if the catalog is set up properly +dnl I also tried checking for a specific version and type of docbook +dnl but xsltproc seemed to happily run anyway, so we can't check for that +dnl and version +dnl this macro takes inspiration from +dnl http://www.movement.uklinux.net/docs/docbook-autotools/configure.html +AC_DEFUN([AS_DOCBOOK], +[ + XSLTPROC_FLAGS=--nonet + DOCBOOK_ROOT= + TYPE_LC=xml + TYPE_UC=XML + DOCBOOK_VERSION=4.1.2 + + if test ! -f /etc/xml/catalog; then + for i in /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /usr/share/sgml/docbook/xsl-stylesheets/ /usr/local/share/xsl/docbook ; + do + if test -d "$i"; then + DOCBOOK_ROOT=$i + fi + done + else + XML_CATALOG=/etc/xml/catalog + CAT_ENTRY_START='' + fi + + dnl We need xsltproc to process the test + AC_CHECK_PROG(XSLTPROC,xsltproc,xsltproc,) + XSLTPROC_WORKS=no + if test -n "$XSLTPROC"; then + AC_MSG_CHECKING([whether xsltproc docbook processing works]) + + if test -n "$XML_CATALOG"; then + DB_FILE="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" + else + DB_FILE="$DOCBOOK_ROOT/xhtml/docbook.xsl" + fi + $XSLTPROC $XSLTPROC_FLAGS $DB_FILE >/dev/null 2>&1 << END + + + + +END + if test "$?" = 0; then + XSLTPROC_WORKS=yes + fi + AC_MSG_RESULT($XSLTPROC_WORKS) + fi + + if test "x$XSLTPROC_WORKS" = "xyes"; then + dnl execute ACTION-IF-FOUND + ifelse([$1], , :, [$1]) + else + dnl execute ACTION-IF-NOT-FOUND + ifelse([$2], , :, [$2]) + fi + + AC_SUBST(XML_CATALOG) + AC_SUBST(XSLTPROC_FLAGS) + AC_SUBST(DOCBOOK_ROOT) + AC_SUBST(CAT_ENTRY_START) + AC_SUBST(CAT_ENTRY_END) +]) diff --git a/common/m4/as-gcc-inline-assembly.m4 b/common/m4/as-gcc-inline-assembly.m4 new file mode 100644 index 0000000..af32104 --- /dev/null +++ b/common/m4/as-gcc-inline-assembly.m4 @@ -0,0 +1,52 @@ +dnl as-gcc-inline-assembly.m4 0.1.0 + +dnl autostars m4 macro for detection of gcc inline assembly + +dnl David Schleef + +dnl $Id$ + +dnl AS_COMPILER_FLAG(ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CFLAGS. +dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, +dnl and ACTION-IF-NOT-ACCEPTED otherwise. + +AC_DEFUN([AS_GCC_INLINE_ASSEMBLY], +[ + AC_MSG_CHECKING([if compiler supports gcc-style inline assembly]) + + AC_TRY_COMPILE([], [ +#ifdef __GNUC_MINOR__ +#if (__GNUC__ * 1000 + __GNUC_MINOR__) < 3004 +#error GCC before 3.4 has critical bugs compiling inline assembly +#endif +#endif +__asm__ (""::) ], [flag_ok=yes], [flag_ok=no]) + + if test "X$flag_ok" = Xyes ; then + $1 + true + else + $2 + true + fi + AC_MSG_RESULT([$flag_ok]) +]) + + +AC_DEFUN([AS_GCC_ASM_POWERPC_FPU], +[ + AC_MSG_CHECKING([if compiler supports FPU instructions on PowerPC]) + + AC_TRY_COMPILE([], [__asm__ ("fadd 0,0,0"::) ], [flag_ok=yes], [flag_ok=no]) + + if test "X$flag_ok" = Xyes ; then + $1 + true + else + $2 + true + fi + AC_MSG_RESULT([$flag_ok]) +]) + diff --git a/common/m4/as-libtool-tags.m4 b/common/m4/as-libtool-tags.m4 new file mode 100644 index 0000000..06f0ae4 --- /dev/null +++ b/common/m4/as-libtool-tags.m4 @@ -0,0 +1,83 @@ +dnl as-libtool-tags.m4 0.1.4 + +dnl autostars m4 macro for selecting libtool "tags" (languages) + +dnl Andy Wingo does not claim credit for this macro +dnl backported from libtool 1.6 by Paolo Bonzini +dnl see http://lists.gnu.org/archive/html/libtool/2003-12/msg00007.html + +dnl $Id$ + +dnl AS_LIBTOOL_TAGS([tags...]) + +dnl example +dnl AS_LIBTOOL_TAGS([]) for only C (no fortran, etc) + +dnl When AC_LIBTOOL_TAGS is used, I redefine _LT_AC_TAGCONFIG +dnl to be more similar to the libtool 1.6 implementation, which +dnl uses an m4 loop and m4 case instead of a shell loop. This +dnl way the CXX/GCJ/F77/RC tests are not always expanded. + +dnl AS_LIBTOOL_TAGS +dnl --------------- +dnl tags to enable +AC_DEFUN([AS_LIBTOOL_TAGS], +[m4_define([_LT_TAGS],[$1]) +m4_define([_LT_AC_TAGCONFIG], [ + # redefined LT AC TAGCONFIG + if test -f "$ltmain"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + AC_FOREACH([_LT_TAG], _LT_TAGS, + echo THOMAS: tag _LT_TAG + [m4_case(_LT_TAG, + [CXX], [ + if test -n "$CXX" && test "X$CXX" != "Xno"; then + echo "THOMAS: YAY CXX" + AC_LIBTOOL_LANG_CXX_CONFIG + available_tags="$available_tags _LT_TAG" + fi], + [F77], [ + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + available_tags="$available_tags _LT_TAG" + fi], + [GCJ], [ + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + available_tags="$available_tags _LT_TAG" + fi], + [RC], [ + if test -n "$RC" && test "X$RC" != "Xno"; then + AC_LIBTOOL_LANG_RC_CONFIG + available_tags="$available_tags _LT_TAG" + fi], + [m4_errprintn(m4_location[: error: invalid tag name: ]"_LT_TAG") + m4_exit(1)]) + ]) + echo THOMAS: available tags: $available_tags + fi + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + AC_MSG_NOTICE([updated available libtool tags with $available_tags.]) + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + + fi + +])dnl _LT_AC_TAG_CONFIG +]) diff --git a/common/m4/as-libtool.m4 b/common/m4/as-libtool.m4 new file mode 100644 index 0000000..25de9d1 --- /dev/null +++ b/common/m4/as-libtool.m4 @@ -0,0 +1,45 @@ +dnl as-libtool.m4 0.1.4 + +dnl autostars m4 macro for libtool versioning + +dnl Thomas Vander Stichele + +dnl $Id: as-libtool.m4,v 1.10 2005/10/15 13:44:23 thomasvs Exp $ + +dnl AS_LIBTOOL(PREFIX, CURRENT, REVISION, AGE, [RELEASE]) + +dnl example +dnl AS_LIBTOOL(GST, 2, 0, 0) + +dnl this macro +dnl - defines [$PREFIX]_CURRENT, REVISION and AGE +dnl - defines [$PREFIX]_LIBVERSION +dnl - defines [$PREFIX]_LT_LDFLAGS to set versioning +dnl - AC_SUBST's them all + +dnl if RELEASE is given, then add a -release option to the LDFLAGS +dnl with the given release version +dnl then use [$PREFIX]_LT_LDFLAGS in the relevant Makefile.am's + +dnl call AM_PROG_LIBTOOL after this call + +AC_DEFUN([AS_LIBTOOL], +[ + [$1]_CURRENT=[$2] + [$1]_REVISION=[$3] + [$1]_AGE=[$4] + [$1]_LIBVERSION=[$2]:[$3]:[$4] + AC_SUBST([$1]_CURRENT) + AC_SUBST([$1]_REVISION) + AC_SUBST([$1]_AGE) + AC_SUBST([$1]_LIBVERSION) + + [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -version-info $[$1]_LIBVERSION" + if test ! -z "[$5]" + then + [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -release [$5]" + fi + AC_SUBST([$1]_LT_LDFLAGS) + + AC_LIBTOOL_DLOPEN +]) diff --git a/common/m4/as-objc.m4 b/common/m4/as-objc.m4 new file mode 100644 index 0000000..1e7066a --- /dev/null +++ b/common/m4/as-objc.m4 @@ -0,0 +1,56 @@ + + +# AC_PROG_OBJC([LIST-OF-COMPILERS]) +# +AC_DEFUN([AS_PROG_OBJC], +[ +AC_CHECK_TOOLS(OBJC, + [m4_default([$1], [objcc objc gcc cc CC])], + none) +AC_SUBST(OBJC) +OBJC_LDFLAGS="-lobjc" +AC_SUBST(OBJC_LDFLAGS) +if test "x$OBJC" != xnone ; then + _AM_DEPENDENCIES(OBJC) + AC_MSG_CHECKING([if Objective C compiler works]) + cat >>conftest.m < +@interface Moo:Object +{ +} +- moo; +int main(); +@end + +@implementation Moo +- moo +{ + exit(0); +} + +int main() +{ + id moo; + moo = [[Moo new]]; + [[moo moo]]; + return 1; +} +@end +EOF + ${OBJC} conftest.m ${OBJC_LDFLAGS} >&5 2>&5 + if test -f a.out -o -f a.exe ; then + result=yes + else + result=no + echo failed program is: >&5 + cat conftest.m >&5 + fi + rm -f conftest.m a.out a.exe + AC_MSG_RESULT([$result]) +else + _AM_DEPENDENCIES(OBJC) +fi + +]) + + diff --git a/common/m4/as-python.m4 b/common/m4/as-python.m4 new file mode 100644 index 0000000..eb9b175 --- /dev/null +++ b/common/m4/as-python.m4 @@ -0,0 +1,152 @@ +## ------------------------ +## Python file handling +## From Andrew Dalke +## Updated by James Henstridge +## Updated by Andy Wingo to loop through possible pythons +## ------------------------ + +# AS_PATH_PYTHON([MINIMUM-VERSION]) + +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. + +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. + +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). + +# If the MINIMUM-VERSION argument is passed, AS_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. + +# Updated to loop over all possible python binaries by Andy Wingo +# +# Updated to only warn and unset PYTHON if no good one is found + +AC_DEFUN([AS_PATH_PYTHON], + [ + dnl Find a version of Python. I could check for python versions 1.4 + dnl or earlier, but the default installation locations changed from + dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages + dnl in 1.5, and I don't want to maintain that logic. + + dnl should we do the version check? + PYTHON_CANDIDATES="python python2.2 python2.1 python2.0 python2 \ + python1.6 python1.5" + ifelse([$1],[], + [AC_PATH_PROG(PYTHON, $PYTHON_CANDIDATES)], + [ + AC_MSG_NOTICE(Looking for Python version >= $1) + changequote(<<, >>)dnl + prog=" +import sys, string +minver = '$1' +# split string by '.' and convert to numeric +minver_info = map(string.atoi, string.split(minver, '.')) +# we can now do comparisons on the two lists: +if sys.version_info >= tuple(minver_info): + sys.exit(0) +else: + sys.exit(1)" + changequote([, ])dnl + + python_good=false + for python_candidate in $PYTHON_CANDIDATES; do + unset PYTHON + AC_PATH_PROG(PYTHON, $python_candidate) 1> /dev/null 2> /dev/null + + if test "x$PYTHON" = "x"; then continue; fi + + if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC; then + AC_MSG_CHECKING(["$PYTHON":]) + AC_MSG_RESULT([okay]) + python_good=true + break; + else + dnl clear the cache val + unset ac_cv_path_PYTHON + fi + done + ]) + + if test "$python_good" != "true"; then + AC_MSG_WARN([No suitable version of python found]) + PYTHON= + else + + AC_MSG_CHECKING([local Python configuration]) + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. Need to change quote character because of [:3] + + AC_SUBST(PYTHON_VERSION) + changequote(<<, >>)dnl + PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[:3]"` + changequote([, ])dnl + + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST(PYTHON_PREFIX) + PYTHON_PREFIX='${prefix}' + + AC_SUBST(PYTHON_EXEC_PREFIX) + PYTHON_EXEC_PREFIX='${exec_prefix}' + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_SUBST(PYTHON_PLATFORM) + PYTHON_PLATFORM=`$PYTHON -c "import sys; print sys.platform"` + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behaviour + dnl is more consistent with lispdir.m4 for example. + dnl + dnl Also, if the package prefix isn't the same as python's prefix, + dnl then the old $(pythondir) was pretty useless. + + AC_SUBST(pythondir) + pythondir=$PYTHON_PREFIX"/lib/python"$PYTHON_VERSION/site-packages + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + dnl Maybe this should be put in python.am? + + AC_SUBST(pkgpythondir) + pkgpythondir=\${pythondir}/$PACKAGE + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) Was PYTHON_SITE_EXEC in previous betas. + + AC_SUBST(pyexecdir) + pyexecdir=$PYTHON_EXEC_PREFIX"/lib/python"$PYTHON_VERSION/site-packages + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + dnl Maybe this should be put in python.am? + + AC_SUBST(pkgpyexecdir) + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + AC_MSG_RESULT([looks good]) + + fi +]) diff --git a/common/m4/as-scrub-include.m4 b/common/m4/as-scrub-include.m4 new file mode 100644 index 0000000..3ed49b0 --- /dev/null +++ b/common/m4/as-scrub-include.m4 @@ -0,0 +1,36 @@ +dnl as-scrub-include.m4 0.0.4 + +dnl autostars m4 macro for scrubbing CFLAGS of system include dirs +dnl because gcc 3.x complains about including system including dirs + +dnl Thomas Vander Stichele + +dnl $Id: as-scrub-include.m4,v 1.7 2004/06/12 08:30:20 thomasvs Exp $ + +dnl This macro uses output of cpp -v and expects it to contain text that +dnl looks a little bit like this: +dnl #include <...> search starts here: +dnl /usr/local/include +dnl /usr/lib/gcc-lib/i386-redhat-linux/3.2/include +dnl /usr/include +dnl End of search list. + +dnl AS_SCRUB_INCLUDE(VAR) +dnl example +dnl AS_SCRUB_INCLUDE(CFLAGS) +dnl will remove all system include dirs from the given CFLAGS + +AC_DEFUN([AS_SCRUB_INCLUDE], +[ + GIVEN_CFLAGS=$[$1] + INCLUDE_DIRS=`echo | cpp -v 2>&1` + + dnl remove everything from this output between the "starts here" and "End of" + dnl line + INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` + for dir in $INCLUDE_DIRS; do + dnl use "" as the sed script so $dir gets expanded + GIVEN_CFLAGS=`echo $GIVEN_CFLAGS | sed -e "s#-I$dir ##"` + done + [$1]=$GIVEN_CFLAGS +]) diff --git a/common/m4/as-version.m4 b/common/m4/as-version.m4 new file mode 100644 index 0000000..22ff774 --- /dev/null +++ b/common/m4/as-version.m4 @@ -0,0 +1,75 @@ +dnl as-version.m4 0.2.0 + +dnl autostars m4 macro for versioning + +dnl Thomas Vander Stichele + +dnl $Id: as-version.m4,v 1.15 2006/04/01 09:40:24 thomasvs Exp $ + +dnl AS_VERSION + +dnl example +dnl AS_VERSION + +dnl this macro +dnl - AC_SUBST's PACKAGE_VERSION_MAJOR, _MINOR, _MICRO +dnl - AC_SUBST's PACKAGE_VERSION_RELEASE, +dnl which can be used for rpm release fields +dnl - doesn't call AM_INIT_AUTOMAKE anymore because it prevents +dnl maintainer mode from running correctly +dnl +dnl don't forget to put #undef PACKAGE_VERSION_RELEASE in acconfig.h +dnl if you use acconfig.h + +AC_DEFUN([AS_VERSION], +[ + PACKAGE_VERSION_MAJOR=$(echo AC_PACKAGE_VERSION | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo AC_PACKAGE_VERSION | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo AC_PACKAGE_VERSION | cut -d'.' -f3) + + AC_SUBST(PACKAGE_VERSION_MAJOR) + AC_SUBST(PACKAGE_VERSION_MINOR) + AC_SUBST(PACKAGE_VERSION_MICRO) +]) + +dnl AS_NANO(ACTION-IF-NANO-NON-NULL, [ACTION-IF-NANO-NULL]) + +dnl requires AC_INIT to be called before +dnl For projects using a fourth or nano number in your versioning to indicate +dnl development or prerelease snapshots, this macro allows the build to be +dnl set up differently accordingly. + +dnl this macro: +dnl - parses AC_PACKAGE_VERSION, set by AC_INIT, and extracts the nano number +dnl - sets the variable PACKAGE_VERSION_NANO +dnl - sets the variable PACKAGE_VERSION_RELEASE, which can be used +dnl for rpm release fields +dnl - executes ACTION-IF-NANO-NON-NULL or ACTION-IF-NANO-NULL + +dnl example: +dnl AS_NANO(RELEASE="yes", RELEASE="no") + +AC_DEFUN([AS_NANO], +[ + AC_MSG_CHECKING(nano version) + + NANO=$(echo AC_PACKAGE_VERSION | cut -d'.' -f4) + + if test x"$NANO" = x || test "x$NANO" = "x0" ; then + AC_MSG_RESULT([0 (release)]) + NANO=0 + PACKAGE_VERSION_RELEASE=1 + ifelse([$1], , :, [$1]) + else + AC_MSG_RESULT($NANO) + PACKAGE_VERSION_RELEASE=0.`date +%Y%m%d.%H%M%S` + if test "x$NANO" != "x1" ; then + ifelse([$1], , :, [$1]) + else + ifelse([$2], , :, [$2]) + fi + fi + PACKAGE_VERSION_NANO=$NANO + AC_SUBST(PACKAGE_VERSION_NANO) + AC_SUBST(PACKAGE_VERSION_RELEASE) +]) diff --git a/common/m4/ax_create_stdint_h.m4 b/common/m4/ax_create_stdint_h.m4 new file mode 100644 index 0000000..13bf699 --- /dev/null +++ b/common/m4/ax_create_stdint_h.m4 @@ -0,0 +1,734 @@ +##### http://autoconf-archive.cryp.to/ax_create_stdint_h.html +# +# SYNOPSIS +# +# AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])] +# +# DESCRIPTION +# +# the "ISO C9X: 7.18 Integer types " section requires the +# existence of an include file that defines a set of +# typedefs, especially uint8_t,int32_t,uintptr_t. Many older +# installations will not provide this file, but some will have the +# very same definitions in . In other enviroments we can +# use the inet-types in which would define the typedefs +# int8_t and u_int8_t respectivly. +# +# This macros will create a local "_stdint.h" or the headerfile given +# as an argument. In many cases that file will just "#include +# " or "#include ", while in other environments +# it will provide the set of basic 'stdint's definitions/typedefs: +# +# int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t +# int_least32_t.. int_fast32_t.. intmax_t +# +# which may or may not rely on the definitions of other files, or +# using the AC_CHECK_SIZEOF macro to determine the actual sizeof each +# type. +# +# if your header files require the stdint-types you will want to +# create an installable file mylib-int.h that all your other +# installable header may include. So if you have a library package +# named "mylib", just use +# +# AX_CREATE_STDINT_H(mylib-int.h) +# +# in configure.ac and go to install that very header file in +# Makefile.am along with the other headers (mylib.h) - and the +# mylib-specific headers can simply use "#include " to +# obtain the stdint-types. +# +# Remember, if the system already had a valid , the +# generated file will include it directly. No need for fuzzy +# HAVE_STDINT_H things... (oops, GCC 4.2.x has deliberatly disabled +# its stdint.h for non-c99 compilation and the c99-mode is not the +# default. Therefore this macro will not use the compiler's stdint.h +# - please complain to the GCC developers). +# +# LAST MODIFICATION +# +# 2007-06-27 +# +# COPYLEFT +# +# Copyright (c) 2007 Guido U. Draheim +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. +# +# As a special exception, the respective Autoconf Macro's copyright +# owner gives unlimited permission to copy, distribute and modify the +# configure scripts that are the output of Autoconf when processing +# the Macro. You need not follow the terms of the GNU General Public +# License when using or distributing such scripts, even though +# portions of the text of the Macro appear in them. The GNU General +# Public License (GPL) does govern all other use of the material that +# constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the +# Autoconf Macro released by the Autoconf Macro Archive. When you +# make and distribute a modified version of the Autoconf Macro, you +# may extend this special exception to the GPL to apply to your +# modified version as well. + +AC_DEFUN([AX_CHECK_DATA_MODEL],[ + AC_CHECK_SIZEOF(char) + AC_CHECK_SIZEOF(short) + AC_CHECK_SIZEOF(int) + AC_CHECK_SIZEOF(long) + AC_CHECK_SIZEOF(void*) + ac_cv_char_data_model="" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" + ac_cv_long_data_model="" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" + AC_MSG_CHECKING([data model]) + case "$ac_cv_char_data_model/$ac_cv_long_data_model" in + 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; + 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; + 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; + 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; + 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; + 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; + 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; + 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; + 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; + 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; + 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; + 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; + 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; + 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; + 222/*|333/*|444/*|666/*|888/*) : + ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; + *) ac_cv_data_model="none" ; n="very unusual model" ;; + esac + AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)]) +]) + +dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF]) +AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[ +AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[ + ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h]) + do + unset ac_cv_type_uintptr_t + unset ac_cv_type_uint64_t + AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) + m4_ifvaln([$2],[$2]) break + done + AC_MSG_CHECKING([for stdint uintptr_t]) + ]) +]) + +AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[ +AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[ + ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h]) + do + unset ac_cv_type_uint32_t + unset ac_cv_type_uint64_t + AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) + m4_ifvaln([$2],[$2]) break + break; + done + AC_MSG_CHECKING([for stdint uint32_t]) + ]) +]) + +AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[ +AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[ + ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do + unset ac_cv_type_u_int32_t + unset ac_cv_type_u_int64_t + AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>]) + m4_ifvaln([$2],[$2]) break + break; + done + AC_MSG_CHECKING([for stdint u_int32_t]) + ]) +]) + +AC_DEFUN([AX_CREATE_STDINT_H], +[# ------ AX CREATE STDINT H ------------------------------------- +AC_MSG_CHECKING([for stdint types]) +ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)` +# try to shortcircuit - if the default include path of the compiler +# can find a "stdint.h" header then we assume that all compilers can. +AC_CACHE_VAL([ac_cv_header_stdint_t],[ +old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" +old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" +old_CFLAGS="$CFLAGS" ; CFLAGS="" +AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], +[ac_cv_stdint_result="(assuming C99 compatible system)" + ac_cv_header_stdint_t="stdint.h"; ], +[ac_cv_header_stdint_t=""]) +if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then +CFLAGS="-std=c99" +AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], +[AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)]) +fi +CXXFLAGS="$old_CXXFLAGS" +CPPFLAGS="$old_CPPFLAGS" +CFLAGS="$old_CFLAGS" ]) + +v="... $ac_cv_header_stdint_h" +if test "$ac_stdint_h" = "stdint.h" ; then + AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)]) +elif test "$ac_stdint_h" = "inttypes.h" ; then + AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)]) +elif test "_$ac_cv_header_stdint_t" = "_" ; then + AC_MSG_RESULT([(putting them into $ac_stdint_h)$v]) +else + ac_cv_header_stdint="$ac_cv_header_stdint_t" + AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)]) +fi + +if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. + +dnl .....intro message done, now do a few system checks..... +dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type, +dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW +dnl instead that is triggered with 3 or more arguments (see types.m4) + +inttype_headers=`echo $2 | sed -e 's/,/ /g'` + +ac_cv_stdint_result="(no helpful system typedefs seen)" +AX_CHECK_HEADER_STDINT_X(dnl + stdint.h inttypes.h sys/inttypes.h $inttype_headers, + ac_cv_stdint_result="(seen uintptr_t$and64 in $i)") + +if test "_$ac_cv_header_stdint_x" = "_" ; then +AX_CHECK_HEADER_STDINT_O(dnl, + inttypes.h sys/inttypes.h stdint.h $inttype_headers, + ac_cv_stdint_result="(seen uint32_t$and64 in $i)") +fi + +if test "_$ac_cv_header_stdint_x" = "_" ; then +if test "_$ac_cv_header_stdint_o" = "_" ; then +AX_CHECK_HEADER_STDINT_U(dnl, + sys/types.h inttypes.h sys/inttypes.h $inttype_headers, + ac_cv_stdint_result="(seen u_int32_t$and64 in $i)") +fi fi + +dnl if there was no good C99 header file, do some typedef checks... +if test "_$ac_cv_header_stdint_x" = "_" ; then + AC_MSG_CHECKING([for stdint datatype model]) + AC_MSG_RESULT([(..)]) + AX_CHECK_DATA_MODEL +fi + +if test "_$ac_cv_header_stdint_x" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_x" +elif test "_$ac_cv_header_stdint_o" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_o" +elif test "_$ac_cv_header_stdint_u" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_u" +else + ac_cv_header_stdint="stddef.h" +fi + +AC_MSG_CHECKING([for extra inttypes in chosen header]) +AC_MSG_RESULT([($ac_cv_header_stdint)]) +dnl see if int_least and int_fast types are present in _this_ header. +unset ac_cv_type_int_least32_t +unset ac_cv_type_int_fast32_t +AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>]) +AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>]) +AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>]) + +fi # shortcircut to system "stdint.h" +# ------------------ PREPARE VARIABLES ------------------------------ +if test "$GCC" = "yes" ; then +ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` +else +ac_cv_stdint_message="using $CC" +fi + +AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl +$ac_cv_stdint_result]) + +dnl ----------------------------------------------------------------- +# ----------------- DONE inttypes.h checks START header ------------- +AC_CONFIG_COMMANDS([$ac_stdint_h],[ +AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h) +ac_stdint=$tmp/_stdint.h + +echo "#ifndef" $_ac_stdint_h >$ac_stdint +echo "#define" $_ac_stdint_h "1" >>$ac_stdint +echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint +echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint +echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint +if test "_$ac_cv_header_stdint_t" != "_" ; then +echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint +echo "#include " >>$ac_stdint +echo "#endif" >>$ac_stdint +echo "#endif" >>$ac_stdint +else + +cat >>$ac_stdint < +#else +#include + +/* .................... configured part ............................ */ + +STDINT_EOF + +echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint +if test "_$ac_cv_header_stdint_x" != "_" ; then + ac_header="$ac_cv_header_stdint_x" + echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint +fi + +echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint +if test "_$ac_cv_header_stdint_o" != "_" ; then + ac_header="$ac_cv_header_stdint_o" + echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint +fi + +echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint +if test "_$ac_cv_header_stdint_u" != "_" ; then + ac_header="$ac_cv_header_stdint_u" + echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint +fi + +echo "" >>$ac_stdint + +if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then + echo "#include <$ac_header>" >>$ac_stdint + echo "" >>$ac_stdint +fi fi + +echo "/* which 64bit typedef has been found */" >>$ac_stdint +if test "$ac_cv_type_uint64_t" = "yes" ; then +echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint +fi +if test "$ac_cv_type_u_int64_t" = "yes" ; then +echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint +fi +echo "" >>$ac_stdint + +echo "/* which type model has been detected */" >>$ac_stdint +if test "_$ac_cv_char_data_model" != "_" ; then +echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint +echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint +else +echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint +echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint +fi +echo "" >>$ac_stdint + +echo "/* whether int_least types were detected */" >>$ac_stdint +if test "$ac_cv_type_int_least32_t" = "yes"; then +echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint +fi +echo "/* whether int_fast types were detected */" >>$ac_stdint +if test "$ac_cv_type_int_fast32_t" = "yes"; then +echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint +fi +echo "/* whether intmax_t type was detected */" >>$ac_stdint +if test "$ac_cv_type_intmax_t" = "yes"; then +echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint +fi +echo "" >>$ac_stdint + + cat >>$ac_stdint <= 199901L +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef long long int64_t; +typedef unsigned long long uint64_t; + +#elif !defined __STRICT_ANSI__ +#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ +#define _HAVE_UINT64_T +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; + +#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ +/* note: all ELF-systems seem to have loff-support which needs 64-bit */ +#if !defined _NO_LONGLONG +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef long long int64_t; +typedef unsigned long long uint64_t; +#endif + +#elif defined __alpha || (defined __mips && defined _ABIN32) +#if !defined _NO_LONGLONG +typedef long int64_t; +typedef unsigned long uint64_t; +#endif + /* compiler/cpu type to define int64_t */ +#endif +#endif +#endif + +#if defined _STDINT_HAVE_U_INT_TYPES +/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ +typedef u_int8_t uint8_t; +typedef u_int16_t uint16_t; +typedef u_int32_t uint32_t; + +/* glibc compatibility */ +#ifndef __int8_t_defined +#define __int8_t_defined +#endif +#endif + +#ifdef _STDINT_NEED_INT_MODEL_T +/* we must guess all the basic types. Apart from byte-adressable system, */ +/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ +/* (btw, those nibble-addressable systems are way off, or so we assume) */ + +dnl /* have a look at "64bit and data size neutrality" at */ +dnl /* http://unix.org/version2/whatsnew/login_64bit.html */ +dnl /* (the shorthand "ILP" types always have a "P" part) */ + +#if defined _STDINT_BYTE_MODEL +#if _STDINT_LONG_MODEL+0 == 242 +/* 2:4:2 = IP16 = a normal 16-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef long int32_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 +/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ +/* 4:4:4 = ILP32 = a normal 32-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 +/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ +/* 4:8:8 = LP64 = a normal 64-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +/* this system has a "long" of 64bit */ +#ifndef _HAVE_UINT64_T +#define _HAVE_UINT64_T +typedef unsigned long uint64_t; +typedef long int64_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 448 +/* LLP64 a 64-bit system derived from a 32-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +/* assuming the system has a "long long" */ +#ifndef _HAVE_UINT64_T +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef unsigned long long uint64_t; +typedef long long int64_t; +#endif +#else +#define _STDINT_NO_INT32_T +#endif +#else +#define _STDINT_NO_INT8_T +#define _STDINT_NO_INT32_T +#endif +#endif + +/* + * quote from SunOS-5.8 sys/inttypes.h: + * Use at your own risk. As of February 1996, the committee is squarely + * behind the fixed sized types; the "least" and "fast" types are still being + * discussed. The probability that the "fast" types may be removed before + * the standard is finalized is high enough that they are not currently + * implemented. + */ + +#if defined _STDINT_NEED_INT_LEAST_T +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +#ifdef _HAVE_UINT64_T +typedef int64_t int_least64_t; +#endif + +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +#ifdef _HAVE_UINT64_T +typedef uint64_t uint_least64_t; +#endif + /* least types */ +#endif + +#if defined _STDINT_NEED_INT_FAST_T +typedef int8_t int_fast8_t; +typedef int int_fast16_t; +typedef int32_t int_fast32_t; +#ifdef _HAVE_UINT64_T +typedef int64_t int_fast64_t; +#endif + +typedef uint8_t uint_fast8_t; +typedef unsigned uint_fast16_t; +typedef uint32_t uint_fast32_t; +#ifdef _HAVE_UINT64_T +typedef uint64_t uint_fast64_t; +#endif + /* fast types */ +#endif + +#ifdef _STDINT_NEED_INTMAX_T +#ifdef _HAVE_UINT64_T +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; +#else +typedef long intmax_t; +typedef unsigned long uintmax_t; +#endif +#endif + +#ifdef _STDINT_NEED_INTPTR_T +#ifndef __intptr_t_defined +#define __intptr_t_defined +/* we encourage using "long" to store pointer values, never use "int" ! */ +#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 +typedef unsigned int uintptr_t; +typedef int intptr_t; +#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 +typedef unsigned long uintptr_t; +typedef long intptr_t; +#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T +typedef uint64_t uintptr_t; +typedef int64_t intptr_t; +#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ +typedef unsigned long uintptr_t; +typedef long intptr_t; +#endif +#endif +#endif + +/* The ISO C99 standard specifies that in C++ implementations these + should only be defined if explicitly requested. */ +#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS +#ifndef UINT32_C + +/* Signed. */ +# define INT8_C(c) c +# define INT16_C(c) c +# define INT32_C(c) c +# ifdef _HAVE_LONGLONG_UINT64_T +# define INT64_C(c) c ## L +# else +# define INT64_C(c) c ## LL +# endif + +/* Unsigned. */ +# define UINT8_C(c) c ## U +# define UINT16_C(c) c ## U +# define UINT32_C(c) c ## U +# ifdef _HAVE_LONGLONG_UINT64_T +# define UINT64_C(c) c ## UL +# else +# define UINT64_C(c) c ## ULL +# endif + +/* Maximal type. */ +# ifdef _HAVE_LONGLONG_UINT64_T +# define INTMAX_C(c) c ## L +# define UINTMAX_C(c) c ## UL +# else +# define INTMAX_C(c) c ## LL +# define UINTMAX_C(c) c ## ULL +# endif + + /* literalnumbers */ +#endif +#endif + +/* These limits are merily those of a two complement byte-oriented system */ + +/* Minimum of signed integral types. */ +# define INT8_MIN (-128) +# define INT16_MIN (-32767-1) +# define INT32_MIN (-2147483647-1) +# define INT64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types. */ +# define INT8_MAX (127) +# define INT16_MAX (32767) +# define INT32_MAX (2147483647) +# define INT64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types. */ +# define UINT8_MAX (255) +# define UINT16_MAX (65535) +# define UINT32_MAX (4294967295U) +# define UINT64_MAX (__UINT64_C(18446744073709551615)) + +/* Minimum of signed integral types having a minimum size. */ +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST32_MIN INT32_MIN +# define INT_LEAST64_MIN INT64_MIN +/* Maximum of signed integral types having a minimum size. */ +# define INT_LEAST8_MAX INT8_MAX +# define INT_LEAST16_MAX INT16_MAX +# define INT_LEAST32_MAX INT32_MAX +# define INT_LEAST64_MAX INT64_MAX + +/* Maximum of unsigned integral types having a minimum size. */ +# define UINT_LEAST8_MAX UINT8_MAX +# define UINT_LEAST16_MAX UINT16_MAX +# define UINT_LEAST32_MAX UINT32_MAX +# define UINT_LEAST64_MAX UINT64_MAX + + /* shortcircuit*/ +#endif + /* once */ +#endif +#endif +STDINT_EOF +fi + if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then + AC_MSG_NOTICE([$ac_stdint_h is unchanged]) + else + ac_dir=`AS_DIRNAME(["$ac_stdint_h"])` + AS_MKDIR_P(["$ac_dir"]) + rm -f $ac_stdint_h + mv $ac_stdint $ac_stdint_h + fi +],[# variables for create stdint.h replacement +PACKAGE="$PACKAGE" +VERSION="$VERSION" +ac_stdint_h="$ac_stdint_h" +_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h) +ac_cv_stdint_message="$ac_cv_stdint_message" +ac_cv_header_stdint_t="$ac_cv_header_stdint_t" +ac_cv_header_stdint_x="$ac_cv_header_stdint_x" +ac_cv_header_stdint_o="$ac_cv_header_stdint_o" +ac_cv_header_stdint_u="$ac_cv_header_stdint_u" +ac_cv_type_uint64_t="$ac_cv_type_uint64_t" +ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" +ac_cv_char_data_model="$ac_cv_char_data_model" +ac_cv_long_data_model="$ac_cv_long_data_model" +ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" +ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" +ac_cv_type_intmax_t="$ac_cv_type_intmax_t" +]) +]) diff --git a/common/m4/check.m4 b/common/m4/check.m4 new file mode 100644 index 0000000..afd26eb --- /dev/null +++ b/common/m4/check.m4 @@ -0,0 +1,181 @@ +dnl _AM_TRY_CHECK(MINIMUM-VERSION, EXTRA-CFLAGS, EXTRA-LIBS, CHECK-LIB-NAME +dnl [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl Test for check, and define CHECK_CFLAGS and CHECK_LIBS +dnl Done this way because of the brokenness that is +dnl https://launchpad.net/distros/ubuntu/+source/check/+bug/5840 +dnl + +AC_DEFUN([_AM_TRY_CHECK], +[ + min_check_version=$1 + extra_cflags=$2 + extra_libs=$3 + check_lib_name=$4 + + CHECK_CFLAGS="$extra_cflags" + CHECK_LIBS="$extra_libs -l$check_lib_name" + + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + + CFLAGS="$CFLAGS $CHECK_CFLAGS" + LIBS="$CHECK_LIBS $LIBS" + + AC_MSG_CHECKING(for check named $check_lib_name - version >= $min_check_version) + + rm -f conf.check-test + dnl unset no_check, since in our second run it would have been set to yes + dnl before + no_check= + AC_TRY_RUN([ +#include +#include + +#include + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.check-test"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = strdup("$min_check_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_check_version"); + return 1; + } + + if ((CHECK_MAJOR_VERSION != check_major_version) || + (CHECK_MINOR_VERSION != check_minor_version) || + (CHECK_MICRO_VERSION != check_micro_version)) + { + printf("\n*** The check header file (version %d.%d.%d) does not match\n", + CHECK_MAJOR_VERSION, CHECK_MINOR_VERSION, CHECK_MICRO_VERSION); + printf("*** the check library (version %d.%d.%d).\n", + check_major_version, check_minor_version, check_micro_version); + return 1; + } + + if ((check_major_version > major) || + ((check_major_version == major) && (check_minor_version > minor)) || + ((check_major_version == major) && (check_minor_version == minor) && (check_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of check (%d.%d.%d) was found.\n", + check_major_version, check_minor_version, check_micro_version); + printf("*** You need a version of check being at least %d.%d.%d.\n", major, minor, micro); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the check library and header\n"); + printf("*** file is being found. Rerun configure with the --with-check=PATH option\n"); + printf("*** to specify the prefix where the correct version was installed.\n"); + } + + return 1; +} +],, no_check=yes, [echo $ac_n "cross compiling; assumed OK... $ac_c"]) + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + + if test "x$no_check" = x ; then + AC_MSG_RESULT(yes) + ifelse([$5], , :, [$5]) + else + AC_MSG_RESULT(no) + if test -f conf.check-test ; then + : + else + echo "*** Could not run check test program, checking why..." + CFLAGS="$CFLAGS $CHECK_CFLAGS" + LIBS="$CHECK_LIBS $LIBS" + AC_TRY_LINK([ +#include +#include + +#include +], , [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding check. You'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for" + echo "*** the exact error that occured." ]) + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + + CHECK_CFLAGS="" + CHECK_LIBS="" + + rm -f conf.check-test + ifelse([$6], , AC_MSG_ERROR([check not found]), [$6]) + fi +]) + + +dnl AM_PATH_CHECK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for check, and define CHECK_CFLAGS and CHECK_LIBS +dnl + +AC_DEFUN([AM_PATH_CHECK], +[ + AC_ARG_WITH(check, + [ --with-check=PATH prefix where check is installed [default=auto]]) + + AC_ARG_WITH(checklibname, + AC_HELP_STRING([--with-check-lib-name=NAME], + [name of the PIC check library (default=check)])) + + min_check_version=ifelse([$1], ,0.8.2,$1) + + if test x$with_check = xno; then + AC_MSG_RESULT(disabled) + ifelse([$3], , AC_MSG_ERROR([disabling check is not supported]), [$3]) + else + if test "x$with_check" != x; then + CHECK_EXTRA_CFLAGS="-I$with_check/include" + CHECK_EXTRA_LIBS="-L$with_check/lib" + else + CHECK_EXTRA_CFLAGS="" + CHECK_EXTRA_LIBS="" + fi + + if test x$with_checklibname = x; then + _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS, + check_pic, [have_check=true], [have_check=false]) + if test x$have_check = xtrue; then + ifelse([$2], , :, [$2]) + else + _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS, + check, [have_check=true], [have_check=false]) + if test x$have_check = xtrue; then + ifelse([$2], , :, [$2]) + else + ifelse([$3], , AC_MSG_ERROR([check not found]), [$3]) + fi + fi + else + _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS, + $with_checklibname, [have_check=true], [have_check=false]) + if test x$have_check = xtrue; then + ifelse([$2], , :, [$2]) + else + ifelse([$3], , AC_MSG_ERROR([check not found]), [$3]) + fi + fi + + AC_SUBST(CHECK_CFLAGS) + AC_SUBST(CHECK_LIBS) + rm -f conf.check-test + fi +]) diff --git a/common/m4/glib-gettext.m4 b/common/m4/glib-gettext.m4 new file mode 100644 index 0000000..f8d442f --- /dev/null +++ b/common/m4/glib-gettext.m4 @@ -0,0 +1,432 @@ +# Copyright (C) 1995-2002 Free Software Foundation, Inc. +# Copyright (C) 2001-2003,2004 Red Hat, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995, 1996 +# +# Modified to never use included libintl. +# Owen Taylor , 12/15/1998 +# +# Major rework to remove unused code +# Owen Taylor , 12/11/2002 +# +# Added better handling of ALL_LINGUAS from GNU gettext version +# written by Bruno Haible, Owen Taylor 5/30/3002 +# +# Modified to require ngettext +# Matthias Clasen 08/06/2004 +# +# We need this here as well, since someone might use autoconf-2.5x +# to configure GLib then an older version to configure a package +# using AM_GLIB_GNU_GETTEXT +AC_PREREQ(2.53) + +dnl +dnl We go to great lengths to make sure that aclocal won't +dnl try to pull in the installed version of these macros +dnl when running aclocal in the glib directory. +dnl +m4_copy([AC_DEFUN],[glib_DEFUN]) +m4_copy([AC_REQUIRE],[glib_REQUIRE]) +dnl +dnl At the end, if we're not within glib, we'll define the public +dnl definitions in terms of our private definitions. +dnl + +# GLIB_LC_MESSAGES +#-------------------- +glib_DEFUN([GLIB_LC_MESSAGES], + [AC_CHECK_HEADERS([locale.h]) + if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi + fi]) + +# GLIB_PATH_PROG_WITH_TEST +#---------------------------- +dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# GLIB_WITH_NLS +#----------------- +glib_DEFUN([GLIB_WITH_NLS], + dnl NLS is obligatory + [USE_NLS=yes + AC_SUBST(USE_NLS) + + gt_cv_have_gettext=no + + CATOBJEXT=NONE + XGETTEXT=: + INTLLIBS= + + AC_CHECK_HEADER(libintl.h, + [gt_cv_func_dgettext_libintl="no" + libintl_extra_libs="" + + # + # First check in libc + # + AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, + [AC_TRY_LINK([ +#include +], + [return !ngettext ("","", 1)], + gt_cv_func_ngettext_libc=yes, + gt_cv_func_ngettext_libc=no) + ]) + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, + [AC_TRY_LINK([ +#include +], + [return !dgettext ("","")], + gt_cv_func_dgettext_libc=yes, + gt_cv_func_dgettext_libc=no) + ]) + fi + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CHECK_FUNCS(bind_textdomain_codeset) + fi + + # + # If we don't have everything we want, check in libintl + # + if test "$gt_cv_func_dgettext_libc" != "yes" \ + || test "$gt_cv_func_ngettext_libc" != "yes" \ + || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then + + AC_CHECK_LIB(intl, bindtextdomain, + [AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dgettext, + gt_cv_func_dgettext_libintl=yes)])]) + + if test "$gt_cv_func_dgettext_libintl" != "yes" ; then + AC_MSG_CHECKING([if -liconv is needed to use gettext]) + AC_MSG_RESULT([]) + AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dcgettext, + [gt_cv_func_dgettext_libintl=yes + libintl_extra_libs=-liconv], + :,-liconv)], + :,-liconv) + fi + + # + # If we found libintl, then check in it for bind_textdomain_codeset(); + # we'll prefer libc if neither have bind_textdomain_codeset(), + # and both have dgettext and ngettext + # + if test "$gt_cv_func_dgettext_libintl" = "yes" ; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $libintl_extra_libs" + unset ac_cv_func_bind_textdomain_codeset + AC_CHECK_FUNCS(bind_textdomain_codeset) + LIBS="$glib_save_LIBS" + + if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then + gt_cv_func_dgettext_libc=no + else + if test "$gt_cv_func_dgettext_libc" = "yes" \ + && test "$gt_cv_func_ngettext_libc" = "yes"; then + gt_cv_func_dgettext_libintl=no + fi + fi + fi + fi + + if test "$gt_cv_func_dgettext_libc" = "yes" \ + || test "$gt_cv_func_dgettext_libintl" = "yes"; then + gt_cv_have_gettext=yes + fi + + if test "$gt_cv_func_dgettext_libintl" = "yes"; then + INTLLIBS="-lintl $libintl_extra_libs" + fi + + if test "$gt_cv_have_gettext" = "yes"; then + AC_DEFINE(HAVE_GETTEXT,1, + [Define if the GNU gettext() function is already present or preinstalled.]) + GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + MSGFMT_OPTS= + AC_MSG_CHECKING([if msgfmt accepts -c]) + GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: test 1.0\n" +"PO-Revision-Date: 2007-02-15 12:01+0100\n" +"Last-Translator: test \n" +"Language-Team: C \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) + AC_SUBST(MSGFMT_OPTS) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [CATOBJEXT=.gmo + DATADIRNAME=share], + [case $host in + *-*-solaris*) + dnl On Solaris, if bind_textdomain_codeset is in libc, + dnl GNU format message catalog is always supported, + dnl since both are added to the libc all together. + dnl Hence, we'd like to go with DATADIRNAME=share and + dnl and CATOBJEXT=.gmo in this case. + AC_CHECK_FUNC(bind_textdomain_codeset, + [CATOBJEXT=.gmo + DATADIRNAME=share], + [CATOBJEXT=.mo + DATADIRNAME=lib]) + ;; + *) + CATOBJEXT=.mo + DATADIRNAME=lib + ;; + esac]) + LIBS="$glib_save_LIBS" + INSTOBJEXT=.mo + else + gt_cv_have_gettext=no + fi + fi + ]) + + if test "$gt_cv_have_gettext" = "yes" ; then + AC_DEFINE(ENABLE_NLS, 1, + [always defined to indicate that i18n is enabled]) + fi + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is not GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + + AC_OUTPUT_COMMANDS( + [case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac]) + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(DATADIRNAME) + AC_SUBST(GMOFILES) + AC_SUBST(INSTOBJEXT) + AC_SUBST(INTLLIBS) + AC_SUBST(PO_IN_DATADIR_TRUE) + AC_SUBST(PO_IN_DATADIR_FALSE) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + ]) + +# AM_GLIB_GNU_GETTEXT +# ------------------- +# Do checks necessary for use of gettext. If a suitable implementation +# of gettext is found in either in libintl or in the C library, +# it will set INTLLIBS to the libraries needed for use of gettext +# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable +# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() +# on various variables needed by the Makefile.in.in installed by +# glib-gettextize. +dnl +glib_DEFUN([GLIB_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + + GLIB_LC_MESSAGES + GLIB_WITH_NLS + + if test "$gt_cv_have_gettext" = "yes"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Generate list of files to be processed by xgettext which will + dnl be included in po/Makefile. + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + ]) + +# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) +# ------------------------------- +# Define VARIABLE to the location where catalog files will +# be installed by po/Makefile. +glib_DEFUN([GLIB_DEFINE_LOCALEDIR], +[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl +glib_save_prefix="$prefix" +glib_save_exec_prefix="$exec_prefix" +glib_save_datarootdir="$datarootdir" +test "x$prefix" = xNONE && prefix=$ac_default_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +datarootdir=`eval echo "${datarootdir}"` +if test "x$CATOBJEXT" = "x.mo" ; then + localedir=`eval echo "${libdir}/locale"` +else + localedir=`eval echo "${datadir}/locale"` +fi +prefix="$glib_save_prefix" +exec_prefix="$glib_save_exec_prefix" +datarootdir="$glib_save_datarootdir" +AC_DEFINE_UNQUOTED($1, "$localedir", + [Define the location where the catalogs will be installed]) +]) + +dnl +dnl Now the definitions that aclocal will find +dnl +ifdef(glib_configure_in,[],[ +AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) +AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) +])dnl + +# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) +# +# Create a temporary file with TEST-FILE as its contents and pass the +# file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with +# 0 and perform ACTION-IF-FAIL for any other exit status. +AC_DEFUN([GLIB_RUN_PROG], +[cat >conftest.foo <<_ACEOF +$2 +_ACEOF +if AC_RUN_LOG([$1 conftest.foo]); then + m4_ifval([$3], [$3], [:]) +m4_ifvaln([$4], [else $4])dnl +echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD +sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD +fi]) + diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4 new file mode 100644 index 0000000..2e935d2 --- /dev/null +++ b/common/m4/gst-arch.m4 @@ -0,0 +1,141 @@ +dnl AG_GST_ARCH +dnl sets up defines and automake conditionals for host architecture +dnl checks endianness +dnl defines HOST_CPU + +AC_DEFUN([AG_GST_ARCH], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables + + dnl Determine CPU + case "x${host_cpu}" in + xi?86 | xk? | xi?86_64) + case $host_os in + solaris*) + AC_CHECK_DECL([__i386], [I386_ABI="yes"], [I386_ABI="no"]) + AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"]) + + if test "x$I386_ABI" = "xyes" ; then + HAVE_CPU_I386=yes + AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86]) + fi + if test "x$AMD64_ABI" = "xyes" ; then + HAVE_CPU_X86_64=yes + AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64]) + fi + ;; + *) + HAVE_CPU_I386=yes + AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86]) + + dnl FIXME could use some better detection + dnl (ie CPUID) + case "x${host_cpu}" in + xi386 | xi486) ;; + *) + AC_DEFINE(HAVE_RDTSC, 1, [Define if RDTSC is available]) ;; + esac + ;; + esac + ;; + xpowerpc) + HAVE_CPU_PPC=yes + AC_DEFINE(HAVE_CPU_PPC, 1, [Define if the host CPU is a PowerPC]) ;; + xpowerpc64) + HAVE_CPU_PPC64=yes + AC_DEFINE(HAVE_CPU_PPC64, 1, [Define if the host CPU is a 64 bit PowerPC]) ;; + xalpha*) + HAVE_CPU_ALPHA=yes + AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the host CPU is an Alpha]) ;; + xarm*) + HAVE_CPU_ARM=yes + AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the host CPU is an ARM]) ;; + xsparc*) + HAVE_CPU_SPARC=yes + AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the host CPU is a SPARC]) ;; + xmips*) + HAVE_CPU_MIPS=yes + AC_DEFINE(HAVE_CPU_MIPS, 1, [Define if the host CPU is a MIPS]) ;; + xhppa*) + HAVE_CPU_HPPA=yes + AC_DEFINE(HAVE_CPU_HPPA, 1, [Define if the host CPU is a HPPA]) ;; + xs390*) + HAVE_CPU_S390=yes + AC_DEFINE(HAVE_CPU_S390, 1, [Define if the host CPU is a S390]) ;; + xia64*) + HAVE_CPU_IA64=yes + AC_DEFINE(HAVE_CPU_IA64, 1, [Define if the host CPU is a IA64]) ;; + xm68k*) + HAVE_CPU_M68K=yes + AC_DEFINE(HAVE_CPU_M68K, 1, [Define if the host CPU is a M68K]) ;; + xx86_64) + HAVE_CPU_X86_64=yes + AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64]) ;; + xcris) + HAVE_CPU_CRIS=yes + AC_DEFINE(HAVE_CPU_CRIS, 1, [Define if the host CPU is a CRIS]) ;; + xcrisv32) + HAVE_CPU_CRISV32=yes + AC_DEFINE(HAVE_CPU_CRISV32, 1, [Define if the host CPU is a CRISv32]) ;; + esac + + dnl Determine endianness + AC_C_BIGENDIAN + + AM_CONDITIONAL(HAVE_CPU_I386, test "x$HAVE_CPU_I386" = "xyes") + AM_CONDITIONAL(HAVE_CPU_PPC, test "x$HAVE_CPU_PPC" = "xyes") + AM_CONDITIONAL(HAVE_CPU_PPC64, test "x$HAVE_CPU_PPC64" = "xyes") + AM_CONDITIONAL(HAVE_CPU_ALPHA, test "x$HAVE_CPU_ALPHA" = "xyes") + AM_CONDITIONAL(HAVE_CPU_ARM, test "x$HAVE_CPU_ARM" = "xyes") + AM_CONDITIONAL(HAVE_CPU_SPARC, test "x$HAVE_CPU_SPARC" = "xyes") + AM_CONDITIONAL(HAVE_CPU_HPPA, test "x$HAVE_CPU_HPPA" = "xyes") + AM_CONDITIONAL(HAVE_CPU_MIPS, test "x$HAVE_CPU_MIPS" = "xyes") + AM_CONDITIONAL(HAVE_CPU_S390, test "x$HAVE_CPU_S390" = "xyes") + AM_CONDITIONAL(HAVE_CPU_IA64, test "x$HAVE_CPU_IA64" = "xyes") + AM_CONDITIONAL(HAVE_CPU_M68K, test "x$HAVE_CPU_M68K" = "xyes") + AM_CONDITIONAL(HAVE_CPU_X86_64, test "x$HAVE_CPU_X86_64" = "xyes") + AM_CONDITIONAL(HAVE_CPU_CRIS, test "x$HAVE_CPU_CRIS" = "xyes") + AM_CONDITIONAL(HAVE_CPU_CRISV32, test "x$HAVE_CPU_CRISV32" = "xyes") + + AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu", [the host CPU]) +]) + +dnl check if unaligned memory access works correctly +AC_DEFUN([AG_GST_UNALIGNED_ACCESS], [ + AC_MSG_CHECKING([if unaligned memory access works correctly]) + if test x"$as_cv_unaligned_access" = x ; then + case $host in + alpha*|arm*|hp*|mips*|sh*|sparc*|ia64*) + _AS_ECHO_N([(blacklisted) ]) + as_cv_unaligned_access=no + ;; + i?86*|x86_64*|amd64*|powerpc*|m68k*|cris*) + _AS_ECHO_N([(whitelisted) ]) + as_cv_unaligned_access=yes + ;; + esac + else + _AS_ECHO_N([(cached) ]) + fi + if test x"$as_cv_unaligned_access" = x ; then + AC_TRY_RUN([ +int main(int argc, char **argv) +{ + char array[] = "ABCDEFGH"; + unsigned int iarray[2]; + memcpy(iarray,array,8); +#define GET(x) (*(unsigned int *)((char *)iarray + (x))) + if(GET(0) != 0x41424344 && GET(0) != 0x44434241) return 1; + if(GET(1) != 0x42434445 && GET(1) != 0x45444342) return 1; + if(GET(2) != 0x43444546 && GET(2) != 0x46454443) return 1; + if(GET(3) != 0x44454647 && GET(3) != 0x47464544) return 1; + return 0; +} + ], as_cv_unaligned_access="yes", as_cv_unaligned_access="no") + fi + AC_MSG_RESULT($as_cv_unaligned_access) + if test "$as_cv_unaligned_access" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_UNALIGNED_ACCESS, 1, + [defined if unaligned memory access works correctly]) + fi +]) diff --git a/common/m4/gst-args.m4 b/common/m4/gst-args.m4 new file mode 100644 index 0000000..030e7ac --- /dev/null +++ b/common/m4/gst-args.m4 @@ -0,0 +1,327 @@ +dnl configure-time options shared among gstreamer modules + +dnl AG_GST_ARG_DEBUG +dnl AG_GST_ARG_PROFILING +dnl AG_GST_ARG_VALGRIND +dnl AG_GST_ARG_GCOV + +dnl AG_GST_ARG_EXAMPLES + +dnl AG_GST_ARG_WITH_PKG_CONFIG_PATH +dnl AG_GST_ARG_WITH_PACKAGE_NAME +dnl AG_GST_ARG_WITH_PACKAGE_ORIGIN + +dnl AG_GST_ARG_WITH_PLUGINS +dnl AG_GST_CHECK_PLUGIN +dnl AG_GST_DISABLE_PLUGIN + +dnl AG_GST_ARG_ENABLE_EXTERNAL +dnl AG_GST_ARG_ENABLE_EXPERIMENTAL +dnl AG_GST_ARG_ENABLE_BROKEN + +AC_DEFUN([AG_GST_ARG_DEBUG], +[ + dnl debugging stuff + AC_ARG_ENABLE(debug, + AC_HELP_STRING([--disable-debug],[disable addition of -g debugging info]), + [ + case "${enableval}" in + yes) USE_DEBUG=yes ;; + no) USE_DEBUG=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; + esac + ], + [USE_DEBUG=yes]) dnl Default value +]) + +AC_DEFUN([AG_GST_ARG_PROFILING], +[ + AC_ARG_ENABLE(profiling, + AC_HELP_STRING([--enable-profiling], + [adds -pg to compiler commandline, for profiling]), + [ + case "${enableval}" in + yes) USE_PROFILING=yes ;; + no) USE_PROFILING=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-profiling) ;; + esac + ], + [USE_PROFILING=no]) dnl Default value +]) + +AC_DEFUN([AG_GST_ARG_VALGRIND], +[ + dnl valgrind inclusion + AC_ARG_ENABLE(valgrind, + AC_HELP_STRING([--disable-valgrind],[disable run-time valgrind detection]), + [ + case "${enableval}" in + yes) USE_VALGRIND="$USE_DEBUG" ;; + no) USE_VALGRIND=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind) ;; + esac + ], + [USE_VALGRIND="$USE_DEBUG"]) dnl Default value + VALGRIND_REQ="3.0" + if test "x$USE_VALGRIND" = xyes; then + PKG_CHECK_MODULES(VALGRIND, valgrind >= $VALGRIND_REQ, + USE_VALGRIND="yes", + USE_VALGRIND="no") + fi + if test "x$USE_VALGRIND" = xyes; then + AC_DEFINE(HAVE_VALGRIND, 1, [Define if valgrind should be used]) + AC_MSG_NOTICE(Using extra code paths for valgrind) + fi +]) + +AC_DEFUN([AG_GST_ARG_GCOV], +[ + AC_ARG_ENABLE(gcov, + AC_HELP_STRING([--enable-gcov], + [compile with coverage profiling instrumentation (gcc only)]), + enable_gcov=$enableval, + enable_gcov=no) + if test x$enable_gcov = xyes ; then + if test "x$GCC" != "xyes" + then + AC_MSG_ERROR([gcov only works if gcc is used]) + fi + + AS_COMPILER_FLAG(["-fprofile-arcs"], + [GCOV_CFLAGS="$GCOV_CFLAGS -fprofile-arcs"], + true) + AS_COMPILER_FLAG(["-ftest-coverage"], + [GCOV_CFLAGS="$GCOV_CFLAGS -ftest-coverage"], + true) + dnl remove any -O flags - FIXME: is this needed ? + GCOV_CFLAGS=`echo "$GCOV_CFLAGS" | sed -e 's/-O[[0-9]]*//g'` + dnl libtool 1.5.22 and lower strip -fprofile-arcs from the flags + dnl passed to the linker, which is a bug; -fprofile-arcs implicitly + dnl links in -lgcov, so we do it explicitly here for the same effect + GCOV_LIBS=-lgcov + AC_SUBST(GCOV_CFLAGS) + AC_SUBST(GCOV_LIBS) + GCOV=`echo $CC | sed s/gcc/gcov/g` + AC_SUBST(GCOV) + + GST_GCOV_ENABLED=yes + AC_DEFINE_UNQUOTED(GST_GCOV_ENABLED, 1, + [Defined if gcov is enabled to force a rebuild due to config.h changing]) + dnl if gcov is used, we do not want default -O2 CFLAGS + if test "x$GST_GCOV_ENABLED" = "xyes" + then + CFLAGS="-O0" + AC_SUBST(CFLAGS) + CXXFLAGS="-O0" + AC_SUBST(CXXFLAGS) + FFLAGS="-O0" + AC_SUBST(FFLAGS) + CCASFLAGS="-O0" + AC_SUBST(CCASFLAGS) + AC_MSG_NOTICE([gcov enabled, setting CFLAGS and friends to $CFLAGS]) + fi + fi + AM_CONDITIONAL(GST_GCOV_ENABLED, test x$enable_gcov = xyes) +]) + +AC_DEFUN([AG_GST_ARG_EXAMPLES], +[ + AC_ARG_ENABLE(examples, + AC_HELP_STRING([--disable-examples], [disable building examples]), + [ + case "${enableval}" in + yes) BUILD_EXAMPLES=yes ;; + no) BUILD_EXAMPLES=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --disable-examples) ;; + esac + ], + [BUILD_EXAMPLES=yes]) dnl Default value + AM_CONDITIONAL(BUILD_EXAMPLES, test "x$BUILD_EXAMPLES" = "xyes") +]) + +AC_DEFUN([AG_GST_ARG_WITH_PKG_CONFIG_PATH], +[ + dnl possibly modify pkg-config path + AC_ARG_WITH(pkg-config-path, + AC_HELP_STRING([--with-pkg-config-path], + [colon-separated list of pkg-config(1) dirs]), + [ + export PKG_CONFIG_PATH=${withval} + AC_MSG_NOTICE(Set PKG_CONFIG_PATH to $PKG_CONFIG_PATH) + ]) +]) + + +dnl This macro requires that GST_GIT or GST_CVS is set to yes or no (release) +AC_DEFUN([AG_GST_ARG_WITH_PACKAGE_NAME], +[ + dnl package name in plugins + AC_ARG_WITH(package-name, + AC_HELP_STRING([--with-package-name], + [specify package name to use in plugins]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-package-name) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-package-name) ;; + *) GST_PACKAGE_NAME="${withval}" ;; + esac + ], + [ + P=$1 + if test "x$P" = "x" + then + P=$PACKAGE_NAME + fi + + if test "x$PACKAGE_VERSION_NANO" = "x0" + then + GST_PACKAGE_NAME="$P source release" + else + if test "x$PACKAGE_VERSION_NANO" = "x1" + then + GST_PACKAGE_NAME="$P git" + else + GST_PACKAGE_NAME="$P prerelease" + fi + fi + ] + ) + AC_MSG_NOTICE(Using $GST_PACKAGE_NAME as package name) + AC_DEFINE_UNQUOTED(GST_PACKAGE_NAME, "$GST_PACKAGE_NAME", + [package name in plugins]) + AC_SUBST(GST_PACKAGE_NAME) +]) + +AC_DEFUN([AG_GST_ARG_WITH_PACKAGE_ORIGIN], +[ + dnl package origin URL + AC_ARG_WITH(package-origin, + AC_HELP_STRING([--with-package-origin], + [specify package origin URL to use in plugins]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-package-origin) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-package-origin) ;; + *) GST_PACKAGE_ORIGIN="${withval}" ;; + esac + ], + [GST_PACKAGE_ORIGIN="[Unknown package origin]"] dnl Default value + ) + AC_MSG_NOTICE(Using $GST_PACKAGE_ORIGIN as package origin) + AC_DEFINE_UNQUOTED(GST_PACKAGE_ORIGIN, "$GST_PACKAGE_ORIGIN", + [package origin]) + AC_SUBST(GST_PACKAGE_ORIGIN) +]) + +dnl sets WITH_PLUGINS to the list of plug-ins given as an argument +dnl also clears GST_PLUGINS_ALL and GST_PLUGINS_SELECTED +AC_DEFUN([AG_GST_ARG_WITH_PLUGINS], +[ + AC_ARG_WITH(plugins, + AC_HELP_STRING([--with-plugins], + [comma-separated list of dependencyless plug-ins to compile]), + [WITH_PLUGINS=$withval], + [WITH_PLUGINS=]) + + GST_PLUGINS_ALL="" + GST_PLUGINS_SELECTED="" + + AC_SUBST(GST_PLUGINS_ALL) + AC_SUBST(GST_PLUGINS_SELECTED) +]) + +dnl AG_GST_CHECK_PLUGIN(PLUGIN-NAME) +dnl +dnl This macro adds the plug-in to GST_PLUGINS_ALL. Then it +dnl checks if WITH_PLUGINS is empty or the plugin is present in WITH_PLUGINS, +dnl and if so adds it to GST_PLUGINS_SELECTED. Then it checks if the plugin +dnl is present in WITHOUT_PLUGINS (ie. was disabled specifically) and if so +dnl removes it from GST_PLUGINS_SELECTED. +dnl +dnl The macro will call AM_CONDITIONAL(USE_PLUGIN_, ...) to allow +dnl control of what is built in Makefile.ams. +AC_DEFUN([AG_GST_CHECK_PLUGIN], +[ + GST_PLUGINS_ALL="$GST_PLUGINS_ALL [$1]" + + define([pname_def],translit([$1], -a-z, _a-z)) + + AC_ARG_ENABLE([$1], + AC_HELP_STRING([--disable-[$1]], [disable dependency-less $1 plugin]), + [ + case "${enableval}" in + yes) [gst_use_]pname_def=yes ;; + no) [gst_use_]pname_def=no ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-$1]) ;; + esac + ], + [[gst_use_]pname_def=yes]) dnl Default value + + if test x$[gst_use_]pname_def = xno; then + AC_MSG_NOTICE(disabling dependency-less plugin $1) + WITHOUT_PLUGINS="$WITHOUT_PLUGINS [$1]" + fi + undefine([pname_def]) + + if [[ -z "$WITH_PLUGINS" ]] || echo " [$WITH_PLUGINS] " | tr , ' ' | grep -i " [$1] " > /dev/null; then + GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED [$1]" + fi + if echo " [$WITHOUT_PLUGINS] " | tr , ' ' | grep -i " [$1] " > /dev/null; then + GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ [$1] / /'` + fi + AM_CONDITIONAL([USE_PLUGIN_]translit([$1], a-z, A-Z), echo " $GST_PLUGINS_SELECTED " | grep -i " [$1] " > /dev/null) +]) + +dnl AG_GST_DISABLE_PLUGIN(PLUGIN-NAME) +dnl +dnl This macro disables the plug-in by removing it from +dnl GST_PLUGINS_SELECTED. +AC_DEFUN([AG_GST_DISABLE_PLUGIN], +[ + GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ [$1] / /'` + AM_CONDITIONAL([USE_PLUGIN_]translit([$1], a-z, A-Z), false) +]) + +AC_DEFUN([AG_GST_ARG_ENABLE_EXTERNAL], +[ + AG_GST_CHECK_FEATURE(EXTERNAL, [building of plug-ins with external deps],, + HAVE_EXTERNAL=yes, enabled, + [ + AC_MSG_NOTICE(building external plug-ins) + BUILD_EXTERNAL="yes" + ],[ + AC_MSG_WARN(all plug-ins with external dependencies will not be built) + BUILD_EXTERNAL="no" + ]) + # make BUILD_EXTERNAL available to Makefile.am + AM_CONDITIONAL(BUILD_EXTERNAL, test "x$BUILD_EXTERNAL" = "xyes") +]) + +dnl experimental plug-ins; stuff that hasn't had the dust settle yet +dnl read 'builds, but might not work' +AC_DEFUN([AG_GST_ARG_ENABLE_EXPERIMENTAL], +[ + AG_GST_CHECK_FEATURE(EXPERIMENTAL, [building of experimental plug-ins],, + HAVE_EXPERIMENTAL=yes, disabled, + [ + AC_MSG_WARN(building experimental plug-ins) + BUILD_EXPERIMENTAL="yes" + ],[ + AC_MSG_NOTICE(not building experimental plug-ins) + BUILD_EXPERIMENTAL="no" + ]) + # make BUILD_EXPERIMENTAL available to Makefile.am + AM_CONDITIONAL(BUILD_EXPERIMENTAL, test "x$BUILD_EXPERIMENTAL" = "xyes") +]) + +dnl broken plug-ins; stuff that doesn't seem to build at the moment +AC_DEFUN([AG_GST_ARG_ENABLE_BROKEN], +[ + AG_GST_CHECK_FEATURE(BROKEN, [building of broken plug-ins],, + HAVE_BROKEN=yes, disabled, + [ + AC_MSG_WARN([building broken plug-ins -- no bug reports on these, only patches ...]) + ],[ + AC_MSG_NOTICE([not building broken plug-ins]) + ]) +]) diff --git a/common/m4/gst-check.m4 b/common/m4/gst-check.m4 new file mode 100644 index 0000000..3fd3acf --- /dev/null +++ b/common/m4/gst-check.m4 @@ -0,0 +1,262 @@ +dnl pkg-config-based checks for GStreamer modules and dependency modules + +dnl generic: +dnl AG_GST_PKG_CHECK_MODULES([PREFIX], [WHICH], [REQUIRED]) +dnl sets HAVE_[$PREFIX], [$PREFIX]_* +dnl AG_GST_CHECK_MODULES([PREFIX], [MODULE], [MINVER], [NAME], [REQUIRED]) +dnl sets HAVE_[$PREFIX], [$PREFIX]_* + +dnl specific: +dnl AG_GST_CHECK_GST([MAJMIN], [MINVER], [REQUIRED]) +dnl also sets/ACSUBSTs GST_TOOLS_DIR and GST_PLUGINS_DIR +dnl AG_GST_CHECK_GST_BASE([MAJMIN], [MINVER], [REQUIRED]) +dnl AG_GST_CHECK_GST_GDP([MAJMIN], [MINVER], [REQUIRED]) +dnl AG_GST_CHECK_GST_CONTROLLER([MAJMIN], [MINVER], [REQUIRED]) +dnl AG_GST_CHECK_GST_CHECK([MAJMIN], [MINVER], [REQUIRED]) +dnl AG_GST_CHECK_GST_PLUGINS_BASE([MAJMIN], [MINVER], [REQUIRED]) +dnl also sets/ACSUBSTs GSTPB_PLUGINS_DIR + +AC_DEFUN([AG_GST_PKG_CHECK_MODULES], +[ + which="[$2]" + dnl not required by default, since we use this mostly for plugin deps + required=ifelse([$3], , "no", [$3]) + + PKG_CHECK_MODULES([$1], $which, + [ + HAVE_[$1]="yes" + ], + [ + HAVE_[$1]="no" + if test "x$required" = "xyes"; then + AC_MSG_ERROR($[$1]_PKG_ERRORS) + else + AC_MSG_NOTICE($[$1]_PKG_ERRORS) + fi + ]) + + dnl AC_SUBST of CFLAGS and LIBS was not done before automake 1.7 + dnl It gets done automatically in automake >= 1.7, which we now require +])) + +AC_DEFUN([AG_GST_CHECK_MODULES], +[ + module=[$2] + minver=[$3] + name="[$4]" + required=ifelse([$5], , "yes", [$5]) dnl required by default + + PKG_CHECK_MODULES([$1], $module >= $minver, + [ + HAVE_[$1]="yes" + ], + [ + HAVE_[$1]="no" + AC_MSG_NOTICE($[$1]_PKG_ERRORS) + if test "x$required" = "xyes"; then + AC_MSG_ERROR([no $module >= $minver ($name) found]) + else + AC_MSG_NOTICE([no $module >= $minver ($name) found]) + fi + ]) + + dnl AC_SUBST of CFLAGS and LIBS was not done before automake 1.7 + dnl It gets done automatically in automake >= 1.7, which we now require +])) + +AC_DEFUN([AG_GST_CHECK_GST], +[ + AG_GST_CHECK_MODULES(GST, gstreamer-[$1], [$2], [GStreamer], [$3]) + dnl allow setting before calling this macro to override + if test -z $GST_TOOLS_DIR; then + GST_TOOLS_DIR=`$PKG_CONFIG --variable=toolsdir gstreamer-[$1]` + if test -z $GST_TOOLS_DIR; then + AC_MSG_ERROR( + [no tools dir set in GStreamer pkg-config file, core upgrade needed.]) + fi + fi + AC_MSG_NOTICE([using GStreamer tools in $GST_TOOLS_DIR]) + AC_SUBST(GST_TOOLS_DIR) + + dnl check for where core plug-ins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_DIR; then + GST_PLUGINS_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-[$1]` + if test -z $GST_PLUGINS_DIR; then + AC_MSG_ERROR( + [no pluginsdir set in GStreamer pkg-config file, core upgrade needed.]) + fi + fi + AC_MSG_NOTICE([using GStreamer plug-ins in $GST_PLUGINS_DIR]) + AC_SUBST(GST_PLUGINS_DIR) +]) + +AC_DEFUN([AG_GST_CHECK_GST_BASE], +[ + AG_GST_CHECK_MODULES(GST_BASE, gstreamer-base-[$1], [$2], + [GStreamer Base Libraries], [$3]) +]) + +AC_DEFUN([AG_GST_CHECK_GST_GDP], +[ + AG_GST_CHECK_MODULES(GST_GDP, gstreamer-dataprotocol-[$1], [$2], + [GStreamer Data Protocol Library], [$3]) +]) + +AC_DEFUN([AG_GST_CHECK_GST_CONTROLLER], +[ + AG_GST_CHECK_MODULES(GST_CONTROLLER, gstreamer-controller-[$1], [$2], + [GStreamer Controller Library], [$3]) +]) + +AC_DEFUN([AG_GST_CHECK_GST_CHECK], +[ + AG_GST_CHECK_MODULES(GST_CHECK, gstreamer-check-[$1], [$2], + [GStreamer Check unittest Library], [$3]) +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_BASE([GST-MAJORMINOR], [MIN-VERSION], [REQUIRED]) +dnl +dnl Sets GST_PLUGINS_BASE_CFLAGS and GST_PLUGINS_BASE_LIBS. +dnl +dnl Also sets GSTPB_PLUGINS_DIR (and for consistency also GST_PLUGINS_BASE_DIR) +dnl for use in Makefile.am. This is only really needed/useful in uninstalled +dnl setups, since in an installed setup all plugins will be found in +dnl GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_BASE], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_BASE, gstreamer-plugins-base-[$1], [$2], + [GStreamer Base Plugins], [$3]) + + if test "x$HAVE_GST_PLUGINS_BASE" = "xyes"; then + dnl check for where base plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GSTPB_PLUGINS_DIR; then + GSTPB_PLUGINS_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-base-[$1]` + if test -z $GSTPB_PLUGINS_DIR; then + AC_MSG_ERROR( + [no pluginsdir set in GStreamer Base Plugins pkg-config file]) + fi + fi + AC_MSG_NOTICE([using GStreamer Base Plugins in $GSTPB_PLUGINS_DIR]) + GST_PLUGINS_BASE_DIR="$GSTPB_PLUGINS_DIR/gst:$GSTPB_PLUGINS_DIR/sys:$GSTPB_PLUGINS_DIR/ext" + AC_SUBST(GST_PLUGINS_BASE_DIR) + AC_SUBST(GSTPB_PLUGINS_DIR) + fi +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_GOOD([GST-MAJORMINOR], [MIN-VERSION]) +dnl +dnl Will set GST_PLUGINS_GOOD_DIR for use in Makefile.am. Note that this will +dnl only be set in an uninstalled setup, since -good ships no .pc file and in +dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_GOOD], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_GOOD, gstreamer-plugins-good-[$1], [$2], + [GStreamer Good Plugins], [no]) + + if test "x$HAVE_GST_PLUGINS_GOOD" = "xyes"; then + dnl check for where good plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_GOOD_DIR; then + GST_PLUGINS_GOOD_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-good-[$1]` + if test -z $GST_PLUGINS_GOOD_DIR; then + AC_MSG_ERROR([no pluginsdir set in GStreamer Good Plugins pkg-config file]) + fi + fi + AC_MSG_NOTICE([using GStreamer Good Plugins in $GST_PLUGINS_GOOD_DIR]) + GST_PLUGINS_GOOD_DIR="$GST_PLUGINS_GOOD_DIR/gst:$GST_PLUGINS_GOOD_DIR/sys:$GST_PLUGINS_GOOD_DIR/ext" + AC_SUBST(GST_PLUGINS_GOOD_DIR) + fi +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_UGLY([GST-MAJORMINOR], [MIN-VERSION]) +dnl +dnl Will set GST_PLUGINS_UGLY_DIR for use in Makefile.am. Note that this will +dnl only be set in an uninstalled setup, since -bad ships no .pc file and in +dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_UGLY], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_UGLY, gstreamer-plugins-ugly-[$1], [$2], + [GStreamer Ugly Plugins], [no]) + + if test "x$HAVE_GST_PLUGINS_UGLY" = "xyes"; then + dnl check for where ugly plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_UGLY_DIR; then + GST_PLUGINS_UGLY_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-ugly-[$1]` + if test -z $GST_PLUGINS_UGLY_DIR; then + AC_MSG_ERROR([no pluginsdir set in GStreamer Ugly Plugins pkg-config file]) + fi + fi + AC_MSG_NOTICE([using GStreamer Ugly Plugins in $GST_PLUGINS_UGLY_DIR]) + GST_PLUGINS_UGLY_DIR="$GST_PLUGINS_UGLY_DIR/gst:$GST_PLUGINS_UGLY_DIR/sys:$GST_PLUGINS_UGLY_DIR/ext" + AC_SUBST(GST_PLUGINS_UGLY_DIR) + fi +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_BAD([GST-MAJORMINOR], [MIN-VERSION]) +dnl +dnl Will set GST_PLUGINS_BAD_DIR for use in Makefile.am. Note that this will +dnl only be set in an uninstalled setup, since -ugly ships no .pc file and in +dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_BAD], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_BAD, gstreamer-plugins-bad-[$1], [$2], + [GStreamer Bad Plugins], [no]) + + if test "x$HAVE_GST_PLUGINS_BAD" = "xyes"; then + dnl check for where bad plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_BAD_DIR; then + GST_PLUGINS_BAD_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-bad-[$1]` + if test -z $GST_PLUGINS_BAD_DIR; then + AC_MSG_ERROR([no pluginsdir set in GStreamer Bad Plugins pkg-config file]) + fi + fi + AC_MSG_NOTICE([using GStreamer Bad Plugins in $GST_PLUGINS_BAD_DIR]) + GST_PLUGINS_BAD_DIR="$GST_PLUGINS_BAD_DIR/gst:$GST_PLUGINS_BAD_DIR/sys:$GST_PLUGINS_BAD_DIR/ext" + AC_SUBST(GST_PLUGINS_BAD_DIR) + fi +]) + +dnl =========================================================================== +dnl AG_GST_CHECK_GST_PLUGINS_FFMPEG([GST-MAJORMINOR], [MIN-VERSION]) +dnl +dnl Will set GST_PLUGINS_FFMPEG_DIR for use in Makefile.am. Note that this will +dnl only be set in an uninstalled setup, since -ffmpeg ships no .pc file and in +dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway. +dnl =========================================================================== +AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_FFMPEG], +[ + AG_GST_CHECK_MODULES(GST_PLUGINS_FFMPEG, gstreamer-plugins-ffmpeg-[$1], [$2], + [GStreamer FFmpeg Plugins], [no]) + + if test "x$HAVE_GST_PLUGINS_FFMPEG" = "xyes"; then + dnl check for where ffmpeg plugins got installed + dnl this is used for unit tests + dnl allow setting before calling this macro to override + if test -z $GST_PLUGINS_FFMPEG_DIR; then + GST_PLUGINS_FFMPEG_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-ffmpeg-[$1]` + if test -z $GST_PLUGINS_FFMPEG_DIR; then + AC_MSG_ERROR([no pluginsdir set in GStreamer FFmpeg Plugins pkg-config file]) + fi + fi + GST_PLUGINS_FFMPEG_DIR="$GST_PLUGINS_FFMPEG_DIR/ext/ffmpeg" + AC_MSG_NOTICE([using GStreamer FFmpeg Plugins in $GST_PLUGINS_FFMPEG_DIR]) + AC_SUBST(GST_PLUGINS_FFMPEG_DIR) + fi +]) diff --git a/common/m4/gst-debuginfo.m4 b/common/m4/gst-debuginfo.m4 new file mode 100644 index 0000000..b48854d --- /dev/null +++ b/common/m4/gst-debuginfo.m4 @@ -0,0 +1,46 @@ +AC_DEFUN([AG_GST_DEBUGINFO], [ +AC_ARG_ENABLE(debug, +AC_HELP_STRING([--disable-debug],[disable addition of -g debugging info]), +[case "${enableval}" in + yes) USE_DEBUG=yes ;; + no) USE_DEBUG=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; +esac], +[USE_DEBUG=yes]) dnl Default value + +AC_ARG_ENABLE(DEBUG, +AC_HELP_STRING([--disable-DEBUG],[disables compilation of debugging messages]), +[case "${enableval}" in + yes) ENABLE_DEBUG=yes ;; + no) ENABLE_DEBUG=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-DEBUG) ;; +esac], +[ENABLE_DEBUG=yes]) dnl Default value +if test x$ENABLE_DEBUG = xyes; then + AC_DEFINE(GST_DEBUG_ENABLED, 1, [Define if DEBUG statements should be compiled in]) +fi + +AC_ARG_ENABLE(INFO, +AC_HELP_STRING([--disable-INFO],[disables compilation of informational messages]), +[case "${enableval}" in + yes) ENABLE_INFO=yes ;; + no) ENABLE_INFO=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-INFO) ;; +esac], +[ENABLE_INFO=yes]) dnl Default value +if test x$ENABLE_INFO = xyes; then + AC_DEFINE(GST_INFO_ENABLED, 1, [Define if INFO statements should be compiled in]) +fi + +AC_ARG_ENABLE(debug-color, +AC_HELP_STRING([--disable-debug-color],[disables color output of DEBUG and INFO output]), +[case "${enableval}" in + yes) ENABLE_DEBUG_COLOR=yes ;; + no) ENABLE_DEBUG_COLOR=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug-color) ;; +esac], +[ENABLE_DEBUG_COLOR=yes]) dnl Default value +if test "x$ENABLE_DEBUG_COLOR" = xyes; then + AC_DEFINE(GST_DEBUG_COLOR, 1, [Define if debugging messages should be colorized]) +fi +]) diff --git a/common/m4/gst-default.m4 b/common/m4/gst-default.m4 new file mode 100644 index 0000000..8de9756 --- /dev/null +++ b/common/m4/gst-default.m4 @@ -0,0 +1,120 @@ +dnl default elements used for tests and such + +dnl AG_GST_DEFAULT_ELEMENTS + +AC_DEFUN([AG_GST_DEFAULT_ELEMENTS], +[ + dnl decide on default elements + dnl FIXME: describe where exactly this gets used + dnl FIXME: decide if it's a problem that this could point to sinks from + dnl depending plugin modules + dnl FIXME: when can we just use autoaudiosrc and autovideosrc? + DEFAULT_AUDIOSINK="autoaudiosink" + DEFAULT_VIDEOSINK="autovideosink" + DEFAULT_AUDIOSRC="alsasrc" + DEFAULT_VIDEOSRC="v4l2src" + DEFAULT_VISUALIZER="goom" + case "$host" in + *-sun-* | *pc-solaris* ) + DEFAULT_AUDIOSRC="sunaudiosrc" + ;; + *-darwin* ) + DEFAULT_AUDIOSRC="osxaudiosrc" + ;; + esac + + dnl Default audio sink + AC_ARG_WITH(default-audiosink, + AC_HELP_STRING([--with-default-audiosink], [specify default audio sink]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosink) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosink) ;; + *) DEFAULT_AUDIOSINK="${withval}" ;; + esac + ], + [ + DEFAULT_AUDIOSINK="$DEFAULT_AUDIOSINK" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_AUDIOSINK as default audio sink) + AC_SUBST(DEFAULT_AUDIOSINK) + AC_DEFINE_UNQUOTED(DEFAULT_AUDIOSINK, "$DEFAULT_AUDIOSINK", + [Default audio sink]) + + dnl Default audio source + AC_ARG_WITH(default-audiosrc, + AC_HELP_STRING([--with-default-audiosrc], [specify default audio source]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosrc) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosrc) ;; + *) DEFAULT_AUDIOSRC="${withval}" ;; + esac + ], + [ + DEFAULT_AUDIOSRC="$DEFAULT_AUDIOSRC" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_AUDIOSRC as default audio source) + AC_SUBST(DEFAULT_AUDIOSRC) + AC_DEFINE_UNQUOTED(DEFAULT_AUDIOSRC, "$DEFAULT_AUDIOSRC", + [Default audio source]) + + dnl Default video sink + AC_ARG_WITH(default-videosink, + AC_HELP_STRING([--with-default-videosink], [specify default video sink]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-videosink) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-videosink) ;; + *) DEFAULT_VIDEOSINK="${withval}" ;; + esac + ], + [ + DEFAULT_VIDEOSINK="$DEFAULT_VIDEOSINK" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_VIDEOSINK as default video sink) + AC_SUBST(DEFAULT_VIDEOSINK) + AC_DEFINE_UNQUOTED(DEFAULT_VIDEOSINK, "$DEFAULT_VIDEOSINK", + [Default video sink]) + + dnl Default video source + AC_ARG_WITH(default-videosrc, + AC_HELP_STRING([--with-default-videosrc], [specify default video source]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-videosrc) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-videosrc) ;; + *) DEFAULT_VIDEOSRC="${withval}" ;; + esac + ], + [ + DEFAULT_VIDEOSRC="$DEFAULT_VIDEOSRC" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_VIDEOSRC as default video source) + AC_SUBST(DEFAULT_VIDEOSRC) + AC_DEFINE_UNQUOTED(DEFAULT_VIDEOSRC, "$DEFAULT_VIDEOSRC", + [Default video source]) + + dnl Default visualizer + AC_ARG_WITH(default-visualizer, + AC_HELP_STRING([--with-default-visualizer], [specify default visualizer]), + [ + case "${withval}" in + yes) AC_MSG_ERROR(bad value ${withval} for --with-default-visualizer) ;; + no) AC_MSG_ERROR(bad value ${withval} for --with-default-visualizer) ;; + *) DEFAULT_VISUALIZER="${withval}" ;; + esac + ], + [ + DEFAULT_VISUALIZER="$DEFAULT_VISUALIZER" + ] dnl Default value as determined above + ) + AC_MSG_NOTICE(Using $DEFAULT_VISUALIZER as default visualizer) + AC_SUBST(DEFAULT_VISUALIZER) + AC_DEFINE_UNQUOTED(DEFAULT_VISUALIZER, "$DEFAULT_VISUALIZER", + [Default visualizer]) +]) diff --git a/common/m4/gst-doc.m4 b/common/m4/gst-doc.m4 new file mode 100644 index 0000000..6521097 --- /dev/null +++ b/common/m4/gst-doc.m4 @@ -0,0 +1,148 @@ +AC_DEFUN([AG_GST_DOCBOOK_CHECK], +[ + dnl choose a location to install docbook docs in + if test "x$PACKAGE_TARNAME" = "x" + then + AC_MSG_ERROR([Internal error - PACKAGE_TARNAME not set]) + fi + docdir="\$(datadir)/doc/$PACKAGE_TARNAME-$GST_MAJORMINOR" + + dnl enable/disable docbook documentation building + AC_ARG_ENABLE(docbook, + AC_HELP_STRING([--enable-docbook], + [use docbook to build documentation [default=no]]),, + enable_docbook=no) + + have_docbook=no + + if test x$enable_docbook = xyes; then + dnl check if we actually have everything we need + + dnl check for docbook tools + AC_CHECK_PROG(HAVE_DOCBOOK2PS, docbook2ps, yes, no) + AC_CHECK_PROG(HAVE_DOCBOOK2HTML, docbook2html, yes, no) + AC_CHECK_PROG(HAVE_JADETEX, jadetex, yes, no) + AC_CHECK_PROG(HAVE_PS2PDF, ps2pdf, yes, no) + + # -V option appeared in 0.6.10 + docbook2html_min_version=0.6.10 + if test "x$HAVE_DOCBOOK2HTML" != "xno"; then + docbook2html_version=`docbook2html --version` + AC_MSG_CHECKING([docbook2html version ($docbook2html_version) >= $docbook2html_min_version]) + if perl -w < \$min_version_major) || + ((\$docbook2html_version_major == \$min_version_major) && + (\$docbook2html_version_minor >= \$min_version_minor)) || + ((\$docbook2html_version_major == \$min_version_major) && + (\$docbook2html_version_minor >= \$min_version_minor) && + (\$docbook2html_version_micro >= \$min_version_micro))) + ? 0 : 1); +EOF + then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + HAVE_DOCBOOK2HTML=no + fi + fi + + dnl check if we can process docbook stuff + AS_DOCBOOK(have_docbook=yes, have_docbook=no) + + dnl check for extra tools + AC_CHECK_PROG(HAVE_DVIPS, dvips, yes, no) + AC_CHECK_PROG(HAVE_XMLLINT, xmllint, yes, no) + + dnl check for image conversion tools + AC_CHECK_PROG(HAVE_FIG2DEV, fig2dev, yes, no) + if test "x$HAVE_FIG2DEV" = "xno" ; then + AC_MSG_WARN([Did not find fig2dev (from xfig), images will not be generated.]) + fi + + dnl The following is a hack: if fig2dev doesn't display an error message + dnl for the desired type, we assume it supports it. + HAVE_FIG2DEV_EPS=no + if test "x$HAVE_FIG2DEV" = "xyes" ; then + fig2dev_quiet=`fig2dev -L eps &1 >/dev/null` + if test "x$fig2dev_quiet" = "x" ; then + HAVE_FIG2DEV_EPS=yes + fi + fi + HAVE_FIG2DEV_PNG=no + if test "x$HAVE_FIG2DEV" = "xyes" ; then + fig2dev_quiet=`fig2dev -L png &1 >/dev/null` + if test "x$fig2dev_quiet" = "x" ; then + HAVE_FIG2DEV_PNG=yes + fi + fi + HAVE_FIG2DEV_PDF=no + if test "x$HAVE_FIG2DEV" = "xyes" ; then + fig2dev_quiet=`fig2dev -L pdf &1 >/dev/null` + if test "x$fig2dev_quiet" = "x" ; then + HAVE_FIG2DEV_PDF=yes + fi + fi + + AC_CHECK_PROG(HAVE_PNGTOPNM, pngtopnm, yes, no) + AC_CHECK_PROG(HAVE_PNMTOPS, pnmtops, yes, no) + AC_CHECK_PROG(HAVE_EPSTOPDF, epstopdf, yes, no) + + dnl check if we can generate HTML + if test "x$HAVE_DOCBOOK2HTML" = "xyes" && \ + test "x$enable_docbook" = "xyes" && \ + test "x$HAVE_XMLLINT" = "xyes" && \ + test "x$HAVE_FIG2DEV_PNG" = "xyes"; then + DOC_HTML=yes + AC_MSG_NOTICE(Will output HTML documentation) + else + DOC_HTML=no + AC_MSG_NOTICE(Will not output HTML documentation) + fi + + dnl check if we can generate PS + if test "x$HAVE_DOCBOOK2PS" = "xyes" && \ + test "x$enable_docbook" = "xyes" && \ + test "x$HAVE_XMLLINT" = "xyes" && \ + test "x$HAVE_JADETEX" = "xyes" && \ + test "x$HAVE_FIG2DEV_EPS" = "xyes" && \ + test "x$HAVE_DVIPS" = "xyes" && \ + test "x$HAVE_PNGTOPNM" = "xyes" && \ + test "x$HAVE_PNMTOPS" = "xyes"; then + DOC_PS=yes + AC_MSG_NOTICE(Will output PS documentation) + else + DOC_PS=no + AC_MSG_NOTICE(Will not output PS documentation) + fi + + dnl check if we can generate PDF - using only ps2pdf + if test "x$DOC_PS" = "xyes" && \ + test "x$enable_docbook" = "xyes" && \ + test "x$HAVE_XMLLINT" = "xyes" && \ + test "x$HAVE_PS2PDF" = "xyes"; then + DOC_PDF=yes + AC_MSG_NOTICE(Will output PDF documentation) + else + DOC_PDF=no + AC_MSG_NOTICE(Will not output PDF documentation) + fi + + dnl if we don't have everything, we should disable + if test "x$have_docbook" != "xyes"; then + enable_docbook=no + fi + fi + + dnl if we're going to install documentation, tell us where + if test "x$have_docbook" = "xyes"; then + AC_MSG_NOTICE(Installing documentation in $docdir) + AC_SUBST(docdir) + fi + + AM_CONDITIONAL(ENABLE_DOCBOOK, test x$enable_docbook = xyes) + AM_CONDITIONAL(DOC_HTML, test x$DOC_HTML = xyes) + AM_CONDITIONAL(DOC_PDF, test x$DOC_PDF = xyes) + AM_CONDITIONAL(DOC_PS, test x$DOC_PS = xyes) +]) diff --git a/common/m4/gst-dowhile.m4 b/common/m4/gst-dowhile.m4 new file mode 100644 index 0000000..069808d --- /dev/null +++ b/common/m4/gst-dowhile.m4 @@ -0,0 +1,24 @@ +dnl +dnl Check for working do while(0) macros. This is used by G_STMT_START +dnl and G_STMT_END in glib/gmacros.h. Without having this defined we +dnl get "ambigious if-else" compiler warnings when compling C++ code. +dnl +dnl Copied from GLib's configure.in +dnl +AC_DEFUN([AG_GST_CHECK_DOWHILE_MACROS],[ + +dnl *** check for working do while(0) macros *** +AC_CACHE_CHECK([for working do while(0) macros], _cv_g_support_dowhile_macros, [ + AC_TRY_COMPILE([],[ + #define STMT_START do + #define STMT_END while(0) + #define STMT_TEST STMT_START { i = 0; } STMT_END + int main(void) { int i = 1; STMT_TEST; return i; }], + [_cv_g_support_dowhile_macros=yes], + [_cv_g_support_dowhile_macros=no], + [_cv_g_support_dowhile_macros=yes]) +]) +if test x$_cv_g_support_dowhile_macros = xyes; then + AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros]) +fi +]) diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4 new file mode 100644 index 0000000..f8f2364 --- /dev/null +++ b/common/m4/gst-error.m4 @@ -0,0 +1,213 @@ +dnl handle various error-related things + +dnl Thomas Vander Stichele +dnl Tim-Philipp Müller + +dnl Last modification: 2008-02-18 + +dnl AG_GST_SET_ERROR_CFLAGS([ADD-WERROR], [MORE_FLAGS]) +dnl AG_GST_SET_ERROR_CXXFLAGS([ADD-WERROR], [MORE_FLAGS]) +dnl AG_GST_SET_LEVEL_DEFAULT([IS-GIT-VERSION]) + + +dnl Sets WARNING_CFLAGS and ERROR_CFLAGS to something the compiler +dnl will accept and AC_SUBST them so they are available in Makefile +dnl +dnl WARNING_CFLAGS will contain flags to make the compiler emit more +dnl warnings. +dnl ERROR_CFLAGS will contain flags to make those warnings fatal, +dnl unless ADD-WERROR is set to "no" +dnl +dnl If MORE_FLAGS is set, tries to add each of the given flags +dnl to WARNING_CFLAGS if the compiler supports them. Each flag is +dnl tested separately. +dnl +dnl These flags can be overridden at make time: +dnl make ERROR_CFLAGS= +AC_DEFUN([AG_GST_SET_ERROR_CFLAGS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AS_COMPILER_FLAG]) + + WARNING_CFLAGS="" + ERROR_CFLAGS="" + + dnl if we support -Wall, set it unconditionally + AS_COMPILER_FLAG(-Wall, + WARNING_CFLAGS="$WARNING_CFLAGS -Wall") + + dnl Warn if declarations after statements are used (C99 extension) + AS_COMPILER_FLAG(-Wdeclaration-after-statement, + WARNING_CFLAGS="$WARNING_CFLAGS -Wdeclaration-after-statement") + + dnl Warn if variable length arrays are used (C99 extension) + AS_COMPILER_FLAG(-Wvla, + WARNING_CFLAGS="$WARNING_CFLAGS -Wvla") + + dnl Warn for invalid pointer arithmetic + AS_COMPILER_FLAG(-Wpointer-arith, + WARNING_CFLAGS="$WARNING_CFLAGS -Wpointer-arith") + + dnl if asked for, add -Werror if supported + if test "x$1" != "xno" + then + AS_COMPILER_FLAG(-Werror, ERROR_CFLAGS="$ERROR_CFLAGS -Werror") + + dnl if -Werror isn't suported, try -errwarn=%all (Sun Forte case) + if test "x$ERROR_CFLAGS" = "x" + then + AS_COMPILER_FLAG([-errwarn=%all], [ + ERROR_CFLAGS="-errwarn=%all" + dnl try -errwarn=%all,no%E_EMPTY_DECLARATION, + dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH, + dnl no%E_MACRO_REDEFINED (Sun Forte case) + dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon + dnl "statement not reached" disabled because there is g_assert_not_reached () in some places + dnl "macro redefined" because of gst/gettext.h + dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'? + for f in 'no%E_EMPTY_DECLARATION' \ + 'no%E_STATEMENT_NOT_REACHED' \ + 'no%E_ARGUEMENT_MISMATCH' \ + 'no%E_MACRO_REDEFINED' \ + 'no%E_LOOP_NOT_ENTERED_AT_TOP' + do + AS_COMPILER_FLAG([-errwarn=%all,$f], [ + ERROR_CFLAGS="$ERROR_CFLAGS,$f" + ]) + done + ]) + else + dnl Add -fno-strict-aliasing for GLib versions before 2.19.8 + dnl as before G_LOCK and friends caused strict aliasing compiler + dnl warnings. + PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [ + AS_COMPILER_FLAG(-fno-strict-aliasing, + ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing") + ]) + fi + fi + + if test "x$2" != "x" + then + UNSUPPORTED="" + list="$2" + for each in $list + do + AS_COMPILER_FLAG($each, + WARNING_CFLAGS="$WARNING_CFLAGS $each", + UNSUPPORTED="$UNSUPPORTED $each") + done + if test "X$UNSUPPORTED" != X ; then + AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED]) + fi + fi + + AC_SUBST(WARNING_CFLAGS) + AC_SUBST(ERROR_CFLAGS) + AC_MSG_NOTICE([set WARNING_CFLAGS to $WARNING_CFLAGS]) + AC_MSG_NOTICE([set ERROR_CFLAGS to $ERROR_CFLAGS]) +]) + +dnl Sets WARNING_CXXFLAGS and ERROR_CXXFLAGS to something the compiler +dnl will accept and AC_SUBST them so they are available in Makefile +dnl +dnl WARNING_CXXFLAGS will contain flags to make the compiler emit more +dnl warnings. +dnl ERROR_CXXFLAGS will contain flags to make those warnings fatal, +dnl unless ADD-WERROR is set to "no" +dnl +dnl If MORE_FLAGS is set, tries to add each of the given flags +dnl to WARNING_CFLAGS if the compiler supports them. Each flag is +dnl tested separately. +dnl +dnl These flags can be overridden at make time: +dnl make ERROR_CXXFLAGS= +AC_DEFUN([AG_GST_SET_ERROR_CXXFLAGS], +[ + AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([AS_CXX_COMPILER_FLAG]) + + ERROR_CXXFLAGS="" + WARNING_CXXFLAGS="" + + dnl if we support -Wall, set it unconditionally + AS_CXX_COMPILER_FLAG(-Wall, WARNING_CXXFLAGS="$WARNING_CXXFLAGS -Wall") + + dnl if asked for, add -Werror if supported + if test "x$1" != "xno" + then + AS_CXX_COMPILER_FLAG(-Werror, ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror") + + if test "x$ERROR_CXXFLAGS" != "x" + then + dnl add exceptions + AS_CXX_COMPILER_FLAG([-Wno-non-virtual-dtor], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Wno-non-virtual-dtor") + + dnl Add -fno-strict-aliasing for GLib versions before 2.19.8 + dnl as before G_LOCK and friends caused strict aliasing compiler + dnl warnings. + PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [ + AS_CXX_COMPILER_FLAG([-fno-strict-aliasing], + ERROR_CXXFLAGS="$ERROR_CXXFLAGS -fno-strict-aliasing") + ]) + else + dnl if -Werror isn't suported, try -errwarn=%all + AS_CXX_COMPILER_FLAG([-errwarn=%all], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all") + if test "x$ERROR_CXXFLAGS" != "x"; then + dnl try -errwarn=%all,no%E_EMPTY_DECLARATION, + dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH, + dnl no%E_MACRO_REDEFINED (Sun Forte case) + dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon + dnl "statement not reached" disabled because there is g_assert_not_reached () in some places + dnl "macro redefined" because of gst/gettext.h + dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'? + dnl FIXME: do any of these work with the c++ compiler? if not, why + dnl do we check at all? + for f in 'no%E_EMPTY_DECLARATION' \ + 'no%E_STATEMENT_NOT_REACHED' \ + 'no%E_ARGUEMENT_MISMATCH' \ + 'no%E_MACRO_REDEFINED' \ + 'no%E_LOOP_NOT_ENTERED_AT_TOP' + do + AS_CXX_COMPILER_FLAG([-errwarn=%all,$f], ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f") + done + fi + fi + fi + + if test "x$2" != "x" + then + UNSUPPORTED="" + list="$2" + for each in $list + do + AS_CXX_COMPILER_FLAG($each, + WARNING_CXXFLAGS="$WARNING_CXXFLAGS $each", + UNSUPPORTED="$UNSUPPORTED $each") + done + if test "X$UNSUPPORTED" != X ; then + AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED]) + fi + fi + + AC_SUBST(WARNING_CXXFLAGS) + AC_SUBST(ERROR_CXXFLAGS) + AC_MSG_NOTICE([set WARNING_CXXFLAGS to $WARNING_CXXFLAGS]) + AC_MSG_NOTICE([set ERROR_CXXFLAGS to $ERROR_CXXFLAGS]) +]) + +dnl Sets the default error level for debugging messages +AC_DEFUN([AG_GST_SET_LEVEL_DEFAULT], +[ + dnl define correct errorlevel for debugging messages. We want to have + dnl GST_ERROR messages printed when running cvs builds + if test "x[$1]" = "xyes"; then + GST_LEVEL_DEFAULT=GST_LEVEL_ERROR + else + GST_LEVEL_DEFAULT=GST_LEVEL_NONE + fi + AC_DEFINE_UNQUOTED(GST_LEVEL_DEFAULT, $GST_LEVEL_DEFAULT, + [Default errorlevel to use]) + dnl AC_SUBST so we can use it for win32/common/config.h + AC_SUBST(GST_LEVEL_DEFAULT) +]) diff --git a/common/m4/gst-feature.m4 b/common/m4/gst-feature.m4 new file mode 100644 index 0000000..c8e5343 --- /dev/null +++ b/common/m4/gst-feature.m4 @@ -0,0 +1,254 @@ +dnl Perform a check for a feature for GStreamer +dnl Richard Boulton +dnl Thomas Vander Stichele added useful stuff +dnl Last modification: 25/06/2001 +dnl +dnl AG_GST_CHECK_FEATURE(FEATURE-NAME, FEATURE-DESCRIPTION, +dnl DEPENDENT-PLUGINS, TEST-FOR-FEATURE, +dnl DISABLE-BY-DEFAULT, ACTION-IF-USE, ACTION-IF-NOTUSE) +dnl +dnl This macro adds a command line argument to allow the user to enable +dnl or disable a feature, and if the feature is enabled, performs a supplied +dnl test to check if the feature is available. +dnl +dnl The test should define HAVE_ to "yes" or "no" depending +dnl on whether the feature is available. +dnl +dnl The macro will set USE_ to "yes" or "no" depending on +dnl whether the feature is to be used. +dnl Thomas changed this, so that when USE_ was already set +dnl to no, then it stays that way. +dnl +dnl The macro will call AM_CONDITIONAL(USE_, ...) to allow +dnl the feature to control what is built in Makefile.ams. If you want +dnl additional actions resulting from the test, you can add them with the +dnl ACTION-IF-USE and ACTION-IF-NOTUSE parameters. +dnl +dnl FEATURE-NAME is the name of the feature, and should be in +dnl purely upper case characters. +dnl FEATURE-DESCRIPTION is used to describe the feature in help text for +dnl the command line argument. +dnl DEPENDENT-PLUGINS lists any plug-ins which depend on this feature. +dnl TEST-FOR-FEATURE is a test which sets HAVE_ to "yes" +dnl or "no" depending on whether the feature is +dnl available. +dnl DISABLE-BY-DEFAULT if "disabled", the feature is disabled by default, +dnl if any other value, the feature is enabled by default. +dnl ACTION-IF-USE any extra actions to perform if the feature is to be +dnl used. +dnl ACTION-IF-NOTUSE any extra actions to perform if the feature is not to +dnl be used. +dnl +dnl +dnl thomas : +dnl we also added a history. +dnl GST_PLUGINS_YES will contain all plugins to be built +dnl that were checked through AG_GST_CHECK_FEATURE +dnl GST_PLUGINS_NO will contain those that won't be built + +AC_DEFUN([AG_GST_CHECK_FEATURE], +[echo +AC_MSG_NOTICE(*** checking feature: [$2] ***) +if test "x[$3]" != "x" +then + AC_MSG_NOTICE(*** for plug-ins: [$3] ***) +fi +dnl +builtin(define, [gst_endisable], ifelse($5, [disabled], [enable], [disable]))dnl +dnl if it is set to NO, then don't even consider it for building +NOUSE= +if test "x$USE_[$1]" = "xno"; then + NOUSE="yes" +fi +AC_ARG_ENABLE(translit([$1], A-Z, a-z), + [ ]builtin(format, --%-26s gst_endisable %s, gst_endisable-translit([$1], A-Z, a-z), [$2]ifelse([$3],,,: [$3])), + [ case "${enableval}" in + yes) USE_[$1]=yes;; + no) USE_[$1]=no;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-translit([$1], A-Z, a-z)) ;; + esac], + [ USE_$1=]ifelse($5, [disabled], [no], [yes])) dnl DEFAULT + +dnl *** set it back to no if it was preset to no +if test "x$NOUSE" = "xyes"; then + USE_[$1]="no" + AC_MSG_WARN(*** $3 pre-configured not to be built) +fi +NOUSE= + +dnl *** If it's enabled + +if test x$USE_[$1] = xyes; then + dnl save compile variables before the test + + gst_check_save_LIBS=$LIBS + gst_check_save_LDFLAGS=$LDFLAGS + gst_check_save_CFLAGS=$CFLAGS + gst_check_save_CPPFLAGS=$CPPFLAGS + gst_check_save_CXXFLAGS=$CXXFLAGS + + HAVE_[$1]=no + dnl TEST_FOR_FEATURE + $4 + + LIBS=$gst_check_save_LIBS + LDFLAGS=$gst_check_save_LDFLAGS + CFLAGS=$gst_check_save_CFLAGS + CPPFLAGS=$gst_check_save_CPPFLAGS + CXXFLAGS=$gst_check_save_CXXFLAGS + + dnl If it isn't found, unset USE_[$1] + if test x$HAVE_[$1] = xno; then + USE_[$1]=no + else + ifelse([$3], , :, [AC_MSG_NOTICE(*** These plugins will be built: [$3])]) + fi +fi +dnl *** Warn if it's disabled or not found +if test x$USE_[$1] = xyes; then + ifelse([$6], , :, [$6]) + if test "x$3" != "x"; then + GST_PLUGINS_YES="\t[$3]\n$GST_PLUGINS_YES" + fi + AC_DEFINE(HAVE_[$1], , [Define to enable $2]ifelse($3,,, [ (used by $3)]).) +else + ifelse([$3], , :, [AC_MSG_NOTICE(*** These plugins will not be built: [$3])]) + if test "x$3" != "x"; then + GST_PLUGINS_NO="\t[$3]\n$GST_PLUGINS_NO" + fi + ifelse([$7], , :, [$7]) +fi +dnl *** Define the conditional as appropriate +AM_CONDITIONAL(USE_[$1], test x$USE_[$1] = xyes) +]) + +dnl Use AC_CHECK_LIB and AC_CHECK_HEADER to do both tests at once +dnl sets HAVE_module if we have it +dnl Richard Boulton +dnl Last modification: 26/06/2001 +dnl AG_GST_CHECK_LIBHEADER(FEATURE-NAME, LIB NAME, LIB FUNCTION, EXTRA LD FLAGS, +dnl HEADER NAME, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) +dnl +dnl This check was written for GStreamer: it should be renamed and checked +dnl for portability if you decide to use it elsewhere. +dnl +AC_DEFUN([AG_GST_CHECK_LIBHEADER], +[ + AC_CHECK_LIB([$2], [$3], HAVE_[$1]=yes, HAVE_[$1]=no,[$4]) + if test "x$HAVE_[$1]" = "xyes"; then + AC_CHECK_HEADER([$5], :, HAVE_[$1]=no) + if test "x$HAVE_[$1]" = "xyes"; then + dnl execute what needs to be + ifelse([$6], , :, [$6]) + else + ifelse([$7], , :, [$7]) + fi + else + ifelse([$7], , :, [$7]) + fi + AC_SUBST(HAVE_[$1]) +] +) + +dnl 2004-02-14 Thomas - changed to get set properly and use proper output +dnl 2003-06-27 Benjamin Otte - changed to make this work with gstconfig.h +dnl +dnl Add a subsystem --disable flag and all the necessary symbols and substitions +dnl +dnl AG_GST_CHECK_SUBSYSTEM_DISABLE(SYSNAME, [subsystem name]) +dnl +AC_DEFUN([AG_GST_CHECK_SUBSYSTEM_DISABLE], +[ + dnl this define will replace each literal subsys_def occurrence with + dnl the lowercase hyphen-separated subsystem + dnl e.g. if $1 is GST_DEBUG then subsys_def will be a macro with gst-debug + define([subsys_def],translit([$1], _A-Z, -a-z)) + + AC_ARG_ENABLE(subsys_def, + AC_HELP_STRING(--disable-subsys_def, [disable $2]), + [ + case "${enableval}" in + yes) GST_DISABLE_[$1]=no ;; + no) GST_DISABLE_[$1]=yes ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-subsys_def]) ;; + esac + ], + [GST_DISABLE_[$1]=no]) dnl Default value + + if test x$GST_DISABLE_[$1] = xyes; then + AC_MSG_NOTICE([disabled subsystem [$2]]) + GST_DISABLE_[$1]_DEFINE="#define GST_DISABLE_$1 1" + else + GST_DISABLE_[$1]_DEFINE="/* #undef GST_DISABLE_$1 */" + fi + AC_SUBST(GST_DISABLE_[$1]_DEFINE) + undefine([subsys_def]) +]) + + +dnl Parse gstconfig.h for feature and defines add the symbols and substitions +dnl +dnl AG_GST_PARSE_SUBSYSTEM_DISABLE(GST_CONFIGPATH, FEATURE) +dnl +AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLE], +[ + grep >/dev/null "#undef GST_DISABLE_$2" $1 + if test $? = 0; then + GST_DISABLE_[$2]=0 + else + GST_DISABLE_[$2]=1 + fi + AC_SUBST(GST_DISABLE_[$2]) +]) + +dnl Parse gstconfig.h and defines add the symbols and substitions +dnl +dnl GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h" +dnl AG_GST_PARSE_SUBSYSTEM_DISABLES(GST_CONFIGPATH) +dnl +AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLES], +[ + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,GST_DEBUG) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,LOADSAVE) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,PARSE) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,TRACE) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,ALLOC_TRACE) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,REGISTRY) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,PLUGIN) + AG_GST_PARSE_SUBSYSTEM_DISABLE($1,XML) +]) + + + +dnl relies on GST_PLUGINS_ALL, GST_PLUGINS_SELECTED, GST_PLUGINS_YES, +dnl GST_PLUGINS_NO, and BUILD_EXTERNAL +AC_DEFUN([AG_GST_OUTPUT_PLUGINS], [ + +printf "configure: *** Plug-ins without external dependencies that will be built:\n" +( for i in $GST_PLUGINS_SELECTED; do printf '\t'$i'\n'; done ) | sort +printf "\n" + +printf "configure: *** Plug-ins without external dependencies that will NOT be built:\n" +( for i in $GST_PLUGINS_ALL; do + case " $GST_PLUGINS_SELECTED " in + *\ $i\ *) + ;; + *) + printf '\t'$i'\n' + ;; + esac + done ) | sort +printf "\n" + +if test "x$BUILD_EXTERNAL" = "xno"; then + printf "configure: *** No plug-ins with external dependencies will be built\n" +else + printf "configure: *** Plug-ins with dependencies that will be built:" + printf "$GST_PLUGINS_YES\n" | sort + printf "\n" + printf "configure: *** Plug-ins with dependencies that will NOT be built:" + printf "$GST_PLUGINS_NO\n" | sort + printf "\n" +fi +]) + diff --git a/common/m4/gst-function.m4 b/common/m4/gst-function.m4 new file mode 100644 index 0000000..61adfd3 --- /dev/null +++ b/common/m4/gst-function.m4 @@ -0,0 +1,63 @@ +dnl +dnl Check for compiler mechanism to show functions in debugging +dnl copied from an Ali patch floating on the internet +dnl +AC_DEFUN([AG_GST_CHECK_FUNCTION],[ + dnl #1: __PRETTY_FUNCTION__ + AC_MSG_CHECKING(whether $CC implements __PRETTY_FUNCTION__) + AC_CACHE_VAL(gst_cv_have_pretty_function,[ + AC_TRY_LINK([#include ], + [printf("%s", __PRETTY_FUNCTION__);], + gst_cv_have_pretty_function=yes, + gst_cv_have_pretty_function=no) + ]) + AC_MSG_RESULT($gst_cv_have_pretty_function) + if test "$gst_cv_have_pretty_function" = yes; then + AC_DEFINE(HAVE_PRETTY_FUNCTION, 1, + [defined if the compiler implements __PRETTY_FUNCTION__]) + fi + +dnl #2: __FUNCTION__ + AC_MSG_CHECKING(whether $CC implements __FUNCTION__) + AC_CACHE_VAL(gst_cv_have_function,[ + AC_TRY_LINK([#include ], + [printf("%s", __FUNCTION__);], + gst_cv_have_function=yes, + gst_cv_have_function=no) + ]) + AC_MSG_RESULT($gst_cv_have_function) + if test "$gst_cv_have_function" = yes; then + AC_DEFINE(HAVE_FUNCTION, 1, + [defined if the compiler implements __FUNCTION__]) + fi + +dnl #3: __func__ + AC_MSG_CHECKING(whether $CC implements __func__) + AC_CACHE_VAL(gst_cv_have_func,[ + AC_TRY_LINK([#include ], + [printf("%s", __func__);], + gst_cv_have_func=yes, + gst_cv_have_func=no) + ]) + AC_MSG_RESULT($gst_cv_have_func) + if test "$gst_cv_have_func" = yes; then + AC_DEFINE(HAVE_FUNC, 1, + [defined if the compiler implements __func__]) + fi + +dnl now define FUNCTION to whatever works, and fallback to "" + if test "$gst_cv_have_pretty_function" = yes; then + function=__PRETTY_FUNCTION__ + else + if test "$gst_cv_have_function" = yes; then + function=__FUNCTION__ + else + if test "$gst_cv_have_func" = yes; then + function=__func__ + else + function=\"\" + fi + fi + fi + AC_DEFINE_UNQUOTED(GST_FUNCTION, $function, [macro to use to show function name]) +]) diff --git a/common/m4/gst-gettext.m4 b/common/m4/gst-gettext.m4 new file mode 100644 index 0000000..a63651b --- /dev/null +++ b/common/m4/gst-gettext.m4 @@ -0,0 +1,21 @@ +dnl gettext setup + +dnl AG_GST_GETTEXT([gettext-package]) +dnl defines GETTEXT_PACKAGE and LOCALEDIR + +AC_DEFUN([AG_GST_GETTEXT], +[ + if test "$USE_NLS" = "yes"; then + GETTEXT_PACKAGE=[$1] + else + GETTEXT_PACKAGE=[NULL] + fi + AC_SUBST(GETTEXT_PACKAGE) + AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "$GETTEXT_PACKAGE", + [gettext package name]) + + dnl define LOCALEDIR in config.h + AS_AC_EXPAND(LOCALEDIR, $datadir/locale) + AC_DEFINE_UNQUOTED([LOCALEDIR], "$LOCALEDIR", + [gettext locale dir]) +]) diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4 new file mode 100644 index 0000000..bafba41 --- /dev/null +++ b/common/m4/gst-glib2.m4 @@ -0,0 +1,73 @@ +dnl check for a minimum version of GLib + +dnl AG_GST_GLIB_CHECK([minimum-version-required]) + +AC_DEFUN([AG_GST_GLIB_CHECK], +[ + AC_REQUIRE([AS_NANO]) + + dnl Minimum required version of GLib + GLIB_REQ=[$1] + if test "x$GLIB_REQ" = "x" + then + AC_MSG_ERROR([Please specify a required version for GLib 2.0]) + fi + AC_SUBST(GLIB_REQ) + + dnl Check for glib with everything + AG_GST_PKG_CHECK_MODULES(GLIB, + glib-2.0 >= $GLIB_REQ gobject-2.0 gthread-2.0 gmodule-no-export-2.0) + + if test "x$HAVE_GLIB" = "xno"; then + AC_MSG_ERROR([This package requires GLib >= $GLIB_REQ to compile.]) + fi + + dnl Add define to tell GLib that threading is always enabled within GStreamer + dnl code (optimisation, bypasses checks if the threading system is enabled + dnl when using threading primitives) + GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_THREADS_MANDATORY" + + dnl Define G_DISABLE_DEPRECATED for GIT versions + if test "x$PACKAGE_VERSION_NANO" = "x1"; then + GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_DEPRECATED" + fi + + AC_ARG_ENABLE(gobject-cast-checks, + AS_HELP_STRING([--enable-gobject-cast-checks[=@<:@no/auto/yes@:>@]], + [Enable GObject cast checks]),, + [enable_gobject_cast_checks=auto]) + + if test "x$enable_gobject_cast_checks" = "xauto"; then + dnl For releases, turn off the cast checks + if test "x$PACKAGE_VERSION_NANO" = "x1"; then + enable_gobject_cast_checks=yes + else + enable_gobject_cast_checks=no + fi + fi + + if test "x$enable_gobject_cast_checks" = "xno"; then + GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_CAST_CHECKS" + fi + + AC_ARG_ENABLE(glib-asserts, + AS_HELP_STRING([--enable-glib-asserts[=@<:@no/auto/yes@:>@]], + [Enable GLib assertion]),, + [enable_glib_assertions=auto]) + + if test "x$enable_glib_assertions" = "xauto"; then + dnl For releases, turn off the assertions + if test "x$PACKAGE_VERSION_NANO" = "x1"; then + enable_glib_assertions=yes + else + enable_glib_assertions=no + fi + fi + + if test "x$enable_glib_assertions" = "xno"; then + GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT" + fi + + dnl for the poor souls who for example have glib in /usr/local + AS_SCRUB_INCLUDE(GLIB_CFLAGS) +]) diff --git a/common/m4/gst-libxml2.m4 b/common/m4/gst-libxml2.m4 new file mode 100644 index 0000000..4a843f0 --- /dev/null +++ b/common/m4/gst-libxml2.m4 @@ -0,0 +1,52 @@ +dnl call this macro with the minimum required version as an argument +dnl this macro sets and AC_SUBSTs XML_CFLAGS and XML_LIBS +dnl it also sets LIBXML_PKG, used for the pkg-config file + +AC_DEFUN([AG_GST_LIBXML2_CHECK], +[ + dnl Minimum required version of libxml2 + dnl default to 2.4.9 if not specified + LIBXML2_REQ=ifelse([$1],,2.4.9,[$1]) + AC_SUBST(LIBXML2_REQ) + + dnl check for libxml2 + PKG_CHECK_MODULES(XML, libxml-2.0 >= $LIBXML2_REQ, + HAVE_LIBXML2=yes, [ + AC_MSG_RESULT(no) + HAVE_LIBXML2=no + ]) + if test "x$HAVE_LIBXML2" = "xyes"; then + AC_DEFINE(HAVE_LIBXML2, 1, [Define if libxml2 is available]) + else + AC_MSG_ERROR([ + Need libxml2 and development headers/files to build GStreamer. + + You can do without libxml2 if you pass --disable-loadsave to + configure, but that breaks ABI, so don't do that unless you + are building for an embedded setup and know what you are doing. + ]) + fi + dnl this is for the .pc file + LIBXML_PKG=', libxml-2.0' + AC_SUBST(LIBXML_PKG) + AC_SUBST(XML_LIBS) + AC_SUBST(XML_CFLAGS) + + dnl XML_LIBS might pull in -lz without zlib actually being on the system, so + dnl try linking with these LIBS and CFLAGS + ac_save_CFLAGS=$CFLAGS + ac_save_LIBS=$LIBS + CFLAGS="$CFLAGS $XML_CFLAGS" + LIBS="$LIBS $XML_LIBS" + AC_TRY_LINK([ +#include +#include +],[ +/* function body */ +], + AC_MSG_NOTICE([Test xml2 program linked]), + AC_MSG_ERROR([Could not link libxml2 test program. Check if you have the necessary dependencies.]) + ) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" +]) diff --git a/common/m4/gst-package-release-datetime.m4 b/common/m4/gst-package-release-datetime.m4 new file mode 100644 index 0000000..126919b --- /dev/null +++ b/common/m4/gst-package-release-datetime.m4 @@ -0,0 +1,89 @@ +dnl macros to set GST_PACKAGE_RELEASE_DATETIME + +dnl =========================================================================== +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME +dnl +dnl Usage: +dnl +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME() +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no]...) +dnl sets the release datetime to the current date +dnl (no = this is not a release, but git or prerelease) +dnl +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD]) +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [YYYY-MM-DD]) +dnl sets the release datetime to the specified date (and time, if given) +dnl (yes = this is a release, not git or prerelease) +dnl +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [DOAP-FILE], [RELEASE-VERSION]) +dnl sets the release date to the release date associated with version +dnl RELEASE-VERSION in the .doap file DOAP-FILE +dnl (yes = this is a release, not git or prerelease) +dnl +dnl We need to treat pre-releases like git because there won't be an entry +dnl in the .doap file for pre-releases yet, and we don't want to use the +dnl date of the last release either. +dnl =========================================================================== +AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME], +[ + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME() + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes]...) + if test "x$1" = "xno" -o "x$1" = "x"; then + GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"` + elif test "x$1" = "xyes"; then + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], ["YYYY-MM-DD"]) + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], [DOAP-FILE], [RELEASE-VERSION]) + if ( echo $1 | grep -e '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=$1 + else + dnl we assume the .doap file contains the date as YYYY-MM-DD + YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" $3 $2`; + if test "x$YYYY_MM_DD" != "x"; then + GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD + else + AC_MSG_ERROR([SET_PACKAGE_RELEASE_DATETIME: could not extract + release date for release version $3 from $2]) + GST_PACKAGE_RELEASE_DATETIME="" + fi + fi + dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD]) + elif ( echo $1 | grep -e '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=$1 + else + AC_MSG_WARN([SET_PACKAGE_RELEASE_DATETIME: invalid first argument]) + GST_PACKAGE_RELEASE_DATETIME="" + fi + + if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then + AC_MSG_WARN([Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME]) + else + AC_MSG_NOTICE([Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME]) + + AC_DEFINE_UNQUOTED([GST_PACKAGE_RELEASE_DATETIME], + ["$GST_PACKAGE_RELEASE_DATETIME"], + [GStreamer package release date/time for plugins as YYYY-MM-DD]) + fi +]) + +dnl =========================================================================== +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO +dnl +dnl Usage: +dnl +dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([NANO-VERSION], [DOAP-FILE], [RELEASE-VERSION]) +dnl if NANO-VERSION is 0, sets the release date to the release date associated +dnl with version RELEASE-VERSION in the .doap file DOAP-FILE, otherwise sets +dnl the release date and time to the current date/time. +dnl +dnl We need to treat pre-releases like git because there won't be an entry +dnl in the .doap file for pre-releases yet, and we don't want to use the +dnl date of the last release either. +dnl =========================================================================== +AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO], +[ + if test "x$1" = "x0"; then + AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [ $2 ], [ $3 ]) + else + AG_GST_SET_PACKAGE_RELEASE_DATETIME([no]) + fi +]) diff --git a/common/m4/gst-parser.m4 b/common/m4/gst-parser.m4 new file mode 100644 index 0000000..2cae45d --- /dev/null +++ b/common/m4/gst-parser.m4 @@ -0,0 +1,55 @@ +AC_DEFUN([AG_GST_BISON_CHECK], +[ + dnl FIXME: check if AC_PROG_YACC is suitable here + dnl FIXME: make precious + AC_PATH_PROG(BISON_PATH, bison, no) + if test x$BISON_PATH = xno; then + AC_MSG_ERROR(Could not find bison) + fi + + dnl check bison version + dnl we need version >= 1.875 for the reentrancy support + dnl in the parser. + dnl First lines observed: 'bison (GNU Bison) 2.3' or 'GNU Bison version 1.28' + bison_min_version=1.875 + bison_version=`$BISON_PATH --version | head -n 1 | sed 's/^[[^0-9]]*//' | sed 's/[[^0-9]]*$//' | cut -d' ' -f1` + AC_MSG_CHECKING([bison version $bison_version >= $bison_min_version]) + + if perl -we "exit ((v$bison_version ge v$bison_min_version) ? 0 : 1)"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_ERROR([no]) + fi +]) + +AC_DEFUN([AG_GST_FLEX_CHECK], +[ + dnl we require flex for building the parser + AC_PATH_PROG(FLEX_PATH, flex, no) + if test x$FLEX_PATH = xno; then + AC_MSG_ERROR(Could not find flex) + fi + + dnl check flex version + dnl we need version >= 2.5.31 for the reentrancy support + dnl in the parser. + flex_min_version=2.5.31 + flex_version=`$FLEX_PATH --version | head -n 1 | sed 's/^.* //' | sed 's/[[a-zA-Z]]*$//' | cut -d' ' -f1` + AC_MSG_CHECKING([flex version $flex_version >= $flex_min_version]) + if perl -w < \$min_version_major) || + ((\$flex_version_major == \$min_version_major) && + (\$flex_version_minor > \$min_version_minor)) || + ((\$flex_version_major == \$min_version_major) && + (\$flex_version_minor == \$min_version_minor) && + (\$flex_version_micro >= \$min_version_micro))) + ? 0 : 1); +EOF + then + AC_MSG_RESULT(yes) + else + AC_MSG_ERROR([no]) + fi +]) diff --git a/common/m4/gst-platform.m4 b/common/m4/gst-platform.m4 new file mode 100644 index 0000000..40d6faf --- /dev/null +++ b/common/m4/gst-platform.m4 @@ -0,0 +1,67 @@ +dnl AG_GST_PLATFORM +dnl Check for platform specific features and define some variables +dnl +dnl GST_EXTRA_MODULE_SUFFIX: contains a platform specific +dnl extra module suffix additional to G_MODULE_SUFFIX +dnl +dnl HAVE_OSX: Defined if compiling for OS X +dnl +dnl GST_HAVE_UNSAFE_FORK: Defined if fork is unsafe (Windows) +dnl +dnl HAVE_WIN32: Defined if compiling on Win32 +dnl + +AC_DEFUN([AG_GST_PLATFORM], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + + case $host_os in + rhapsody*) + AC_DEFINE_UNQUOTED(GST_EXTRA_MODULE_SUFFIX, [".dylib"], [Extra platform specific plugin suffix]) + ;; + darwin*) + AC_DEFINE_UNQUOTED(GST_EXTRA_MODULE_SUFFIX, [".dylib"], [Extra platform specific plugin suffix]) + AC_DEFINE_UNQUOTED(HAVE_OSX, 1, [Defined if compiling for OSX]) + ;; + cygwin*) + AC_DEFINE_UNQUOTED(GST_HAVE_UNSAFE_FORK, 1, [Defined when registry scanning through fork is unsafe]) + ;; + mingw* | msvc* | mks*) + dnl HAVE_WIN32 currently means "disable POSIXisms". + AC_DEFINE_UNQUOTED(HAVE_WIN32, 1, [Defined if compiling for Windows]) + + dnl define __MSVCRT_VERSION__ version if not set already by the + dnl compiler (ie. mostly for mingw). This is needed for things like + dnl __stat64 to be available. If set by the compiler, ensure it's + dnl new enough - we need at least WinXP SP2. + AC_TRY_COMPILE([ ], [ return __MSVCRT_VERSION__; ], [ + AC_TRY_COMPILE([ ], [ + #if __MSVCRT_VERSION__ < 0x0601 + #error "MSVCRT too old" + #endif + ], [ + AC_MSG_NOTICE([MSVCRT version looks ok]) + ], [ + AC_MSG_ERROR([MSVCRT version too old, need at least WinXP SP2]) + ]) + ], [ + AC_MSG_NOTICE([Setting MSVCRT version to 0x0601]) + AC_DEFINE_UNQUOTED(__MSVCRT_VERSION__, 0x0601, [We need at least WinXP SP2 for __stat64]) + ]) + ;; + *) + ;; + esac +]) + +AC_DEFUN([AG_GST_LIBTOOL_PREPARE], +[ + dnl Persuade libtool to also link (-l) a 'pure' (DirectX) static lib, + dnl i.e. as opposed to only import lib with dll counterpart. + dnl Needs to be tweaked before libtool's checks. + case $host_os in + cygwin* | mingw*) + lt_cv_deplibs_check_method=pass_all + ;; + esac +]) \ No newline at end of file diff --git a/common/m4/gst-plugin-docs.m4 b/common/m4/gst-plugin-docs.m4 new file mode 100644 index 0000000..dcfd61d --- /dev/null +++ b/common/m4/gst-plugin-docs.m4 @@ -0,0 +1,21 @@ +dnl AG_GST_PLUGIN_DOCS([MINIMUM-GTK-DOC-VERSION],[MINIMUM-PYTHON-VERSION]) +dnl +dnl checks for prerequisites for the common/mangle-tmpl.py script +dnl used when building the plugin documentation + +AC_DEFUN([AG_GST_PLUGIN_DOCS], +[ + AC_BEFORE([GTK_DOC_CHECK],[$0])dnl check for gtk-doc first + AC_BEFORE([AS_PATH_PYTHON],[$1])dnl find python first + + build_plugin_docs=no + AC_MSG_CHECKING([whether to build plugin documentation]) + if test x$enable_gtk_doc = xyes; then + build_plugin_docs=yes + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no (gtk-doc disabled or not available)]) + fi + + AM_CONDITIONAL(ENABLE_PLUGIN_DOCS, test x$build_plugin_docs = xyes) +]) diff --git a/common/m4/gst-plugindir.m4 b/common/m4/gst-plugindir.m4 new file mode 100644 index 0000000..09989d0 --- /dev/null +++ b/common/m4/gst-plugindir.m4 @@ -0,0 +1,17 @@ +dnl AG_GST_SET_PLUGINDIR + +dnl AC_DEFINE PLUGINDIR to the full location where plug-ins will be installed +dnl AC_SUBST plugindir, to be used in Makefile.am's + +AC_DEFUN([AG_GST_SET_PLUGINDIR], +[ + dnl define location of plugin directory + AS_AC_EXPAND(PLUGINDIR, ${libdir}/gstreamer-$GST_MAJORMINOR) + AC_DEFINE_UNQUOTED(PLUGINDIR, "$PLUGINDIR", + [directory where plugins are located]) + AC_MSG_NOTICE([Using $PLUGINDIR as the plugin install location]) + + dnl plugin directory configure-time variable for use in Makefile.am + plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR" + AC_SUBST(plugindir) +]) diff --git a/common/m4/gst-valgrind.m4 b/common/m4/gst-valgrind.m4 new file mode 100644 index 0000000..5c0d608 --- /dev/null +++ b/common/m4/gst-valgrind.m4 @@ -0,0 +1,35 @@ +AC_DEFUN([AG_GST_VALGRIND_CHECK], +[ + dnl valgrind inclusion + AC_ARG_ENABLE(valgrind, + AC_HELP_STRING([--disable-valgrind], [disable run-time valgrind detection]), + [ + case "${enableval}" in + yes) USE_VALGRIND="$USE_DEBUG" ;; + no) USE_VALGRIND=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind) ;; + esac], + [ + USE_VALGRIND="$USE_DEBUG" + ]) dnl Default value + + VALGRIND_REQ="3.0" + if test "x$USE_VALGRIND" = xyes; then + PKG_CHECK_MODULES(VALGRIND, valgrind >= $VALGRIND_REQ, + USE_VALGRIND="yes", + [ + USE_VALGRIND="no" + AC_MSG_RESULT([no]) + ]) + fi + + if test "x$USE_VALGRIND" = xyes; then + AC_DEFINE(HAVE_VALGRIND, 1, [Define if valgrind should be used]) + AC_MSG_NOTICE(Using extra code paths for valgrind) + fi + AC_SUBST(VALGRIND_CFLAGS) + AC_SUBST(VALGRIND_LIBS) + + AC_PATH_PROG(VALGRIND_PATH, valgrind, no) + AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno") +]) diff --git a/common/m4/gst-x11.m4 b/common/m4/gst-x11.m4 new file mode 100644 index 0000000..d3baf2d --- /dev/null +++ b/common/m4/gst-x11.m4 @@ -0,0 +1,70 @@ +dnl macros for X-related detections +dnl AC_SUBST's HAVE_X, X_CFLAGS, X_LIBS +AC_DEFUN([AG_GST_CHECK_X], +[ + AC_PATH_XTRA + ac_cflags_save="$CFLAGS" + ac_cppflags_save="$CPPFLAGS" + CFLAGS="$CFLAGS $X_CFLAGS" + CPPFLAGS="$CPPFLAGS $X_CFLAGS" + + dnl now try to find the HEADER + AC_CHECK_HEADER(X11/Xlib.h, HAVE_X="yes", HAVE_X="no") + + if test "x$HAVE_X" = "xno" + then + AC_MSG_NOTICE([cannot find X11 development files]) + else + dnl this is much more than we want + X_LIBS="$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS" + dnl AC_PATH_XTRA only defines the path needed to find the X libs, + dnl it does not add the libs; therefore we add them here + X_LIBS="$X_LIBS -lX11" + AC_SUBST(X_CFLAGS) + AC_SUBST(X_LIBS) + fi + AC_SUBST(HAVE_X) + + CFLAGS="$ac_cflags_save" + CPPFLAGS="$ac_cppflags_save" +]) + +dnl *** XVideo *** +dnl Look for the PIC library first, Debian requires it. +dnl Check debian-devel archives for gory details. +dnl 20020110: +dnl At the moment XFree86 doesn't distribute shared libXv due +dnl to unstable API. On many platforms you CAN NOT link a shared +dnl lib to a static non-PIC lib. This is what the xvideo GStreamer +dnl plug-in wants to do. So Debian distributes a PIC compiled +dnl version of the static lib for plug-ins to link to when it is +dnl inappropriate to link the main application to libXv directly. +dnl FIXME: add check if this platform can support linking to a +dnl non-PIC libXv, if not then don not use Xv. +dnl FIXME: perhaps warn user if they have a shared libXv since +dnl this is an error until XFree86 starts shipping one +AC_DEFUN([AG_GST_CHECK_XV], +[ + if test x$HAVE_X = xyes; then + AC_CHECK_LIB(Xv_pic, XvQueryExtension, + HAVE_XVIDEO="yes", HAVE_XVIDEO="no", + $X_LIBS -lXext) + + if test x$HAVE_XVIDEO = xyes; then + XVIDEO_LIBS="-lXv_pic -lXext" + AC_SUBST(XVIDEO_LIBS) + else + dnl try again using something else if we didn't find it first + if test x$HAVE_XVIDEO = xno; then + AC_CHECK_LIB(Xv, XvQueryExtension, + HAVE_XVIDEO="yes", HAVE_XVIDEO="no", + $X_LIBS -lXext) + + if test x$HAVE_XVIDEO = xyes; then + XVIDEO_LIBS="-lXv -lXext" + AC_SUBST(XVIDEO_LIBS) + fi + fi + fi + fi +]) diff --git a/common/m4/gst.m4 b/common/m4/gst.m4 new file mode 100644 index 0000000..ddfde51 --- /dev/null +++ b/common/m4/gst.m4 @@ -0,0 +1,31 @@ +dnl AG_GST_INIT +dnl sets up use of GStreamer configure.ac macros +dnl all GStreamer autoconf macros are prefixed +dnl with AG_GST_ for public macros +dnl with _AG_GST_ for private macros + +AC_DEFUN([AG_GST_INIT], +[ + m4_pattern_forbid(^_?AG_GST_) +]) + +dnl AG_GST_PKG_CONFIG_PATH +dnl +dnl sets up a GST_PKG_CONFIG_PATH variable for use in Makefile.am +dnl which contains the path of the in-tree pkgconfig directory first +dnl and then any paths specified in PKG_CONFIG_PATH. +dnl +dnl We do this mostly so we don't have to use unportable shell constructs +dnl such as ${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} in Makefile.am to handle +dnl the case where the environment variable is not set, but also in order +dnl to avoid a trailing ':' in the PKG_CONFIG_PATH which apparently causes +dnl problems with pkg-config on windows with msys/mingw. +AC_DEFUN([AG_GST_PKG_CONFIG_PATH], +[ + GST_PKG_CONFIG_PATH="\$(top_builddir)/pkgconfig" + if test "x$PKG_CONFIG_PATH" != "x"; then + GST_PKG_CONFIG_PATH="$GST_PKG_CONFIG_PATH:$PKG_CONFIG_PATH" + fi + AC_SUBST([GST_PKG_CONFIG_PATH]) + AC_MSG_NOTICE([Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH]) +]) diff --git a/common/m4/gtk-doc.m4 b/common/m4/gtk-doc.m4 new file mode 100644 index 0000000..39a4e7d --- /dev/null +++ b/common/m4/gtk-doc.m4 @@ -0,0 +1,42 @@ +dnl -*- mode: autoconf -*- + +# serial 1 + +dnl Usage: +dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) +AC_DEFUN([GTK_DOC_CHECK], +[ + AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first + dnl for overriding the documentation installation directory + AC_ARG_WITH([html-dir], + AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, + [with_html_dir='${datadir}/gtk-doc/html']) + HTML_DIR="$with_html_dir" + AC_SUBST([HTML_DIR]) + + dnl enable/disable documentation building + AC_ARG_ENABLE([gtk-doc], + AS_HELP_STRING([--enable-gtk-doc], + [use gtk-doc to build documentation [[default=no]]]),, + [enable_gtk_doc=no]) + + if test x$enable_gtk_doc = xyes; then + ifelse([$1],[], + [PKG_CHECK_EXISTS([gtk-doc],, + AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], + [PKG_CHECK_EXISTS([gtk-doc >= $1],, + AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build gtk-doc]))]) + if test -z "$SED"; then + AC_PROG_SED + fi + fi + + AC_MSG_CHECKING([whether to build gtk-doc documentation]) + AC_MSG_RESULT($enable_gtk_doc) + + AC_PATH_PROGS(GTKDOC_CHECK,gtkdoc-check,) + + AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) + AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) +]) diff --git a/common/m4/introspection.m4 b/common/m4/introspection.m4 new file mode 100644 index 0000000..f9ce49c --- /dev/null +++ b/common/m4/introspection.m4 @@ -0,0 +1,88 @@ +dnl -*- mode: autoconf -*- +dnl Copyright 2009 Johan Dahlin +dnl +dnl This file is free software; the author(s) gives unlimited +dnl permission to copy and/or distribute it, with or without +dnl modifications, as long as this notice is preserved. +dnl + +# serial 1 + +m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL], +[ + AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([LT_INIT],[$0])dnl setup libtool first + + dnl enable/disable introspection + m4_if([$2], [require], + [dnl + enable_introspection=yes + ],[dnl + AC_ARG_ENABLE(introspection, + AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]], + [Enable introspection for this build]),, + [enable_introspection=auto]) + ])dnl + + AC_MSG_CHECKING([for gobject-introspection]) + + dnl presence/version checking + AS_CASE([$enable_introspection], + [no], [dnl + found_introspection="no (disabled, use --enable-introspection to enable)" + ],dnl + [yes],[dnl + PKG_CHECK_EXISTS([gobject-introspection-1.0],, + AC_MSG_ERROR([gobject-introspection-1.0 is not installed])) + PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], + found_introspection=yes, + AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME])) + ],dnl + [auto],[dnl + PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no) + ],dnl + [dnl + AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@]) + ])dnl + + AC_MSG_RESULT([$found_introspection]) + + INTROSPECTION_SCANNER= + INTROSPECTION_COMPILER= + INTROSPECTION_GENERATE= + INTROSPECTION_GIRDIR= + INTROSPECTION_TYPELIBDIR= + if test "x$found_introspection" = "xyes"; then + INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` + INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` + INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` + INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` + INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" + fi + AC_SUBST(INTROSPECTION_SCANNER) + AC_SUBST(INTROSPECTION_COMPILER) + AC_SUBST(INTROSPECTION_GENERATE) + AC_SUBST(INTROSPECTION_GIRDIR) + AC_SUBST(INTROSPECTION_TYPELIBDIR) + + AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") +]) + + +dnl Usage: +dnl GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version]) + +AC_DEFUN([GOBJECT_INTROSPECTION_CHECK], +[ + _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1]) +]) + +dnl Usage: +dnl GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version]) + + +AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE], +[ + _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) +]) diff --git a/common/m4/orc.m4 b/common/m4/orc.m4 new file mode 100644 index 0000000..26b2459 --- /dev/null +++ b/common/m4/orc.m4 @@ -0,0 +1,70 @@ +dnl pkg-config-based checks for Orc + +dnl specific: +dnl ORC_CHECK([REQUIRED_VERSION]) + +AC_DEFUN([ORC_CHECK], +[ + ORC_REQ=ifelse([$1], , "0.4.6", [$1]) + + AC_ARG_ENABLE(orc, + AC_HELP_STRING([--enable-orc],[use Orc if installed]), + [case "${enableval}" in + auto) enable_orc=auto ;; + yes) enable_orc=yes ;; + no) enable_orc=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-orc) ;; + esac + ], + [enable_orc=auto]) dnl Default value + + if test "x$enable_orc" != "xno" ; then + PKG_CHECK_MODULES(ORC, orc-0.4 >= $ORC_REQ, [ + AC_DEFINE(HAVE_ORC, 1, [Use Orc]) + HAVE_ORC=yes + if test "x$ORCC" = "x" ; then + AC_MSG_CHECKING(for usable orcc) + ORCC=`$PKG_CONFIG --variable=orcc orc-0.4` + dnl check whether the orcc found by pkg-config can be run from the build environment + dnl if this is not the case (e.g. when cross-compiling) fall back to orcc from PATH + AS_IF([$ORCC --version 1> /dev/null 2> /dev/null], [], [ORCC=`which orcc`]) + AC_MSG_RESULT($ORCC) + fi + AC_SUBST(ORCC) + ORCC_FLAGS="--compat $ORC_REQ" + AC_SUBST(ORCC_FLAGS) + AS_IF([test "x$ORCC" = "x"], [HAVE_ORCC=no], [HAVE_ORCC=yes]) + ], [ + if test "x$enable_orc" = "xyes" ; then + AC_MSG_ERROR([--enable-orc specified, but Orc >= $ORC_REQ not found]) + fi + AC_DEFINE(DISABLE_ORC, 1, [Disable Orc]) + HAVE_ORC=no + HAVE_ORCC=no + ]) + else + AC_DEFINE(DISABLE_ORC, 1, [Disable Orc]) + HAVE_ORC=no + HAVE_ORCC=no + fi + AM_CONDITIONAL(HAVE_ORC, [test "x$HAVE_ORC" = "xyes"]) + AM_CONDITIONAL(HAVE_ORCC, [test "x$HAVE_ORCC" = "xyes"]) + +])) + +AC_DEFUN([ORC_OUTPUT], +[ + if test "$HAVE_ORC" = yes ; then + printf "configure: *** Orc acceleration enabled.\n" + else + if test "x$enable_orc" = "xno" ; then + printf "configure: *** Orc acceleration disabled by --disable-orc. Slower code paths\n" + printf " will be used.\n" + else + printf "configure: *** Orc acceleration disabled. Requires Orc >= $ORC_REQ, which was\n" + printf " not found. Slower code paths will be used.\n" + fi + fi + printf "\n" +]) + diff --git a/common/m4/pkg.m4 b/common/m4/pkg.m4 new file mode 100644 index 0000000..996e294 --- /dev/null +++ b/common/m4/pkg.m4 @@ -0,0 +1,157 @@ +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES diff --git a/common/mangle-tmpl.py b/common/mangle-tmpl.py new file mode 100644 index 0000000..bd4f948 --- /dev/null +++ b/common/mangle-tmpl.py @@ -0,0 +1,163 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +""" +use the output from gst-xmlinspect.py to mangle tmpl/*.sgml and +insert/overwrite Short Description and Long Description +""" + +# FIXME: right now it uses pygst and scans on its own; +# we really should use inspect/*.xml instead since the result of +# gst-xmlinspect.py is committed by the docs maintainer, who can be +# expected to have pygst, but this step should be done for every docs build, +# so no pygst allowed + +# read in inspect/*.xml +# for every tmpl/element-(name).xml: mangle with details from element + +import glob +import re +import sys +import os + +class Tmpl: + def __init__(self, filename): + self.filename = filename + self._sectionids = [] + self._sections = {} + + def read(self): + """ + Read and parse the sections from the given file. + """ + lines = open(self.filename).readlines() + matcher = re.compile("\n") + id = None + + for line in lines: + match = matcher.search(line) + if match: + id = match.expand("\\1") + self._sectionids.append(id) + self._sections[id] = [] + else: + if not id: + sys.stderr.write( + "WARNING: line before a SECTION header: %s" % line) + else: + self._sections[id].append(line) + + def get_section(self, id): + """ + Get the content from the given section. + """ + return self._sections[id] + + def set_section(self, id, content): + """ + Replace the given section id with the given content. + """ + self._sections[id] = content + + def output(self): + """ + Return the output of the current template in the tmpl/*.sgml format. + """ + lines = [] + for id in self._sectionids: + lines.append("\n" % id) + for line in self._sections[id]: + lines.append(line) + + return "".join(lines) + + def write(self, backup=False): + """ + Write out the template file again, backing up the previous one. + """ + if backup: + target = self.filename + ".mangle.bak" + os.rename(self.filename, target) + + handle = open(self.filename, "w") + handle.write(self.output()) + handle.close() + +import xml.dom.minidom + +def get_elements(file): + elements = {} + doc = xml.dom.minidom.parse(file) + + elem = None + for e in doc.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'plugin': + elem = e + break + if elem == None: + return None + + elem2 = None + for e in elem.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'elements': + elem2 = e + break + if elem2 == None: + return None + + elem = elem2 + + for e in elem.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'element': + name = None + description = None + + for e2 in e.childNodes: + if e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'name': + name = e2.childNodes[0].nodeValue.encode("UTF-8") + elif e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'description': + if e2.childNodes: + description = e2.childNodes[0].nodeValue.encode("UTF-8") + else: + description = 'No description' + + if name != None and description != None: + elements[name] = {'description': description} + + return elements + +def main(): + if not len(sys.argv) == 3: + sys.stderr.write('Please specify the inspect/ dir and the tmpl/ dir') + sys.exit(1) + + inspectdir = sys.argv[1] + tmpldir = sys.argv[2] + + # parse all .xml files; build map of element name -> short desc + #for file in glob.glob("inspect/plugin-*.xml"): + elements = {} + for file in glob.glob("%s/plugin-*.xml" % inspectdir): + elements.update(get_elements(file)) + + for file in glob.glob("%s/element-*.sgml" % tmpldir): + base = os.path.basename(file) + element = base[len("element-"):-len(".sgml")] + tmpl = Tmpl(file) + tmpl.read() + if element in elements.keys(): + description = elements[element]['description'] + tmpl.set_section("Short_Description", "%s\n\n" % description) + + # put in an include if not yet there + line = '' + \ + '' + \ + '\n' + section = tmpl.get_section("Long_Description") + if not section[0] == line: + section.insert(0, line) + tmpl.set_section("Long_Description", section) + tmpl.write() + +main() diff --git a/common/orc.mak b/common/orc.mak new file mode 100644 index 0000000..a232b5d --- /dev/null +++ b/common/orc.mak @@ -0,0 +1,76 @@ +# +# This is a makefile.am fragment to build Orc code. +# +# Define ORC_SOURCE and then include this file, such as: +# +# ORC_SOURCE=gstadderorc +# include $(top_srcdir)/common/orc.mak +# +# This fragment will create tmp-orc.c and gstadderorc.h from +# gstadderorc.orc. +# +# When 'make dist' is run at the top level, or 'make orc-update' +# in a directory including this fragment, the generated source +# files will be copied to $(ORC_SOURCE)-dist.[ch]. These files +# should be checked in to git, since they are used if Orc is +# disabled. +# +# Note that this file defines BUILT_SOURCES, so any later usage +# of BUILT_SOURCES in the Makefile.am that includes this file +# must use '+='. +# + + +EXTRA_DIST = $(ORC_SOURCE).orc + +ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h +BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h + + +orc-update: tmp-orc.c $(ORC_SOURCE).h + $(top_srcdir)/common/gst-indent tmp-orc.c + cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c + cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h + +orcc_v_gen = $(orcc_v_gen_$(V)) +orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY)) +orcc_v_gen_0 = @echo " ORCC $@"; + +cp_v_gen = $(cp_v_gen_$(V)) +cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY)) +cp_v_gen_0 = @echo " CP $@"; + +if HAVE_ORCC +tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc + $(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc + +$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc + $(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc +else +tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c + $(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c + +$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c + $(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h +endif + +clean-local: clean-orc +.PHONY: clean-orc +clean-orc: + rm -f tmp-orc.c $(ORC_SOURCE).h + +dist-hook: dist-hook-orc +.PHONY: dist-hook-orc + +# we try and copy updated orc -dist files below, but don't fail if it +# doesn't work as the srcdir might not be writable +dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h + $(top_srcdir)/common/gst-indent tmp-orc.c + rm -f tmp-orc.c~ + cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \ + cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true + cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \ + cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true + cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c + cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h + diff --git a/common/parallel-subdirs.mak b/common/parallel-subdirs.mak new file mode 100644 index 0000000..36885df --- /dev/null +++ b/common/parallel-subdirs.mak @@ -0,0 +1,13 @@ +# include this at the end of $MODULE/ext/Makefile.am to force make to +# build subdirectories in parallel when make -jN is used. We will end up +# descending into all subdirectories a second time, but only after the first +# (parallel) run has finished, so it should go right through the second time. + +.PHONY: independent-subdirs $(SUBDIRS) + +independent-subdirs: $(SUBDIRS) + +$(SUBDIRS): + $(MAKE) -C $@ + +all-recursive: independent-subdirs diff --git a/common/plugins.xsl b/common/plugins.xsl new file mode 100644 index 0000000..60515b6 --- /dev/null +++ b/common/plugins.xsl @@ -0,0 +1,209 @@ + + + + + + + + + + + + -plugins- + + + + + + + + + + + + + + Element Information + + + + + plugin + + + + plugin- + + + + + + + + author + + + + + + + class + + + + + + + + + + Element Pads + + + + + name + + + + + + + direction + + + + + + + presence + + + + + + + + + details + + + + + + + + + + + + + + + + + + + + + -plugins-plugin- + + + + + + 3 + FIXME Library + + + + + + + + + + plugin- + + + + + + + Plugin Information + + + + filename + + + + + + + version + + + + + + + run-time license + + + + + + + package + + + + + + + origin + + + + + + + + + + + + + + + + + + + + + + + Elements + + + + + + + + + + + + + + diff --git a/common/po.mak b/common/po.mak new file mode 100644 index 0000000..e019fac --- /dev/null +++ b/common/po.mak @@ -0,0 +1,4 @@ +# rule to download the latest .po files +download-po: $(top_srcdir)/common/download-translations + $(top_srcdir)/common/download-translations $(PACKAGE) + diff --git a/common/release.mak b/common/release.mak new file mode 100644 index 0000000..4a9b7d5 --- /dev/null +++ b/common/release.mak @@ -0,0 +1,25 @@ +# include this snippet to add a common release: target by using +# include $(top_srcdir)/common/release.mak + +# make bz2 as well +AUTOMAKE_OPTIONS = dist-bzip2 + +release: dist + $(MAKE) $(PACKAGE)-$(VERSION).tar.gz.md5 + $(MAKE) $(PACKAGE)-$(VERSION).tar.bz2.md5 + +# generate md5 sum files +%.md5: % + md5sum $< > $@ + +# check that no marshal or enumtypes files are included +# this in turn ensures that distcheck fails for missing .list files which is currently +# shadowed when the corresponding .c and .h files are included. +distcheck-hook: + @test "x" = "x`find $(distdir) -name \*-enumtypes.[ch] | grep -v win32`" && \ + test "x" = "x`find $(distdir) -name \*-marshal.[ch]`" || \ + ( $(ECHO) "*** Leftover enumtypes or marshal files in the tarball." && \ + $(ECHO) "*** Make sure the following files are not disted:" && \ + find $(distdir) -name \*-enumtypes.[ch] | grep -v win32 && \ + find $(distdir) -name \*-marshal.[ch] && \ + false ) diff --git a/common/scangobj-merge.py b/common/scangobj-merge.py new file mode 100755 index 0000000..9a1cac9 --- /dev/null +++ b/common/scangobj-merge.py @@ -0,0 +1,309 @@ +#!/usr/bin/python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +""" +parse, merge and write gstdoc-scanobj files +""" + +import sys +import os + +def debug(*args): + pass + +# OrderedDict class based on +# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747 +# Licensed under the Python License +class OrderedDict(dict): + def __init__(self): + self._keys = [] + dict.__init__(self) + + def __delitem__(self, key): + dict.__delitem__(self, key) + self._keys.remove(key) + + def __setitem__(self, key, item): + dict.__setitem__(self, key, item) + if key not in self._keys: self._keys.append(key) + + def clear(self): + dict.clear(self) + self._keys = [] + + def copy(self): + dict = dict.copy(self) + dict._keys = self._keys[:] + return dict + + def items(self): + return zip(self._keys, self.values()) + + def keys(self): + return self._keys + + def popitem(self): + try: + key = self._keys[-1] + except IndexError: + raise KeyError('dictionary is empty') + + val = self[key] + del self[key] + + return (key, val) + + def setdefault(self, key, failobj = None): + dict.setdefault(self, key, failobj) + if key not in self._keys: self._keys.append(key) + + def update(self, dict): + dict.update(self, dict) + for key in dict.keys(): + if key not in self._keys: self._keys.append(key) + + def values(self): + return map(self.get, self._keys) + +class Object: + def __init__(self, name): + self._signals = OrderedDict() + self._args = OrderedDict() + self.name = name + + def __repr__(self): + return "" % self.name + + def add_signal(self, signal, overwrite=True): + if not overwrite and self._signals.has_key(signal.name): + raise IndexError, "signal %s already in %r" % (signal.name, self) + self._signals[signal.name] = signal + + def add_arg(self, arg, overwrite=True): + if not overwrite and self._args.has_key(arg.name): + raise IndexError, "arg %s already in %r" % (arg.name, self) + self._args[arg.name] = arg + +class Docable: + def __init__(self, **kwargs): + for key in self.attrs: + setattr(self, key, kwargs[key]) + self.dict = kwargs + + def __repr__(self): + return "<%r %s>" % (str(self.__class__), self.name) + +class Signal(Docable): + attrs = ['name', 'returns', 'args'] + +class Arg(Docable): + attrs = ['name', 'type', 'range', 'flags', 'nick', 'blurb', 'default'] + +class GDoc: + def load_file(self, filename): + try: + lines = open(filename).readlines() + self.load_data("".join(lines)) + except IOError: + print "WARNING - could not read from %s" % filename + + def save_file(self, filename, backup=False): + """ + Save the information to the given file if the file content changed. + """ + olddata = None + try: + lines = open(filename).readlines() + olddata = "".join(lines) + except IOError: + print "WARNING - could not read from %s" % filename + newdata = self.get_data() + if olddata and olddata == newdata: + return + + if olddata: + if backup: + os.rename(filename, filename + '.bak') + + handle = open(filename, "w") + handle.write(newdata) + handle.close() + +class Signals(GDoc): + def __init__(self): + self._objects = OrderedDict() + + def load_data(self, data): + """ + Load the .signals lines, creating our list of objects and signals. + """ + import re + smatcher = re.compile( + '(?s)' # make . match \n + '\n(.*?)\n' + ) + nmatcher = re.compile( + '' + '(?P\S*)' # store object + '::' + '(?P\S*)' # store signal + '' + ) + rmatcher = re.compile( + '(?s)' # make . match \n + '(?P\S*)\n' # store returns + '(?P.*)' # store args + ) + for block in smatcher.findall(data): + nmatch = nmatcher.search(block) + if nmatch: + o = nmatch.group('object') + debug("Found object", o) + debug("Found signal", nmatch.group('signal')) + if not self._objects.has_key(o): + object = Object(o) + self._objects[o] = object + + rmatch = rmatcher.search(block) + if rmatch: + dict = rmatch.groupdict().copy() + dict['name'] = nmatch.group('signal') + signal = Signal(**dict) + self._objects[o].add_signal(signal) + + def get_data(self): + lines = [] + for o in self._objects.values(): + for s in o._signals.values(): + block = """ +%(object)s::%(name)s +%(returns)s +%(args)s +""" + d = s.dict.copy() + d['object'] = o.name + lines.append(block % d) + + return "\n".join(lines) + '\n' + +class Args(GDoc): + def __init__(self): + self._objects = OrderedDict() + + def load_data(self, data): + """ + Load the .args lines, creating our list of objects and args. + """ + import re + amatcher = re.compile( + '(?s)' # make . match \n + '\n(.*?)\n' + ) + nmatcher = re.compile( + '' + '(?P\S*)' # store object + '::' + '(?P\S*)' # store arg + '' + ) + rmatcher = re.compile( + '(?s)' # make . match \n + '(?P\S*)\n' # store type + '(?P.*?)\n' # store range + '(?P\S*)\n' # store flags + '(?P.*?)\n' # store nick + '(?P.*?)\n' # store blurb + '(?P.*?)\n' # store default + ) + for block in amatcher.findall(data): + nmatch = nmatcher.search(block) + if nmatch: + o = nmatch.group('object') + debug("Found object", o) + debug("Found arg", nmatch.group('arg')) + if not self._objects.has_key(o): + object = Object(o) + self._objects[o] = object + + rmatch = rmatcher.search(block) + if rmatch: + dict = rmatch.groupdict().copy() + dict['name'] = nmatch.group('arg') + arg = Arg(**dict) + self._objects[o].add_arg(arg) + else: + print "ERROR: could not match arg from block %s" % block + + def get_data(self): + lines = [] + for o in self._objects.values(): + for a in o._args.values(): + block = """ +%(object)s::%(name)s +%(type)s +%(range)s +%(flags)s +%(nick)s +%(blurb)s +%(default)s + +""" + d = a.dict.copy() + d['object'] = o.name + lines.append(block % d) + + return "\n".join(lines) + '\n' + +class SingleLine(GDoc): + def __init__(self): + self._objects = [] + + def load_data(self, data): + """ + Load the .interfaces/.prerequisites lines, merge duplicates + """ + # split data on '\n' + lines = data.splitlines(); + # merge them into self._objects + for line in lines: + if line not in self._objects: + self._objects.append(line) + + def get_data(self): + lines = sorted(self._objects) + return "\n".join(lines) + '\n' + +def main(argv): + modulename = None + try: + modulename = argv[1] + except IndexError: + sys.stderr.write('Please provide a documentation module name\n') + sys.exit(1) + + signals = Signals() + signals.load_file(modulename + '.signals') + signals.load_file(modulename + '.signals.new') + signals.save_file(modulename + '.signals', backup=True) + os.unlink(modulename + '.signals.new') + + args = Args() + args.load_file(modulename + '.args') + args.load_file(modulename + '.args.new') + args.save_file(modulename + '.args', backup=True) + os.unlink(modulename + '.args.new') + + ifaces = SingleLine() + ifaces.load_file(modulename + '.interfaces') + ifaces.load_file(modulename + '.interfaces.new') + ifaces.save_file(modulename + '.interfaces', backup=True) + os.unlink(modulename + '.interfaces.new') + + prereq = SingleLine() + prereq.load_file(modulename + '.prerequisites') + prereq.load_file(modulename + '.prerequisites.new') + prereq.save_file(modulename + '.prerequisites', backup=True) + os.unlink(modulename + '.prerequisites.new') + +main(sys.argv) diff --git a/common/upload-doc.mak b/common/upload-doc.mak new file mode 100644 index 0000000..3bf9496 --- /dev/null +++ b/common/upload-doc.mak @@ -0,0 +1,66 @@ +# this snippet is to be included by both our docbook manuals +# and gtk-doc API references + +# it adds an upload target to each of these dir's Makefiles + +# each Makefile.am should define the following variables: +# - DOC: the base name of the documentation +# (faq, manual, pwg, gstreamer, gstreamer-libs) +# - FORMATS: the formats in which DOC is output +# (html ps pdf) + +# if you want to use it, make sure your $HOME/.ssh/config file contains the +# correct User entry for the Host entry for the DOC_SERVER + +# these variables define the location of the online docs +DOC_SERVER = gstreamer.freedesktop.org +DOC_BASE = /srv/gstreamer.freedesktop.org/www/data/doc +DOC_URL = $(DOC_SERVER):$(DOC_BASE) + +upload: $(FORMATS) + @if echo $(FORMATS) | grep html > /dev/null; then \ + echo "Preparing docs for upload (rebasing cross-references) ..." ; \ + if test x$(builddir) != x$(srcdir); then \ + echo "make upload can only be used if srcdir == builddir"; \ + exit 1; \ + fi; \ + # gtkdoc-rebase sometimes gets confused, so reset everything to \ + # local links before rebasing to online links \ + gtkdoc-rebase --html-dir=$(builddir)/html 2>/dev/null 2>/dev/null ; \ + rebase=`gtkdoc-rebase --verbose --online --html-dir=$(builddir)/html` ; \ + echo "$$rebase" | grep -e "On-*line"; \ + for req in glib gobject gstreamer gstreamer-libs gst-plugins-base-libs; do \ + if ! ( echo "$$rebase" | grep -i -e "On-*line.*/$$req/" ); then \ + echo "===============================================================================" ; \ + echo " Could not determine online location for $$req docs. Cross-referencing will be " ; \ + echo " broken, so not uploading. Make sure the library's gtk-doc documentation is " ; \ + echo " installed somewhere in /usr/share/gtk-doc. " ; \ + echo "===============================================================================" ; \ + exit 1; \ + fi; \ + done; \ + export SRC="$$SRC html"; \ + fi; \ + if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \ + if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \ + \ + # upload releases to both 0.10.X/ and head/ subdirectories \ + if test "x$(PACKAGE_VERSION_NANO)" = x0; then \ + export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \ + echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \ + ssh $(DOC_SERVER) mkdir -p $$DIR; \ + rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \ + ssh $(DOC_SERVER) chmod -R g+w $$DIR; \ + fi; \ + \ + export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \ + echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \ + ssh $(DOC_SERVER) mkdir -p $$DIR; \ + rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \ + ssh $(DOC_SERVER) chmod -R g+w $$DIR; \ + \ + if echo $(FORMATS) | grep html > /dev/null; then \ + echo "Un-preparing docs for upload (rebasing cross-references) ..." ; \ + gtkdoc-rebase --html-dir=$(builddir)/html ; \ + fi; \ + echo Done diff --git a/common/win32.mak b/common/win32.mak new file mode 100644 index 0000000..94afaec --- /dev/null +++ b/common/win32.mak @@ -0,0 +1,72 @@ +# various tests to make sure we dist the win32 stuff (for MSVC builds) right + +# the MANIFEST contains all win32 related files that should be disted +win32 = $(shell cat $(top_srcdir)/win32/MANIFEST) + +# wildcard is apparently not portable to other makes, hence the use of find +# these are library .def files with the symbols to export +win32defs = $(shell find $(top_srcdir)/win32/common -name '*.def') + +# wildcard is apparently not portable to other makes, hence the use of find +# these are files that need to be disted with CRLF line endings: +win32crlf = $(shell find $(top_srcdir)/win32 -name '*.dsw' -o -name '*.dsp') + +win32-debug: + @echo; \ + echo win32 = $(win32); \ + echo; \ + echo win32defs = $(win32defs); \ + echo; \ + echo win32crlf = $(win32crlf); \ + echo + +win32-check-crlf: + @echo Checking win32 files for CR LF line endings ...; \ + fail=0 ; \ + for each in $(win32crlf) ; do \ + result=`perl -e 'print grep(/\r\n/,<>)' "$$each" | wc -l`; \ + if test "$$result" = 0 ; then \ + echo $$each must be fixed to have CRLF line endings ; \ + fail=1; \ + fi ; \ + done ; \ + exit $$fail + +# make sure all symbols we export on linux are defined in the win32 .def too +# (don't care about other unixes for now, it's enough if it works on one of +# the linux build bots; we assume .so ) +check-exports: + @fail=0 ; \ + for l in $(win32defs); do \ + libbase=`basename "$$l" ".def"`; \ + libso=`find "$(top_builddir)" -name "$$libbase-@GST_MAJORMINOR@.so" | grep -v /_build/ | head -n1`; \ + libdef="$(top_srcdir)/win32/common/$$libbase.def"; \ + if test "x$$libso" != "x"; then \ + echo Checking symbols in $$libso; \ + if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \ + fail=1; \ + fi; \ + fi; \ + done ; \ + if test $$fail != 0; then \ + echo '-----------------------------------------------------------'; \ + echo 'Run this to update the .def files:'; \ + echo 'make check-exports 2>&1 | patch -p1'; \ + echo '-----------------------------------------------------------'; \ + fi; \ + exit $$fail + +# complain about nonportable printf format strings (%lld, %llu, %zu etc.) +check-nonportable-print-format: + @fail=0 ; \ + loc=`find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'`; \ + if test "x$$loc" != "x"; then \ + echo "Please fix the following print format strings:" ; \ + find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'; \ + fail=1; \ + fi; \ + exit $$fail + +dist-hook: check-exports win32-check-crlf + + diff --git a/compile b/compile new file mode 100755 index 0000000..c0096a7 --- /dev/null +++ b/compile @@ -0,0 +1,143 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2009-10-06.20; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software +# Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..40eaed4 --- /dev/null +++ b/config.guess @@ -0,0 +1,1517 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011 Free Software Foundation, Inc. + +timestamp='2011-05-11' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-tilera-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..7062267 --- /dev/null +++ b/config.h.in @@ -0,0 +1,110 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Defined if gcov is enabled to force a rebuild due to config.h changing */ +#undef GST_GCOV_ENABLED + +/* Gst MajorMinor version */ +#undef GST_MAJORMINOR + +/* GStreamer package release date/time for plugins as YYYY-MM-DD */ +#undef GST_PACKAGE_RELEASE_DATETIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* We can use the gst-audio library */ +#undef HAVE_GST_AUDIO + +/* We can use the gst-tag library */ +#undef HAVE_GST_TAG + +/* We can use the gst-video library */ +#undef HAVE_GST_VIDEO + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Defined if we have a 2.12 series pygobject */ +#undef HAVE_PYGOBJECT_2_12 + +/* Defined if we have a 2.16 series pygobject */ +#undef HAVE_PYGOBJECT_2_16 + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* We can use the streamvolume interface */ +#undef HAVE_STREAM_VOLUME_INTERFACE + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if valgrind should be used */ +#undef HAVE_VALGRIND + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* directory where plugins are located */ +#undef PLUGINDIR + +/* PyGst major version */ +#undef PYGST_MAJOR_VERSION + +/* PyGst micro version */ +#undef PYGST_MICRO_VERSION + +/* PyGst minor version */ +#undef PYGST_MINOR_VERSION + +/* PyGst nano version */ +#undef PYGST_NANO_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..30fdca8 --- /dev/null +++ b/config.sub @@ -0,0 +1,1760 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011 Free Software Foundation, Inc. + +timestamp='2011-03-23' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile-* | tilegx-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + # This must be matched before tile*. + tilegx*) + basic_machine=tilegx-unknown + os=-linux-gnu + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..e8eed81 --- /dev/null +++ b/configure @@ -0,0 +1,17674 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for GStreamer Python Bindings 0.10.22. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='GStreamer Python Bindings' +PACKAGE_TARNAME='gst-python' +PACKAGE_VERSION='0.10.22' +PACKAGE_STRING='GStreamer Python Bindings 0.10.22' +PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' +PACKAGE_URL='' + +ac_unique_file="gst/gstmodule.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +plugindir +PLUGINDIR +PYTHON_LIB_SUFFIX +PYTHON_LIB_LOC +PYTHON_LIBS +HAVE_VALGRIND_FALSE +HAVE_VALGRIND_TRUE +VALGRIND_PATH +VALGRIND_LIBS +VALGRIND_CFLAGS +PYGST_CFLAGS +PYEXECDIR +PYTHONDIR +GST_OPTION_LIBS +GST_OPTION_CFLAGS +ERROR_CFLAGS +WARNING_CFLAGS +HAVE_PYGOBJECT_2_16_FALSE +HAVE_PYGOBJECT_2_16_TRUE +PYGOBJECT_2_16_LIBS +PYGOBJECT_2_16_CFLAGS +PYGOBJECT_2_12_LIBS +PYGOBJECT_2_12_CFLAGS +PYGTK_LIBS +PYGTK_CFLAGS +PYGOBJECT_LIBS +PYGOBJECT_CFLAGS +GST_PLUGINS_BASE_LIBS +GST_PLUGINS_BASE_CFLAGS +GST_DP_LIBS +GST_DP_CFLAGS +GST_NET_LIBS +GST_NET_CFLAGS +GST_CONTROLLER_LIBS +GST_CONTROLLER_CFLAGS +IGNORE_GST_LOADSAVE +GST_DISABLE_XML +GST_DISABLE_PLUGIN +GST_DISABLE_REGISTRY +GST_DISABLE_ALLOC_TRACE +GST_DISABLE_TRACE +GST_DISABLE_PARSE +GST_DISABLE_LOADSAVE +GST_DISABLE_GST_DEBUG +GST_BASE_LIBS +GST_BASE_CFLAGS +HAVE_GST_TAG_FALSE +HAVE_GST_TAG_TRUE +HAVE_GST_VIDEO_FALSE +HAVE_GST_VIDEO_TRUE +HAVE_GST_AUDIO_FALSE +HAVE_GST_AUDIO_TRUE +IGNORE_GST_PB_0_10_32 +IGNORE_GST_PB_0_10_31 +IGNORE_GST_PB_0_10_30 +IGNORE_GST_PB_0_10_29 +IGNORE_GST_PB_0_10_26 +IGNORE_GST_PB_0_10_25 +IGNORE_GST_PB_0_10_23 +IGNORE_GST_0_10_32 +IGNORE_GST_0_10_31 +IGNORE_GST_0_10_30 +IGNORE_GST_0_10_29 +IGNORE_GST_0_10_26 +IGNORE_GST_0_10_25 +IGNORE_GST_0_10_24 +IGNORE_GST_0_10_23 +IGNORE_GST_0_10_22 +IGNORE_GST_0_10_21 +GST_LIBS +GST_CFLAGS +PKG_CONFIG +GST_MAJORMINOR +PYTHON_INCLUDES +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +GST_GCOV_ENABLED_FALSE +GST_GCOV_ENABLED_TRUE +CCASFLAGS +FFLAGS +CXXFLAGS +GCOV +GCOV_LIBS +GCOV_CFLAGS +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +LIBTOOL +OBJDUMP +DLLTOOL +AS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +GSTPB_REQ +GST_REQ +GTK_REQ +GLIB_REQ +PYGOBJECT_REQ +PYGTK_REQ +ACLOCAL_AMFLAGS +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +PACKAGE_VERSION_RELEASE +PACKAGE_VERSION_NANO +PACKAGE_VERSION_MICRO +PACKAGE_VERSION_MINOR +PACKAGE_VERSION_MAJOR +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_silent_rules +enable_static +enable_shared +with_pic +enable_fast_install +enable_dependency_tracking +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_gcov +enable_valgrind +with_libpython_dir +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PKG_CONFIG +GST_CFLAGS +GST_LIBS +GST_BASE_CFLAGS +GST_BASE_LIBS +GST_CONTROLLER_CFLAGS +GST_CONTROLLER_LIBS +GST_NET_CFLAGS +GST_NET_LIBS +GST_DP_CFLAGS +GST_DP_LIBS +GST_PLUGINS_BASE_CFLAGS +GST_PLUGINS_BASE_LIBS +PYGOBJECT_CFLAGS +PYGOBJECT_LIBS +PYGTK_CFLAGS +PYGTK_LIBS +PYGOBJECT_2_12_CFLAGS +PYGOBJECT_2_12_LIBS +PYGOBJECT_2_16_CFLAGS +PYGOBJECT_2_16_LIBS +VALGRIND_CFLAGS +VALGRIND_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures GStreamer Python Bindings 0.10.22 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/gst-python] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of GStreamer Python Bindings 0.10.22:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-gcov compile with coverage profiling instrumentation (gcc + only) + --disable-valgrind disable run-time valgrind detection + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-libpython-dir the directory containing libpython${PYTHON_VERSION} + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + PKG_CONFIG path to pkg-config utility + GST_CFLAGS C compiler flags for GST, overriding pkg-config + GST_LIBS linker flags for GST, overriding pkg-config + GST_BASE_CFLAGS + C compiler flags for GST_BASE, overriding pkg-config + GST_BASE_LIBS + linker flags for GST_BASE, overriding pkg-config + GST_CONTROLLER_CFLAGS + C compiler flags for GST_CONTROLLER, overriding pkg-config + GST_CONTROLLER_LIBS + linker flags for GST_CONTROLLER, overriding pkg-config + GST_NET_CFLAGS + C compiler flags for GST_NET, overriding pkg-config + GST_NET_LIBS + linker flags for GST_NET, overriding pkg-config + GST_DP_CFLAGS + C compiler flags for GST_DP, overriding pkg-config + GST_DP_LIBS linker flags for GST_DP, overriding pkg-config + GST_PLUGINS_BASE_CFLAGS + C compiler flags for GST_PLUGINS_BASE, overriding pkg-config + GST_PLUGINS_BASE_LIBS + linker flags for GST_PLUGINS_BASE, overriding pkg-config + PYGOBJECT_CFLAGS + C compiler flags for PYGOBJECT, overriding pkg-config + PYGOBJECT_LIBS + linker flags for PYGOBJECT, overriding pkg-config + PYGTK_CFLAGS + C compiler flags for PYGTK, overriding pkg-config + PYGTK_LIBS linker flags for PYGTK, overriding pkg-config + PYGOBJECT_2_12_CFLAGS + C compiler flags for PYGOBJECT_2_12, overriding pkg-config + PYGOBJECT_2_12_LIBS + linker flags for PYGOBJECT_2_12, overriding pkg-config + PYGOBJECT_2_16_CFLAGS + C compiler flags for PYGOBJECT_2_16, overriding pkg-config + PYGOBJECT_2_16_LIBS + linker flags for PYGOBJECT_2_16, overriding pkg-config + VALGRIND_CFLAGS + C compiler flags for VALGRIND, overriding pkg-config + VALGRIND_LIBS + linker flags for VALGRIND, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +GStreamer Python Bindings configure 0.10.22 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GStreamer Python Bindings $as_me 0.10.22, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='gst-python' + VERSION='0.10.22' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + + + PACKAGE_VERSION_MAJOR=$(echo 0.10.22 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 0.10.22 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 0.10.22 | cut -d'.' -f3) + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 +$as_echo_n "checking nano version... " >&6; } + + NANO=$(echo 0.10.22 | cut -d'.' -f4) + + if test x"$NANO" = x || test "x$NANO" = "x0" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 +$as_echo "0 (release)" >&6; } + NANO=0 + PACKAGE_VERSION_RELEASE=1 + GST_CVS="no" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NANO" >&5 +$as_echo "$NANO" >&6; } + PACKAGE_VERSION_RELEASE=0.`date +%Y%m%d.%H%M%S` + if test "x$NANO" != "x1" ; then + GST_CVS="no" + else + GST_CVS="yes" + fi + fi + PACKAGE_VERSION_NANO=$NANO + + + + + + +ac_config_headers="$ac_config_headers config.h" + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +AM_BACKSLASH='\' + + + +cat >>confdefs.h <<_ACEOF +#define PYGST_MAJOR_VERSION $PACKAGE_VERSION_MAJOR +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PYGST_MINOR_VERSION $PACKAGE_VERSION_MINOR +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PYGST_MICRO_VERSION $PACKAGE_VERSION_MICRO +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PYGST_NANO_VERSION $PACKAGE_VERSION_NANO +_ACEOF + + + + + + +ACLOCAL_AMFLAGS="-I m4 -I common/m4" + + +PYGTK_REQ=2.6.3 + +PYGOBJECT_REQ=2.11.2 + +GLIB_REQ=2.8.0 + +GTK_REQ=2.6.0 + +GST_REQ=0.10.20 + +GSTPB_REQ=0.10.20 + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=no +fi + + + + + + + + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4' +macro_revision='1.3293' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + lt_prog_compiler_pic='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + + + # Check whether --enable-gcov was given. +if test "${enable_gcov+set}" = set; then : + enableval=$enable_gcov; enable_gcov=$enableval +else + enable_gcov=no +fi + + if test x$enable_gcov = xyes ; then + if test "x$GCC" != "xyes" + then + as_fn_error $? "gcov only works if gcc is used" "$LINENO" 5 + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands \"-fprofile-arcs\"" >&5 +$as_echo_n "checking to see if compiler understands \"-fprofile-arcs\"... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS "-fprofile-arcs"" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + GCOV_CFLAGS="$GCOV_CFLAGS -fprofile-arcs" + true + else + true + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands \"-ftest-coverage\"" >&5 +$as_echo_n "checking to see if compiler understands \"-ftest-coverage\"... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS "-ftest-coverage"" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + GCOV_CFLAGS="$GCOV_CFLAGS -ftest-coverage" + true + else + true + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + GCOV_CFLAGS=`echo "$GCOV_CFLAGS" | sed -e 's/-O[0-9]*//g'` + GCOV_LIBS=-lgcov + + + GCOV=`echo $CC | sed s/gcc/gcov/g` + + + GST_GCOV_ENABLED=yes + +cat >>confdefs.h <<_ACEOF +#define GST_GCOV_ENABLED 1 +_ACEOF + + if test "x$GST_GCOV_ENABLED" = "xyes" + then + CFLAGS="-O0" + + CXXFLAGS="-O0" + + FFLAGS="-O0" + + CCASFLAGS="-O0" + + { $as_echo "$as_me:${as_lineno-$LINENO}: gcov enabled, setting CFLAGS and friends to $CFLAGS" >&5 +$as_echo "$as_me: gcov enabled, setting CFLAGS and friends to $CFLAGS" >&6;} + fi + fi + if test x$enable_gcov = xyes; then + GST_GCOV_ENABLED_TRUE= + GST_GCOV_ENABLED_FALSE='#' +else + GST_GCOV_ENABLED_TRUE='#' + GST_GCOV_ENABLED_FALSE= +fi + + + + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python >= 2.3" >&5 +$as_echo_n "checking for python >= 2.3... " >&6; } +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>&5 2>&5 +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5 +$as_echo "okay" >&6; } +else + as_fn_error $? "too old" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for headers required to compile python extensions" >&5 +$as_echo_n "checking for headers required to compile python extensions... " >&6; } +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 + +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +as_fn_error $? "could not find Python headers" "$LINENO" 5 +fi +rm -f conftest.err conftest.i conftest.$ac_ext +CPPFLAGS="$save_CPPFLAGS" + + +GST_MAJORMINOR=0.10 + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST" >&5 +$as_echo_n "checking for GST... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_CFLAGS"; then + pkg_cv_GST_CFLAGS="$GST_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_LIBS"; then + pkg_cv_GST_LIBS="$GST_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_LIBS=`$PKG_CONFIG --libs "gstreamer-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (gstreamer-$GST_MAJORMINOR >= $GST_REQ) were not met: + +$GST_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables GST_CFLAGS +and GST_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables GST_CFLAGS +and GST_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + GST_CFLAGS=$pkg_cv_GST_CFLAGS + GST_LIBS=$pkg_cv_GST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +cat >>confdefs.h <<_ACEOF +#define GST_MAJORMINOR "$GST_MAJORMINOR" +_ACEOF + +GST_CFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS" + + + +GST_MINOR_VERSION=`$PKG_CONFIG --modversion gstreamer-$GST_MAJORMINOR | cut -f 3 -d.` +GST_PB_MINOR_VERSION=`$PKG_CONFIG --modversion gstreamer-plugins-base-$GST_MAJORMINOR | cut -f 3 -d.` +GST_CVS_VERSION=`$PKG_CONFIG --modversion gstreamer-$GST_MAJORMINOR | cut -f 4 -d.` + +echo "Building against GStreamer core 0.10.$GST_MINOR_VERSION , ignoring API additions if needed" + + +if test "x$GST_CVS_VERSION" = "x" +then + if test $GST_MINOR_VERSION -lt "21" + then + IGNORE_GST_0_10_21="gst-0.10.21.ignore" + else + IGNORE_GST_0_10_21="" + fi + + if test $GST_MINOR_VERSION -lt "22" + then + IGNORE_GST_0_10_22="gst-0.10.22.ignore" + else + IGNORE_GST_0_10_22="" + fi + + if test $GST_MINOR_VERSION -lt "23" + then + IGNORE_GST_0_10_23="gst-0.10.23.ignore" + else + IGNORE_GST_0_10_23="" + fi + + if test $GST_MINOR_VERSION -lt "24" + then + IGNORE_GST_0_10_24="gst-0.10.24.ignore" + else + IGNORE_GST_0_10_24="" + fi + + if test $GST_MINOR_VERSION -lt "25" + then + IGNORE_GST_0_10_25="gst-0.10.25.ignore" + else + IGNORE_GST_0_10_25="" + fi + + if test $GST_MINOR_VERSION -lt "26" + then + IGNORE_GST_0_10_26="gst-0.10.26.ignore" + else + IGNORE_GST_0_10_26="" + fi + + if test $GST_MINOR_VERSION -lt "29" + then + IGNORE_GST_0_10_29="gst-0.10.29.ignore" + else + IGNORE_GST_0_10_29="" + fi + + if test $GST_MINOR_VERSION -lt "30" + then + IGNORE_GST_0_10_30="gst-0.10.30.ignore" + else + IGNORE_GST_0_10_30="" + fi + + if test $GST_MINOR_VERSION -lt "31" + then + IGNORE_GST_0_10_31="gst-0.10.31.ignore" + else + IGNORE_GST_0_10_31="" + fi + + if test $GST_MINOR_VERSION -lt "32" + then + IGNORE_GST_0_10_32="gst-0.10.32.ignore" + else + IGNORE_GST_0_10_32="" + fi + + if test $GST_PB_MINOR_VERSION -ge "22" + then + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_AUDIO 1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_VIDEO 1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_TAG 1 +_ACEOF + + fi + + if test $GST_PB_MINOR_VERSION -lt "23" + then + IGNORE_GST_PB_0_10_23="gst-pb-0.10.23.ignore" + else + IGNORE_GST_PB_0_10_23="" + fi + + if test $GST_PB_MINOR_VERSION -lt "25" + then + IGNORE_GST_PB_0_10_25="gst-pb-0.10.25.ignore" + else + IGNORE_GST_PB_0_10_25="" + +cat >>confdefs.h <<_ACEOF +#define HAVE_STREAM_VOLUME_INTERFACE 1 +_ACEOF + + fi + + if test $GST_PB_MINOR_VERSION -lt "26" + then + IGNORE_GST_PB_0_10_26="gst-pb-0.10.26.ignore" + else + IGNORE_GST_PB_0_10_26="" + fi + + if test $GST_PB_MINOR_VERSION -lt "29" + then + IGNORE_GST_PB_0_10_29="gst-pb-0.10.29.ignore" + else + IGNORE_GST_PB_0_10_29="" + fi + + if test $GST_PB_MINOR_VERSION -lt "30" + then + IGNORE_GST_PB_0_10_30="gst-pb-0.10.30.ignore" + else + IGNORE_GST_PB_0_10_30="" + fi + + if test $GST_PB_MINOR_VERSION -lt "31" + then + IGNORE_GST_PB_0_10_31="gst-pb-0.10.31.ignore" + else + IGNORE_GST_PB_0_10_31="" + fi + + if test $GST_PB_MINOR_VERSION -lt "32" + then + IGNORE_GST_PB_0_10_32="gst-pb-0.10.32.ignore" + else + IGNORE_GST_PB_0_10_32="" + fi + +else + IGNORE_GST_0_10_18="" + IGNORE_GST_0_10_21="" + IGNORE_GST_0_10_22="" + IGNORE_GST_0_10_23="" + IGNORE_GST_0_10_24="" + IGNORE_GST_0_10_25="" + IGNORE_GST_0_10_26="" + IGNORE_GST_0_10_29="" + IGNORE_GST_0_10_30="" + IGNORE_GST_0_10_31="" + IGNORE_GST_0_10_32="" + IGNORE_GST_PB_0_10_23="" + IGNORE_GST_PB_0_10_25="" + IGNORE_GST_PB_0_10_26="" + IGNORE_GST_PB_0_10_29="" + IGNORE_GST_PB_0_10_30="" + IGNORE_GST_PB_0_10_31="" + IGNORE_GST_PB_0_10_32="" + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_AUDIO 1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_VIDEO 1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define HAVE_GST_TAG 1 +_ACEOF + +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_STREAM_VOLUME_INTERFACE 1 +_ACEOF + + + + + + + + + + + + + + + + + + + if $HAVE_GST_AUDIO; then + HAVE_GST_AUDIO_TRUE= + HAVE_GST_AUDIO_FALSE='#' +else + HAVE_GST_AUDIO_TRUE='#' + HAVE_GST_AUDIO_FALSE= +fi + + if $HAVE_GST_VIDEO; then + HAVE_GST_VIDEO_TRUE= + HAVE_GST_VIDEO_FALSE='#' +else + HAVE_GST_VIDEO_TRUE='#' + HAVE_GST_VIDEO_FALSE= +fi + + if $HAVE_GST_TAG; then + HAVE_GST_TAG_TRUE= + HAVE_GST_TAG_FALSE='#' +else + HAVE_GST_TAG_TRUE='#' + HAVE_GST_TAG_FALSE= +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_BASE" >&5 +$as_echo_n "checking for GST_BASE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_BASE_CFLAGS"; then + pkg_cv_GST_BASE_CFLAGS="$GST_BASE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-base-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_BASE_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_BASE_LIBS"; then + pkg_cv_GST_BASE_LIBS="$GST_BASE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-base-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_BASE_LIBS=`$PKG_CONFIG --libs "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_BASE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_BASE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-base-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_BASE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_BASE="no" +elif test $pkg_failed = untried; then + HAVE_GST_BASE="no" +else + GST_BASE_CFLAGS=$pkg_cv_GST_BASE_CFLAGS + GST_BASE_LIBS=$pkg_cv_GST_BASE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_BASE="yes" +fi + +if test "x$HAVE_GST_BASE" = "xno"; then + as_fn_error $? "no GStreamer Base Libs found" "$LINENO" 5 +fi + + + + + +GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h" + + + grep >/dev/null "#undef GST_DISABLE_GST_DEBUG" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_GST_DEBUG=0 + else + GST_DISABLE_GST_DEBUG=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_LOADSAVE" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_LOADSAVE=0 + else + GST_DISABLE_LOADSAVE=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_PARSE" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_PARSE=0 + else + GST_DISABLE_PARSE=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_TRACE" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_TRACE=0 + else + GST_DISABLE_TRACE=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_ALLOC_TRACE" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_ALLOC_TRACE=0 + else + GST_DISABLE_ALLOC_TRACE=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_REGISTRY" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_REGISTRY=0 + else + GST_DISABLE_REGISTRY=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_PLUGIN" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_PLUGIN=0 + else + GST_DISABLE_PLUGIN=1 + fi + + + + grep >/dev/null "#undef GST_DISABLE_XML" $GST_CONFIGPATH + if test $? = 0; then + GST_DISABLE_XML=0 + else + GST_DISABLE_XML=1 + fi + + + +if test $GST_DISABLE_LOADSAVE = "1"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Load/Save XML persistence disabled\"" >&5 +$as_echo "$as_me: WARNING: \"Load/Save XML persistence disabled\"" >&2;} + IGNORE_GST_LOADSAVE="gst-disable-loadsave.ignore" +else + IGNORE_GST_LOADSAVE="" +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_CONTROLLER" >&5 +$as_echo_n "checking for GST_CONTROLLER... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_CONTROLLER_CFLAGS"; then + pkg_cv_GST_CONTROLLER_CFLAGS="$GST_CONTROLLER_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-controller-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_CONTROLLER_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_CONTROLLER_LIBS"; then + pkg_cv_GST_CONTROLLER_LIBS="$GST_CONTROLLER_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-controller-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_CONTROLLER_LIBS=`$PKG_CONFIG --libs "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_CONTROLLER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_CONTROLLER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_CONTROLLER_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_CONTROLLER="no" +elif test $pkg_failed = untried; then + HAVE_GST_CONTROLLER="no" +else + GST_CONTROLLER_CFLAGS=$pkg_cv_GST_CONTROLLER_CFLAGS + GST_CONTROLLER_LIBS=$pkg_cv_GST_CONTROLLER_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_CONTROLLER="yes" +fi + +if test "x$HAVE_GST_CONTROLLER" = "xno"; then + as_fn_error $? "no GStreamer Controller Libs found" "$LINENO" 5 +fi + + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_NET" >&5 +$as_echo_n "checking for GST_NET... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_NET_CFLAGS"; then + pkg_cv_GST_NET_CFLAGS="$GST_NET_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-net-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_NET_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_NET_LIBS"; then + pkg_cv_GST_NET_LIBS="$GST_NET_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-net-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_NET_LIBS=`$PKG_CONFIG --libs "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_NET_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_NET_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-net-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_NET_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_NET="no" +elif test $pkg_failed = untried; then + HAVE_GST_NET="no" +else + GST_NET_CFLAGS=$pkg_cv_GST_NET_CFLAGS + GST_NET_LIBS=$pkg_cv_GST_NET_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_NET="yes" +fi + +if test "x$HAVE_GST_NET" = "xno"; then + as_fn_error $? "no GStreamer Networking Libs found" "$LINENO" 5 +fi + + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_DP" >&5 +$as_echo_n "checking for GST_DP... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_DP_CFLAGS"; then + pkg_cv_GST_DP_CFLAGS="$GST_DP_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-dataprotocol-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_DP_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_DP_LIBS"; then + pkg_cv_GST_DP_LIBS="$GST_DP_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-dataprotocol-\$GST_MAJORMINOR >= \$GST_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_DP_LIBS=`$PKG_CONFIG --libs "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_DP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ"` + else + GST_DP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_DP_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_DP="no" +elif test $pkg_failed = untried; then + HAVE_GST_DP="no" +else + GST_DP_CFLAGS=$pkg_cv_GST_DP_CFLAGS + GST_DP_LIBS=$pkg_cv_GST_DP_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_DP="yes" +fi + +if test "x$HAVE_GST_DP" = "xno"; then + as_fn_error $? "no GStreamer Data Protocol Libs found" "$LINENO" 5 +fi + + + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_PLUGINS_BASE" >&5 +$as_echo_n "checking for GST_PLUGINS_BASE... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_PLUGINS_BASE_CFLAGS"; then + pkg_cv_GST_PLUGINS_BASE_CFLAGS="$GST_PLUGINS_BASE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-plugins-base-\$GST_MAJORMINOR >= \$GSTPB_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_PLUGINS_BASE_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_PLUGINS_BASE_LIBS"; then + pkg_cv_GST_PLUGINS_BASE_LIBS="$GST_PLUGINS_BASE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-plugins-base-\$GST_MAJORMINOR >= \$GSTPB_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_PLUGINS_BASE_LIBS=`$PKG_CONFIG --libs "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_PLUGINS_BASE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ"` + else + GST_PLUGINS_BASE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_PLUGINS_BASE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GST_PLUGINS_BASE="no" +elif test $pkg_failed = untried; then + HAVE_GST_PLUGINS_BASE="no" +else + GST_PLUGINS_BASE_CFLAGS=$pkg_cv_GST_PLUGINS_BASE_CFLAGS + GST_PLUGINS_BASE_LIBS=$pkg_cv_GST_PLUGINS_BASE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_GST_PLUGINS_BASE="yes" +fi + +if test "x$HAVE_GST_PLUGINS_BASE" = "xno"; then + as_fn_error $? "no gst-plugins-base found" "$LINENO" 5 +fi + + + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYGOBJECT" >&5 +$as_echo_n "checking for PYGOBJECT... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_CFLAGS"; then + pkg_cv_PYGOBJECT_CFLAGS="$PYGOBJECT_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= \$PYGOBJECT_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= $PYGOBJECT_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_CFLAGS=`$PKG_CONFIG --cflags "pygobject-2.0 >= $PYGOBJECT_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_LIBS"; then + pkg_cv_PYGOBJECT_LIBS="$PYGOBJECT_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= \$PYGOBJECT_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= $PYGOBJECT_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_LIBS=`$PKG_CONFIG --libs "pygobject-2.0 >= $PYGOBJECT_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PYGOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pygobject-2.0 >= $PYGOBJECT_REQ"` + else + PYGOBJECT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pygobject-2.0 >= $PYGOBJECT_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PYGOBJECT_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_PYGOBJECT="no" +elif test $pkg_failed = untried; then + HAVE_PYGOBJECT="no" +else + PYGOBJECT_CFLAGS=$pkg_cv_PYGOBJECT_CFLAGS + PYGOBJECT_LIBS=$pkg_cv_PYGOBJECT_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_PYGOBJECT="yes" + +fi + +if test "x$HAVE_PYGOBJECT" = "xno"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYGTK" >&5 +$as_echo_n "checking for PYGTK... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PYGTK_CFLAGS"; then + pkg_cv_PYGTK_CFLAGS="$PYGTK_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygtk-2.0 >= \$PYGTK_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygtk-2.0 >= $PYGTK_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGTK_CFLAGS=`$PKG_CONFIG --cflags "pygtk-2.0 >= $PYGTK_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PYGTK_LIBS"; then + pkg_cv_PYGTK_LIBS="$PYGTK_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygtk-2.0 >= \$PYGTK_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygtk-2.0 >= $PYGTK_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGTK_LIBS=`$PKG_CONFIG --libs "pygtk-2.0 >= $PYGTK_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PYGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pygtk-2.0 >= $PYGTK_REQ"` + else + PYGTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pygtk-2.0 >= $PYGTK_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PYGTK_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (pygtk-2.0 >= $PYGTK_REQ) were not met: + +$PYGTK_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables PYGTK_CFLAGS +and PYGTK_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables PYGTK_CFLAGS +and PYGTK_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + PYGTK_CFLAGS=$pkg_cv_PYGTK_CFLAGS + PYGTK_LIBS=$pkg_cv_PYGTK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + + PYGOBJECT_CFLAGS="\$(PYGTK_CFLAGS)" +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYGOBJECT_2_12" >&5 +$as_echo_n "checking for PYGOBJECT_2_12... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_2_12_CFLAGS"; then + pkg_cv_PYGOBJECT_2_12_CFLAGS="$PYGOBJECT_2_12_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= 2.11.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= 2.11.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_2_12_CFLAGS=`$PKG_CONFIG --cflags "pygobject-2.0 >= 2.11.1" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_2_12_LIBS"; then + pkg_cv_PYGOBJECT_2_12_LIBS="$PYGOBJECT_2_12_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= 2.11.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= 2.11.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_2_12_LIBS=`$PKG_CONFIG --libs "pygobject-2.0 >= 2.11.1" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PYGOBJECT_2_12_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pygobject-2.0 >= 2.11.1"` + else + PYGOBJECT_2_12_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pygobject-2.0 >= 2.11.1"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PYGOBJECT_2_12_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_PYGOBJECT_2_12="no" +elif test $pkg_failed = untried; then + HAVE_PYGOBJECT_2_12="no" +else + PYGOBJECT_2_12_CFLAGS=$pkg_cv_PYGOBJECT_2_12_CFLAGS + PYGOBJECT_2_12_LIBS=$pkg_cv_PYGOBJECT_2_12_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_PYGOBJECT_2_12="yes" + +cat >>confdefs.h <<_ACEOF +#define HAVE_PYGOBJECT_2_12 1 +_ACEOF + + +fi + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYGOBJECT_2_16" >&5 +$as_echo_n "checking for PYGOBJECT_2_16... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_2_16_CFLAGS"; then + pkg_cv_PYGOBJECT_2_16_CFLAGS="$PYGOBJECT_2_16_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= 2.15.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= 2.15.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_2_16_CFLAGS=`$PKG_CONFIG --cflags "pygobject-2.0 >= 2.15.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PYGOBJECT_2_16_LIBS"; then + pkg_cv_PYGOBJECT_2_16_LIBS="$PYGOBJECT_2_16_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygobject-2.0 >= 2.15.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygobject-2.0 >= 2.15.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PYGOBJECT_2_16_LIBS=`$PKG_CONFIG --libs "pygobject-2.0 >= 2.15.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PYGOBJECT_2_16_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pygobject-2.0 >= 2.15.0"` + else + PYGOBJECT_2_16_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pygobject-2.0 >= 2.15.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PYGOBJECT_2_16_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_PYGOBJECT_2_16="no" +elif test $pkg_failed = untried; then + HAVE_PYGOBJECT_2_16="no" +else + PYGOBJECT_2_16_CFLAGS=$pkg_cv_PYGOBJECT_2_16_CFLAGS + PYGOBJECT_2_16_LIBS=$pkg_cv_PYGOBJECT_2_16_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_PYGOBJECT_2_16="yes" + +cat >>confdefs.h <<_ACEOF +#define HAVE_PYGOBJECT_2_16 1 +_ACEOF + + +fi + + if test x$HAVE_PYGOBJECT_2_16 != xno; then + HAVE_PYGOBJECT_2_16_TRUE= + HAVE_PYGOBJECT_2_16_FALSE='#' +else + HAVE_PYGOBJECT_2_16_TRUE='#' + HAVE_PYGOBJECT_2_16_FALSE= +fi + + + + + + + WARNING_CFLAGS="" + ERROR_CFLAGS="" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wall" >&5 +$as_echo_n "checking to see if compiler understands -Wall... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wall" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS -Wall" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wdeclaration-after-statement" >&5 +$as_echo_n "checking to see if compiler understands -Wdeclaration-after-statement... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wdeclaration-after-statement" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS -Wdeclaration-after-statement" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wvla" >&5 +$as_echo_n "checking to see if compiler understands -Wvla... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wvla" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS -Wvla" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wpointer-arith" >&5 +$as_echo_n "checking to see if compiler understands -Wpointer-arith... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wpointer-arith" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS -Wpointer-arith" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + if test "x$GST_CVS" != "xno" + then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Werror" >&5 +$as_echo_n "checking to see if compiler understands -Werror... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + ERROR_CFLAGS="$ERROR_CFLAGS -Werror" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + + if test "x$ERROR_CFLAGS" = "x" + then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all" >&5 +$as_echo_n "checking to see if compiler understands -errwarn=%all... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -errwarn=%all" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + + ERROR_CFLAGS="-errwarn=%all" + for f in 'no%E_EMPTY_DECLARATION' \ + 'no%E_STATEMENT_NOT_REACHED' \ + 'no%E_ARGUEMENT_MISMATCH' \ + 'no%E_MACRO_REDEFINED' \ + 'no%E_LOOP_NOT_ENTERED_AT_TOP' + do + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all,$f" >&5 +$as_echo_n "checking to see if compiler understands -errwarn=%all,$f... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -errwarn=%all,$f" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + + ERROR_CFLAGS="$ERROR_CFLAGS,$f" + + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + done + + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 < 2.19.8\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 < 2.19.8") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -fno-strict-aliasing" >&5 +$as_echo_n "checking to see if compiler understands -fno-strict-aliasing... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-strict-aliasing" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing" + true + else + + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + +fi + fi + fi + + if test "x" != "x" + then + UNSUPPORTED="" + list="" + for each in $list + do + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands $each" >&5 +$as_echo_n "checking to see if compiler understands $each... " >&6; } + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $each" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag_ok=yes +else + flag_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + + if test "X$flag_ok" = Xyes ; then + WARNING_CFLAGS="$WARNING_CFLAGS $each" + true + else + UNSUPPORTED="$UNSUPPORTED $each" + true + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 +$as_echo "$flag_ok" >&6; } + + done + if test "X$UNSUPPORTED" != X ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: unsupported compiler flags: $UNSUPPORTED" >&5 +$as_echo "$as_me: unsupported compiler flags: $UNSUPPORTED" >&6;} + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: set WARNING_CFLAGS to $WARNING_CFLAGS" >&5 +$as_echo "$as_me: set WARNING_CFLAGS to $WARNING_CFLAGS" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: set ERROR_CFLAGS to $ERROR_CFLAGS" >&5 +$as_echo "$as_me: set ERROR_CFLAGS to $ERROR_CFLAGS" >&6;} + + +GST_OPTION_CFLAGS="\$(ERROR_CFLAGS) \$(GCOV_CFLAGS)" + +GST_OPTION_LIBS="\$(GCOV_LIBS)" + + + + EXP_VAR=PYTHONDIR + FROM_VAR=$pythondir + + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + full_var=$new_full_var + PYTHONDIR="$full_var" + + + prefix=$prefix_save + exec_prefix=$exec_prefix_save + + + EXP_VAR=PYEXECDIR + FROM_VAR=$pyexecdir + + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + full_var=$new_full_var + PYEXECDIR="$full_var" + + + prefix=$prefix_save + exec_prefix=$exec_prefix_save + + +PYGST_CFLAGS="-I\$(top_srcdir)/gst -I\$(top_builddir)/gst" + +# changequote(,)dnl +# if test "x$GCC" = xyes; then +# case " $CFLAGS " in +# *[\ \ ]-Wall[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -Wall" ;; +# esac + +# case " $CFLAGS " in +# *[\ \ ]-std=c9x[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -std=c9x" ;; +# esac +# fi +# changequote([,])dnl + + + # Check whether --enable-valgrind was given. +if test "${enable_valgrind+set}" = set; then : + enableval=$enable_valgrind; + case "${enableval}" in + yes) USE_VALGRIND="$USE_DEBUG" ;; + no) USE_VALGRIND=no ;; + *) as_fn_error $? "bad value ${enableval} for --enable-valgrind" "$LINENO" 5 ;; + esac +else + + USE_VALGRIND="$USE_DEBUG" + +fi + + VALGRIND_REQ="3.0" + if test "x$USE_VALGRIND" = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VALGRIND" >&5 +$as_echo_n "checking for VALGRIND... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$VALGRIND_CFLAGS"; then + pkg_cv_VALGRIND_CFLAGS="$VALGRIND_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind >= \$VALGRIND_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_VALGRIND_CFLAGS=`$PKG_CONFIG --cflags "valgrind >= $VALGRIND_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$VALGRIND_LIBS"; then + pkg_cv_VALGRIND_LIBS="$VALGRIND_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind >= \$VALGRIND_REQ\""; } >&5 + ($PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_VALGRIND_LIBS=`$PKG_CONFIG --libs "valgrind >= $VALGRIND_REQ" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + VALGRIND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "valgrind >= $VALGRIND_REQ"` + else + VALGRIND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "valgrind >= $VALGRIND_REQ"` + fi + # Put the nasty error message in config.log where it belongs + echo "$VALGRIND_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + USE_VALGRIND="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +elif test $pkg_failed = untried; then + + USE_VALGRIND="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + VALGRIND_CFLAGS=$pkg_cv_VALGRIND_CFLAGS + VALGRIND_LIBS=$pkg_cv_VALGRIND_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + USE_VALGRIND="yes" +fi + fi + + if test "x$USE_VALGRIND" = xyes; then + +$as_echo "#define HAVE_VALGRIND 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using extra code paths for valgrind" >&5 +$as_echo "$as_me: Using extra code paths for valgrind" >&6;} + fi + + + + # Extract the first word of "valgrind", so it can be a program name with args. +set dummy valgrind; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_VALGRIND_PATH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $VALGRIND_PATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_VALGRIND_PATH="$VALGRIND_PATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_VALGRIND_PATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_VALGRIND_PATH" && ac_cv_path_VALGRIND_PATH="no" + ;; +esac +fi +VALGRIND_PATH=$ac_cv_path_VALGRIND_PATH +if test -n "$VALGRIND_PATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND_PATH" >&5 +$as_echo "$VALGRIND_PATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test ! "x$VALGRIND_PATH" = "xno"; then + HAVE_VALGRIND_TRUE= + HAVE_VALGRIND_FALSE='#' +else + HAVE_VALGRIND_TRUE='#' + HAVE_VALGRIND_FALSE= +fi + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libraries required to embed python" >&5 +$as_echo_n "checking for libraries required to embed python... " >&6; } + +if $PYTHON-config --help 2>/dev/null; then + PYTHON_LIBS=`$PYTHON-config --ldflags 2>/dev/null` + PYTHON_LIB=`$PYTHON -c "import distutils.sysconfig as s; print s.get_python_lib(standard_lib=1)"` + if echo "$host_os" | grep darwin >/dev/null 2>&1; then + PYTHON_LIB_LOC=/usr/lib + else + PYTHON_LIB_LOC=$PYTHON_LIB/config + + # default to prefix/lib for distros that don't have a link in + # .../pythonX.Y/config/ + if test ! -e $PYTHON_LIB_LOC/libpython${PYTHON_VERSION}.so; then + PYTHON_LIB_LOC=${py_prefix}/lib + fi + fi +else + PYTHON_LIBS="-L${py_prefix}/lib -lpython${PYTHON_VERSION}" + PYTHON_LIB_LOC="${py_prefix}/lib" +fi + + +# Check whether --with-libpython-dir was given. +if test "${with_libpython_dir+set}" = set; then : + withval=$with_libpython_dir; + PYTHON_LIB_LOC=`echo "$withval" | sed -e 's/\/$//g'` + + +fi + + +if echo "$host_os" | grep darwin >/dev/null 2>&1; then + PYTHON_LIB_SUFFIX=\\\"dylib\\\" +else + PYTHON_LIB_SUFFIX=G_MODULE_SUFFIX +fi + + + + +save_LIBS="$LIBS" +LIBS="$LIBS $PYTHON_LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char Py_Initialize (); +int +main () +{ +return Py_Initialize (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS="$save_LIBS"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; +else + LIBS="$save_LIBS"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; as_fn_error $? "could not find Python lib" "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + + + + EXP_VAR=PLUGINDIR + FROM_VAR=${libdir}/gstreamer-$GST_MAJORMINOR + + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + full_var=$new_full_var + PLUGINDIR="$full_var" + + + prefix=$prefix_save + exec_prefix=$exec_prefix_save + + +cat >>confdefs.h <<_ACEOF +#define PLUGINDIR "$PLUGINDIR" +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using $PLUGINDIR as the plugin install location" >&5 +$as_echo "$as_me: Using $PLUGINDIR as the plugin install location" >&6;} + + plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR" + + + + + if test "x$PACKAGE_VERSION_NANO" = "x0"; then + + if test "xyes" = "xno" -o "xyes" = "x"; then + GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"` + elif test "xyes" = "xyes"; then + if ( echo yes | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=yes + else + YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO "${srcdir}/gst-python.doap" `; + if test "x$YYYY_MM_DD" != "x"; then + GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD + else + as_fn_error $? "SET_PACKAGE_RELEASE_DATETIME: could not extract + release date for release version $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO from \"${srcdir}/gst-python.doap\" " "$LINENO" 5 + GST_PACKAGE_RELEASE_DATETIME="" + fi + fi + elif ( echo yes | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5 +$as_echo "$as_me: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&2;} + GST_PACKAGE_RELEASE_DATETIME="" + fi + + if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&5 +$as_echo "$as_me: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&5 +$as_echo "$as_me: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&6;} + + +cat >>confdefs.h <<_ACEOF +#define GST_PACKAGE_RELEASE_DATETIME "$GST_PACKAGE_RELEASE_DATETIME" +_ACEOF + + fi + + else + + if test "xno" = "xno" -o "xno" = "x"; then + GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"` + elif test "xno" = "xyes"; then + if ( echo no | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=no + else + YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" `; + if test "x$YYYY_MM_DD" != "x"; then + GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD + else + as_fn_error $? "SET_PACKAGE_RELEASE_DATETIME: could not extract + release date for release version from " "$LINENO" 5 + GST_PACKAGE_RELEASE_DATETIME="" + fi + fi + elif ( echo no | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + GST_PACKAGE_RELEASE_DATETIME=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5 +$as_echo "$as_me: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&2;} + GST_PACKAGE_RELEASE_DATETIME="" + fi + + if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&5 +$as_echo "$as_me: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&5 +$as_echo "$as_me: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&6;} + + +cat >>confdefs.h <<_ACEOF +#define GST_PACKAGE_RELEASE_DATETIME "$GST_PACKAGE_RELEASE_DATETIME" +_ACEOF + + fi + + fi + + +ac_config_files="$ac_config_files Makefile codegen/Makefile common/Makefile common/m4/Makefile gst/Makefile gst/gstversion.override gst/extend/Makefile examples/Makefile pkgconfig/Makefile pkgconfig/gst-python.pc pkgconfig/gst-python-uninstalled.pc plugin/Makefile testsuite/Makefile win32/common/config.h gst-python.spec gst/__init__.py" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GST_GCOV_ENABLED_TRUE}" && test -z "${GST_GCOV_ENABLED_FALSE}"; then + as_fn_error $? "conditional \"GST_GCOV_ENABLED\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_GST_AUDIO_TRUE}" && test -z "${HAVE_GST_AUDIO_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GST_AUDIO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_GST_VIDEO_TRUE}" && test -z "${HAVE_GST_VIDEO_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GST_VIDEO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_GST_TAG_TRUE}" && test -z "${HAVE_GST_TAG_FALSE}"; then + as_fn_error $? "conditional \"HAVE_GST_TAG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_PYGOBJECT_2_16_TRUE}" && test -z "${HAVE_PYGOBJECT_2_16_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PYGOBJECT_2_16\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_VALGRIND_TRUE}" && test -z "${HAVE_VALGRIND_FALSE}"; then + as_fn_error $? "conditional \"HAVE_VALGRIND\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GStreamer Python Bindings $as_me 0.10.22, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +GStreamer Python Bindings config.status 0.10.22 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "codegen/Makefile") CONFIG_FILES="$CONFIG_FILES codegen/Makefile" ;; + "common/Makefile") CONFIG_FILES="$CONFIG_FILES common/Makefile" ;; + "common/m4/Makefile") CONFIG_FILES="$CONFIG_FILES common/m4/Makefile" ;; + "gst/Makefile") CONFIG_FILES="$CONFIG_FILES gst/Makefile" ;; + "gst/gstversion.override") CONFIG_FILES="$CONFIG_FILES gst/gstversion.override" ;; + "gst/extend/Makefile") CONFIG_FILES="$CONFIG_FILES gst/extend/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + "pkgconfig/Makefile") CONFIG_FILES="$CONFIG_FILES pkgconfig/Makefile" ;; + "pkgconfig/gst-python.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gst-python.pc" ;; + "pkgconfig/gst-python-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gst-python-uninstalled.pc" ;; + "plugin/Makefile") CONFIG_FILES="$CONFIG_FILES plugin/Makefile" ;; + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "win32/common/config.h") CONFIG_FILES="$CONFIG_FILES win32/common/config.h" ;; + "gst-python.spec") CONFIG_FILES="$CONFIG_FILES gst-python.spec" ;; + "gst/__init__.py") CONFIG_FILES="$CONFIG_FILES gst/__init__.py" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..235a187 --- /dev/null +++ b/configure.ac @@ -0,0 +1,448 @@ +AC_PREREQ(2.60) + +dnl initialize autoconf +dnl when going to/from release please set the nano (fourth number) right ! +dnl releases only do Wall, cvs and prerelease does Werror too +AC_INIT(GStreamer Python Bindings, 0.10.22, + http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, + gst-python) + +AG_GST_INIT + +dnl initialize automake +AM_INIT_AUTOMAKE([-Wno-portability 1.10]) + +dnl define PACKAGE_VERSION_* variables +AS_VERSION + +dnl check if this is a release version +AS_NANO(GST_CVS="no", GST_CVS="yes") + +dnl can autoconf find the source ? +AC_CONFIG_SRCDIR([gst/gstmodule.c]) + +dnl define the output header for config +AM_CONFIG_HEADER([config.h]) + +dnl AM_MAINTAINER_MODE only provides the option to configure to enable it +AM_MAINTAINER_MODE + +dnl use pretty build output with automake >= 1.11 +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])], + [AM_DEFAULT_VERBOSITY=1 + AC_SUBST(AM_DEFAULT_VERBOSITY)]) + +AC_DEFINE_UNQUOTED(PYGST_MAJOR_VERSION, $PACKAGE_VERSION_MAJOR, [PyGst major version]) +AC_DEFINE_UNQUOTED(PYGST_MINOR_VERSION, $PACKAGE_VERSION_MINOR, [PyGst minor version]) +AC_DEFINE_UNQUOTED(PYGST_MICRO_VERSION, $PACKAGE_VERSION_MICRO, [PyGst micro version]) +AC_DEFINE_UNQUOTED(PYGST_NANO_VERSION, $PACKAGE_VERSION_NANO, [PyGst nano version]) +AC_SUBST(PACKAGE_VERSION_MAJOR) +AC_SUBST(PACKAGE_VERSION_MINOR) +AC_SUBST(PACKAGE_VERSION_MICRO) +AC_SUBST(PACKAGE_VERSION_NANO) + +dnl Add parameters for aclocal +AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4") + +dnl required versions of other packages +AC_SUBST(PYGTK_REQ, 2.6.3) +AC_SUBST(PYGOBJECT_REQ, 2.11.2) +AC_SUBST(GLIB_REQ, 2.8.0) +AC_SUBST(GTK_REQ, 2.6.0) +AC_SUBST(GST_REQ, 0.10.20) +AC_SUBST(GSTPB_REQ, 0.10.20) + +AC_DISABLE_STATIC + +AC_LIBTOOL_WIN32_DLL +AC_PROG_LIBTOOL + +dnl find a compiler +AC_PROG_CC +AC_PROG_CC_STDC + +dnl check if the compiler supports '-c' and '-o' options +AM_PROG_CC_C_O + +AG_GST_ARG_GCOV + +dnl check for python +dnl AM_PATH_PYTHON(2.2) +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 + AC_MSG_RESULT(okay) +else + AC_MSG_ERROR(too old) +fi +AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)]) + +dnl check for GStreamer +GST_MAJORMINOR=0.10 +AC_SUBST(GST_MAJORMINOR) +PKG_CHECK_MODULES(GST, gstreamer-$GST_MAJORMINOR >= $GST_REQ) +AC_DEFINE_UNQUOTED(GST_MAJORMINOR, "$GST_MAJORMINOR", [Gst MajorMinor version]) +GST_CFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS" +AC_SUBST(GST_CFLAGS) +AC_SUBST(GST_LIBS) + +dnl get the installed GStreamer core version +GST_MINOR_VERSION=`$PKG_CONFIG --modversion gstreamer-$GST_MAJORMINOR | cut -f 3 -d.` +GST_PB_MINOR_VERSION=`$PKG_CONFIG --modversion gstreamer-plugins-base-$GST_MAJORMINOR | cut -f 3 -d.` +GST_CVS_VERSION=`$PKG_CONFIG --modversion gstreamer-$GST_MAJORMINOR | cut -f 4 -d.` + +echo "Building against GStreamer core 0.10.$GST_MINOR_VERSION , ignoring API additions if needed" + +dnl Magic for allowing new API additions without forcing dependency on new core +dnl release. The lines do the magic so that new API additions are ignored at +dnl compile time. +dnl * Also see gst/gstversion.override.in and gst-0.10.*.override +dnl The following lines should be updated whenever: +dnl _ GST_REQ is up-ed (remove obsolete lines + gst-0.10.MINOR.ignore) +dnl _ new core/base is released (add lines + gst-0.10.MINOR.ignore) + +if test "x$GST_CVS_VERSION" = "x" +then + if test $GST_MINOR_VERSION -lt "21" + then + IGNORE_GST_0_10_21="gst-0.10.21.ignore" + else + IGNORE_GST_0_10_21="" + fi + + if test $GST_MINOR_VERSION -lt "22" + then + IGNORE_GST_0_10_22="gst-0.10.22.ignore" + else + IGNORE_GST_0_10_22="" + fi + + if test $GST_MINOR_VERSION -lt "23" + then + IGNORE_GST_0_10_23="gst-0.10.23.ignore" + else + IGNORE_GST_0_10_23="" + fi + + if test $GST_MINOR_VERSION -lt "24" + then + IGNORE_GST_0_10_24="gst-0.10.24.ignore" + else + IGNORE_GST_0_10_24="" + fi + + if test $GST_MINOR_VERSION -lt "25" + then + IGNORE_GST_0_10_25="gst-0.10.25.ignore" + else + IGNORE_GST_0_10_25="" + fi + + if test $GST_MINOR_VERSION -lt "26" + then + IGNORE_GST_0_10_26="gst-0.10.26.ignore" + else + IGNORE_GST_0_10_26="" + fi + + if test $GST_MINOR_VERSION -lt "29" + then + IGNORE_GST_0_10_29="gst-0.10.29.ignore" + else + IGNORE_GST_0_10_29="" + fi + + if test $GST_MINOR_VERSION -lt "30" + then + IGNORE_GST_0_10_30="gst-0.10.30.ignore" + else + IGNORE_GST_0_10_30="" + fi + + if test $GST_MINOR_VERSION -lt "31" + then + IGNORE_GST_0_10_31="gst-0.10.31.ignore" + else + IGNORE_GST_0_10_31="" + fi + + if test $GST_MINOR_VERSION -lt "32" + then + IGNORE_GST_0_10_32="gst-0.10.32.ignore" + else + IGNORE_GST_0_10_32="" + fi + + dnl plugins base + if test $GST_PB_MINOR_VERSION -ge "22" + then + AC_DEFINE_UNQUOTED(HAVE_GST_AUDIO, 1, [We can use the gst-audio library]) + AC_DEFINE_UNQUOTED(HAVE_GST_VIDEO, 1, [We can use the gst-video library]) + AC_DEFINE_UNQUOTED(HAVE_GST_TAG, 1, [We can use the gst-tag library]) + fi + + if test $GST_PB_MINOR_VERSION -lt "23" + then + IGNORE_GST_PB_0_10_23="gst-pb-0.10.23.ignore" + else + IGNORE_GST_PB_0_10_23="" + fi + + if test $GST_PB_MINOR_VERSION -lt "25" + then + IGNORE_GST_PB_0_10_25="gst-pb-0.10.25.ignore" + else + IGNORE_GST_PB_0_10_25="" + AC_DEFINE_UNQUOTED(HAVE_STREAM_VOLUME_INTERFACE, 1, [We can use the streamvolume interface]) + fi + + if test $GST_PB_MINOR_VERSION -lt "26" + then + IGNORE_GST_PB_0_10_26="gst-pb-0.10.26.ignore" + else + IGNORE_GST_PB_0_10_26="" + fi + + if test $GST_PB_MINOR_VERSION -lt "29" + then + IGNORE_GST_PB_0_10_29="gst-pb-0.10.29.ignore" + else + IGNORE_GST_PB_0_10_29="" + fi + + if test $GST_PB_MINOR_VERSION -lt "30" + then + IGNORE_GST_PB_0_10_30="gst-pb-0.10.30.ignore" + else + IGNORE_GST_PB_0_10_30="" + fi + + if test $GST_PB_MINOR_VERSION -lt "31" + then + IGNORE_GST_PB_0_10_31="gst-pb-0.10.31.ignore" + else + IGNORE_GST_PB_0_10_31="" + fi + + if test $GST_PB_MINOR_VERSION -lt "32" + then + IGNORE_GST_PB_0_10_32="gst-pb-0.10.32.ignore" + else + IGNORE_GST_PB_0_10_32="" + fi + +else + IGNORE_GST_0_10_18="" + IGNORE_GST_0_10_21="" + IGNORE_GST_0_10_22="" + IGNORE_GST_0_10_23="" + IGNORE_GST_0_10_24="" + IGNORE_GST_0_10_25="" + IGNORE_GST_0_10_26="" + IGNORE_GST_0_10_29="" + IGNORE_GST_0_10_30="" + IGNORE_GST_0_10_31="" + IGNORE_GST_0_10_32="" + IGNORE_GST_PB_0_10_23="" + IGNORE_GST_PB_0_10_25="" + IGNORE_GST_PB_0_10_26="" + IGNORE_GST_PB_0_10_29="" + IGNORE_GST_PB_0_10_30="" + IGNORE_GST_PB_0_10_31="" + IGNORE_GST_PB_0_10_32="" + AC_DEFINE_UNQUOTED(HAVE_GST_AUDIO, 1, [We can use the gst-audio library]) + AC_DEFINE_UNQUOTED(HAVE_GST_VIDEO, 1, [We can use the gst-video library]) + AC_DEFINE_UNQUOTED(HAVE_GST_TAG, 1, [We can use the gst-tag library]) +fi +AC_DEFINE_UNQUOTED(HAVE_STREAM_VOLUME_INTERFACE, 1, [We can use the streamvolume interface]) +AC_SUBST(IGNORE_GST_0_10_21) +AC_SUBST(IGNORE_GST_0_10_22) +AC_SUBST(IGNORE_GST_0_10_23) +AC_SUBST(IGNORE_GST_0_10_24) +AC_SUBST(IGNORE_GST_0_10_25) +AC_SUBST(IGNORE_GST_0_10_26) +AC_SUBST(IGNORE_GST_0_10_29) +AC_SUBST(IGNORE_GST_0_10_30) +AC_SUBST(IGNORE_GST_0_10_31) +AC_SUBST(IGNORE_GST_0_10_32) +AC_SUBST(IGNORE_GST_PB_0_10_23) +AC_SUBST(IGNORE_GST_PB_0_10_25) +AC_SUBST(IGNORE_GST_PB_0_10_26) +AC_SUBST(IGNORE_GST_PB_0_10_29) +AC_SUBST(IGNORE_GST_PB_0_10_30) +AC_SUBST(IGNORE_GST_PB_0_10_31) +AC_SUBST(IGNORE_GST_PB_0_10_32) +AM_CONDITIONAL(HAVE_GST_AUDIO, $HAVE_GST_AUDIO) +AM_CONDITIONAL(HAVE_GST_VIDEO, $HAVE_GST_VIDEO) +AM_CONDITIONAL(HAVE_GST_TAG, $HAVE_GST_TAG) + +dnl check for gstreamer-base; uninstalled is selected preferentially +PKG_CHECK_MODULES(GST_BASE, gstreamer-base-$GST_MAJORMINOR >= $GST_REQ, + HAVE_GST_BASE="yes", HAVE_GST_BASE="no") + +if test "x$HAVE_GST_BASE" = "xno"; then + AC_MSG_ERROR(no GStreamer Base Libs found) +fi + +AC_SUBST(GST_BASE_LIBS) +AC_SUBST(GST_BASE_CFLAGS) + + +dnl check for gstreamer core features (subsystems) +GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h" +AG_GST_PARSE_SUBSYSTEM_DISABLES($GST_CONFIGPATH) +if test $GST_DISABLE_LOADSAVE = "1"; then + AC_MSG_WARN("Load/Save XML persistence disabled") + IGNORE_GST_LOADSAVE="gst-disable-loadsave.ignore" +else + IGNORE_GST_LOADSAVE="" +fi +AC_SUBST(IGNORE_GST_LOADSAVE) + +dnl check for gstreamer-controller +PKG_CHECK_MODULES(GST_CONTROLLER, gstreamer-controller-$GST_MAJORMINOR >= $GST_REQ, + HAVE_GST_CONTROLLER="yes", HAVE_GST_CONTROLLER="no") + +if test "x$HAVE_GST_CONTROLLER" = "xno"; then + AC_MSG_ERROR(no GStreamer Controller Libs found) +fi + +AC_SUBST(GST_CONTROLLER_LIBS) +AC_SUBST(GST_CONTROLLER_CFLAGS) + +dnl check for gstreamer-net +PKG_CHECK_MODULES(GST_NET, gstreamer-net-$GST_MAJORMINOR >= $GST_REQ, + HAVE_GST_NET="yes", HAVE_GST_NET="no") + +if test "x$HAVE_GST_NET" = "xno"; then + AC_MSG_ERROR(no GStreamer Networking Libs found) +fi + +AC_SUBST(GST_NET_LIBS) +AC_SUBST(GST_NET_CFLAGS) + +dnl check for gstreamer-dataprotocol +PKG_CHECK_MODULES(GST_DP, gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ, + HAVE_GST_DP="yes", HAVE_GST_DP="no") + +if test "x$HAVE_GST_DP" = "xno"; then + AC_MSG_ERROR(no GStreamer Data Protocol Libs found) +fi + +AC_SUBST(GST_DP_LIBS) +AC_SUBST(GST_DP_CFLAGS) + + +dnl check for gst-plugins-base +PKG_CHECK_MODULES(GST_PLUGINS_BASE, gstreamer-plugins-base-$GST_MAJORMINOR >= $GSTPB_REQ, + HAVE_GST_PLUGINS_BASE="yes", HAVE_GST_PLUGINS_BASE="no") + +if test "x$HAVE_GST_PLUGINS_BASE" = "xno"; then + AC_MSG_ERROR(no gst-plugins-base found) +fi + +AC_SUBST(GST_PLUGINS_BASE_LIBS) +AC_SUBST(GST_PLUGINS_BASE_CFLAGS) + + +dnl check for pygobject +PKG_CHECK_MODULES(PYGOBJECT, pygobject-2.0 >= $PYGOBJECT_REQ, + [ + HAVE_PYGOBJECT="yes" + ], HAVE_PYGOBJECT="no") + +if test "x$HAVE_PYGOBJECT" = "xno"; then + dnl If we don't have pygobject, then check for pygtk + dnl check for pygtk + PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= $PYGTK_REQ) + AC_SUBST(PYGTK_CFLAGS) + PYGOBJECT_CFLAGS="\$(PYGTK_CFLAGS)" +fi +AC_SUBST(PYGOBJECT_CFLAGS) + +dnl FIXME: check for a pygobject with a correct pyg_param_gvalue_from_pyobject +PKG_CHECK_MODULES(PYGOBJECT_2_12, pygobject-2.0 >= 2.11.1, + [ + HAVE_PYGOBJECT_2_12="yes" + AC_DEFINE_UNQUOTED(HAVE_PYGOBJECT_2_12, 1, + [Defined if we have a 2.12 series pygobject]) + ], HAVE_PYGOBJECT_2_12="no") + +dnl FIXME: check for a pygobject which exports pyg_option_group_new +PKG_CHECK_MODULES(PYGOBJECT_2_16, pygobject-2.0 >= 2.15.0, + [ + HAVE_PYGOBJECT_2_16="yes" + AC_DEFINE_UNQUOTED(HAVE_PYGOBJECT_2_16, 1, + [Defined if we have a 2.16 series pygobject]) + ], HAVE_PYGOBJECT_2_16="no") + +AM_CONDITIONAL(HAVE_PYGOBJECT_2_16, test x$HAVE_PYGOBJECT_2_16 != xno) + +dnl define an ERROR_CFLAGS Makefile variable +AG_GST_SET_ERROR_CFLAGS($GST_CVS) + +GST_OPTION_CFLAGS="\$(ERROR_CFLAGS) \$(GCOV_CFLAGS)" +AC_SUBST(GST_OPTION_CFLAGS) +GST_OPTION_LIBS="\$(GCOV_LIBS)" +AC_SUBST(GST_OPTION_LIBS) + +dnl full installation path +AS_AC_EXPAND(PYTHONDIR, $pythondir) +AS_AC_EXPAND(PYEXECDIR, $pyexecdir) + +PYGST_CFLAGS="-I\$(top_srcdir)/gst -I\$(top_builddir)/gst" +AC_SUBST(PYGST_CFLAGS) +dnl add debugging options ... +# changequote(,)dnl +# if test "x$GCC" = xyes; then +# case " $CFLAGS " in +# *[\ \ ]-Wall[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -Wall" ;; +# esac + +# case " $CFLAGS " in +# *[\ \ ]-std=c9x[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -std=c9x" ;; +# esac +# fi +# changequote([,])dnl + +AG_GST_VALGRIND_CHECK + +dnl Stuff needed for the python plugin loader + +AM_CHECK_PYTHON_LIBS(,[AC_MSG_ERROR(could not find Python lib)]) + +AG_GST_SET_PLUGINDIR + +dnl set release date/time +AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO([$PACKAGE_VERSION_NANO], + ["${srcdir}/gst-python.doap"], + [$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO]) + +AC_OUTPUT([ + Makefile + codegen/Makefile + common/Makefile + common/m4/Makefile + gst/Makefile + gst/gstversion.override + gst/extend/Makefile + examples/Makefile + pkgconfig/Makefile + pkgconfig/gst-python.pc + pkgconfig/gst-python-uninstalled.pc + plugin/Makefile + testsuite/Makefile + win32/common/config.h + gst-python.spec + gst/__init__.py +]) diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..df8eea7 --- /dev/null +++ b/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/examples/Makefile.am b/examples/Makefile.am new file mode 100644 index 0000000..c6338de --- /dev/null +++ b/examples/Makefile.am @@ -0,0 +1,22 @@ +examplesdir = $(pkgdatadir)/$(GST_MAJORMINOR)/examples +examples_DATA = \ + audioconcat.py \ + audio-controller.py \ + bps.py \ + cp.py \ + debugslider.py \ + f2f.py \ + filesrc.py \ + fvumeter.py \ + gst-discover \ + gstfile.py \ + mixer.py \ + play.py \ + pipeline-tester \ + remuxer.py \ + sinkelement.py \ + vumeter.py \ + decodebin.py \ + maemogst.py + +EXTRA_DIST = $(examples_DATA) diff --git a/examples/Makefile.in b/examples/Makefile.in new file mode 100644 index 0000000..34f3f74 --- /dev/null +++ b/examples/Makefile.in @@ -0,0 +1,532 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(examplesdir)" +DATA = $(examples_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +examplesdir = $(pkgdatadir)/$(GST_MAJORMINOR)/examples +examples_DATA = \ + audioconcat.py \ + audio-controller.py \ + bps.py \ + cp.py \ + debugslider.py \ + f2f.py \ + filesrc.py \ + fvumeter.py \ + gst-discover \ + gstfile.py \ + mixer.py \ + play.py \ + pipeline-tester \ + remuxer.py \ + sinkelement.py \ + vumeter.py \ + decodebin.py \ + maemogst.py + +EXTRA_DIST = $(examples_DATA) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-examplesDATA: $(examples_DATA) + @$(NORMAL_INSTALL) + test -z "$(examplesdir)" || $(MKDIR_P) "$(DESTDIR)$(examplesdir)" + @list='$(examples_DATA)'; test -n "$(examplesdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(examplesdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(examplesdir)" || exit $$?; \ + done + +uninstall-examplesDATA: + @$(NORMAL_UNINSTALL) + @list='$(examples_DATA)'; test -n "$(examplesdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(examplesdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(examplesdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(examplesdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-examplesDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-examplesDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-examplesDATA install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-examplesDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/examples/audio-controller.py b/examples/audio-controller.py new file mode 100644 index 0000000..d676910 --- /dev/null +++ b/examples/audio-controller.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# audio-controller.py +# (c) 2005 Edward Hervey +# Test case for the GstController on sinesrc -> alsasink +# Inspired from ensonic's examples/controller/audio-controller.c + +import pygst +pygst.require('0.10') +import gst +import time + +def main(): + pipeline = gst.Pipeline("audiocontroller") + src = gst.element_factory_make("audiotestsrc", "src") + sink = gst.element_factory_make("alsasink", "sink") + pipeline.add(src, sink) + src.link(sink) + + control = gst.Controller(src, "freq", "volume") + control.set_interpolation_mode("volume", gst.INTERPOLATE_LINEAR) + control.set_interpolation_mode("freq", gst.INTERPOLATE_LINEAR) + + control.set("volume", 0, 0.0) + control.set("volume", 2 * gst.SECOND, 1.0) + control.set("volume", 4 * gst.SECOND, 0.0) + control.set("volume", 6 * gst.SECOND, 1.0) + + control.set("freq", 0, 440.0) + control.set("freq", 3 * gst.SECOND, 3000.0) + control.set("freq", 6 * gst.SECOND, 880.0) + + pipeline.set_state(gst.STATE_PLAYING) + + time.sleep(7) + +if __name__ == "__main__": + main() diff --git a/examples/audioconcat.py b/examples/audioconcat.py new file mode 100644 index 0000000..306b24f --- /dev/null +++ b/examples/audioconcat.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# audioconcat.py - Concatenates multiple audio files to single ogg/vorbis file +# Uses the gnonlin elements (http://gnonlin.sf.net/) +# Copyright (C) 2005 Edward Hervey +# 2006 Jason Gerard DeRose +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst +from gst.extend.discoverer import Discoverer + + + +class AudioDec(gst.Bin): + '''Decodes audio file, outputs at specified caps''' + + def __init__(self, location, caps): + gst.Bin.__init__(self) + + # Create elements + src = gst.element_factory_make('filesrc') + dec = gst.element_factory_make('decodebin') + conv = gst.element_factory_make('audioconvert') + rsmpl = gst.element_factory_make('audioresample') + ident = gst.element_factory_make('identity') + + # Set 'location' property on filesrc + src.set_property('location', location) + + # Connect handler for 'new-decoded-pad' signal + dec.connect('new-decoded-pad', self.__on_new_decoded_pad) + + # Add elements to bin + self.add(src, dec, conv, rsmpl, ident) + + # Link *some* elements + # This is completed in self.__on_new_decoded_pad() + src.link(dec) + conv.link(rsmpl) + rsmpl.link(ident, caps) + + # Reference used in self.__on_new_decoded_pad() + self.__apad = conv.get_pad('sink') + + # Add ghost pad + self.add_pad(gst.GhostPad('src', ident.get_pad('src'))) + + + def __on_new_decoded_pad(self, element, pad, last): + caps = pad.get_caps() + name = caps[0].get_name() + print '\n__on_new_decoded_pad:', name + if 'audio' in name: + if not self.__apad.is_linked(): # Only link once + pad.link(self.__apad) + + + + +class AudioConcat: + '''Concatenates multiple audio files to single ogg/vorbis file''' + + caps = gst.caps_from_string('audio/x-raw-float, rate=44100, channels=2, endianness=1234, width=32') + + def __init__(self, infiles, outfile): + # These are used in iteration through infiles + self.infiles = infiles + self.i = 0 + self.start = 0L + + # The pipeline + self.pipeline = gst.Pipeline() + + # Create bus and connect 'eos' and 'error' handlers + self.bus = self.pipeline.get_bus() + self.bus.add_signal_watch() + self.bus.connect('message::eos', self.on_eos) + self.bus.connect('message::error', self.on_error) + + # Create elements + self.comp = gst.element_factory_make('gnlcomposition') + self.enc = gst.element_factory_make('vorbisenc') + self.mux = gst.element_factory_make('oggmux') + self.sink = gst.element_factory_make('filesink') + + # Connect handler for 'pad-added' signal + self.comp.connect('pad-added', self.on_pad_added) + + # Set 'location' property on filesink + self.sink.set_property('location', outfile) + + # Add elements to pipeline + self.pipeline.add(self.comp, self.enc, self.mux, self.sink) + + # Link *some* elements + # This in completed in self.on_pad_added() + gst.element_link_many(self.enc, self.mux, self.sink) + + # Reference used in self.on_pad_added() + self.apad = self.enc.get_pad('sink') + + # The MainLoop + self.mainloop = gobject.MainLoop() + + # Iterate through infiles + gobject.idle_add(self.discover) + self.mainloop.run() + + + def discover(self): + infile = self.infiles[self.i] + discoverer = Discoverer(infile) + discoverer.connect('discovered', self.on_discovered, infile) + discoverer.discover() + return False # Don't repeat idle call + + + def on_discovered(self, discoverer, ismedia, infile): + print '\non_discovered:', infile + discoverer.print_info() + if discoverer.is_audio: + dec = AudioDec(infile, self.caps) + src = gst.element_factory_make('gnlsource') + src.add(dec) + src.set_property('media-start', 0L) + src.set_property('media-duration', discoverer.audiolength) + src.set_property('start', self.start) + src.set_property('duration', discoverer.audiolength) + self.comp.add(src) + self.start += discoverer.audiolength + self.i += 1 + if self.i < len(self.infiles): + gobject.idle_add(self.discover) + else: + if self.start > 0: # At least 1 infile is_audio and audiolength > 0 + self.pipeline.set_state(gst.STATE_PLAYING) + else: + self.mainloop.quit() + + + def on_pad_added(self, element, pad): + caps = pad.get_caps() + name = caps[0].get_name() + print '\non_pad_added:', name + if name == 'audio/x-raw-float': + if not self.apad.is_linked(): # Only link once + pad.link(self.apad) + + + def on_eos(self, bus, msg): + print '\non_eos' + self.mainloop.quit() + + + def on_error(self, bus, msg): + error = msg.parse_error() + print '\non_error:', error[1] + self.mainloop.quit() + + + + +if __name__ == '__main__': + if len(sys.argv) >= 3: + AudioConcat(sys.argv[1:-1], sys.argv[-1]) + else: + print 'Usage: %s ' % sys.argv[0] + print 'Example: %s song1.mp3 song2.ogg output.ogg' % sys.argv[0] diff --git a/examples/bps.py b/examples/bps.py new file mode 100755 index 0000000..888fcdb --- /dev/null +++ b/examples/bps.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2003 David I. Lehn +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn +# + +import pygtk +pygtk.require('2.0') + +import sys +import time +import gobject +import gtk + +import pygst +pygst.require('0.10') + +import gst + +class BPS(object): + def __init__(self): + self.buffers = 0 + self.start = 0 + + def done(self): + end = time.time() + dt = end - self.start + bps = self.buffers/dt + spb = dt/self.buffers + print '\t%d buffers / %fs\t= %f bps\t= %f spb' % (self.buffers, dt, bps, spb) + + def fakesrc(self, buffers): + src = gst.element_factory_make('fakesrc','src') + src.set_property('silent', 1) + src.set_property('num_buffers', buffers) + return src + + def fakesink(self): + sink = gst.element_factory_make('fakesink','sink') + sink.set_property('silent', 1) + return sink + + def build_pipeline(self, buffers): + pipeline = gst.Pipeline('pipeline') + + src = self.fakesrc(buffers) + pipeline.add(src) + sink = self.fakesink() + pipeline.add(sink) + src.link(sink) + + return pipeline + + def idle(self, pipeline): + return pipeline.iterate() + + def test(self): + self.bus = self.pipeline.get_bus() + + self.start = time.time() + + self.pipeline.set_state(gst.STATE_PLAYING) + + while 1: + msg = self.bus.poll(gst.MESSAGE_EOS | gst.MESSAGE_ERROR, gst.SECOND) + if msg: + break + + self.pipeline.set_state(gst.STATE_NULL) + self.done() + + def run(self, buffers): + self.buffers = buffers + + print '# Testing buffer processing rate for "fakesrc ! fakesink"' + print '# bps = buffers per second' + print '# spb = seconds per buffer' + + self.pipeline = self.build_pipeline(buffers) + assert self.pipeline + + self.test() + +def main(args): + "GStreamer Buffers-Per-Second tester" + + if len(args) < 2: + print 'usage: %s buffers' % args[0] + return 1 + + bps = BPS() + + buffers = int(args[1]) + if buffers < 1: + print 'buffers must be higher than 0' + return + + bps.run(buffers) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/cp.py b/examples/cp.py new file mode 100755 index 0000000..1111098 --- /dev/null +++ b/examples/cp.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2002 David I. Lehn +# 2004 Johan Dahlin +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn +# + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst + + +mainloop = gobject.MainLoop() + +def on_eos(bus, msg): + mainloop.quit() + +def filter(input, output): + "A GStreamer copy pipeline which can add arbitrary filters" + + # create a new bin to hold the elements + bin = gst.parse_launch('filesrc name=source ! ' + + 'progressreport ! ' + + # This 'statistics' element is depreciated in 0.10 + #'statistics silent=false buffer-update-freq=1 ' + + #'update_on_eos=true ! ' + + 'filesink name=sink') + filesrc = bin.get_by_name('source') + filesrc.set_property('location', input) + + filesink = bin.get_by_name('sink') + filesink.set_property('location', output) + + bus = bin.get_bus() + bus.add_signal_watch() + bus.connect('message::eos', on_eos) + + # start playing + bin.set_state(gst.STATE_PLAYING) + + try: + mainloop.run() + except KeyboardInterrupt: + pass + + # stop the bin + bin.set_state(gst.STATE_NULL) + +def main(args): + "A GStreamer based cp(1) with stats" + + if len(args) != 3: + print 'usage: %s source dest' % (sys.argv[0]) + return -1 + + return filter(args[1], args[2]) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/debugslider.py b/examples/debugslider.py new file mode 100644 index 0000000..16aee51 --- /dev/null +++ b/examples/debugslider.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2005 Fluendo S.L. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: Andy Wingo + +import gtk +from gtk import gdk +import gobject + +import pygst +pygst.require('0.10') +import gst + +class DebugSlider(gtk.HScale): + def __init__(self): + adj = gtk.Adjustment(int(gst.debug_get_default_threshold()), + 0, 5, 1, 0, 0) + gtk.HScale.__init__(self, adj) + self.set_digits(0) + self.set_draw_value(True) + self.set_value_pos(gtk.POS_TOP) + + def value_changed(self): + newlevel = int(self.get_adjustment().get_value()) + gst.debug_set_default_threshold(newlevel) + + self.connect('value-changed', value_changed) + +if __name__ == '__main__': + p = gst.parse_launch('fakesrc ! fakesink') + p.set_state(gst.STATE_PLAYING) + + w = gtk.Window() + s = DebugSlider() + w.add(s) + s.show() + w.set_default_size(200, 40) + w.show() + w.connect('delete-event', lambda *args: gtk.main_quit()) + gtk.main() diff --git a/examples/decodebin.py b/examples/decodebin.py new file mode 100644 index 0000000..be044a6 --- /dev/null +++ b/examples/decodebin.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python + +# decodebin.py - Audio autopluging example using 'decodebin' element +# Copyright (C) 2006 Jason Gerard DeRose + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst + + +class Decodebin: + def __init__(self, location): + # The pipeline + self.pipeline = gst.Pipeline() + + # Create bus and connect several handlers + self.bus = self.pipeline.get_bus() + self.bus.add_signal_watch() + self.bus.connect('message::eos', self.on_eos) + self.bus.connect('message::tag', self.on_tag) + self.bus.connect('message::error', self.on_error) + + # Create elements + self.src = gst.element_factory_make('filesrc') + self.dec = gst.element_factory_make('decodebin') + self.conv = gst.element_factory_make('audioconvert') + self.rsmpl = gst.element_factory_make('audioresample') + self.sink = gst.element_factory_make('alsasink') + + # Set 'location' property on filesrc + self.src.set_property('location', location) + + # Connect handler for 'new-decoded-pad' signal + self.dec.connect('new-decoded-pad', self.on_new_decoded_pad) + + # Add elements to pipeline + self.pipeline.add(self.src, self.dec, self.conv, self.rsmpl, self.sink) + + # Link *some* elements + # This is completed in self.on_new_decoded_pad() + self.src.link(self.dec) + gst.element_link_many(self.conv, self.rsmpl, self.sink) + + # Reference used in self.on_new_decoded_pad() + self.apad = self.conv.get_pad('sink') + + # The MainLoop + self.mainloop = gobject.MainLoop() + + # And off we go! + self.pipeline.set_state(gst.STATE_PLAYING) + self.mainloop.run() + + + def on_new_decoded_pad(self, element, pad, last): + caps = pad.get_caps() + name = caps[0].get_name() + print 'on_new_decoded_pad:', name + if name == 'audio/x-raw-float' or name == 'audio/x-raw-int': + if not self.apad.is_linked(): # Only link once + pad.link(self.apad) + + + def on_eos(self, bus, msg): + print 'on_eos' + self.mainloop.quit() + + + def on_tag(self, bus, msg): + taglist = msg.parse_tag() + print 'on_tag:' + for key in taglist.keys(): + print '\t%s = %s' % (key, taglist[key]) + + + def on_error(self, bus, msg): + error = msg.parse_error() + print 'on_error:', error[1] + self.mainloop.quit() + + + + + +if __name__ == '__main__': + if len(sys.argv) == 2: + Decodebin(sys.argv[1]) + else: + print 'Usage: %s /path/to/media/file' % sys.argv[0] diff --git a/examples/f2f.py b/examples/f2f.py new file mode 100755 index 0000000..8513341 --- /dev/null +++ b/examples/f2f.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2002 David I. Lehn +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn +# + +import sys + +import pygst +pygst.require('0.10') + +import gst + +def handoff_cb(sender, *args): + print sender.get_name(), args + +def main(args): + # create a new bin to hold the elements + #gst_debug_set_categories(-1) + bin = gst.parse_launch('fakesrc name=source silent=1 num-buffers=10 signal-handoffs=true ! ' + + 'fakesink name=sink silent=1 signal-handoffs=true') + source = bin.get_by_name('source') + source.connect('handoff', handoff_cb) + source.get_pad("src").connect("have-data", handoff_cb) + sink = bin.get_by_name('sink') + sink.connect('handoff', handoff_cb) + sink.get_pad("sink").connect('have-data', handoff_cb) + + print source, sink + + bus = bin.get_bus() + + res = bin.set_state(gst.STATE_PLAYING); + assert res + + while 1: + msg = bus.poll(gst.MESSAGE_EOS | gst.MESSAGE_ERROR, gst.SECOND) + if msg: + break + + res = bin.set_state(gst.STATE_NULL) + assert res + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/filesrc.py b/examples/filesrc.py new file mode 100755 index 0000000..f7823e0 --- /dev/null +++ b/examples/filesrc.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# GStreamer python bindings +# Copyright (C) 2002 David I. Lehn +# 2004 Johan Dahlin +# +# filesrc.py: implements a file source element completely in python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +import sys +import gobject; gobject.threads_init() +import pygst +pygst.require('0.10') +import gst + +class FileSource(gst.BaseSrc): + __gsttemplates__ = ( + gst.PadTemplate("src", + gst.PAD_SRC, + gst.PAD_ALWAYS, + gst.caps_new_any()), + ) + + blocksize = 4096 + fd = None + + def __init__(self, name): + self.__gobject_init__() + self.curoffset = 0 + self.set_name(name) + + def set_property(self, name, value): + if name == 'location': + self.fd = open(value, 'r') + + def do_create(self, offset, size): + if offset != self.curoffset: + self.fd.seek(offset, 0) + data = self.fd.read(self.blocksize) + if data: + self.curoffset += len(data) + return gst.FLOW_OK, gst.Buffer(data) + else: + return gst.FLOW_UNEXPECTED, None +gobject.type_register(FileSource) + +def main(args): + if len(args) != 3: + print 'Usage: %s input output' % (args[0]) + return -1 + + bin = gst.Pipeline('pipeline') + + filesrc = FileSource('filesource') + assert filesrc + filesrc.set_property('location', args[1]) + + filesink = gst.element_factory_make('filesink', 'sink') + filesink.set_property('location', args[2]) + + bin.add(filesrc, filesink) + gst.element_link_many(filesrc, filesink) + + bin.set_state(gst.STATE_PLAYING); + mainloop = gobject.MainLoop() + + def bus_event(bus, message): + t = message.type + if t == gst.MESSAGE_EOS: + mainloop.quit() + elif t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + print "Error: %s" % err, debug + mainloop.quit() + return True + bin.get_bus().add_watch(bus_event) + + mainloop.run() + bin.set_state(gst.STATE_NULL) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) + diff --git a/examples/fvumeter.py b/examples/fvumeter.py new file mode 100644 index 0000000..cabf09f --- /dev/null +++ b/examples/fvumeter.py @@ -0,0 +1,239 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2005 Fluendo S.L. +# Originally from the Flumotion streaming server. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: Zaheer Merali + +import gtk +from gtk import gdk +import gobject + + +# this VUMeter respects IEC standard +# BS 6840-18:1996/IEC-268-18 +# and is inspired by JACK's meterbridge dpm_meters.c + +class FVUMeter(gtk.DrawingArea): + __gsignals__ = { 'expose-event' : 'override', + 'size-allocate': 'override', + 'size-request': 'override', + 'realize' : 'override' + } + __gproperties__ = { + 'peak' : (gobject.TYPE_FLOAT, + 'peak volume level', + 'peak volume level in dB', + -90.0, + 0, + -90.0, + gobject.PARAM_READWRITE), + 'decay' : (gobject.TYPE_FLOAT, + 'decay volume level', + 'decay volume level in dB', + -90.0, + 0, + -90.0, + gobject.PARAM_READWRITE), + 'orange-threshold': (gobject.TYPE_FLOAT, + 'threshold for orange', + 'threshold for orange use in dB', + -90.0, + 0, + -10.0, + gobject.PARAM_READWRITE), + 'red-threshold': (gobject.TYPE_FLOAT, + 'threshold for red', + 'threshold for red use in dB', + -90.0, + 0, + -1.0, + gobject.PARAM_READWRITE) + + } + green_gc = None + orange_gc = None + red_gc = None + yellow_gc = None + + topborder = 7 + peaklevel = -90.0 + decaylevel = -90.0 + orange_threshold = -10.0 + red_threshold = -1.0 + bottomborder = 25 + leftborder = 15 + rightborder = 65 + + # Returns the meter deflection percentage given a db value + def iec_scale(self, db): + pct = 0.0 + + if db < -70.0: + pct = 0.0 + elif db < -60.0: + pct = (db + 70.0) * 0.25 + elif db < -50.0: + pct = (db + 60.0) * 0.5 + 2.5 + elif db < -40.0: + pct = (db + 50.0) * 0.75 + 7.5 + elif db < -30.0: + pct = (db + 40.0) * 1.5 + 15.0 + elif db < -20.0: + pct = (db + 30.0) * 2.0 + 30.0 + elif db < 0.0: + pct = (db + 20.0) * 2.5 + 50.0 + else: + pct = 100.0 + + return pct + + def do_get_property(self, property): + if property.name == 'peak': + return self.peaklevel + elif property.name == 'decay': + return self.decaylevel + elif property.name == 'orange-threshold': + return self.orange_threshold + elif property.name == 'red-threshold': + return self.red_threshold + else: + raise AttributeError, 'unknown property %s' % property.name + + def do_set_property(self, property, value): + if property.name == 'peak': + self.peaklevel = value + elif property.name == 'decay': + self.decaylevel = value + elif property.name == 'orange-threshold': + self.orange_threshold = value + elif property.name == 'red-threshold': + self.red_threshold = value + else: + raise AttributeError, 'unknown property %s' % property.name + + self.queue_draw() + + def do_size_request(self, requisition): + requisition.width = 250 + requisition.height = 50 + + def do_size_allocate(self, allocation): + self.allocation = allocation + if self.flags() & gtk.REALIZED: + self.window.move_resize(*allocation) + + def do_realize(self): + self.set_flags(self.flags() | gtk.REALIZED) + + self.window = gdk.Window(self.get_parent_window(), + width=self.allocation.width, + height=self.allocation.height, + window_type=gdk.WINDOW_CHILD, + wclass=gdk.INPUT_OUTPUT, + event_mask=self.get_events() | gdk.EXPOSURE_MASK) + + colormap = gtk.gdk.colormap_get_system() + green = colormap.alloc_color(0, 65535, 0) + orange = colormap.alloc_color(65535, 32768, 0) + red = colormap.alloc_color(65535, 0, 0) + yellow = colormap.alloc_color(65535, 65535, 0) + self.green_gc = gdk.GC(self.window, foreground=green) + self.orange_gc = gdk.GC(self.window, foreground=orange) + self.red_gc = gdk.GC(self.window, foreground=red) + self.yellow_gc = gdk.GC(self.window, foreground=yellow) + + self.window.set_user_data(self) + self.style.attach(self.window) + self.style.set_background(self.window, gtk.STATE_NORMAL) + + def do_expose_event(self, event): + self.chain(event) + + x, y, w, h = self.allocation + vumeter_width = w - (self.leftborder + self.rightborder) + vumeter_height = h - (self.topborder + self.bottomborder) + self.window.draw_rectangle(self.style.black_gc, True, + self.leftborder, self.topborder, + vumeter_width, + vumeter_height) + # draw peak level + # 0 maps to width of 0, full scale maps to total width + peaklevelpct = self.iec_scale(self.peaklevel) + peakwidth = int(vumeter_width * (peaklevelpct / 100)) + draw_gc = self.green_gc + if self.peaklevel >= self.orange_threshold: + draw_gc = self.orange_gc + if self.peaklevel >= self.red_threshold: + draw_gc = self.red_gc + if peakwidth > 0: + self.window.draw_rectangle(draw_gc, True, + self.leftborder, self.topborder, + peakwidth, vumeter_height) + + # draw yellow decay level + if self.decaylevel > -90.0: + decaylevelpct = self.iec_scale(self.decaylevel) + decaywidth = int(vumeter_width * (decaylevelpct / 100)) + # cheat the geometry by drawing 0% level at pixel 0, + # which is same position as just above 0% + if decaywidth == 0: + decaywidth = 1 + self.window.draw_line(self.yellow_gc, + self.leftborder + decaywidth - 1, + self.topborder, + self.leftborder + decaywidth - 1, + self.topborder + vumeter_height - 1) + + # draw tick marks + scalers = [ + ('-90', 0.0), + ('-40', 0.15), + ('-30', 0.30), + ('-20', 0.50), + ('-10', 0.75), + ( '-5', 0.875), + ( '0', 1.0), + ] + for level, scale in scalers: + # tick mark, 6 pixels high + # we cheat again here by putting the 0 at the first pixel + self.window.draw_line(self.style.black_gc, + self.leftborder + int(scale * (vumeter_width - 1)), + h - self.bottomborder, + self.leftborder + int(scale * (vumeter_width - 1)), + h - self.bottomborder + 5) + # tick label + layout = self.create_pango_layout(level) + layout_width, layout_height = layout.get_pixel_size() + self.window.draw_layout(self.style.black_gc, + self.leftborder + int(scale * vumeter_width) + - int(layout_width / 2), + h - self.bottomborder + 7, layout) + + # draw the peak level to the right + layout = self.create_pango_layout("%.2fdB" % self.peaklevel) + layout_width, layout_height = layout.get_pixel_size() + self.window.draw_layout(self.style.black_gc, + self.leftborder + vumeter_width + 5, + self.topborder + int(vumeter_height / 2 - layout_height / 2), + layout) + +gobject.type_register(FVUMeter) diff --git a/examples/gst-discover b/examples/gst-discover new file mode 100755 index 0000000..fa630b1 --- /dev/null +++ b/examples/gst-discover @@ -0,0 +1,89 @@ +#!/usr/bin/env python +# gst-python +# Copyright (C) 2006 Andy Wingo +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + + +import os +import sys + +import pygtk +pygtk.require('2.0') +import gobject +gobject.threads_init() +import pygst +pygst.require('0.10') +import gst +from gst.extend import discoverer + +def fail(path): + print "error: %r does not appear to be a media file" % path + sys.exit(1) + +def succeed(d): + def pp(prop, val): + print '%s: %s' % (prop, val) + pp('media type', d.mimetype) + + pp('has video', d.is_video) + if d.is_video: + pp('video caps', d.videocaps) + pp('video width (pixels)', d.videowidth) + pp('video height (pixels)', d.videoheight) + pp('video length (hh:mm:ss)', gst.TIME_ARGS(d.videolength)) + pp('framerate (fps)', '%s/%s' % (d.videorate.num, d.videorate.denom)) + + pp('has audio', d.is_audio) + if d.is_audio: + pp('audio caps', d.audiocaps) + pp('audio format', d.audiofloat and 'floating-point' or 'integer') + pp('sample rate (Hz)', d.audiorate) + pp('sample width (bits)', d.audiowidth) + pp('sample depth (bits)', d.audiodepth) + pp('audio length (hh:mm:ss)', gst.TIME_ARGS(d.audiolength)) + pp('audio channels', d.audiochannels) + + sys.exit(0) + +def discover(path): + def discovered(d, is_media): + if is_media: + succeed(d) + else: + fail(path) + + d = discoverer.Discoverer(path) + d.connect('discovered', discovered) + d.discover() + gobject.MainLoop().run() + +def usage(): + print >>sys.stderr, "usage: gst-discover PATH-TO-MEDIA-FILE" + sys.exit(1) + +def main(argv): + if len(argv) != 2: + usage() + path = argv.pop() + if not os.path.isfile(path): + print >>sys.stderr, "error: file %r does not exist" % path + usage() + + return discover(path) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/gstfile.py b/examples/gstfile.py new file mode 100644 index 0000000..ea0a768 --- /dev/null +++ b/examples/gstfile.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gstfile.py +# (c) 2005 Edward Hervey +# Discovers and prints out multimedia information of files + +# This example shows how to use gst-python: +# _ in an object-oriented way (Discoverer class) +# _ subclassing a gst.Pipeline +# _ and overidding existing methods (do_iterate()) + +import os +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') + +from gst.extend.discoverer import Discoverer + +class GstFile: + """ + Analyses one or more files and prints out the multimedia information of + each file. + """ + + def __init__(self, files): + self.files = files + self.mainloop = gobject.MainLoop() + self.current = None + + def run(self): + gobject.idle_add(self._discover_one) + self.mainloop.run() + + def _discovered(self, discoverer, ismedia): + discoverer.print_info() + self.current = None + if len(self.files): + print "\n" + gobject.idle_add(self._discover_one) + + def _discover_one(self): + if not len(self.files): + gobject.idle_add(self.mainloop.quit) + return False + filename = self.files.pop(0) + if not os.path.isfile(filename): + gobject.idle_add(self._discover_one) + return False + print "Running on", filename + # create a discoverer for that file + self.current = Discoverer(filename) + # connect a callback on the 'discovered' signal + self.current.connect('discovered', self._discovered) + # start the discovery + self.current.discover() + return False + +def main(args): + if len(args) < 2: + print 'usage: %s files...' % args[0] + return 2 + + gstfile = GstFile(args[1:]) + gstfile.run() + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/maemogst.py b/examples/maemogst.py new file mode 100644 index 0000000..1f9ae0d --- /dev/null +++ b/examples/maemogst.py @@ -0,0 +1,101 @@ +import gobject +gobject.threads_init() +import gtk +gtk.gdk.threads_init() +import hildon +import gst +import sys + +# VideoWidget taken from play.py in gst-python examples +class VideoWidget(gtk.DrawingArea): + def __init__(self): + gtk.DrawingArea.__init__(self) + self.imagesink = None + self.unset_flags(gtk.DOUBLE_BUFFERED) + + def do_expose_event(self, event): + if self.imagesink: + self.imagesink.expose() + return False + else: + return True + + def set_sink(self, sink): + assert self.window.xid + self.imagesink = sink + self.imagesink.set_xwindow_id(self.window.xid) + +class MaemoGstView: + + def __init__(self): + # hildon has one program instance per app, so get instance + self.p = hildon.Program.get_instance() + # set name of application: this shows in titlebar + gtk.set_application_name("Maemo GStreamer VideoTest") + # stackable window in case we want more windows in future in app + self.w = hildon.StackableWindow() + box = gtk.VBox() + self.video_widget = VideoWidget() + # video widget we want to expand to size + box.pack_start(self.video_widget, True, True, 0) + # a button finger height to play/pause + self.button = hildon.Button(gtk.HILDON_SIZE_FINGER_HEIGHT, + hildon.BUTTON_ARRANGEMENT_VERTICAL, title="Pause") + self.button.connect_after("clicked", self.on_button_clicked) + # don't want button to expand or fill, just stay finger height + box.pack_start(self.button, False, False, 0) + self.w.add(box) + self.w.connect("delete-event", gtk.main_quit) + self.p.add_window(self.w) + self.w.show_all() + self.start_streaming() + + def start_streaming(self): + # we use ximagesink solely for screenshotting ability + # less cpu usage would happen with videotestsrc ! xvimagesink + self.pipeline = \ + gst.parse_launch("videotestsrc ! videoscale ! ximagesink") + bus = self.pipeline.get_bus() + # need to connect to sync message handler so we get the sink to be + # embedded at the right time and not have a temporary new window + bus.enable_sync_message_emission() + bus.add_signal_watch() + bus.connect("sync-message::element", self.on_sync_message) + bus.connect("message", self.on_message) + self.pipeline.set_state(gst.STATE_PLAYING) + + def on_sync_message(self, bus, message): + if message.structure is None: + return + if message.structure.get_name() == 'prepare-xwindow-id': + # all this is needed to sync with the X server before giving the + # x id to the sink + gtk.gdk.threads_enter() + gtk.gdk.display_get_default().sync() + self.video_widget.set_sink(message.src) + message.src.set_property("force-aspect-ratio", True) + gtk.gdk.threads_leave() + + def on_message(self, bus, message): + if message.type == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + hildon.hildon_banner_show_information(self.w, '', + "Error: %s" % err) + + def on_button_clicked(self, widget): + success, state, pending = self.pipeline.get_state(1) + # do not listen if in middle of state change + if not pending: + if state == gst.STATE_PLAYING: + self.pipeline.set_state(gst.STATE_PAUSED) + self.button.set_label("Play") + else: + self.pipeline.set_state(gst.STATE_PLAYING) + self.button.set_label("Pause") + +def main(): + view = MaemoGstView() + gtk.main() + +if __name__ == '__main__': + sys.exit(main()) diff --git a/examples/mixer.py b/examples/mixer.py new file mode 100644 index 0000000..e9cb432 --- /dev/null +++ b/examples/mixer.py @@ -0,0 +1,31 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +import sys + +import gst +import gst.interfaces + +pipeline = "alsasrc" +if sys.argv[1:]: + pipeline = " ".join(sys.argv[1:]) +a = gst.element_factory_make(pipeline) +print dir(a) + +res = a.set_state(gst.STATE_PAUSED) +if res != gst.STATE_CHANGE_SUCCESS: + print "Could not set pipeline %s to PAUSED" % pipeline + +print "Inputs:" +for t in a.list_tracks(): + if t.flags & gst.interfaces.MIXER_TRACK_INPUT: + sys.stdout.write(t.label) + sys.stdout.write(': %d - %d' % (t.min_volume, t.max_volume)) + volumes = a.get_volume(t) + sys.stdout.write(': %r' % (volumes, )) + if t.props.num_channels > 0: + a.set_volume(t, volumes=volumes) + if t.flags & gst.interfaces.MIXER_TRACK_RECORD: + sys.stdout.write(' (selected)') + sys.stdout.write('\n') + diff --git a/examples/pipeline-tester b/examples/pipeline-tester new file mode 100755 index 0000000..0621097 --- /dev/null +++ b/examples/pipeline-tester @@ -0,0 +1,263 @@ +#!/usr/bin/env python +# +# gst-python +# Copyright (C) 2005 Andy Wingo +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + + +# A test more of gst-plugins than of gst-python. + + +import sys + +import pygtk +pygtk.require('2.0') +import gtk +import gtk.gdk +import pango +import gobject + +import pygst +pygst.require('0.10') +import gst + +import debugslider + + +data = (('Video capture via V4L', + 'v4lsrc name=source \n' + ' ! videorate \n' + ' ! ffmpegcolorspace ! autovideosink'), + ('Video capture via V4L, fixed frame rate', + 'v4lsrc name=source autoprobe=false autoprobe-fps=false \n' + ' ! video/x-raw-yuv,format=(fourcc)I420,framerate=(double)7.5 \n' + ' ! videorate \n' + ' ! ffmpegcolorspace \n' + ' ! autovideosink'), + ('Sound capture', + 'gconfaudiosrc\n' + ' ! audio/x-raw-int,rate=22050,depth=16,channels=1,width=16,signed=(boolean)TRUE,endianness=(int)BYTE_ORDER\n' + ' ! level message=true\n' + ' ! fakesink'), + ('Streaming Ogg/Theora+Vorbis playback, tee to disk', + 'gnomevfssrc location=http://gstreamer.freedesktop.org/media/small/cooldance.ogg \n' + ' ! tee name=tee \n' + ' tee. ! oggdemux name=demux \n' + ' demux. ! queue ! theoradec ! ffmpegcolorspace ! autovideosink \n' + ' demux. ! queue ! vorbisdec ! audioconvert ! autoaudiosink \n' + ' tee. ! queue ! filesink location=/tmp/cooldance.ogg'), + ('Video test, YUV format', + 'videotestsrc \n' + ' ! video/x-raw-yuv,format=(fourcc)I420 \n' + ' ! ffmpegcolorspace ! autovideosink'), + ('Video test, RGB format', + 'videotestsrc \n' + ' ! video/x-raw-rgb,red_mask=0xff00 \n' + ' ! ffmpegcolorspace \n' + ' ! autovideosink'), + ('Software scaling', + 'videotestsrc \n' + ' ! video/x-raw-rgb,height=200,width=320 \n' + ' ! videoscale method=2 \n' + ' ! ffmpegcolorspace ! autovideosink'), + ('Reencode Vorbis to mulaw, play', + 'filesrc location=/tmp/cooldance.ogg \n' + ' ! oggdemux \n' + ' ! vorbisdec ! audioconvert \n' + ' ! mulawenc ! mulawdec ! autoaudiosink'), + ('Capture DV via firewire, transcode into Ogg', + 'dv1394src \n' + ' ! dvdemux name=demux \n' + ' ! queue \n' + ' ! video/x-dv,systemstream=(boolean)false \n' + ' ! dvdec drop-factor=2 \n' + ' ! videorate \n' + ' ! videoscale \n' + ' ! video/x-raw-yuv,width=360,height=288 \n' + ' ! videoscale \n' + ' ! video/x-raw-yuv,width=240,height=192,framerate=10.0,format=(fourcc)YUY2 \n' + ' ! ffmpegcolorspace \n' + ' ! theoraenc \n' + ' ! oggmux name=mux \n' + ' ! filesink location=/tmp/dv.ogg \n' + ' \n' + ' demux. \n' + ' ! audio/x-raw-int \n' + ' ! queue \n' + ' ! audioconvert \n' + ' ! vorbisenc \n' + ' ! mux.')) + + +def escape(s, chars, escaper='\\'): + for c in chars: + s = s.replace(c, '%s%s' % (escaper, c)) + return s + + +def make_model(): + m = gtk.ListStore(str, str) + for pair in data: + i = m.append() + m.set_value(i, 0, pair[0]) + m.set_value(i, 1, pair[1]) + return m + + +class Window(gtk.Window): + def __init__(self): + gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) + self.playing = False + self.selected_pipe = None + self.pipeline = None + self.prepare_ui() + + def prepare_ui(self): + self.set_default_size(300,400) + self.set_title('GStreamer Pipeline Tester') + self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.connect('delete-event', lambda *x: gtk.main_quit()) + self.set_border_width(18) + b = gtk.VBox(False, 12) + b.show() + self.add(b) + l = gtk.Label() + l.set_markup('GStreamer Pipeline Tester') + l.show() + b.pack_start(l, False, False, 6) + l = gtk.Label('Choose a pipeline below to run.') + l.show() + b.pack_start(l, False, False, 0) + sw = gtk.ScrolledWindow() + sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER) + sw.set_shadow_type(gtk.SHADOW_IN) + sw.show() + b.pack_start(sw, True, True, 6) + tv = gtk.TreeView(make_model()) + tv.set_property('can-default', False) + r = gtk.CellRendererText() + r.set_property('xalign', 0.5) + c = gtk.TreeViewColumn('System', r, text=0) + tv.append_column(c) + tv.set_headers_visible(False) + tv.show() + sw.add(tv) + ds = debugslider.DebugSlider() + ds.show() + b.pack_start(ds, False, False, 0) + l = gtk.Label() + l.set_selectable(True) + l.show() + b.pack_start(l, False, False, 0) + bb = gtk.HButtonBox() + bb.set_layout(gtk.BUTTONBOX_SPREAD) + bb.show() + b.pack_start(bb, False, False, 0) + bu = gtk.Button(stock=gtk.STOCK_MEDIA_PLAY) + bu.set_property('can-default', True) + bu.set_focus_on_click(False) + bu.show() + bb.pack_start(bu, True, False, 0) + bu.set_property('has-default', True) + self.button = bu + + def on_changed(s): + m, i = s.get_selected() + if m: + self.selected_pipe = m.get_value(i, 1) + pasteable = escape(self.selected_pipe, '\n)(') + l.set_markup('%s' % pasteable) + else: + self.selected_pipe = None + l.set_markup('') + tv.get_selection().connect('changed', on_changed) + + tv.connect('row-activated', lambda *x: self.play_toggled()) + + bu.connect('clicked', lambda *x: self.play_toggled()) + + def error(self, message, secondary=None): + m = gtk.MessageDialog(self, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_ERROR, + gtk.BUTTONS_OK, + message) + if secondary: + m.format_secondary_text(secondary) + m.run() + m.destroy() + self.stop() + + def on_message(self, bus, message): + t = message.type + print message + if t == gst.MESSAGE_STATE_CHANGED: + pass + elif t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + self.error("%s" % err, debug) + elif t == gst.MESSAGE_EOS: + self.play_toggled() + else: + print '%s: %s:' % (message.src.get_path_string(), + message.type.value_nicks[1]) + if message.structure: + print ' %s' % message.structure.to_string() + else: + print ' (no structure)' + return True + + def play(self): + pipestr = self.selected_pipe + try: + self.set_sensitive(False) + pipeline = gst.parse_launch(pipestr) + self.set_sensitive(True) + except gobject.GError, e: + self.set_sensitive(True) + self.error('Could not create pipeline', str(e)) + return False + + bus = pipeline.get_bus() + bus.add_signal_watch() + watch_id = bus.connect('message', self.on_message) + self.pipeline = pipeline + self.watch_id = watch_id + pipeline.set_state(gst.STATE_PLAYING) + + def stop(self): + bus = self.pipeline.get_bus() + bus.disconnect(self.watch_id) + bus.remove_signal_watch() + self.pipeline.set_state(gst.STATE_NULL) + self.pipeline = None + del self.watch_id + + def play_toggled(self): + if self.playing: + self.stop() + self.button.set_label(gtk.STOCK_MEDIA_PLAY) + self.playing = False + else: + self.play() + self.playing = True + self.button.set_label(gtk.STOCK_MEDIA_STOP) + +if __name__ == '__main__': + w = Window() + w.show() + gtk.main() diff --git a/examples/play.py b/examples/play.py new file mode 100644 index 0000000..4045dff --- /dev/null +++ b/examples/play.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +import pygtk +pygtk.require('2.0') + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst +import gst.interfaces +import gtk +gtk.gdk.threads_init() + +class GstPlayer: + def __init__(self, videowidget): + self.playing = False + self.player = gst.element_factory_make("playbin", "player") + self.videowidget = videowidget + self.on_eos = False + + bus = self.player.get_bus() + bus.enable_sync_message_emission() + bus.add_signal_watch() + bus.connect('sync-message::element', self.on_sync_message) + bus.connect('message', self.on_message) + + def on_sync_message(self, bus, message): + if message.structure is None: + return + if message.structure.get_name() == 'prepare-xwindow-id': + # Sync with the X server before giving the X-id to the sink + gtk.gdk.threads_enter() + gtk.gdk.display_get_default().sync() + self.videowidget.set_sink(message.src) + message.src.set_property('force-aspect-ratio', True) + gtk.gdk.threads_leave() + + def on_message(self, bus, message): + t = message.type + if t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + print "Error: %s" % err, debug + if self.on_eos: + self.on_eos() + self.playing = False + elif t == gst.MESSAGE_EOS: + if self.on_eos: + self.on_eos() + self.playing = False + + def set_location(self, location): + self.player.set_property('uri', location) + + def query_position(self): + "Returns a (position, duration) tuple" + try: + position, format = self.player.query_position(gst.FORMAT_TIME) + except: + position = gst.CLOCK_TIME_NONE + + try: + duration, format = self.player.query_duration(gst.FORMAT_TIME) + except: + duration = gst.CLOCK_TIME_NONE + + return (position, duration) + + def seek(self, location): + """ + @param location: time to seek to, in nanoseconds + """ + gst.debug("seeking to %r" % location) + event = gst.event_new_seek(1.0, gst.FORMAT_TIME, + gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_ACCURATE, + gst.SEEK_TYPE_SET, location, + gst.SEEK_TYPE_NONE, 0) + + res = self.player.send_event(event) + if res: + gst.info("setting new stream time to 0") + self.player.set_new_stream_time(0L) + else: + gst.error("seek to %r failed" % location) + + def pause(self): + gst.info("pausing player") + self.player.set_state(gst.STATE_PAUSED) + self.playing = False + + def play(self): + gst.info("playing player") + self.player.set_state(gst.STATE_PLAYING) + self.playing = True + + def stop(self): + self.player.set_state(gst.STATE_NULL) + gst.info("stopped player") + + def get_state(self, timeout=1): + return self.player.get_state(timeout=timeout) + + def is_playing(self): + return self.playing + +class VideoWidget(gtk.DrawingArea): + def __init__(self): + gtk.DrawingArea.__init__(self) + self.imagesink = None + self.unset_flags(gtk.DOUBLE_BUFFERED) + + def do_expose_event(self, event): + if self.imagesink: + self.imagesink.expose() + return False + else: + return True + + def set_sink(self, sink): + assert self.window.xid + self.imagesink = sink + self.imagesink.set_xwindow_id(self.window.xid) + +class PlayerWindow(gtk.Window): + UPDATE_INTERVAL = 500 + def __init__(self): + gtk.Window.__init__(self) + self.set_default_size(410, 325) + + self.create_ui() + + self.player = GstPlayer(self.videowidget) + + def on_eos(): + self.player.seek(0L) + self.play_toggled() + self.player.on_eos = lambda *x: on_eos() + + self.update_id = -1 + self.changed_id = -1 + self.seek_timeout_id = -1 + + self.p_position = gst.CLOCK_TIME_NONE + self.p_duration = gst.CLOCK_TIME_NONE + + def on_delete_event(): + self.player.stop() + gtk.main_quit() + self.connect('delete-event', lambda *x: on_delete_event()) + + def load_file(self, location): + self.player.set_location(location) + + def create_ui(self): + vbox = gtk.VBox() + self.add(vbox) + + self.videowidget = VideoWidget() + vbox.pack_start(self.videowidget) + + hbox = gtk.HBox() + vbox.pack_start(hbox, fill=False, expand=False) + + self.pause_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, + gtk.ICON_SIZE_BUTTON) + self.pause_image.show() + self.play_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, + gtk.ICON_SIZE_BUTTON) + self.play_image.show() + self.button = button = gtk.Button() + button.add(self.play_image) + button.set_property('can-default', True) + button.set_focus_on_click(False) + button.show() + hbox.pack_start(button, False) + button.set_property('has-default', True) + button.connect('clicked', lambda *args: self.play_toggled()) + + self.adjustment = gtk.Adjustment(0.0, 0.00, 100.0, 0.1, 1.0, 1.0) + hscale = gtk.HScale(self.adjustment) + hscale.set_digits(2) + hscale.set_update_policy(gtk.UPDATE_CONTINUOUS) + hscale.connect('button-press-event', self.scale_button_press_cb) + hscale.connect('button-release-event', self.scale_button_release_cb) + hscale.connect('format-value', self.scale_format_value_cb) + hbox.pack_start(hscale) + self.hscale = hscale + + self.videowidget.connect_after('realize', + lambda *x: self.play_toggled()) + + def play_toggled(self): + self.button.remove(self.button.child) + if self.player.is_playing(): + self.player.pause() + self.button.add(self.play_image) + else: + self.player.play() + if self.update_id == -1: + self.update_id = gobject.timeout_add(self.UPDATE_INTERVAL, + self.update_scale_cb) + self.button.add(self.pause_image) + + def scale_format_value_cb(self, scale, value): + if self.p_duration == -1: + real = 0 + else: + real = value * self.p_duration / 100 + + seconds = real / gst.SECOND + + return "%02d:%02d" % (seconds / 60, seconds % 60) + + def scale_button_press_cb(self, widget, event): + # see seek.c:start_seek + gst.debug('starting seek') + + self.button.set_sensitive(False) + self.was_playing = self.player.is_playing() + if self.was_playing: + self.player.pause() + + # don't timeout-update position during seek + if self.update_id != -1: + gobject.source_remove(self.update_id) + self.update_id = -1 + + # make sure we get changed notifies + if self.changed_id == -1: + self.changed_id = self.hscale.connect('value-changed', + self.scale_value_changed_cb) + + def scale_value_changed_cb(self, scale): + # see seek.c:seek_cb + real = long(scale.get_value() * self.p_duration / 100) # in ns + gst.debug('value changed, perform seek to %r' % real) + self.player.seek(real) + # allow for a preroll + self.player.get_state(timeout=50*gst.MSECOND) # 50 ms + + def scale_button_release_cb(self, widget, event): + # see seek.cstop_seek + widget.disconnect(self.changed_id) + self.changed_id = -1 + + self.button.set_sensitive(True) + if self.seek_timeout_id != -1: + gobject.source_remove(self.seek_timeout_id) + self.seek_timeout_id = -1 + else: + gst.debug('released slider, setting back to playing') + if self.was_playing: + self.player.play() + + if self.update_id != -1: + self.error('Had a previous update timeout id') + else: + self.update_id = gobject.timeout_add(self.UPDATE_INTERVAL, + self.update_scale_cb) + + def update_scale_cb(self): + self.p_position, self.p_duration = self.player.query_position() + if self.p_position != gst.CLOCK_TIME_NONE: + value = self.p_position * 100.0 / self.p_duration + self.adjustment.set_value(value) + + return True + +def main(args): + def usage(): + sys.stderr.write("usage: %s URI-OF-MEDIA-FILE\n" % args[0]) + sys.exit(1) + + # Need to register our derived widget types for implicit event + # handlers to get called. + gobject.type_register(PlayerWindow) + gobject.type_register(VideoWidget) + + w = PlayerWindow() + + if len(args) != 2: + usage() + + if not gst.uri_is_valid(args[1]): + sys.stderr.write("Error: Invalid URI: %s\n" % args[1]) + sys.exit(1) + + w.load_file(args[1]) + w.show_all() + + gtk.main() + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/remuxer.py b/examples/remuxer.py new file mode 100644 index 0000000..1ed4ab7 --- /dev/null +++ b/examples/remuxer.py @@ -0,0 +1,840 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +import pygtk +pygtk.require('2.0') + +import sys + +import gobject +gobject.threads_init() + +import pygst +pygst.require('0.10') +import gst +import gst.interfaces +import gtk +gtk.gdk.threads_init() + +class GstPlayer: + def __init__(self, videowidget): + self.playing = False + self.player = gst.element_factory_make("playbin", "player") + self.videowidget = videowidget + + bus = self.player.get_bus() + bus.enable_sync_message_emission() + bus.add_signal_watch() + bus.connect('sync-message::element', self.on_sync_message) + bus.connect('message', self.on_message) + + def on_sync_message(self, bus, message): + if message.structure is None: + return + if message.structure.get_name() == 'prepare-xwindow-id': + # Sync with the X server before giving the X-id to the sink + gtk.gdk.threads_enter() + gtk.gdk.display_get_default().sync() + self.videowidget.set_sink(message.src) + message.src.set_property('force-aspect-ratio', True) + gtk.gdk.threads_leave() + + def on_message(self, bus, message): + t = message.type + if t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + print "Error: %s" % err, debug + if self.on_eos: + self.on_eos() + self.playing = False + elif t == gst.MESSAGE_EOS: + if self.on_eos: + self.on_eos() + self.playing = False + + def set_location(self, location): + self.player.set_state(gst.STATE_NULL) + self.player.set_property('uri', location) + + def get_location(self): + return self.player.get_property('uri') + + def query_position(self): + "Returns a (position, duration) tuple" + try: + position, format = self.player.query_position(gst.FORMAT_TIME) + except: + position = gst.CLOCK_TIME_NONE + + try: + duration, format = self.player.query_duration(gst.FORMAT_TIME) + except: + duration = gst.CLOCK_TIME_NONE + + return (position, duration) + + def seek(self, location): + """ + @param location: time to seek to, in nanoseconds + """ + gst.debug("seeking to %r" % location) + event = gst.event_new_seek(1.0, gst.FORMAT_TIME, + gst.SEEK_FLAG_FLUSH, + gst.SEEK_TYPE_SET, location, + gst.SEEK_TYPE_NONE, 0) + + res = self.player.send_event(event) + if res: + gst.info("setting new stream time to 0") + self.player.set_new_stream_time(0L) + else: + gst.error("seek to %r failed" % location) + + def pause(self): + gst.info("pausing player") + self.player.set_state(gst.STATE_PAUSED) + self.playing = False + + def play(self): + gst.info("playing player") + self.player.set_state(gst.STATE_PLAYING) + self.playing = True + + def stop(self): + self.player.set_state(gst.STATE_NULL) + gst.info("stopped player") + + def get_state(self, timeout=1): + return self.player.get_state(timeout=timeout) + + def is_playing(self): + return self.playing + +class VideoWidget(gtk.DrawingArea): + def __init__(self): + gtk.DrawingArea.__init__(self) + self.imagesink = None + self.unset_flags(gtk.DOUBLE_BUFFERED) + + def do_expose_event(self, event): + if self.imagesink: + self.imagesink.expose() + return False + else: + return True + + def set_sink(self, sink): + assert self.window.xid + self.imagesink = sink + self.imagesink.set_xwindow_id(self.window.xid) + +class TimeControl(gtk.HBox): + # all labels same size + sizegroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + __gproperties__ = {'time': (gobject.TYPE_UINT64, 'Time', 'Time', + # not actually usable: see #335854 + # kept for .notify() usage + 0L, (1<<63)-1, 0L, + gobject.PARAM_READABLE)} + + def __init__(self, window, label): + gtk.HBox.__init__(self) + self.pwindow = window + self.label = label + self.create_ui() + + def get_property(self, param, pspec): + if param == 'time': + return self.get_time() + else: + assert param in self.__gproperties__, \ + 'Unknown property: %s' % param + + def create_ui(self): + label = gtk.Label(self.label + ": ") + label.show() + a = gtk.Alignment(1.0, 0.5) + a.add(label) + a.set_padding(0, 0, 12, 0) + a.show() + self.sizegroup.add_widget(a) + self.pack_start(a, True, False, 0) + + self.minutes = minutes = gtk.Entry(5) + minutes.set_width_chars(5) + minutes.set_alignment(1.0) + minutes.connect('changed', lambda *x: self.notify('time')) + minutes.connect_after('activate', lambda *x: self.activated()) + label2 = gtk.Label(":") + self.seconds = seconds = gtk.Entry(2) + seconds.set_width_chars(2) + seconds.set_alignment(1.0) + seconds.connect('changed', lambda *x: self.notify('time')) + seconds.connect_after('activate', lambda *x: self.activated()) + label3 = gtk.Label(".") + self.milliseconds = milliseconds = gtk.Entry(3) + milliseconds.set_width_chars(3) + milliseconds.set_alignment(0.0) + milliseconds.connect('changed', lambda *x: self.notify('time')) + milliseconds.connect_after('activate', lambda *x: self.activated()) + set = gtk.Button('Set') + goto = gtk.Button('Go') + goto.set_property('image', + gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, + gtk.ICON_SIZE_BUTTON)) + for w in minutes, label2, seconds, label3, milliseconds: + w.show() + self.pack_start(w, False) + set.show() + self.pack_start(set, False, False, 6) + goto.show() + self.pack_start(goto, False, False, 0) + set.connect('clicked', lambda *x: self.set_now()) + goto.connect('clicked', lambda *x: self.activated()) + pad = gtk.Label("") + pad.show() + self.pack_start(pad, True, False, 0) + + def get_time(self): + time = 0 + for w, multiplier in ((self.minutes, gst.SECOND*60), + (self.seconds, gst.SECOND), + (self.milliseconds, gst.MSECOND)): + text = w.get_text() + try: + val = int(text) + except ValueError: + val = 0 + w.set_text(val and str(val) or '0') + time += val * multiplier + return time + + def set_time(self, time): + if time == gst.CLOCK_TIME_NONE: + print "Can't set '%s' (invalid time)" % self.label + return + self.freeze_notify() + for w, multiplier in ((self.minutes, gst.SECOND*60), + (self.seconds, gst.SECOND), + (self.milliseconds, gst.MSECOND)): + val = time // multiplier + w.set_text(str(val)) + time -= val * multiplier + self.thaw_notify() + + def set_now(self): + time, dur = self.pwindow.player.query_position() + self.set_time(time) + + def activated(self): + time = self.get_time() + if self.pwindow.player.is_playing(): + self.pwindow.play_toggled() + self.pwindow.player.seek(time) + self.pwindow.player.get_state(timeout=gst.MSECOND * 200) + +class ProgressDialog(gtk.Dialog): + def __init__(self, title, description, task, parent, flags, buttons): + gtk.Dialog.__init__(self, title, parent, flags, buttons) + self._create_ui(title, description, task) + + def _create_ui(self, title, description, task): + self.set_border_width(6) + self.set_resizable(False) + self.set_has_separator(False) + + vbox = gtk.VBox() + vbox.set_border_width(6) + vbox.show() + self.vbox.pack_start(vbox, False) + + label = gtk.Label('%s' % title) + label.set_use_markup(True) + label.set_alignment(0.0, 0.0) + label.show() + vbox.pack_start(label, False) + + label = gtk.Label(description) + label.set_use_markup(True) + label.set_alignment(0.0, 0.0) + label.set_line_wrap(True) + label.set_padding(0, 12) + label.show() + vbox.pack_start(label, False) + + self.progress = progress = gtk.ProgressBar() + progress.show() + vbox.pack_start(progress, False) + + self.progresstext = label = gtk.Label('') + label.set_line_wrap(True) + label.set_use_markup(True) + label.set_alignment(0.0, 0.0) + label.show() + vbox.pack_start(label) + self.set_task(task) + + def set_task(self, task): + self.progresstext.set_markup('%s' % task) + +UNKNOWN = 0 +SUCCESS = 1 +FAILURE = 2 +CANCELLED = 3 + +class RemuxProgressDialog(ProgressDialog): + def __init__(self, parent, start, stop, fromname, toname): + ProgressDialog.__init__(self, + "Writing to disk", + ('Writing the selected segment of %s ' + 'to %s. This may take some time.' + % (fromname, toname)), + 'Starting media pipeline', + parent, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + (gtk.STOCK_CANCEL, CANCELLED, + gtk.STOCK_CLOSE, SUCCESS)) + self.start = start + self.stop = stop + self.update_position(start) + self.set_completed(False) + + def update_position(self, pos): + pos = min(max(pos, self.start), self.stop) + remaining = self.stop - pos + minutes = remaining // (gst.SECOND * 60) + seconds = (remaining - minutes * gst.SECOND * 60) // gst.SECOND + self.progress.set_text('%d:%02d of video remaining' % (minutes, seconds)) + self.progress.set_fraction(1.0 - float(remaining) / (self.stop - self.start)) + + def set_completed(self, completed): + self.set_response_sensitive(CANCELLED, not completed) + self.set_response_sensitive(SUCCESS, completed) + +def set_connection_blocked_async_marshalled(pads, proc, *args, **kwargs): + def clear_list(l): + while l: + l.pop() + + to_block = list(pads) + to_relink = [(x, x.get_peer()) for x in pads] + + def on_pad_blocked_sync(pad, is_blocked): + if pad not in to_block: + # can happen after the seek and before unblocking -- racy, + # but no prob, bob. + return + to_block.remove(pad) + if not to_block: + # marshal to main thread + gobject.idle_add(on_pads_blocked) + + def on_pads_blocked(): + for src, sink in to_relink: + src.link(sink) + proc(*args, **kwargs) + for src, sink in to_relink: + src.set_blocked_async(False, lambda *x: None) + clear_list(to_relink) + + for src, sink in to_relink: + src.unlink(sink) + src.set_blocked_async(True, on_pad_blocked_sync) + +class Remuxer(gst.Pipeline): + + __gsignals__ = {'done': (gobject.SIGNAL_RUN_LAST, None, (int,))} + + def __init__(self, fromuri, touri, start, stop): + # HACK: should do Pipeline.__init__, but that doesn't do what we + # want; there's a bug open aboooot that + self.__gobject_init__() + + assert start >= 0 + assert stop > start + + self.fromuri = fromuri + self.touri = None + self.start_time = start + self.stop_time = stop + + self.src = self.remuxbin = self.sink = None + self.resolution = UNKNOWN + + self.window = None + self.pdialog = None + + self._query_id = -1 + + def do_setup_pipeline(self): + self.src = gst.element_make_from_uri(gst.URI_SRC, self.fromuri) + self.remuxbin = RemuxBin(self.start_time, self.stop_time) + self.sink = gst.element_make_from_uri(gst.URI_SINK, self.touri) + self.resolution = UNKNOWN + + if gobject.signal_lookup('allow-overwrite', self.sink.__class__): + self.sink.connect('allow-overwrite', lambda *x: True) + + self.add(self.src, self.remuxbin, self.sink) + + self.src.link(self.remuxbin) + self.remuxbin.link(self.sink) + + def do_get_touri(self): + chooser = gtk.FileChooserDialog('Save as...', + self.window, + action=gtk.FILE_CHOOSER_ACTION_SAVE, + buttons=(gtk.STOCK_CANCEL, + CANCELLED, + gtk.STOCK_SAVE, + SUCCESS)) + chooser.set_uri(self.fromuri) # to select the folder + chooser.unselect_all() + chooser.set_do_overwrite_confirmation(True) + name = self.fromuri.split('/')[-1][:-4] + '-remuxed.ogg' + chooser.set_current_name(name) + resp = chooser.run() + uri = chooser.get_uri() + chooser.destroy() + + if resp == SUCCESS: + return uri + else: + return None + + def _start_queries(self): + def do_query(): + try: + # HACK: self.remuxbin.query() should do the same + # (requires implementing a vmethod, dunno how to do that + # although i think it's possible) + # HACK: why does self.query_position(..) not give useful + # answers? + pad = self.remuxbin.get_pad('src') + pos, duration = pad.query_position(gst.FORMAT_TIME) + if pos != gst.CLOCK_TIME_NONE: + self.pdialog.update_position(pos) + except: + # print 'query failed' + pass + return True + if self._query_id == -1: + self._query_id = gobject.timeout_add(100, # 10 Hz + do_query) + + def _stop_queries(self): + if self._query_id != -1: + gobject.source_remove(self._query_id) + self._query_id = -1 + + def _bus_watch(self, bus, message): + if message.type == gst.MESSAGE_ERROR: + print 'error', message + self._stop_queries() + m = gtk.MessageDialog(self.window, + gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_ERROR, + gtk.BUTTONS_CLOSE, + "Error processing file") + gerror, debug = message.parse_error() + txt = ('There was an error processing your file: %s\n\n' + 'Debug information:\n%s' % (gerror, debug)) + m.format_secondary_text(txt) + m.run() + m.destroy() + self.response(FAILURE) + elif message.type == gst.MESSAGE_WARNING: + print 'warning', message + elif message.type == gst.MESSAGE_EOS: + # print 'eos, woot', message.src + name = self.touri + if name.startswith('file://'): + name = name[7:] + self.pdialog.set_task('Finished writing %s' % name) + self.pdialog.update_position(self.stop_time) + self._stop_queries() + self.pdialog.set_completed(True) + elif message.type == gst.MESSAGE_STATE_CHANGED: + if message.src == self: + old, new, pending = message.parse_state_changed() + if ((old, new, pending) == + (gst.STATE_READY, gst.STATE_PAUSED, + gst.STATE_VOID_PENDING)): + self.pdialog.set_task('Processing file') + self.pdialog.update_position(self.start_time) + self._start_queries() + self.set_state(gst.STATE_PLAYING) + + def response(self, response): + assert self.resolution == UNKNOWN + self.resolution = response + self.set_state(gst.STATE_NULL) + self.pdialog.destroy() + self.pdialog = None + self.window.set_sensitive(True) + self.emit('done', response) + + def start(self, main_window): + self.window = main_window + self.touri = self.do_get_touri() + if not self.touri: + return False + self.do_setup_pipeline() + bus = self.get_bus() + bus.add_signal_watch() + bus.connect('message', self._bus_watch) + if self.window: + # can be None if we are debugging... + self.window.set_sensitive(False) + fromname = self.fromuri.split('/')[-1] + toname = self.touri.split('/')[-1] + self.pdialog = RemuxProgressDialog(main_window, self.start_time, + self.stop_time, fromname, toname) + self.pdialog.show() + self.pdialog.connect('response', lambda w, r: self.response(r)) + + self.set_state(gst.STATE_PAUSED) + return True + + def run(self, main_window): + if self.start(main_window): + loop = gobject.MainLoop() + self.connect('done', lambda *x: gobject.idle_add(loop.quit)) + loop.run() + else: + self.resolution = CANCELLED + return self.resolution + +class RemuxBin(gst.Bin): + def __init__(self, start_time, stop_time): + self.__gobject_init__() + + self.parsefactories = self._find_parsers() + self.parsers = [] + + self.demux = gst.element_factory_make('oggdemux') + self.mux = gst.element_factory_make('oggmux') + + self.add(self.demux, self.mux) + + self.add_pad(gst.GhostPad('sink', self.demux.get_pad('sink'))) + self.add_pad(gst.GhostPad('src', self.mux.get_pad('src'))) + + self.demux.connect('pad-added', self._new_demuxed_pad) + self.demux.connect('no-more-pads', self._no_more_pads) + + self.start_time = start_time + self.stop_time = stop_time + + def _find_parsers(self): + registry = gst.registry_get_default() + ret = {} + for f in registry.get_feature_list(gst.ElementFactory): + if f.get_klass().find('Parser') >= 0: + for t in f.get_static_pad_templates(): + if t.direction == gst.PAD_SINK: + for s in t.get_caps(): + ret[s.get_name()] = f.get_name() + break + return ret + + def _new_demuxed_pad(self, element, pad): + format = pad.get_caps()[0].get_name() + + if format not in self.parsefactories: + self.async_error("Unsupported media type: %s", format) + return + + queue = gst.element_factory_make('queue', None); + queue.set_property('max-size-buffers', 1000) + parser = gst.element_factory_make(self.parsefactories[format]) + self.add(queue) + self.add(parser) + queue.set_state(gst.STATE_PAUSED) + parser.set_state(gst.STATE_PAUSED) + pad.link(queue.get_compatible_pad(pad)) + queue.link(parser) + parser.link(self.mux) + self.parsers.append(parser) + + def _do_seek(self): + flags = gst.SEEK_FLAG_FLUSH + # HACK: self.seek should work, should try that at some point + return self.demux.seek(1.0, gst.FORMAT_TIME, flags, + gst.SEEK_TYPE_SET, self.start_time, + gst.SEEK_TYPE_SET, self.stop_time) + + def _no_more_pads(self, element): + pads = [x.get_pad('src') for x in self.parsers] + set_connection_blocked_async_marshalled(pads, + self._do_seek) + + +class PlayerWindow(gtk.Window): + UPDATE_INTERVAL = 500 + def __init__(self): + gtk.Window.__init__(self) + self.set_default_size(600, 425) + + self.create_ui() + + self.player = GstPlayer(self.videowidget) + + def on_eos(): + self.player.seek(0L) + self.play_toggled() + self.player.on_eos = lambda *x: on_eos() + + self.update_id = -1 + self.changed_id = -1 + self.seek_timeout_id = -1 + + self.p_position = gst.CLOCK_TIME_NONE + self.p_duration = gst.CLOCK_TIME_NONE + + def on_delete_event(): + self.player.stop() + gtk.main_quit() + self.connect('delete-event', lambda *x: on_delete_event()) + + def load_file(self, location): + filename = location.split('/')[-1] + self.set_title('%s munger' % filename) + self.player.set_location(location) + if self.videowidget.flags() & gtk.REALIZED: + self.play_toggled() + else: + self.videowidget.connect_after('realize', + lambda *x: self.play_toggled()) + + def create_ui(self): + vbox = gtk.VBox() + vbox.show() + self.add(vbox) + + self.videowidget = VideoWidget() + self.videowidget.show() + vbox.pack_start(self.videowidget) + + hbox = gtk.HBox() + hbox.show() + vbox.pack_start(hbox, fill=False, expand=False) + + self.adjustment = gtk.Adjustment(0.0, 0.00, 100.0, 0.1, 1.0, 1.0) + hscale = gtk.HScale(self.adjustment) + hscale.set_digits(2) + hscale.set_update_policy(gtk.UPDATE_CONTINUOUS) + hscale.connect('button-press-event', self.scale_button_press_cb) + hscale.connect('button-release-event', self.scale_button_release_cb) + hscale.connect('format-value', self.scale_format_value_cb) + hbox.pack_start(hscale) + hscale.show() + self.hscale = hscale + + table = gtk.Table(2,3) + table.show() + vbox.pack_start(table, fill=False, expand=False, padding=6) + + self.button = button = gtk.Button(stock=gtk.STOCK_MEDIA_PLAY) + button.set_property('can-default', True) + button.set_focus_on_click(False) + button.show() + + # problem: play and paused are of different widths and cause the + # window to re-layout + # "solution": add more buttons to a vbox so that the horizontal + # width is enough + bvbox = gtk.VBox() + bvbox.add(button) + bvbox.add(gtk.Button(stock=gtk.STOCK_MEDIA_PLAY)) + bvbox.add(gtk.Button(stock=gtk.STOCK_MEDIA_PAUSE)) + sizegroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + for kid in bvbox.get_children(): + sizegroup.add_widget(kid) + bvbox.show() + table.attach(bvbox, 0, 1, 0, 2, gtk.FILL, gtk.FILL) + + # can't set this property before the button has a window + button.set_property('has-default', True) + button.connect('clicked', lambda *args: self.play_toggled()) + + self.cutin = cut = TimeControl(self, "Cut in time") + cut.show() + table.attach(cut, 1, 2, 0, 1, gtk.EXPAND, 0, 12) + + self.cutout = cut = TimeControl(self, "Cut out time") + cut.show() + table.attach(cut, 1, 2, 1, 2, gtk.EXPAND, 0, 12) + + button = gtk.Button("_Open other movie...") + button.show() + button.connect('clicked', lambda *x: self.do_choose_file()) + table.attach(button, 2, 3, 0, 1, gtk.FILL, gtk.FILL) + + button = gtk.Button("_Write to disk") + button.set_property('image', + gtk.image_new_from_stock(gtk.STOCK_SAVE_AS, + gtk.ICON_SIZE_BUTTON)) + button.connect('clicked', lambda *x: self.do_remux()) + button.show() + table.attach(button, 2, 3, 1, 2, gtk.FILL, gtk.FILL) + + #self.cutin.connect('notify::time', lambda *x: self.check_cutout()) + #self.cutout.connect('notify::time', lambda *x: self.check_cutin()) + + def do_remux(self): + if self.player.is_playing(): + self.play_toggled() + in_uri = self.player.get_location() + out_uri = in_uri[:-4] + '-remuxed.ogg' + r = Remuxer(in_uri, out_uri, + self.cutin.get_time(), self.cutout.get_time()) + r.run(self) + + def do_choose_file(self): + if self.player.is_playing(): + self.play_toggled() + chooser = gtk.FileChooserDialog('Choose a movie to cut cut cut', + self, + buttons=(gtk.STOCK_CANCEL, + CANCELLED, + gtk.STOCK_OPEN, + SUCCESS)) + chooser.set_local_only(False) + chooser.set_select_multiple(False) + f = gtk.FileFilter() + f.set_name("All files") + f.add_pattern("*") + chooser.add_filter(f) + f = gtk.FileFilter() + f.set_name("Ogg files") + f.add_pattern("*.og[gvax]") # as long as this is the only thing we + # support... + chooser.add_filter(f) + chooser.set_filter(f) + + prev = self.player.get_location() + if prev: + chooser.set_uri(prev) + + resp = chooser.run() + uri = chooser.get_uri() + chooser.destroy() + + if resp == SUCCESS and uri != None: + self.load_file(uri) + return True + else: + return False + + def check_cutout(self): + if self.cutout.get_time() <= self.cutin.get_time(): + pos, dur = self.player.query_position() + self.cutout.set_time(dur) + + def check_cutin(self): + if self.cutin.get_time() >= self.cutout.get_time(): + self.cutin.set_time(0) + + def play_toggled(self): + if self.player.is_playing(): + self.player.pause() + self.button.set_label(gtk.STOCK_MEDIA_PLAY) + else: + self.player.play() + if self.update_id == -1: + self.update_id = gobject.timeout_add(self.UPDATE_INTERVAL, + self.update_scale_cb) + self.button.set_label(gtk.STOCK_MEDIA_PAUSE) + + def scale_format_value_cb(self, scale, value): + if self.p_duration == -1: + real = 0 + else: + real = value * self.p_duration / 100 + + seconds = real / gst.SECOND + + return "%02d:%02d" % (seconds / 60, seconds % 60) + + def scale_button_press_cb(self, widget, event): + # see seek.c:start_seek + gst.debug('starting seek') + + self.button.set_sensitive(False) + self.was_playing = self.player.is_playing() + if self.was_playing: + self.player.pause() + + # don't timeout-update position during seek + if self.update_id != -1: + gobject.source_remove(self.update_id) + self.update_id = -1 + + # make sure we get changed notifies + if self.changed_id == -1: + self.changed_id = self.hscale.connect('value-changed', + self.scale_value_changed_cb) + + def scale_value_changed_cb(self, scale): + # see seek.c:seek_cb + real = long(scale.get_value() * self.p_duration / 100) # in ns + gst.debug('value changed, perform seek to %r' % real) + self.player.seek(real) + # allow for a preroll + self.player.get_state(timeout=50*gst.MSECOND) # 50 ms + + def scale_button_release_cb(self, widget, event): + # see seek.cstop_seek + widget.disconnect(self.changed_id) + self.changed_id = -1 + + self.button.set_sensitive(True) + if self.seek_timeout_id != -1: + gobject.source_remove(self.seek_timeout_id) + self.seek_timeout_id = -1 + else: + gst.debug('released slider, setting back to playing') + if self.was_playing: + self.player.play() + + if self.update_id != -1: + self.error('Had a previous update timeout id') + else: + self.update_id = gobject.timeout_add(self.UPDATE_INTERVAL, + self.update_scale_cb) + + def update_scale_cb(self): + had_duration = self.p_duration != gst.CLOCK_TIME_NONE + self.p_position, self.p_duration = self.player.query_position() + if self.p_position != gst.CLOCK_TIME_NONE: + value = self.p_position * 100.0 / self.p_duration + self.adjustment.set_value(value) + if not had_duration: + self.cutin.set_time(0) + return True + +def main(args): + def usage(): + sys.stderr.write("usage: %s [URI-OF-MEDIA-FILE]\n" % args[0]) + return 1 + + w = PlayerWindow() + w.show() + + if len(args) == 1: + if not w.do_choose_file(): + return 1 + elif len(args) == 2: + if not gst.uri_is_valid(args[1]): + sys.stderr.write("Error: Invalid URI: %s\n" % args[1]) + return 1 + w.load_file(args[1]) + else: + return usage() + + gtk.main() + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/examples/sinkelement.py b/examples/sinkelement.py new file mode 100644 index 0000000..a596601 --- /dev/null +++ b/examples/sinkelement.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# sinkelement.py +# (c) 2005 Edward Hervey +# Licensed under LGPL +# +# Small test application to show how to write a sink element +# in 20 lines in python +# +# Run this script with GST_DEBUG=python:5 to see the debug +# messages + +import pygst +pygst.require('0.10') +import gst +import gobject +gobject.threads_init () + +# +# Simple Sink element created entirely in python +# + +class MySink(gst.Element): + + _sinkpadtemplate = gst.PadTemplate ("sinkpadtemplate", + gst.PAD_SINK, + gst.PAD_ALWAYS, + gst.caps_new_any()) + + def __init__(self): + gst.Element.__init__(self) + gst.info('creating sinkpad') + self.sinkpad = gst.Pad(self._sinkpadtemplate, "sink") + gst.info('adding sinkpad to self') + self.add_pad(self.sinkpad) + + gst.info('setting chain/event functions') + self.sinkpad.set_chain_function(self.chainfunc) + self.sinkpad.set_event_function(self.eventfunc) + + def chainfunc(self, pad, buffer): + self.info("%s timestamp(buffer):%d" % (pad, buffer.timestamp)) + return gst.FLOW_OK + + def eventfunc(self, pad, event): + self.info("%s event:%r" % (pad, event.type)) + return True + +gobject.type_register(MySink) + +# +# Code to test the MySink class +# + +src = gst.element_factory_make('fakesrc') +gst.info('About to create MySink') +sink = MySink() + +pipeline = gst.Pipeline() +pipeline.add(src, sink) + +src.link(sink) + +pipeline.set_state(gst.STATE_PLAYING) + +gobject.MainLoop().run() diff --git a/examples/vumeter.py b/examples/vumeter.py new file mode 100755 index 0000000..5e1a590 --- /dev/null +++ b/examples/vumeter.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# gst-python +# Copyright (C) 2005 Andy Wingo +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + + +# A test more of gst-plugins than of gst-python. + + +import pygtk +pygtk.require('2.0') +import gtk +import gobject + +import pygst +pygst.require('0.10') +import gst + +import fvumeter + + +def clamp(x, min, max): + if x < min: + return min + elif x > max: + return max + return x + + +class Window(gtk.Dialog): + def __init__(self): + gtk.Dialog.__init__(self, 'Volume Level') + self.prepare_ui() + + def prepare_ui(self): + self.set_default_size(200,60) + self.set_title('Volume Level') + self.connect('delete-event', lambda *x: gtk.main_quit()) + self.vus = [] + self.vus.append(fvumeter.FVUMeter()) + self.vus.append(fvumeter.FVUMeter()) + self.vbox.add(self.vus[0]) + self.vbox.add(self.vus[1]) + self.vus[0].show() + self.vus[1].show() + + def error(self, message, secondary=None): + m = gtk.MessageDialog(self, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_ERROR, + gtk.BUTTONS_OK, + message) + if secondary: + m.format_secondary_text(secondary) + m.run() + + def on_message(self, bus, message): + if message.structure.get_name() == 'level': + s = message.structure + for i in range(0, len(s['peak'])): + self.vus[i].freeze_notify() + decay = clamp(s['decay'][i], -90.0, 0.0) + peak = clamp(s['peak'][i], -90.0, 0.0) + if peak > decay: + print "ERROR: peak bigger than decay!" + + self.vus[i].set_property('decay', decay) + self.vus[i].set_property('peak', peak) + return True + + def run(self): + try: + self.set_sensitive(False) + s = 'alsasrc ! level message=true ! fakesink' + pipeline = gst.parse_launch(s) + self.set_sensitive(True) + pipeline.get_bus().add_signal_watch() + i = pipeline.get_bus().connect('message::element', self.on_message) + pipeline.set_state(gst.STATE_PLAYING) + gtk.Dialog.run(self) + pipeline.get_bus().disconnect(i) + pipeline.get_bus().remove_signal_watch() + pipeline.set_state(gst.STATE_NULL) + except gobject.GError, e: + self.set_sensitive(True) + self.error('Could not create pipeline', e.__str__) + +if __name__ == '__main__': + w = Window() + w.show_all() + w.run() diff --git a/gst-python.doap b/gst-python.doap new file mode 100644 index 0000000..5482332 --- /dev/null +++ b/gst-python.doap @@ -0,0 +1,270 @@ + + + GStreamer Python Bindings + gst-python + + 1999-10-31 + +Python bindings for GStreamer + + +GStreamer Python Bindings is a set of Python bindings for GStreamer, using +the same system as PyGTK. +It also comes with a number of examples. + + + + + + Python + + + + + + + + + + + + + 0.10.22 + 0.10 + Ninety Tons of Thunder + 2011-10-29 + + + + + + + + 0.10.21 + 0.10 + he used to be an ironhorse, twenty years ago + 2011-01-20 + + + + + + + + 0.10.19 + 0.10 + Insert Casablanca quote here + 2010-07-15 + + + + + + + + 0.10.18 + 0.10 + A pigeon carrying a 500ton block + 2010-02-11 + + + + + + + + 0.10.17 + 0.10 + Shiny new button + 2009-10-05 + + + + + + + + 0.10.16 + 0.10 + Distorted memory + 2009-08-04 + + + + + + + + 0.10.15 + 0.10 + We built a wall + 2009-05-10 + + + + + + + + 0.10.14 + 0.10 + You Better Think + 2009-01-19 + + + + + + + + 0.10.13 + 0.10 + Feel The Sun Rise + 2008-10-02 + + + + + + + + 0.10.12 + 0.10 + A Wild Finish + 2008-06-18 + + + + + + + + 0.10.11 + 0.10 + What I got + 2008-03-21 + + + + + + + + 0.10.10 + 0.10 + Destination Overtime + 2008-01-28 + + + + + + + + 0.10.9 + 0.10 + I've heard a lot of stories in my time + 2007-11-28 + + + + + + + + 0.10.6 + 0.10 + You're not very subtle, but you are effective + 2006-12-04 + + + + + + + + 0.10.5 + 0.10 + My Little Poney wants some Funk + 2006-07-20 + + + + + + + + 0.10.4 + 0.10 + Alegre + 2006-04-28 + + + + + + + + 0.10.3 + 0.10 + Maybe not today. Maybe not tomorrow, but soon... + 2006-03-21 + + + + + + 0.10.2 + 0.10 + And if the devil is six + 2006-01-16 + + + + + + 0.10.1 + 0.10 + Krisimas Yakanaka + 2005-12-23 + + + + + + 0.10.0 + 0.10 + Reblochon + 2005-12-05 + + + + + + 0.8.4 + 0.8 + 64 bit is enough for everyone + 2006-03-08 + + + + + + + + Wim Taymans + 0d93fde052812d51a05fd86de9bdbf674423daa2 + + + + + Edward Hervey + + + + diff --git a/gst-python.spec b/gst-python.spec new file mode 100644 index 0000000..3c425e5 --- /dev/null +++ b/gst-python.spec @@ -0,0 +1,100 @@ +%define majorminor 0.10 +%define gstreamer gstreamer +%define _pygtk 2.6.3 +%define _gst 0.10.20 + +Name: %{gstreamer}-python +Version: 0.10.22 +Release: 1 +Summary: Python bindings for GStreamer. + +Group: Development/Languages +License: LGPL +URL: http://gstreamer.freedesktop.org/ +Source: http://gstreamer.freedesktop.org/src/gst-python/gst-python-%{version}.tar.gz + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +Requires: python >= 2 +Requires: gnome-python2 +Requires: pygtk2 >= %_pygtk +Requires: %{gstreamer} +Requires: %{gstreamer}-plugins-base + +BuildRequires: python >= 2 +BuildRequires: python-devel >= 2 +BuildRequires: pygtk2-devel >= %_pygtk +BuildRequires: xmlto +BuildRequires: links + +BuildRequires: %{gstreamer}-devel >= %_gst +BuildRequires: %{gstreamer}-plugins-base-devel >= %_gst + +# sigh, libtool +BuildRequires: gcc-c++ + +%description +This module contains a wrapper that allows GStreamer applications +to be written in Python. + +%prep +%setup -q -n gst-python-%{version} + +%build +%configure +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT + +%makeinstall +find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';' + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%doc AUTHORS COPYING ChangeLog NEWS README gst-python.doap +%dir %{_libdir}/python?.?/site-packages/gst-%{majorminor} +%{_libdir}/python?.?/site-packages/pygst.pth +%{_libdir}/python?.?/site-packages/pygst.py +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/__init__.py* +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/extend +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/_gst.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/interfaces.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/pbutils.so +%{_libdir}/gstreamer-%{majorminor}/libgstpython.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/audio.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/tag.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/video.so +%{_libdir}/python?.?/site-packages/gstoption.so + + +%{_datadir}/gst-python +%{_libdir}/pkgconfig/gst-python-%{majorminor}.pc + +%changelog +* Fri Dec 15 2006 Thomas Vander Stichele +- add doap file + +* Tue Dec 20 2005 Thomas Vander Stichele +- updated spec file + +* Thu Oct 06 2005 Edward Hervey < edward at fluendo dot com > +- Updated spec file for 0.9 + +* Fri Nov 05 2004 Christian Schaller < uraeus at gnome org > +- Remerged spec file with cvs version + +* Tue Oct 12 2004 Thomas Vander Stichele +- 0.7.93-0.fdr.1: new upstream release + +* Mon Jun 21 2004 Thomas Vander Stichele +- 0.7.92-0.fdr.1: new upstream release + +* Wed Mar 31 2004 Thomas Vander Stichele +- 0.7.91-0.fdr.1: new upstream release + +* Tue Sep 02 2003 Thomas Vander Stichele +- 0.1.0-0.fdr.1: first fedora release diff --git a/gst-python.spec.in b/gst-python.spec.in new file mode 100644 index 0000000..6989d65 --- /dev/null +++ b/gst-python.spec.in @@ -0,0 +1,100 @@ +%define majorminor @GST_MAJORMINOR@ +%define gstreamer gstreamer +%define _pygtk @PYGTK_REQ@ +%define _gst @GST_REQ@ + +Name: %{gstreamer}-python +Version: @VERSION@ +Release: 1 +Summary: Python bindings for GStreamer. + +Group: Development/Languages +License: LGPL +URL: http://gstreamer.freedesktop.org/ +Source: http://gstreamer.freedesktop.org/src/gst-python/gst-python-%{version}.tar.gz + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +Requires: python >= 2 +Requires: gnome-python2 +Requires: pygtk2 >= %_pygtk +Requires: %{gstreamer} +Requires: %{gstreamer}-plugins-base + +BuildRequires: python >= 2 +BuildRequires: python-devel >= 2 +BuildRequires: pygtk2-devel >= %_pygtk +BuildRequires: xmlto +BuildRequires: links + +BuildRequires: %{gstreamer}-devel >= %_gst +BuildRequires: %{gstreamer}-plugins-base-devel >= %_gst + +# sigh, libtool +BuildRequires: gcc-c++ + +%description +This module contains a wrapper that allows GStreamer applications +to be written in Python. + +%prep +%setup -q -n gst-python-%{version} + +%build +%configure +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT + +%makeinstall +find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';' + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%doc AUTHORS COPYING ChangeLog NEWS README gst-python.doap +%dir %{_libdir}/python?.?/site-packages/gst-%{majorminor} +%{_libdir}/python?.?/site-packages/pygst.pth +%{_libdir}/python?.?/site-packages/pygst.py +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/__init__.py* +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/extend +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/_gst.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/interfaces.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/pbutils.so +%{_libdir}/gstreamer-%{majorminor}/libgstpython.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/audio.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/tag.so +%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/video.so +%{_libdir}/python?.?/site-packages/gstoption.so + + +%{_datadir}/gst-python +%{_libdir}/pkgconfig/gst-python-%{majorminor}.pc + +%changelog +* Fri Dec 15 2006 Thomas Vander Stichele +- add doap file + +* Tue Dec 20 2005 Thomas Vander Stichele +- updated spec file + +* Thu Oct 06 2005 Edward Hervey < edward at fluendo dot com > +- Updated spec file for 0.9 + +* Fri Nov 05 2004 Christian Schaller < uraeus at gnome org > +- Remerged spec file with cvs version + +* Tue Oct 12 2004 Thomas Vander Stichele +- 0.7.93-0.fdr.1: new upstream release + +* Mon Jun 21 2004 Thomas Vander Stichele +- 0.7.92-0.fdr.1: new upstream release + +* Wed Mar 31 2004 Thomas Vander Stichele +- 0.7.91-0.fdr.1: new upstream release + +* Tue Sep 02 2003 Thomas Vander Stichele +- 0.1.0-0.fdr.1: first fedora release diff --git a/gst/Makefile.am b/gst/Makefile.am new file mode 100644 index 0000000..4426a3a --- /dev/null +++ b/gst/Makefile.am @@ -0,0 +1,195 @@ +common_cflags = $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS) +common_ldflags = -module -avoid-version + +pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst + +# we install everything in pyexecdir; otherwise you end up with a mess for +# multilib +pygstdir = $(pkgpyexecdir) +pygst_PYTHON = __init__.py + +pygstexecdir = $(pkgpyexecdir) +pygstexec_LTLIBRARIES = _gst.la $(interface_lib) $(pbutils_lib) + +interface_lib = interfaces.la +pbutils_lib = pbutils.la + +defs_DATA = gst-types.defs \ + gst-extrafuncs.defs \ + libs.defs \ + base.defs \ + pbutils.defs +defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs + +noinst_HEADERS = common.h pygst-private.h + +pygst_installdir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/ +pygst_install_HEADERS = pygst.h pygstvalue.h pygstminiobject.h pygstexception.h + +versioned_overrides = \ + gst-0.10.21.ignore \ + gst-0.10.22.ignore \ + gst-0.10.23.ignore \ + gst-0.10.24.ignore \ + gst-0.10.25.ignore \ + gst-0.10.26.ignore \ + gst-0.10.29.ignore \ + gst-0.10.30.ignore \ + gst-0.10.31.ignore \ + gst-0.10.32.ignore \ + gst-pb-0.10.23.ignore \ + gst-pb-0.10.25.ignore \ + gst-pb-0.10.26.ignore \ + gst-pb-0.10.29.ignore \ + gst-pb-0.10.30.ignore \ + gst-pb-0.10.31.ignore \ + gst-pb-0.10.32.ignore \ + gst-disable-loadsave.ignore + +INCLUDES = $(PYTHON_INCLUDES) +EXTRA_DIST = $(defs_DATA) $(versioned_overrides) common.h arg-types.py +GEN_FILES = arg-types.py gst-types.defs libs.defs base.defs pbutils.defs + +# GStreamer bindings +_gst_la_CFLAGS = $(common_cflags) +_gst_la_LIBADD = $(common_libadd) $(GST_BASE_LIBS) +_gst_la_LDFLAGS = $(common_ldflags) -export-symbols-regex "^(init_gst|_PyGObject_API|pygstminiobject_).*" \ + $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_NET_LIBS) $(GST_DP_LIBS) +_gst_la_SOURCES = \ + gst-argtypes.c \ + gstmodule.c \ + pygstiterator.c \ + pygstminiobject.c \ + pygstvalue.c \ + pygstexception.c + +nodist__gst_la_SOURCES = gst.c +GST_OVERRIDES = \ + gst.override \ + gstbin.override \ + gstbuffer.override \ + gstbus.override \ + gstevent.override \ + gstcaps.override \ + gstelement.override \ + gstelementfactory.override \ + gstmessage.override \ + gstobject.override \ + gstquery.override \ + gstpad.override \ + gststructure.override \ + gsttaglist.override \ + gstlibs.override \ + gstbase.override + +GST_DEFS = gst.defs gst-types.defs gst-extrafuncs.defs libs.defs base.defs +CLEANFILES = gst.c __init__.pyc +EXTRA_DIST += $(GST_DEFS) $(GST_OVERRIDES) gstversion.override.in +gst.c: $(GST_DEFS) $(GST_OVERRIDES) $(GEN_FILES) gstversion.override __init__.py + +# GStreamer interfaces bindings +interfaces_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +interfaces_la_LIBADD = $(common_libadd) -lgstinterfaces-$(GST_MAJORMINOR) +interfaces_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initinterface|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) +interfaces_la_SOURCES = interfacesmodule.c +nodist_interfaces_la_SOURCES = interfaces.c +INTERFACES_OVERRIDES = interfaces.override xoverlay.override +INTERFACES_DEFS = interfaces.defs xoverlay.defs +CLEANFILES += interfaces.c +EXTRA_DIST += $(INTERFACES_DEFS) $(INTERFACES_OVERRIDES) +interfaces.c: $(INTERFACES_DEFS) $(INTERFACES_OVERRIDES) $(GEN_FILES) + +# GStreamer pbutils bindings +pbutils_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +pbutils_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-0.10 +pbutils_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initpbutils|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) +pbutils_la_SOURCES = pbutilsmodule.c gst-argtypes.c +nodist_pbutils_la_SOURCES = pbutils.c +PBUTILS_OVERRIDES = pbutils.override +PBUTILS_DEFS = pbutils.defs +CLEANFILES += pbutils.c +EXTRA_DIST += $(PBUTILS_DEFS) $(PBUTILS_OVERRIDES) +pbutils.c: $(PBUTILS_DEFS) $(PBUTILS_OVERRIDES) $(GEN_FILES) + +# GStreamer audio bindings +AUDIO_OVERRIDES = audio.override +AUDIO_DEFS = audio.defs +CLEANFILES += audio.c +EXTRA_DIST += $(AUDIO_DEFS) $(AUDIO_OVERRIDES) +defs_DATA += $(AUDIO_DEFS) +GEN_FILES += $(AUDIO_DEFS) + +if HAVE_GST_AUDIO + + audio_lib = audio.la + pygstexec_LTLIBRARIES += $(audio_lib) + audio_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) + audio_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-0.10 + audio_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initaudio|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + audio_la_SOURCES = audiomodule.c gst-argtypes.c + nodist_audio_la_SOURCES = audio.c +audio.c: $(AUDIO_DEFS) $(AUDIO_OVERRIDES) $(GEN_FILES) + +endif + +# GStreamer video bindings +VIDEO_OVERRIDES = video.override +VIDEO_DEFS = video.defs +CLEANFILES += video.c +EXTRA_DIST += $(VIDEO_DEFS) $(VIDEO_OVERRIDES) +defs_DATA += $(VIDEO_DEFS) +GEN_FILES += $(VIDEO_DEFS) + +if HAVE_GST_VIDEO + + video_lib = video.la + pygstexec_LTLIBRARIES += $(video_lib) + video_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) + video_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10 + video_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initvideo|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + video_la_SOURCES = videomodule.c gst-argtypes.c + nodist_video_la_SOURCES = video.c +video.c: $(VIDEO_DEFS) $(VIDEO_OVERRIDES) $(GEN_FILES) + +endif + +# GStreamer tag bindings +TAG_OVERRIDES = tag.override +TAG_DEFS = tag.defs +CLEANFILES += tag.c +EXTRA_DIST += $(TAG_DEFS) $(TAG_OVERRIDES) +defs_DATA += $(TAG_DEFS) +GEN_FILES += $(TAG_DEFS) + +if HAVE_GST_TAG + + tag_lib = tag.la + pygstexec_LTLIBRARIES += $(tag_lib) + tag_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) + tag_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgsttag-0.10 + tag_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(inittag|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + tag_la_SOURCES = tagmodule.c gst-argtypes.c + nodist_tag_la_SOURCES = tag.c +tag.c: $(TAG_DEFS) $(TAG_OVERRIDES) $(GEN_FILES) + +endif + + +.defs.c: + $(AM_V_GEN)($(PYTHON) $(top_srcdir)/codegen/codegen.py \ + --load-types $(srcdir)/arg-types.py \ + --register $(srcdir)/gst-types.defs \ + --override $(srcdir)/$*.override \ + --extendpath $(top_builddir)/gst/ \ + --extendpath $(srcdir)/ \ + --prefix py$* $<) > gen-$*.c \ + && cp gen-$*.c $*.c \ + && rm -f gen-$*.c + +SUBDIRS = extend diff --git a/gst/Makefile.in b/gst/Makefile.in new file mode 100644 index 0000000..56281cf --- /dev/null +++ b/gst/Makefile.in @@ -0,0 +1,1313 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@HAVE_GST_AUDIO_TRUE@am__append_1 = $(audio_lib) +@HAVE_GST_VIDEO_TRUE@am__append_2 = $(video_lib) +@HAVE_GST_TAG_TRUE@am__append_3 = $(tag_lib) +subdir = gst +DIST_COMMON = $(noinst_HEADERS) $(pygst_PYTHON) \ + $(pygst_install_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/__init__.py.in \ + $(srcdir)/gstversion.override.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gstversion.override __init__.py +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pygstexecdir)" "$(DESTDIR)$(pygstdir)" \ + "$(DESTDIR)$(defsdir)" "$(DESTDIR)$(pygst_installdir)" +LTLIBRARIES = $(pygstexec_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +_gst_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +am__gst_la_OBJECTS = _gst_la-gst-argtypes.lo _gst_la-gstmodule.lo \ + _gst_la-pygstiterator.lo _gst_la-pygstminiobject.lo \ + _gst_la-pygstvalue.lo _gst_la-pygstexception.lo +nodist__gst_la_OBJECTS = _gst_la-gst.lo +_gst_la_OBJECTS = $(am__gst_la_OBJECTS) $(nodist__gst_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +_gst_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_gst_la_CFLAGS) \ + $(CFLAGS) $(_gst_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_AUDIO_TRUE@audio_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +@HAVE_GST_AUDIO_TRUE@ $(am__DEPENDENCIES_1) +am__audio_la_SOURCES_DIST = audiomodule.c gst-argtypes.c +@HAVE_GST_AUDIO_TRUE@am_audio_la_OBJECTS = audio_la-audiomodule.lo \ +@HAVE_GST_AUDIO_TRUE@ audio_la-gst-argtypes.lo +@HAVE_GST_AUDIO_TRUE@nodist_audio_la_OBJECTS = audio_la-audio.lo +audio_la_OBJECTS = $(am_audio_la_OBJECTS) $(nodist_audio_la_OBJECTS) +audio_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(audio_la_CFLAGS) \ + $(CFLAGS) $(audio_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_AUDIO_TRUE@am_audio_la_rpath = -rpath $(pygstexecdir) +interfaces_la_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_interfaces_la_OBJECTS = interfaces_la-interfacesmodule.lo +nodist_interfaces_la_OBJECTS = interfaces_la-interfaces.lo +interfaces_la_OBJECTS = $(am_interfaces_la_OBJECTS) \ + $(nodist_interfaces_la_OBJECTS) +interfaces_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(interfaces_la_CFLAGS) \ + $(CFLAGS) $(interfaces_la_LDFLAGS) $(LDFLAGS) -o $@ +pbutils_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +am_pbutils_la_OBJECTS = pbutils_la-pbutilsmodule.lo \ + pbutils_la-gst-argtypes.lo +nodist_pbutils_la_OBJECTS = pbutils_la-pbutils.lo +pbutils_la_OBJECTS = $(am_pbutils_la_OBJECTS) \ + $(nodist_pbutils_la_OBJECTS) +pbutils_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(pbutils_la_CFLAGS) \ + $(CFLAGS) $(pbutils_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_TAG_TRUE@tag_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +@HAVE_GST_TAG_TRUE@ $(am__DEPENDENCIES_1) +am__tag_la_SOURCES_DIST = tagmodule.c gst-argtypes.c +@HAVE_GST_TAG_TRUE@am_tag_la_OBJECTS = tag_la-tagmodule.lo \ +@HAVE_GST_TAG_TRUE@ tag_la-gst-argtypes.lo +@HAVE_GST_TAG_TRUE@nodist_tag_la_OBJECTS = tag_la-tag.lo +tag_la_OBJECTS = $(am_tag_la_OBJECTS) $(nodist_tag_la_OBJECTS) +tag_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tag_la_CFLAGS) $(CFLAGS) \ + $(tag_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_TAG_TRUE@am_tag_la_rpath = -rpath $(pygstexecdir) +@HAVE_GST_VIDEO_TRUE@video_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +@HAVE_GST_VIDEO_TRUE@ $(am__DEPENDENCIES_1) +am__video_la_SOURCES_DIST = videomodule.c gst-argtypes.c +@HAVE_GST_VIDEO_TRUE@am_video_la_OBJECTS = video_la-videomodule.lo \ +@HAVE_GST_VIDEO_TRUE@ video_la-gst-argtypes.lo +@HAVE_GST_VIDEO_TRUE@nodist_video_la_OBJECTS = video_la-video.lo +video_la_OBJECTS = $(am_video_la_OBJECTS) $(nodist_video_la_OBJECTS) +video_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(video_la_CFLAGS) \ + $(CFLAGS) $(video_la_LDFLAGS) $(LDFLAGS) -o $@ +@HAVE_GST_VIDEO_TRUE@am_video_la_rpath = -rpath $(pygstexecdir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(_gst_la_SOURCES) $(nodist__gst_la_SOURCES) \ + $(audio_la_SOURCES) $(nodist_audio_la_SOURCES) \ + $(interfaces_la_SOURCES) $(nodist_interfaces_la_SOURCES) \ + $(pbutils_la_SOURCES) $(nodist_pbutils_la_SOURCES) \ + $(tag_la_SOURCES) $(nodist_tag_la_SOURCES) $(video_la_SOURCES) \ + $(nodist_video_la_SOURCES) +DIST_SOURCES = $(_gst_la_SOURCES) $(am__audio_la_SOURCES_DIST) \ + $(interfaces_la_SOURCES) $(pbutils_la_SOURCES) \ + $(am__tag_la_SOURCES_DIST) $(am__video_la_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +py_compile = $(top_srcdir)/py-compile +DATA = $(defs_DATA) +HEADERS = $(noinst_HEADERS) $(pygst_install_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +common_cflags = $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS) +common_ldflags = -module -avoid-version + +# we install everything in pyexecdir; otherwise you end up with a mess for +# multilib +pygstdir = $(pkgpyexecdir) +pygst_PYTHON = __init__.py +pygstexecdir = $(pkgpyexecdir) +pygstexec_LTLIBRARIES = _gst.la $(interface_lib) $(pbutils_lib) \ + $(am__append_1) $(am__append_2) $(am__append_3) +interface_lib = interfaces.la +pbutils_lib = pbutils.la +defs_DATA = gst-types.defs gst-extrafuncs.defs libs.defs base.defs \ + pbutils.defs $(AUDIO_DEFS) $(VIDEO_DEFS) $(TAG_DEFS) +defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs +noinst_HEADERS = common.h pygst-private.h +pygst_installdir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/ +pygst_install_HEADERS = pygst.h pygstvalue.h pygstminiobject.h pygstexception.h +versioned_overrides = \ + gst-0.10.21.ignore \ + gst-0.10.22.ignore \ + gst-0.10.23.ignore \ + gst-0.10.24.ignore \ + gst-0.10.25.ignore \ + gst-0.10.26.ignore \ + gst-0.10.29.ignore \ + gst-0.10.30.ignore \ + gst-0.10.31.ignore \ + gst-0.10.32.ignore \ + gst-pb-0.10.23.ignore \ + gst-pb-0.10.25.ignore \ + gst-pb-0.10.26.ignore \ + gst-pb-0.10.29.ignore \ + gst-pb-0.10.30.ignore \ + gst-pb-0.10.31.ignore \ + gst-pb-0.10.32.ignore \ + gst-disable-loadsave.ignore + +INCLUDES = $(PYTHON_INCLUDES) +EXTRA_DIST = $(defs_DATA) $(versioned_overrides) common.h arg-types.py \ + $(GST_DEFS) $(GST_OVERRIDES) gstversion.override.in \ + $(INTERFACES_DEFS) $(INTERFACES_OVERRIDES) $(PBUTILS_DEFS) \ + $(PBUTILS_OVERRIDES) $(AUDIO_DEFS) $(AUDIO_OVERRIDES) \ + $(VIDEO_DEFS) $(VIDEO_OVERRIDES) $(TAG_DEFS) $(TAG_OVERRIDES) +GEN_FILES = arg-types.py gst-types.defs libs.defs base.defs \ + pbutils.defs $(AUDIO_DEFS) $(VIDEO_DEFS) $(TAG_DEFS) + +# GStreamer bindings +_gst_la_CFLAGS = $(common_cflags) +_gst_la_LIBADD = $(common_libadd) $(GST_BASE_LIBS) +_gst_la_LDFLAGS = $(common_ldflags) -export-symbols-regex "^(init_gst|_PyGObject_API|pygstminiobject_).*" \ + $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_NET_LIBS) $(GST_DP_LIBS) + +_gst_la_SOURCES = \ + gst-argtypes.c \ + gstmodule.c \ + pygstiterator.c \ + pygstminiobject.c \ + pygstvalue.c \ + pygstexception.c + +nodist__gst_la_SOURCES = gst.c +GST_OVERRIDES = \ + gst.override \ + gstbin.override \ + gstbuffer.override \ + gstbus.override \ + gstevent.override \ + gstcaps.override \ + gstelement.override \ + gstelementfactory.override \ + gstmessage.override \ + gstobject.override \ + gstquery.override \ + gstpad.override \ + gststructure.override \ + gsttaglist.override \ + gstlibs.override \ + gstbase.override + +GST_DEFS = gst.defs gst-types.defs gst-extrafuncs.defs libs.defs base.defs +CLEANFILES = gst.c __init__.pyc interfaces.c pbutils.c audio.c video.c \ + tag.c + +# GStreamer interfaces bindings +interfaces_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +interfaces_la_LIBADD = $(common_libadd) -lgstinterfaces-$(GST_MAJORMINOR) +interfaces_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initinterface|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +interfaces_la_SOURCES = interfacesmodule.c +nodist_interfaces_la_SOURCES = interfaces.c +INTERFACES_OVERRIDES = interfaces.override xoverlay.override +INTERFACES_DEFS = interfaces.defs xoverlay.defs + +# GStreamer pbutils bindings +pbutils_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +pbutils_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-0.10 +pbutils_la_LDFLAGS = $(common_ldflags) \ + -export-symbols-regex "^(initpbutils|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +pbutils_la_SOURCES = pbutilsmodule.c gst-argtypes.c +nodist_pbutils_la_SOURCES = pbutils.c +PBUTILS_OVERRIDES = pbutils.override +PBUTILS_DEFS = pbutils.defs + +# GStreamer audio bindings +AUDIO_OVERRIDES = audio.override +AUDIO_DEFS = audio.defs +@HAVE_GST_AUDIO_TRUE@audio_lib = audio.la +@HAVE_GST_AUDIO_TRUE@audio_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +@HAVE_GST_AUDIO_TRUE@audio_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-0.10 +@HAVE_GST_AUDIO_TRUE@audio_la_LDFLAGS = $(common_ldflags) \ +@HAVE_GST_AUDIO_TRUE@ -export-symbols-regex "^(initaudio|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +@HAVE_GST_AUDIO_TRUE@audio_la_SOURCES = audiomodule.c gst-argtypes.c +@HAVE_GST_AUDIO_TRUE@nodist_audio_la_SOURCES = audio.c + +# GStreamer video bindings +VIDEO_OVERRIDES = video.override +VIDEO_DEFS = video.defs +@HAVE_GST_VIDEO_TRUE@video_lib = video.la +@HAVE_GST_VIDEO_TRUE@video_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +@HAVE_GST_VIDEO_TRUE@video_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10 +@HAVE_GST_VIDEO_TRUE@video_la_LDFLAGS = $(common_ldflags) \ +@HAVE_GST_VIDEO_TRUE@ -export-symbols-regex "^(initvideo|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +@HAVE_GST_VIDEO_TRUE@video_la_SOURCES = videomodule.c gst-argtypes.c +@HAVE_GST_VIDEO_TRUE@nodist_video_la_SOURCES = video.c + +# GStreamer tag bindings +TAG_OVERRIDES = tag.override +TAG_DEFS = tag.defs +@HAVE_GST_TAG_TRUE@tag_lib = tag.la +@HAVE_GST_TAG_TRUE@tag_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS) +@HAVE_GST_TAG_TRUE@tag_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgsttag-0.10 +@HAVE_GST_TAG_TRUE@tag_la_LDFLAGS = $(common_ldflags) \ +@HAVE_GST_TAG_TRUE@ -export-symbols-regex "^(inittag|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS) + +@HAVE_GST_TAG_TRUE@tag_la_SOURCES = tagmodule.c gst-argtypes.c +@HAVE_GST_TAG_TRUE@nodist_tag_la_SOURCES = tag.c +SUBDIRS = extend +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .defs .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu gst/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +gstversion.override: $(top_builddir)/config.status $(srcdir)/gstversion.override.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +__init__.py: $(top_builddir)/config.status $(srcdir)/__init__.py.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-pygstexecLTLIBRARIES: $(pygstexec_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pygstexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pygstexecdir)" + @list='$(pygstexec_LTLIBRARIES)'; test -n "$(pygstexecdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pygstexecdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pygstexecdir)"; \ + } + +uninstall-pygstexecLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pygstexec_LTLIBRARIES)'; test -n "$(pygstexecdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pygstexecdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pygstexecdir)/$$f"; \ + done + +clean-pygstexecLTLIBRARIES: + -test -z "$(pygstexec_LTLIBRARIES)" || rm -f $(pygstexec_LTLIBRARIES) + @list='$(pygstexec_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_gst.la: $(_gst_la_OBJECTS) $(_gst_la_DEPENDENCIES) + $(AM_V_CCLD)$(_gst_la_LINK) -rpath $(pygstexecdir) $(_gst_la_OBJECTS) $(_gst_la_LIBADD) $(LIBS) +audio.la: $(audio_la_OBJECTS) $(audio_la_DEPENDENCIES) + $(AM_V_CCLD)$(audio_la_LINK) $(am_audio_la_rpath) $(audio_la_OBJECTS) $(audio_la_LIBADD) $(LIBS) +interfaces.la: $(interfaces_la_OBJECTS) $(interfaces_la_DEPENDENCIES) + $(AM_V_CCLD)$(interfaces_la_LINK) -rpath $(pygstexecdir) $(interfaces_la_OBJECTS) $(interfaces_la_LIBADD) $(LIBS) +pbutils.la: $(pbutils_la_OBJECTS) $(pbutils_la_DEPENDENCIES) + $(AM_V_CCLD)$(pbutils_la_LINK) -rpath $(pygstexecdir) $(pbutils_la_OBJECTS) $(pbutils_la_LIBADD) $(LIBS) +tag.la: $(tag_la_OBJECTS) $(tag_la_DEPENDENCIES) + $(AM_V_CCLD)$(tag_la_LINK) $(am_tag_la_rpath) $(tag_la_OBJECTS) $(tag_la_LIBADD) $(LIBS) +video.la: $(video_la_OBJECTS) $(video_la_DEPENDENCIES) + $(AM_V_CCLD)$(video_la_LINK) $(am_video_la_rpath) $(video_la_OBJECTS) $(video_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-gst.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-gstmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-pygstexception.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-pygstiterator.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-pygstminiobject.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gst_la-pygstvalue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_la-audio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_la-audiomodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaces_la-interfaces.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaces_la-interfacesmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbutils_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbutils_la-pbutils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbutils_la-pbutilsmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag_la-tag.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag_la-tagmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_la-gst-argtypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_la-video.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_la-videomodule.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +_gst_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/_gst_la-gst-argtypes.Tpo -c -o _gst_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-gst-argtypes.Tpo $(DEPDIR)/_gst_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='_gst_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +_gst_la-gstmodule.lo: gstmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-gstmodule.lo -MD -MP -MF $(DEPDIR)/_gst_la-gstmodule.Tpo -c -o _gst_la-gstmodule.lo `test -f 'gstmodule.c' || echo '$(srcdir)/'`gstmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-gstmodule.Tpo $(DEPDIR)/_gst_la-gstmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gstmodule.c' object='_gst_la-gstmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-gstmodule.lo `test -f 'gstmodule.c' || echo '$(srcdir)/'`gstmodule.c + +_gst_la-pygstiterator.lo: pygstiterator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-pygstiterator.lo -MD -MP -MF $(DEPDIR)/_gst_la-pygstiterator.Tpo -c -o _gst_la-pygstiterator.lo `test -f 'pygstiterator.c' || echo '$(srcdir)/'`pygstiterator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-pygstiterator.Tpo $(DEPDIR)/_gst_la-pygstiterator.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygstiterator.c' object='_gst_la-pygstiterator.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-pygstiterator.lo `test -f 'pygstiterator.c' || echo '$(srcdir)/'`pygstiterator.c + +_gst_la-pygstminiobject.lo: pygstminiobject.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-pygstminiobject.lo -MD -MP -MF $(DEPDIR)/_gst_la-pygstminiobject.Tpo -c -o _gst_la-pygstminiobject.lo `test -f 'pygstminiobject.c' || echo '$(srcdir)/'`pygstminiobject.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-pygstminiobject.Tpo $(DEPDIR)/_gst_la-pygstminiobject.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygstminiobject.c' object='_gst_la-pygstminiobject.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-pygstminiobject.lo `test -f 'pygstminiobject.c' || echo '$(srcdir)/'`pygstminiobject.c + +_gst_la-pygstvalue.lo: pygstvalue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-pygstvalue.lo -MD -MP -MF $(DEPDIR)/_gst_la-pygstvalue.Tpo -c -o _gst_la-pygstvalue.lo `test -f 'pygstvalue.c' || echo '$(srcdir)/'`pygstvalue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-pygstvalue.Tpo $(DEPDIR)/_gst_la-pygstvalue.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygstvalue.c' object='_gst_la-pygstvalue.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-pygstvalue.lo `test -f 'pygstvalue.c' || echo '$(srcdir)/'`pygstvalue.c + +_gst_la-pygstexception.lo: pygstexception.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-pygstexception.lo -MD -MP -MF $(DEPDIR)/_gst_la-pygstexception.Tpo -c -o _gst_la-pygstexception.lo `test -f 'pygstexception.c' || echo '$(srcdir)/'`pygstexception.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-pygstexception.Tpo $(DEPDIR)/_gst_la-pygstexception.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pygstexception.c' object='_gst_la-pygstexception.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-pygstexception.lo `test -f 'pygstexception.c' || echo '$(srcdir)/'`pygstexception.c + +_gst_la-gst.lo: gst.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -MT _gst_la-gst.lo -MD -MP -MF $(DEPDIR)/_gst_la-gst.Tpo -c -o _gst_la-gst.lo `test -f 'gst.c' || echo '$(srcdir)/'`gst.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_gst_la-gst.Tpo $(DEPDIR)/_gst_la-gst.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst.c' object='_gst_la-gst.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gst_la_CFLAGS) $(CFLAGS) -c -o _gst_la-gst.lo `test -f 'gst.c' || echo '$(srcdir)/'`gst.c + +audio_la-audiomodule.lo: audiomodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -MT audio_la-audiomodule.lo -MD -MP -MF $(DEPDIR)/audio_la-audiomodule.Tpo -c -o audio_la-audiomodule.lo `test -f 'audiomodule.c' || echo '$(srcdir)/'`audiomodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audio_la-audiomodule.Tpo $(DEPDIR)/audio_la-audiomodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audiomodule.c' object='audio_la-audiomodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -c -o audio_la-audiomodule.lo `test -f 'audiomodule.c' || echo '$(srcdir)/'`audiomodule.c + +audio_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -MT audio_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/audio_la-gst-argtypes.Tpo -c -o audio_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audio_la-gst-argtypes.Tpo $(DEPDIR)/audio_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='audio_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -c -o audio_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +audio_la-audio.lo: audio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -MT audio_la-audio.lo -MD -MP -MF $(DEPDIR)/audio_la-audio.Tpo -c -o audio_la-audio.lo `test -f 'audio.c' || echo '$(srcdir)/'`audio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audio_la-audio.Tpo $(DEPDIR)/audio_la-audio.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='audio.c' object='audio_la-audio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_la_CFLAGS) $(CFLAGS) -c -o audio_la-audio.lo `test -f 'audio.c' || echo '$(srcdir)/'`audio.c + +interfaces_la-interfacesmodule.lo: interfacesmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(interfaces_la_CFLAGS) $(CFLAGS) -MT interfaces_la-interfacesmodule.lo -MD -MP -MF $(DEPDIR)/interfaces_la-interfacesmodule.Tpo -c -o interfaces_la-interfacesmodule.lo `test -f 'interfacesmodule.c' || echo '$(srcdir)/'`interfacesmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/interfaces_la-interfacesmodule.Tpo $(DEPDIR)/interfaces_la-interfacesmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='interfacesmodule.c' object='interfaces_la-interfacesmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(interfaces_la_CFLAGS) $(CFLAGS) -c -o interfaces_la-interfacesmodule.lo `test -f 'interfacesmodule.c' || echo '$(srcdir)/'`interfacesmodule.c + +interfaces_la-interfaces.lo: interfaces.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(interfaces_la_CFLAGS) $(CFLAGS) -MT interfaces_la-interfaces.lo -MD -MP -MF $(DEPDIR)/interfaces_la-interfaces.Tpo -c -o interfaces_la-interfaces.lo `test -f 'interfaces.c' || echo '$(srcdir)/'`interfaces.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/interfaces_la-interfaces.Tpo $(DEPDIR)/interfaces_la-interfaces.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='interfaces.c' object='interfaces_la-interfaces.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(interfaces_la_CFLAGS) $(CFLAGS) -c -o interfaces_la-interfaces.lo `test -f 'interfaces.c' || echo '$(srcdir)/'`interfaces.c + +pbutils_la-pbutilsmodule.lo: pbutilsmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -MT pbutils_la-pbutilsmodule.lo -MD -MP -MF $(DEPDIR)/pbutils_la-pbutilsmodule.Tpo -c -o pbutils_la-pbutilsmodule.lo `test -f 'pbutilsmodule.c' || echo '$(srcdir)/'`pbutilsmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pbutils_la-pbutilsmodule.Tpo $(DEPDIR)/pbutils_la-pbutilsmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pbutilsmodule.c' object='pbutils_la-pbutilsmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -c -o pbutils_la-pbutilsmodule.lo `test -f 'pbutilsmodule.c' || echo '$(srcdir)/'`pbutilsmodule.c + +pbutils_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -MT pbutils_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/pbutils_la-gst-argtypes.Tpo -c -o pbutils_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pbutils_la-gst-argtypes.Tpo $(DEPDIR)/pbutils_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='pbutils_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -c -o pbutils_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +pbutils_la-pbutils.lo: pbutils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -MT pbutils_la-pbutils.lo -MD -MP -MF $(DEPDIR)/pbutils_la-pbutils.Tpo -c -o pbutils_la-pbutils.lo `test -f 'pbutils.c' || echo '$(srcdir)/'`pbutils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pbutils_la-pbutils.Tpo $(DEPDIR)/pbutils_la-pbutils.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pbutils.c' object='pbutils_la-pbutils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pbutils_la_CFLAGS) $(CFLAGS) -c -o pbutils_la-pbutils.lo `test -f 'pbutils.c' || echo '$(srcdir)/'`pbutils.c + +tag_la-tagmodule.lo: tagmodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -MT tag_la-tagmodule.lo -MD -MP -MF $(DEPDIR)/tag_la-tagmodule.Tpo -c -o tag_la-tagmodule.lo `test -f 'tagmodule.c' || echo '$(srcdir)/'`tagmodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tag_la-tagmodule.Tpo $(DEPDIR)/tag_la-tagmodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tagmodule.c' object='tag_la-tagmodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -c -o tag_la-tagmodule.lo `test -f 'tagmodule.c' || echo '$(srcdir)/'`tagmodule.c + +tag_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -MT tag_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/tag_la-gst-argtypes.Tpo -c -o tag_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tag_la-gst-argtypes.Tpo $(DEPDIR)/tag_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='tag_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -c -o tag_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +tag_la-tag.lo: tag.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -MT tag_la-tag.lo -MD -MP -MF $(DEPDIR)/tag_la-tag.Tpo -c -o tag_la-tag.lo `test -f 'tag.c' || echo '$(srcdir)/'`tag.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tag_la-tag.Tpo $(DEPDIR)/tag_la-tag.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tag.c' object='tag_la-tag.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tag_la_CFLAGS) $(CFLAGS) -c -o tag_la-tag.lo `test -f 'tag.c' || echo '$(srcdir)/'`tag.c + +video_la-videomodule.lo: videomodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -MT video_la-videomodule.lo -MD -MP -MF $(DEPDIR)/video_la-videomodule.Tpo -c -o video_la-videomodule.lo `test -f 'videomodule.c' || echo '$(srcdir)/'`videomodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/video_la-videomodule.Tpo $(DEPDIR)/video_la-videomodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='videomodule.c' object='video_la-videomodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -c -o video_la-videomodule.lo `test -f 'videomodule.c' || echo '$(srcdir)/'`videomodule.c + +video_la-gst-argtypes.lo: gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -MT video_la-gst-argtypes.lo -MD -MP -MF $(DEPDIR)/video_la-gst-argtypes.Tpo -c -o video_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/video_la-gst-argtypes.Tpo $(DEPDIR)/video_la-gst-argtypes.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-argtypes.c' object='video_la-gst-argtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -c -o video_la-gst-argtypes.lo `test -f 'gst-argtypes.c' || echo '$(srcdir)/'`gst-argtypes.c + +video_la-video.lo: video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -MT video_la-video.lo -MD -MP -MF $(DEPDIR)/video_la-video.Tpo -c -o video_la-video.lo `test -f 'video.c' || echo '$(srcdir)/'`video.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/video_la-video.Tpo $(DEPDIR)/video_la-video.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='video.c' object='video_la-video.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(video_la_CFLAGS) $(CFLAGS) -c -o video_la-video.lo `test -f 'video.c' || echo '$(srcdir)/'`video.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pygstPYTHON: $(pygst_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(pygstdir)" || $(MKDIR_P) "$(DESTDIR)$(pygstdir)" + @list='$(pygst_PYTHON)'; dlist=; list2=; test -n "$(pygstdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pygstdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pygstdir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(pygstdir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pygstdir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-pygstPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(pygst_PYTHON)'; test -n "$(pygstdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$fileso +install-defsDATA: $(defs_DATA) + @$(NORMAL_INSTALL) + test -z "$(defsdir)" || $(MKDIR_P) "$(DESTDIR)$(defsdir)" + @list='$(defs_DATA)'; test -n "$(defsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(defsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(defsdir)" || exit $$?; \ + done + +uninstall-defsDATA: + @$(NORMAL_UNINSTALL) + @list='$(defs_DATA)'; test -n "$(defsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(defsdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(defsdir)" && rm -f $$files +install-pygst_installHEADERS: $(pygst_install_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(pygst_installdir)" || $(MKDIR_P) "$(DESTDIR)$(pygst_installdir)" + @list='$(pygst_install_HEADERS)'; test -n "$(pygst_installdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pygst_installdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pygst_installdir)" || exit $$?; \ + done + +uninstall-pygst_installHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pygst_install_HEADERS)'; test -n "$(pygst_installdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pygst_installdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pygst_installdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pygstexecdir)" "$(DESTDIR)$(pygstdir)" "$(DESTDIR)$(defsdir)" "$(DESTDIR)$(pygst_installdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-pygstexecLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-defsDATA install-pygstPYTHON \ + install-pygst_installHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-pygstexecLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-defsDATA uninstall-pygstPYTHON \ + uninstall-pygst_installHEADERS uninstall-pygstexecLTLIBRARIES + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + clean-pygstexecLTLIBRARIES ctags ctags-recursive distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-defsDATA install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-pygstPYTHON \ + install-pygst_installHEADERS install-pygstexecLTLIBRARIES \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-defsDATA \ + uninstall-pygstPYTHON uninstall-pygst_installHEADERS \ + uninstall-pygstexecLTLIBRARIES + +gst.c: $(GST_DEFS) $(GST_OVERRIDES) $(GEN_FILES) gstversion.override __init__.py +interfaces.c: $(INTERFACES_DEFS) $(INTERFACES_OVERRIDES) $(GEN_FILES) +pbutils.c: $(PBUTILS_DEFS) $(PBUTILS_OVERRIDES) $(GEN_FILES) +@HAVE_GST_AUDIO_TRUE@audio.c: $(AUDIO_DEFS) $(AUDIO_OVERRIDES) $(GEN_FILES) +@HAVE_GST_VIDEO_TRUE@video.c: $(VIDEO_DEFS) $(VIDEO_OVERRIDES) $(GEN_FILES) +@HAVE_GST_TAG_TRUE@tag.c: $(TAG_DEFS) $(TAG_OVERRIDES) $(GEN_FILES) + +.defs.c: + $(AM_V_GEN)($(PYTHON) $(top_srcdir)/codegen/codegen.py \ + --load-types $(srcdir)/arg-types.py \ + --register $(srcdir)/gst-types.defs \ + --override $(srcdir)/$*.override \ + --extendpath $(top_builddir)/gst/ \ + --extendpath $(srcdir)/ \ + --prefix py$* $<) > gen-$*.c \ + && cp gen-$*.c $*.c \ + && rm -f gen-$*.c + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gst/__init__.py b/gst/__init__.py new file mode 100644 index 0000000..2c439e3 --- /dev/null +++ b/gst/__init__.py @@ -0,0 +1,229 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python +# Copyright (C) 2002 David I. Lehn +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn + +try: + import gstlibtoolimporter + gstlibtoolimporter.install() +except ImportError: + gstlibtoolimporter = None + +import sys + +# we always require 2.0 of pygtk; so if pygtk is not imported anywhere +# yet, we import pygtk here and .require +if 'gobject' not in sys.modules: + import pygtk + pygtk.require('2.0') + +class Value: + def __init__(self, type): + assert type in ('fourcc', 'intrange', 'doublerange', 'fractionrange', 'fraction') + self.type = type + +class Fourcc(Value): + def __init__(self, string): + Value.__init__(self, 'fourcc') + self.fourcc = string + + def __repr__(self): + return '' % self.fourcc + + def __eq__(self, other): + if isinstance(other, Fourcc): + return self.fourcc == other.fourcc + + return False + + def __ne__(self, other): + return not self.__eq__(other) + +class IntRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'intrange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low, self.high) + +class DoubleRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'doublerange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low, self.high) + +class FractionRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'fractionrange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low.num, + self.low.denom, + self.high.num, + self.high.denom) + +class Fraction(Value): + def __init__(self, num, denom=1): + def __gcd(a,b): + while b != 0: + tmp = a + a = b + b = tmp % b + return abs(a) + + def __simplify(): + num = self.num + denom = self.denom + + if num < 0: + num = -num + denom = -denom + + # Compute greatest common divisor + gcd = __gcd(num,denom) + if gcd != 0: + num /= gcd + denom /= gcd + + self.num = num + self.denom = denom + + Value.__init__(self, 'fraction') + + self.num = num + self.denom = denom + + __simplify() + + def __repr__(self): + return '' % (self.num, self.denom) + + def __eq__(self, other): + if isinstance(other, Fraction): + return self.num * other.denom == other.num * self.denom + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __mul__(self, other): + if isinstance(other, Fraction): + return Fraction(self.num * other.num, + self.denom * other.denom) + elif isinstance(other, int): + return Fraction(self.num * other, self.denom) + raise TypeError + + __rmul__ = __mul__ + + def __div__(self, other): + if isinstance(other, Fraction): + return Fraction(self.num * other.denom, + self.denom * other.num) + elif isinstance(other, int): + return Fraction(self.num, self.denom * other) + return TypeError + + def __rdiv__(self, other): + if isinstance(other, int): + return Fraction(self.denom * other, self.num) + return TypeError + + def __float__(self): + return float(self.num) / float(self.denom) + +try: + dlsave = sys.getdlopenflags() + from DLFCN import RTLD_GLOBAL, RTLD_LAZY +except AttributeError: + # windows doesn't have sys.getdlopenflags() + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 +except ImportError: + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 + import os + osname = os.uname()[0] + if osname == 'Linux' or osname == 'SunOS' or osname == 'FreeBSD' or osname == 'GNU/kFreeBSD' or osname == 'GNU': + machinename = os.uname()[4] + if machinename == 'mips' or machinename == 'mips64': + RTLD_GLOBAL = 0x4 + RTLD_LAZY = 0x1 + else: + RTLD_GLOBAL = 0x100 + RTLD_LAZY = 0x1 + elif osname == 'Darwin': + RTLD_GLOBAL = 0x8 + RTLD_LAZY = 0x1 + del os +except: + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 + +if RTLD_GLOBAL != -1 and RTLD_LAZY != -1: + sys.setdlopenflags(RTLD_LAZY | RTLD_GLOBAL) + +try: + import libxml2 +except: + pass + +from _gst import * +import interfaces + +if RTLD_GLOBAL != -1 and RTLD_LAZY != -1: + sys.setdlopenflags(dlsave) +del sys + +version = get_gst_version + +# Fixes for API cleanups that would cause an API breakage. +# See #446674 + +import warnings +if locals().has_key("parse_bin_from_description"): + def gst_parse_bin_from_description(*args, **kwargs): + warnings.warn("gst_parse_bin_from_description() is deprecated, please use parse_bin_from_description instead", + DeprecationWarning) + return parse_bin_from_description(*args, **kwargs) + +if locals().has_key("message_new_buffering"): + def gst_message_new_buffering(*args, **kwargs): + warnings.warn("gst_message_new_buffering() is deprecated, please use message_new_buffering() instead", + DeprecationWarning) + return message_new_buffering(*args, **kwargs) + +# this restores previously installed importhooks, so we don't interfere +# with other people's module importers +# it also clears out the module completely as if it were never loaded, +# so that if anyone else imports gstltihooks the hooks get installed +if gstlibtoolimporter is not None: + import audio + import pbutils + import tag + import video + gstlibtoolimporter.uninstall() + import sys + del sys.modules["gstlibtoolimporter"] diff --git a/gst/__init__.py.in b/gst/__init__.py.in new file mode 100644 index 0000000..2c439e3 --- /dev/null +++ b/gst/__init__.py.in @@ -0,0 +1,229 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python +# Copyright (C) 2002 David I. Lehn +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn + +try: + import gstlibtoolimporter + gstlibtoolimporter.install() +except ImportError: + gstlibtoolimporter = None + +import sys + +# we always require 2.0 of pygtk; so if pygtk is not imported anywhere +# yet, we import pygtk here and .require +if 'gobject' not in sys.modules: + import pygtk + pygtk.require('2.0') + +class Value: + def __init__(self, type): + assert type in ('fourcc', 'intrange', 'doublerange', 'fractionrange', 'fraction') + self.type = type + +class Fourcc(Value): + def __init__(self, string): + Value.__init__(self, 'fourcc') + self.fourcc = string + + def __repr__(self): + return '' % self.fourcc + + def __eq__(self, other): + if isinstance(other, Fourcc): + return self.fourcc == other.fourcc + + return False + + def __ne__(self, other): + return not self.__eq__(other) + +class IntRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'intrange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low, self.high) + +class DoubleRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'doublerange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low, self.high) + +class FractionRange(Value): + def __init__(self, low, high): + Value.__init__(self, 'fractionrange') + self.low = low + self.high = high + def __repr__(self): + return '' % (self.low.num, + self.low.denom, + self.high.num, + self.high.denom) + +class Fraction(Value): + def __init__(self, num, denom=1): + def __gcd(a,b): + while b != 0: + tmp = a + a = b + b = tmp % b + return abs(a) + + def __simplify(): + num = self.num + denom = self.denom + + if num < 0: + num = -num + denom = -denom + + # Compute greatest common divisor + gcd = __gcd(num,denom) + if gcd != 0: + num /= gcd + denom /= gcd + + self.num = num + self.denom = denom + + Value.__init__(self, 'fraction') + + self.num = num + self.denom = denom + + __simplify() + + def __repr__(self): + return '' % (self.num, self.denom) + + def __eq__(self, other): + if isinstance(other, Fraction): + return self.num * other.denom == other.num * self.denom + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __mul__(self, other): + if isinstance(other, Fraction): + return Fraction(self.num * other.num, + self.denom * other.denom) + elif isinstance(other, int): + return Fraction(self.num * other, self.denom) + raise TypeError + + __rmul__ = __mul__ + + def __div__(self, other): + if isinstance(other, Fraction): + return Fraction(self.num * other.denom, + self.denom * other.num) + elif isinstance(other, int): + return Fraction(self.num, self.denom * other) + return TypeError + + def __rdiv__(self, other): + if isinstance(other, int): + return Fraction(self.denom * other, self.num) + return TypeError + + def __float__(self): + return float(self.num) / float(self.denom) + +try: + dlsave = sys.getdlopenflags() + from DLFCN import RTLD_GLOBAL, RTLD_LAZY +except AttributeError: + # windows doesn't have sys.getdlopenflags() + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 +except ImportError: + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 + import os + osname = os.uname()[0] + if osname == 'Linux' or osname == 'SunOS' or osname == 'FreeBSD' or osname == 'GNU/kFreeBSD' or osname == 'GNU': + machinename = os.uname()[4] + if machinename == 'mips' or machinename == 'mips64': + RTLD_GLOBAL = 0x4 + RTLD_LAZY = 0x1 + else: + RTLD_GLOBAL = 0x100 + RTLD_LAZY = 0x1 + elif osname == 'Darwin': + RTLD_GLOBAL = 0x8 + RTLD_LAZY = 0x1 + del os +except: + RTLD_GLOBAL = -1 + RTLD_LAZY = -1 + +if RTLD_GLOBAL != -1 and RTLD_LAZY != -1: + sys.setdlopenflags(RTLD_LAZY | RTLD_GLOBAL) + +try: + import libxml2 +except: + pass + +from _gst import * +import interfaces + +if RTLD_GLOBAL != -1 and RTLD_LAZY != -1: + sys.setdlopenflags(dlsave) +del sys + +version = get_gst_version + +# Fixes for API cleanups that would cause an API breakage. +# See #446674 + +import warnings +if locals().has_key("parse_bin_from_description"): + def gst_parse_bin_from_description(*args, **kwargs): + warnings.warn("gst_parse_bin_from_description() is deprecated, please use parse_bin_from_description instead", + DeprecationWarning) + return parse_bin_from_description(*args, **kwargs) + +if locals().has_key("message_new_buffering"): + def gst_message_new_buffering(*args, **kwargs): + warnings.warn("gst_message_new_buffering() is deprecated, please use message_new_buffering() instead", + DeprecationWarning) + return message_new_buffering(*args, **kwargs) + +# this restores previously installed importhooks, so we don't interfere +# with other people's module importers +# it also clears out the module completely as if it were never loaded, +# so that if anyone else imports gstltihooks the hooks get installed +if gstlibtoolimporter is not None: + import audio + import pbutils + import tag + import video + gstlibtoolimporter.uninstall() + import sys + del sys.modules["gstlibtoolimporter"] diff --git a/gst/arg-types.py b/gst/arg-types.py new file mode 100644 index 0000000..bf45607 --- /dev/null +++ b/gst/arg-types.py @@ -0,0 +1,418 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python +# Copyright (C) 2002 David I. Lehn +# 2004 Johan Dahlin +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: David I. Lehn + +from argtypes import UInt64Arg, Int64Arg, PointerArg, ArgMatcher, ArgType, matcher +from reversewrapper import Parameter, ReturnType, GBoxedParam, GBoxedReturn, IntParam, IntReturn + +class XmlNodeArg(ArgType): + """libxml2 node generator""" + + names = {"xobj":"xmlNode", + "xptr":"xmlNodePtr", + "xwrap":"libxml_xmlNodePtrWrap"} + + parm = (' if(xml == NULL) return NULL;\n' + ' xobj = PyObject_GetAttrString(xml, "%(xobj)s");\n' + ' if(!PyObject_IsInstance(py%(name)s, xobj)) {\n' + ' PyErr_Clear();\n' + ' PyErr_SetString(PyExc_RuntimeError,"%(name)s is not a %(xobj)s instance");\n' + ' Py_DECREF(xobj);Py_DECREF(xml);\n' + ' return NULL;\n' + ' }\n' + ' o = PyObject_GetAttrString(py%(name)s, "_o");\n' + ' %(name)s = PyCObject_AsVoidPtr(o);\n') + parmp = (' Py_DECREF(o); Py_DECREF(xobj);Py_DECREF(xml);\n') + + ret = (' if(xml == NULL) return NULL;\n') + retp = (' xargs = PyTuple_New(1);\n' + ' xobj = PyObject_GetAttrString(xml, "%(xobj)s");\n' + ' o = %(xwrap)s(ret);\n' + ' PyTuple_SetItem(xargs, 0, o);\n' + ' return PyInstance_New(xobj, xargs, PyDict_New());\n') + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + info.varlist.add('PyObject', '*xml = _gst_get_libxml2_module()') + info.varlist.add('PyObject', '*o') + info.varlist.add('PyObject', '*xobj') + info.varlist.add('PyObject', '*py' + pname) + info.varlist.add(self.names["xptr"], pname) + #if pnull: + info.add_parselist('O', ['&py'+pname], [pname]) + info.arglist.append(pname) + self.names["name"] = pname + info.codebefore.append(self.parm % self.names) + info.codeafter.append(self.parmp % self.names); + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('PyObject', '*xml = _gst_get_libxml2_module()') + info.varlist.add('PyObject', '*xargs') + info.varlist.add('PyObject', '*xobj') + info.varlist.add('PyObject', '*o') + info.varlist.add(self.names["xptr"], 'ret') + info.codebefore.append(self.ret % self.names) + info.codeafter.append(self.retp % self.names) + +class XmlDocArg(XmlNodeArg): + """libxml2 doc generator""" + names = {"xobj":"xmlDoc", + "xptr":"xmlDocPtr", + "xwrap":"libxml_xmlDocPtrWrap"} + +class GstCapsArg(ArgType): + """GstCaps node generator""" + + before = (' %(name)s = pygst_caps_from_pyobject (py_%(name)s, %(namecopy)s);\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n') + beforenull = (' if (py_%(name)s == Py_None || py_%(name)s == NULL)\n' + ' %(name)s = NULL;\n' + ' else\n' + ' ' + before) + after = (' if (%(name)s && %(name)s_is_copy)\n' + ' gst_caps_unref (%(name)s);\n') + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if ptype == 'const-GstCaps*': + self.write_const_param(pname, pdflt, pnull, info) + elif ptype == 'GstCaps*': + self.write_normal_param(pname, pdflt, pnull, info) + else: + raise RuntimeError, "write_param not implemented for %s" % ptype + + def write_const_param(self, pname, pdflt, pnull, info): + if pdflt: + assert pdflt == 'NULL' + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + else: + info.varlist.add('PyObject', '*py_' + pname) + info.varlist.add('GstCaps', '*'+pname) + info.varlist.add('gboolean', pname+'_is_copy') + info.add_parselist('O', ['&py_'+pname], [pname]) + info.arglist.append(pname) + if pnull: + info.codebefore.append (self.beforenull % { 'name' : pname, 'namecopy' : '&'+pname+'_is_copy' }) + else: + info.codebefore.append (self.before % { 'name' : pname, 'namecopy' : '&'+pname+'_is_copy' }) + info.codeafter.append (self.after % { 'name' : pname, 'namecopy' : '&'+pname+'_is_copy' }) + + def write_normal_param(self, pname, pdflt, pnull, info): + if pdflt: + assert pdflt == 'NULL' + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + else: + info.varlist.add('PyObject', '*py_' + pname) + info.varlist.add('GstCaps', '*'+pname) + info.add_parselist('O', ['&py_'+pname], [pname]) + info.arglist.append(pname) + if pnull: + info.codebefore.append (self.beforenull % { 'name' : pname, 'namecopy' : 'NULL' }) + else: + info.codebefore.append (self.before % { 'name' : pname, 'namecopy' : 'NULL' }) + + def write_return(self, ptype, ownsreturn, info): + if ptype == 'GstCaps*': + info.varlist.add('GstCaps', '*ret') + copyval = 'FALSE' + elif ptype == 'const-GstCaps*': + info.varlist.add('const GstCaps', '*ret') + copyval = 'TRUE' + else: + raise RuntimeError, "write_return not implemented for %s" % ptype + info.codeafter.append(' return pyg_boxed_new (GST_TYPE_CAPS, (GstCaps*) ret, '+copyval+', TRUE);') + +class GstIteratorArg(ArgType): + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GstIterator', '*ret') + info.codeafter.append(' return pygst_iterator_new(ret);') + +class GstMiniObjectArg(ArgType): + + before = (' %(name)s = %(macro)s(pygstminiobject_get (py_%(name)s));\n' + ' if (PyErr_Occurred())\n' + ' return NULL;\n') + + def write_param(self, ptype, pname, pdflt, pnull, keeprefcount, info): + if pdflt: + assert pdflt == 'NULL' + info.varlist.add('PyObject', '*py_' + pname + ' = NULL') + else: + info.varlist.add('PyObject', '*py_' + pname) + + #Converts 'GstBuffer*' to 'GstBuffer' + #and const-GstBuffer* to 'const GstBuffer' + info.varlist.add(ptype.replace('-',' ').replace('*',''), '*'+pname) + + if ptype in ['GstBuffer*', 'const-GstBuffer*']: + info.codebefore.append(self.before % { 'name' : pname, 'macro' : 'GST_BUFFER' }) + + elif ptype in ['GstMessage*', 'const-GstMessage*']: + info.codebefore.append(self.before % { 'name' : pname, 'macro' : 'GST_MESSAGE' }) + + elif ptype in ['GstEvent*', 'const-GstEvent*']: + info.codebefore.append(self.before % { 'name' : pname, 'macro' : 'GST_EVENT' }) + + elif ptype in ['GstQuery*', 'const-GstQuery*']: + info.codebefore.append(self.before % { 'name' : pname, 'macro' : 'GST_QUERY' }) + + else: + raise RuntimeError, "write_param not implemented for %s" % ptype + + info.add_parselist('O', ['&py_'+pname], [pname]) + info.arglist.append(pname) + + def write_return(self, ptype, ownsreturn, info): + info.varlist.add('GstMiniObject', '*ret') + info.codeafter.append(' return pygstminiobject_new((GstMiniObject *) ret);') + +class GstMiniObjectParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'GstMiniObject *') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name) + self.wrapper.write_code(code=("if (%s) {\n" + " py_%s = pygstminiobject_new((GstMiniObject *) %s);\n" + " gst_mini_object_unref ((GstMiniObject *) %s);\n" + "} else {\n" + " Py_INCREF(Py_None);\n" + " py_%s = Py_None;\n" + "}" + % (self.name, self.name, self.name, self.name, self.name)), + cleanup=("gst_mini_object_ref ((GstMiniObject *) %s); Py_DECREF(py_%s);" % (self.name, self.name))) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +matcher.register_reverse('GstMiniObject*', GstMiniObjectParam) + +class GstMiniObjectReturn(ReturnType): + + def get_c_type(self): + return self.props.get('c_type', 'GstMiniObject *') + + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.write_code("retval = (%s) pygstminiobject_get(py_retval);" + % self.get_c_type()) + self.wrapper.write_code("gst_mini_object_ref((GstMiniObject *) retval);") + +matcher.register_reverse_ret('GstMiniObject*', GstMiniObjectReturn) + +class GstCapsParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'GstCaps *') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s = NULL;" % self.name) + self.wrapper.write_code(code=("if (%s)\n" + " py_%s = pyg_boxed_new (GST_TYPE_CAPS, %s, FALSE, TRUE);\n" + "else {\n" + " Py_INCREF(Py_None);\n" + " py_%s = Py_None;\n" + "}" + % (self.name, self.name, self.name, self.name)), + cleanup=("gst_caps_ref(%s);\nPy_DECREF(py_%s);" % (self.name, self.name))) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +matcher.register_reverse('GstCaps*', GstCapsParam) + +class GstCapsReturn(ReturnType): + + def get_c_type(self): + return self.props.get('c_type', 'GstCaps *') + + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.write_code("retval = (%s) pygst_caps_from_pyobject (py_retval, NULL);" + % self.get_c_type()) +## self.wrapper.write_code("gst_mini_object_ref((GstMiniObject *) retval);") + +matcher.register_reverse_ret('GstCaps*', GstCapsReturn) + + +class Int64Param(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'gint64') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyLong_FromLongLong(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class Int64Return(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'gint64') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXINT;") + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyLong_Check(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");') + self.wrapper.write_code("retval = PyLong_AsLongLong(py_retval);") + +class UInt64Param(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'guint64') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyLong_FromUnsignedLongLong(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class UInt64Return(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'guint64') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXINT;") + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyLong_Check(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");') + self.wrapper.write_code("retval = PyLong_AsUnsignedLongLongMask(py_retval);") + +class ULongParam(Parameter): + + def get_c_type(self): + return self.props.get('c_type', 'gulong') + + def convert_c2py(self): + self.wrapper.add_declaration("PyObject *py_%s;" % self.name) + self.wrapper.write_code(code=("py_%s = PyLong_FromUnsignedLong(%s);" % + (self.name, self.name)), + cleanup=("Py_DECREF(py_%s);" % self.name)) + self.wrapper.add_pyargv_item("py_%s" % self.name) + +class ULongReturn(ReturnType): + def get_c_type(self): + return self.props.get('c_type', 'gulong') + def write_decl(self): + self.wrapper.add_declaration("%s retval;" % self.get_c_type()) + def write_error_return(self): + self.wrapper.write_code("return -G_MAXINT;") + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyLong_Check(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");') + self.wrapper.write_code("retval = PyLong_AsUnsignedLongMask(py_retval);") + +class ConstStringReturn(ReturnType): + + def get_c_type(self): + return "const gchar *" + + def write_decl(self): + self.wrapper.add_declaration("const gchar *retval;") + + def write_error_return(self): + self.wrapper.write_code("return NULL;") + + def write_conversion(self): + self.wrapper.write_code( + code=None, + failure_expression="!PyString_Check(py_retval)", + failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be a string");') + self.wrapper.write_code("retval = g_strdup(PyString_AsString(py_retval));") + +class StringArrayArg(ArgType): + """Arg type for NULL-terminated string pointer arrays (GStrv, aka gchar**).""" + def write_return(self, ptype, ownsreturn, info): + if ownsreturn: + raise NotImplementedError () + else: + info.varlist.add("gchar", "**ret") + info.codeafter.append(" if (ret) {\n" + " guint size = g_strv_length(ret);\n" + " PyObject *py_ret = PyTuple_New(size);\n" + " gint i;\n" + " for (i = 0; i < size; i++)\n" + " PyTuple_SetItem(py_ret, i,\n" + " PyString_FromString(ret[i]));\n" + " return py_ret;\n" + " }\n" + " return PyTuple_New (0);\n") + + +matcher.register('GstClockTime', UInt64Arg()) +matcher.register('GstElementFactoryListType', UInt64Arg()) +matcher.register('GstClockTimeDiff', Int64Arg()) +matcher.register('xmlNodePtr', XmlNodeArg()) +matcher.register('xmlDocPtr', XmlDocArg()) +matcher.register('GstCaps', GstCapsArg()) #FIXME: does this work? +matcher.register('GstCaps*', GstCapsArg()) #FIXME: does this work? +matcher.register('const-GstCaps*', GstCapsArg()) +matcher.register('GstIterator*', GstIteratorArg()) + +arg = PointerArg('gpointer', 'G_TYPE_POINTER') +matcher.register('GstClockID', arg) + +for typename in ["GstPlugin", "GstStructure", "GstTagList", "GError", "GstDate", "GstSegment"]: + matcher.register_reverse(typename, GBoxedParam) + matcher.register_reverse_ret(typename, GBoxedReturn) + +for typename in ["GstBuffer*", "const-GstBuffer*", "GstEvent*", "const-GstEvent*", "GstMessage*", "const-GstMessage*", "GstQuery*", "const-GstQuery*"]: + matcher.register(typename, GstMiniObjectArg()) + matcher.register_reverse(typename, GstMiniObjectParam) + matcher.register_reverse_ret(typename, GstMiniObjectReturn) + +for typename in ["gint64", "GstClockTimeDiff"]: + matcher.register_reverse(typename, Int64Param) + matcher.register_reverse_ret(typename, Int64Return) + +for typename in ["guint64", "GstClockTime", "GstElementFactoryListType"]: + matcher.register_reverse(typename, UInt64Param) + matcher.register_reverse_ret(typename, UInt64Return) + +matcher.register_reverse_ret("const-gchar*", ConstStringReturn) + +matcher.register_reverse("GType", IntParam) +matcher.register_reverse_ret("GType", IntReturn) + +matcher.register_reverse("gulong", ULongParam) +matcher.register_reverse_ret("gulong", ULongReturn) + +matcher.register("GStrv", StringArrayArg()) + +del arg diff --git a/gst/audio.defs b/gst/audio.defs new file mode 100644 index 0000000..2385ebb --- /dev/null +++ b/gst/audio.defs @@ -0,0 +1,872 @@ +;; -*- scheme -*- +; object definitions ... +(define-object AudioClock + (in-module "Gst") + (parent "GstSystemClock") + (c-name "GstAudioClock") + (gtype-id "GST_TYPE_AUDIO_CLOCK") +) + +(define-object AudioFilter + (in-module "Gst") + (parent "GstBaseTransform") + (c-name "GstAudioFilter") + (gtype-id "GST_TYPE_AUDIO_FILTER") +) + +(define-object BaseAudioSink + (in-module "Gst") + (parent "GstBaseSink") + (c-name "GstBaseAudioSink") + (gtype-id "GST_TYPE_BASE_AUDIO_SINK") +) + +(define-object AudioSink + (in-module "Gst") + (parent "GstBaseAudioSink") + (c-name "GstAudioSink") + (gtype-id "GST_TYPE_AUDIO_SINK") +) + +;; (define-object BaseAudioSrc +;; (in-module "Gst") +;; (parent "GstPushSrc") +;; (c-name "GstBaseAudioSrc") +;; (gtype-id "GST_TYPE_BASE_AUDIO_SRC") +;; ) + +;; (define-object AudioSrc +;; (in-module "Gst") +;; (parent "GstBaseAudioSrc") +;; (c-name "GstAudioSrc") +;; (gtype-id "GST_TYPE_AUDIO_SRC") +;; ) + +(define-object RingBuffer + (in-module "Gst") + (parent "GstObject") + (c-name "GstRingBuffer") + (gtype-id "GST_TYPE_RING_BUFFER") +) + +;; Enumerations and flags ... + +(define-enum BaseAudioSinkSlaveMethod + (in-module "Gst") + (c-name "GstBaseAudioSinkSlaveMethod") + (gtype-id "GST_TYPE_BASE_AUDIO_SINK_SLAVE_METHOD") + (values + '("resample" "GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE") + '("skew" "GST_BASE_AUDIO_SINK_SLAVE_SKEW") + '("none" "GST_BASE_AUDIO_SINK_SLAVE_NONE") + ) +) + +(define-enum BaseAudioSrcSlaveMethod + (in-module "Gst") + (c-name "GstBaseAudioSrcSlaveMethod") + (gtype-id "GST_TYPE_BASE_AUDIO_SRC_SLAVE_METHOD") + (values + '("resample" "GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE") + '("retimestamp" "GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP") + '("skew" "GST_BASE_AUDIO_SRC_SLAVE_SKEW") + '("none" "GST_BASE_AUDIO_SRC_SLAVE_NONE") + ) +) + +(define-enum RingBufferState + (in-module "Gst") + (c-name "GstRingBufferState") + (gtype-id "GST_TYPE_RING_BUFFER_STATE") + (values + '("stopped" "GST_RING_BUFFER_STATE_STOPPED") + '("paused" "GST_RING_BUFFER_STATE_PAUSED") + '("started" "GST_RING_BUFFER_STATE_STARTED") + ) +) + +(define-enum RingBufferSegState + (in-module "Gst") + (c-name "GstRingBufferSegState") + (gtype-id "GST_TYPE_RING_BUFFER_SEG_STATE") + (values + '("invalid" "GST_SEGSTATE_INVALID") + '("empty" "GST_SEGSTATE_EMPTY") + '("filled" "GST_SEGSTATE_FILLED") + '("partial" "GST_SEGSTATE_PARTIAL") + ) +) + +(define-enum BufferFormatType + (in-module "Gst") + (c-name "GstBufferFormatType") + (gtype-id "GST_TYPE_BUFFER_FORMAT_TYPE") + (values + '("linear" "GST_BUFTYPE_LINEAR") + '("float" "GST_BUFTYPE_FLOAT") + '("mu-law" "GST_BUFTYPE_MU_LAW") + '("a-law" "GST_BUFTYPE_A_LAW") + '("ima-adpcm" "GST_BUFTYPE_IMA_ADPCM") + '("mpeg" "GST_BUFTYPE_MPEG") + '("gsm" "GST_BUFTYPE_GSM") + '("iec958" "GST_BUFTYPE_IEC958") + '("ac3" "GST_BUFTYPE_AC3") + '("eac3" "GST_BUFTYPE_EAC3") + '("dts" "GST_BUFTYPE_DTS") + ) +) + +(define-enum BufferFormat + (in-module "Gst") + (c-name "GstBufferFormat") + (gtype-id "GST_TYPE_BUFFER_FORMAT") + (values + '("unknown" "GST_UNKNOWN") + '("s8" "GST_S8") + '("u8" "GST_U8") + '("s16-le" "GST_S16_LE") + '("s16-be" "GST_S16_BE") + '("u16-le" "GST_U16_LE") + '("u16-be" "GST_U16_BE") + '("s24-le" "GST_S24_LE") + '("s24-be" "GST_S24_BE") + '("u24-le" "GST_U24_LE") + '("u24-be" "GST_U24_BE") + '("s32-le" "GST_S32_LE") + '("s32-be" "GST_S32_BE") + '("u32-le" "GST_U32_LE") + '("u32-be" "GST_U32_BE") + '("s24-3le" "GST_S24_3LE") + '("s24-3be" "GST_S24_3BE") + '("u24-3le" "GST_U24_3LE") + '("u24-3be" "GST_U24_3BE") + '("s20-3le" "GST_S20_3LE") + '("s20-3be" "GST_S20_3BE") + '("u20-3le" "GST_U20_3LE") + '("u20-3be" "GST_U20_3BE") + '("s18-3le" "GST_S18_3LE") + '("s18-3be" "GST_S18_3BE") + '("u18-3le" "GST_U18_3LE") + '("u18-3be" "GST_U18_3BE") + '("float32-le" "GST_FLOAT32_LE") + '("float32-be" "GST_FLOAT32_BE") + '("float64-le" "GST_FLOAT64_LE") + '("float64-be" "GST_FLOAT64_BE") + '("mu-law" "GST_MU_LAW") + '("a-law" "GST_A_LAW") + '("ima-adpcm" "GST_IMA_ADPCM") + '("mpeg" "GST_MPEG") + '("gsm" "GST_GSM") + '("iec958" "GST_IEC958") + '("ac3" "GST_AC3") + '("eac3" "GST_EAC3") + '("dts" "GST_DTS") + ) +) + +(define-enum AudioChannelPosition + (in-module "Gst") + (c-name "GstAudioChannelPosition") + (gtype-id "GST_TYPE_AUDIO_CHANNEL_POSITION") + (values + '("invalid" "GST_AUDIO_CHANNEL_POSITION_INVALID") + '("front-mono" "GST_AUDIO_CHANNEL_POSITION_FRONT_MONO") + '("front-left" "GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT") + '("front-right" "GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT") + '("rear-center" "GST_AUDIO_CHANNEL_POSITION_REAR_CENTER") + '("rear-left" "GST_AUDIO_CHANNEL_POSITION_REAR_LEFT") + '("rear-right" "GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT") + '("lfe" "GST_AUDIO_CHANNEL_POSITION_LFE") + '("front-center" "GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER") + '("front-left-of-center" "GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER") + '("front-right-of-center" "GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER") + '("side-left" "GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT") + '("side-right" "GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT") + '("none" "GST_AUDIO_CHANNEL_POSITION_NONE") + '("num" "GST_AUDIO_CHANNEL_POSITION_NUM") + ) +) + + +;; From audio.h + +(define-function frame_byte_size + (c-name "gst_audio_frame_byte_size") + (return-type "int") + (parameters + '("GstPad*" "pad") + ) +) + +(define-function frame_length + (c-name "gst_audio_frame_length") + (return-type "long") + (parameters + '("GstPad*" "pad") + '("GstBuffer*" "buf") + ) +) + +(define-function duration_from_pad_buffer + (c-name "gst_audio_duration_from_pad_buffer") + (return-type "GstClockTime") + (parameters + '("GstPad*" "pad") + '("GstBuffer*" "buf") + ) +) + +(define-function is_buffer_framed + (c-name "gst_audio_is_buffer_framed") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + '("GstBuffer*" "buf") + ) +) + +(define-function buffer_clip + (c-name "gst_audio_buffer_clip") + (return-type "GstBuffer*") + (parameters + '("GstBuffer*" "buffer") + '("GstSegment*" "segment") + '("gint" "rate") + '("gint" "frame_size") + ) +) + + + +;; From gstaudioclock.h + +(define-function gst_audio_clock_get_type + (c-name "gst_audio_clock_get_type") + (return-type "GType") +) + +(define-function gst_audio_clock_new + (c-name "gst_audio_clock_new") + (is-constructor-of "GstAudioClock") + (return-type "GstClock*") + (parameters + '("gchar*" "name") + '("GstAudioClockGetTimeFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-function audio_clock_new_full + (c-name "gst_audio_clock_new_full") + (return-type "GstClock*") + (parameters + '("const-gchar*" "name") + '("GstAudioClockGetTimeFunc" "func") + '("gpointer" "user_data") + '("GDestroyNotify" "destroy_notify") + ) +) + +(define-method reset + (of-object "GstAudioClock") + (c-name "gst_audio_clock_reset") + (return-type "none") + (parameters + '("GstClockTime" "time") + ) +) + +(define-function clock_get_time + (c-name "gst_audio_clock_get_time") + (return-type "GstClockTime") + (parameters + '("GstClock*" "clock") + ) +) + +(define-function clock_adjust + (c-name "gst_audio_clock_adjust") + (return-type "GstClockTime") + (parameters + '("GstClock*" "clock") + '("GstClockTime" "time") + ) +) + +(define-function audio_clock_invalidate + (c-name "gst_audio_clock_invalidate") + (return-type "none") + (parameters + '("GstClock*" "clock") + ) +) + +;; From gstaudiofilter.h + +(define-function gst_audio_filter_get_type + (c-name "gst_audio_filter_get_type") + (return-type "GType") +) + +(define-method add_pad_templates + (of-object "GstAudioFilterClass") + (c-name "gst_audio_filter_class_add_pad_templates") + (return-type "none") + (parameters + '("const-GstCaps*" "allowed_caps") + ) +) + +(define-virtual setup + (of-object "GstAudioFilter") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "format") + ) +) + +;; From gstaudiosink.h + +(define-function gst_audio_sink_get_type + (c-name "gst_audio_sink_get_type") + (return-type "GType") +) + +(define-virtual open + (of-object "GstAudioSink") + (return-type "gboolean") +) + +(define-virtual prepare + (of-object "GstAudioSink") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-virtual unprepare + (of-object "GstAudioSink") + (return-type "gboolean") +) + +(define-virtual close + (of-object "GstAudioSink") + (return-type "gboolean") +) + +(define-virtual write + (of-object "GstAudioSink") + (return-type "guint") + (parameters + '("gpointer" "data") + '("guint" "length") + ) +) + +(define-virtual delay + (of-object "GstAudioSink") + (return-type "guint") +) + +(define-virtual reset + (of-object "GstAudioSink") + (return-type "none") +) + +;; From gstaudiosrc.h + +(define-function gst_audio_src_get_type + (c-name "gst_audio_src_get_type") + (return-type "GType") +) + + + +;; From gstbaseaudiosink.h + +(define-function gst_base_audio_sink_get_type + (c-name "gst_base_audio_sink_get_type") + (return-type "GType") +) + +(define-method create_ringbuffer + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_create_ringbuffer") + (return-type "GstRingBuffer*") +) + +(define-virtual create_ringbuffer + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_create_ringbuffer") + (return-type "GstRingBuffer*") +) +(define-method set_provide_clock + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_set_provide_clock") + (return-type "none") + (parameters + '("gboolean" "provide") + ) +) + +(define-method get_provide_clock + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_get_provide_clock") + (return-type "gboolean") +) + +(define-method set_slave_method + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_set_slave_method") + (return-type "none") + (parameters + '("GstBaseAudioSinkSlaveMethod" "method") + ) +) + +(define-method get_slave_method + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_get_slave_method") + (return-type "GstBaseAudioSinkSlaveMethod") +) + +(define-method set_drift_tolerance + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_set_drift_tolerance") + (return-type "none") + (parameters + '("gint64" "drift_tolerance") + ) +) + +(define-method get_drift_tolerance + (of-object "GstBaseAudioSink") + (c-name "gst_base_audio_sink_get_drift_tolerance") + (return-type "gint64") +) + + + +;; From gstbaseaudiosrc.h + +(define-function gst_base_audio_src_get_type + (c-name "gst_base_audio_src_get_type") + (return-type "GType") +) + +(define-method create_ringbuffer + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_create_ringbuffer") + (return-type "GstRingBuffer*") +) + +(define-virtual create_ringbuffer + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_create_ringbuffer") + (return-type "GstRingBuffer*") +) + +(define-method set_provide_clock + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_set_provide_clock") + (return-type "none") + (parameters + '("gboolean" "provide") + ) +) + +(define-method get_provide_clock + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_get_provide_clock") + (return-type "gboolean") +) + +(define-method set_slave_method + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_set_slave_method") + (return-type "none") + (parameters + '("GstBaseAudioSrcSlaveMethod" "method") + ) +) + +(define-method get_slave_method + (of-object "GstBaseAudioSrc") + (c-name "gst_base_audio_src_get_slave_method") + (return-type "GstBaseAudioSrcSlaveMethod") +) + + + +;; From gstringbuffer.h + +(define-function gst_ring_buffer_get_type + (c-name "gst_ring_buffer_get_type") + (return-type "GType") +) + +(define-method set_callback + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_set_callback") + (return-type "none") + (parameters + '("GstRingBufferCallback" "cb") + '("gpointer" "user_data") + ) +) + +(define-function ring_buffer_parse_caps + (c-name "gst_ring_buffer_parse_caps") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "spec") + '("GstCaps*" "caps") + ) +) + +(define-function ring_buffer_debug_spec_caps + (c-name "gst_ring_buffer_debug_spec_caps") + (return-type "none") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-function ring_buffer_debug_spec_buff + (c-name "gst_ring_buffer_debug_spec_buff") + (return-type "none") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-method convert + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_convert") + (return-type "gboolean") + (parameters + '("GstFormat" "src_fmt") + '("gint64" "src_val") + '("GstFormat" "dest_fmt") + '("gint64*" "dest_val") + ) +) + +(define-method open_device + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_open_device") + (return-type "gboolean") +) + +(define-method close_device + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_close_device") + (return-type "gboolean") +) + +(define-method device_is_open + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_device_is_open") + (return-type "gboolean") +) + +(define-method acquire + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_acquire") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-method release + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_release") + (return-type "gboolean") +) + +(define-method is_acquired + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_is_acquired") + (return-type "gboolean") +) + +(define-method activate + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_activate") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-method is_active + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_is_active") + (return-type "gboolean") +) + +(define-method set_flushing + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method start + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_start") + (return-type "gboolean") +) + +(define-method pause + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_pause") + (return-type "gboolean") +) + +(define-method stop + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_stop") + (return-type "gboolean") +) + +(define-method delay + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_delay") + (return-type "guint") +) + +(define-method samples_done + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_samples_done") + (return-type "guint64") +) + +(define-method set_sample + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_set_sample") + (return-type "none") + (parameters + '("guint64" "sample") + ) +) + +(define-method clear_all + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_clear_all") + (return-type "none") +) + +(define-method commit + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_commit") + (return-type "guint") + (parameters + '("guint64" "sample") + '("guchar*" "data") + '("guint" "len") + ) +) + +(define-method commit_full + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_commit_full") + (return-type "guint") + (parameters + '("guint64*" "sample") + '("guchar*" "data") + '("gint" "in_samples") + '("gint" "out_samples") + '("gint*" "accum") + ) +) + +(define-method read + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_read") + (return-type "guint") + (parameters + '("guint64" "sample") + '("guchar*" "data") + '("guint" "len") + ) +) + +(define-method prepare_read + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_prepare_read") + (return-type "gboolean") + (parameters + '("gint*" "segment") + '("guint8**" "readptr") + '("gint*" "len") + ) +) + +(define-method clear + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_clear") + (return-type "none") + (parameters + '("gint" "segment") + ) +) + +(define-method advance + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_advance") + (return-type "none") + (parameters + '("guint" "advance") + ) +) + +(define-method may_start + (of-object "GstRingBuffer") + (c-name "gst_ring_buffer_may_start") + (return-type "none") + (parameters + '("gboolean" "allowed") + ) +) + +(define-virtual open_device + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual acquire + (of-object "GstRingBuffer") + (return-type "gboolean") + (parameters + '("GstRingBufferSpec*" "spec") + ) +) + +(define-virtual release + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual close_device + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual start + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual pause + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual resume + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual stop + (of-object "GstRingBuffer") + (return-type "gboolean") +) + +(define-virtual delay + (of-object "GstRingBuffer") + (return-type "guint") +) + +(define-virtual activate + (of-object "GstRingBuffer") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +;; From mixerutils.h + +(define-function default_registry_mixer_filter + (c-name "gst_audio_default_registry_mixer_filter") + (return-type "GList*") + (parameters + '("GstAudioMixerFilterFunc" "filter_func") + '("gboolean" "first") + '("gpointer" "user_data") + ) +) + + + +;; From multichannel-enumtypes.h + +(define-function gst_audio_channel_position_get_type + (c-name "gst_audio_channel_position_get_type") + (return-type "GType") +) + + + +;; From multichannel.h + +(define-function get_channel_positions + (c-name "gst_audio_get_channel_positions") + (return-type "GstAudioChannelPosition*") + (parameters + '("GstStructure*" "str") + ) +) + +(define-function set_channel_positions + (c-name "gst_audio_set_channel_positions") + (return-type "none") + (parameters + '("GstStructure*" "str") + '("const-GstAudioChannelPosition*" "pos") + ) +) + +(define-function set_structure_channel_positions_list + (c-name "gst_audio_set_structure_channel_positions_list") + (return-type "none") + (parameters + '("GstStructure*" "str") + '("const-GstAudioChannelPosition*" "pos") + '("gint" "num_positions") + ) +) + +(define-function set_caps_channel_positions_list + (c-name "gst_audio_set_caps_channel_positions_list") + (return-type "none") + (parameters + '("GstCaps*" "caps") + '("const-GstAudioChannelPosition*" "pos") + '("gint" "num_positions") + ) +) + +(define-function fixate_channel_positions + (c-name "gst_audio_fixate_channel_positions") + (return-type "GstAudioChannelPosition*") + (parameters + '("GstStructure*" "str") + ) +) + +(define-function check_channel_positions + (c-name "gst_audio_check_channel_positions") + (return-type "gboolean") + (parameters + '("const-GstAudioChannelPosition*" "pos") + '("guint" "channels") + ) +) + + diff --git a/gst/audio.override b/gst/audio.override new file mode 100644 index 0000000..f252346 --- /dev/null +++ b/gst/audio.override @@ -0,0 +1,72 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +%% +headers + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pygstminiobject.h" +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +%% +modulename gst.audio +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Pad as PyGstPad_Type +import gst.Buffer as PyGstBuffer_Type +import gst.Message as PyGstMessage_Type +import gst.SystemClock as PyGstSystemClock_Type +import gst.BaseTransform as PyGstBaseTransform_Type +import gst.BaseSink as PyGstBaseSink_Type +import gst.Clock as PyGstClock_Type +%% +include + gstversion.override +%% +ignore-glob + _* + *init + *_free + *_get_type diff --git a/gst/audiomodule.c b/gst/audiomodule.c new file mode 100644 index 0000000..eeab97e --- /dev/null +++ b/gst/audiomodule.c @@ -0,0 +1,58 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include +#include +#include "pygst.h" + +void pyaudio_register_classes (PyObject * d); +void pyaudio_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pyaudio_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for python code */ + +DL_EXPORT (void) +initaudio (void) +{ + PyObject *m, *d; + + init_pygobject (); + pygst_init (); + + m = Py_InitModule ("audio", pyaudio_functions); + d = PyModule_GetDict (m); + + pyaudio_register_classes (d); + pyaudio_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.audio"); + } +} diff --git a/gst/base.defs b/gst/base.defs new file mode 100644 index 0000000..16aa692 --- /dev/null +++ b/gst/base.defs @@ -0,0 +1,1164 @@ +;; -*- scheme -*- +; object definitions ... +(define-object Adapter + (in-module "Gst") + (parent "GObject") + (c-name "GstAdapter") + (gtype-id "GST_TYPE_ADAPTER") +) + +(define-object BaseSink + (in-module "Gst") + (parent "GstElement") + (c-name "GstBaseSink") + (gtype-id "GST_TYPE_BASE_SINK") +) + +(define-object BaseSrc + (in-module "Gst") + (parent "GstElement") + (c-name "GstBaseSrc") + (gtype-id "GST_TYPE_BASE_SRC") +) + +(define-object BaseTransform + (in-module "Gst") + (parent "GstElement") + (c-name "GstBaseTransform") + (gtype-id "GST_TYPE_BASE_TRANSFORM") +) + +(define-object CollectPads + (in-module "Gst") + (parent "GstObject") + (c-name "GstCollectPads") + (gtype-id "GST_TYPE_COLLECT_PADS") +) + +(define-object DataQueue + (in-module "Gst") + (parent "GObject") + (c-name "GstDataQueue") + (gtype-id "GST_TYPE_DATA_QUEUE") +) + +; PushSrc doesn't work due to limitations in the code generator, so disable +;(define-object PushSrc +; (in-module "Gst") +; (parent "GstBaseSrc") +; (c-name "GstPushSrc") +; (gtype-id "GST_TYPE_PUSH_SRC") +;) + +;; Enumerations and flags ... + +; (define-flags BaseSrcFlags +; (in-module "Gst") +; (c-name "GstBaseSrcFlags") +; (gtype-id "GST_TYPE_BASE_SRC_FLAGS") +; (values +; '("started" "GST_BASE_SRC_STARTED") +; '("flag-last" "GST_BASE_SRC_FLAG_LAST") +; ) +; ) + + +;; From ../gstreamer/libs/gst/base/gstadapter.h + +(define-function gst_adapter_new + (c-name "gst_adapter_new") + (is-constructor-of "GstAdapter") + (return-type "GstAdapter*") +) + +(define-method clear + (of-object "GstAdapter") + (c-name "gst_adapter_clear") + (return-type "none") +) + +(define-method push + (of-object "GstAdapter") + (c-name "gst_adapter_push") + (return-type "none") + (parameters + '("GstBuffer*" "buf" (keep-refcount)) + ) +) + +(define-method peek + (of-object "GstAdapter") + (c-name "gst_adapter_peek") + (return-type "const-guint8*") + (parameters + '("guint" "size") + ) +) + +(define-method copy + (of-object "GstAdapter") + (c-name "gst_adapter_copy") + (return-type "none") + (parameters + '("guint8*" "dest") + '("guint" "offset") + '("guint" "size") + ) +) + +(define-method flush + (of-object "GstAdapter") + (c-name "gst_adapter_flush") + (return-type "none") + (parameters + '("guint" "flush") + ) +) + +(define-method take + (of-object "GstAdapter") + (c-name "gst_adapter_take") + (return-type "guint8*") + (caller-owns-return #t) + (parameters + '("guint" "nbytes") + ) +) + +(define-method take_buffer + (of-object "GstAdapter") + (c-name "gst_adapter_take_buffer") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint" "nbytes") + ) +) + +(define-method take_list + (of-object "GstAdapter") + (c-name "gst_adapter_take_list") + (return-type "GList*") + (parameters + '("guint" "nbytes") + ) +) + +(define-method available + (of-object "GstAdapter") + (c-name "gst_adapter_available") + (return-type "guint") +) + +(define-method available_fast + (of-object "GstAdapter") + (c-name "gst_adapter_available_fast") + (return-type "guint") +) + +(define-method prev_timestamp + (of-object "GstAdapter") + (c-name "gst_adapter_prev_timestamp") + (return-type "GstClockTime") + (parameters + '("guint64*" "distance") + ) +) + +(define-method masked_scan_uint32 + (of-object "GstAdapter") + (c-name "gst_adapter_masked_scan_uint32") + (return-type "guint") + (parameters + '("guint32" "mask") + '("guint32" "pattern") + '("guint" "offset") + '("guint" "size") + ) +) + +(define-method masked_scan_uint32_peek + (of-object "GstAdapter") + (c-name "gst_adapter_masked_scan_uint32_peek") + (return-type "guint") + (parameters + '("guint32" "mask") + '("guint32" "pattern") + '("guint" "offset") + '("guint" "size") + '("guint32*" "value") + ) +) + +(define-function gst_adapter_get_type + (c-name "gst_adapter_get_type") + (return-type "GType") +) + + + +;; From ../gstreamer/libs/gst/base/gstbasesink.h + +(define-function gst_base_sink_get_type + (c-name "gst_base_sink_get_type") + (return-type "GType") +) + +(define-method wait_preroll + (of-object "GstBaseSink") + (c-name "gst_base_sink_wait_preroll") + (return-type "GstFlowReturn") +) + +(define-method set_sync + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_sync") + (return-type "none") + (parameters + '("gboolean" "sync") + ) +) + +(define-method get_sync + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_sync") + (return-type "gboolean") +) + +(define-method set_max_lateness + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_max_lateness") + (return-type "none") + (parameters + '("gint64" "max_lateness") + ) +) + +(define-method get_max_lateness + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_max_lateness") + (return-type "gint64") +) + +(define-method set_qos_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_qos_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-method is_qos_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_is_qos_enabled") + (return-type "gboolean") +) + +(define-method set_async_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_async_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-method is_async_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_is_async_enabled") + (return-type "gboolean") +) + +(define-method set_ts_offset + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_ts_offset") + (return-type "none") + (parameters + '("GstClockTimeDiff" "offset") + ) +) + +(define-method get_ts_offset + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_ts_offset") + (return-type "GstClockTimeDiff") +) + +(define-method get_last_buffer + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_last_buffer") + (return-type "GstBuffer*") + (caller-owns-return #t) +) + +(define-method set_last_buffer_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_set_last_buffer_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-method is_last_buffer_enabled + (of-object "GstBaseSink") + (c-name "gst_base_sink_is_last_buffer_enabled") + (return-type "gboolean") +) + +(define-method query_latency + (of-object "GstBaseSink") + (c-name "gst_base_sink_query_latency") + (return-type "gboolean") + (parameters + '("gboolean*" "live") + '("gboolean*" "upstream_live") + '("GstClockTime*" "min_latency") + '("GstClockTime*" "max_latency") + ) +) + +(define-method get_latency + (of-object "GstBaseSink") + (c-name "gst_base_sink_get_latency") + (return-type "GstClockTime") +) + +(define-method wait_eos + (of-object "GstBaseSink") + (c-name "gst_base_sink_wait_eos") + (return-type "GstFlowReturn") + (parameters + '("GstClockTime" "time") + '("GstClockTimeDiff*" "jitter") + ) +) + +(define-virtual get_caps + (of-object "GstBaseSink") + (return-type "GstCaps*") +) + +(define-virtual set_caps + (of-object "GstBaseSink") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-virtual buffer_alloc + (of-object "GstBaseSink") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "size") + '("GstCaps*" "caps") + '("GstBuffer**" "buffer") + ) +) + +(define-virtual get_times + (of-object "GstBaseSink") + (return-type "none") + (parameters + '("GstBuffer*" "buffer") + '("GstClockTime*" "start") + '("GstClockTime*" "end") + ) +) + +(define-virtual start + (of-object "GstBaseSink") + (return-type "gboolean") +) + +(define-virtual stop + (of-object "GstBaseSink") + (return-type "gboolean") +) + +(define-virtual unlock + (of-object "GstBaseSink") + (return-type "gboolean") +) + +(define-virtual event + (of-object "GstBaseSink") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-virtual preroll + (of-object "GstBaseSink") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buffer") + ) +) + +(define-virtual render + (of-object "GstBaseSink") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buffer") + ) +) + +(define-virtual activate_pull + (of-object "GstBaseSink") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-virtual fixate + (of-object "GstBaseSink") + (return-type "none") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-virtual unlock_stop + (of-object "GstBaseSink") + (return-type "gboolean") +) + +;; From ../gstreamer/libs/gst/base/gstbasesrc.h + +(define-function gst_base_src_get_type + (c-name "gst_base_src_get_type") + (return-type "GType") +) + +(define-method wait_playing + (of-object "GstBaseSrc") + (c-name "gst_base_src_wait_playing") + (return-type "GstFlowReturn") +) + +(define-method set_live + (of-object "GstBaseSrc") + (c-name "gst_base_src_set_live") + (return-type "none") + (parameters + '("gboolean" "live") + ) +) + +(define-method is_live + (of-object "GstBaseSrc") + (c-name "gst_base_src_is_live") + (return-type "gboolean") +) + +(define-method set_format + (of-object "GstBaseSrc") + (c-name "gst_base_src_set_format") + (return-type "none") + (parameters + '("GstFormat" "format") + ) +) + +(define-method query_latency + (of-object "GstBaseSrc") + (c-name "gst_base_src_query_latency") + (return-type "gboolean") + (parameters + '("gboolean*" "live") + '("GstClockTime*" "min_latency") + '("GstClockTime*" "max_latency") + ) +) + +(define-method set_do_timestamp + (of-object "GstBaseSrc") + (c-name "gst_base_src_set_do_timestamp") + (return-type "none") + (parameters + '("gboolean" "timestamp") + ) +) + +(define-method get_do_timestamp + (of-object "GstBaseSrc") + (c-name "gst_base_src_get_do_timestamp") + (return-type "gboolean") +) + +(define-method new_seamless_segment + (of-object "GstBaseSrc") + (c-name "gst_base_src_new_seamless_segment") + (return-type "gboolean") + (parameters + '("gint64" "start") + '("gint64" "stop") + '("gint64" "position") + ) +) + +(define-virtual get_caps + (of-object "GstBaseSrc") + (return-type "GstCaps*") +) + +(define-virtual set_caps + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-virtual negotiate + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual newsegment + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual start + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual stop + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual get_times + (of-object "GstBaseSrc") + (return-type "none") + (parameters + '("GstBuffer*" "buffer") + '("GstClockTime*" "start") + '("GstClockTime*" "end") + ) +) + +(define-virtual get_size + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("guint64*" "size") + ) +) + +(define-virtual is_seekable + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual unlock + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual event + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-virtual create + (of-object "GstBaseSrc") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "size") + '("GstBuffer**" "buf") + ) +) + +(define-virtual do_seek + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstSegment*" "segment") + ) +) + +(define-virtual query + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-virtual check_get_range + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual fixate + (of-object "GstBaseSrc") + (return-type "none") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-virtual unlock_stop + (of-object "GstBaseSrc") + (return-type "gboolean") +) + +(define-virtual prepare_seek_segment + (of-object "GstBaseSrc") + (return-type "gboolean") + (parameters + '("GstEvent*" "seek") + '("GstSegment*" "segment") + ) +) + + +;; From ../gstreamer/libs/gst/base/gstbasetransform.h + +(define-function gst_base_transform_get_type + (c-name "gst_base_transform_get_type") + (return-type "GType") +) + +(define-method set_passthrough + (of-object "GstBaseTransform") + (c-name "gst_base_transform_set_passthrough") + (return-type "none") + (parameters + '("gboolean" "passthrough") + ) +) + +(define-method is_passthrough + (of-object "GstBaseTransform") + (c-name "gst_base_transform_is_passthrough") + (return-type "gboolean") +) + +(define-method set_in_place + (of-object "GstBaseTransform") + (c-name "gst_base_transform_set_in_place") + (return-type "none") + (parameters + '("gboolean" "in_place") + ) +) + +(define-method is_in_place + (of-object "GstBaseTransform") + (c-name "gst_base_transform_is_in_place") + (return-type "gboolean") +) + +(define-method update_qos + (of-object "GstBaseTransform") + (c-name "gst_base_transform_update_qos") + (return-type "none") + (parameters + '("gdouble" "proportion") + '("GstClockTimeDiff" "diff") + '("GstClockTime" "timestamp") + ) +) + +(define-method set_qos_enabled + (of-object "GstBaseTransform") + (c-name "gst_base_transform_set_qos_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-method is_qos_enabled + (of-object "GstBaseTransform") + (c-name "gst_base_transform_is_qos_enabled") + (return-type "gboolean") +) + +(define-method set_gap_aware + (of-object "GstBaseTransform") + (c-name "gst_base_transform_set_gap_aware") + (return-type "none") + (parameters + '("gboolean" "gap_aware") + ) +) + +(define-method suggest + (of-object "GstBaseTransform") + (c-name "gst_base_transform_suggest") + (return-type "none") + (parameters + '("GstCaps*" "caps" (null-ok)) + '("guint" "size") + ) +) + +(define-method reconfigure + (of-object "GstBaseTransform") + (c-name "gst_base_transform_reconfigure") + (return-type "none") +) + +(define-virtual transform_caps + (of-object "GstBaseTransform") + (return-type "GstCaps*") + (parameters + '("GstPadDirection" "direction") + '("GstCaps*" "caps") + ) +) + +(define-virtual fixate_caps + (of-object "GstBaseTransform") + (return-type "none") + (parameters + '("GstPadDirection" "direction") + '("GstCaps*" "caps") + '("GstCaps*" "othercaps") + ) +) + +(define-virtual transform_size + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstPadDirection" "direction") + '("GstCaps*" "caps") + '("guint" "size") + '("GstCaps*" "othercaps") + '("guint*" "othersize") + ) +) + +(define-virtual get_unit_size + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("guint*" "size") + ) +) + +(define-virtual transform_size + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("guint*" "size") + '("GstCaps*" "othercaps") + '("guint*" "othersize") + ) +) + +(define-virtual set_caps + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstCaps*" "incaps") + '("GstCaps*" "outcaps") + ) +) + +(define-virtual start + (of-object "GstBaseTransform") + (return-type "gboolean") +) + +(define-virtual stop + (of-object "GstBaseTransform") + (return-type "gboolean") +) + +(define-virtual event + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-virtual transform + (of-object "GstBaseTransform") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "inbuf") + '("GstBuffer*" "outbuf") + ) +) + +(define-virtual transform_ip + (of-object "GstBaseTransform") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buf") + ) +) + +(define-virtual prepare_output_buffer + (of-object "GstBaseTransform") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "input") + '("gint" "size") + '("GstCaps*" "caps") + '("GstBuffer**" "buf") + ) +) + +(define-virtual src_event + (of-object "GstBaseTransform") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +;; From ../gstreamer/libs/gst/base/gstcollectpads.h + +(define-function gst_collect_pads_get_type + (c-name "gst_collect_pads_get_type") + (return-type "GType") +) + +(define-function collect_pads_new + (c-name "gst_collect_pads_new") + (is-constructor-of "GstCollectPads") + (return-type "GstCollectPads*") +) + +(define-method set_function + (of-object "GstCollectPads") + (c-name "gst_collect_pads_set_function") + (return-type "none") + (parameters + '("GstCollectPadsFunction" "func") + '("gpointer" "user_data") + ) +) + +(define-method set_clip_function + (of-object "GstCollectPads") + (c-name "gst_collect_pads_set_clip_function") + (return-type "none") + (parameters + '("GstCollectPadsClipFunction" "clipfunc") + '("gpointer" "user_data") + ) +) + +(define-method add_pad + (of-object "GstCollectPads") + (c-name "gst_collect_pads_add_pad") + (return-type "GstCollectData*") + (parameters + '("GstPad*" "pad") + '("guint" "size") + ) +) + +(define-method add_pad_full + (of-object "GstCollectPads") + (c-name "gst_collect_pads_add_pad_full") + (return-type "GstCollectData*") + (parameters + '("GstPad*" "pad") + '("guint" "size") + '("GstCollectDataDestroyNotify" "destroy_notify") + ) +) + +(define-method remove_pad + (of-object "GstCollectPads") + (c-name "gst_collect_pads_remove_pad") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method is_active + (of-object "GstCollectPads") + (c-name "gst_collect_pads_is_active") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method collect + (of-object "GstCollectPads") + (c-name "gst_collect_pads_collect") + (return-type "GstFlowReturn") +) + +(define-method collect_range + (of-object "GstCollectPads") + (c-name "gst_collect_pads_collect_range") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "length") + ) +) + +(define-method start + (of-object "GstCollectPads") + (c-name "gst_collect_pads_start") + (return-type "none") +) + +(define-method stop + (of-object "GstCollectPads") + (c-name "gst_collect_pads_stop") + (return-type "none") +) + +(define-method set_flushing + (of-object "GstCollectPads") + (c-name "gst_collect_pads_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method peek + (of-object "GstCollectPads") + (c-name "gst_collect_pads_peek") + (return-type "GstBuffer*") + (parameters + '("GstCollectData*" "data") + ) +) + +(define-method pop + (of-object "GstCollectPads") + (c-name "gst_collect_pads_pop") + (return-type "GstBuffer*") + (parameters + '("GstCollectData*" "data") + ) +) + +(define-method available + (of-object "GstCollectPads") + (c-name "gst_collect_pads_available") + (return-type "guint") +) + +(define-method read + (of-object "GstCollectPads") + (c-name "gst_collect_pads_read") + (return-type "guint") + (parameters + '("GstCollectData*" "data") + '("guint8**" "bytes") + '("guint" "size") + ) +) + +(define-method read_buffer + (of-object "GstCollectPads") + (c-name "gst_collect_pads_read_buffer") + (return-type "GstBuffer*") + (parameters + '("GstCollectData*" "data") + '("guint" "size") + ) +) + +(define-method take_buffer + (of-object "GstCollectPads") + (c-name "gst_collect_pads_take_buffer") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("GstCollectData*" "data") + '("guint" "size") + ) +) + +(define-method flush + (of-object "GstCollectPads") + (c-name "gst_collect_pads_flush") + (return-type "guint") + (parameters + '("GstCollectData*" "data") + '("guint" "size") + ) +) + + + +;; From ../gstreamer/libs/gst/base/gstpushsrc.h + +;(define-function gst_push_src_get_type +; (c-name "gst_push_src_get_type") +; (return-type "GType") +;) + +;(define-virtual create +; (of-object "GstPushSrc") +; (return-type "GstFlowReturn") +; (parameters +; '("GstBuffer**" "buf") +; ) +;) + + + +;; From ../gstreamer/libs/gst/base/gsttypefindhelper.h + +(define-function type_find_helper + (c-name "gst_type_find_helper") + (return-type "GstCaps*") + (parameters + '("GstPad*" "src") + '("guint64" "size") + ) +) + +(define-function type_find_helper_for_buffer + (c-name "gst_type_find_helper_for_buffer") + (return-type "GstCaps*") + (parameters + '("GstObject*" "obj") + '("GstBuffer*" "buf") + '("GstTypeFindProbability*" "prob") + ) +) + +(define-function type_find_helper_get_range + (c-name "gst_type_find_helper_get_range") + (return-type "GstCaps*") + (parameters + '("GstObject*" "obj") + '("GstTypeFindHelperGetRangeFunction" "func") + '("guint64" "size") + '("GstTypeFindProbability*" "prob") + ) +) + +(define-function type_find_helper_get_range_ext + (c-name "gst_type_find_helper_get_range_ext") + (return-type "GstCaps*") + (parameters + '("GstObject*" "obj") + '("GstTypeFindHelperGetRangeFunction" "func") + '("guint64" "size") + '("const-gchar*" "extension") + '("GstTypeFindProbability*" "prob") + ) +) + +(define-function type_find_helper_for_extension + (c-name "gst_type_find_helper_for_extension") + (return-type "GstCaps*") + (parameters + '("GstObject*" "obj") + '("const-gchar*" "extension") + ) +) + +;; From gstdataqueue.h + +(define-function gst_data_queue_get_type + (c-name "gst_data_queue_get_type") + (return-type "GType") +) + +(define-function gst_data_queue_new + (c-name "gst_data_queue_new") + (is-constructor-of "GstDataQueue") + (return-type "GstDataQueue*") + (parameters + '("GstDataQueueCheckFullFunction" "checkfull") + '("gpointer" "checkdata") + ) +) + +(define-method push + (of-object "GstDataQueue") + (c-name "gst_data_queue_push") + (return-type "gboolean") + (parameters + '("GstDataQueueItem*" "item") + ) +) + +(define-method pop + (of-object "GstDataQueue") + (c-name "gst_data_queue_pop") + (return-type "gboolean") + (parameters + '("GstDataQueueItem**" "item") + ) +) + +(define-method flush + (of-object "GstDataQueue") + (c-name "gst_data_queue_flush") + (return-type "none") +) + +(define-method set_flushing + (of-object "GstDataQueue") + (c-name "gst_data_queue_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method drop_head + (of-object "GstDataQueue") + (c-name "gst_data_queue_drop_head") + (return-type "gboolean") + (parameters + '("GType" "type") + ) +) + +(define-method is_full + (of-object "GstDataQueue") + (c-name "gst_data_queue_is_full") + (return-type "gboolean") +) + +(define-method is_empty + (of-object "GstDataQueue") + (c-name "gst_data_queue_is_empty") + (return-type "gboolean") +) + +(define-method get_level + (of-object "GstDataQueue") + (c-name "gst_data_queue_get_level") + (return-type "none") + (parameters + '("GstDataQueueSize*" "level") + ) +) + +(define-method limits_changed + (of-object "GstDataQueue") + (c-name "gst_data_queue_limits_changed") + (return-type "none") +) + + diff --git a/gst/common.h b/gst/common.h new file mode 100644 index 0000000..5d21854 --- /dev/null +++ b/gst/common.h @@ -0,0 +1,73 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +#ifndef __COMMON_H__ +#define __COMMON_H__ + +#include +#include +#include +#include +#include + +#include "pygstminiobject.h" + +#if (defined HAVE_OLD_PYGTK && (PY_VERSION_HEX < 0x02030000)) + typedef destructor freefunc; +#endif + +#if PY_VERSION_HEX < 0x02050000 +#define lenfunc inquiry +#define ssizeargfunc intargfunc +#define ssizessizeargfunc intintargfunc +#define ssizeobjargproc intobjargproc +#define ssizessizeobjargproc intintobjargproc +#endif + +typedef struct { + PyGObject *pad; + GClosure *link_function; + GClosure *event_function; + GClosure *chain_function; + GClosure *get_function; + GClosure *getcaps_function; + GClosure *setcaps_function; + GClosure *activate_function; + GClosure *activatepull_function; + GClosure *activatepush_function; + /* Query is not implemented as a closure to avoid refcounting + * making the query immutable and therefore useless */ + PyObject *query_function; +} PyGstPadPrivate; + +typedef struct { + PyObject *func, *data; +} PyGstCustomNotify; + +typedef struct { + PyObject_HEAD + GstIterator *iter; +} PyGstIterator; + +extern PyTypeObject PyGstIterator_Type; + + +#endif /* __COMMON_H__ */ diff --git a/gst/extend/Makefile.am b/gst/extend/Makefile.am new file mode 100644 index 0000000..f1ed499 --- /dev/null +++ b/gst/extend/Makefile.am @@ -0,0 +1,5 @@ +pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst/extend + +pygstdir = $(pkgpyexecdir) +pygst_PYTHON = __init__.py pygobject.py utils.py discoverer.py sources.py \ + leveller.py jukebox.py diff --git a/gst/extend/Makefile.in b/gst/extend/Makefile.in new file mode 100644 index 0000000..a7c1464 --- /dev/null +++ b/gst/extend/Makefile.in @@ -0,0 +1,532 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = gst/extend +DIST_COMMON = $(pygst_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pygstdir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = $(pyexecdir)/gst-$(GST_MAJORMINOR)/gst/extend +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +pygstdir = $(pkgpyexecdir) +pygst_PYTHON = __init__.py pygobject.py utils.py discoverer.py sources.py \ + leveller.py jukebox.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/extend/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu gst/extend/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pygstPYTHON: $(pygst_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(pygstdir)" || $(MKDIR_P) "$(DESTDIR)$(pygstdir)" + @list='$(pygst_PYTHON)'; dlist=; list2=; test -n "$(pygstdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pygstdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pygstdir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(pygstdir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pygstdir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-pygstPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(pygst_PYTHON)'; test -n "$(pygstdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(pygstdir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(pygstdir)" && rm -f $$fileso +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(pygstdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pygstPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pygstPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-pygstPYTHON \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-pygstPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gst/extend/__init__.py b/gst/extend/__init__.py new file mode 100644 index 0000000..350c71d --- /dev/null +++ b/gst/extend/__init__.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# GStreamer python bindings +# Copyright (C) 2002 David I. Lehn +# 2004 Johan Dahlin + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/gst/extend/discoverer.py b/gst/extend/discoverer.py new file mode 100644 index 0000000..55e7617 --- /dev/null +++ b/gst/extend/discoverer.py @@ -0,0 +1,355 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# discoverer.py +# (c) 2005-2008 Edward Hervey +# Discovers multimedia information on files + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +""" +Class and functions for getting multimedia information about files +""" + +import os.path + +import gobject + +import gst + +from gst.extend.pygobject import gsignal + +class Discoverer(gst.Pipeline): + """ + Discovers information about files. + This class is event-based and needs a mainloop to work properly. + Emits the 'discovered' signal when discovery is finished. + + The 'discovered' callback has one boolean argument, which is True if the + file contains decodable multimedia streams. + """ + __gsignals__ = { + 'discovered' : (gobject.SIGNAL_RUN_FIRST, + None, + (gobject.TYPE_BOOLEAN, )) + } + + mimetype = None + + audiocaps = {} + videocaps = {} + + videowidth = 0 + videoheight = 0 + videorate = 0 + + audiofloat = False + audiorate = 0 + audiodepth = 0 + audiowidth = 0 + audiochannels = 0 + + audiolength = 0L + videolength = 0L + + is_video = False + is_audio = False + + otherstreams = [] + + finished = False + sinknumber = 0 + tags = {} + + + def __init__(self, filename, max_interleave=1.0, timeout=3000): + """ + filename: str; absolute path of the file to be discovered. + max_interleave: int or float; the maximum frame interleave in seconds. + The value must be greater than the input file frame interleave + or the discoverer may not find out all input file's streams. + The default value is 1 second and you shouldn't have to change it, + changing it mean larger discovering time and bigger memory usage. + timeout: int; duration in ms for the discovery to complete. + """ + gobject.GObject.__init__(self) + + self.mimetype = None + + self.audiocaps = {} + self.videocaps = {} + + self.videowidth = 0 + self.videoheight = 0 + self.videorate = gst.Fraction(0,1) + + self.audiofloat = False + self.audiorate = 0 + self.audiodepth = 0 + self.audiowidth = 0 + self.audiochannels = 0 + + self.audiolength = 0L + self.videolength = 0L + + self.is_video = False + self.is_audio = False + + self.otherstreams = [] + + self.finished = False + self.tags = {} + self._success = False + self._nomorepads = False + + self._timeoutid = 0 + self._timeout = timeout + self._max_interleave = max_interleave + + if not os.path.isfile(filename): + self.debug("File '%s' does not exist, finished" % filename) + self.finished = True + return + + # the initial elements of the pipeline + self.src = gst.element_factory_make("filesrc") + self.src.set_property("location", filename) + self.src.set_property("blocksize", 1000000) + self.dbin = gst.element_factory_make("decodebin") + self.add(self.src, self.dbin) + self.src.link(self.dbin) + self.typefind = self.dbin.get_by_name("typefind") + + # callbacks + self.typefind.connect("have-type", self._have_type_cb) + self.dbin.connect("new-decoded-pad", self._new_decoded_pad_cb) + self.dbin.connect("no-more-pads", self._no_more_pads_cb) + self.dbin.connect("unknown-type", self._unknown_type_cb) + + def _timed_out_or_eos(self): + if (not self.is_audio and not self.is_video) or \ + (self.is_audio and not self.audiocaps) or \ + (self.is_video and not self.videocaps): + self._finished(False) + else: + self._finished(True) + + def _finished(self, success=False): + self.debug("success:%d" % success) + self._success = success + self.bus.remove_signal_watch() + if self._timeoutid: + gobject.source_remove(self._timeoutid) + self._timeoutid = 0 + gobject.idle_add(self._stop) + return False + + def _stop(self): + self.debug("success:%d" % self._success) + self.finished = True + self.set_state(gst.STATE_READY) + self.debug("about to emit signal") + self.emit('discovered', self._success) + + def _bus_message_cb(self, bus, message): + if message.type == gst.MESSAGE_EOS: + self.debug("Got EOS") + self._timed_out_or_eos() + elif message.type == gst.MESSAGE_TAG: + for key in message.parse_tag().keys(): + self.tags[key] = message.structure[key] + elif message.type == gst.MESSAGE_ERROR: + self.debug("Got error") + self._finished() + + def discover(self): + """Find the information on the given file asynchronously""" + self.debug("starting discovery") + if self.finished: + self.emit('discovered', False) + return + + self.bus = self.get_bus() + self.bus.add_signal_watch() + self.bus.connect("message", self._bus_message_cb) + + # 3s timeout + self._timeoutid = gobject.timeout_add(self._timeout, self._timed_out_or_eos) + + self.info("setting to PLAY") + if not self.set_state(gst.STATE_PLAYING): + self._finished() + + def _time_to_string(self, value): + """ + transform a value in nanoseconds into a human-readable string + """ + ms = value / gst.MSECOND + sec = ms / 1000 + ms = ms % 1000 + min = sec / 60 + sec = sec % 60 + return "%2dm %2ds %3d" % (min, sec, ms) + + def print_info(self): + """prints out the information on the given file""" + if not self.finished: + return + if not self.mimetype: + print "Unknown media type" + return + print "Mime Type :\t", self.mimetype + if not self.is_video and not self.is_audio: + return + print "Length :\t", self._time_to_string(max(self.audiolength, self.videolength)) + print "\tAudio:", self._time_to_string(self.audiolength), "\tVideo:", self._time_to_string(self.videolength) + if self.is_video and self.videorate: + print "Video :" + print "\t%d x %d @ %d/%d fps" % (self.videowidth, + self.videoheight, + self.videorate.num, self.videorate.denom) + if self.tags.has_key("video-codec"): + print "\tCodec :", self.tags["video-codec"] + if self.is_audio: + print "Audio :" + if self.audiofloat: + print "\t%d channels(s) : %dHz @ %dbits (float)" % (self.audiochannels, + self.audiorate, + self.audiowidth) + else: + print "\t%d channels(s) : %dHz @ %dbits (int)" % (self.audiochannels, + self.audiorate, + self.audiodepth) + if self.tags.has_key("audio-codec"): + print "\tCodec :", self.tags["audio-codec"] + for stream in self.otherstreams: + if not stream == self.mimetype: + print "Other unsuported Multimedia stream :", stream + if self.tags: + print "Additional information :" + for tag in self.tags.keys(): + print "%20s :\t" % tag, self.tags[tag] + + def _no_more_pads_cb(self, dbin): + self.info("no more pads") + self._nomorepads = True + + def _unknown_type_cb(self, dbin, pad, caps): + self.debug("unknown type : %s" % caps.to_string()) + # if we get an unknown type and we don't already have an + # audio or video pad, we are finished ! + self.otherstreams.append(caps.to_string()) + if not self.is_video and not self.is_audio: + self.finished = True + self._finished() + + def _have_type_cb(self, typefind, prob, caps): + self.mimetype = caps.to_string() + + def _notify_caps_cb(self, pad, args): + caps = pad.get_negotiated_caps() + if not caps: + pad.info("no negotiated caps available") + return + pad.info("caps:%s" % caps.to_string()) + # the caps are fixed + # We now get the total length of that stream + q = gst.query_new_duration(gst.FORMAT_TIME) + pad.info("sending duration query") + if pad.get_peer().query(q): + format, length = q.parse_duration() + if format == gst.FORMAT_TIME: + pad.info("got duration (time) : %s" % (gst.TIME_ARGS(length),)) + else: + pad.info("got duration : %d [format:%d]" % (length, format)) + else: + length = -1 + gst.warning("duration query failed") + + # We store the caps and length in the proper location + if "audio" in caps.to_string(): + self.audiocaps = caps + self.audiolength = length + self.audiorate = caps[0]["rate"] + self.audiowidth = caps[0]["width"] + self.audiochannels = caps[0]["channels"] + if "x-raw-float" in caps.to_string(): + self.audiofloat = True + else: + self.audiodepth = caps[0]["depth"] + if self._nomorepads and ((not self.is_video) or self.videocaps): + self._finished(True) + elif "video" in caps.to_string(): + self.videocaps = caps + self.videolength = length + self.videowidth = caps[0]["width"] + self.videoheight = caps[0]["height"] + self.videorate = caps[0]["framerate"] + if self._nomorepads and ((not self.is_audio) or self.audiocaps): + self._finished(True) + + def _new_decoded_pad_cb(self, dbin, pad, is_last): + # Does the file contain got audio or video ? + caps = pad.get_caps() + gst.info("caps:%s" % caps.to_string()) + if "audio" in caps.to_string(): + self.is_audio = True + elif "video" in caps.to_string(): + self.is_video = True + else: + self.warning("got a different caps.. %s" % caps.to_string()) + return + if is_last and not self.is_video and not self.is_audio: + self.debug("is last, not video or audio") + self._finished(False) + return + # we connect a fakesink to the new pad... + pad.info("adding queue->fakesink") + fakesink = gst.element_factory_make("fakesink", "fakesink%d-%s" % + (self.sinknumber, "audio" in caps.to_string() and "audio" or "video")) + self.sinknumber += 1 + queue = gst.element_factory_make("queue") + # we want the queue to buffer up to the specified amount of data + # before outputting. This enables us to cope with formats + # that don't create their source pads straight away, + # but instead wait for the first buffer of that stream. + # The specified time must be greater than the input file + # frame interleave for the discoverer to work properly. + queue.props.min_threshold_time = int(self._max_interleave * gst.SECOND) + queue.props.max_size_time = int(2 * self._max_interleave * gst.SECOND) + queue.props.max_size_bytes = 0 + + # If durations are bad on the buffers (common for video decoders), we'll + # never reach the min_threshold_time or max_size_time. So, set a + # max size in buffers, and if reached, disable the min_threshold_time. + # This ensures we don't fail to discover with various ffmpeg + # demuxers/decoders that provide bogus (or no) duration. + queue.props.max_size_buffers = int(100 * self._max_interleave) + def _disable_min_threshold_cb(queue): + queue.props.min_threshold_time = 0 + queue.disconnect(signal_id) + signal_id = queue.connect('overrun', _disable_min_threshold_cb) + + self.add(fakesink, queue) + queue.link(fakesink) + sinkpad = fakesink.get_pad("sink") + queuepad = queue.get_pad("sink") + # ... and connect a callback for when the caps are fixed + sinkpad.connect("notify::caps", self._notify_caps_cb) + if pad.link(queuepad): + pad.warning("##### Couldn't link pad to queue") + queue.set_state(gst.STATE_PLAYING) + fakesink.set_state(gst.STATE_PLAYING) + gst.info('finished here') diff --git a/gst/extend/jukebox.py b/gst/extend/jukebox.py new file mode 100644 index 0000000..c29b742 --- /dev/null +++ b/gst/extend/jukebox.py @@ -0,0 +1,356 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# GStreamer python bindings +# Copyright (C) 2005 Edward Hervey +# Copyright (C) 2005 Thomas Vander Stichele + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys +import pickle +import random as rand + +import gobject +gobject.threads_init() +import pygst +pygst.require('0.10') +import gst + +import utils +from pygobject import gsignal +import sources +from leveller import Leveller + +class Jukebox(gst.Bin): + gsignal('done', str) + gsignal('prerolled') # emitted when at least 2 sources are ready + gsignal('changed', str, gobject.TYPE_UINT64) # clocktime, filename + gsignal('looped') + + def __init__(self, files, rms=0.2, loops=0, random=False, + caps="audio/x-raw-int,channels=2,rate=44100", + picklepath='level.pck'): + # with pygtk 2.4 this call is needed for the gsignal to work + self.__gobject_init__() + + self._target_rms = rms + self._loopsleft = loops + self._loopsdone = 0 + self._random = random + self._picklepath = picklepath + self._caps = gst.caps_from_string(caps) + self._files = files[:] # copy + self._levels = {} # filename -> rms, mixin, mixout, length + self._prerolled = False + self._playing = False + self._scani = 0 # index into self._files for scanning + self._playi = 0 # index into self._files for playing + + self._lastadded = None # last file added to composition + self._lastposition = long(0) # last position where file was added + + if not len(files) > 1: + raise TypeError, 'Must have at least 2 files' + + self._composition = gst.element_factory_make("gnlcomposition") + self._composition.connect('pad-added', self._composition_pad_added_cb) + self.add(self._composition) + + self._srcpad = None + + # load our pickle if it exists + if os.path.exists(self._picklepath): + file = open(self._picklepath) + self._levels = pickle.load(file) + file.close() + + # randomize our list if asked for + if self._random: + self._files = rand.sample(self._files, len(self._files)) + + + ## public API + + def preroll(self): + # scan the first few files and start playing + gst.debug("starting jukebox prerolling") + self._scan() + + def start(self): + ## + ## FIXME : THIS SHOULD'T BE NEEDED ! + ## USE STATE CHANGES INSTEAD + ## + if not self._prerolled: + raise Exception, "baby" + self.set_state(gst.STATE_PAUSED) + + + ## Scanning private methods + + def _scan(self): + # start a leveller for a new _toscan file + if self._scani >= len(self._files): + gst.debug("We're done scanning !") + return + + file = self._files[self._scani] + self._scani += 1 + + if file in self._levels.keys(): + gst.debug("already did file %s" % file) + self._check_prerolled() + gobject.timeout_add(0, self._scan) + return + + gst.debug("creating leveller for %s" % file) + leveller = Leveller(file) + leveller.connect('done', self._leveller_done_cb, file) + gobject.timeout_add(0, leveller.start) + ##gobject.idle_add(leveller.iterate) + + def _leveller_done_cb(self, l, reason, file): + if reason != sources.EOS: + gst.debug("Error: %s" % reason) + return + + gst.debug("in: %s, out: %s" % (gst.TIME_ARGS(l.mixin), + gst.TIME_ARGS(l.mixout))) + gst.debug("rms: %f, %f dB" % (l.rms, l.rmsdB)) + + # store infos + self._levels[file] = (l.rms, l.mixin, l.mixout, l.length) + + gst.debug("writing level pickle") + file = open(self._picklepath, "w") + pickle.dump(self._levels, file) + file.close() + + self._check_prerolled() + self._scan() + + # clean up leveller after this handler + gobject.timeout_add(0, l.clean) + + + ## GnlSource-related methods + + def _new_gnl_source(self, location, start): + """ + Creates a new GnlSource containing an AudioSource with the following + properties correctly set: + _ volume level + _ priority + _ duration + The start position MUST be given + """ + if not self._levels[location]: + return None + self.debug("Creating new GnlSource at %s for %s" % (gst.TIME_ARGS(start), location)) + idx = self._files.index(location) + self._loopsdone * len(self._files) + rms, mixin, mixout, duration = self._levels[location] + gnls = gst.element_factory_make("gnlsource", "source-%d-%s" % (idx, location)) + src = sources.AudioSource(location) + gnls.add(src) + + # set volume + level = 1.0 + if rms > self._target_rms: + level = self._target_rms / rms + gst.debug('setting volume of %f' % level) + else: + gst.debug('not going to go above 1.0 level') + src.set_volume(level) + + # set proper position/duration/priority in composition + gnls.props.priority = (2 * self._loopsdone) + 1 + (idx % 2) + gnls.props.start = long(start) + gnls.props.duration = long(duration) + gnls.props.media_duration = long(duration) + gnls.props.media_start = long(0) + + return gnls + + def _new_mixer(self, start, duration): + gnlo = gst.element_factory_make("gnloperation") + ad = gst.element_factory_make("adder") + gnlo.add(ad) + gnlo.props.sinks = 2 + gnlo.props.start = start + gnlo.props.duration = duration + gnlo.props.priority = 0 + + return gnlo + + def _append_file(self, location): + """ + Appends the given file to the composition, along with the proper mixer effect + """ + self.debug("location:%s" % location) + start = self._lastposition + if self._lastadded: + start += self._levels[self._lastadded][2] + start -= self._levels[location][1] + + gnls = self._new_gnl_source(location, start) + self._composition.add(gnls) + + if self._lastadded: + # create the mixer + duration = self._levels[self._lastadded][3] - self._levels[self._lastadded][2] + self._levels[location][1] + mixer = self._new_mixer(start, duration) + self._composition.add(mixer) + + self._lastposition = start + self._lastadded = location + + self.debug("lastposition:%s , lastadded:%s" % (gst.TIME_ARGS(self._lastposition), + self._lastadded)) + + def _check_prerolled(self): + gst.debug("_check_prerolled: index: scan %d, play %d" % ( + self._scani, self._playi)) + if not self._prerolled and self._scani > self._playi + 1: + self._prerolled = True + # add initial sources here + self._append_file(self._files[0]) + self._append_file(self._files[1]) + self.debug("now prerolled and ready to play") + self.emit('prerolled') + + + def _emit_changed(self, file, when): + print "emitting changed for %s at %r" % (file, when) + self.emit('changed', file, when) + + def _source_clean(self, source): + source.set_state(gst.STATE_NULL) + self.remove(source) + source.clean() + + ## composition callbacks + + def _composition_pad_added_cb(self, comp, pad): + if self._srcpad: + return + self.debug("Ghosting source pad %s" % pad) + self._srcpad = gst.GhostPad("src", pad) + self._srcpad.set_active(True) + self.add_pad(self._srcpad) + + ## gst.Bin/Element virtual methods + + def do_handle_message(self, message): + self.debug("got message %s / %s / %r" % (message.src.get_name(), message.type.first_value_name, message)) + + # chaining up + gst.Bin.do_handle_message(self, message) + + def do_state_change(self, transition): + if not self._prerolled: + gst.error("Call Jukebox.preroll() before!") + return gst.STATE_CHANGE_FAILURE + # chaining up + return gst.Bin.do_state_change(self, message) + +gobject.type_register(Jukebox) + +# helper functions +def _find_elements_recurse(element): + if not isinstance(element, gst.Bin): + return [element, ] + l = [] + for e in element.elements(): + l.extend(_find_elements_recurse(e)) + return l + +def _find_unconnected_pad(bin, direction): + for e in _find_elements_recurse(bin): + for p in e.pads(): + if p.get_direction() == direction and not p.get_peer(): + return p + + return None + +# run us to test +if __name__ == "__main__": + main = gobject.MainLoop() + pipeline = gst.Pipeline('jukebox') + list = open(sys.argv[1]).read().rstrip().split('\n') + print list + #source = Jukebox(list, random=True, loops=-1) + source = Jukebox(list, random=True, loops=1) + + def _jukebox_prerolled_cb(jukebox): + print "prerolled" + _start() + + def _jukebox_changed_cb(jukebox, filename, when): + print "changed file to %s at %s" % (filename, float(when) / gst.TIME_ARGS(gst.SECOND)) + + def _jukebox_looped_cb(jukebox): + print "jukebox looped" + + def _start(): + source.start() + print "setting pipeline to PLAYING" + pipeline.set_state(gst.STATE_PLAYING) + print "set pipeline to PLAYING" + + def jukebox_pad_added(comp, pad, sinkpad): + pad.link(sinkpad) + + def jukebox_message(bus, message): + if message.type == gst.MESSAGE_ERROR: + print "Error: %s" % message.parse_error() + main.quit() + elif message.type == gst.MESSAGE_EOS: + print "done" + main.quit() + + source.connect('prerolled', _jukebox_prerolled_cb) + source.connect('changed', _jukebox_changed_cb) + source.connect('looped', _jukebox_looped_cb) + source.preroll() + pipeline.add(source) + + bus = pipeline.get_bus() + bus.add_signal_watch() + bus.connect("message", jukebox_message) + + p = "alsasink" + if len(sys.argv) > 2: + p = " ".join(sys.argv[2:]) + + print "parsing output pipeline %s" % p + sinkbin = gst.parse_launch("bin.( %s )" % p) + pipeline.add(sinkbin) + apad = _find_unconnected_pad(sinkbin, gst.PAD_SINK) + if not apad: + raise TypeError, "No unconnected sink pad found in bin %r" % sinkbin + sinkpad = gst.GhostPad("sink", apad) + sinkbin.add_pad(sinkpad) + source.connect('pad-added', jukebox_pad_added, sinkpad) + + print "Going into main loop" + sys.stdout.flush() + main.run() + print "Left main loop" + sys.stdout.flush() + + pipeline.set_state(gst.STATE_NULL) diff --git a/gst/extend/leveller.py b/gst/extend/leveller.py new file mode 100644 index 0000000..5fd7597 --- /dev/null +++ b/gst/extend/leveller.py @@ -0,0 +1,285 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# GStreamer python bindings +# Copyright (C) 2005 Thomas Vander Stichele + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys +import math + +import gobject +import pygst +pygst.require('0.10') +import gst + +import utils +from pygobject import gsignal + +import sources +from sources import EOS, ERROR, UNKNOWN_TYPE, WRONG_TYPE + +class Leveller(gst.Pipeline): + """ + I am a pipeline that calculates RMS values and mix-in/out points. + I will signal 'done' when I'm done scanning the file, with return value + EOS, ERROR, UNKNOWN_TYPE, or WRONG_TYPE from gst.extend.sources + """ + + gsignal('done', str) + + def __init__(self, filename, threshold=-9.0): + gst.Pipeline.__init__(self) + + self._filename = filename + + self._thresholddB = threshold + self._threshold = math.pow(10, self._thresholddB / 10.0) + + self._source = sources.AudioSource(filename) + self._source.connect('done', self._done_cb) + + self._level = gst.element_factory_make("level") + + self._fakesink = gst.element_factory_make("fakesink") + + self.add(self._source, self._level, self._fakesink) + self._source.connect("pad-added", self._sourcePadAddedCb) + self._level.link(self._fakesink) + + # temporary values for each timepoint + self._rmsdB = {} # hash of channel, rmsdB value + self._peakdB = 0.0 # highest value over all channels for this time + + # results over the whole file + self._meansquaresums = [] # list of time -> mean square sum value + self._peaksdB = [] # list of time -> peak value + + self._lasttime = 0 + + # will be set when done + self.mixin = 0 + self.mixout = 0 + self.length = 0 + self.rms = 0.0 + self.rmsdB = 0.0 + + def _sourcePadAddedCb(self, source, pad): + self._source.link(self._level) + + def do_handle_message(self, message): + self.debug("got message %r" % message) + if (message.type == gst.MESSAGE_ELEMENT) and (message.src == self._level): + struc = message.structure + endtime = struc["endtime"] + rmss = struc["rms"] + peaks = struc["peak"] + decays = struc["decay"] + infos = zip(rmss, peaks, decays) + channid = 0 + for rms,peak,decay in infos: + self._level_cb(message.src, endtime, channid, rms, peak, decay) + channid += 1 + elif message.type == gst.MESSAGE_EOS: + self._eos_cb(message.src) + # chaining up + gst.Pipeline.do_handle_message(self, message) + + def _level_cb(self, element, time, channel, rmsdB, peakdB, decaydB): + # rms is being signalled in dB + # FIXME: maybe level should have a way of signalling actual values + # signals are received in order, so I should get each channel one + # by one + if time > self._lasttime and self._lasttime > 0: + # we have a new time point, so calculate stuff for the old block + meansquaresum = 0.0 + for i in self._rmsdB.keys(): + meansquaresum += math.pow(10, self._rmsdB[i] / 10.0) + # average over channels + meansquaresum /= len(self._rmsdB.keys()) + try: + rmsdBstr = str(10 * math.log10(meansquaresum)) + except OverflowError: + rmsdBstr = "(-inf)" + gst.log("meansquaresum %f (%s dB)" % (meansquaresum, rmsdBstr)) + + # update values + self._peaksdB.append((self._lasttime, peakdB)) + self._meansquaresums.append((self._lasttime, meansquaresum)) + self._rmsdB = {} + self._peakdB = 0.0 + + # store the current values for later processing + gst.log("time %s, channel %d, rmsdB %f" % (gst.TIME_ARGS(time), channel, rmsdB)) + self._lasttime = time + self._rmsdB[channel] = rmsdB + if peakdB > self._peakdB: + self._peakdB = peakdB + + def _done_cb(self, source, reason): + gst.debug("done, reason %s" % reason) + # we ignore eos because we want the whole pipeline to eos + if reason == EOS: + return + self.emit('done', reason) + + def _eos_cb(self, source): + gst.debug("eos, start calcing") + + # get the highest peak RMS for this track + highestdB = self._peaksdB[0][1] + + for (time, peakdB) in self._peaksdB: + if peakdB > highestdB: + highestdB = peakdB + gst.debug("highest peak(dB): %f" % highestdB) + + # get the length + (self.length, peakdB) = self._peaksdB[-1] + + # find the mix in point + for (time, peakdB) in self._peaksdB: + gst.log("time %s, peakdB %f" % (gst.TIME_ARGS(time), peakdB)) + if peakdB > self._thresholddB + highestdB: + gst.debug("found mix-in point of %f dB at %s" % ( + peakdB, gst.TIME_ARGS(time))) + self.mixin = time + break + + # reverse and find out point + self._peaksdB.reverse() + found = None + for (time, peakdB) in self._peaksdB: + if found: + self.mixout = time + gst.debug("found mix-out point of %f dB right before %s" % ( + found, gst.TIME_ARGS(time))) + break + + if peakdB > self._thresholddB + highestdB: + found = peakdB + + # now calculate RMS between these two points + weightedsquaresums = 0.0 + lasttime = self.mixin + for (time, meansquaresum) in self._meansquaresums: + if time <= self.mixin: + continue + + delta = time - lasttime + weightedsquaresums += meansquaresum * delta + gst.log("added MSS %f over time %s at time %s, now %f" % ( + meansquaresum, gst.TIME_ARGS(delta), + gst.TIME_ARGS(time), weightedsquaresums)) + + lasttime = time + + if time > self.mixout: + break + + # calculate + try: + ms = weightedsquaresums / (self.mixout - self.mixin) + except ZeroDivisionError: + # this is possible when, for example, the whole sound file is + # empty + gst.warning('ZeroDivisionError on %s, mixin %s, mixout %s' % ( + self._filename, gst.TIME_ARGS(self.mixin), + gst.TIME_ARGS(self.mixout))) + self.emit('done', WRONG_TYPE) + return + + self.rms = math.sqrt(ms) + self.rmsdB = 10 * math.log10(ms) + + self.emit('done', EOS) + + def start(self): + gst.debug("Setting to PLAYING") + self.set_state(gst.STATE_PLAYING) + gst.debug("Set to PLAYING") + + # FIXME: we might want to do this ourselves automatically ? + def stop(self): + """ + Stop the leveller, freeing all resources. + Call after the leveller emitted 'done' to clean up. + """ + gst.debug("Setting to NULL") + self.set_state(gst.STATE_NULL) + gst.debug("Set to NULL") + utils.gc_collect('Leveller.stop()') + + def clean(self): + # clean ourselves up completely + self.stop() + # let's be ghetto and clean out our bin manually + self.remove(self._source) + self.remove(self._level) + self.remove(self._fakesink) + gst.debug("Emptied myself") + self._source.clean() + utils.gc_collect('Leveller.clean() cleaned up source') + self._source = None + self._fakesink = None + self._level = None + utils.gc_collect('Leveller.clean() done') + +gobject.type_register(Leveller) + +if __name__ == "__main__": + main = gobject.MainLoop() + + try: + leveller = Leveller(sys.argv[1]) + except IndexError: + sys.stderr.write("Please give a file to calculate level of\n") + sys.exit(1) + + print "Starting" + bus = leveller.get_bus() + bus.add_signal_watch() + dontstop = True + + leveller.set_state(gst.STATE_PLAYING) + + while dontstop: + message = bus.poll(gst.MESSAGE_ANY, gst.SECOND) + if message: + gst.debug("got message from poll:%s/%r" % (message.type, message)) + else: + gst.debug("got NOTHING from poll") + if message: + if message.type == gst.MESSAGE_EOS: + print "in: %s, out: %s, length: %s" % (gst.TIME_ARGS(leveller.mixin), + gst.TIME_ARGS(leveller.mixout), + gst.TIME_ARGS(leveller.length)) + print "rms: %f, %f dB" % (leveller.rms, leveller.rmsdB) + dontstop = False + elif message.type == gst.MESSAGE_ERROR: + error,debug = message.parse_error() + print "ERROR[%s] %s" % (error.domain, error.message) + dontstop = False + + leveller.stop() + leveller.clean() + + gst.debug('deleting leveller, verify objects are freed') + utils.gc_collect('quit main loop') + del leveller + utils.gc_collect('deleted leveller') + gst.debug('stopping forever') diff --git a/gst/extend/pygobject.py b/gst/extend/pygobject.py new file mode 100644 index 0000000..04d378f --- /dev/null +++ b/gst/extend/pygobject.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# GStreamer python bindings +# Copyright (C) 2004 Johan Dahlin + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +""" +PyGTK helper functions +""" + +import sys + +import gobject + +def gobject_set_property(object, property, value): + """ + Set the given property to the given value on the given object. + + @type object: L{gobject.GObject} + @type property: string + @param value: value to set property to + """ + for pspec in gobject.list_properties(object): + if pspec.name == property: + break + else: + raise errors.PropertyError( + "Property '%s' in element '%s' does not exist" % ( + property, object.get_property('name'))) + + if pspec.value_type in (gobject.TYPE_INT, gobject.TYPE_UINT, + gobject.TYPE_INT64, gobject.TYPE_UINT64): + try: + value = int(value) + except ValueError: + msg = "Invalid value given for property '%s' in element '%s'" % ( + property, object.get_property('name')) + raise errors.PropertyError(msg) + + elif pspec.value_type == gobject.TYPE_BOOLEAN: + if value == 'False': + value = False + elif value == 'True': + value = True + else: + value = bool(value) + elif pspec.value_type in (gobject.TYPE_DOUBLE, gobject.TYPE_FLOAT): + value = float(value) + elif pspec.value_type == gobject.TYPE_STRING: + value = str(value) + # FIXME: this is superevil ! we really need to find a better way + # of checking if this property is a param enum + # also, we only allow int for now + elif repr(pspec.__gtype__).startswith(" + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys + +import gobject +import pygst +pygst.require('0.10') +import gst + +from pygobject import gsignal + +EOS = 'EOS' +ERROR = 'ERROR' +WRONG_TYPE = 'WRONG_TYPE' +UNKNOWN_TYPE = 'UNKNOWN_TYPE' + +class AudioSource(gst.Bin): + """A bin for audio sources with proper audio converters""" + + gsignal('done', str) + gsignal('prerolled') + + def __init__(self, filename, caps="audio/x-raw-int,channels=2,rate=44100"): + # with pygtk 2.4 this call is needed for the gsignal to work + gst.Bin.__init__(self) + + self.filename = filename + self.outcaps = caps + + self.filesrc = gst.element_factory_make("filesrc") + self.filesrc.set_property("location", self.filename) + self.dbin = gst.element_factory_make("decodebin") + self.audioconvert = gst.element_factory_make("audioconvert") + self.audioresample = gst.element_factory_make("audioresample") + self.volume = gst.element_factory_make("volume") + + self.add(self.filesrc, self.dbin, + self.audioconvert, self.audioresample, self.volume) + self.filesrc.link(self.dbin) + self.audioconvert.link(self.audioresample) + self.audioresample.link(self.volume, caps) + + self.dbin.connect("new-decoded-pad", self._new_decoded_pad_cb) + self.dbin.connect("unknown-type", self._unknown_type_cb) + + self._srcpad = None + + def __repr__(self): + return "" % self.filename + + def set_volume(self, volume): + gst.debug("setting volume to %f" % volume) + self.volume.set_property("volume", volume) + + def _new_decoded_pad_cb(self, dbin, pad, is_last): + gst.debug("new decoded pad: pad %r [%s]" % (pad, pad.get_caps().to_string())) + if not "audio" in pad.get_caps().to_string() or self._srcpad: + return + + gst.debug("linking pad %r to audioconvert" % pad) + pad.link(self.audioconvert.get_pad("sink")) + + self._srcpad = gst.GhostPad("src", self.volume.get_pad("src")) + self._srcpad.set_active(True) + self.add_pad(self._srcpad) + + def _unknown_type_cb(self, pad, caps): + self.emit('done', UNKNOWN_TYPE) + + def stop(self): + self.set_state(gst.STATE_NULL) + + def clean(self): + self.stop() + self.remove(self.filesrc) + self.remove(self.dbin) + self.remove(self.audioconvert) + self.remove(self.audioresample) + self.remove(self.volume) + self.filesrc = None + self.dbin = None + self.audioconvert = None + self.volume = None + +gobject.type_register(AudioSource) + + +# run us to test +if __name__ == "__main__": + main = gobject.MainLoop() + + def _done_cb(source, reason): + print "Done" + sys.stdout.flush() + if reason != EOS: + print "Some error happened: %s" % reason + main.quit() + + def _error_cb(source, element, gerror, message): + print "Error: %s" % gerror + main.quit() + + try: + source = AudioSource(sys.argv[1]) + except IndexError: + sys.stderr.write("Please give a filename to play\n") + sys.exit(1) + + pipeline = gst.Pipeline("playing") + # connecting on the source also catches eos emit when + # no audio pad + source.connect('done', _done_cb) + pipeline.connect('error', _error_cb) + + p = "osssink" + if len(sys.argv) > 2: + p = " ".join(sys.argv[2:]) + + pipeline.add(source) + sink = gst.parse_launch(p) + pipeline.add(sink) + source.link(sink) + + # we schedule this as a timeout so that we are definately in the main + # loop when it goes to PLAYING, and errors make main.quit() work correctly + def _start(pipeline): + print "setting pipeline to PLAYING" + pipeline.set_state(gst.STATE_PLAYING) + print "set pipeline to PLAYING" + + gobject.timeout_add(0, _start, pipeline) + gobject.idle_add(pipeline.iterate) + + print "Going into main loop" + main.run() + print "Left main loop" + + pipeline.set_state(gst.STATE_NULL) + pipeline.remove(source) + pipeline.remove(sink) + utils.gc_collect('cleaned out pipeline') + source.clean() + utils.gc_collect('cleaned up source') + source = None + utils.gc_collect('set source to None') diff --git a/gst/extend/utils.py b/gst/extend/utils.py new file mode 100644 index 0000000..784dab9 --- /dev/null +++ b/gst/extend/utils.py @@ -0,0 +1,77 @@ +import os + +import gobject +import gst + +def gst_dump(bin): + dump_element(bin, 0) + +def dump_bin(bin, indent): + # Iterate the children + for child in bin.get_list(): + dump_element(child, indent + 2) + +def dump_element(element, indent): + states = { 1: 'NULL', 2: 'READY', + 4: 'PAUSED', 8: 'PLAYING' } + + state = 'UNKNOWN' + try: + state = states[element.get_state()] + except KeyError: + state = 'UNKNOWN (%d)' % element.get_state() + + c = element.get_clock() + if c is None: + clock_str = "clock - None" + else: + clock_str = "clock - %s" % (c.get_name()) + + out = "%s (%s): state %s, %s" % (element.get_name(), + gobject.type_name(element.__gtype__), state, clock_str) + + print out.rjust(len(out) + indent) + + tmp = { True: 'active', False: 'inactive' } + + for curpad in element.get_pad_list(): + if curpad.get_direction() == gst.PAD_SRC: + if curpad.is_linked(): + peer = curpad.get_peer() + out = " - %s:%s (%s) => %s:%s (%s)" % ( + curpad.get_parent().get_name(), curpad.get_name(), + tmp[curpad.is_active()], + peer.get_parent().get_name(), peer.get_name(), + tmp[peer.is_active()]) + + print out.rjust(len(out) + indent) + + if isinstance(element, gst.Bin): + dump_bin(element, indent + 2) + elif isinstance(element, gst.Queue): + out = " - time_level: %ld" % ( + element.get_property('current-level-time')) + print out.rjust(len(out) + indent) + out = " - bytes_level: %ld" % ( + element.get_property('current-level-bytes')) + print out.rjust(len(out) + indent) + +def gc_collect(reason=None): + """ + Garbage-collect if GST_GC env var is set. + This helps in debugging object refcounting. + Sprinkle liberally around checkpoints. + """ + env = os.environ.get('GST_GC', None) + if not env: + return + import gc + if env == 'DEBUG_LEAK': + gc.set_debug(gc.DEBUG_LEAK) + + gst.debug('collecting garbage') + if reason: + gst.debug('because of %s' % reason) + count = gc.collect() + gst.debug('collected garbage, %d objects collected, %d left' % ( + count, len(gc.get_objects()))) diff --git a/gst/gst-0.10.21.ignore b/gst/gst-0.10.21.ignore new file mode 100644 index 0000000..b9b54b2 --- /dev/null +++ b/gst/gst-0.10.21.ignore @@ -0,0 +1,11 @@ +%% +ignore + gst_pad_set_iterate_internal_links_function + gst_pad_iterate_internal_links + gst_pad_iterate_internal_links_default + gst_base_transform_suggest + gst_base_transform_reconfigure +%% +ignore-type + +%% diff --git a/gst/gst-0.10.22.ignore b/gst/gst-0.10.22.ignore new file mode 100644 index 0000000..724750f --- /dev/null +++ b/gst/gst-0.10.22.ignore @@ -0,0 +1,18 @@ +%% +ignore + gst_bin_recalculate_latency + gst_event_get_seqnum + gst_event_set_seqnum + gst_message_set_seqnum + gst_message_new_structure_change + gst_message_parse_structure_change + gst_query_new_uri + gst_query_parse_uri + gst_query_set_uri + gst_tag_setter_reset_tags + gst_util_seqnum_next + gst_util_seqnum_compare +%% +ignore-type + GstStructureChangeType +%% diff --git a/gst/gst-0.10.23.ignore b/gst/gst-0.10.23.ignore new file mode 100644 index 0000000..3e065f3 --- /dev/null +++ b/gst/gst-0.10.23.ignore @@ -0,0 +1,23 @@ +%% +ignore + gst_debug_construct_win_color + gst_message_new_request_state + gst_message_parse_request_state + gst_util_array_binary_search + gst_poll_new_timer + gst_poll_write_control + gst_poll_read_control + gst_tag_list_get_buffer + gst_tag_list_get_buffer_index + gst_fixme + gst_memdump + gst_object_fixme + gst_object_memdump + gst_type_find_helper_for_extension + GST_PARAM_MUTABLE_READY + GST_PARAM_MUTABLE_PAUSED + GST_PARAM_MUTABLE_PLAYING +%% +ignore-type + GstSearchMode +%% diff --git a/gst/gst-0.10.24.ignore b/gst/gst-0.10.24.ignore new file mode 100644 index 0000000..41d9b4f --- /dev/null +++ b/gst/gst-0.10.24.ignore @@ -0,0 +1,46 @@ +%% +ignore + gst_element_set_start_time + gst_element_get_start_time + gst_element_lost_state_full + gst_event_new_step + gst_event_parse_step + gst_message_new_tag_full + gst_message_parse_tag_full + gst_message_new_step_done + gst_message_parse_step_done + gst_message_new_stream_status + gst_message_parse_stream_status + gst_message_set_stream_status_object + gst_message_get_stream_status_object + gst_message_new_step_start + gst_message_parse_step_start + gst_pad_set_chain_list_function + gst_pad_push_list + gst_pad_chain_list + gst_plugin_get_cache_data + gst_plugin_set_cache_data + gst_segment_to_position + gst_segment_set_running_time + gst_structure_get_valist + gst_structure_get + gst_structure_id_get_valist + gst_structure_id_get + gst_tag_list_add_value + gst_tag_setter_add_tag_value + gst_task_set_priority + gst_task_get_pool + gst_task_set_pool + gst_task_set_thread_callbacks + gst_task_set_state + gst_adapter_prev_timestamp + gst_adapter_masked_scan_uint32 +%% +ignore-type + GstBufferList + GstTaskPool + GstBufferListItem + GstStreamStatusType + GstBufferList + GstBufferListIterator +%% diff --git a/gst/gst-0.10.25.ignore b/gst/gst-0.10.25.ignore new file mode 100644 index 0000000..c8a6d4f --- /dev/null +++ b/gst/gst-0.10.25.ignore @@ -0,0 +1,4 @@ +%% +ignore + gst_caps_can_intersect +%% \ No newline at end of file diff --git a/gst/gst-0.10.26.ignore b/gst/gst-0.10.26.ignore new file mode 100644 index 0000000..5a07bb9 --- /dev/null +++ b/gst/gst-0.10.26.ignore @@ -0,0 +1,20 @@ +%% +ignore + gst_caps_set_value + gst_pad_get_caps_reffed + gst_pad_peer_get_caps_reffed + gst_util_greatest_common_divisor + gst_util_fraction_to_double + gst_util_double_to_fraction + gst_util_fraction_multiply + gst_util_fraction_add + gst_event_new_sink_message + gst_event_parse_sink_message + gst_plugin_feature_list_copy + gst_registry_get_feature_list_cookie + gst_structure_id_has_field + gst_structure_id_has_field_type + gst_base_src_new_seamless_segment + gst_collect_pads_set_clip_function + gst_type_find_helper_get_range_ext +%% \ No newline at end of file diff --git a/gst/gst-0.10.29.ignore b/gst/gst-0.10.29.ignore new file mode 100644 index 0000000..106c41c --- /dev/null +++ b/gst/gst-0.10.29.ignore @@ -0,0 +1,9 @@ +%% +ignore + gst_message_new_qos + gst_message_set_qos_values + gst_message_set_qos_stats + gst_message_parse_qos + gst_message_parse_qos_values + gst_message_parse_qos_stats +%% \ No newline at end of file diff --git a/gst/gst-0.10.30.ignore b/gst/gst-0.10.30.ignore new file mode 100644 index 0000000..bb3baf0 --- /dev/null +++ b/gst/gst-0.10.30.ignore @@ -0,0 +1,14 @@ +%% +ignore + gst_caps_steal_structure + gst_structure_fixate_field_boolean + gst_tag_list_peek_string_index + gst_pad_link_full + gst_element_link_pads_full + gst_adapter_masked_scan_uint32_peek + gst_base_sink_set_last_buffer_enabled + gst_base_sink_is_last_buffer_enabled +%% +ignore-type + GstPadLinkCheck +%% \ No newline at end of file diff --git a/gst/gst-0.10.31.ignore b/gst/gst-0.10.31.ignore new file mode 100644 index 0000000..b324ae4 --- /dev/null +++ b/gst/gst-0.10.31.ignore @@ -0,0 +1,26 @@ +%% +ignore + gst_is_initialized + gst_buffer_list_iterator_add_list + gst_element_class_set_documentation_uri + gst_element_class_set_icon_name + gst_element_class_get_documentation_uri + gst_element_class_get_icon_name + gst_element_factory_list_is_type + gst_element_factory_list_get_elements + gst_element_factory_list_filter + gst_element_factory_get_documentation_uri + gst_element_factory_get_icon_name + gst_plugin_Feature_rank_compare_func + gst_query_add_buffering_range + gst_query_get_n_buffering_ranges + gst_query_parse_nth_buffering_range + gst_util_fraction_compare + gst_value_set_int64_range + gst_value_get_int64_range_min + gst_value_get_int64_range_max + gst_adapter_take_list +%% +ignore-type + GstDateTime +%% diff --git a/gst/gst-0.10.32.ignore b/gst/gst-0.10.32.ignore new file mode 100644 index 0000000..0875abe --- /dev/null +++ b/gst/gst-0.10.32.ignore @@ -0,0 +1,8 @@ +%% +ignore + gst_clock_single_shot_id_reinit + gst_read_gpollfd + gst_value_list_merge + gst_element_request_pad +%% + diff --git a/gst/gst-argtypes.c b/gst/gst-argtypes.c new file mode 100644 index 0000000..3b67a6b --- /dev/null +++ b/gst/gst-argtypes.c @@ -0,0 +1,65 @@ +/* gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +/* define this for all source files that don't run init_pygobject() + * before including pygobject.h */ +#define NO_IMPORT_PYGOBJECT + +#include "common.h" +#include + +/* This function will return a copy, unless the following is all TRUE: + * - The given PyObject contains a GstCaps already + * - The copy parameter is non-NULL + * - New years is the first of January + * If copy is non-NULL, it is set to TRUE if a copy was made. + * If the PyObject could not be converted to a caps, a TypeError is raised + * and NULL is returned. + */ +GstCaps * +pygst_caps_from_pyobject (PyObject * object, gboolean * copy) +{ + if (pyg_boxed_check (object, GST_TYPE_CAPS)) { + GstCaps *caps = pyg_boxed_get (object, GstCaps); + if (copy) { + *copy = FALSE; + return caps; + } else { + return gst_caps_copy (caps); + } + } else if (pyg_boxed_check (object, GST_TYPE_STRUCTURE)) { + GstStructure *structure = pyg_boxed_get (object, GstStructure); + if (copy) + *copy = TRUE; + return gst_caps_new_full (gst_structure_copy (structure), NULL); + } else if (PyString_Check (object)) { + GstCaps *caps = gst_caps_from_string (PyString_AsString (object)); + if (!caps) { + PyErr_SetString (PyExc_TypeError, "could not convert string to GstCaps"); + return NULL; + } + if (copy) + *copy = TRUE; + return caps; + } + PyErr_SetString (PyExc_TypeError, "could not convert to GstCaps"); + return NULL; +} diff --git a/gst/gst-disable-loadsave.ignore b/gst/gst-disable-loadsave.ignore new file mode 100644 index 0000000..4a43897 --- /dev/null +++ b/gst/gst-disable-loadsave.ignore @@ -0,0 +1,14 @@ +%% +ignore + gst_element_save_thyself + gst_element_restore_thyself + gst_xml_get_topelements + gst_xml_make_element + gst_xml_new + gst_xml_parse_memory + gst_xml_write + gst_xml_write_file +%% +ignore-type + GstXML +%% \ No newline at end of file diff --git a/gst/gst-extrafuncs.defs b/gst/gst-extrafuncs.defs new file mode 100644 index 0000000..6826627 --- /dev/null +++ b/gst/gst-extrafuncs.defs @@ -0,0 +1,150 @@ +; -*- scheme -*- + +(define-method flags + (of-object "GstElement") + (c-name "GST_OBJECT_FLAGS") + (return-type "GstElementFlags") +) + +(define-method set_flag + (of-object "GstObject") + (c-name "GST_OBJECT_FLAG_SET") + (return-type "none") + (parameters + '("GstObjectFlags" "flags") + ) +) + +(define-method unset_flag + (of-object "GstObject") + (c-name "GST_OBJECT_FLAG_UNSET") + (return-type "none") + (parameters + '("GstObjectFlags" "flag") + ) +) + +;; DEBUGGING FUNCTIONS FROM PYTHON +;; The c functions don't actually exist + +(define-function log + (c-name "gst_log") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function debug + (c-name "gst_debug") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function info + (c-name "gst_info") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function warning + (c-name "gst_warning") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function error + (c-name "gst_error") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function fixme + (c-name "gst_fixme") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-function memdump + (c-name "gst_memdump") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +;; OBJECT DEBUGGING FUNCTIONS FROM PYTHON +;; The c functions don't actually exist + +(define-method log + (of-object "GstObject") + (c-name "gst_object_log") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method debug + (of-object "GstObject") + (c-name "gst_object_debug") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method info + (of-object "GstObject") + (c-name "gst_object_info") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method warning + (of-object "GstObject") + (c-name "gst_object_warning") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method error + (of-object "GstObject") + (c-name "gst_object_error") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method fixme + (of-object "GstObject") + (c-name "gst_object_fixme") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) + +(define-method memdump + (of-object "GstObject") + (c-name "gst_object_memdump") + (return-type "none") + (parameters + '("gchar *" "msg") + ) +) diff --git a/gst/gst-pb-0.10.23.ignore b/gst/gst-pb-0.10.23.ignore new file mode 100644 index 0000000..92a18b6 --- /dev/null +++ b/gst/gst-pb-0.10.23.ignore @@ -0,0 +1,19 @@ +%% +ignore + gst_audio_clock_get_time + gst_audio_clock_adjust + gst_navigation_send_command + gst_video_format_parse_caps_interlaced + gst_video_format_new_caps_interlaced +%% +ignore-glob + gst_navigation_query_* + gst_navigation_message_* + gst_navigation_event_* +%% +ignore-type + GstNavigationCommand + GstNavigationQueryType + GstNavigationMessageType + GstNavigationEventType +%% diff --git a/gst/gst-pb-0.10.25.ignore b/gst/gst-pb-0.10.25.ignore new file mode 100644 index 0000000..95e26f8 --- /dev/null +++ b/gst/gst-pb-0.10.25.ignore @@ -0,0 +1,9 @@ +%% +ignore +%% +ignore-glob + gst_stream_volume_* +%% +ignore-type + GstStreamVolumeFormat +%% diff --git a/gst/gst-pb-0.10.26.ignore b/gst/gst-pb-0.10.26.ignore new file mode 100644 index 0000000..9991cea --- /dev/null +++ b/gst/gst-pb-0.10.26.ignore @@ -0,0 +1,10 @@ +%% +ignore + gst_tag_get_language_code + gst_tag_get_language_name + gst_tag_get_language_code_iso_639_1 + gst_tag_get_language_code_iso_638_2B + gst_tag_get_language_code_iso_638_2T + gst_video_event_new_still_frame + gst_video_event_parse_still_frame +%% \ No newline at end of file diff --git a/gst/gst-pb-0.10.29.ignore b/gst/gst-pb-0.10.29.ignore new file mode 100644 index 0000000..8e39404 --- /dev/null +++ b/gst/gst-pb-0.10.29.ignore @@ -0,0 +1,9 @@ +%% +ignore + gst_x_overlay_set_render_rectangle + gst_tag_list_from_xmp_buffer + gst_tag_list_to_xmp_buffer + gst_video_format_is_gray + gst_video_parse_caps_chroma_site + gst_video_parse_caps_color_matrix +%% \ No newline at end of file diff --git a/gst/gst-pb-0.10.30.ignore b/gst/gst-pb-0.10.30.ignore new file mode 100644 index 0000000..ea1e659 --- /dev/null +++ b/gst/gst-pb-0.10.30.ignore @@ -0,0 +1,7 @@ +%% +ignore + gst_tag_list_to_exif_buffer + gst_tag_list_to_exif_buffer_with_tiff_header + gst_tag_list_from_exif_buffer + gst_tag_list_from_exif_buffer_with_tiff_header +%% diff --git a/gst/gst-pb-0.10.31.ignore b/gst/gst-pb-0.10.31.ignore new file mode 100644 index 0000000..2b28116 --- /dev/null +++ b/gst/gst-pb-0.10.31.ignore @@ -0,0 +1,31 @@ +%% +ignore + gst_codec_utils_aac_get_sample_rate_from_index + gst_codec_utils_aac_get_profile + gst_codec_utils_aac_get_level + gst_codec_utils_aac_caps_set_level_and_profile + gst_codec_utils_h264_get_profile + gst_codec_utils_h264_get_level + gst_codec_utils_h264_caps_set_level_and_profile + gst_codec_utils_mpeg4video_get_profile + gst_codec_utils_mpeg4video_get_level + gst_codec_utils_mpeg4video_caps_set_level_and_profile + gst_plugins_base_version + gst_plugins_base_version_string + gst_audio_clock_invalidate + gst_base_audio_sink_set_drift_tolerance + gst_base_audio_sink_get_drift_tolerance + gst_x_overlay_set_window_handle + gst_x_overlay_got_window_handle + gst_video_convert_frame + gst_video_convert_frame_async +%% +ignore-type + GstDiscoverer + GstDiscovererResult + GstDiscovererInfo + GstDiscovererStreamInfo + GstDiscovererContainerInfo + GstDiscovererAudioInfo + GstDiscovererVideoInfo +%% \ No newline at end of file diff --git a/gst/gst-pb-0.10.32.ignore b/gst/gst-pb-0.10.32.ignore new file mode 100644 index 0000000..5e334fc --- /dev/null +++ b/gst/gst-pb-0.10.32.ignore @@ -0,0 +1,50 @@ +%% +ignore + gst_encoding_profile_get_name + gst_encoding_profile_get_description + gst_encoding_profile_get_format + gst_encoding_profile_get_preset + gst_encoding_profile_get_presence + gst_encoding_profile_get_restriction + gst_encoding_profile_set_name + gst_encoding_profile_set_description + gst_encoding_profile_set_format + gst_encoding_profile_set_preset + gst_encoding_profile_set_presence + gst_encoding_profile_set_restriction + gst_encoding_profile_is_equal + gst_encoding_profile_get_output_caps + gst_encoding_profile_get_type_nick + gst_encoding_profile_find + gst_encoding_container_profile_add_profile + gst_encoding_container_profile_contains_profile + gst_encoding_container_profile_get_profiles + gst_encoding_container_profile_new + gst_encoding_audio_profile_new + gst_encoding_video_profile_new + gst_encoding_video_profile_get_pass + gst_encoding_video_profile_set_pass + gst_encoding_video_profile_get_variableframerate + gst_encoding_video_profile_set_variableframerate + gst_encoding_target_new + gst_encoding_target_get_name + gst_encoding_target_get_category + gst_encoding_target_get_description + gst_encoding_target_get_profiles + gst_encoding_target_add_profile + gst_encoding_target_save + gst_encoding_target_save_to_file + gst_encoding_target_load + gst_encoding_target_load_from_file + gst_encoding_list_available_categories + gst_encoding_list_all_targets + gst_discoverer_info_get_seekable + gst_video_parse_caps_palette +%% +ignore-type + GstEncodingProfile + GstEncodingContainerProfile + GstEncodingAudioProfile + GstEncodingVideoProfile + GstEncodingTarget +%% \ No newline at end of file diff --git a/gst/gst-types.defs b/gst/gst-types.defs new file mode 100644 index 0000000..e7ce858 --- /dev/null +++ b/gst/gst-types.defs @@ -0,0 +1,1240 @@ +;; -*- scheme -*- + +; object definitions ... + +(define-object Object + (in-module "Gst") + (parent "GObject") + (c-name "GstObject") + (gtype-id "GST_TYPE_OBJECT") + (fields + '("int" "__gstrefcount__") + ) +) + +(define-object Index + (in-module "Gst") + (parent "GstObject") + (c-name "GstIndex") + (gtype-id "GST_TYPE_INDEX") +) + +(define-object Element + (in-module "Gst") + (parent "GstObject") + (c-name "GstElement") + (gtype-id "GST_TYPE_ELEMENT") +) + +(define-object Bin + (in-module "Gst") + (parent "GstElement") + (c-name "GstBin") + (gtype-id "GST_TYPE_BIN") +) + +(define-object Clock + (in-module "Gst") + (parent "GstObject") + (c-name "GstClock") + (gtype-id "GST_TYPE_CLOCK") +) + +(define-object Bus + (in-module "Gst") + (parent "GstObject") + (c-name "GstBus") + (gtype-id "GST_TYPE_BUS") +) + +(define-object Pad + (in-module "Gst") + (parent "GstObject") + (c-name "GstPad") + (gtype-id "GST_TYPE_PAD") +) + +(define-object GhostPad + (in-module "Gst") + (parent "GstPad") + (c-name "GstGhostPad") + (gtype-id "GST_TYPE_GHOST_PAD") +) + +(define-object PadTemplate + (in-module "Gst") + (parent "GstObject") + (c-name "GstPadTemplate") + (gtype-id "GST_TYPE_PAD_TEMPLATE") + (fields + '("const-gchar*" "name_template") + '("GstPadDirection" "direction") + '("GstPadPresence" "presence") + '("GstCaps*" "caps") + ) +) + +(define-object Pipeline + (in-module "Gst") + (parent "GstBin") + (c-name "GstPipeline") + (gtype-id "GST_TYPE_PIPELINE") +) + +(define-object PluginFeature + (in-module "Gst") + (parent "GstObject") + (c-name "GstPluginFeature") + (gtype-id "GST_TYPE_PLUGIN_FEATURE") +) + +(define-object IndexFactory + (in-module "Gst") + (parent "GstPluginFeature") + (c-name "GstIndexFactory") + (gtype-id "GST_TYPE_INDEX_FACTORY") +) + +(define-object ElementFactory + (in-module "Gst") + (parent "GstPluginFeature") + (c-name "GstElementFactory") + (gtype-id "GST_TYPE_ELEMENT_FACTORY") +) + +(define-object Registry + (in-module "Gst") + (parent "GstObject") + (c-name "GstRegistry") + (gtype-id "GST_TYPE_REGISTRY") +) + +(define-object SystemClock + (in-module "Gst") + (parent "GstClock") + (c-name "GstSystemClock") + (gtype-id "GST_TYPE_SYSTEM_CLOCK") +) + +(define-object Task + (in-module "Gst") + (parent "GstObject") + (c-name "GstTask") + (gtype-id "GST_TYPE_TASK") +) + +(define-object TaskPool + (in-module "Gst") + (parent "GstObject") + (c-name "GstTaskPool") + (gtype-id "GST_TYPE_TASK_POOL") +) + +(define-object TypeFindFactory + (in-module "Gst") + (parent "GstPluginFeature") + (c-name "GstTypeFindFactory") + (gtype-id "GST_TYPE_TYPE_FIND_FACTORY") +) + +(define-object XML + (in-module "Gst") + (parent "GstObject") + (c-name "GstXML") + (gtype-id "GST_TYPE_XML") +) + +(define-object NetClientClock + (in-module "Gst") + (parent "GstSystemClock") + (c-name "GstNetClientClock") + (gtype-id "GST_TYPE_NET_CLIENT_CLOCK") +) + +(define-object NetTimeProvider + (in-module "Gst") + (parent "GstObject") + (c-name "GstNetTimeProvider") + (gtype-id "GST_TYPE_NET_TIME_PROVIDER") +) + +;; +;; MiniObject types +;; + +(define-miniobject Buffer + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstBuffer") + (gtype-id "GST_TYPE_BUFFER") + (fields + '("guint8" "data") + '("guint" "size") + '("GstClockTime" "timestamp") + '("GstClockTime" "duration") + '("guint64" "offset") + '("guint64" "offset_end") + '("GstCaps*" "caps") + ) +) + +(define-miniobject BufferList + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstBufferList") + (gtype-id "GST_TYPE_BUFFER_LIST") +) + +(define-miniobject Event + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstEvent") + (gtype-id "GST_TYPE_EVENT") + (fields + '("GstEventType" "type") + '("guint64" "timestamp") + '("GstObject*" "src") + ) +) + +(define-miniobject Message + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstMessage") + (gtype-id "GST_TYPE_MESSAGE") + (fields + '("GstMessageType" "type") + '("guint64" "timestamp") + '("GstObject*" "src") + '("GstStructure*" "structure") + ) +) + +(define-miniobject Query + (in-module "Gst") + (parent "GstMiniObject") + (c-name "GstQuery") + (gtype-id "GST_TYPE_QUERY") + (fields + '("GstQueryType" "type") + '("GstStructure*" "structure") + ) +) + + +;; +;; Boxed types +;; + +(define-boxed Caps + (in-module "Gst") + (c-name "GstCaps") + (gtype-id "GST_TYPE_CAPS") + (fields + '("int" "__refcount__") + ) +) + +(define-boxed DateTime + (in-module "Gst") + (c-name "GstDateTime") + (gtype-id "GST_TYPE_DATE_TIME") +) + +(define-object Plugin + (in-module "Gst") + (parent "GstObject") + (c-name "GstPlugin") + (gtype-id "GST_TYPE_PLUGIN") +) + +(define-boxed Structure + (in-module "Gst") + (c-name "GstStructure") + (gtype-id "GST_TYPE_STRUCTURE") + (copy-func "gst_structure_copy") + (release-func "gst_structure_unref") +) + +(define-boxed TagList + (in-module "Gst") + (c-name "GstTagList") + (gtype-id "GST_TYPE_TAG_LIST") +) + +(define-boxed GError + (in-module "Gst") + (c-name "GError") + (gtype-id "GST_TYPE_G_ERROR") + (copy-func "g_error_copy") + (release-func "g_error_free") + (fields + '("GQuark" "domain") + '("gint" "code") + '("gchar*" "message")) +) + +(define-boxed Date + (in-module "Gst") + (c-name "GstDate") + (gtype-id "GST_TYPE_DATE") + (fields + '("gint" "day") + '("gint" "month") + '("gint" "year") + ) +) + +(define-boxed Segment + (in-module "Gst") + (c-name "GstSegment") + (gtype-id "GST_TYPE_SEGMENT") + (fields + '("gdouble" "rate") + '("gdouble" "abs_rate") + '("GstFormat" "format") + '("GstSeekFlags" "flags") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "time") + '("gint64" "accum") + '("gint64" "last_stop") + '("gint64" "duration") + ) +) + +(define-boxed IndexEntry + (in-module "Gst") + (c-name "GstIndexEntry") + (gtype-id "GST_TYPE_INDEX_ENTRY") + (fields + '("GstIndexEntryType" "type") + '("gint" "id") + '("gint" "NASSOCS") + '("GstAssocFlags" "ASSOC_FLAGS") + '("const-gchar*" "ID_DESCRIPTION") + ) +) + + +(define-pointer StaticPadTemplate + (in-module "Gst") + (c-name "GstStaticPadTemplate") + (gtype-id "GST_TYPE_STATIC_PAD_TEMPLATE") + (fields + '("gchar*" "name_template") + '("GstPadDirection" "direction") + '("GstPadPresence" "presence") + '("GstStaticCaps" "static_caps") + ) +) + +(define-pointer StaticCaps + (in-module "Gst") + (c-name "GstStaticCaps") + (gtype-id "GST_TYPE_STATIC_CAPS") + (fields + '("GstCaps" "caps") + '("const-gchar*" "string") + ) +) + +(define-pointer TypeFind + (in-module "Gst") + (c-name "GstTypeFind") + (gtype-id "GST_TYPE_TYPE_FIND") + (fields + ) +) + +;; Enumerations and flags ... + +(define-flags BinFlags + (in-module "Gst") + (c-name "GstBinFlags") + (gtype-id "GST_TYPE_BIN_FLAGS") + (values + '("last" "GST_BIN_FLAG_LAST") + ) +) + +(define-flags BufferFlag + (in-module "Gst") + (c-name "GstBufferFlag") + (gtype-id "GST_TYPE_BUFFER_FLAG") + (values + '("readonly" "GST_BUFFER_FLAG_READONLY") + '("preroll" "GST_BUFFER_FLAG_PREROLL") + '("discont" "GST_BUFFER_FLAG_DISCONT") + '("in-caps" "GST_BUFFER_FLAG_IN_CAPS") + '("gap" "GST_BUFFER_FLAG_GAP") + '("delta-unit" "GST_BUFFER_FLAG_DELTA_UNIT") + '("media1" "GST_BUFFER_FLAG_MEDIA1") + '("media2" "GST_BUFFER_FLAG_MEDIA2") + '("media3" "GST_BUFFER_FLAG_MEDIA3") + '("last" "GST_BUFFER_FLAG_LAST") + ) +) + +(define-flags BufferCopyFlags + (in-module "Gst") + (c-name "GstBufferCopyFlags") + (gtype-id "GST_TYPE_BUFFER_COPY_FLAGS") + (values + '("flags" "GST_BUFFER_COPY_FLAGS") + '("timestamps" "GST_BUFFER_COPY_TIMESTAMPS") + '("caps" "GST_BUFFER_COPY_CAPS") + ) +) + +(define-enum BufferListItem + (in-module "Gst") + (c-name "GstBufferListItem") + (gtype-id "GST_TYPE_BUFFER_LIST_ITEM") + (values + '("continue" "GST_BUFFER_LIST_CONTINUE") + '("skip-group" "GST_BUFFER_LIST_SKIP_GROUP") + '("end" "GST_BUFFER_LIST_END") + ) +) + +(define-flags BusFlags + (in-module "Gst") + (c-name "GstBusFlags") + (gtype-id "GST_TYPE_BUS_FLAGS") + (values + '("flushing" "GST_BUS_FLUSHING") + '("flag-last" "GST_BUS_FLAG_LAST") + ) +) + +(define-enum BusSyncReply + (in-module "Gst") + (c-name "GstBusSyncReply") + (gtype-id "GST_TYPE_BUS_SYNC_REPLY") + (values + '("drop" "GST_BUS_DROP") + '("pass" "GST_BUS_PASS") + '("async" "GST_BUS_ASYNC") + ) +) + +(define-flags CapsFlags + (in-module "Gst") + (c-name "GstCapsFlags") + (gtype-id "GST_TYPE_CAPS_FLAGS") + (values + '("y" "GST_CAPS_FLAGS_ANY") + ) +) + +(define-enum ClockReturn + (in-module "Gst") + (c-name "GstClockReturn") + (gtype-id "GST_TYPE_CLOCK_RETURN") + (values + '("ok" "GST_CLOCK_OK") + '("early" "GST_CLOCK_EARLY") + '("unscheduled" "GST_CLOCK_UNSCHEDULED") + '("busy" "GST_CLOCK_BUSY") + '("badtime" "GST_CLOCK_BADTIME") + '("error" "GST_CLOCK_ERROR") + '("unsupported" "GST_CLOCK_UNSUPPORTED") + '("done" "GST_CLOCK_DONE") + ) +) + +(define-enum ClockEntryType + (in-module "Gst") + (c-name "GstClockEntryType") + (gtype-id "GST_TYPE_CLOCK_ENTRY_TYPE") + (values + '("single" "GST_CLOCK_ENTRY_SINGLE") + '("periodic" "GST_CLOCK_ENTRY_PERIODIC") + ) +) + +(define-flags ClockFlags + (in-module "Gst") + (c-name "GstClockFlags") + (gtype-id "GST_TYPE_CLOCK_FLAGS") + (values + '("can-do-single-sync" "GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC") + '("can-do-single-async" "GST_CLOCK_FLAG_CAN_DO_SINGLE_ASYNC") + '("can-do-periodic-sync" "GST_CLOCK_FLAG_CAN_DO_PERIODIC_SYNC") + '("can-do-periodic-async" "GST_CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC") + '("can-set-resolution" "GST_CLOCK_FLAG_CAN_SET_RESOLUTION") + '("can-set-master" "GST_CLOCK_FLAG_CAN_SET_MASTER") + '("last" "GST_CLOCK_FLAG_LAST") + ) +) + +(define-flags DebugGraphDetails + (in-module "Gst") + (c-name "GstDebugGraphDetails") + (gtype-id "GST_TYPE_DEBUG_GRAPH_DETAILS") + (values + '("media-type" "GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE") + '("caps-details" "GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS") + '("non-default-params" "GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS") + '("states" "GST_DEBUG_GRAPH_SHOW_STATES") + '("all" "GST_DEBUG_GRAPH_SHOW_ALL") + ) +) + +(define-flags ElementFlags + (in-module "Gst") + (c-name "GstElementFlags") + (gtype-id "GST_TYPE_ELEMENT_FLAGS") + (values + '("locked-state" "GST_ELEMENT_LOCKED_STATE") + '("is-sink" "GST_ELEMENT_IS_SINK") + '("unparenting" "GST_ELEMENT_UNPARENTING") + '("flag-last" "GST_ELEMENT_FLAG_LAST") + ) +) + +(define-flags ParamFlags + (in-module "Gst") + (c-name "GstParamFlags") + (values + '("controllable" "GST_PARAM_CONTROLLABLE") + '("mutable-ready" "GST_PARAM_MUTABLE_READY") + '("mutable-paused" "GST_PARAM_MUTABLE_PAUSED") + '("mutable-playing" "GST_PARAM_MUTABLE_PLAYING") + '("user-shift" "GST_PARAM_USER_SHIFT") + ) +) + +(define-enum CoreError + (in-module "Gst") + (c-name "GstCoreError") + (gtype-id "GST_TYPE_CORE_ERROR") + (values + '("failed" "GST_CORE_ERROR_FAILED") + '("too-lazy" "GST_CORE_ERROR_TOO_LAZY") + '("not-implemented" "GST_CORE_ERROR_NOT_IMPLEMENTED") + '("state-change" "GST_CORE_ERROR_STATE_CHANGE") + '("pad" "GST_CORE_ERROR_PAD") + '("thread" "GST_CORE_ERROR_THREAD") + '("negotiation" "GST_CORE_ERROR_NEGOTIATION") + '("event" "GST_CORE_ERROR_EVENT") + '("seek" "GST_CORE_ERROR_SEEK") + '("caps" "GST_CORE_ERROR_CAPS") + '("tag" "GST_CORE_ERROR_TAG") + '("missing-plugin" "GST_CORE_ERROR_MISSING_PLUGIN") + '("clock" "GST_CORE_ERROR_CLOCK") + '("disabled" "GST_CORE_ERROR_DISABLED") + '("num-errors" "GST_CORE_ERROR_NUM_ERRORS") + ) +) + +(define-enum LibraryError + (in-module "Gst") + (c-name "GstLibraryError") + (gtype-id "GST_TYPE_LIBRARY_ERROR") + (values + '("failed" "GST_LIBRARY_ERROR_FAILED") + '("too-lazy" "GST_LIBRARY_ERROR_TOO_LAZY") + '("init" "GST_LIBRARY_ERROR_INIT") + '("shutdown" "GST_LIBRARY_ERROR_SHUTDOWN") + '("settings" "GST_LIBRARY_ERROR_SETTINGS") + '("encode" "GST_LIBRARY_ERROR_ENCODE") + '("num-errors" "GST_LIBRARY_ERROR_NUM_ERRORS") + ) +) + +(define-enum ResourceError + (in-module "Gst") + (c-name "GstResourceError") + (gtype-id "GST_TYPE_RESOURCE_ERROR") + (values + '("failed" "GST_RESOURCE_ERROR_FAILED") + '("too-lazy" "GST_RESOURCE_ERROR_TOO_LAZY") + '("not-found" "GST_RESOURCE_ERROR_NOT_FOUND") + '("busy" "GST_RESOURCE_ERROR_BUSY") + '("open-read" "GST_RESOURCE_ERROR_OPEN_READ") + '("open-write" "GST_RESOURCE_ERROR_OPEN_WRITE") + '("open-read-write" "GST_RESOURCE_ERROR_OPEN_READ_WRITE") + '("close" "GST_RESOURCE_ERROR_CLOSE") + '("read" "GST_RESOURCE_ERROR_READ") + '("write" "GST_RESOURCE_ERROR_WRITE") + '("seek" "GST_RESOURCE_ERROR_SEEK") + '("sync" "GST_RESOURCE_ERROR_SYNC") + '("settings" "GST_RESOURCE_ERROR_SETTINGS") + '("no-space-left" "GST_RESOURCE_ERROR_NO_SPACE_LEFT") + '("num-errors" "GST_RESOURCE_ERROR_NUM_ERRORS") + ) +) + +(define-enum StreamError + (in-module "Gst") + (c-name "GstStreamError") + (gtype-id "GST_TYPE_STREAM_ERROR") + (values + '("failed" "GST_STREAM_ERROR_FAILED") + '("too-lazy" "GST_STREAM_ERROR_TOO_LAZY") + '("not-implemented" "GST_STREAM_ERROR_NOT_IMPLEMENTED") + '("type-not-found" "GST_STREAM_ERROR_TYPE_NOT_FOUND") + '("wrong-type" "GST_STREAM_ERROR_WRONG_TYPE") + '("codec-not-found" "GST_STREAM_ERROR_CODEC_NOT_FOUND") + '("decode" "GST_STREAM_ERROR_DECODE") + '("encode" "GST_STREAM_ERROR_ENCODE") + '("demux" "GST_STREAM_ERROR_DEMUX") + '("mux" "GST_STREAM_ERROR_MUX") + '("format" "GST_STREAM_ERROR_FORMAT") + '("decrypt" "GST_STREAM_ERROR_DECRYPT") + '("decrypt-nokey" "GST_STREAM_ERROR_DECRYPT_NOKEY") + '("num-errors" "GST_STREAM_ERROR_NUM_ERRORS") + ) +) + +(define-flags EventTypeFlags + (in-module "Gst") + (c-name "GstEventTypeFlags") + (gtype-id "GST_TYPE_EVENT_TYPE_FLAGS") + (values + '("upstream" "GST_EVENT_TYPE_UPSTREAM") + '("downstream" "GST_EVENT_TYPE_DOWNSTREAM") + '("serialized" "GST_EVENT_TYPE_SERIALIZED") + ) +) + +(define-enum EventType + (in-module "Gst") + (c-name "GstEventType") + (gtype-id "GST_TYPE_EVENT_TYPE") + (values + '("unknown" "GST_EVENT_UNKNOWN") + '("flush-start" "GST_EVENT_FLUSH_START") + '("flush-stop" "GST_EVENT_FLUSH_STOP") + '("eos" "GST_EVENT_EOS") + '("newsegment" "GST_EVENT_NEWSEGMENT") + '("tag" "GST_EVENT_TAG") + '("filler" "GST_EVENT_FILLER") + '("buffersize" "GST_EVENT_BUFFERSIZE") + '("sink-message" "GST_EVENT_SINK_MESSAGE") + '("qos" "GST_EVENT_QOS") + '("seek" "GST_EVENT_SEEK") + '("navigation" "GST_EVENT_NAVIGATION") + '("latency" "GST_EVENT_LATENCY") + '("step" "GST_EVENT_STEP") + '("custom-upstream" "GST_EVENT_CUSTOM_UPSTREAM") + '("custom-downstream" "GST_EVENT_CUSTOM_DOWNSTREAM") + '("custom-downstream-oob" "GST_EVENT_CUSTOM_DOWNSTREAM_OOB") + '("custom-both" "GST_EVENT_CUSTOM_BOTH") + '("custom-both-oob" "GST_EVENT_CUSTOM_BOTH_OOB") + ) +) + +(define-enum SeekType + (in-module "Gst") + (c-name "GstSeekType") + (gtype-id "GST_TYPE_SEEK_TYPE") + (values + '("none" "GST_SEEK_TYPE_NONE") + '("cur" "GST_SEEK_TYPE_CUR") + '("set" "GST_SEEK_TYPE_SET") + '("end" "GST_SEEK_TYPE_END") + ) +) + +(define-flags SeekFlags + (in-module "Gst") + (c-name "GstSeekFlags") + (gtype-id "GST_TYPE_SEEK_FLAGS") + (values + '("none" "GST_SEEK_FLAG_NONE") + '("flush" "GST_SEEK_FLAG_FLUSH") + '("accurate" "GST_SEEK_FLAG_ACCURATE") + '("key-unit" "GST_SEEK_FLAG_KEY_UNIT") + '("segment" "GST_SEEK_FLAG_SEGMENT") + '("skip" "GST_SEEK_FLAG_SKIP") + ) +) + +(define-enum Format + (in-module "Gst") + (c-name "GstFormat") + (gtype-id "GST_TYPE_FORMAT") + (values + '("undefined" "GST_FORMAT_UNDEFINED") + '("default" "GST_FORMAT_DEFAULT") + '("bytes" "GST_FORMAT_BYTES") + '("time" "GST_FORMAT_TIME") + '("buffers" "GST_FORMAT_BUFFERS") + '("percent" "GST_FORMAT_PERCENT") + ) +) + +(define-enum IndexCertainty + (in-module "Gst") + (c-name "GstIndexCertainty") + (gtype-id "GST_TYPE_INDEX_CERTAINTY") + (values + '("unknown" "GST_INDEX_UNKNOWN") + '("certain" "GST_INDEX_CERTAIN") + '("fuzzy" "GST_INDEX_FUZZY") + ) +) + +(define-enum IndexEntryType + (in-module "Gst") + (c-name "GstIndexEntryType") + (gtype-id "GST_TYPE_INDEX_ENTRY_TYPE") + (values + '("id" "GST_INDEX_ENTRY_ID") + '("association" "GST_INDEX_ENTRY_ASSOCIATION") + '("object" "GST_INDEX_ENTRY_OBJECT") + '("format" "GST_INDEX_ENTRY_FORMAT") + ) +) + +(define-enum IndexLookupMethod + (in-module "Gst") + (c-name "GstIndexLookupMethod") + (gtype-id "GST_TYPE_INDEX_LOOKUP_METHOD") + (values + '("exact" "GST_INDEX_LOOKUP_EXACT") + '("before" "GST_INDEX_LOOKUP_BEFORE") + '("after" "GST_INDEX_LOOKUP_AFTER") + ) +) + +(define-flags AssocFlags + (in-module "Gst") + (c-name "GstAssocFlags") + (gtype-id "GST_TYPE_ASSOC_FLAGS") + (values + '("none" "GST_ASSOCIATION_FLAG_NONE") + '("key-unit" "GST_ASSOCIATION_FLAG_KEY_UNIT") + '("delta-unit" "GST_ASSOCIATION_FLAG_DELTA_UNIT") + '("last" "GST_ASSOCIATION_FLAG_LAST") + ) +) + +(define-enum IndexResolverMethod + (in-module "Gst") + (c-name "GstIndexResolverMethod") + (gtype-id "GST_TYPE_INDEX_RESOLVER_METHOD") + (values + '("custom" "GST_INDEX_RESOLVER_CUSTOM") + '("gtype" "GST_INDEX_RESOLVER_GTYPE") + '("path" "GST_INDEX_RESOLVER_PATH") + ) +) + +(define-flags IndexFlags + (in-module "Gst") + (c-name "GstIndexFlags") + (gtype-id "GST_TYPE_INDEX_FLAGS") + (values + '("writable" "GST_INDEX_WRITABLE") + '("readable" "GST_INDEX_READABLE") + '("flag-last" "GST_INDEX_FLAG_LAST") + ) +) + +(define-enum DebugLevel + (in-module "Gst") + (c-name "GstDebugLevel") + (gtype-id "GST_TYPE_DEBUG_LEVEL") + (values + '("none" "GST_LEVEL_NONE") + '("error" "GST_LEVEL_ERROR") + '("warning" "GST_LEVEL_WARNING") + '("info" "GST_LEVEL_INFO") + '("debug" "GST_LEVEL_DEBUG") + '("log" "GST_LEVEL_LOG") + '("fixme" "GST_LEVEL_FIXME") + '("trace" "GST_LEVEL_TRACE") + '("memdump" "GST_LEVEL_MEMDUMP") + '("count" "GST_LEVEL_COUNT") + ) +) + +(define-enum DebugColorFlags + (in-module "Gst") + (c-name "GstDebugColorFlags") + (gtype-id "GST_TYPE_DEBUG_COLOR_FLAGS") + (values + '("fg-black" "GST_DEBUG_FG_BLACK") + '("fg-red" "GST_DEBUG_FG_RED") + '("fg-green" "GST_DEBUG_FG_GREEN") + '("fg-yellow" "GST_DEBUG_FG_YELLOW") + '("fg-blue" "GST_DEBUG_FG_BLUE") + '("fg-magenta" "GST_DEBUG_FG_MAGENTA") + '("fg-cyan" "GST_DEBUG_FG_CYAN") + '("fg-white" "GST_DEBUG_FG_WHITE") + '("bg-black" "GST_DEBUG_BG_BLACK") + '("bg-red" "GST_DEBUG_BG_RED") + '("bg-green" "GST_DEBUG_BG_GREEN") + '("bg-yellow" "GST_DEBUG_BG_YELLOW") + '("bg-blue" "GST_DEBUG_BG_BLUE") + '("bg-magenta" "GST_DEBUG_BG_MAGENTA") + '("bg-cyan" "GST_DEBUG_BG_CYAN") + '("bg-white" "GST_DEBUG_BG_WHITE") + '("bold" "GST_DEBUG_BOLD") + '("underline" "GST_DEBUG_UNDERLINE") + ) +) + +(define-enum IteratorResult + (in-module "Gst") + (c-name "GstIteratorResult") + (gtype-id "GST_TYPE_ITERATOR_RESULT") + (values + '("done" "GST_ITERATOR_DONE") + '("ok" "GST_ITERATOR_OK") + '("resync" "GST_ITERATOR_RESYNC") + '("error" "GST_ITERATOR_ERROR") + ) +) + +(define-enum IteratorItem + (in-module "Gst") + (c-name "GstIteratorItem") + (gtype-id "GST_TYPE_ITERATOR_ITEM") + (values + '("skip" "GST_ITERATOR_ITEM_SKIP") + '("pass" "GST_ITERATOR_ITEM_PASS") + '("end" "GST_ITERATOR_ITEM_END") + ) +) + +(define-flags MessageType + (in-module "Gst") + (c-name "GstMessageType") + (gtype-id "GST_TYPE_MESSAGE_TYPE") + (values + '("unknown" "GST_MESSAGE_UNKNOWN") + '("eos" "GST_MESSAGE_EOS") + '("error" "GST_MESSAGE_ERROR") + '("warning" "GST_MESSAGE_WARNING") + '("info" "GST_MESSAGE_INFO") + '("tag" "GST_MESSAGE_TAG") + '("buffering" "GST_MESSAGE_BUFFERING") + '("state-changed" "GST_MESSAGE_STATE_CHANGED") + '("state-dirty" "GST_MESSAGE_STATE_DIRTY") + '("step-done" "GST_MESSAGE_STEP_DONE") + '("clock-provide" "GST_MESSAGE_CLOCK_PROVIDE") + '("clock-lost" "GST_MESSAGE_CLOCK_LOST") + '("new-clock" "GST_MESSAGE_NEW_CLOCK") + '("structure-change" "GST_MESSAGE_STRUCTURE_CHANGE") + '("stream-status" "GST_MESSAGE_STREAM_STATUS") + '("application" "GST_MESSAGE_APPLICATION") + '("element" "GST_MESSAGE_ELEMENT") + '("segment-start" "GST_MESSAGE_SEGMENT_START") + '("segment-done" "GST_MESSAGE_SEGMENT_DONE") + '("duration" "GST_MESSAGE_DURATION") + '("latency" "GST_MESSAGE_LATENCY") + '("async-start" "GST_MESSAGE_ASYNC_START") + '("async-done" "GST_MESSAGE_ASYNC_DONE") + '("request-state" "GST_MESSAGE_REQUEST_STATE") + '("step-start" "GST_MESSAGE_STEP_START") + '("qos" "GST_MESSAGE_QOS") + '("any" "GST_MESSAGE_ANY") + ) +) + +(define-enum StructureChangeType + (in-module "Gst") + (c-name "GstStructureChangeType") + (gtype-id "GST_TYPE_STRUCTURE_CHANGE_TYPE") + (values + '("link" "GST_STRUCTURE_CHANGE_TYPE_PAD_LINK") + '("unlink" "GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK") + ) +) + +(define-enum StreamStatusType + (in-module "Gst") + (c-name "GstStreamStatusType") + (gtype-id "GST_TYPE_STREAM_STATUS_TYPE") + (values + '("create" "GST_STREAM_STATUS_TYPE_CREATE") + '("enter" "GST_STREAM_STATUS_TYPE_ENTER") + '("leave" "GST_STREAM_STATUS_TYPE_LEAVE") + '("destroy" "GST_STREAM_STATUS_TYPE_DESTROY") + '("start" "GST_STREAM_STATUS_TYPE_START") + '("pause" "GST_STREAM_STATUS_TYPE_PAUSE") + '("stop" "GST_STREAM_STATUS_TYPE_STOP") + ) +) + +(define-flags MiniObjectFlags + (in-module "Gst") + (c-name "GstMiniObjectFlags") + (gtype-id "GST_TYPE_MINI_OBJECT_FLAGS") + (values + '("readonly" "GST_MINI_OBJECT_FLAG_READONLY") + '("last" "GST_MINI_OBJECT_FLAG_LAST") + ) +) + +(define-flags ObjectFlags + (in-module "Gst") + (c-name "GstObjectFlags") + (gtype-id "GST_TYPE_OBJECT_FLAGS") + (values + '("disposing" "GST_OBJECT_DISPOSING") + '("floating" "GST_OBJECT_FLOATING") + '("flag-last" "GST_OBJECT_FLAG_LAST") + ) +) + +(define-enum PadLinkReturn + (in-module "Gst") + (c-name "GstPadLinkReturn") + (gtype-id "GST_TYPE_PAD_LINK_RETURN") + (values + '("ok" "GST_PAD_LINK_OK") + '("wrong-hierarchy" "GST_PAD_LINK_WRONG_HIERARCHY") + '("was-linked" "GST_PAD_LINK_WAS_LINKED") + '("wrong-direction" "GST_PAD_LINK_WRONG_DIRECTION") + '("noformat" "GST_PAD_LINK_NOFORMAT") + '("nosched" "GST_PAD_LINK_NOSCHED") + '("refused" "GST_PAD_LINK_REFUSED") + ) +) + +(define-enum FlowReturn + (in-module "Gst") + (c-name "GstFlowReturn") + (gtype-id "GST_TYPE_FLOW_RETURN") + (values + '("custom-success-2" "GST_FLOW_CUSTOM_SUCCESS_2") + '("custom-success-1" "GST_FLOW_CUSTOM_SUCCESS_1") + '("custom-success" "GST_FLOW_CUSTOM_SUCCESS") + '("resend" "GST_FLOW_RESEND") + '("ok" "GST_FLOW_OK") + '("not-linked" "GST_FLOW_NOT_LINKED") + '("wrong-state" "GST_FLOW_WRONG_STATE") + '("unexpected" "GST_FLOW_UNEXPECTED") + '("not-negotiated" "GST_FLOW_NOT_NEGOTIATED") + '("error" "GST_FLOW_ERROR") + '("not-supported" "GST_FLOW_NOT_SUPPORTED") + '("custom-error" "GST_FLOW_CUSTOM_ERROR") + '("custom-error-1" "GST_FLOW_CUSTOM_ERROR_1") + '("custom-error-2" "GST_FLOW_CUSTOM_ERROR_2") + ) +) + +(define-flags PadLinkCheck + (in-module "Gst") + (c-name "GstPadLinkCheck") + (gtype-id "GST_TYPE_PAD_LINK_CHECK") + (values + '("nothing" "GST_PAD_LINK_CHECK_NOTHING") + '("hierarchy" "GST_PAD_LINK_CHECK_HIERARCHY") + '("template-caps" "GST_PAD_LINK_CHECK_TEMPLATE_CAPS") + '("caps" "GST_PAD_LINK_CHECK_CAPS") + ) +) + +(define-enum ActivateMode + (in-module "Gst") + (c-name "GstActivateMode") + (gtype-id "GST_TYPE_ACTIVATE_MODE") + (values + '("none" "GST_ACTIVATE_NONE") + '("push" "GST_ACTIVATE_PUSH") + '("pull" "GST_ACTIVATE_PULL") + ) +) + +(define-enum PadDirection + (in-module "Gst") + (c-name "GstPadDirection") + (gtype-id "GST_TYPE_PAD_DIRECTION") + (values + '("unknown" "GST_PAD_UNKNOWN") + '("src" "GST_PAD_SRC") + '("sink" "GST_PAD_SINK") + ) +) + +(define-flags PadFlags + (in-module "Gst") + (c-name "GstPadFlags") + (gtype-id "GST_TYPE_PAD_FLAGS") + (values + '("blocked" "GST_PAD_BLOCKED") + '("flushing" "GST_PAD_FLUSHING") + '("in-getcaps" "GST_PAD_IN_GETCAPS") + '("in-setcaps" "GST_PAD_IN_SETCAPS") + '("flag-last" "GST_PAD_FLAG_LAST") + ) +) + +(define-enum PadPresence + (in-module "Gst") + (c-name "GstPadPresence") + (gtype-id "GST_TYPE_PAD_PRESENCE") + (values + '("always" "GST_PAD_ALWAYS") + '("sometimes" "GST_PAD_SOMETIMES") + '("request" "GST_PAD_REQUEST") + ) +) + +(define-flags PadTemplateFlags + (in-module "Gst") + (c-name "GstPadTemplateFlags") + (gtype-id "GST_TYPE_PAD_TEMPLATE_FLAGS") + (values + '("fixed" "GST_PAD_TEMPLATE_FIXED") + '("flag-last" "GST_PAD_TEMPLATE_FLAG_LAST") + ) +) + +(define-enum ParseError + (in-module "Gst") + (c-name "GstParseError") + (gtype-id "GST_TYPE_PARSE_ERROR") + (values + '("syntax" "GST_PARSE_ERROR_SYNTAX") + '("no-such-element" "GST_PARSE_ERROR_NO_SUCH_ELEMENT") + '("no-such-property" "GST_PARSE_ERROR_NO_SUCH_PROPERTY") + '("link" "GST_PARSE_ERROR_LINK") + '("could-not-set-property" "GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY") + '("empty-bin" "GST_PARSE_ERROR_EMPTY_BIN") + '("empty" "GST_PARSE_ERROR_EMPTY") + ) +) + +(define-flags ParseFlags + (in-module "Gst") + (c-name "GstParseFlags") + (gtype-id "GST_TYPE_PARSE_FLAGS") + (values + '("none" "GST_PARSE_FLAG_NONE") + '("fatal-errors" "GST_PARSE_FLAG_FATAL_ERRORS") + ) +) + +(define-flags PipelineFlags + (in-module "Gst") + (c-name "GstPipelineFlags") + (gtype-id "GST_TYPE_PIPELINE_FLAGS") + (values + '("fixed-clock" "GST_PIPELINE_FLAG_FIXED_CLOCK") + '("last" "GST_PIPELINE_FLAG_LAST") + ) +) + +(define-enum PluginError + (in-module "Gst") + (c-name "GstPluginError") + (gtype-id "GST_TYPE_PLUGIN_ERROR") + (values + '("module" "GST_PLUGIN_ERROR_MODULE") + '("dependencies" "GST_PLUGIN_ERROR_DEPENDENCIES") + '("name-mismatch" "GST_PLUGIN_ERROR_NAME_MISMATCH") + ) +) + +(define-flags PluginFlags + (in-module "Gst") + (c-name "GstPluginFlags") + (gtype-id "GST_TYPE_PLUGIN_FLAGS") + (values + '("cached" "GST_PLUGIN_FLAG_CACHED") + '("blacklisted" "GST_PLUGIN_FLAG_BLACKLISTED") + ) +) + +(define-enum QueryType + (in-module "Gst") + (c-name "GstQueryType") + (gtype-id "GST_TYPE_QUERY_TYPE") + (values + '("none" "GST_QUERY_NONE") + '("position" "GST_QUERY_POSITION") + '("duration" "GST_QUERY_DURATION") + '("latency" "GST_QUERY_LATENCY") + '("jitter" "GST_QUERY_JITTER") + '("rate" "GST_QUERY_RATE") + '("seeking" "GST_QUERY_SEEKING") + '("segment" "GST_QUERY_SEGMENT") + '("convert" "GST_QUERY_CONVERT") + '("formats" "GST_QUERY_FORMATS") + '("buffering" "GST_QUERY_BUFFERING") + '("custom" "GST_QUERY_CUSTOM") + '("uri" "GST_QUERY_URI") + ) +) + +(define-enum BufferingMode + (in-module "Gst") + (c-name "GstBufferingMode") + (gtype-id "GST_TYPE_BUFFERING_MODE") + (values + '("stream" "GST_BUFFERING_STREAM") + '("download" "GST_BUFFERING_DOWNLOAD") + '("timeshift" "GST_BUFFERING_TIMESHIFT") + '("live" "GST_BUFFERING_LIVE") + ) +) + +(define-enum TagMergeMode + (in-module "Gst") + (c-name "GstTagMergeMode") + (gtype-id "GST_TYPE_TAG_MERGE_MODE") + (values + '("undefined" "GST_TAG_MERGE_UNDEFINED") + '("replace-all" "GST_TAG_MERGE_REPLACE_ALL") + '("replace" "GST_TAG_MERGE_REPLACE") + '("append" "GST_TAG_MERGE_APPEND") + '("prepend" "GST_TAG_MERGE_PREPEND") + '("keep" "GST_TAG_MERGE_KEEP") + '("keep-all" "GST_TAG_MERGE_KEEP_ALL") + '("count" "GST_TAG_MERGE_COUNT") + ) +) + +(define-enum TagFlag + (in-module "Gst") + (c-name "GstTagFlag") + (gtype-id "GST_TYPE_TAG_FLAG") + (values + '("undefined" "GST_TAG_FLAG_UNDEFINED") + '("meta" "GST_TAG_FLAG_META") + '("encoded" "GST_TAG_FLAG_ENCODED") + '("decoded" "GST_TAG_FLAG_DECODED") + '("count" "GST_TAG_FLAG_COUNT") + ) +) + +(define-enum TaskState + (in-module "Gst") + (c-name "GstTaskState") + (gtype-id "GST_TYPE_TASK_STATE") + (values + '("started" "GST_TASK_STARTED") + '("stopped" "GST_TASK_STOPPED") + '("paused" "GST_TASK_PAUSED") + ) +) + +(define-flags AllocTraceFlags + (in-module "Gst") + (c-name "GstAllocTraceFlags") + (gtype-id "GST_TYPE_ALLOC_TRACE_FLAGS") + (values + '("live" "GST_ALLOC_TRACE_LIVE") + '("mem-live" "GST_ALLOC_TRACE_MEM_LIVE") + ) +) + +(define-enum TypeFindProbability + (in-module "Gst") + (c-name "GstTypeFindProbability") + (gtype-id "GST_TYPE_TYPE_FIND_PROBABILITY") + (values + '("minimum" "GST_TYPE_FIND_MINIMUM") + '("possible" "GST_TYPE_FIND_POSSIBLE") + '("likely" "GST_TYPE_FIND_LIKELY") + '("nearly-certain" "GST_TYPE_FIND_NEARLY_CERTAIN") + '("maximum" "GST_TYPE_FIND_MAXIMUM") + ) +) + +(define-enum State + (in-module "Gst") + (c-name "GstState") + (gtype-id "GST_TYPE_STATE") + (values + '("void-pending" "GST_STATE_VOID_PENDING") + '("null" "GST_STATE_NULL") + '("ready" "GST_STATE_READY") + '("paused" "GST_STATE_PAUSED") + '("playing" "GST_STATE_PLAYING") + ) +) + +(define-enum StateChangeReturn + (in-module "Gst") + (c-name "GstStateChangeReturn") + (gtype-id "GST_TYPE_STATE_CHANGE_RETURN") + (values + '("failure" "GST_STATE_CHANGE_FAILURE") + '("success" "GST_STATE_CHANGE_SUCCESS") + '("async" "GST_STATE_CHANGE_ASYNC") + '("no-preroll" "GST_STATE_CHANGE_NO_PREROLL") + ) +) + +(define-enum StateChange + (in-module "Gst") + (c-name "GstStateChange") + (gtype-id "GST_TYPE_STATE_CHANGE") + (values + '("null-to-ready" "GST_STATE_CHANGE_NULL_TO_READY") + '("ready-to-paused" "GST_STATE_CHANGE_READY_TO_PAUSED") + '("paused-to-playing" "GST_STATE_CHANGE_PAUSED_TO_PLAYING") + '("playing-to-paused" "GST_STATE_CHANGE_PLAYING_TO_PAUSED") + '("paused-to-ready" "GST_STATE_CHANGE_PAUSED_TO_READY") + '("ready-to-null" "GST_STATE_CHANGE_READY_TO_NULL") + ) +) + +(define-enum Rank + (in-module "Gst") + (c-name "GstRank") + (gtype-id "GST_TYPE_RANK") + (values + '("none" "GST_RANK_NONE") + '("marginal" "GST_RANK_MARGINAL") + '("secondary" "GST_RANK_SECONDARY") + '("primary" "GST_RANK_PRIMARY") + ) +) + +(define-enum URIType + (in-module "Gst") + (c-name "GstURIType") + (gtype-id "GST_TYPE_URI_TYPE") + (values + '("unknown" "GST_URI_UNKNOWN") + '("sink" "GST_URI_SINK") + '("src" "GST_URI_SRC") + ) +) + +(define-enum SearchMode + (in-module "Gst") + (c-name "GstSearchMode") + (gtype-id "GST_TYPE_SEARCH_MODE") + (values + '("exact" "GST_SEARCH_MODE_EXACT") + '("before" "GST_SEARCH_MODE_BEFORE") + '("after" "GST_SEARCH_MODE_AFTER") + ) +) + +(define-interface URIHandler + (in-module "Gst") + (c-name "GstURIHandler") + (gtype-id "GST_TYPE_URI_HANDLER") + (vtable "GstURIHandlerInterface") +) + +(define-interface TagSetter + (in-module "Gst") + (c-name "GstTagSetter") + (gtype-id "GST_TYPE_TAG_SETTER") +) + +(define-interface ImplementsInterface + (in-module "Gst") + (c-name "GstImplementsInterface") + (gtype-id "GST_TYPE_IMPLEMENTS_INTERFACE") + (vtable "GstImplementsInterfaceClass") +) + +(define-interface Preset + (in-module "Gst") + (c-name "GstPreset") + (gtype-id "GST_TYPE_PRESET") +) diff --git a/gst/gst.defs b/gst/gst.defs new file mode 100644 index 0000000..ac0690e --- /dev/null +++ b/gst/gst.defs @@ -0,0 +1,9482 @@ +;; -*- scheme -*- + +(include "gst-extrafuncs.defs") +(include "gst-types.defs") +(include "libs.defs") +(include "base.defs") + +;; From ../gstreamer/gst/gst.h + +(define-function init + (c-name "gst_init") + (return-type "none") + (parameters + '("int*" "argc") + '("char**[]" "argv") + ) +) + +(define-function init_check + (c-name "gst_init_check") + (return-type "gboolean") + (parameters + '("int*" "argc") + '("char**[]" "argv") + '("GError**" "err") + ) +) + +(define-function is_initialized + (c-name "gst_is_initialized") + (return-type "gboolean") +) + + +(define-function init_get_option_group + (c-name "gst_init_get_option_group") + (return-type "GOptionGroup*") +) + +(define-function deinit + (c-name "gst_deinit") + (return-type "none") +) + +(define-function version + (c-name "gst_version") + (return-type "none") + (parameters + '("guint*" "major") + '("guint*" "minor") + '("guint*" "micro") + '("guint*" "nano") + ) +) + +(define-function version_string + (c-name "gst_version_string") + (return-type "gchar*") +) + +(define-function segtrap_is_enabled + (c-name "gst_segtrap_is_enabled") + (return-type "gboolean") +) + +(define-function segtrap_set_enabled + (c-name "gst_segtrap_set_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-function registry_fork_is_enabled + (c-name "gst_registry_fork_is_enabled") + (return-type "gboolean") +) + +(define-function registry_fork_set_enabled + (c-name "gst_registry_fork_set_enabled") + (return-type "none") + (parameters + '("gboolean" "enabled") + ) +) + +(define-function update_registry + (c-name "gst_update_registry") + (return-type "gboolean") +) + +(define-function get_gst_version + (c-name "gst_get_gst_version") + (return-type "none") +) + +(define-function get_pygst_version + (c-name "gst_get_pygst_version") + (return-type "none") +) + + +;; From ../gstreamer/gst/gstbin.h + +(define-function bin_get_type + (c-name "gst_bin_get_type") + (return-type "GType") +) + +(define-function bin_new + (c-name "gst_bin_new") + (is-constructor-of "GstBin") + (return-type "GstElement*") + (properties + '("name" (argname "name") (optional)) + ) +) + +(define-method add + (of-object "GstBin") + (c-name "gst_bin_add") + (return-type "none") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method add_many + (of-object "GstBin") + (c-name "gst_bin_add_many") + (return-type "none") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method remove + (of-object "GstBin") + (c-name "gst_bin_remove") + (return-type "gboolean") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method remove_many + (of-object "GstBin") + (c-name "gst_bin_remove_many") + (return-type "gboolean") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method get_by_name + (of-object "GstBin") + (c-name "gst_bin_get_by_name") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_by_name_recurse_up + (of-object "GstBin") + (c-name "gst_bin_get_by_name_recurse_up") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_by_interface + (of-object "GstBin") + (c-name "gst_bin_get_by_interface") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("GType" "iface_gtype") + ) +) + +(define-method elements + (of-object "GstBin") + (c-name "gst_bin_iterate_elements") + (return-type "GstIterator*") +) + +(define-method sorted + (of-object "GstBin") + (c-name "gst_bin_iterate_sorted") + (return-type "GstIterator*") +) + +(define-method recurse + (of-object "GstBin") + (c-name "gst_bin_iterate_recurse") + (return-type "GstIterator*") +) + +(define-method sinks + (of-object "GstBin") + (c-name "gst_bin_iterate_sinks") + (return-type "GstIterator*") +) + +(define-method iterate_sources + (of-object "GstBin") + (c-name "gst_bin_iterate_sources") + (return-type "GstIterator*") +) + +(define-method iterate_all_by_interface + (of-object "GstBin") + (c-name "gst_bin_iterate_all_by_interface") + (return-type "GstIterator*") + (parameters + '("GType" "iface_gtype") + ) +) + +(define-method recalculate_latency + (of-object "GstBin") + (c-name "gst_bin_recalculate_latency") + (return-type "gboolean") +) + +(define-virtual add_element + (of-object "GstBin") + (return-type "gboolean") + (parameters + '("GstElement*" "element") + ) +) + +(define-virtual remove_element + (of-object "GstBin") + (return-type "gboolean") + (parameters + '("GstElement*" "element") + ) +) + +(define-virtual handle_message + (of-object "GstBin") + (return-type "none") + (parameters + '("GstMessage*" "message") + ) +) + +;; From ../gstreamer/gst/gstbuffer.h + +(define-function buffer_get_type + (c-name "gst_buffer_get_type") + (return-type "GType") +) + +(define-function buffer_new + (c-name "gst_buffer_new") + (is-constructor-of "GstBuffer") + (return-type "GstBuffer*") +) + +(define-function buffer_new_and_alloc + (c-name "gst_buffer_new_and_alloc") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint" "size") + ) +) + +(define-function buffer_try_new_and_alloc + (c-name "gst_buffer_try_new_and_alloc") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint" "size") + ) +) + +(define-method is_metadata_writable + (of-object "GstBuffer") + (c-name "gst_buffer_is_metadata_writable") + (return-type "gboolean") +) + +(define-method make_metadata_writable + (of-object "GstBuffer") + (c-name "gst_buffer_make_metadata_writable") + (return-type "GstBuffer*") +) + +(define-method get_caps + (of-object "GstBuffer") + (c-name "gst_buffer_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method set_caps + (of-object "GstBuffer") + (c-name "gst_buffer_set_caps") + (return-type "none") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method create_sub + (of-object "GstBuffer") + (c-name "gst_buffer_create_sub") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint" "offset") + '("guint" "size") + ) +) + +(define-method is_span_fast + (of-object "GstBuffer") + (c-name "gst_buffer_is_span_fast") + (return-type "gboolean") + (parameters + '("GstBuffer*" "buf2") + ) +) + +(define-method span + (of-object "GstBuffer") + (c-name "gst_buffer_span") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("guint32" "offset") + '("GstBuffer*" "buf2") + '("guint32" "len") + ) +) + + + +;; From gstbufferlist.h + +(define-function gst_buffer_list_get_type + (c-name "gst_buffer_list_get_type") + (return-type "GType") +) + +(define-function gst_buffer_list_new + (c-name "gst_buffer_list_new") + (is-constructor-of "GstBufferList") + (return-type "GstBufferList*") +) + +(define-method foreach + (of-object "GstBufferList") + (c-name "gst_buffer_list_foreach") + (return-type "none") + (parameters + '("GstBufferListFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method get + (of-object "GstBufferList") + (c-name "gst_buffer_list_get") + (return-type "GstBuffer*") + (parameters + '("guint" "group") + '("guint" "idx") + ) +) + +(define-method iterate + (of-object "GstBufferList") + (c-name "gst_buffer_list_iterate") + (return-type "GstBufferListIterator*") +) + +(define-method free + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_free") + (return-type "none") +) + +(define-method n_buffers + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_n_buffers") + (return-type "guint") +) + +(define-method next + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_next") + (return-type "GstBuffer*") +) + +(define-method next_group + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_next_group") + (return-type "gboolean") +) + +(define-method add + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_add") + (return-type "none") + (parameters + '("GstBuffer*" "buffer") + ) +) + +(define-method add_list + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_add_list") + (return-type "none") + (parameters + '("GList*" "list") + ) +) + +(define-method add_group + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_add_group") + (return-type "none") +) + +(define-method remove + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_remove") + (return-type "none") +) + +(define-method steal + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_steal") + (return-type "GstBuffer*") +) + +(define-method take + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_take") + (return-type "none") + (parameters + '("GstBuffer*" "buffer") + ) +) + +(define-method do + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_do") + (return-type "GstBuffer*") + (parameters + '("GstBufferListDoFunction" "do_func") + '("gpointer" "user_data") + ) +) + +(define-method merge_group + (of-object "GstBufferListIterator") + (c-name "gst_buffer_list_iterator_merge_group") + (return-type "GstBuffer*") +) + + + +;; From ../gstreamer/gst/gstbus.h + +(define-function bus_get_type + (c-name "gst_bus_get_type") + (return-type "GType") +) + +(define-function bus_new + (c-name "gst_bus_new") + (is-constructor-of "GstBus") + (return-type "GstBus*") +) + +(define-method post + (of-object "GstBus") + (c-name "gst_bus_post") + (return-type "gboolean") + (parameters + '("GstMessage*" "message" (keep-refcount)) + ) +) + +(define-method have_pending + (of-object "GstBus") + (c-name "gst_bus_have_pending") + (return-type "gboolean") +) + +(define-method peek + (of-object "GstBus") + (c-name "gst_bus_peek") + (return-type "GstMessage*") + (caller-owns-return #t) +) + +(define-method pop + (of-object "GstBus") + (c-name "gst_bus_pop") + (return-type "GstMessage*") + (caller-owns-return #t) +) + +(define-method pop_filtered + (of-object "GstBus") + (c-name "gst_bus_pop_filtered") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstMessageType" "types") + ) +) + +(define-method timed_pop + (of-object "GstBus") + (c-name "gst_bus_timed_pop") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstClockTime" "timeout") + ) +) + +(define-method timed_pop_filtered + (of-object "GstBus") + (c-name "gst_bus_timed_pop_filtered") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstClockTime" "timeout") + '("GstMessageType" "types") + ) +) + +(define-method set_flushing + (of-object "GstBus") + (c-name "gst_bus_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method set_sync_handler + (of-object "GstBus") + (c-name "gst_bus_set_sync_handler") + (return-type "none") + (parameters + '("GstBusSyncHandler" "func") + '("gpointer" "data") + ) +) + +(define-method create_watch + (of-object "GstBus") + (c-name "gst_bus_create_watch") + (return-type "GSource*") +) + +(define-method add_watch_full + (of-object "GstBus") + (c-name "gst_bus_add_watch_full") + (return-type "guint") + (parameters + '("gint" "priority") + '("GstBusFunc" "func") + '("gpointer" "user_data") + '("GDestroyNotify" "notify") + ) +) + +(define-method add_watch + (of-object "GstBus") + (c-name "gst_bus_add_watch") + (return-type "guint") + (parameters + '("GstBusFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method poll + (of-object "GstBus") + (c-name "gst_bus_poll") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstMessageType" "events") + '("GstClockTimeDiff" "timeout") + ) +) + +(define-method async_signal_func + (of-object "GstBus") + (c-name "gst_bus_async_signal_func") + (return-type "gboolean") + (parameters + '("GstMessage*" "message") + '("gpointer" "data") + ) +) + +(define-method sync_signal_handler + (of-object "GstBus") + (c-name "gst_bus_sync_signal_handler") + (return-type "GstBusSyncReply") + (parameters + '("GstMessage*" "message") + '("gpointer" "data") + ) +) + +(define-method add_signal_watch + (of-object "GstBus") + (c-name "gst_bus_add_signal_watch") + (return-type "none") +) + +(define-method add_signal_watch_full + (of-object "GstBus") + (c-name "gst_bus_add_signal_watch_full") + (return-type "none") + (parameters + '("gint" "priority") + ) +) + +(define-method remove_signal_watch + (of-object "GstBus") + (c-name "gst_bus_remove_signal_watch") + (return-type "none") +) + + +(define-method enable_sync_message_emission + (of-object "GstBus") + (c-name "gst_bus_enable_sync_message_emission") + (return-type "none") +) + +(define-method disable_sync_message_emission + (of-object "GstBus") + (c-name "gst_bus_disable_sync_message_emission") + (return-type "none") +) + + +;; From ../gstreamer/gst/gstcaps.h + +(define-function caps_get_type + (c-name "gst_caps_get_type") + (return-type "GType") +) + +(define-function caps_new_empty + (is-constructor-of "GstCaps") + (c-name "gst_caps_new_empty") + (return-type "GstCaps*") +) + +(define-function caps_new_any + (c-name "gst_caps_new_any") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-function caps_new_simple + (c-name "gst_caps_new_simple") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-char*" "media_type") + '("const-char*" "fieldname") + ) + (varargs #t) +) + +(define-function caps_new_full + (c-name "gst_caps_new_full") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("GstStructure*" "struct1") + ) + (varargs #t) +) + +(define-function caps_new_full_valist + (c-name "gst_caps_new_full_valist") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("GstStructure*" "structure") + '("va_list" "var_args") + ) +) + +(define-method ref + (of-object "GstCaps") + (c-name "gst_caps_ref") + (return-type "GstCaps*") +) + +(define-method copy + (of-object "GstCaps") + (c-name "gst_caps_copy") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method make_writable + (of-object "GstCaps") + (c-name "gst_caps_make_writable") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method unref + (of-object "GstCaps") + (c-name "gst_caps_unref") + (return-type "none") +) + +(define-method get + (of-object "GstStaticCaps") + (c-name "gst_static_caps_get") + (return-type "GstCaps*") +) + +(define-method append + (of-object "GstCaps") + (c-name "gst_caps_append") + (return-type "none") + (parameters + '("GstCaps*" "caps2") + ) +) + +(define-method append_structure + (of-object "GstCaps") + (c-name "gst_caps_append_structure") + (return-type "none") + (parameters + '("GstStructure*" "structure") + ) +) + +(define-method get_size + (of-object "GstCaps") + (c-name "gst_caps_get_size") + (return-type "guint") +) + +(define-method get_structure + (of-object "GstCaps") + (c-name "gst_caps_get_structure") + (return-type "GstStructure*") + (parameters + '("guint" "index") + ) +) + +(define-method steal_structure + (of-object "GstCaps") + (c-name "gst_caps_steal_structure") + (return-type "GstStructure*") + (caller-owns-return #t) + (parameters + '("guint" "index") + ) +) + +(define-method copy_nth + (of-object "GstCaps") + (c-name "gst_caps_copy_nth") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("guint" "nth") + ) +) + +(define-method truncate + (of-object "GstCaps") + (c-name "gst_caps_truncate") + (return-type "none") +) + +(define-method set_value + (of-object "GstCaps") + (c-name "gst_caps_set_value") + (return-type "none") + (parameters + '("const-char*" "field") + '("const-GValue*" "value") + ) +) + +(define-method set_simple + (of-object "GstCaps") + (c-name "gst_caps_set_simple") + (return-type "none") + (parameters + '("const-char*" "field") + ) + (varargs #t) +) + +(define-method set_simple_valist + (of-object "GstCaps") + (c-name "gst_caps_set_simple_valist") + (return-type "none") + (parameters + '("const-char*" "field") + '("va_list" "varargs") + ) +) + +(define-method is_any + (of-object "GstCaps") + (c-name "gst_caps_is_any") + (return-type "gboolean") +) + +(define-method is_empty + (of-object "GstCaps") + (c-name "gst_caps_is_empty") + (return-type "gboolean") +) + +(define-method is_fixed + (of-object "GstCaps") + (c-name "gst_caps_is_fixed") + (return-type "gboolean") +) + +(define-method is_always_compatible + (of-object "GstCaps") + (c-name "gst_caps_is_always_compatible") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method is_subset + (of-object "GstCaps") + (c-name "gst_caps_is_subset") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "superset") + ) +) + +(define-method is_equal + (of-object "GstCaps") + (c-name "gst_caps_is_equal") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method can_intersect + (of-object "GstCaps") + (c-name "gst_caps_can_intersect") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method intersect + (of-object "GstCaps") + (c-name "gst_caps_intersect") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method subtract + (of-object "GstCaps") + (c-name "gst_caps_subtract") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-GstCaps*" "subtrahend") + ) +) + +(define-method union + (of-object "GstCaps") + (c-name "gst_caps_union") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-GstCaps*" "caps2") + ) +) + +(define-method normalize + (of-object "GstCaps") + (c-name "gst_caps_normalize") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method do_simplify + (of-object "GstCaps") + (c-name "gst_caps_do_simplify") + (return-type "gboolean") +) + +(define-method save_thyself + (of-object "GstCaps") + (c-name "gst_caps_save_thyself") + (return-type "xmlNodePtr") + (parameters + '("xmlNodePtr" "parent") + ) +) + +(define-method merge + (of-object "GstCaps") + (c-name "gst_caps_merge") + (return-type "none") + (parameters + '("GstCaps*" "caps2") + ) +) + +(define-method merge_structure + (of-object "GstCaps") + (c-name "gst_caps_merge_structure") + (return-type "none") + (parameters + '("GstStructure*" "structure") + ) +) + +(define-function caps_load_thyself + (c-name "gst_caps_load_thyself") + (return-type "GstCaps*") + (parameters + '("xmlNodePtr" "parent") + ) +) + +(define-function caps_replace + (c-name "gst_caps_replace") + (return-type "none") + (parameters + '("GstCaps**" "caps") + '("GstCaps*" "newcaps") + ) +) + +(define-method to_string + (of-object "GstCaps") + (c-name "gst_caps_to_string") + (return-type "gchar*") +) + +(define-function caps_from_string + (c-name "gst_caps_from_string") + (return-type "GstCaps*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "string") + ) +) + + + +;; From ../gstreamer/gst/gstclock.h + +(define-function clock_get_type + (c-name "gst_clock_get_type") + (return-type "GType") +) + +(define-method set_resolution + (of-object "GstClock") + (c-name "gst_clock_set_resolution") + (return-type "GstClockTime") + (parameters + '("GstClockTime" "resolution") + ) +) + +(define-method get_resolution + (of-object "GstClock") + (c-name "gst_clock_get_resolution") + (return-type "GstClockTime") +) + +(define-method get_time + (of-object "GstClock") + (c-name "gst_clock_get_time") + (return-type "GstClockTime") +) + +(define-method set_calibration + (of-object "GstClock") + (c-name "gst_clock_set_calibration") + (return-type "none") + (parameters + '("GstClockTime" "internal") + '("GstClockTime" "external") + '("GstClockTime" "rate_num") + '("GstClockTime" "rate_denom") + ) +) + +(define-method get_calibration + (of-object "GstClock") + (c-name "gst_clock_get_calibration") + (return-type "none") + (parameters + '("GstClockTime*" "internal") + '("GstClockTime*" "external") + '("GstClockTime*" "rate_num") + '("GstClockTime*" "rate_denom") + ) +) + +(define-method set_master + (of-object "GstClock") + (c-name "gst_clock_set_master") + (return-type "gboolean") + (parameters + '("GstClock*" "master") + ) +) + +(define-method get_master + (of-object "GstClock") + (c-name "gst_clock_get_master") + (return-type "GstClock*") +) + +(define-method add_observation + (of-object "GstClock") + (c-name "gst_clock_add_observation") + (return-type "gboolean") + (parameters + '("GstClockTime" "slave") + '("GstClockTime" "master") + '("gdouble*" "r_squared") + ) +) + +(define-method get_internal_time + (of-object "GstClock") + (c-name "gst_clock_get_internal_time") + (return-type "GstClockTime") +) + +(define-method adjust_unlocked + (of-object "GstClock") + (c-name "gst_clock_adjust_unlocked") + (return-type "GstClockTime") + (parameters + '("GstClockTime" "internal") + ) +) + +(define-method unadjust_unlocked + (of-object "GstClock") + (c-name "gst_clock_unadjust_unlocked") + (return-type "GstClockTime") + (parameters + '("GstClockTime" "external") + ) +) + +(define-method new_single_shot_id + (of-object "GstClock") + (c-name "gst_clock_new_single_shot_id") + (return-type "GstClockID") + (parameters + '("GstClockTime" "time") + ) +) + +(define-method new_periodic_id + (of-object "GstClock") + (c-name "gst_clock_new_periodic_id") + (return-type "GstClockID") + (parameters + '("GstClockTime" "start_time") + '("GstClockTime" "interval") + ) +) + +(define-method ref + (of-object "GstClockID") + (c-name "gst_clock_id_ref") + (return-type "GstClockID") +) + +(define-method unref + (of-object "GstClockID") + (c-name "gst_clock_id_unref") + (return-type "none") +) + +(define-function clock_id_compare_func + (c-name "gst_clock_id_compare_func") + (return-type "gint") + (parameters + '("gconstpointer" "id1") + '("gconstpointer" "id2") + ) +) + +(define-method get_time + (of-object "GstClockID") + (c-name "gst_clock_id_get_time") + (return-type "GstClockTime") +) + +(define-method wait + (of-object "GstClockID") + (c-name "gst_clock_id_wait") + (return-type "GstClockReturn") + (parameters + '("GstClockTimeDiff*" "jitter") + ) +) + +(define-method wait_async + (of-object "GstClockID") + (c-name "gst_clock_id_wait_async") + (return-type "GstClockReturn") + (parameters + '("GstClockCallback" "func") + '("gpointer" "user_data") + ) +) + +(define-method unschedule + (of-object "GstClockID") + (c-name "gst_clock_id_unschedule") + (return-type "none") +) + +(define-method single_shot_id_reinit + (of-object "GstClock") + (c-name "gst_clock_single_shot_id_reinit") + (return-type "gboolean") + (parameters + '("GstClockID" "id") + '("GstClockTime" "time") + ) +) + +(define-virtual change_resolution + (of-object "GstClock") + (return-type "GstClockTime") + (parameters + '("GstClockTime" "old_resolution") + '("GstClockTime" "new_resolution") + ) +) + +(define-virtual get_resolution + (of-object "GstClock") + (return-type "GstClockTime") +) + +(define-virtual get_internal_time + (of-object "GstClock") + (return-type "GstClockTime") +) + +(define-virtual wait + (of-object "GstClock") + (return-type "GstClockReturn") + (parameters + '("GstClockEntry*" "entry") + ) +) + +(define-virtual wait_jitter + (of-object "GstClock") + (return-type "GstClockReturn") + (parameters + '("GstClockEntry*" "entry") + '("GstClockTimeDiff*" "jitter") + ) +) + +(define-virtual wait_async + (of-object "GstClock") + (return-type "GstClockReturn") + (parameters + '("GstClockEntry*" "entry") + ) +) + +(define-virtual unschedule + (of-object "GstClock") + (return-type "none") + (parameters + '("GstClockEntry" "entry") + ) +) + +;; From gstdatetime.h + +(define-method get_year + (of-object "GstDateTime") + (c-name "gst_date_time_get_year") + (return-type "gint") +) + +(define-method get_month + (of-object "GstDateTime") + (c-name "gst_date_time_get_month") + (return-type "gint") +) + +(define-method get_day + (of-object "GstDateTime") + (c-name "gst_date_time_get_day") + (return-type "gint") +) + +(define-method get_hour + (of-object "GstDateTime") + (c-name "gst_date_time_get_hour") + (return-type "gint") +) + +(define-method get_minute + (of-object "GstDateTime") + (c-name "gst_date_time_get_minute") + (return-type "gint") +) + +(define-method get_second + (of-object "GstDateTime") + (c-name "gst_date_time_get_second") + (return-type "gint") +) + +(define-method get_microsecond + (of-object "GstDateTime") + (c-name "gst_date_time_get_microsecond") + (return-type "gint") +) + +(define-method get_time_zone_offset + (of-object "GstDateTime") + (c-name "gst_date_time_get_time_zone_offset") + (return-type "gfloat") +) + +(define-function date_time_new_from_unix_epoch_local_time + (c-name "gst_date_time_new_from_unix_epoch_local_time") + (return-type "GstDateTime*") + (caller-owns-return #t) + (parameters + '("gint64" "secs") + ) +) + +(define-function date_time_new_from_unix_epoch_utc + (c-name "gst_date_time_new_from_unix_epoch_utc") + (return-type "GstDateTime*") + (caller-owns-return #t) + (parameters + '("gint64" "secs") + ) +) + +(define-function date_time_new_local_time + (c-name "gst_date_time_new_local_time") + (return-type "GstDateTime*") + (caller-owns-return #t) + (parameters + '("gint" "year") + '("gint" "month") + '("gint" "day") + '("gint" "hour") + '("gint" "minute") + '("gdouble" "seconds") + ) +) + +(define-function date_time_new + (c-name "gst_date_time_new") + (is-constructor-of "GstDateTime") + (return-type "GstDateTime*") + (caller-owns-return #t) + (parameters + '("gfloat" "tzoffset") + '("gint" "year") + '("gint" "month") + '("gint" "day") + '("gint" "hour") + '("gint" "minute") + '("gdouble" "seconds") + ) +) + +(define-function date_time_new_now_local_time + (c-name "gst_date_time_new_now_local_time") + (return-type "GstDateTime*") + (caller-owns-return #t) +) + +(define-function date_time_new_now_utc + (c-name "gst_date_time_new_now_utc") + (return-type "GstDateTime*") + (caller-owns-return #t) +) + +(define-method ref + (of-object "GstDateTime") + (c-name "gst_date_time_ref") + (return-type "GstDateTime*") +) + +(define-method unref + (of-object "GstDateTime") + (c-name "gst_date_time_unref") + (return-type "none") +) + + + + +;; From ../gstreamer/gst/gstdebugutils.h + +(define-function DEBUG_BIN_TO_DOT_FILE + (c-name "GST_DEBUG_BIN_TO_DOT_FILE") + (return-type "none") + (parameters + '("GstBin*" "bin") + '("GstDebugGraphDetails" "details") + '("const-gchar*" "filename") + ) +) + +(define-function DEBUG_BIN_TO_DOT_FILE_WITH_TS + (c-name "GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS") + (return-type "none") + (parameters + '("GstBin*" "bin") + '("GstDebugGraphDetails" "details") + '("const-gchar*" "filename") + ) +) + +;; From ../gstreamer/gst/gstelement.h + +(define-method add_pad_template + (of-object "GstElementClass") + (c-name "gst_element_class_add_pad_template") + (return-type "none") + (parameters + '("GstPadTemplate*" "templ") + ) +) + +; 9 August 05 - changed to be a method on elements and not classes - wingo +(define-method get_pad_template + (of-object "GstElement") + (c-name "gst_element_get_pad_template") + (return-type "GstPadTemplate*") + (parameters + '("const-gchar*" "name") + ) +) + +; 14 Jun 06 - Changed to be a method on elements and not classes - bilboed +(define-method get_pad_template_list + (of-object "GstElement") + (c-name "gst_element_get_pad_template_list") + (return-type "GList*") +) + +(define-method set_documentation_uri + (of-object "GstElementClass") + (c-name "gst_element_class_set_documentation_uri") + (return-type "none") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-method set_icon_name + (of-object "GstElementClass") + (c-name "gst_element_class_set_icon_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method set_details + (of-object "GstElementClass") + (c-name "gst_element_class_set_details") + (return-type "none") + (parameters + '("const-GstElementDetails*" "details") + ) +) + +(define-method set_details_simple + (of-object "GstElementClass") + (c-name "gst_element_class_set_details_simple") + (return-type "none") + (parameters + '("const-gchar*" "longname") + '("const-gchar*" "classification") + '("const-gchar*" "description") + '("const-gchar*" "author") + ) +) + +(define-function element_get_type + (c-name "gst_element_get_type") + (return-type "GType") +) + +(define-method requires_clock + (of-object "GstElement") + (c-name "gst_element_requires_clock") + (return-type "gboolean") +) + +(define-method provides_clock + (of-object "GstElement") + (c-name "gst_element_provides_clock") + (return-type "gboolean") +) + +(define-method provide_clock + (of-object "GstElement") + (c-name "gst_element_provide_clock") + (return-type "GstClock*") + (caller-owns-return #t) +) + +(define-method set_clock + (of-object "GstElement") + (c-name "gst_element_set_clock") + (return-type "gboolean") + (parameters + '("GstClock*" "clock") + ) +) + +(define-method set_base_time + (of-object "GstElement") + (c-name "gst_element_set_base_time") + (return-type "none") + (parameters + '("GstClockTime" "time") + ) +) + +(define-method get_base_time + (of-object "GstElement") + (c-name "gst_element_get_base_time") + (return-type "GstClockTime") +) + +(define-method set_start_time + (of-object "GstElement") + (c-name "gst_element_set_start_time") + (return-type "none") + (parameters + '("GstClockTime" "time") + ) +) + +(define-method get_start_time + (of-object "GstElement") + (c-name "gst_element_get_start_time") + (return-type "GstClockTime") +) + +(define-method is_indexable + (of-object "GstElement") + (c-name "gst_element_is_indexable") + (return-type "gboolean") +) + +(define-method set_index + (of-object "GstElement") + (c-name "gst_element_set_index") + (return-type "none") + (parameters + '("GstIndex*" "index") + ) +) + +(define-method get_index + (of-object "GstElement") + (c-name "gst_element_get_index") + (return-type "GstIndex*") + (caller-owns-return #t) +) + +(define-method set_bus + (of-object "GstElement") + (c-name "gst_element_set_bus") + (return-type "none") + (parameters + '("GstBus*" "bus") + ) +) + +(define-method get_bus + (of-object "GstElement") + (c-name "gst_element_get_bus") + (return-type "GstBus*") + (caller-owns-return #t) +) + +(define-method get_clock + (of-object "GstElement") + (c-name "gst_element_get_clock") + (return-type "GstClock*") + (caller-owns-return #t) +) + +(define-method add_pad + (of-object "GstElement") + (c-name "gst_element_add_pad") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method remove_pad + (of-object "GstElement") + (c-name "gst_element_remove_pad") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method no_more_pads + (of-object "GstElement") + (c-name "gst_element_no_more_pads") + (return-type "none") +) + +(define-method get_pad + (of-object "GstElement") + (c-name "gst_element_get_pad") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_static_pad + (of-object "GstElement") + (c-name "gst_element_get_static_pad") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_request_pad + (of-object "GstElement") + (c-name "gst_element_get_request_pad") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method request_pad + (of-object "GstElement") + (c-name "gst_element_request_pad") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("GstPadTemplate*" "templ") + '("const-gchar*" "name") + '("const-GstCaps*" "caps") + ) +) + +(define-method release_request_pad + (of-object "GstElement") + (c-name "gst_element_release_request_pad") + (return-type "none") + (parameters + '("GstPad*" "pad") + ) +) + +(define-method pads + (of-object "GstElement") + (c-name "gst_element_iterate_pads") + (return-type "GstIterator*") +) + +(define-method src_pads + (of-object "GstElement") + (c-name "gst_element_iterate_src_pads") + (return-type "GstIterator*") +) + +(define-method sink_pads + (of-object "GstElement") + (c-name "gst_element_iterate_sink_pads") + (return-type "GstIterator*") +) + +(define-method send_event + (of-object "GstElement") + (c-name "gst_element_send_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event" (keep-refcount)) + ) +) + +(define-method seek + (of-object "GstElement") + (c-name "gst_element_seek") + (return-type "gboolean") + (parameters + '("gdouble" "rate") + '("GstFormat" "format") + '("GstSeekFlags" "flags") + '("GstSeekType" "cur_type") + '("gint64" "cur") + '("GstSeekType" "stop_type") + '("gint64" "stop") + ) +) + +(define-method get_query_types + (of-object "GstElement") + (c-name "gst_element_get_query_types") + (return-type "const-GstQueryType*") +) + +(define-method query + (of-object "GstElement") + (c-name "gst_element_query") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-method post_message + (of-object "GstElement") + (c-name "gst_element_post_message") + (return-type "gboolean") + (parameters + '("GstMessage*" "message" (keep-refcount)) + ) +) + +(define-method message_full + (of-object "GstElement") + (c-name "gst_element_message_full") + (return-type "none") + (parameters + '("GstMessageType" "type") + '("GQuark" "domain") + '("gint" "code") + '("gchar*" "text") + '("gchar*" "debug") + '("const-gchar*" "file") + '("const-gchar*" "function") + '("gint" "line") + ) +) + +(define-method is_locked_state + (of-object "GstElement") + (c-name "gst_element_is_locked_state") + (return-type "gboolean") +) + +(define-method set_locked_state + (of-object "GstElement") + (c-name "gst_element_set_locked_state") + (return-type "gboolean") + (parameters + '("gboolean" "locked_state") + ) +) + +(define-method sync_state_with_parent + (of-object "GstElement") + (c-name "gst_element_sync_state_with_parent") + (return-type "gboolean") +) + +(define-method get_state + (of-object "GstElement") + (c-name "gst_element_get_state") + (return-type "GstStateChangeReturn") + (parameters + '("GstState*" "state") + '("GstState*" "pending") + '("GstClockTime" "timeout") + ) +) + +(define-method set_state + (of-object "GstElement") + (c-name "gst_element_set_state") + (return-type "GstStateChangeReturn") + (parameters + '("GstState" "state") + ) +) + +(define-method abort_state + (of-object "GstElement") + (c-name "gst_element_abort_state") + (return-type "none") +) + +(define-method change_state + (of-object "GstElement") + (c-name "gst_element_change_state") + (return-type "GstStateChangeReturn") + (parameters + '("GstStateChange" "transition") + ) +) + +(define-method continue_state + (of-object "GstElement") + (c-name "gst_element_continue_state") + (return-type "GstStateChangeReturn") + (parameters + '("GstStateChangeReturn" "retstate") + ) +) + +(define-method lost_state + (of-object "GstElement") + (c-name "gst_element_lost_state") + (return-type "none") +) + +(define-method lost_state_full + (of-object "GstElement") + (c-name "gst_element_lost_state_full") + (return-type "none") + (parameters + '("gboolean" "new_base_time") + ) +) + +(define-method get_factory + (of-object "GstElement") + (c-name "gst_element_get_factory") + (return-type "GstElementFactory*") +) + +(define-virtual send_event + (of-object "GstElement") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-virtual get_query_types + (of-object "GstElement") + (return-type "const-GstQueryType*") +) + +(define-virtual query + (of-object "GstElement") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-virtual get_state + (of-object "GstElement") + (return-type "GstStateChangeReturn") + (parameters + '("GstState*" "state") + '("GstState*" "pending") + '("GTimeVal*" "timeout") + ) +) + +(define-virtual change_state + (of-object "GstElement") + (return-type "GstStateChangeReturn") + (parameters + '("GstStateChange" "transition") + ) +) + +(define-virtual request_new_pad + (of-object "GstElement") + (return-type "GstPad*") + (parameters + '("GstPadTemplate*" "templ") + '("const-gchar*" "name") + ) +) + +(define-virtual release_pad + (of-object "GstElement") + (return-type "none") + (parameters + '("GstPad*" "pad") + ) +) + +(define-virtual provide_clock + (of-object "GstElement") + (return-type "GstClock*") +) + +(define-virtual set_clock + (of-object "GstElement") + (return-type "gboolean") + (parameters + '("GstClock*" "clock") + ) +) + +(define-virtual get_index + (of-object "GstElement") + (return-type "GstIndex*") +) + +(define-virtual set_index + (of-object "GstElement") + (return-type "none") + (parameters + '("GstIndex*" "index") + ) +) + +(define-virtual set_bus + (of-object "GstElement") + (return-type "none") + (parameters + '("GstBus*" "bus") + ) +) + +;; From ../gstreamer/gst/gstelementfactory.h + +(define-function element_factory_get_type + (c-name "gst_element_factory_get_type") + (return-type "GType") +) + +(define-function element_factory_find + (c-name "gst_element_factory_find") + (return-type "GstElementFactory*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_element_type + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_element_type") + (return-type "GType") +) + +(define-method get_longname + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_longname") + (return-type "const-gchar*") +) + +(define-method get_klass + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_klass") + (return-type "const-gchar*") +) + +(define-method get_description + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_description") + (return-type "const-gchar*") +) + +(define-method get_author + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_author") + (return-type "const-gchar*") +) + +(define-method get_documentation_uri + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_documentation_uri") + (return-type "const-gchar*") +) + +(define-method get_icon_name + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_icon_name") + (return-type "const-gchar*") +) + +(define-method get_num_pad_templates + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_num_pad_templates") + (return-type "guint") +) + +(define-method get_static_pad_templates + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_static_pad_templates") + (return-type "const-GList*") +) + +(define-method get_uri_type + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_uri_type") + (return-type "GstURIType") +) + +(define-method get_uri_protocols + (of-object "GstElementFactory") + (c-name "gst_element_factory_get_uri_protocols") + (return-type "GStrv") +) + +(define-method has_interface + (of-object "GstElementFactory") + (c-name "gst_element_factory_has_interface") + (return-type "gboolean") + (parameters + '("const-gchar*" "interfacename") + ) +) + +(define-method create + (of-object "GstElementFactory") + (c-name "gst_element_factory_create") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name" (null-ok) (default "NULL")) + ) +) + +(define-function element_factory_make + (c-name "gst_element_factory_make") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "factoryname") + '("const-gchar*" "name" (null-ok) (default "NULL")) + ) +) + +(define-function element_register + (c-name "gst_element_register") + (return-type "gboolean") + (parameters + '("GstPlugin*" "plugin") + '("const-gchar*" "name") + '("guint" "rank") + '("GType" "type") + ) +) +(define-method list_is_type + (of-object "GstElementFactory") + (c-name "gst_element_factory_list_is_type") + (return-type "gboolean") + (parameters + '("GstElementFactoryListType" "type") + ) +) + +(define-function element_factory_list_get_elements + (c-name "gst_element_factory_list_get_elements") + (return-type "GList*") + (parameters + '("GstElementFactoryListType" "type") + '("GstRank" "minrank") + ) +) + +(define-function element_factory_list_filter + (c-name "gst_element_factory_list_filter") + (return-type "GList*") + (parameters + '("GList*" "list") + '("const-GstCaps*" "caps") + '("GstPadDirection" "direction") + '("gboolean" "subsetonly") + ) +) + +;; From ../gstreamer/gst/gstenumtypes.h + +(define-function object_flags_get_type + (c-name "gst_object_flags_get_type") + (return-type "GType") +) + +(define-function bin_flags_get_type + (c-name "gst_bin_flags_get_type") + (return-type "GType") +) + +(define-function buffer_flag_get_type + (c-name "gst_buffer_flag_get_type") + (return-type "GType") +) + +(define-function gst_buffer_copy_flags_get_type + (c-name "gst_buffer_copy_flags_get_type") + (return-type "GType") +) + +(define-function bus_flags_get_type + (c-name "gst_bus_flags_get_type") + (return-type "GType") +) + +(define-function bus_sync_reply_get_type + (c-name "gst_bus_sync_reply_get_type") + (return-type "GType") +) + +(define-function clock_return_get_type + (c-name "gst_clock_return_get_type") + (return-type "GType") +) + +(define-function clock_entry_type_get_type + (c-name "gst_clock_entry_type_get_type") + (return-type "GType") +) + +(define-function clock_flags_get_type + (c-name "gst_clock_flags_get_type") + (return-type "GType") +) + +(define-function element_flags_get_type + (c-name "gst_element_flags_get_type") + (return-type "GType") +) + +(define-function core_error_get_type + (c-name "gst_core_error_get_type") + (return-type "GType") +) + +(define-function library_error_get_type + (c-name "gst_library_error_get_type") + (return-type "GType") +) + +(define-function resource_error_get_type + (c-name "gst_resource_error_get_type") + (return-type "GType") +) + +(define-function stream_error_get_type + (c-name "gst_stream_error_get_type") + (return-type "GType") +) + +(define-function gst_event_type_flags_get_type + (c-name "gst_event_type_flags_get_type") + (return-type "GType") +) + +(define-function event_type_get_type + (c-name "gst_event_type_get_type") + (return-type "GType") +) + +(define-function seek_type_get_type + (c-name "gst_seek_type_get_type") + (return-type "GType") +) + +(define-function seek_flags_get_type + (c-name "gst_seek_flags_get_type") + (return-type "GType") +) + +(define-function format_get_type + (c-name "gst_format_get_type") + (return-type "GType") +) + +(define-function index_certainty_get_type + (c-name "gst_index_certainty_get_type") + (return-type "GType") +) + +(define-function index_entry_type_get_type + (c-name "gst_index_entry_type_get_type") + (return-type "GType") +) + +(define-function index_lookup_method_get_type + (c-name "gst_index_lookup_method_get_type") + (return-type "GType") +) + +(define-function assoc_flags_get_type + (c-name "gst_assoc_flags_get_type") + (return-type "GType") +) + +(define-function index_resolver_method_get_type + (c-name "gst_index_resolver_method_get_type") + (return-type "GType") +) + +(define-function index_flags_get_type + (c-name "gst_index_flags_get_type") + (return-type "GType") +) + +(define-function debug_level_get_type + (c-name "gst_debug_level_get_type") + (return-type "GType") +) + +(define-function debug_color_flags_get_type + (c-name "gst_debug_color_flags_get_type") + (return-type "GType") +) + +(define-function iterator_result_get_type + (c-name "gst_iterator_result_get_type") + (return-type "GType") +) + +(define-function iterator_item_get_type + (c-name "gst_iterator_item_get_type") + (return-type "GType") +) + +(define-function message_type_get_type + (c-name "gst_message_type_get_type") + (return-type "GType") +) + +(define-function mini_object_flags_get_type + (c-name "gst_mini_object_flags_get_type") + (return-type "GType") +) + +(define-function pad_link_return_get_type + (c-name "gst_pad_link_return_get_type") + (return-type "GType") +) + +(define-function flow_return_get_type + (c-name "gst_flow_return_get_type") + (return-type "GType") +) + +(define-function activate_mode_get_type + (c-name "gst_activate_mode_get_type") + (return-type "GType") +) + +(define-function pad_direction_get_type + (c-name "gst_pad_direction_get_type") + (return-type "GType") +) + +(define-function pad_flags_get_type + (c-name "gst_pad_flags_get_type") + (return-type "GType") +) + +(define-function pad_presence_get_type + (c-name "gst_pad_presence_get_type") + (return-type "GType") +) + +(define-function pad_template_flags_get_type + (c-name "gst_pad_template_flags_get_type") + (return-type "GType") +) + +(define-function pipeline_flags_get_type + (c-name "gst_pipeline_flags_get_type") + (return-type "GType") +) + +(define-function plugin_error_get_type + (c-name "gst_plugin_error_get_type") + (return-type "GType") +) + +(define-function query_type_get_type + (c-name "gst_query_type_get_type") + (return-type "GType") +) + +(define-function tag_merge_mode_get_type + (c-name "gst_tag_merge_mode_get_type") + (return-type "GType") +) + +(define-function tag_flag_get_type + (c-name "gst_tag_flag_get_type") + (return-type "GType") +) + +(define-function task_state_get_type + (c-name "gst_task_state_get_type") + (return-type "GType") +) + +(define-function alloc_trace_flags_get_type + (c-name "gst_alloc_trace_flags_get_type") + (return-type "GType") +) + +(define-function type_find_probability_get_type + (c-name "gst_type_find_probability_get_type") + (return-type "GType") +) + +(define-function element_state_get_type + (c-name "gst_element_state_get_type") + (return-type "GType") +) + +(define-function element_state_return_get_type + (c-name "gst_element_state_return_get_type") + (return-type "GType") +) + +(define-function rank_get_type + (c-name "gst_rank_get_type") + (return-type "GType") +) + +(define-function uri_type_get_type + (c-name "gst_uri_type_get_type") + (return-type "GType") +) + +(define-function parse_error_get_type + (c-name "gst_parse_error_get_type") + (return-type "GType") +) + + + +;; From ../gstreamer/gst/gsterror.h + +(define-function g_error_get_type + (c-name "gst_g_error_get_type") + (return-type "GType") +) + +(define-function error_get_message + (c-name "gst_error_get_message") + (return-type "gchar*") + (parameters + '("GQuark" "domain") + '("gint" "code") + ) +) + +(define-function stream_error_quark + (c-name "gst_stream_error_quark") + (return-type "GQuark") +) + +(define-function core_error_quark + (c-name "gst_core_error_quark") + (return-type "GQuark") +) + +(define-function resource_error_quark + (c-name "gst_resource_error_quark") + (return-type "GQuark") +) + +(define-function library_error_quark + (c-name "gst_library_error_quark") + (return-type "GQuark") +) + +(define-function new + (c-name "g_error_new") + (is-constructor-of "GError") + (return-type "GError*") + (parameters + '("gchar*" "domain") + '("gint" "code") + '("gchar*" "message") + ) +) + +;; From ../gstreamer/gst/gstevent.h + +(define-method get_name + (of-object "GstEventType") + (c-name "gst_event_type_get_name") + (return-type "const-gchar*") +) + +(define-method to_quark + (of-object "GstEventType") + (c-name "gst_event_type_to_quark") + (return-type "GQuark") +) + +(define-method get_flags + (of-object "GstEventType") + (c-name "gst_event_type_get_flags") + (return-type "GstEventTypeFlags") +) + +(define-function event_get_type + (c-name "gst_event_get_type") + (return-type "GType") +) + +(define-function event_new_custom + (c-name "gst_event_new_custom") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstEventType" "type") + '("GstStructure*" "structure") + ) +) + +(define-method get_structure + (of-object "GstEvent") + (c-name "gst_event_get_structure") + (return-type "const-GstStructure*") +) + +(define-method has_name + (of-object "GstEvent") + (c-name "gst_event_has_name") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_seqnum + (of-object "GstEvent") + (c-name "gst_event_get_seqnum") + (return-type "guint32") +) + +(define-method set_seqnum + (of-object "GstEvent") + (c-name "gst_event_set_seqnum") + (return-type "none") + (parameters + '("guint32" "seqnum") + ) +) + +(define-function event_new_flush_start + (c-name "gst_event_new_flush_start") + (return-type "GstEvent*") + (caller-owns-return #t) +) + +(define-function event_new_flush_stop + (c-name "gst_event_new_flush_stop") + (return-type "GstEvent*") + (caller-owns-return #t) +) + +(define-function event_new_eos + (c-name "gst_event_new_eos") + (return-type "GstEvent*") + (caller-owns-return #t) +) + +(define-function event_new_new_segment + (c-name "gst_event_new_new_segment") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("gboolean" "update") + '("gdouble" "rate") + '("GstFormat" "format") + '("gint64" "start_value") + '("gint64" "stop_value") + '("gint64" "stream_time") + ) +) + +(define-function event_new_new_segment_full + (c-name "gst_event_new_new_segment_full") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("gboolean" "update") + '("gdouble" "rate") + '("gdouble" "applied_rate") + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "position") + ) +) + +(define-method parse_new_segment + (of-object "GstEvent") + (c-name "gst_event_parse_new_segment") + (return-type "none") + (parameters + '("gboolean*" "update") + '("gdouble*" "rate") + '("GstFormat*" "format") + '("gint64*" "start_value") + '("gint64*" "end_value") + '("gint64*" "stream_time") + ) +) + +(define-function event_new_tag + (c-name "gst_event_new_tag") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstTagList*" "taglist") + ) +) + +(define-method parse_new_segment_full + (of-object "GstEvent") + (c-name "gst_event_parse_new_segment_full") + (return-type "none") + (parameters + '("gboolean*" "update") + '("gdouble*" "rate") + '("gdouble*" "applied_rate") + '("GstFormat*" "format") + '("gint64*" "start") + '("gint64*" "stop") + '("gint64*" "position") + ) +) + +(define-method parse_tag + (of-object "GstEvent") + (c-name "gst_event_parse_tag") + (return-type "none") + (parameters + '("GstTagList**" "taglist") + ) +) + +(define-function event_new_buffer_size + (c-name "gst_event_new_buffer_size") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + '("gint64" "minsize") + '("gint64" "maxsize") + '("gboolean" "async") + ) +) + +(define-method parse_buffer_size + (of-object "GstEvent") + (c-name "gst_event_parse_buffer_size") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "minsize") + '("gint64*" "maxsize") + '("gboolean*" "async") + ) +) + +(define-function event_new_qos + (c-name "gst_event_new_qos") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("gdouble" "proportion") + '("GstClockTimeDiff" "diff") + '("GstClockTime" "timestamp") + ) +) + +(define-method parse_qos + (of-object "GstEvent") + (c-name "gst_event_parse_qos") + (return-type "none") + (parameters + '("gdouble*" "proportion") + '("GstClockTimeDiff*" "diff") + '("GstClockTime*" "timestamp") + ) +) + +(define-function event_new_seek + (c-name "gst_event_new_seek") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("gdouble" "rate") + '("GstFormat" "format") + '("GstSeekFlags" "flags") + '("GstSeekType" "start_type") + '("gint64" "start") + '("GstSeekType" "stop_type") + '("gint64" "stop") + ) +) + +(define-method parse_seek + (of-object "GstEvent") + (c-name "gst_event_parse_seek") + (return-type "none") + (parameters + '("gdouble*" "rate") + '("GstFormat*" "format") + '("GstSeekFlags*" "flags") + '("GstSeekType*" "start_type") + '("gint64*" "start") + '("GstSeekType*" "stop_type") + '("gint64*" "stop") + ) +) + +(define-function event_new_navigation + (c-name "gst_event_new_navigation") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstStructure*" "structure") + ) +) + + +(define-function event_new_latency + (c-name "gst_event_new_latency") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstClockTime" "latency") + ) +) + +(define-method parse_latency + (of-object "GstEvent") + (c-name "gst_event_parse_latency") + (return-type "none") + (parameters + '("GstClockTime*" "latency") + ) +) + +(define-function event_new_step + (c-name "gst_event_new_step") + (return-type "GstEvent*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + '("guint64" "amount") + '("gdouble" "rate") + '("gboolean" "flush") + '("gboolean" "intermediate") + ) +) + +(define-method parse_step + (of-object "GstEvent") + (c-name "gst_event_parse_step") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("guint64*" "amount") + '("gdouble*" "rate") + '("gboolean*" "flush") + '("gboolean*" "intermediate") + ) +) + +;; From ../gstreamer/gst/gstfilter.h + +(define-function filter_run + (c-name "gst_filter_run") + (return-type "GList*") + (parameters + '("const-GList*" "list") + '("GstFilterFunc" "func") + '("gboolean" "first") + '("gpointer" "user_data") + ) +) + + + +;; From ../gstreamer/gst/gstformat.h + +(define-method get_name + (of-object "GstFormat") + (c-name "gst_format_get_name") + (return-type "const-gchar*") +) + +(define-method to_quark + (of-object "GstFormat") + (c-name "gst_format_to_quark") + (return-type "GQuark") +) + +(define-function format_register + (c-name "gst_format_register") + (return-type "GstFormat") + (parameters + '("const-gchar*" "nick") + '("const-gchar*" "description") + ) +) + +(define-function format_get_by_nick + (c-name "gst_format_get_by_nick") + (return-type "GstFormat") + (parameters + '("const-gchar*" "nick") + ) +) + +(define-method s_contains + (of-object "GstFormat") + (c-name "gst_formats_contains") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + ) +) + +(define-method get_details + (of-object "GstFormat") + (c-name "gst_format_get_details") + (return-type "const-GstFormatDefinition*") +) + +(define-function format_iterate_definitions + (c-name "gst_format_iterate_definitions") + (return-type "GstIterator*") +) + + + +;; From ../gstreamer/gst/gstghostpad.h + +(define-function ghost_pad_get_type + (c-name "gst_ghost_pad_get_type") + (return-type "GType") +) + +(define-function ghost_pad_new + (c-name "gst_ghost_pad_new") + (is-constructor-of "GstGhostPad") + (return-type "GstPad*") + (parameters + '("const-gchar*" "name") + '("GstPad*" "target") + ) +) + +(define-function ghost_pad_new_notarget + (c-name "gst_ghost_pad_new_no_target") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + '("GstPadDirection" "dir") + ) +) + +(define-function ghost_pad_new_from_template + (c-name "gst_ghost_pad_new_from_template") + (return-type "GstPad*") + (parameters + '("const-gchar*" "name") + '("GstPad*" "target") + '("GstPadTemplate*" "templ") + ) +) + +(define-function ghost_pad_new_no_target_from_template + (c-name "gst_ghost_pad_new_no_target_from_template") + (return-type "GstPad*") + (parameters + '("const-gchar*" "name") + '("GstPadTemplate*" "templ") + ) +) + +(define-method get_target + (of-object "GstGhostPad") + (c-name "gst_ghost_pad_get_target") + (caller-owns-return #t) + (return-type "GstPad*") +) + +(define-method set_target + (of-object "GstGhostPad") + (c-name "gst_ghost_pad_set_target") + (return-type "gboolean") + (parameters + '("GstPad*" "newtarget" (null-ok)) + ) +) + + + +;; From ../gstreamer/gst/gstindex.h + +(define-function index_get_type + (c-name "gst_index_get_type") + (return-type "GType") +) + +(define-function index_new + (c-name "gst_index_new") + (is-constructor-of "GstIndex") + (return-type "GstIndex*") +) + +(define-method commit + (of-object "GstIndex") + (c-name "gst_index_commit") + (return-type "none") + (parameters + '("gint" "id") + ) +) + +(define-method get_group + (of-object "GstIndex") + (c-name "gst_index_get_group") + (return-type "gint") +) + +(define-method new_group + (of-object "GstIndex") + (c-name "gst_index_new_group") + (return-type "gint") +) + +(define-method set_group + (of-object "GstIndex") + (c-name "gst_index_set_group") + (return-type "gboolean") + (parameters + '("gint" "groupnum") + ) +) + +(define-method set_certainty + (of-object "GstIndex") + (c-name "gst_index_set_certainty") + (return-type "none") + (parameters + '("GstIndexCertainty" "certainty") + ) +) + +(define-method get_certainty + (of-object "GstIndex") + (c-name "gst_index_get_certainty") + (return-type "GstIndexCertainty") +) + +(define-method set_filter + (of-object "GstIndex") + (c-name "gst_index_set_filter") + (return-type "none") + (parameters + '("GstIndexFilter" "filter") + '("gpointer" "user_data") + ) +) + +(define-method set_filter_full + (of-object "GstIndex") + (c-name "gst_index_set_filter_full") + (return-type "none") + (parameters + '("GstIndexFilter" "filter") + '("gpointer" "user_data") + '("GDestroyNotify" "user_data_destroy") + ) +) + +(define-method set_resolver + (of-object "GstIndex") + (c-name "gst_index_set_resolver") + (return-type "none") + (parameters + '("GstIndexResolver" "resolver") + '("gpointer" "user_data") + ) +) + +(define-method set_resolver_full + (of-object "GstIndex") + (c-name "gst_index_set_resolver_full") + (return-type "none") + (parameters + '("GstIndexResolver" "resolver") + '("gpointer" "user_data") + '("GDestroyNotify" "user_data_destroy") + ) +) + +(define-method get_writer_id + (of-object "GstIndex") + (c-name "gst_index_get_writer_id") + (return-type "gboolean") + (parameters + '("GstObject*" "writer") + '("gint*" "id") + ) +) + +(define-method add_format + (of-object "GstIndex") + (c-name "gst_index_add_format") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstFormat" "format") + ) +) + +(define-method add_associationv + (of-object "GstIndex") + (c-name "gst_index_add_associationv") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstAssocFlags" "flags") + '("gint" "n") + '("const-GstIndexAssociation*" "list") + ) +) + +(define-method add_association + (of-object "GstIndex") + (c-name "gst_index_add_association") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstAssocFlags" "flags") + '("GstFormat" "format") + '("gint64" "value") + ) + (varargs #t) +) + +(define-method add_object + (of-object "GstIndex") + (c-name "gst_index_add_object") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("gchar*" "key") + '("GType" "type") + '("gpointer" "object") + ) +) + +(define-method add_id + (of-object "GstIndex") + (c-name "gst_index_add_id") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("gchar*" "description") + ) +) + +(define-method get_assoc_entry + (of-object "GstIndex") + (c-name "gst_index_get_assoc_entry") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstIndexLookupMethod" "method") + '("GstAssocFlags" "flags") + '("GstFormat" "format") + '("gint64" "value") + ) +) + +(define-method get_assoc_entry_full + (of-object "GstIndex") + (c-name "gst_index_get_assoc_entry_full") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstIndexLookupMethod" "method") + '("GstAssocFlags" "flags") + '("GstFormat" "format") + '("gint64" "value") + '("GCompareDataFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-virtual add_entry + (of-object "GstIndex") + (return-type "none") + (parameters + '("GstIndexEntry*" "entry") + ) +) + +(define-virtual get_assoc_entry + (of-object "GstIndex") + (return-type "GstIndexEntry*") + (parameters + '("gint" "id") + '("GstIndexLookupMethod" "method") + '("GstAssocFlags" "flags") + '("GstFormat" "format") + '("gint64" "value") + '("GCompareDataFunc" "func") + '("gpointer" "user_data") + ) +) + + +(define-function index_entry_get_type + (c-name "gst_index_entry_get_type") + (return-type "GType") +) + +(define-method copy + (of-object "GstIndexEntry") + (c-name "gst_index_entry_copy") + (caller-owns-return #t) + (return-type "GstIndexEntry*") +) + +(define-method free + (of-object "GstIndexEntry") + (c-name "gst_index_entry_free") + (return-type "none") +) + +(define-method assoc_map + (of-object "GstIndexEntry") + (c-name "gst_index_entry_assoc_map") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + '("gint64*" "value") + ) +) + +(define-method ASSOC_FORMAT + (of-object "GstIndexEntry") + (c-name "GST_INDEX_ASSOC_FORMAT") + (return-type "GstFormat") + (parameters + '("guint" "i") + ) +) + +(define-method ASSOC_VALUE + (of-object "GstIndexEntry") + (c-name "GST_INDEX_ASSOC_VALUE") + (return-type "gint64") + (parameters + '("guint" "i") + ) +) + +(define-function index_factory_get_type + (c-name "gst_index_factory_get_type") + (return-type "GType") +) + +(define-function index_factory_new + (c-name "gst_index_factory_new") + (is-constructor-of "GstIndexFactory") + (return-type "GstIndexFactory*") + (properties + '("name" (argname "name")) + '("longdesc" (argname "longdesc")) + '("type" (argname "type")) + ) +) + +(define-method destroy + (of-object "GstIndexFactory") + (c-name "gst_index_factory_destroy") + (return-type "none") +) + +(define-function index_factory_find + (c-name "gst_index_factory_find") + (return-type "GstIndexFactory*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method create + (of-object "GstIndexFactory") + (c-name "gst_index_factory_create") + (return-type "GstIndex*") + (caller-owns-return #t) +) + +(define-function index_factory_make + (c-name "gst_index_factory_make") + (return-type "GstIndex*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + + + +;; From ../gstreamer/gst/gstinfo.h + +(define-function debug_log + (c-name "gst_debug_log") + (return-type "none") + (parameters + '("GstDebugCategory*" "category") + '("GstDebugLevel" "level") + '("const-gchar*" "file") + '("const-gchar*" "function") + '("gint" "line") + '("GObject*" "object") + '("const-gchar*" "format") + ) + (varargs #t) +) + +(define-function debug_log_valist + (c-name "gst_debug_log_valist") + (return-type "none") + (parameters + '("GstDebugCategory*" "category") + '("GstDebugLevel" "level") + '("const-gchar*" "file") + '("const-gchar*" "function") + '("gint" "line") + '("GObject*" "object") + '("const-gchar*" "format") + '("va_list" "args") + ) +) + +(define-method get + (of-object "GstDebugMessage") + (c-name "gst_debug_message_get") + (return-type "const-gchar*") +) + +(define-function debug_log_default + (c-name "gst_debug_log_default") + (return-type "none") + (parameters + '("GstDebugCategory*" "category") + '("GstDebugLevel" "level") + '("const-gchar*" "file") + '("const-gchar*" "function") + '("gint" "line") + '("GObject*" "object") + '("GstDebugMessage*" "message") + '("gpointer" "unused") + ) +) + +(define-method get_name + (of-object "GstDebugLevel") + (c-name "gst_debug_level_get_name") + (return-type "const-gchar*") +) + +(define-function debug_add_log_function + (c-name "gst_debug_add_log_function") + (return-type "none") + (parameters + '("GstLogFunction" "func") + '("gpointer" "data") + ) +) + +(define-function debug_remove_log_function + (c-name "gst_debug_remove_log_function") + (return-type "guint") + (parameters + '("GstLogFunction" "func") + ) +) + +(define-function debug_remove_log_function_by_data + (c-name "gst_debug_remove_log_function_by_data") + (return-type "guint") + (parameters + '("gpointer" "data") + ) +) + +(define-function debug_set_active + (c-name "gst_debug_set_active") + (return-type "none") + (parameters + '("gboolean" "active") + ) +) + +(define-function debug_is_active + (c-name "gst_debug_is_active") + (return-type "gboolean") +) + +(define-function debug_set_colored + (c-name "gst_debug_set_colored") + (return-type "none") + (parameters + '("gboolean" "colored") + ) +) + +(define-function debug_is_colored + (c-name "gst_debug_is_colored") + (return-type "gboolean") +) + +(define-function debug_set_default_threshold + (c-name "gst_debug_set_default_threshold") + (return-type "none") + (parameters + '("GstDebugLevel" "level") + ) +) + +(define-function debug_get_default_threshold + (c-name "gst_debug_get_default_threshold") + (return-type "GstDebugLevel") +) + +(define-function debug_set_threshold_for_name + (c-name "gst_debug_set_threshold_for_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + '("GstDebugLevel" "level") + ) +) + +(define-function debug_unset_threshold_for_name + (c-name "gst_debug_unset_threshold_for_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method free + (of-object "GstDebugCategory") + (c-name "gst_debug_category_free") + (return-type "none") +) + +(define-method set_threshold + (of-object "GstDebugCategory") + (c-name "gst_debug_category_set_threshold") + (return-type "none") + (parameters + '("GstDebugLevel" "level") + ) +) + +(define-method reset_threshold + (of-object "GstDebugCategory") + (c-name "gst_debug_category_reset_threshold") + (return-type "none") +) + +(define-method get_threshold + (of-object "GstDebugCategory") + (c-name "gst_debug_category_get_threshold") + (return-type "GstDebugLevel") +) + +(define-method get_name + (of-object "GstDebugCategory") + (c-name "gst_debug_category_get_name") + (return-type "const-gchar*") +) + +(define-method get_color + (of-object "GstDebugCategory") + (c-name "gst_debug_category_get_color") + (return-type "guint") +) + +(define-method get_description + (of-object "GstDebugCategory") + (c-name "gst_debug_category_get_description") + (return-type "const-gchar*") +) + +(define-function debug_get_all_categories + (c-name "gst_debug_get_all_categories") + (return-type "GSList*") +) + +(define-function debug_construct_term_color + (c-name "gst_debug_construct_term_color") + (return-type "gchar*") + (parameters + '("guint" "colorinfo") + ) +) + +(define-function debug_construct_win_color + (c-name "gst_debug_construct_win_color") + (return-type "gint") + (parameters + '("guint" "colorinfo") + ) +) + +(define-function debug_remove_log_function + (c-name "gst_debug_remove_log_function") + (return-type "guint") + (parameters + '("GstLogFunction" "func") + ) +) + +(define-function debug_remove_log_function_by_data + (c-name "gst_debug_remove_log_function_by_data") + (return-type "guint") + (parameters + '("gpointer" "data") + ) +) + +;; From ../gstreamer/gst/gstinterface.h + +(define-function implements_interface_get_type + (c-name "gst_implements_interface_get_type") + (return-type "GType") +) + +(define-method implements_interface + (of-object "GstElement") + (c-name "gst_element_implements_interface") + (return-type "gboolean") + (parameters + '("GType" "iface_type") + ) +) + +(define-function implements_interface_cast + (c-name "gst_implements_interface_cast") + (return-type "gpointer") + (parameters + '("gpointer" "from") + '("GType" "type") + ) +) + +(define-function implements_interface_check + (c-name "gst_implements_interface_check") + (return-type "gboolean") + (parameters + '("gpointer" "from") + '("GType" "type") + ) +) + +(define-virtual supported + (of-object "GstImplementsInterface") + (return-type "gboolean") + (parameters + '("GType" "iface_type") + ) +) + +;; From ../gstreamer/gst/gstiterator.h + +(define-function iterator_new + (c-name "gst_iterator_new") + (is-constructor-of "GstIterator") + (return-type "GstIterator*") + (parameters + '("guint" "size") + '("GType" "type") + '("GMutex*" "lock") + '("guint32*" "master_cookie") + '("GstIteratorNextFunction" "next") + '("GstIteratorItemFunction" "item") + '("GstIteratorResyncFunction" "resync") + '("GstIteratorFreeFunction" "free") + ) +) + +(define-function iterator_new_list + (c-name "gst_iterator_new_list") + (return-type "GstIterator*") + (parameters + '("GType" "type") + '("GMutex*" "lock") + '("guint32*" "master_cookie") + '("GList**" "list") + '("gpointer" "owner") + '("GstIteratorItemFunction" "item") + '("GstIteratorDisposeFunction" "free") + ) +) + +(define-method next + (of-object "GstIterator") + (c-name "gst_iterator_next") + (return-type "GstIteratorResult") + (parameters + '("gpointer*" "result") + ) +) + +(define-method resync + (of-object "GstIterator") + (c-name "gst_iterator_resync") + (return-type "none") +) + +(define-method free + (of-object "GstIterator") + (c-name "gst_iterator_free") + (return-type "none") +) + +(define-method push + (of-object "GstIterator") + (c-name "gst_iterator_push") + (return-type "none") + (parameters + '("GstIterator*" "other") + ) +) + +(define-method filter + (of-object "GstIterator") + (c-name "gst_iterator_filter") + (return-type "GstIterator*") + (parameters + '("GCompareFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method fold + (of-object "GstIterator") + (c-name "gst_iterator_fold") + (return-type "GstIteratorResult") + (parameters + '("GstIteratorFoldFunction" "func") + '("GValue*" "ret") + '("gpointer" "user_data") + ) +) + +(define-method foreach + (of-object "GstIterator") + (c-name "gst_iterator_foreach") + (return-type "GstIteratorResult") + (parameters + '("GFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method find_custom + (of-object "GstIterator") + (c-name "gst_iterator_find_custom") + (return-type "gpointer") + (parameters + '("GCompareFunc" "func") + '("gpointer" "user_data") + ) +) + +;; From ../gstreamer/gst/gstmessage.h + +(define-function message_get_type + (c-name "gst_message_get_type") + (return-type "GType") +) + +(define-method get_name + (of-object "GstMessageType") + (c-name "gst_message_type_get_name") + (return-type "const-gchar*") +) + +(define-method to_quark + (of-object "GstMessageType") + (c-name "gst_message_type_to_quark") + (return-type "GQuark") +) + +(define-method set_seqnum + (of-object "GstMessage") + (c-name "gst_message_set_seqnum") + (return-type "none") + (parameters + '("guint32" "seqnum") + ) +) + +(define-function message_new_eos + (c-name "gst_message_new_eos") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function message_new_error + (c-name "gst_message_new_error") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GError*" "error") + '("gchar*" "debug") + ) +) + +(define-function message_new_warning + (c-name "gst_message_new_warning") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GError*" "error") + '("gchar*" "debug") + ) +) + +(define-function message_new_info + (c-name "gst_message_new_info") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GError*" "error") + '("gchar*" "debug") + ) +) + +(define-function message_new_tag + (c-name "gst_message_new_tag") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstTagList*" "tag_list" (keep-refcount)) + ) +) + +(define-function message_new_buffering + (c-name "gst_message_new_buffering") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gint" "percent") + ) +) + +(define-function message_new_state_changed + (c-name "gst_message_new_state_changed") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstState" "old_state") + '("GstState" "new_state") + '("GstState" "pending_state") + ) +) + +(define-function message_new_state_dirty + (c-name "gst_message_new_state_dirty") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function message_new_step_done + (c-name "gst_message_new_step_done") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstFormat" "format") + '("guint64" "amount") + '("gdouble" "rate") + '("gboolean" "flush") + '("gboolean" "intermediate") + '("guint64" "duration") + '("gboolean" "eos") + ) +) + +(define-method parse_step_done + (of-object "GstMessage") + (c-name "gst_message_parse_step_done") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("guint64*" "amount") + '("gdouble*" "rate") + '("gboolean*" "flush") + '("gboolean*" "intermediate") + '("guint64*" "duration") + '("gboolean*" "eos") + ) +) + +(define-function message_new_clock_provide + (c-name "gst_message_new_clock_provide") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstClock*" "clock") + '("gboolean" "ready") + ) +) + +(define-function message_new_clock_lost + (c-name "gst_message_new_clock_lost") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstClock*" "clock") + ) +) + +(define-function message_new_new_clock + (c-name "gst_message_new_new_clock") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstClock*" "clock") + ) +) + +(define-function message_new_segment_start + (c-name "gst_message_new_segment_start") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-function message_new_segment_done + (c-name "gst_message_new_segment_done") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-function message_new_application + (c-name "gst_message_new_application") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstStructure*" "structure" (keep-refcount)) + ) +) + +(define-function message_new_element + (c-name "gst_message_new_element") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstStructure*" "structure" (keep-refcount)) + ) +) + +(define-function message_new_duration + (c-name "gst_message_new_duration") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstFormat" "format") + '("gint64" "duration") + ) +) + +(define-function message_new_async_start + (c-name "gst_message_new_async_start") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gboolean" "new_base_time") + ) +) + +(define-function message_new_async_done + (c-name "gst_message_new_async_done") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function message_new_latency + (c-name "gst_message_new_latency") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function message_new_structure_change + (c-name "gst_message_new_structure_change") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstStructureChangeType" "type") + '("GstElement*" "owner") + '("gboolean" "busy") + ) +) + +(define-method parse_structure_change + (of-object "GstMessage") + (c-name "gst_message_parse_structure_change") + (return-type "none") + (parameters + '("GstStructureChangeType*" "type") + '("GstElement**" "owner") + '("gboolean*" "busy") + ) +) + +(define-function message_new_stream_status + (c-name "gst_message_new_stream_status") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstStreamStatusType" "type") + '("GstElement*" "owner") + ) +) + +(define-method parse_stream_status + (of-object "GstMessage") + (c-name "gst_message_parse_stream_status") + (return-type "none") + (parameters + '("GstStreamStatusType*" "type") + '("GstElement**" "owner") + ) +) + +(define-method set_stream_status_object + (of-object "GstMessage") + (c-name "gst_message_set_stream_status_object") + (return-type "none") + (parameters + '("const-GValue*" "object") + ) +) + +(define-method get_stream_status_object + (of-object "GstMessage") + (c-name "gst_message_get_stream_status_object") + (return-type "const-GValue*") +) + +(define-function message_new_request_state + (c-name "gst_message_new_request_state") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstState" "state") + ) +) + +(define-method parse_request_state + (of-object "GstMessage") + (c-name "gst_message_parse_request_state") + (return-type "none") + (parameters + '("GstState*" "state") + ) +) + +(define-function message_new_step_start + (c-name "gst_message_new_step_start") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gboolean" "active") + '("GstFormat" "format") + '("guint64" "amount") + '("gdouble" "rate") + '("gboolean" "flush") + '("gboolean" "intermediate") + ) +) + +(define-method parse_step_start + (of-object "GstMessage") + (c-name "gst_message_parse_step_start") + (return-type "none") + (parameters + '("gboolean*" "active") + '("GstFormat*" "format") + '("guint64*" "amount") + '("gdouble*" "rate") + '("gboolean*" "flush") + '("gboolean*" "intermediate") + ) +) + +(define-function message_new_qos + (c-name "gst_message_new_qos") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gboolean" "live") + '("guint64" "running_time") + '("guint64" "stream_time") + '("guint64" "timestamp") + '("guint64" "duration") + ) +) + +(define-method set_qos_values + (of-object "GstMessage") + (c-name "gst_message_set_qos_values") + (return-type "none") + (parameters + '("gint64" "jitter") + '("gdouble" "proportion") + '("gint" "quality") + ) +) + +(define-method set_qos_stats + (of-object "GstMessage") + (c-name "gst_message_set_qos_stats") + (return-type "none") + (parameters + '("GstFormat" "format") + '("guint64" "processed") + '("guint64" "dropped") + ) +) + +(define-method parse_qos + (of-object "GstMessage") + (c-name "gst_message_parse_qos") + (return-type "none") + (parameters + '("gboolean*" "live") + '("guint64*" "running_time") + '("guint64*" "stream_time") + '("guint64*" "timestamp") + '("guint64*" "duration") + ) +) + +(define-method parse_qos_values + (of-object "GstMessage") + (c-name "gst_message_parse_qos_values") + (return-type "none") + (parameters + '("gint64*" "jitter") + '("gdouble*" "proportion") + '("gint*" "quality") + ) +) + +(define-method parse_qos_stats + (of-object "GstMessage") + (c-name "gst_message_parse_qos_stats") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("guint64*" "processed") + '("guint64*" "dropped") + ) +) + +(define-function message_new_custom + (c-name "gst_message_new_custom") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstMessageType" "type") + '("GstObject*" "src") + '("GstStructure*" "structure" (keep-refcount)) + ) +) + +(define-method parse_error + (of-object "GstMessage") + (c-name "gst_message_parse_error") + (return-type "none") + (parameters + '("GError**" "gerror") + '("gchar**" "debug") + ) +) + +(define-method parse_warning + (of-object "GstMessage") + (c-name "gst_message_parse_warning") + (return-type "none") + (parameters + '("GError**" "gerror") + '("gchar**" "debug") + ) +) + +(define-method parse_info + (of-object "GstMessage") + (c-name "gst_message_parse_info") + (return-type "none") + (parameters + '("GError**" "gerror") + '("gchar**" "debug") + ) +) + +(define-function message_new_tag_full + (c-name "gst_message_new_tag_full") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("GstPad*" "pad") + '("GstTagList*" "tag_list" (keep-refcount)) + ) +) + +(define-method parse_tag + (of-object "GstMessage") + (c-name "gst_message_parse_tag") + (return-type "none") + (parameters + '("GstTagList**" "tag_list") + ) +) + +(define-method parse_tag_full + (of-object "GstMessage") + (c-name "gst_message_parse_tag_full") + (return-type "none") + (parameters + '("GstPad**" "pad") + '("GstTagList**" "tag_list") + ) +) + +(define-method parse_buffering + (of-object "GstMessage") + (c-name "gst_message_parse_buffering") + (return-type "none") + (parameters + '("gint*" "percent") + ) +) + +(define-method set_buffering_stats + (of-object "GstMessage") + (c-name "gst_message_set_buffering_stats") + (return-type "none") + (parameters + '("GstBufferingMode" "mode") + '("gint" "avg_in") + '("gint" "avg_out") + '("gint64" "buffering_left") + ) +) + +(define-method parse_buffering_stats + (of-object "GstMessage") + (c-name "gst_message_parse_buffering_stats") + (return-type "none") + (parameters + '("GstBufferingMode*" "mode") + '("gint*" "avg_in") + '("gint*" "avg_out") + '("gint64*" "buffering_left") + ) +) + +(define-method parse_state_changed + (of-object "GstMessage") + (c-name "gst_message_parse_state_changed") + (return-type "none") + (parameters + '("GstState*" "old_state") + '("GstState*" "new_state") + '("GstState*" "pending") + ) +) + +(define-method parse_clock_provide + (of-object "GstMessage") + (c-name "gst_message_parse_clock_provide") + (return-type "none") + (parameters + '("GstClock**" "clock") + '("gboolean*" "ready") + ) +) + +(define-method parse_clock_lost + (of-object "GstMessage") + (c-name "gst_message_parse_clock_lost") + (return-type "none") + (parameters + '("GstClock**" "clock") + ) +) + +(define-method parse_new_clock + (of-object "GstMessage") + (c-name "gst_message_parse_new_clock") + (return-type "none") + (parameters + '("GstClock**" "clock") + ) +) + +(define-method parse_segment_start + (of-object "GstMessage") + (c-name "gst_message_parse_segment_start") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "position") + ) +) + +(define-method parse_segment_done + (of-object "GstMessage") + (c-name "gst_message_parse_segment_done") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "position") + ) +) + +(define-method parse_duration + (of-object "GstMessage") + (c-name "gst_message_parse_duration") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-method parse_async_start + (of-object "GstMessage") + (c-name "gst_message_parse_async_start") + (return-type "none") + (parameters + '("gboolean*" "new_base_time") + ) +) + +(define-method get_structure + (of-object "GstMessage*") + (c-name "gst_message_get_structure") + (return-type "const-GstStructure*") +) + + + +;; From ../gstreamer/gst/gstminiobject.h + +(define-function mini_object_get_type + (c-name "gst_mini_object_get_type") + (return-type "GType") +) + +(define-function mini_object_new + (c-name "gst_mini_object_new") + (is-constructor-of "GstMiniObject") + (return-type "GstMiniObject*") + (parameters + '("GType" "type") + ) +) + +(define-method copy + (of-object "GstMiniObject") + (c-name "gst_mini_object_copy") + (return-type "GstMiniObject*") + (caller-owns-return #t) +) + +(define-method is_writable + (of-object "GstMiniObject") + (c-name "gst_mini_object_is_writable") + (return-type "gboolean") +) + +(define-method make_writable + (of-object "GstMiniObject") + (c-name "gst_mini_object_make_writable") + (return-type "GstMiniObject*") + (caller-owns-return #t) +) + +(define-method ref + (of-object "GstMiniObject") + (c-name "gst_mini_object_ref") + (return-type "GstMiniObject*") +) + +(define-method unref + (of-object "GstMiniObject") + (c-name "gst_mini_object_unref") + (return-type "none") +) + +(define-function mini_object_replace + (c-name "gst_mini_object_replace") + (return-type "none") + (parameters + '("GstMiniObject**" "olddata") + '("GstMiniObject*" "newdata") + ) +) + +(define-function param_spec_mini_object + (c-name "gst_param_spec_mini_object") + (return-type "GParamSpec*") + (parameters + '("const-char*" "name") + '("const-char*" "nick") + '("const-char*" "blurb") + '("GType" "object_type") + '("GParamFlags" "flags") + ) +) + +(define-function gst_param_spec_fraction + (c-name "gst_param_spec_fraction") + (return-type "GParamSpec*") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "nick") + '("const-gchar*" "blurb") + '("gint" "min_num") + '("gint" "min_denom") + '("gint" "max_num") + '("gint" "max_denom") + '("gint" "default_num") + '("gint" "default_denom") + '("GParamFlags" "flags") + ) +) + + +(define-function value_set_mini_object + (c-name "gst_value_set_mini_object") + (return-type "none") + (parameters + '("GValue*" "value") + '("GstMiniObject*" "mini_object") + ) +) + +(define-function value_take_mini_object + (c-name "gst_value_take_mini_object") + (return-type "none") + (parameters + '("GValue*" "value") + '("GstMiniObject*" "mini_object") + ) +) + +(define-function value_get_mini_object + (c-name "gst_value_get_mini_object") + (return-type "GstMiniObject*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function gst_value_dup_mini_object + (c-name "gst_value_dup_mini_object") + (return-type "GstMiniObject*") + (parameters + '("const-GValue*" "value") + ) +) +;; From ../gstreamer/gst/gstobject.h + +(define-function object_get_type + (c-name "gst_object_get_type") + (return-type "GType") +) + +(define-method set_name + (of-object "GstObject") + (c-name "gst_object_set_name") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_name + (of-object "GstObject") + (c-name "gst_object_get_name") + (return-type "gchar*") +) + +(define-method set_name_prefix + (of-object "GstObject") + (c-name "gst_object_set_name_prefix") + (return-type "none") + (parameters + '("const-gchar*" "name_prefix") + ) +) + +(define-method get_name_prefix + (of-object "GstObject") + (c-name "gst_object_get_name_prefix") + (return-type "gchar*") +) + +(define-method set_parent + (of-object "GstObject") + (c-name "gst_object_set_parent") + (return-type "gboolean") + (parameters + '("GstObject*" "parent") + ) +) + +(define-method get_parent + (of-object "GstObject") + (c-name "gst_object_get_parent") + (return-type "GstObject*") + (caller-owns-return #t) +) + +(define-method unparent + (of-object "GstObject") + (c-name "gst_object_unparent") + (return-type "none") +) + +(define-method has_ancestor + (of-object "GstObject") + (c-name "gst_object_has_ancestor") + (return-type "gboolean") + (parameters + '("GstObject*" "ancestor") + ) +) + +(define-method sink + (of-object "GstObject") + (c-name "gst_object_sink") + (return-type "none") +) + +(define-method set_property + (of-object "GstObject") + (c-name "gst_object_set_property") + (return-type "none") +) + +(define-function object_default_deep_notify + (c-name "gst_object_default_deep_notify") + (return-type "none") + (parameters + '("GObject*" "object") + '("GstObject*" "orig") + '("GParamSpec*" "pspec") + '("gchar**" "excluded_props") + ) +) + +(define-function object_ref + (c-name "gst_object_ref") + (return-type "gpointer") + (parameters + '("gpointer" "object") + ) +) + +(define-function object_unref + (c-name "gst_object_unref") + (return-type "none") + (parameters + '("gpointer" "object") + ) +) + +(define-function object_replace + (c-name "gst_object_replace") + (return-type "none") + (parameters + '("GstObject**" "oldobj") + '("GstObject*" "newobj") + ) +) + +(define-method get_path_string + (of-object "GstObject") + (c-name "gst_object_get_path_string") + (return-type "gchar*") +) + +(define-function object_check_uniqueness + (c-name "gst_object_check_uniqueness") + (return-type "gboolean") + (parameters + '("GList*" "list") + '("const-gchar*" "name") + ) +) + +(define-method save_thyself + (of-object "GstObject") + (c-name "gst_object_save_thyself") + (return-type "GstXmlNodePtr") + (parameters + '("GstXmlNodePtr" "parent") + ) +) + +(define-method restore_thyself + (of-object "GstObject") + (c-name "gst_object_restore_thyself") + (return-type "none") + (parameters + '("GstXmlNodePtr" "self") + ) +) + +(define-function class_signal_connect + (c-name "gst_class_signal_connect") + (return-type "guint") + (parameters + '("GstObjectClass*" "klass") + '("const-gchar*" "name") + '("gpointer" "func") + '("gpointer" "func_data") + ) +) + +(define-function class_signal_emit_by_name + (c-name "gst_class_signal_emit_by_name") + (return-type "none") + (parameters + '("GstObject*" "object") + '("const-gchar*" "name") + '("GstXmlNodePtr" "self") + ) +) + +(define-virtual save_thyself + (of-object "GstObject") + (return-type "GstXmlNodePtr") + (parameters + '("GstXmlNodePtr" "parent") + ) +) + +(define-virtual restore_thyself + (of-object "GstObject") + (return-type "none") + (parameters + '("GstXmlNodePtr" "self") + ) +) + +;; From ../gstreamer/gst/gstpad.h + +(define-function flow_get_name + (c-name "gst_flow_get_name") + (return-type "const-gchar*") + (parameters + '("GstFlowReturn" "ret") + ) +) + +(define-function flow_to_quark + (c-name "gst_flow_to_quark") + (return-type "GQuark") + (parameters + '("GstFlowReturn" "ret") + ) +) + +(define-function pad_get_type + (c-name "gst_pad_get_type") + (return-type "GType") +) + +(define-function pad_new + (c-name "gst_pad_new") + (is-constructor-of "GstPad") + (return-type "GstPad*") + (properties + '("name" (argname "name")) + '("direction" (argname "direction")) + ) +) + +(define-function pad_new_from_template + (c-name "gst_pad_new_from_template") + (return-type "GstPad*") + (caller-owns-return #t) + (parameters + '("GstPadTemplate*" "templ") + '("const-gchar*" "name") + ) +) + +(define-function pad_new_from_static_template + (c-name "gst_pad_new_from_static_template") + (return-type "GstPad*") + (parameters + '("GstStaticPadTemplate*" "templ") + '("const-gchar*" "name") + ) +) + +(define-method get_direction + (of-object "GstPad") + (c-name "gst_pad_get_direction") + (return-type "GstPadDirection") +) + +(define-method set_active + (of-object "GstPad") + (c-name "gst_pad_set_active") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-method is_active + (of-object "GstPad") + (c-name "gst_pad_is_active") + (return-type "gboolean") +) + +(define-method activate_pull + (of-object "GstPad") + (c-name "gst_pad_activate_pull") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-method activate_push + (of-object "GstPad") + (c-name "gst_pad_activate_push") + (return-type "gboolean") + (parameters + '("gboolean" "active") + ) +) + +(define-method set_blocked + (of-object "GstPad") + (c-name "gst_pad_set_blocked") + (return-type "gboolean") + (parameters + '("gboolean" "blocked") + ) +) + +(define-method set_blocked_async + (of-object "GstPad") + (c-name "gst_pad_set_blocked_async") + (return-type "gboolean") + (parameters + '("gboolean" "blocked") + '("GstPadBlockCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method is_blocked + (of-object "GstPad") + (c-name "gst_pad_is_blocked") + (return-type "gboolean") +) + +(define-method set_element_private + (of-object "GstPad") + (c-name "gst_pad_set_element_private") + (return-type "none") + (parameters + '("gpointer" "priv") + ) +) + +(define-method get_element_private + (of-object "GstPad") + (c-name "gst_pad_get_element_private") + (return-type "gpointer") +) + +(define-method get_pad_template + (of-object "GstPad") + (c-name "gst_pad_get_pad_template") + (return-type "GstPadTemplate*") +) + +(define-method set_bufferalloc_function + (of-object "GstPad") + (c-name "gst_pad_set_bufferalloc_function") + (return-type "none") + (parameters + '("GstPadBufferAllocFunction" "bufalloc") + ) +) + +(define-method alloc_buffer + (of-object "GstPad") + (c-name "gst_pad_alloc_buffer") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("gint" "size") + '("GstCaps*" "caps") + '("GstBuffer**" "buf") + ) +) + +(define-method alloc_buffer_and_set_caps + (of-object "GstPad") + (c-name "gst_pad_alloc_buffer_and_set_caps") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("gint" "size") + '("GstCaps*" "caps") + '("GstBuffer**" "buf") + ) +) + +(define-method set_activate_function + (of-object "GstPad") + (c-name "gst_pad_set_activate_function") + (return-type "none") + (parameters + '("GstPadActivateFunction" "activate") + ) +) + +(define-method set_activatepull_function + (of-object "GstPad") + (c-name "gst_pad_set_activatepull_function") + (return-type "none") + (parameters + '("GstPadActivateModeFunction" "activatepull") + ) +) + +(define-method set_activatepush_function + (of-object "GstPad") + (c-name "gst_pad_set_activatepush_function") + (return-type "none") + (parameters + '("GstPadActivateModeFunction" "activatepush") + ) +) + +(define-method set_chain_function + (of-object "GstPad") + (c-name "gst_pad_set_chain_function") + (return-type "none") + (parameters + '("GstPadChainFunction" "chain") + ) +) + +(define-method set_chain_list_function + (of-object "GstPad") + (c-name "gst_pad_set_chain_list_function") + (return-type "none") + (parameters + '("GstPadChainListFunction" "chainlist") + ) +) + +(define-method set_getrange_function + (of-object "GstPad") + (c-name "gst_pad_set_getrange_function") + (return-type "none") + (parameters + '("GstPadGetRangeFunction" "get") + ) +) + +(define-method set_checkgetrange_function + (of-object "GstPad") + (c-name "gst_pad_set_checkgetrange_function") + (return-type "none") + (parameters + '("GstPadCheckGetRangeFunction" "check") + ) +) + +(define-method set_event_function + (of-object "GstPad") + (c-name "gst_pad_set_event_function") + (return-type "none") + (parameters + '("GstPadEventFunction" "event") + ) +) + +(define-method set_link_function + (of-object "GstPad") + (c-name "gst_pad_set_link_function") + (return-type "none") + (parameters + '("GstPadLinkFunction" "link") + ) +) + +(define-method set_unlink_function + (of-object "GstPad") + (c-name "gst_pad_set_unlink_function") + (return-type "none") + (parameters + '("GstPadUnlinkFunction" "unlink") + ) +) + +(define-method link + (of-object "GstPad") + (c-name "gst_pad_link") + (return-type "GstPadLinkReturn") + (parameters + '("GstPad*" "sinkpad") + ) +) + +(define-method link_full + (of-object "GstPad") + (c-name "gst_pad_link_full") + (return-type "GstPadLinkReturn") + (parameters + '("GstPad*" "sinkpad") + '("GstPadLinkCheck" "flags") + ) +) + +(define-method unlink + (of-object "GstPad") + (c-name "gst_pad_unlink") + (return-type "gboolean") + (parameters + '("GstPad*" "sinkpad") + ) +) + +(define-method is_linked + (of-object "GstPad") + (c-name "gst_pad_is_linked") + (return-type "gboolean") +) + +(define-method get_peer + (of-object "GstPad") + (c-name "gst_pad_get_peer") + (return-type "GstPad*") + (caller-owns-return #t) +) + +(define-method set_getcaps_function + (of-object "GstPad") + (c-name "gst_pad_set_getcaps_function") + (return-type "none") + (parameters + '("GstPadGetCapsFunction" "getcaps") + ) +) + +(define-method set_acceptcaps_function + (of-object "GstPad") + (c-name "gst_pad_set_acceptcaps_function") + (return-type "none") + (parameters + '("GstPadAcceptCapsFunction" "acceptcaps") + ) +) + +(define-method set_fixatecaps_function + (of-object "GstPad") + (c-name "gst_pad_set_fixatecaps_function") + (return-type "none") + (parameters + '("GstPadFixateCapsFunction" "fixatecaps") + ) +) + +(define-method set_setcaps_function + (of-object "GstPad") + (c-name "gst_pad_set_setcaps_function") + (return-type "none") + (parameters + '("GstPadSetCapsFunction" "setcaps") + ) +) + +(define-method get_pad_template_caps + (of-object "GstPad") + (c-name "gst_pad_get_pad_template_caps") + (return-type "const-GstCaps*") +) + +(define-method get_caps_reffed + (of-object "GstPad") + (c-name "gst_pad_get_caps_reffed") + (return-type "GstCaps*") +) + +(define-method get_caps + (of-object "GstPad") + (c-name "gst_pad_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method fixate_caps + (of-object "GstPad") + (c-name "gst_pad_fixate_caps") + (return-type "none") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method accept_caps + (of-object "GstPad") + (c-name "gst_pad_accept_caps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method set_caps + (of-object "GstPad") + (c-name "gst_pad_set_caps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method peer_get_caps_reffed + (of-object "GstPad") + (c-name "gst_pad_peer_get_caps_reffed") + (return-type "GstCaps*") +) + +(define-method peer_get_caps + (of-object "GstPad") + (c-name "gst_pad_peer_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method peer_accept_caps + (of-object "GstPad") + (c-name "gst_pad_peer_accept_caps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method get_allowed_caps + (of-object "GstPad") + (c-name "gst_pad_get_allowed_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method get_negotiated_caps + (of-object "GstPad") + (c-name "gst_pad_get_negotiated_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method push + (of-object "GstPad") + (c-name "gst_pad_push") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buffer" (keep-refcount)) + ) +) + +(define-method push_list + (of-object "GstPad") + (c-name "gst_pad_push_list") + (return-type "GstFlowReturn") + (parameters + '("GstBufferList*" "list" (keep-refcount)) + ) +) + +(define-method check_pull_range + (of-object "GstPad") + (c-name "gst_pad_check_pull_range") + (return-type "gboolean") +) + +(define-method pull_range + (of-object "GstPad") + (c-name "gst_pad_pull_range") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "size") + '("GstBuffer**" "buffer") + ) +) + +(define-method push_event + (of-object "GstPad") + (c-name "gst_pad_push_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event" (keep-refcount)) + ) +) + +(define-method event_default + (of-object "GstPad") + (c-name "gst_pad_event_default") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + ) +) + +(define-method chain + (of-object "GstPad") + (c-name "gst_pad_chain") + (return-type "GstFlowReturn") + (parameters + '("GstBuffer*" "buffer" (keep-refcount)) + ) +) + +(define-method chain_list + (of-object "GstPad") + (c-name "gst_pad_chain_list") + (return-type "GstFlowReturn") + (parameters + '("GstBufferList*" "list" (keep-refcount)) + ) +) + +(define-method get_range + (of-object "GstPad") + (c-name "gst_pad_get_range") + (return-type "GstFlowReturn") + (parameters + '("guint64" "offset") + '("guint" "size") + '("GstBuffer**" "buffer") + ) +) + +(define-method send_event + (of-object "GstPad") + (c-name "gst_pad_send_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event" (keep-refcount)) + ) +) + +(define-method start_task + (of-object "GstPad") + (c-name "gst_pad_start_task") + (return-type "gboolean") + (parameters + '("GstTaskFunction" "func") + '("gpointer" "data") + ) +) + +(define-method pause_task + (of-object "GstPad") + (c-name "gst_pad_pause_task") + (return-type "gboolean") +) + +(define-method stop_task + (of-object "GstPad") + (c-name "gst_pad_stop_task") + (return-type "gboolean") +) + +(define-method set_internal_link_function + (of-object "GstPad") + (c-name "gst_pad_set_internal_link_function") + (return-type "none") + (parameters + '("GstPadIntLinkFunction" "intlink") + ) +) + +(define-method get_internal_links + (of-object "GstPad") + (c-name "gst_pad_get_internal_links") + (return-type "GList*") +) + +(define-method get_internal_links_default + (of-object "GstPad") + (c-name "gst_pad_get_internal_links_default") + (return-type "GList*") +) + +(define-method set_iterate_internal_links_function + (of-object "GstPad") + (c-name "gst_pad_set_iterate_internal_links_function") + (return-type "none") + (parameters + '("GstPadIterIntLinkFunction" "iterintlink") + ) +) + +(define-method iterate_internal_links + (of-object "GstPad") + (c-name "gst_pad_iterate_internal_links") + (return-type "GstIterator*") +) + +(define-method iterate_internal_links_default + (of-object "GstPad") + (c-name "gst_pad_iterate_internal_links_default") + (return-type "GstIterator*") +) + +(define-method set_query_type_function + (of-object "GstPad") + (c-name "gst_pad_set_query_type_function") + (return-type "none") + (parameters + '("GstPadQueryTypeFunction" "type_func") + ) +) + +(define-method get_query_types + (of-object "GstPad") + (c-name "gst_pad_get_query_types") + (return-type "const-GstQueryType*") +) + +(define-method get_query_types_default + (of-object "GstPad") + (c-name "gst_pad_get_query_types_default") + (return-type "const-GstQueryType*") +) + +(define-method query + (of-object "GstPad") + (c-name "gst_pad_query") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-method peer_query + (of-object "GstPad") + (c-name "gst_pad_peer_query") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-method set_query_function + (of-object "GstPad") + (c-name "gst_pad_set_query_function") + (return-type "none") + (parameters + '("GstPadQueryFunction" "query") + ) +) + +(define-method query_default + (of-object "GstPad") + (c-name "gst_pad_query_default") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + ) +) + +(define-method dispatcher + (of-object "GstPad") + (c-name "gst_pad_dispatcher") + (return-type "gboolean") + (parameters + '("GstPadDispatcherFunction" "dispatch") + '("gpointer" "data") + ) +) + +(define-method add_data_probe + (of-object "GstPad") + (c-name "gst_pad_add_data_probe") + (return-type "gulong") + (parameters + '("GCallback" "handler") + '("gpointer" "data") + ) +) + +(define-method remove_data_probe + (of-object "GstPad") + (c-name "gst_pad_remove_data_probe") + (return-type "none") + (parameters + '("guint" "handler_id") + ) +) + +(define-method add_event_probe + (of-object "GstPad") + (c-name "gst_pad_add_event_probe") + (return-type "gulong") + (parameters + '("GCallback" "handler") + '("gpointer" "data") + ) +) + +(define-method remove_event_probe + (of-object "GstPad") + (c-name "gst_pad_remove_event_probe") + (return-type "none") + (parameters + '("guint" "handler_id") + ) +) + +(define-method add_buffer_probe + (of-object "GstPad") + (c-name "gst_pad_add_buffer_probe") + (return-type "gulong") + (parameters + '("GCallback" "handler") + '("gpointer" "data") + ) +) + +(define-method remove_buffer_probe + (of-object "GstPad") + (c-name "gst_pad_remove_buffer_probe") + (return-type "none") + (parameters + '("guint" "handler_id") + ) +) + +(define-method found_tags_for_pad + (of-object "GstElement") + (c-name "gst_element_found_tags_for_pad") + (return-type "none") + (parameters + '("GstPad*" "pad") + '("GstTagList*" "list") + ) +) + +(define-method found_tags + (of-object "GstElement") + (c-name "gst_element_found_tags") + (return-type "none") + (parameters + '("GstTagList*" "list") + ) +) + +(define-function parse_bin_from_description + (c-name "gst_parse_bin_from_description") + (return-type "GstElement*") + (parameters + '("const-gchar*" "bin_description") + '("gboolean" "ghost_unconnected_pads") + '("GError**" "err") + ) +) + +(define-function util_get_timestamp + (c-name "gst_util_get_timestamp") + (return-type "GstClockTime") +) + +(define-function util_array_binary_search + (c-name "gst_util_array_binary_search") + (return-type "gpointer") + (parameters + '("gpointer" "array") + '("guint" "num_elements") + '("gsize" "element_size") + '("GCompareDataFunc" "search_func") + '("GstSearchMode" "mode") + '("gconstpointer" "search_data") + '("gpointer" "user_data") + ) +) +(define-function util_greatest_common_divisor + (c-name "gst_util_greatest_common_divisor") + (return-type "gint") + (parameters + '("gint" "a") + '("gint" "b") + ) +) + +(define-function util_fraction_to_double + (c-name "gst_util_fraction_to_double") + (return-type "none") + (parameters + '("gint" "src_n") + '("gint" "src_d") + '("gdouble*" "dest") + ) +) + +(define-function util_double_to_fraction + (c-name "gst_util_double_to_fraction") + (return-type "none") + (parameters + '("gdouble" "src") + '("gint*" "dest_n") + '("gint*" "dest_d") + ) +) + +(define-function util_fraction_multiply + (c-name "gst_util_fraction_multiply") + (return-type "gboolean") + (parameters + '("gint" "a_n") + '("gint" "a_d") + '("gint" "b_n") + '("gint" "b_d") + '("gint*" "res_n") + '("gint*" "res_d") + ) +) + +(define-function util_fraction_add + (c-name "gst_util_fraction_add") + (return-type "gboolean") + (parameters + '("gint" "a_n") + '("gint" "a_d") + '("gint" "b_n") + '("gint" "b_d") + '("gint*" "res_n") + '("gint*" "res_d") + ) +) + +(define-function util_fraction_compare + (c-name "gst_util_fraction_compare") + (return-type "gint") + (parameters + '("gint" "a_n") + '("gint" "a_d") + '("gint" "b_n") + '("gint" "b_d") + ) +) + +(define-function event_new_sink_message + (c-name "gst_event_new_sink_message") + (return-type "GstEvent*") + (parameters + '("GstMessage*" "msg") + ) +) + +(define-method parse_sink_message + (of-object "GstEvent") + (c-name "gst_event_parse_sink_message") + (return-type "none") + (parameters + '("GstMessage**" "msg") + ) +) + +(define-function pad_load_and_link + (c-name "gst_pad_load_and_link") + (return-type "none") + (parameters + '("GstXmlNodePtr" "self") + '("GstObject*" "parent") + ) +) + +(define-function pad_template_get_type + (c-name "gst_pad_template_get_type") + (return-type "GType") +) + +(define-function pad_template_new + (c-name "gst_pad_template_new") + (is-constructor-of "GstPadTemplate") + (return-type "GstPadTemplate*") + (parameters + '("const-gchar*" "name_template") + '("GstPadDirection" "direction") + '("GstPadPresence" "presence") + '("GstCaps*" "caps" (keep-refcount)) + ) +) + +(define-method get + (of-object "GstStaticPadTemplate") + (c-name "gst_static_pad_template_get") + (return-type "GstPadTemplate*") + (caller-owns-return #t) +) + +(define-method get_caps + (of-object "GstStaticPadTemplate") + (c-name "gst_static_pad_template_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method get_caps + (of-object "GstPadTemplate") + (c-name "gst_pad_template_get_caps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method pad_created + (of-object "GstPadTemplate") + (c-name "gst_pad_template_pad_created") + (return-type "none") + (parameters + '("GstPad*" "pad") + ) +) + + +;; From ../gstreamer/gst/gstparse.h + +(define-function parse_error_quark + (c-name "gst_parse_error_quark") + (return-type "GQuark") +) + +(define-function gst_parse_context_new + (c-name "gst_parse_context_new") + (is-constructor-of "GstParseContext") + (return-type "GstParseContext*") +) + +(define-method get_missing_elements + (of-object "GstParseContext") + (c-name "gst_parse_context_get_missing_elements") + (return-type "GStrv") +) + +(define-method free + (of-object "GstParseContext") + (c-name "gst_parse_context_free") + (return-type "none") +) + +(define-function parse_launch + (c-name "gst_parse_launch") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "pipeline_description") + '("GError**" "error") + ) +) + +(define-function parse_launchv + (c-name "gst_parse_launchv") + (return-type "GstElement*") + (caller-owns-return #t) + (parameters + '("const-gchar**" "argv") + '("GError**" "error") + ) +) + +(define-function parse_launch_full + (c-name "gst_parse_launch_full") + (return-type "GstElement*") + (parameters + '("const-gchar*" "pipeline_description") + '("GstParseContext*" "context") + '("GstParseFlags" "flags") + '("GError**" "error") + ) +) + +(define-function parse_launchv_full + (c-name "gst_parse_launchv_full") + (return-type "GstElement*") + (parameters + '("const-gchar**" "argv") + '("GstParseContext*" "context") + '("GstParseFlags" "flags") + '("GError**" "error") + ) +) + + +;; From ../gstreamer/gst/gstpipeline.h + +(define-function pipeline_get_type + (c-name "gst_pipeline_get_type") + (return-type "GType") +) + +(define-function pipeline_new + (c-name "gst_pipeline_new") + (is-constructor-of "GstPipeline") + (return-type "GstElement*") + (properties + '("name" (argname "name") (optional)) + ) +) + +(define-method get_bus + (of-object "GstPipeline") + (c-name "gst_pipeline_get_bus") + (return-type "GstBus*") + (caller-owns-return #t) +) + +(define-method set_new_stream_time + (of-object "GstPipeline") + (c-name "gst_pipeline_set_new_stream_time") + (return-type "none") + (parameters + '("GstClockTime" "time") + ) +) + +(define-method get_last_stream_time + (of-object "GstPipeline") + (c-name "gst_pipeline_get_last_stream_time") + (return-type "GstClockTime") +) + +(define-method use_clock + (of-object "GstPipeline") + (c-name "gst_pipeline_use_clock") + (return-type "none") + (parameters + '("GstClock*" "clock") + ) +) + +(define-method set_clock + (of-object "GstPipeline") + (c-name "gst_pipeline_set_clock") + (return-type "gboolean") + (parameters + '("GstClock*" "clock") + ) +) + +(define-method get_clock + (of-object "GstPipeline") + (c-name "gst_pipeline_get_clock") + (return-type "GstClock*") + (caller-owns-return #t) +) + +(define-method auto_clock + (of-object "GstPipeline") + (c-name "gst_pipeline_auto_clock") + (return-type "none") +) + +(define-method set_delay + (of-object "GstPipeline") + (c-name "gst_pipeline_set_delay") + (return-type "none") + (parameters + '("GstClockTime" "delay") + ) +) + +(define-method get_delay + (of-object "GstPipeline") + (c-name "gst_pipeline_get_delay") + (return-type "GstClockTime") +) + +(define-method set_auto_flush_bus + (of-object "GstPipeline") + (c-name "gst_pipeline_set_auto_flush_bus") + (return-type "none") + (parameters + '("gboolean" "auto_flush") + ) +) + +(define-method get_auto_flush_bus + (of-object "GstPipeline") + (c-name "gst_pipeline_get_auto_flush_bus") + (return-type "gboolean") +) + + + +;; From ../gstreamer/gst/gstplugin.h + +(define-function plugin_error_quark + (c-name "gst_plugin_error_quark") + (return-type "GQuark") +) + +(define-function plugin_get_type + (c-name "gst_plugin_get_type") + (return-type "GType") +) + +(define-function plugin_register_static + (c-name "gst_plugin_register_static") + (return-type "gboolean") + (parameters + '("const-GstPluginDesc*" "desc") + ) +) + +(define-method get_name + (of-object "GstPlugin") + (c-name "gst_plugin_get_name") + (return-type "const-gchar*") +) + +(define-method get_description + (of-object "GstPlugin") + (c-name "gst_plugin_get_description") + (return-type "const-gchar*") +) + +(define-method get_filename + (of-object "GstPlugin") + (c-name "gst_plugin_get_filename") + (return-type "const-gchar*") +) + +(define-method get_version + (of-object "GstPlugin") + (c-name "gst_plugin_get_version") + (return-type "const-gchar*") +) + +(define-method get_license + (of-object "GstPlugin") + (c-name "gst_plugin_get_license") + (return-type "const-gchar*") +) + +(define-method get_source + (of-object "GstPlugin") + (c-name "gst_plugin_get_source") + (return-type "const-gchar*") +) + +(define-method get_package + (of-object "GstPlugin") + (c-name "gst_plugin_get_package") + (return-type "const-gchar*") +) + +(define-method get_origin + (of-object "GstPlugin") + (c-name "gst_plugin_get_origin") + (return-type "const-gchar*") +) + +(define-method get_cache_data + (of-object "GstPlugin") + (c-name "gst_plugin_get_cache_data") + (return-type "const-GstStructure*") +) + +(define-method set_cache_data + (of-object "GstPlugin") + (c-name "gst_plugin_set_cache_data") + (return-type "none") + (parameters + '("GstStructure*" "cache_data") + ) +) + +(define-method get_module + (of-object "GstPlugin") + (c-name "gst_plugin_get_module") + (return-type "GModule*") +) + +(define-method is_loaded + (of-object "GstPlugin") + (c-name "gst_plugin_is_loaded") + (return-type "gboolean") +) + +(define-method name_filter + (of-object "GstPlugin") + (c-name "gst_plugin_name_filter") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-function plugin_load_file + (c-name "gst_plugin_load_file") + (return-type "GstPlugin*") + (parameters + '("const-gchar*" "filename") + '("GError**" "error") + ) +) + + +(define-method load + (of-object "GstPlugin") + (c-name "gst_plugin_load") + (return-type "GstPlugin*") +) + +(define-function plugin_load_by_name + (c-name "gst_plugin_load_by_name") + (return-type "GstPlugin*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-function plugin_list_free + (c-name "gst_plugin_list_free") + (return-type "none") + (parameters + '("GList*" "list") + ) +) + + + +;; From ../gstreamer/gst/gstpluginfeature.h + +(define-function plugin_feature_get_type + (c-name "gst_plugin_feature_get_type") + (return-type "GType") +) + +(define-method load + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_load") + (return-type "GstPluginFeature*") +) + +(define-method type_name_filter + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_type_name_filter") + (return-type "gboolean") + (parameters + '("GstTypeNameData*" "data") + ) +) + +(define-method set_rank + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_set_rank") + (return-type "none") + (parameters + '("guint" "rank") + ) +) + +(define-method set_name + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_set_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_rank + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_get_rank") + (return-type "guint") +) + +(define-method get_name + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_get_name") + (return-type "const-gchar*") +) + +(define-function plugin_feature_list_free + (c-name "gst_plugin_feature_list_free") + (return-type "none") + (parameters + '("GList*" "list") + ) +) + +(define-function plugin_feature_list_copy + (c-name "gst_plugin_feature_list_copy") + (return-type "GList*") + (parameters + '("GList*" "list") + ) +) + +(define-method check_version + (of-object "GstPluginFeature") + (c-name "gst_plugin_feature_check_version") + (return-type "gboolean") + (parameters + '("guint" "min_major") + '("guint" "min_minor") + '("guint" "min_micro") + ) +) + +(define-function plugin_feature_rank_compare_func + (c-name "gst_plugin_feature_rank_compare_func") + (return-type "gint") + (parameters + '("gconstpointer" "p1") + '("gconstpointer" "p2") + ) +) + + +;; From gstpoll.h + +(define-function gst_poll_new + (c-name "gst_poll_new") + (is-constructor-of "GstPoll") + (return-type "GstPoll*") + (parameters + '("gboolean" "controllable") + ) +) + +(define-function poll_new_timer + (c-name "gst_poll_new_timer") + (caller-owns-return #t) + (return-type "GstPoll*") +) + +(define-method free + (of-object "GstPoll") + (c-name "gst_poll_free") + (return-type "none") +) + +(define-method get_read_gpollfd + (of-object "GstPoll") + (c-name "gst_poll_get_read_gpollfd") + (return-type "none") + (parameters + '("GPollFD*" "fd") + ) +) + +(define-method init + (of-object "GstPollFD") + (c-name "gst_poll_fd_init") + (return-type "none") +) + +(define-method add_fd + (of-object "GstPoll") + (c-name "gst_poll_add_fd") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method remove_fd + (of-object "GstPoll") + (c-name "gst_poll_remove_fd") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_ctl_write + (of-object "GstPoll") + (c-name "gst_poll_fd_ctl_write") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + '("gboolean" "active") + ) +) + +(define-method fd_ctl_read + (of-object "GstPoll") + (c-name "gst_poll_fd_ctl_read") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + '("gboolean" "active") + ) +) + +(define-method fd_ignored + (of-object "GstPoll") + (c-name "gst_poll_fd_ignored") + (return-type "none") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_has_closed + (of-object "GstPoll") + (c-name "gst_poll_fd_has_closed") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_has_error + (of-object "GstPoll") + (c-name "gst_poll_fd_has_error") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_can_read + (of-object "GstPoll") + (c-name "gst_poll_fd_can_read") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method fd_can_write + (of-object "GstPoll") + (c-name "gst_poll_fd_can_write") + (return-type "gboolean") + (parameters + '("GstPollFD*" "fd") + ) +) + +(define-method wait + (of-object "GstPoll") + (c-name "gst_poll_wait") + (return-type "gint") + (parameters + '("GstClockTime" "timeout") + ) +) + +(define-method set_controllable + (of-object "GstPoll") + (c-name "gst_poll_set_controllable") + (return-type "gboolean") + (parameters + '("gboolean" "controllable") + ) +) + +(define-method restart + (of-object "GstPoll") + (c-name "gst_poll_restart") + (return-type "none") +) + +(define-method set_flushing + (of-object "GstPoll") + (c-name "gst_poll_set_flushing") + (return-type "none") + (parameters + '("gboolean" "flushing") + ) +) + +(define-method write_control + (of-object "GstPoll") + (c-name "gst_poll_write_control") + (return-type "gboolean") +) + +(define-method read_control + (of-object "GstPoll") + (c-name "gst_poll_read_control") + (return-type "gboolean") +) + +;; From gstpreset.h + +(define-function gst_preset_get_type + (c-name "gst_preset_get_type") + (return-type "GType") +) + +(define-method get_preset_names + (of-object "GstPreset") + (c-name "gst_preset_get_preset_names") + (return-type "GStrv") +) + +(define-method get_property_names + (of-object "GstPreset") + (c-name "gst_preset_get_property_names") + (return-type "GStrv") +) + +(define-method load_preset + (of-object "GstPreset") + (c-name "gst_preset_load_preset") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method save_preset + (of-object "GstPreset") + (c-name "gst_preset_save_preset") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method rename_preset + (of-object "GstPreset") + (c-name "gst_preset_rename_preset") + (return-type "gboolean") + (parameters + '("const-gchar*" "old_name") + '("const-gchar*" "new_name") + ) +) + +(define-method delete_preset + (of-object "GstPreset") + (c-name "gst_preset_delete_preset") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method set_meta + (of-object "GstPreset") + (c-name "gst_preset_set_meta") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "tag") + '("const-gchar*" "value") + ) +) + +(define-method get_meta + (of-object "GstPreset") + (c-name "gst_preset_get_meta") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "tag") + '("gchar**" "value") + ) +) + + +;; From ../gstreamer/gst/gstquery.h + +(define-method get_name + (of-object "GstQueryType") + (c-name "gst_query_type_get_name") + (return-type "const-gchar*") +) + +(define-method to_quark + (of-object "GstQueryType") + (c-name "gst_query_type_to_quark") + (return-type "GQuark") +) + +(define-function query_get_type + (c-name "gst_query_get_type") + (return-type "GType") +) + +(define-function query_type_register + (c-name "gst_query_type_register") + (return-type "GstQueryType") + (parameters + '("const-gchar*" "nick") + '("const-gchar*" "description") + ) +) + +(define-function query_type_get_by_nick + (c-name "gst_query_type_get_by_nick") + (return-type "GstQueryType") + (parameters + '("const-gchar*" "nick") + ) +) + +(define-method s_contains + (of-object "GstQueryType") + (c-name "gst_query_types_contains") + (return-type "gboolean") + (parameters + '("GstQueryType" "type") + ) +) + +(define-method get_details + (of-object "GstQueryType") + (c-name "gst_query_type_get_details") + (return-type "const-GstQueryTypeDefinition*") +) + +(define-function query_type_iterate_definitions + (c-name "gst_query_type_iterate_definitions") + (return-type "GstIterator*") +) + +(define-function query_new_position + (c-name "gst_query_new_position") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_position + (of-object "GstQuery") + (c-name "gst_query_set_position") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "cur") + ) +) + +(define-method parse_position + (of-object "GstQuery") + (c-name "gst_query_parse_position") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "cur") + ) +) + +(define-function query_new_duration + (c-name "gst_query_new_duration") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_duration + (of-object "GstQuery") + (c-name "gst_query_set_duration") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "duration") + ) +) + +(define-method parse_duration + (of-object "GstQuery") + (c-name "gst_query_parse_duration") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-function query_new_latency + (c-name "gst_query_new_latency") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-method set_latency + (of-object "GstQuery") + (c-name "gst_query_set_latency") + (return-type "none") + (parameters + '("gboolean" "live") + '("GstClockTime" "min_latency") + '("GstClockTime" "max_latency") + ) +) + +(define-method parse_latency + (of-object "GstQuery") + (c-name "gst_query_parse_latency") + (return-type "none") + (parameters + '("gboolean*" "live") + '("GstClockTime*" "min_latency") + '("GstClockTime*" "max_latency") + ) +) + +(define-function query_new_convert + (c-name "gst_query_new_convert") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "src_fmt") + '("gint64" "value") + '("GstFormat" "dest_fmt") + ) +) + +(define-method set_convert + (of-object "GstQuery") + (c-name "gst_query_set_convert") + (return-type "none") + (parameters + '("GstFormat" "src_format") + '("gint64" "src_value") + '("GstFormat" "dest_format") + '("gint64" "dest_value") + ) +) + +(define-method parse_convert + (of-object "GstQuery") + (c-name "gst_query_parse_convert") + (return-type "none") + (parameters + '("GstFormat*" "src_format") + '("gint64*" "src_value") + '("GstFormat*" "dest_format") + '("gint64*" "dest_value") + ) +) + +(define-function query_new_segment + (c-name "gst_query_new_segment") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_segment + (of-object "GstQuery") + (c-name "gst_query_set_segment") + (return-type "none") + (parameters + '("gdouble" "rate") + '("GstFormat" "format") + '("gint64" "start_value") + '("gint64" "stop_value") + ) +) + +(define-method parse_segment + (of-object "GstQuery") + (c-name "gst_query_parse_segment") + (return-type "none") + (parameters + '("gdouble*" "rate") + '("GstFormat*" "format") + '("gint64*" "start_value") + '("gint64*" "stop_value") + ) +) + +(define-function query_new_application + (c-name "gst_query_new_application") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstQueryType" "type") + '("GstStructure*" "structure") + ) +) + +(define-method get_structure + (of-object "GstQuery") + (c-name "gst_query_get_structure") + (return-type "GstStructure*") +) + + +(define-function query_new_seeking + (c-name "gst_query_new_seeking") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_seeking + (of-object "GstQuery") + (c-name "gst_query_set_seeking") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gboolean" "seekable") + '("gint64" "segment_start") + '("gint64" "segment_end") + ) +) + +(define-method parse_seeking + (of-object "GstQuery") + (c-name "gst_query_parse_seeking") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gboolean*" "seekable") + '("gint64*" "segment_start") + '("gint64*" "segment_end") + ) +) + +(define-function query_new_formats + (c-name "gst_query_new_formats") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-method set_formats + (of-object "GstQuery") + (c-name "gst_query_set_formats") + (return-type "none") + (parameters + '("gint" "n_formats") + ) + (varargs #t) +) + +(define-method set_formatsv + (of-object "GstQuery") + (c-name "gst_query_set_formatsv") + (return-type "none") + (parameters + '("gint" "n_formats") + '("GstFormat*" "formats") + ) +) + +(define-method parse_formats_length + (of-object "GstQuery") + (c-name "gst_query_parse_formats_length") + (return-type "none") + (parameters + '("guint*" "n_formats") + ) +) + +(define-method parse_formats_nth + (of-object "GstQuery") + (c-name "gst_query_parse_formats_nth") + (return-type "none") + (parameters + '("guint" "nth") + '("GstFormat*" "format") + ) +) + +(define-function query_new_buffering + (c-name "gst_query_new_buffering") + (return-type "GstQuery*") + (caller-owns-return #t) + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_buffering_percent + (of-object "GstQuery") + (c-name "gst_query_set_buffering_percent") + (return-type "none") + (parameters + '("gboolean" "busy") + '("gint" "percent") + ) +) + +(define-method parse_buffering_percent + (of-object "GstQuery") + (c-name "gst_query_parse_buffering_percent") + (return-type "none") + (parameters + '("gboolean*" "busy") + '("gint*" "percent") + ) +) + +(define-method set_buffering_stats + (of-object "GstQuery") + (c-name "gst_query_set_buffering_stats") + (return-type "none") + (parameters + '("GstBufferingMode" "mode") + '("gint" "avg_in") + '("gint" "avg_out") + '("gint64" "buffering_left") + ) +) + +(define-method parse_buffering_stats + (of-object "GstQuery") + (c-name "gst_query_parse_buffering_stats") + (return-type "none") + (parameters + '("GstBufferingMode*" "mode") + '("gint*" "avg_in") + '("gint*" "avg_out") + '("gint64*" "buffering_left") + ) +) + +(define-method set_buffering_range + (of-object "GstQuery") + (c-name "gst_query_set_buffering_range") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "estimated_total") + ) +) + +(define-method parse_buffering_range + (of-object "GstQuery") + (c-name "gst_query_parse_buffering_range") + (return-type "none") + (parameters + '("GstFormat*" "format") + '("gint64*" "start") + '("gint64*" "stop") + '("gint64*" "estimated_total") + ) +) + +(define-method add_buffering_range + (of-object "GstQuery") + (c-name "gst_query_add_buffering_range") + (return-type "gboolean") + (parameters + '("gint64" "start") + '("gint64" "stop") + ) +) + +(define-method get_n_buffering_ranges + (of-object "GstQuery") + (c-name "gst_query_get_n_buffering_ranges") + (return-type "guint") +) + +(define-method parse_nth_buffering_range + (of-object "GstQuery") + (c-name "gst_query_parse_nth_buffering_range") + (return-type "gboolean") + (parameters + '("guint" "index") + '("gint64*" "start") + '("gint64*" "stop") + ) +) + +(define-function query_new_uri + (c-name "gst_query_new_uri") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-method parse_uri + (of-object "GstQuery") + (c-name "gst_query_parse_uri") + (return-type "none") + (parameters + '("gchar**" "uri") + ) +) + +(define-method set_uri + (of-object "GstQuery") + (c-name "gst_query_set_uri") + (return-type "none") + (parameters + '("const-gchar*" "uri") + ) +) + + +;; From ../gstreamer/gst/gstregistry.h + +(define-function registry_get_type + (c-name "gst_registry_get_type") + (return-type "GType") +) + +(define-function registry_get_default + (c-name "gst_registry_get_default") + (return-type "GstRegistry*") +) + +(define-method scan_path + (of-object "GstRegistry") + (c-name "gst_registry_scan_path") + (return-type "none") + (parameters + '("const-gchar*" "path") + ) +) + +(define-method add_path + (of-object "GstRegistry") + (c-name "gst_registry_add_path") + (return-type "none") + (parameters + '("const-gchar*" "path") + ) +) + +(define-method get_path_list + (of-object "GstRegistry") + (c-name "gst_registry_get_path_list") + (return-type "GList*") +) + +(define-method add_plugin + (of-object "GstRegistry") + (c-name "gst_registry_add_plugin") + (return-type "gboolean") + (parameters + '("GstPlugin*" "plugin") + ) +) + +(define-method remove_plugin + (of-object "GstRegistry") + (c-name "gst_registry_remove_plugin") + (return-type "none") + (parameters + '("GstPlugin*" "plugin") + ) +) + +(define-method get_plugin_list + (of-object "GstRegistry") + (c-name "gst_registry_get_plugin_list") + (return-type "GList*") +) + +(define-method plugin_filter + (of-object "GstRegistry") + (c-name "gst_registry_plugin_filter") + (return-type "GList*") + (parameters + '("GstPluginFilter" "filter") + '("gboolean" "first") + '("gpointer" "user_data") + ) +) + +(define-method find_plugin + (of-object "GstRegistry") + (c-name "gst_registry_find_plugin") + (return-type "GstPlugin*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + ) +) + +(define-method feature_filter + (of-object "GstRegistry") + (c-name "gst_registry_feature_filter") + (return-type "GList*") + (parameters + '("GstPluginFeatureFilter" "filter") + '("gboolean" "first") + '("gpointer" "user_data") + ) +) + +(define-method get_feature_list + (of-object "GstRegistry") + (c-name "gst_registry_get_feature_list") + (return-type "GList*") + (parameters + '("GType" "type") + ) +) + +(define-method get_feature_list_by_plugin + (of-object "GstRegistry") + (c-name "gst_registry_get_feature_list_by_plugin") + (return-type "GList*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_feature_list_cookie + (of-object "GstRegistry") + (c-name "gst_registry_get_feature_list_cookie") + (return-type "guint32") +) + +(define-method add_feature + (of-object "GstRegistry") + (c-name "gst_registry_add_feature") + (return-type "gboolean") + (parameters + '("GstPluginFeature*" "feature") + ) +) + +(define-method remove_feature + (of-object "GstRegistry") + (c-name "gst_registry_remove_feature") + (return-type "none") + (parameters + '("GstPluginFeature*" "feature") + ) +) + + +(define-method find_feature + (of-object "GstRegistry") + (c-name "gst_registry_find_feature") + (return-type "GstPluginFeature*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + '("GType" "type") + ) +) + +(define-method lookup_feature + (of-object "GstRegistry") + (c-name "gst_registry_lookup_feature") + (return-type "GstPluginFeature*") + (caller-owns-return #t) + (parameters + '("const-char*" "name") + ) +) + +(define-method lookup + (of-object "GstRegistry") + (c-name "gst_registry_lookup") + (return-type "GstPlugin*") + (caller-owns-return #t) + (parameters + '("const-char*" "filename") + ) +) + +(define-method xml_read_cache + (of-object "GstRegistry") + (c-name "gst_registry_xml_read_cache") + (return-type "gboolean") + (parameters + '("const-char*" "location") + ) +) + +(define-method xml_write_cache + (of-object "GstRegistry") + (c-name "gst_registry_xml_write_cache") + (return-type "gboolean") + (parameters + '("const-char*" "location") + ) +) + +(define-function default_registry_check_feature_version + (c-name "gst_default_registry_check_feature_version") + (return-type "gboolean") + (parameters + '("const-gchar*" "feature_name") + '("guint" "min_major") + '("guint" "min_minor") + '("guint" "min_micro") + ) +) + +;; From ../gstreamer/gst/gstsegment.h + +(define-function gst_segment_get_type + (c-name "gst_segment_get_type") + (return-type "GType") +) + +(define-function gst_segment_new + (c-name "gst_segment_new") + (is-constructor-of "GstSegment") + (return-type "GstSegment*") +) + +(define-method free + (of-object "GstSegment") + (c-name "gst_segment_free") + (return-type "none") +) + +(define-method init + (of-object "GstSegment") + (c-name "gst_segment_init") + (return-type "none") + (parameters + '("GstFormat" "format") + ) +) + +(define-method set_duration + (of-object "GstSegment") + (c-name "gst_segment_set_duration") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "duration") + ) +) + +(define-method set_last_stop + (of-object "GstSegment") + (c-name "gst_segment_set_last_stop") + (return-type "none") + (parameters + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-method set_seek + (of-object "GstSegment") + (c-name "gst_segment_set_seek") + (return-type "none") + (parameters + '("gdouble" "rate") + '("GstFormat" "format") + '("GstSeekFlags" "flags") + '("GstSeekType" "start_type") + '("gint64" "start") + '("GstSeekType" "stop_type") + '("gint64" "stop") + '("gboolean*" "update") + ) +) + +(define-method set_newsegment + (of-object "GstSegment") + (c-name "gst_segment_set_newsegment") + (return-type "none") + (parameters + '("gboolean" "update") + '("gdouble" "rate") + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "time") + ) +) + +(define-method set_newsegment_full + (of-object "GstSegment") + (c-name "gst_segment_set_newsegment_full") + (return-type "none") + (parameters + '("gboolean" "update") + '("gdouble" "rate") + '("gdouble" "applied_rate") + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64" "time") + ) +) + +(define-method to_stream_time + (of-object "GstSegment") + (c-name "gst_segment_to_stream_time") + (return-type "gint64") + (parameters + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-method to_running_time + (of-object "GstSegment") + (c-name "gst_segment_to_running_time") + (return-type "gint64") + (parameters + '("GstFormat" "format") + '("gint64" "position") + ) +) + +(define-method to_position + (of-object "GstSegment") + (c-name "gst_segment_to_position") + (return-type "gint64") + (parameters + '("GstFormat" "format") + '("gint64" "running_time") + ) +) + +(define-method clip + (of-object "GstSegment") + (c-name "gst_segment_clip") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + '("gint64" "start") + '("gint64" "stop") + '("gint64*" "clip_start") + '("gint64*" "clip_stop") + ) +) + +(define-method set_running_time + (of-object "GstSegment") + (c-name "gst_segment_set_running_time") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + '("gint64" "running_time") + ) +) + + + +;; From ../gstreamer/gst/gststructure.h + +(define-function structure_get_type + (c-name "gst_structure_get_type") + (return-type "GType") +) + +(define-function structure_empty_new + (c-name "gst_structure_empty_new") + (is-constructor-of "GstStructureEmpty") + (return-type "GstStructure*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-function structure_id_empty_new + (c-name "gst_structure_id_empty_new") + (is-constructor-of "GstStructureIdEmpty") + (return-type "GstStructure*") + (parameters + '("GQuark" "quark") + ) +) + +(define-function structure_new + (c-name "gst_structure_new") + (is-constructor-of "GstStructure") + (return-type "GstStructure*") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "firstfield") + ) + (varargs #t) +) + +(define-function structure_new_valist + (c-name "gst_structure_new_valist") + (return-type "GstStructure*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "name") + '("const-gchar*" "firstfield") + '("va_list" "varargs") + ) +) + +(define-function gst_structure_id_new + (c-name "gst_structure_id_new") + (is-constructor-of "GstStructureId") + (return-type "GstStructure*") + (parameters + '("GQuark" "name_quark") + '("GQuark" "field_quark") + ) + (varargs #t) +) + +(define-method copy + (of-object "GstStructure") + (c-name "gst_structure_copy") + (return-type "GstStructure*") + (caller-owns-return #t) +) + +(define-method set_parent_refcount + (of-object "GstStructure") + (c-name "gst_structure_set_parent_refcount") + (return-type "none") + (parameters + '("gint*" "refcount") + ) +) + +(define-method free + (of-object "GstStructure") + (c-name "gst_structure_free") + (return-type "none") +) + +(define-method get_name + (of-object "GstStructure") + (c-name "gst_structure_get_name") + (return-type "const-gchar*") +) + +(define-method get_name_id + (of-object "GstStructure") + (c-name "gst_structure_get_name_id") + (return-type "GQuark") +) + +(define-method has_name + (of-object "GstStructure") + (c-name "gst_structure_has_name") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method set_name + (of-object "GstStructure") + (c-name "gst_structure_set_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method id_set_value + (of-object "GstStructure") + (c-name "gst_structure_id_set_value") + (return-type "none") + (parameters + '("GQuark" "field") + '("const-GValue*" "value") + ) +) + +(define-method set_value + (of-object "GstStructure") + (c-name "gst_structure_set_value") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + '("const-GValue*" "value") + ) +) + +(define-method id_take_value + (of-object "GstStructure") + (c-name "gst_structure_id_take_value") + (return-type "none") + (parameters + '("GQuark" "field") + '("GValue*" "value") + ) +) + +(define-method take_value + (of-object "GstStructure") + (c-name "gst_structure_take_value") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + '("GValue*" "value") + ) +) + +(define-method set + (of-object "GstStructure") + (c-name "gst_structure_set") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + ) + (varargs #t) +) + +(define-method set_valist + (of-object "GstStructure") + (c-name "gst_structure_set_valist") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + '("va_list" "varargs") + ) +) + +(define-method id_set + (of-object "GstStructure") + (c-name "gst_structure_id_set") + (return-type "none") + (parameters + '("GQuark" "fieldname") + ) + (varargs #t) +) + +(define-method id_set_valist + (of-object "GstStructure") + (c-name "gst_structure_id_set_valist") + (return-type "none") + (parameters + '("GQuark" "fieldname") + '("va_list" "varargs") + ) +) + +(define-method get_valist + (of-object "GstStructure") + (c-name "gst_structure_get_valist") + (return-type "gboolean") + (parameters + '("const-char*" "first_fieldname") + '("va_list" "args") + ) +) + +(define-method get + (of-object "GstStructure") + (c-name "gst_structure_get") + (return-type "gboolean") + (parameters + '("const-char*" "first_fieldname") + ) + (varargs #t) +) + +(define-method id_get_valist + (of-object "GstStructure") + (c-name "gst_structure_id_get_valist") + (return-type "gboolean") + (parameters + '("GQuark" "first_field_id") + '("va_list" "args") + ) +) + +(define-method id_get + (of-object "GstStructure") + (c-name "gst_structure_id_get") + (return-type "gboolean") + (parameters + '("GQuark" "first_field_id") + ) + (varargs #t) +) + +(define-method id_get_value + (of-object "GstStructure") + (c-name "gst_structure_id_get_value") + (return-type "const-GValue*") + (parameters + '("GQuark" "field") + ) +) + +(define-method get_value + (of-object "GstStructure") + (c-name "gst_structure_get_value") + (return-type "const-GValue*") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method remove_field + (of-object "GstStructure") + (c-name "gst_structure_remove_field") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method remove_fields + (of-object "GstStructure") + (c-name "gst_structure_remove_fields") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + ) + (varargs #t) +) + +(define-method remove_fields_valist + (of-object "GstStructure") + (c-name "gst_structure_remove_fields_valist") + (return-type "none") + (parameters + '("const-gchar*" "fieldname") + '("va_list" "varargs") + ) +) + +(define-method remove_all_fields + (of-object "GstStructure") + (c-name "gst_structure_remove_all_fields") + (return-type "none") +) + +(define-method get_field_type + (of-object "GstStructure") + (c-name "gst_structure_get_field_type") + (return-type "GType") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method foreach + (of-object "GstStructure") + (c-name "gst_structure_foreach") + (return-type "gboolean") + (parameters + '("GstStructureForeachFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method map_in_place + (of-object "GstStructure") + (c-name "gst_structure_map_in_place") + (return-type "gboolean") + (parameters + '("GstStructureMapFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method n_fields + (of-object "GstStructure") + (c-name "gst_structure_n_fields") + (return-type "gint") +) + +(define-method nth_field_name + (of-object "GstStructure") + (c-name "gst_structure_nth_field_name") + (return-type "const-gchar*") + (parameters + '("guint" "index") + ) +) + +(define-method id_has_field + (of-object "GstStructure") + (c-name "gst_structure_id_has_field") + (return-type "gboolean") + (parameters + '("GQuark" "field") + ) +) + +(define-method id_has_field_typed + (of-object "GstStructure") + (c-name "gst_structure_id_has_field_typed") + (return-type "gboolean") + (parameters + '("GQuark" "field") + '("GType" "type") + ) +) + +(define-method has_field + (of-object "GstStructure") + (c-name "gst_structure_has_field") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method has_field_typed + (of-object "GstStructure") + (c-name "gst_structure_has_field_typed") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("GType" "type") + ) +) + +(define-method keys + (of-object "GstStructure") + (c-name "gst_structure_keys") + (return-type "GList*") +) + + +(define-method get_boolean + (of-object "GstStructure") + (c-name "gst_structure_get_boolean") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("gboolean*" "value") + ) +) + +(define-method get_int + (of-object "GstStructure") + (c-name "gst_structure_get_int") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("gint*" "value") + ) +) + +(define-method get_uint + (of-object "GstStructure") + (c-name "gst_structure_get_uint") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("guint*" "value") + ) +) + +(define-method get_fourcc + (of-object "GstStructure") + (c-name "gst_structure_get_fourcc") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("guint32*" "value") + ) +) + +(define-method get_double + (of-object "GstStructure") + (c-name "gst_structure_get_double") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("gdouble*" "value") + ) +) + +(define-method get_date + (of-object "GstStructure") + (c-name "gst_structure_get_date") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("GDate**" "value") + ) +) + +(define-method get_clock_time + (of-object "GstStructure") + (c-name "gst_structure_get_clock_time") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("GstClockTime*" "value") + ) +) + +(define-method get_string + (of-object "GstStructure") + (c-name "gst_structure_get_string") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "fieldname") + ) +) + +(define-method get_enum + (of-object "GstStructure") + (c-name "gst_structure_get_enum") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("GType" "enumtype") + '("gint*" "value") + ) +) + +(define-method get_fraction + (of-object "GstStructure") + (c-name "gst_structure_get_fraction") + (return-type "gboolean") + (parameters + '("const-gchar*" "fieldname") + '("gint*" "value_numerator") + '("gint*" "value_denominator") + ) +) + +(define-method to_string + (of-object "GstStructure") + (c-name "gst_structure_to_string") + (return-type "gchar*") +) + +(define-function structure_from_string + (c-name "gst_structure_from_string") + (return-type "GstStructure*") + (caller-owns-return #t) + (parameters + '("const-gchar*" "string") + '("gchar**" "end") + ) +) + +(define-method fixate_field_nearest_int + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_nearest_int") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("int" "target") + ) +) + +(define-method fixate_field_nearest_double + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_nearest_double") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("double" "target") + ) +) + +(define-method fixate_field_boolean + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_boolean") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("gboolean" "target") + ) +) + +(define-method fixate_field_string + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_string") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("const-gchar*" "target") + ) +) + +(define-method fixate_field_nearest_fraction + (of-object "GstStructure") + (c-name "gst_structure_fixate_field_nearest_fraction") + (return-type "gboolean") + (parameters + '("const-char*" "field_name") + '("const-gint" "target_numerator") + '("const-gint" "target_denominator") + ) +) + + +;; From ../gstreamer/gst/gstsystemclock.h + +(define-function system_clock_get_type + (c-name "gst_system_clock_get_type") + (return-type "GType") +) + +(define-function system_clock_obtain + (c-name "gst_system_clock_obtain") + (return-type "GstClock*") + (caller-owns-return #t) +) + + + +;; From ../gstreamer/gst/gsttag.h + +(define-function tag_list_get_type + (c-name "gst_tag_list_get_type") + (return-type "GType") +) + +(define-function tag_register + (c-name "gst_tag_register") + (return-type "none") + (parameters + '("const-gchar*" "name") + '("GstTagFlag" "flag") + '("GType" "type") + '("const-gchar*" "nick") + '("const-gchar*" "blurb") + '("GstTagMergeFunc" "func") + ) +) + +(define-function tag_merge_use_first + (c-name "gst_tag_merge_use_first") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "src") + ) +) + +(define-function tag_merge_strings_with_comma + (c-name "gst_tag_merge_strings_with_comma") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "src") + ) +) + +(define-function tag_exists + (c-name "gst_tag_exists") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_get_tag_type + (c-name "gst_tag_get_tag_type") + (return-type "GType") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_get_nick + (c-name "gst_tag_get_nick") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_get_description + (c-name "gst_tag_get_description") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_get_flag + (c-name "gst_tag_get_flag") + (return-type "GstTagFlag") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_is_fixed + (c-name "gst_tag_is_fixed") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-function tag_list_new + (c-name "gst_tag_list_new") + (is-constructor-of "GstTagList") + (return-type "GstTagList*") +) + +(define-function is_tag_list + (c-name "gst_is_tag_list") + (return-type "gboolean") + (parameters + '("gconstpointer" "p") + ) +) + +(define-method copy + (of-object "GstTagList") + (c-name "gst_tag_list_copy") + (return-type "GstTagList*") + (caller-owns-return #t) +) + +(define-method is_empty + (of-object "GstTagList") + (c-name "gst_tag_list_is_empty") + (return-type "gboolean") +) + +(define-method insert + (of-object "GstTagList") + (c-name "gst_tag_list_insert") + (return-type "none") + (parameters + '("const-GstTagList*" "from") + '("GstTagMergeMode" "mode") + ) +) + +(define-method merge + (of-object "GstTagList") + (c-name "gst_tag_list_merge") + (return-type "GstTagList*") + (caller-owns-return #t) + (parameters + '("const-GstTagList*" "list2") + '("GstTagMergeMode" "mode") + ) +) + +(define-method free + (of-object "GstTagList") + (c-name "gst_tag_list_free") + (return-type "none") +) + +(define-method get_tag_size + (of-object "GstTagList") + (c-name "gst_tag_list_get_tag_size") + (return-type "guint") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-method add + (of-object "GstTagList") + (c-name "gst_tag_list_add") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + ) + (varargs #t) +) + +(define-method add_values + (of-object "GstTagList") + (c-name "gst_tag_list_add_values") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + ) + (varargs #t) +) + +(define-method add_valist + (of-object "GstTagList") + (c-name "gst_tag_list_add_valist") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("va_list" "var_args") + ) +) + +(define-method add_valist_values + (of-object "GstTagList") + (c-name "gst_tag_list_add_valist_values") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("va_list" "var_args") + ) +) + +(define-method add_value + (of-object "GstTagList") + (c-name "gst_tag_list_add_value") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("const-GValue*" "value") + ) +) + +(define-method remove_tag + (of-object "GstTagList") + (c-name "gst_tag_list_remove_tag") + (return-type "none") + (parameters + '("const-gchar*" "tag") + ) +) + +(define-method foreach + (of-object "GstTagList") + (c-name "gst_tag_list_foreach") + (return-type "none") + (parameters + '("GstTagForeachFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-method get_value_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_value_index") + (return-type "const-GValue*") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + ) +) + +(define-function tag_list_copy_value + (c-name "gst_tag_list_copy_value") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GstTagList*" "list") + '("const-gchar*" "tag") + ) +) + +(define-method get_char + (of-object "GstTagList") + (c-name "gst_tag_list_get_char") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gchar*" "value") + ) +) + +(define-method get_char_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_char_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gchar*" "value") + ) +) + +(define-method get_uchar + (of-object "GstTagList") + (c-name "gst_tag_list_get_uchar") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guchar*" "value") + ) +) + +(define-method get_uchar_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_uchar_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("guchar*" "value") + ) +) + +(define-method get_boolean + (of-object "GstTagList") + (c-name "gst_tag_list_get_boolean") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gboolean*" "value") + ) +) + +(define-method get_boolean_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_boolean_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gboolean*" "value") + ) +) + +(define-method get_int + (of-object "GstTagList") + (c-name "gst_tag_list_get_int") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gint*" "value") + ) +) + +(define-method get_int_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_int_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gint*" "value") + ) +) + +(define-method get_uint + (of-object "GstTagList") + (c-name "gst_tag_list_get_uint") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint*" "value") + ) +) + +(define-method get_uint_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_uint_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("guint*" "value") + ) +) + +(define-method get_long + (of-object "GstTagList") + (c-name "gst_tag_list_get_long") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("glong*" "value") + ) +) + +(define-method get_long_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_long_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("glong*" "value") + ) +) + +(define-method get_ulong + (of-object "GstTagList") + (c-name "gst_tag_list_get_ulong") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gulong*" "value") + ) +) + +(define-method get_ulong_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_ulong_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gulong*" "value") + ) +) + +(define-method get_int64 + (of-object "GstTagList") + (c-name "gst_tag_list_get_int64") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gint64*" "value") + ) +) + +(define-method get_int64_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_int64_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gint64*" "value") + ) +) + +(define-method get_uint64 + (of-object "GstTagList") + (c-name "gst_tag_list_get_uint64") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint64*" "value") + ) +) + +(define-method get_uint64_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_uint64_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("guint64*" "value") + ) +) + +(define-method get_float + (of-object "GstTagList") + (c-name "gst_tag_list_get_float") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gfloat*" "value") + ) +) + +(define-method get_float_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_float_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gfloat*" "value") + ) +) + +(define-method get_double + (of-object "GstTagList") + (c-name "gst_tag_list_get_double") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gdouble*" "value") + ) +) + +(define-method get_double_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_double_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gdouble*" "value") + ) +) + +(define-method get_string + (of-object "GstTagList") + (c-name "gst_tag_list_get_string") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gchar**" "value") + ) +) + +(define-method get_string_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_string_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gchar**" "value") + ) +) + +(define-method peek_string_index + (of-object "GstTagList") + (c-name "gst_tag_list_peek_string_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("const-gchar**" "value") + ) +) + +(define-method get_pointer + (of-object "GstTagList") + (c-name "gst_tag_list_get_pointer") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("gpointer*" "value") + ) +) + +(define-method get_pointer_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_pointer_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("gpointer*" "value") + ) +) + +(define-method get_date + (of-object "GstTagList") + (c-name "gst_tag_list_get_date") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("GDate**" "value") + ) +) + +(define-method get_date_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_date_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("GDate**" "value") + ) +) + +(define-method get_buffer + (of-object "GstTagList") + (c-name "gst_tag_list_get_buffer") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("GstBuffer**" "value") + ) +) + +(define-method get_buffer_index + (of-object "GstTagList") + (c-name "gst_tag_list_get_buffer_index") + (return-type "gboolean") + (parameters + '("const-gchar*" "tag") + '("guint" "index") + '("GstBuffer**" "value") + ) +) + +;; From ../gstreamer/gst/gsttaginterface.h + +(define-function tag_setter_get_type + (c-name "gst_tag_setter_get_type") + (return-type "GType") +) + +(define-method reset_tags + (of-object "GstTagSetter") + (c-name "gst_tag_setter_reset_tags") + (return-type "none") +) + +(define-method merge_tags + (of-object "GstTagSetter") + (c-name "gst_tag_setter_merge_tags") + (return-type "none") + (parameters + '("const-GstTagList*" "list") + '("GstTagMergeMode" "mode") + ) +) + +(define-method add_tags + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tags") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + ) + (varargs #t) +) + +(define-method add_tag_values + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tag_values") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + ) + (varargs #t) +) + +(define-method add_tag_valist + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tag_valist") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("va_list" "var_args") + ) +) + +(define-method add_tag_valist_values + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tag_valist_values") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("va_list" "var_args") + ) +) + +(define-method add_tag_value + (of-object "GstTagSetter") + (c-name "gst_tag_setter_add_tag_value") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + '("const-gchar*" "tag") + '("const-GValue*" "value") + ) +) + +(define-method get_tag_list + (of-object "GstTagSetter") + (c-name "gst_tag_setter_get_tag_list") + (return-type "const-GstTagList*") +) + +(define-method set_tag_merge_mode + (of-object "GstTagSetter") + (c-name "gst_tag_setter_set_tag_merge_mode") + (return-type "none") + (parameters + '("GstTagMergeMode" "mode") + ) +) + +(define-method get_tag_merge_mode + (of-object "GstTagSetter") + (c-name "gst_tag_setter_get_tag_merge_mode") + (return-type "GstTagMergeMode") +) + + + +;; From ../gstreamer/gst/gsttask.h + +(define-function task_get_type + (c-name "gst_task_get_type") + (return-type "GType") +) + +(define-function task_create + (c-name "gst_task_create") + (return-type "GstTask*") + (parameters + '("GstTaskFunction" "func") + '("gpointer" "data") + ) +) + +(define-method set_lock + (of-object "GstTask") + (c-name "gst_task_set_lock") + (return-type "none") + (parameters + '("GStaticRecMutex*" "mutex") + ) +) + +(define-method set_priority + (of-object "GstTask") + (c-name "gst_task_set_priority") + (return-type "none") + (parameters + '("GThreadPriority" "priority") + ) +) + +(define-method get_pool + (of-object "GstTask") + (c-name "gst_task_get_pool") + (return-type "GstTaskPool*") +) + +(define-method set_pool + (of-object "GstTask") + (c-name "gst_task_set_pool") + (return-type "none") + (parameters + '("GstTaskPool*" "pool") + ) +) + +(define-method set_thread_callbacks + (of-object "GstTask") + (c-name "gst_task_set_thread_callbacks") + (return-type "none") + (parameters + '("GstTaskThreadCallbacks*" "callbacks") + '("gpointer" "user_data") + '("GDestroyNotify" "notify") + ) +) + +(define-method get_state + (of-object "GstTask") + (c-name "gst_task_get_state") + (return-type "GstTaskState") +) + +(define-method set_state + (of-object "GstTask") + (c-name "gst_task_set_state") + (return-type "gboolean") + (parameters + '("GstTaskState" "state") + ) +) + +(define-method start + (of-object "GstTask") + (c-name "gst_task_start") + (return-type "gboolean") +) + +(define-method stop + (of-object "GstTask") + (c-name "gst_task_stop") + (return-type "gboolean") +) + +(define-method pause + (of-object "GstTask") + (c-name "gst_task_pause") + (return-type "gboolean") +) + +;; From gsttaskpool.h + +(define-function gst_task_pool_get_type + (c-name "gst_task_pool_get_type") + (return-type "GType") +) + +(define-function gst_task_pool_new + (c-name "gst_task_pool_new") + (is-constructor-of "GstTaskPool") + (return-type "GstTaskPool*") +) + +(define-method prepare + (of-object "GstTaskPool") + (c-name "gst_task_pool_prepare") + (return-type "none") + (parameters + '("GError**" "error") + ) +) + +(define-method push + (of-object "GstTaskPool") + (c-name "gst_task_pool_push") + (return-type "gpointer") + (parameters + '("GstTaskPoolFunction" "func") + '("gpointer" "user_data") + '("GError**" "error") + ) +) + +(define-method join + (of-object "GstTaskPool") + (c-name "gst_task_pool_join") + (return-type "none") + (parameters + '("gpointer" "id") + ) +) + +(define-method cleanup + (of-object "GstTaskPool") + (c-name "gst_task_pool_cleanup") + (return-type "none") +) + +;; From ../gstreamer/gst/gsttrace.h + +(define-function trace_new + (c-name "gst_trace_new") + (is-constructor-of "GstTrace") + (return-type "GstTrace*") + (parameters + '("gchar*" "filename") + '("gint" "size") + ) +) + +(define-method destroy + (of-object "GstTrace") + (c-name "gst_trace_destroy") + (return-type "none") +) + +(define-method flush + (of-object "GstTrace") + (c-name "gst_trace_flush") + (return-type "none") +) + +(define-method text_flush + (of-object "GstTrace") + (c-name "gst_trace_text_flush") + (return-type "none") +) + +(define-method set_default + (of-object "GstTrace") + (c-name "gst_trace_set_default") + (return-type "none") +) + +(define-function trace_read_tsc + (c-name "gst_trace_read_tsc") + (return-type "none") + (parameters + '("gint64*" "dst") + ) +) + +(define-function alloc_trace_available + (c-name "gst_alloc_trace_available") + (return-type "gboolean") +) + +(define-function alloc_trace_list + (c-name "gst_alloc_trace_list") + (return-type "const-GList*") +) + +(define-function alloc_trace_live_all + (c-name "gst_alloc_trace_live_all") + (return-type "int") +) + +(define-function alloc_trace_print_all + (c-name "gst_alloc_trace_print_all") + (return-type "none") +) + +(define-function alloc_trace_print_live + (c-name "gst_alloc_trace_print_live") + (return-type "none") +) + +(define-function alloc_trace_set_flags_all + (c-name "gst_alloc_trace_set_flags_all") + (return-type "none") + (parameters + '("GstAllocTraceFlags" "flags") + ) +) + +(define-function alloc_trace_get + (c-name "gst_alloc_trace_get") + (return-type "GstAllocTrace*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method print + (of-object "GstAllocTrace") + (c-name "gst_alloc_trace_print") + (return-type "none") +) + +(define-method set_flags + (of-object "GstAllocTrace") + (c-name "gst_alloc_trace_set_flags") + (return-type "none") + (parameters + '("GstAllocTraceFlags" "flags") + ) +) + + + +;; From ../gstreamer/gst/gsttypefind.h + +(define-function type_find_new + (c-name "gst_type_find_new") + (return-type "GstTypeFind*") +) + +(define-method peek + (of-object "GstTypeFind") + (c-name "gst_type_find_peek") + (return-type "guint8*") + (parameters + '("gint64" "offset") + '("guint" "size") + ) +) + +(define-method suggest + (of-object "GstTypeFind") + (c-name "gst_type_find_suggest") + (return-type "none") + (parameters + '("guint" "probability") + '("const-GstCaps*" "caps") + ) +) + +(define-method suggest_simple + (of-object "GstTypeFind") + (c-name "gst_type_find_suggest_simple") + (return-type "none") + (parameters + '("guint" "probability") + '("const-char*" "media_type") + '("const-char*" "fieldname") + ) + (varargs #t) +) + +(define-method get_length + (of-object "GstTypeFind") + (c-name "gst_type_find_get_length") + (return-type "guint64") +) + +(define-function type_find_register + (c-name "gst_type_find_register") + (return-type "gboolean") + (parameters + '("GstPlugin*" "plugin") + '("const-gchar*" "name") + '("guint" "rank") + '("GstTypeFindFunction" "func") + '("gchar**" "extensions") + '("const-GstCaps*" "possible_caps") + '("gpointer" "data") + '("GDestroyNotify" "data_notify") + ) +) + +(define-function type_find_factory_get_type + (c-name "gst_type_find_factory_get_type") + (return-type "GType") +) + +(define-function type_find_factory_get_list + (c-name "gst_type_find_factory_get_list") + (return-type "GList*") +) + +(define-method get_extensions + (of-object "GstTypeFindFactory") + (c-name "gst_type_find_factory_get_extensions") + (return-type "GStrv") +) + +(define-method get_caps + (of-object "GstTypeFindFactory") + (c-name "gst_type_find_factory_get_caps") + (return-type "GstCaps*") +) + +(define-method call_function + (of-object "GstTypeFindFactory") + (c-name "gst_type_find_factory_call_function") + (return-type "none") + (parameters + '("GstTypeFind*" "find") + ) +) + + +;; From ../gstreamer/gst/gsturi.h + +(define-function uri_protocol_is_valid + (c-name "gst_uri_protocol_is_valid") + (return-type "gboolean") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function uri_protocol_is_supported + (c-name "gst_uri_protocol_is_supported") + (return-type "gboolean") + (parameters + '("GstURIType" "type") + '("const-gchar*" "protocol") + ) +) + +(define-function uri_is_valid + (c-name "gst_uri_is_valid") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-function uri_get_protocol + (c-name "gst_uri_get_protocol") + (return-type "gchar*") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-function uri_has_protocol + (c-name "gst_uri_has_protocol") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + '("const-gchar*" "protocol") + ) +) + +(define-function uri_get_location + (c-name "gst_uri_get_location") + (return-type "gchar*") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-function uri_construct + (c-name "gst_uri_construct") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + '("const-gchar*" "location") + ) +) + +(define-function element_make_from_uri + (c-name "gst_element_make_from_uri") + (return-type "GstElement*") + (parameters + '("GstURIType" "type") + '("const-gchar*" "uri") + '("const-gchar*" "elementname" (null-ok) (default "NULL")) + ) +) + +(define-function uri_handler_get_type + (c-name "gst_uri_handler_get_type") + (return-type "GType") +) + +(define-method get_uri_type + (of-object "GstURIHandler") + (c-name "gst_uri_handler_get_uri_type") + (return-type "GstURIType") +) + +(define-method get_protocols + (of-object "GstURIHandler") + (c-name "gst_uri_handler_get_protocols") + (return-type "GStrv") +) + +(define-method get_uri + (of-object "GstURIHandler") + (c-name "gst_uri_handler_get_uri") + (return-type "const-gchar*") +) + +(define-method set_uri + (of-object "GstURIHandler") + (c-name "gst_uri_handler_set_uri") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-method new_uri + (of-object "GstURIHandler") + (c-name "gst_uri_handler_new_uri") + (return-type "none") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-virtual get_type_full + (of-object "GstURIHandler") + (parameters + '("GType" "type") + ) + (return-type "guint") +) + +(define-virtual get_protocols_full + (of-object "GstURIHandler") + (parameters + '("GType" "type") + ) + (return-type "GStrv") +) + +(define-virtual get_uri + (of-object "GstURIHandler") + (return-type "const-gchar*") +) + +(define-virtual set_uri + (of-object "GstURIHandler") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + ) +) + +;; From ../gstreamer/gst/gstutils.h + +(define-function util_set_value_from_string + (c-name "gst_util_set_value_from_string") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-gchar*" "value_str") + ) +) + +(define-function util_set_object_arg + (c-name "gst_util_set_object_arg") + (return-type "none") + (parameters + '("GObject*" "object") + '("const-gchar*" "name") + '("const-gchar*" "value") + ) +) + +(define-function util_dump_mem + (c-name "gst_util_dump_mem") + (return-type "none") + (parameters + '("const-guchar*" "mem") + '("guint" "size") + ) +) + +(define-function util_gdouble_to_guint64 + (c-name "gst_util_gdouble_to_guint64") + (return-type "guint64") + (parameters + '("gdouble" "value") + ) +) + +(define-function util_guint64_to_gdouble + (c-name "gst_util_guint64_to_gdouble") + (return-type "gdouble") + (parameters + '("guint64" "value") + ) +) + +(define-function util_uint64_scale + (c-name "gst_util_uint64_scale") + (return-type "guint64") + (parameters + '("guint64" "val") + '("guint64" "num") + '("guint64" "denom") + ) +) + +(define-function util_uint64_scale_round + (c-name "gst_util_uint64_scale_round") + (return-type "guint64") + (parameters + '("guint64" "val") + '("guint64" "num") + '("guint64" "denom") + ) +) + +(define-function util_uint64_scale_ceil + (c-name "gst_util_uint64_scale_ceil") + (return-type "guint64") + (parameters + '("guint64" "val") + '("guint64" "num") + '("guint64" "denom") + ) +) + +(define-function util_uint64_scale_int + (c-name "gst_util_uint64_scale_int") + (return-type "guint64") + (parameters + '("guint64" "val") + '("gint" "num") + '("gint" "denom") + ) +) + +(define-function util_uint64_scale_int_round + (c-name "gst_util_uint64_scale_int_round") + (return-type "guint64") + (parameters + '("guint64" "val") + '("gint" "num") + '("gint" "denom") + ) +) + +(define-function util_uint64_scale_int_ceil + (c-name "gst_util_uint64_scale_int_ceil") + (return-type "guint64") + (parameters + '("guint64" "val") + '("gint" "num") + '("gint" "denom") + ) +) + +(define-function util_seqnum_next + (c-name "gst_util_seqnum_next") + (return-type "guint32") +) + +(define-function util_seqnum_compare + (c-name "gst_util_seqnum_compare") + (return-type "gint32") + (parameters + '("guint32" "s1") + '("guint32" "s2") + ) +) + +(define-function print_pad_caps + (c-name "gst_print_pad_caps") + (return-type "none") + (parameters + '("GString*" "buf") + '("gint" "indent") + '("GstPad*" "pad") + ) +) + +(define-function print_element_args + (c-name "gst_print_element_args") + (return-type "none") + (parameters + '("GString*" "buf") + '("gint" "indent") + '("GstElement*" "element") + ) +) + +(define-method default_error + (of-object "GstObject") + (c-name "gst_object_default_error") + (return-type "none") + (parameters + '("GError*" "error") + '("gchar*" "debug") + ) +) + +(define-method create_all_pads + (of-object "GstElement") + (c-name "gst_element_create_all_pads") + (return-type "none") +) + +(define-method get_compatible_pad + (of-object "GstElement") + (c-name "gst_element_get_compatible_pad") + (return-type "GstPad*") + (parameters + '("GstPad*" "pad") + '("const-GstCaps*" "caps" (null-ok) (default "NULL")) + ) +) + +(define-method get_compatible_pad_template + (of-object "GstElement") + (c-name "gst_element_get_compatible_pad_template") + (return-type "GstPadTemplate*") + (parameters + '("GstPadTemplate*" "compattempl") + ) +) + +(define-method get_name + (of-object "GstState") + (c-name "gst_element_state_get_name") + (return-type "const-gchar*") +) + +(define-function element_state_get_name + (c-name "gst_element_state_get_name") + (parameters + '("GstState" "state") + ) + (return-type "const-gchar*") +) + +(define-function state_change_return_get_name + (c-name "gst_element_state_change_return_get_name") + (return-type "const-gchar*") + (parameters + '("GstStateChangeReturn" "state_ret") + ) +) + +(define-method link + (of-object "GstElement") + (c-name "gst_element_link") + (return-type "gboolean") + (parameters + '("GstElement*" "dest") + ) +) + +(define-function element_link_many + (c-name "gst_element_link_many") + (return-type "gboolean") + (parameters + '("GstElement*" "element_1") + '("GstElement*" "element_2") + ) + (varargs #t) +) + +(define-method unlink + (of-object "GstElement") + (c-name "gst_element_unlink") + (return-type "none") + (parameters + '("GstElement*" "dest") + ) +) + +(define-method link_filtered + (of-object "GstElement") + (c-name "gst_element_link_filtered") + (return-type "gboolean") + (parameters + '("GstElement*" "dest") + '("GstCaps*" "filter") + ) +) + +(define-function element_unlink_many + (c-name "gst_element_unlink_many") + (return-type "none") + (parameters + '("GstElement*" "element_1") + '("GstElement*" "element_2") + ) + (varargs #t) +) + +(define-method link_pads + (of-object "GstElement") + (c-name "gst_element_link_pads") + (return-type "gboolean") + (parameters + '("const-gchar*" "srcpadname") + '("GstElement*" "dest") + '("const-gchar*" "destpadname") + ) +) + +(define-method link_pads_full + (of-object "GstElement") + (c-name "gst_element_link_pads_full") + (return-type "gboolean") + (parameters + '("const-gchar*" "srcpadname") + '("GstElement*" "dest") + '("const-gchar*" "destpadname") + '("GstPadLinkCheck" "flags") + ) +) + +(define-method unlink_pads + (of-object "GstElement") + (c-name "gst_element_unlink_pads") + (return-type "none") + (parameters + '("const-gchar*" "srcpadname") + '("GstElement*" "dest") + '("const-gchar*" "destpadname") + ) +) + +(define-method link_pads_filtered + (of-object "GstElement") + (c-name "gst_element_link_pads_filtered") + (return-type "gboolean") + (parameters + '("const-gchar*" "srcpadname") + '("GstElement*" "dest") + '("const-gchar*" "destpadname") + '("GstCaps*" "filter") + ) +) + +(define-method seek_simple + (of-object "GstElement") + (c-name "gst_element_seek_simple") + (return-type "gboolean") + (parameters + '("GstFormat" "format") + '("GstSeekFlags" "seek_flags") + '("gint64" "seek_pos") + ) +) + +(define-method can_src_caps + (of-object "GstElementFactory") + (c-name "gst_element_factory_can_src_caps") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps") + ) +) + +(define-method can_sink_caps + (of-object "GstElementFactory") + (c-name "gst_element_factory_can_sink_caps") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps") + ) +) + + +(define-method query_position + (of-object "GstElement") + (c-name "gst_element_query_position") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "cur") + ) +) + +(define-method query_duration + (of-object "GstElement") + (c-name "gst_element_query_duration") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-method query_convert + (of-object "GstElement") + (c-name "gst_element_query_convert") + (return-type "gboolean") + (parameters + '("GstFormat" "src_format") + '("gint64" "src_val") + '("GstFormat*" "dest_fmt") + '("gint64*" "dest_val") + ) +) + +(define-method install_std_props + (of-object "GstElementClass") + (c-name "gst_element_class_install_std_props") + (return-type "none") + (parameters + '("const-gchar*" "first_name") + ) + (varargs #t) +) + +(define-method can_link + (of-object "GstPad") + (c-name "gst_pad_can_link") + (return-type "gboolean") + (parameters + '("GstPad*" "sinkpad") + ) +) + +(define-method use_fixed_caps + (of-object "GstPad") + (c-name "gst_pad_use_fixed_caps") + (return-type "none") +) + +(define-method get_fixed_caps_func + (of-object "GstPad") + (c-name "gst_pad_get_fixed_caps_func") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method proxy_getcaps + (of-object "GstPad") + (c-name "gst_pad_proxy_getcaps") + (return-type "GstCaps*") + (caller-owns-return #t) +) + +(define-method proxy_setcaps + (of-object "GstPad") + (c-name "gst_pad_proxy_setcaps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method get_parent_element + (of-object "GstPad") + (c-name "gst_pad_get_parent_element") + (return-type "GstElement*") + (caller-owns-return #t) +) + +(define-method query_position + (of-object "GstPad") + (c-name "gst_pad_query_position") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "cur") + ) +) + +(define-method query_duration + (of-object "GstPad") + (c-name "gst_pad_query_duration") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-method query_convert + (of-object "GstPad") + (c-name "gst_pad_query_convert") + (return-type "gboolean") + (parameters + '("GstFormat" "src_format") + '("gint64" "src_val") + '("GstFormat*" "dest_fmt") + '("gint64*" "dest_val") + ) +) + +(define-method query_peer_position + (of-object "GstPad") + (c-name "gst_pad_query_peer_position") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "cur") + ) +) + +(define-method query_peer_duration + (of-object "GstPad") + (c-name "gst_pad_query_peer_duration") + (return-type "gboolean") + (parameters + '("GstFormat*" "format") + '("gint64*" "duration") + ) +) + +(define-method query_peer_convert + (of-object "GstPad") + (c-name "gst_pad_query_peer_convert") + (return-type "gboolean") + (parameters + '("GstFormat" "src_format") + '("gint64" "src_val") + '("GstFormat*" "dest_format") + '("gint64*" "dest_val") + ) +) + +(define-method remove_many + (of-object "GstBin") + (c-name "gst_bin_remove_many") + (return-type "none") + (parameters + '("GstElement*" "element_1") + ) + (varargs #t) +) + +(define-method find_unlinked_pad + (of-object "GstBin") + (c-name "gst_bin_find_unlinked_pad") + (return-type "GstPad*") + (parameters + '("GstPadDirection" "direction") + ) +) + +(define-method find_unconnected_pad + (of-object "GstBin") + (c-name "gst_bin_find_unconnected_pad") + (return-type "GstPad*") + (parameters + '("GstPadDirection" "direction") + ) +) + +(define-method merge + (of-object "GstBuffer") + (c-name "gst_buffer_merge") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("GstBuffer*" "buf2") + ) +) + +(define-method join + (of-object "GstBuffer") + (c-name "gst_buffer_join") + (return-type "GstBuffer*") + (caller-owns-return #t) + (parameters + '("GstBuffer*" "buf2") + ) +) + +(define-method stamp + (of-object "GstBuffer") + (c-name "gst_buffer_stamp") + (return-type "none") + (parameters + '("const-GstBuffer*" "src") + ) +) + +(define-function atomic_int_set + (c-name "gst_atomic_int_set") + (return-type "none") + (parameters + '("gint*" "atomic_int") + '("gint" "value") + ) +) + +(define-function TIME_ARGS + (c-name "GST_TIME_ARGS") + (return-type "gchar*") + (parameters + '("GstClockTime" "time") + ) +) + +;; From ../gstreamer/gst/gstvalue.h + +(define-function value_register + (c-name "gst_value_register") + (return-type "none") + (parameters + '("const-GstValueTable*" "table") + ) +) + +(define-function value_init_and_copy + (c-name "gst_value_init_and_copy") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "src") + ) +) + +(define-function value_serialize + (c-name "gst_value_serialize") + (return-type "gchar*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_deserialize + (c-name "gst_value_deserialize") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-gchar*" "src") + ) +) + +(define-function value_list_append_value + (c-name "gst_value_list_append_value") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "append_value") + ) +) + +(define-function value_list_prepend_value + (c-name "gst_value_list_prepend_value") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "prepend_value") + ) +) + +(define-function value_list_concat + (c-name "gst_value_list_concat") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_list_merge + (c-name "gst_value_list_merge") + (return-type "none") + (parameters + '("GValue*" "dest") + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_list_get_size + (c-name "gst_value_list_get_size") + (return-type "guint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_list_get_value + (c-name "gst_value_list_get_value") + (return-type "const-GValue*") + (parameters + '("const-GValue*" "value") + '("guint" "index") + ) +) + +(define-function value_array_append_value + (c-name "gst_value_array_append_value") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "append_value") + ) +) + +(define-function value_array_prepend_value + (c-name "gst_value_array_prepend_value") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "prepend_value") + ) +) + +(define-function value_array_get_size + (c-name "gst_value_array_get_size") + (return-type "guint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_array_get_value + (c-name "gst_value_array_get_value") + (return-type "const-GValue*") + (parameters + '("const-GValue*" "value") + '("guint" "index") + ) +) + +(define-function value_set_fourcc + (c-name "gst_value_set_fourcc") + (return-type "none") + (parameters + '("GValue*" "value") + '("guint32" "fourcc") + ) +) + +(define-function value_get_fourcc + (c-name "gst_value_get_fourcc") + (return-type "guint32") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_int_range + (c-name "gst_value_set_int_range") + (return-type "none") + (parameters + '("GValue*" "value") + '("gint" "start") + '("gint" "end") + ) +) + +(define-function value_get_int_range_min + (c-name "gst_value_get_int_range_min") + (return-type "gint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_int_range_max + (c-name "gst_value_get_int_range_max") + (return-type "gint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_int64_range + (c-name "gst_value_set_int64_range") + (return-type "none") + (parameters + '("GValue*" "value") + '("gint64" "start") + '("gint64" "end") + ) +) + +(define-function value_get_int64_range_min + (c-name "gst_value_get_int64_range_min") + (return-type "gint64") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_int64_range_max + (c-name "gst_value_get_int64_range_max") + (return-type "gint64") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_double_range + (c-name "gst_value_set_double_range") + (return-type "none") + (parameters + '("GValue*" "value") + '("gdouble" "start") + '("gdouble" "end") + ) +) + +(define-function value_get_double_range_min + (c-name "gst_value_get_double_range_min") + (return-type "gdouble") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_double_range_max + (c-name "gst_value_get_double_range_max") + (return-type "gdouble") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_caps + (c-name "gst_value_get_caps") + (return-type "const-GstCaps*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_caps + (c-name "gst_value_set_caps") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GstCaps*" "caps") + ) +) + +(define-function value_set_fraction + (c-name "gst_value_set_fraction") + (return-type "none") + (parameters + '("GValue*" "value") + '("gint" "numerator") + '("gint" "denominator") + ) +) + +(define-function value_get_fraction_numerator + (c-name "gst_value_get_fraction_numerator") + (return-type "gint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_fraction_denominator + (c-name "gst_value_get_fraction_denominator") + (return-type "gint") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_fraction_multiply + (c-name "gst_value_fraction_multiply") + (return-type "gboolean") + (parameters + '("GValue*" "product") + '("const-GValue*" "factor1") + '("const-GValue*" "factor2") + ) +) + +(define-function gst_value_fraction_subtract + (c-name "gst_value_fraction_subtract") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GValue*" "minuend") + '("const-GValue*" "subtrahend") + ) +) + +(define-function gst_value_set_fraction_range + (c-name "gst_value_set_fraction_range") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GValue*" "start") + '("const-GValue*" "end") + ) +) + +(define-function gst_value_set_fraction_range_full + (c-name "gst_value_set_fraction_range_full") + (return-type "none") + (parameters + '("GValue*" "value") + '("gint" "numerator_start") + '("gint" "denominator_start") + '("gint" "numerator_end") + '("gint" "denominator_end") + ) +) + +(define-function gst_value_get_fraction_range_min + (c-name "gst_value_get_fraction_range_min") + (return-type "const-GValue*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function gst_value_get_fraction_range_max + (c-name "gst_value_get_fraction_range_max") + (return-type "const-GValue*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_get_date + (c-name "gst_value_get_date") + (return-type "const-GDate*") + (parameters + '("const-GValue*" "value") + ) +) + +(define-function value_set_date + (c-name "gst_value_set_date") + (return-type "none") + (parameters + '("GValue*" "value") + '("const-GDate*" "date") + ) +) + +(define-function value_compare + (c-name "gst_value_compare") + (return-type "gint") + (parameters + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_can_compare + (c-name "gst_value_can_compare") + (return-type "gboolean") + (parameters + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_union + (c-name "gst_value_union") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_can_union + (c-name "gst_value_can_union") + (return-type "gboolean") + (parameters + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_register_union_func + (c-name "gst_value_register_union_func") + (return-type "none") + (parameters + '("GType" "type1") + '("GType" "type2") + '("GstValueUnionFunc" "func") + ) +) + +(define-function value_intersect + (c-name "gst_value_intersect") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_can_intersect + (c-name "gst_value_can_intersect") + (return-type "gboolean") + (parameters + '("const-GValue*" "value1") + '("const-GValue*" "value2") + ) +) + +(define-function value_register_intersect_func + (c-name "gst_value_register_intersect_func") + (return-type "none") + (parameters + '("GType" "type1") + '("GType" "type2") + '("GstValueIntersectFunc" "func") + ) +) + +(define-function value_subtract + (c-name "gst_value_subtract") + (return-type "gboolean") + (parameters + '("GValue*" "dest") + '("const-GValue*" "minuend") + '("const-GValue*" "subtrahend") + ) +) + +(define-function value_can_subtract + (c-name "gst_value_can_subtract") + (return-type "gboolean") + (parameters + '("const-GValue*" "minuend") + '("const-GValue*" "subtrahend") + ) +) + +(define-function value_register_subtract_func + (c-name "gst_value_register_subtract_func") + (return-type "none") + (parameters + '("GType" "minuend_type") + '("GType" "subtrahend_type") + '("GstValueSubtractFunc" "func") + ) +) + +(define-function value_is_fixed + (c-name "gst_value_is_fixed") + (return-type "gboolean") + (parameters + '("const-GValue*" "value") + ) +) + + +;; From ../gstreamer/gst/gstxml.h + +(define-function xml_get_type + (c-name "gst_xml_get_type") + (return-type "GType") +) + +(define-function xml_write + (c-name "gst_xml_write") + (return-type "xmlDocPtr") + (parameters + '("GstElement*" "element") + ) +) + +(define-function xml_write_file + (c-name "gst_xml_write_file") + (return-type "gint") + (parameters + '("GstElement*" "element") + '("FILE*" "out") + ) +) + +(define-function xml_new + (c-name "gst_xml_new") + (is-constructor-of "GstXML") + (return-type "GstXML*") +) + +(define-method parse_doc + (of-object "GstXML") + (c-name "gst_xml_parse_doc") + (return-type "gboolean") + (parameters + '("xmlDocPtr" "doc") + '("const-guchar*" "root") + ) +) + +(define-method parse_file + (of-object "GstXML") + (c-name "gst_xml_parse_file") + (return-type "gboolean") + (parameters + '("const-guchar*" "fname") + '("const-guchar*" "root") + ) +) + +(define-method parse_memory + (of-object "GstXML") + (c-name "gst_xml_parse_memory") + (return-type "gboolean") + (parameters + '("guchar*" "buffer") + '("guint" "size") + '("const-gchar*" "root") + ) +) + +(define-method get_element + (of-object "GstXML") + (c-name "gst_xml_get_element") + (return-type "GstElement*") + (parameters + '("const-guchar*" "name") + ) +) + +(define-method get_topelements + (of-object "GstXML") + (c-name "gst_xml_get_topelements") + (return-type "GList*") +) + +(define-function xml_make_element + (c-name "gst_xml_make_element") + (return-type "GstElement*") + (parameters + '("xmlNodePtr" "cur") + '("GstObject*" "parent") + ) +) + + +;; From ../gstreamer/gst/net/gstnetclientclock.h + +(define-function net_client_clock_new + (c-name "gst_net_client_clock_new") + (is-constructor-of "GstNetClientClock") + (return-type "GstClock*") + (parameters + '("gchar*" "name" (null-ok) (default "NULL")) + '("gchar*" "remote_address" (default "127.0.0.1")) + '("gint" "remote_port") + '("GstClockTime" "base_time" (default 0)) + ) +) + + +;; From ../gstreamer/gst/net/gstnettimeprovider.h + +(define-function net_time_provider_new + (c-name "gst_net_time_provider_new") + (is-constructor-of "GstNetTimeProvider") + (return-type "GstNetTimeProvider*") + (parameters + '("GstClock*" "clock") + '("gchar*" "address" (null-ok) (default "NULL")) + '("gint" "port" (default 0)) + ) +) diff --git a/gst/gst.override b/gst/gst.override new file mode 100644 index 0000000..f1ee02e --- /dev/null +++ b/gst/gst.override @@ -0,0 +1,1748 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2002 David I. Lehn + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David I. Lehn + */ +%% +headers +/* define this for all source files that don't run init_pygobject() + * before including pygobject.h */ +#define NO_IMPORT_PYGOBJECT + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "common.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "pygst-private.h" +#include "pygstvalue.h" +#include "pygstminiobject.h" +#include "pygstexception.h" + +/* These headers have been included directly to get around multiple + * GetAttrString calls */ +#include +#include + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +GST_DEBUG_CATEGORY_EXTERN (python_debug); +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* This function checks if a former Python code threw an exception and if + * so, transforms this exception into an error on the given GstElement. + * This allows code run on the element to just raise an exception instead of + * returning GStreamer specific return values. + * The exception is cleared afterwards. + */ +gboolean +_pygst_element_check_error (GstElement *element) +{ + PyObject *type, *value, *traceback, *lineno, *msg, *typemsg; + PyFrameObject *frame; + + if (!PyErr_Occurred()) + return FALSE; + + PyErr_Fetch (&type, &value, &traceback); + if (traceback) { + frame = (PyFrameObject *) PyObject_GetAttrString (traceback, "tb_frame"); + lineno = PyObject_GetAttrString (traceback, "tb_lineno"); + } else { + frame = NULL; + lineno = NULL; + } + msg = PyObject_Str (value); + typemsg = PyObject_Str (type); + if (msg && PyString_Check (msg)) { + gst_element_message_full (element, GST_MESSAGE_ERROR, + GST_LIBRARY_ERROR, + GST_LIBRARY_ERROR_FAILED, + g_strdup (PyString_AsString (msg)), + typemsg ? g_strconcat (PyString_AsString (typemsg), + ": ", PyString_AsString (msg), NULL) + : g_strdup (PyString_AsString (msg)), + frame ? PyString_AsString(frame->f_code->co_filename) : "???", + frame ? PyString_AsString(frame->f_code->co_name) : "???", + lineno ? PyInt_AsLong (lineno) : 0); + } else { + gst_element_message_full (element, GST_MESSAGE_ERROR, + GST_LIBRARY_ERROR, + GST_LIBRARY_ERROR_TOO_LAZY, + NULL, NULL, + frame ? PyString_AsString(frame->f_code->co_filename) : "???", + frame ? PyString_AsString(frame->f_code->co_name) : "???", + lineno ? PyInt_AsLong (lineno) : 0); + } + + PyErr_Clear (); + Py_XDECREF (frame); + Py_XDECREF (lineno); + Py_DECREF (msg); + Py_DECREF (typemsg); + + return TRUE; +} + +PyTypeObject PyGstPadTemplate_Type; +static int +add_templates (gpointer gclass, PyObject *templates) +{ + gint i, len; + PyGObject *templ; + + GST_DEBUG ("Adding templates to gclass %p", gclass); + if (pygobject_check(templates, &PyGstPadTemplate_Type)) { + gst_element_class_add_pad_template (gclass, GST_PAD_TEMPLATE (pygobject_get (templates))); + return 0; + } + + if (!PyTuple_Check(templates)) { + PyErr_SetString(PyExc_TypeError, "__gsttemplates__ attribute neither a tuple nor a GstPadTemplate!"); + return -1; + } + len = PyTuple_Size(templates); + if (len == 0) + return 0; + + for (i = 0; i < len; i++) { + templ = (PyGObject*) PyTuple_GetItem(templates, i); + if (!pygobject_check(templ, &PyGstPadTemplate_Type)) { + PyErr_SetString(PyExc_TypeError, "entries for __gsttemplates__ must be of type GstPadTemplate"); + return -1; + } + } + + for (i = 0; i < len; i++) { + templ = (PyGObject*) PyTuple_GetItem(templates, i); + gst_element_class_add_pad_template (gclass, GST_PAD_TEMPLATE (templ->obj)); + } + return 0; +} + +static int +_pygst_element_set_details (gpointer gclass, PyObject *details) +{ + GstElementDetails gstdetails = { 0, }; + + if (!PyTuple_Check (details)) { + PyErr_SetString(PyExc_TypeError, "__gstdetails__ must be a tuple"); + return -1; + } + if (PyTuple_Size (details) != 4) { + PyErr_SetString(PyExc_TypeError, "__gstdetails__ must contain 4 elements"); + return -1; + } + if (!PyArg_ParseTuple (details, "ssss", &gstdetails.longname, &gstdetails.klass, + &gstdetails.description, &gstdetails.author)) { + PyErr_SetString (PyExc_TypeError, "__gstdetails__ must contain 4 strings"); + return -1; + } + GST_DEBUG ("setting details on gclass %p from __gstdetails__, longname %s", gclass, gstdetails.longname); + gst_element_class_set_details (gclass, &gstdetails); + return 0; +} + +static int +_pygst_element_init (gpointer gclass, PyTypeObject *pyclass) +{ + PyObject *templates, *details; + + GST_DEBUG ("_pygst_element_init for gclass %p", gclass); + templates = PyDict_GetItemString(pyclass->tp_dict, "__gsttemplates__"); + if (templates) { + if (add_templates(gclass, templates) != 0) + return -1; + } else { + PyErr_Clear(); + } + details = PyDict_GetItemString(pyclass->tp_dict, "__gstdetails__"); + if (details) { + if (_pygst_element_set_details (gclass, details) != 0) + return -1; + PyDict_DelItemString(pyclass->tp_dict, "__gstdetails__"); + } else { + PyErr_Clear(); + } + + return 0; +} + +static PyObject * +pygst_debug_log (PyObject *pyobject, PyObject *string, GstDebugLevel level, + gboolean isgstobject) +{ +#ifndef GST_DISABLE_GST_DEBUG + gchar *str; + gchar *function; + gchar *filename; + int lineno; + PyFrameObject *frame; + GObject *object = NULL; + + if (!PyArg_ParseTuple(string, "s:gst.debug_log", &str)) { + PyErr_SetString(PyExc_TypeError, "Need a string!"); + return NULL; + } + + frame = PyEval_GetFrame(); + function = PyString_AsString(frame->f_code->co_name); + filename = g_path_get_basename(PyString_AsString(frame->f_code->co_filename)); + lineno = PyCode_Addr2Line(frame->f_code, frame->f_lasti); + /* gst_debug_log : category, level, file, function, line, object, format, va_list */ + if (isgstobject) + object = G_OBJECT (pygobject_get (pyobject)); + gst_debug_log (python_debug, level, filename, function, lineno, object, "%s", str); + if (filename) + g_free(filename); +#endif + Py_INCREF (Py_None); + return Py_None; +} + +GType +gst_tag_get_tag_type (const gchar * tag) +{ + return gst_tag_get_type (tag); +} + +%% +include + gstbin.override + gstbuffer.override + gstbus.override + gstcaps.override + gstelement.override + gstelementfactory.override + gstevent.override + gstmessage.override + gstobject.override + gstpad.override + gstquery.override + gststructure.override + gsttaglist.override + gstlibs.override + gstbase.override + gstversion.override +%% +init +{ + pyg_register_class_init (GST_TYPE_ELEMENT, _pygst_element_init); + if (!pygst_value_init()) + return; + gst_controller_init(NULL, NULL); +} +%% +modulename gst +%% +import gobject.GObject as PyGObject_Type +%% +ignore-glob + _* + *_copy + *_error_quark + *_free + *_get_type + *_private + *_thyself + *_valist + *_ref + *_unref + *_deinit + gst_class_* + gst_init* + gst_interface_* + gst_value_* + gst_param_spec_* +%% +ignore + gst_alloc_trace_list + gst_alloc_trace_get + gst_error_get_message + gst_parse_launchv + gst_trace_read_tsc + gst_debug_log_default + gst_iterator_new_list + gst_task_set_lock + gst_clock_id_compare_func + gst_print_pad_caps + gst_util_set_value_from_string + gst_print_element_args + gst_atomic_int_set + gst_caps_replace + gst_mini_object_replace + gst_filter_run + gst_flow_to_quark + gst_implements_interface_cast + gst_implements_interface_check + gst_plugin_get_module + gst_object_sink + gst_version +%% +override-slot GstPluginFeature.tp_repr +static PyObject * +_wrap_gst_plugin_feature_tp_repr(PyObject *self) +{ + gchar *repr; + PyObject *ret; + GstPluginFeature *feature = GST_PLUGIN_FEATURE (pygobject_get (self)); + + repr = g_strdup_printf ("<%s %s @ 0x%lx>", + self->ob_type->tp_name, gst_plugin_feature_get_name (feature), + (long) self); + ret = PyString_FromString(repr); + g_free (repr); + return ret; +} +%% +override-slot GstPluginFeature.tp_str +static PyObject * +_wrap_gst_plugin_feature_tp_str(PyObject *self) +{ + gchar *repr; + PyObject *ret; + GstPluginFeature *feature = GST_PLUGIN_FEATURE (pygobject_get (self)); + + repr = g_strdup_printf ("<%s %s (%d)>", + self->ob_type->tp_name, gst_plugin_feature_get_name (feature), + gst_plugin_feature_get_rank (feature)); + ret = PyString_FromString(repr); + g_free (repr); + return ret; +} + +%% +override gst_type_find_factory_get_caps noargs +static PyObject * +_wrap_gst_type_find_factory_get_caps(PyGObject *self) +{ + GstCaps *ret = (GstCaps*)gst_type_find_factory_get_caps(GST_TYPE_FIND_FACTORY(self->obj)); + return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE); +} +%% +override-attr GError.domain +static PyObject * +_wrap_gst_g_error__get_domain(PyGObject *self, void *closure) +{ + return PyString_FromString(g_quark_to_string(((GError*)self->obj)->domain)); +} +%% +override-slot GError.tp_str +static PyObject * +_wrap_gst_g_error_tp_str(PyGObject *self) +{ + GError *error = (GError*)self->obj; + return PyString_FromString(gst_error_get_message (error->domain, + error->code)); +} +%% +override-attr GstDate.day +static PyObject * +_wrap_gst_date__get_day(PyGObject *self, void *closure) +{ + return PyInt_FromLong(g_date_get_day((GDate*)self->obj)); +} + +static int +_wrap_gst_date__set_day(PyGObject *self, PyObject *value, void *closure) +{ + GDate *date = (GDate *) self->obj; + + if (!(PyInt_Check(value))) + return -1; + + g_date_set_day(date, (int) PyInt_AsLong(value)); + return 0; +} +%% +override-attr GstDate.month +static PyObject * +_wrap_gst_date__get_month(PyGObject *self, void *closure) +{ + return PyInt_FromLong(g_date_get_month((GDate*)self->obj)); +} +static int +_wrap_gst_date__set_month(PyGObject *self, PyObject *value, void *closure) +{ + GDate *date = (GDate *) self->obj; + + if (!(PyInt_Check(value))) + return -1; + + g_date_set_month(date, (int) PyInt_AsLong(value)); + return 0; +} +%% +override-attr GstDate.year +static PyObject * +_wrap_gst_date__get_year(PyGObject *self, void *closure) +{ + return PyInt_FromLong(g_date_get_year((GDate*)self->obj)); +} +static int +_wrap_gst_date__set_year(PyGObject *self, PyObject *value, void *closure) +{ + GDate *date = (GDate *) self->obj; + + if (!(PyInt_Check(value))) + return -1; + + g_date_set_year(date, (int) PyInt_AsLong(value)); + return 0; +} +%% +override-slot GstDate.tp_repr +static PyObject * +_wrap_gst_date_tp_repr(PyGObject *self) +{ + GDate *date = (GDate *) self->obj; + + return PyString_FromFormat ("", + g_date_get_day(date), + g_date_get_month(date), + g_date_get_year(date)); +} +%% +override gst_registry_get_path_list +static PyObject * +_wrap_gst_registry_get_path_list (PyGObject *self) +{ + GstRegistry *registry; + GList *l, *paths; + PyObject *list; + gint i; + + registry = GST_REGISTRY (self->obj); + + paths = gst_registry_get_path_list (registry); + + list = PyList_New (g_list_length(paths)); + for (l = paths, i = 0; l; l = l->next, ++i) { + gchar *path = (gchar *) l->data; + PyList_SetItem (list, i, PyString_FromString(path)); + } + g_list_free (paths); + + return list; +} + +%% +override gst_registry_get_plugin_list +static PyObject * +_wrap_gst_registry_get_plugin_list (PyGObject *self) +{ + GstRegistry *registry; + GList *l, *plugins; + PyObject *list; + gint i; + + registry = GST_REGISTRY (self->obj); + + plugins = gst_registry_get_plugin_list (registry); + + list = PyList_New (g_list_length(plugins)); + for (l = plugins, i = 0; l; l = l->next, ++i) { + GstPlugin *plugin = (GstPlugin *) l->data; + PyObject *object = pygobject_new (G_OBJECT (plugin)); + gst_object_unref (plugin); + + PyList_SetItem (list, i, object); + } + g_list_free (plugins); + + return list; +} + +%% +override gst_registry_get_feature_list kwargs +static PyObject * +_wrap_gst_registry_get_feature_list (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", NULL }; + PyObject *py_type = NULL; + GType type; + + GstRegistry *registry; + GList *l, *features; + PyObject *list; + gint i; + + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O:GstRegistry.get_feature_list", kwlist, &py_type)) + return NULL; + if ((type = pyg_type_from_object(py_type)) == 0) + return NULL; + + registry = GST_REGISTRY (self->obj); + + pyg_begin_allow_threads; + features = gst_registry_get_feature_list (registry, type); + pyg_end_allow_threads; + + list = PyList_New (g_list_length(features)); + for (l = features, i = 0; l; l = l->next, ++i) { + GstPluginFeature *feature = (GstPluginFeature *) l->data; + PyList_SetItem (list, i, pygobject_new (G_OBJECT (feature))); + gst_object_unref (feature); + } + g_list_free (features); + + return list; +} + +%% +override gst_registry_get_feature_list_by_plugin kwargs +static PyObject * +_wrap_gst_registry_get_feature_list_by_plugin (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", NULL }; + gchar * name = NULL; + + GstRegistry *registry; + GList *l, *features; + PyObject *list; + gint i; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "s:GstRegistry.get_feature_list_by_plugin", kwlist, &name)) + return NULL; + + registry = GST_REGISTRY (self->obj); + + pyg_begin_allow_threads; + features = gst_registry_get_feature_list_by_plugin (registry, name); + pyg_end_allow_threads; + + list = PyList_New (g_list_length(features)); + for (l = features, i = 0; l; l = l->next, ++i) { + GstPluginFeature *feature = (GstPluginFeature *) l->data; + PyList_SetItem (list, i, pygobject_new (G_OBJECT (feature))); + } + g_list_free (features); + + return list; +} + +%% +new-constructor GST_TYPE_XML +%% +override gst_xml_new noargs + +extern PyObject * libxml_xmlDocPtrWrap(xmlDocPtr doc); +extern PyObject * libxml_xmlNodePtrWrap(xmlNodePtr node); + +/* libxml2 available check */ +static PyObject * +_gst_get_libxml2_module(void) +{ + PyObject *xml = NULL; + + xml = PyImport_ImportModule("libxml2"); + if (!xml) { + PyErr_Clear(); + PyErr_SetString(PyExc_RuntimeError,"libxml2 bindings required"); + return NULL; + } + + return xml; + } + +static int +_wrap_gst_xml_new(PyGObject *self) +{ + PyObject *xml = _gst_get_libxml2_module(); + + if(!xml) + return -1; + + self->obj = (GObject *)gst_xml_new(); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstXML object"); + return -1; + } + + pygobject_register_wrapper((PyObject *)self); + + return 0; +} +%% +override gst_xml_get_topelements noargs +static PyObject * +_wrap_gst_xml_get_topelements(PyGObject *self) +{ + GList *l, *xml_elements; + PyObject *py_list; + gint i; + + xml_elements = gst_xml_get_topelements(GST_XML(self->obj)); + py_list = PyList_New(g_list_length(xml_elements)); + for (l = xml_elements, i = 0; l; l = l->next, ++i) { + GstElement *element = (GstElement*)l->data; + PyList_SetItem(py_list, i, pygobject_new(G_OBJECT(element))); + } + + return py_list; +} +%% +override gst_xml_parse_memory kwargs +static PyObject * +_wrap_gst_xml_parse_memory(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "buffer", "root", NULL }; + int buffer_len, ret; + char *root = NULL; + guchar *buffer; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "s#|s:GstXML.parse_memory", + kwlist, &buffer, &buffer_len, &root)) + return NULL; + + ret = gst_xml_parse_memory(GST_XML(self->obj), + buffer, buffer_len, root); + + return PyBool_FromLong(ret); +} +%% +override gst_tag_setter_get_tag_list noargs +static PyObject * +_wrap_gst_tag_setter_get_tag_list(PyGObject *self) +{ + GstTagList *ret; + + ret = (GstTagList*)gst_tag_setter_get_tag_list(GST_TAG_SETTER(self->obj)); + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_TAG_LIST, ret, TRUE, TRUE); +} +%% +override gst_element_register kwargs + +static GstPlugin * +_pygst_get_plugin(void) +{ + PyObject *dict = NULL, *module = NULL, *pyplugin = NULL; + GstPlugin *ret; + + if (!(module = PyImport_ImportModule ("gst"))) + goto err; + if (!(dict = PyModule_GetDict (module))) + goto err; + if (!(pyplugin = PyDict_GetItemString (dict, "__plugin__"))) + goto err; + ret = pyg_boxed_get (pyplugin, GstPlugin); + + Py_DECREF (module); + return ret; + +err: + Py_XDECREF (module); + PyErr_Clear (); + return NULL; +} + +static PyObject * +_wrap_gst_element_register(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", "elementname", "rank", NULL }; + PyObject *py_type = NULL; + guint rank = GST_RANK_NONE; + char *elementname = NULL; + int ret; + GType type; + + /* FIXME: can we make the name optional, too? Anyone know a good default? */ + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Os|I:element_register", kwlist, + &py_type, &elementname, &rank)) + return NULL; + if ((type = pyg_type_from_object(py_type)) == 0) + return NULL; + + ret = gst_element_register(_pygst_get_plugin(), elementname, rank, type); + return PyBool_FromLong(ret); +} +%% +override-attr GError.domain +static PyObject * +_wrap_gst_g_error__get_domain(PyGObject *self, void *closure) +{ + return PyString_FromString(g_quark_to_string(((GError*)self->obj)->domain)); +} +%% +override-slot GError.tp_str +static PyObject * +_wrap_gst_g_error_tp_str(PyGObject *self) +{ + GError *error = (GError*)self->obj; + return PyString_FromString(gst_error_get_message (error->domain, + error->code)); +} +%% +override gst_flow_get_name kwargs +static PyObject * +_wrap_gst_flow_get_name(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "ret", NULL }; + PyObject *py_ret = NULL; + const gchar *ret; + GstFlowReturn flow; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:gst_flow_get_name", kwlist, &py_ret)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FLOW_RETURN, py_ret, (gint *)&flow)) + return NULL; + if ((ret = gst_flow_get_name(flow))) { + return PyString_FromString(ret); + } + Py_INCREF(Py_None); + return Py_None; +} + +%% +override gst_debug_log args +static PyObject * +_wrap_gst_debug_log (PyObject *whatever, PyObject *string) +{ +#ifndef GST_DISABLE_GST_DEBUG + gchar *filename; + gchar *func; + gint lineno; + gchar *message; + + PyObject *py_level = NULL; + GstDebugLevel level; + + if (!PyArg_ParseTuple(string, "Ossis:gst.debug_log", &py_level, &filename, &func, &lineno, &message)) { + return NULL; + } + if (pyg_enum_get_value(GST_TYPE_DEBUG_LEVEL, py_level, (gint *)&level)) { + return NULL; + } + + /* gst_debug_log : category, level, file, function, line, object, format, va_list */ + gst_debug_log (python_debug, level, filename, func, lineno, NULL, "%s", message); +#endif + Py_INCREF (Py_None); + return Py_None; +} +%% +override gst_log args +static PyObject * +_wrap_gst_log (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_LOG, FALSE); +} +%% +override gst_debug args +static PyObject * +_wrap_gst_debug (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_DEBUG, FALSE); +} +%% +override gst_info args +static PyObject * +_wrap_gst_info (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_INFO, FALSE); +} +%% +override gst_warning args +static PyObject * +_wrap_gst_warning (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_WARNING, FALSE); +} +%% +override gst_error args +static PyObject * +_wrap_gst_error (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_ERROR, FALSE); +} +%% +override gst_fixme args +static PyObject * +_wrap_gst_fixme (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_FIXME, FALSE); +} +%% +override gst_memdump args +static PyObject * +_wrap_gst_memdump (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_MEMDUMP, FALSE); +} + +%% +override gst_object_log args +static PyObject * +_wrap_gst_object_log (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_LOG, TRUE); +} +%% +override gst_object_debug args +static PyObject * +_wrap_gst_object_debug (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_DEBUG, TRUE); +} +%% +override gst_object_info args +static PyObject * +_wrap_gst_object_info (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_INFO, TRUE); +} +%% +override gst_object_warning args +static PyObject * +_wrap_gst_object_warning (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_WARNING, TRUE); +} +%% +override gst_object_error args +static PyObject * +_wrap_gst_object_error (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_ERROR, TRUE); +} +%% +override gst_object_fixme args +static PyObject * +_wrap_gst_object_fixme (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_FIXME, TRUE); +} +%% +override gst_object_memdump args +static PyObject * +_wrap_gst_object_memdump (PyObject *whatever, PyObject *string) +{ + return pygst_debug_log (whatever, string, GST_LEVEL_MEMDUMP, TRUE); +} +%% +override GST_TIME_ARGS kwargs +static PyObject * +_wrap_GST_TIME_ARGS(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "time", NULL }; + PyObject *py_time = NULL; + PyObject *string; + gchar *ret; + guint64 time; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:time_to_string", kwlist, &py_time)) + return NULL; + time = PyInt_AsUnsignedLongLongMask(py_time); + if (PyErr_Occurred ()) + return NULL; + + if (GST_CLOCK_TIME_IS_VALID (time)) + ret = g_strdup_printf("%"GST_TIME_FORMAT, GST_TIME_ARGS(time)); + else + ret = g_strdup ("CLOCK_TIME_NONE"); + + if (!ret) { + Py_INCREF(Py_None); + return Py_None; + } + + if (!(string = PyString_FromString(ret))) { + g_free(ret); + return NULL; + } + g_free(ret); + return string; +} +%% +override gst_type_find_factory_get_list noargs +static PyObject * +_wrap_gst_type_find_factory_get_list (PyObject *self) +{ + GList *l, *list; + PyObject *py_list; + int i = 0; + + list = gst_type_find_factory_get_list (); + + py_list = PyList_New(g_list_length(list)); + for (l = list; l ; l = g_list_next(l), i++) { + GstTypeFindFactory *fact = (GstTypeFindFactory*) l->data; + + PyList_SetItem(py_list, i, + pygobject_new (G_OBJECT (fact))); + } + g_list_free (list); + + return py_list; +} +%% +override gst_get_gst_version noargs +static PyObject * +_wrap_gst_get_gst_version (PyObject *self) +{ + guint major, minor, micro, nano; + PyObject *py_tuple; + + gst_version (&major, &minor, µ, &nano); + py_tuple = PyTuple_New(4); + PyTuple_SetItem(py_tuple, 0, PyInt_FromLong(major)); + PyTuple_SetItem(py_tuple, 1, PyInt_FromLong(minor)); + PyTuple_SetItem(py_tuple, 2, PyInt_FromLong(micro)); + PyTuple_SetItem(py_tuple, 3, PyInt_FromLong(nano)); + + return py_tuple; +} +%% +override gst_get_pygst_version noargs +static PyObject * +_wrap_gst_get_pygst_version (PyObject *self) +{ + PyObject *py_tuple; + + py_tuple = Py_BuildValue ("(iiii)", PYGST_MAJOR_VERSION, PYGST_MINOR_VERSION, + PYGST_MICRO_VERSION, PYGST_NANO_VERSION); + + return py_tuple; +} +%% +override gst_clock_get_calibration noargs +static PyObject * +_wrap_gst_clock_get_calibration (PyGObject * self) +{ + PyObject *ret; + GstClockTime internal; + GstClockTime external; + GstClockTime rate_num; + GstClockTime rate_denom; + + gst_clock_get_calibration (GST_CLOCK (self->obj), + &internal, + &external, + &rate_num, + &rate_denom); + + ret = PyTuple_New(4); + PyTuple_SetItem(ret, 0, PyLong_FromUnsignedLongLong(internal)); + PyTuple_SetItem(ret, 1, PyLong_FromUnsignedLongLong(external)); + PyTuple_SetItem(ret, 2, PyLong_FromUnsignedLongLong(rate_num)); + PyTuple_SetItem(ret, 3, PyLong_FromUnsignedLongLong(rate_denom)); + + return ret; +} +%% +override gst_clock_add_observation kwargs +static PyObject * +_wrap_gst_clock_add_observation (PyGObject *self, PyObject * args, PyObject * kwargs) +{ + static char *kwlist[] = { "slave", "master", NULL}; + GstClockTime master, slave; + gdouble squared = 1.0; + PyObject *py_ret; + gboolean ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "KK:GstClock.add_observation", + kwlist, &master, &slave)) + return NULL; + + ret = gst_clock_add_observation (GST_CLOCK (self->obj), master, slave, + &squared); + + py_ret = PyList_New(2); + PyList_SetItem(py_ret, 0, PyBool_FromLong(ret)); + PyList_SetItem(py_ret, 1, PyFloat_FromDouble(squared)); + return py_ret; +} + +%% +override gst_type_find_helper_for_buffer kwargs +static PyObject * +_wrap_gst_type_find_helper_for_buffer (PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "object", "buffer", NULL }; + PyGObject *py_object; + PyGstMiniObject *py_buffer; + PyObject *py_ret; + GstTypeFindProbability prob = 0; + GstCaps *caps = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:type_find_helper_for_buffer", + kwlist, &PyGstObject_Type, &py_object, + &PyGstBuffer_Type, &py_buffer)) + return NULL; + + caps = gst_type_find_helper_for_buffer (GST_OBJECT (py_object->obj), + GST_BUFFER (py_buffer->obj), + &prob); + py_ret = PyTuple_New(2); + if (caps) + PyTuple_SetItem(py_ret, 0, pyg_boxed_new (GST_TYPE_CAPS, caps, FALSE, TRUE)); + else { + Py_INCREF(Py_None); + PyTuple_SetItem(py_ret, 0, Py_None); + } + + if (prob) + PyTuple_SetItem(py_ret, 1, pyg_enum_from_gtype(GST_TYPE_TYPE_FIND_PROBABILITY, prob)); + else { + Py_INCREF(Py_None); + PyTuple_SetItem(py_ret, 1, Py_None); + } + + return py_ret; +} +%% +override gst_type_find_new kwargs + +static guint8 * +gst_type_find_peek_handler (gpointer data, gint64 offset, guint size) +{ + PyGILState_STATE state; + guint8 * ret = NULL; + PyObject *py_data; + PyObject *callback, *args; + PyObject *py_ret; + + GST_DEBUG ("mkay"); + + g_return_val_if_fail (data != NULL, NULL); + py_data = (PyObject *) data; + g_assert (PyTuple_Check (py_data)); + + state = pyg_gil_state_ensure (); + + /* Figure out the callback and create the arguments */ + if (!(callback = PyTuple_GetItem(py_data, 1))) + goto beach; + + args = Py_BuildValue ("(OLI)", + PyTuple_GetItem(py_data, 0), + offset, size); + if (!args) + goto beach; + + /* Call python method */ + py_ret = PyObject_CallObject (callback, args); + + /* transform return value (a string) */ + if (!py_ret) { + Py_DECREF (args); + goto beach; + } + if (!PyString_Check(py_ret)) { + Py_DECREF (py_ret); + Py_DECREF (args); + goto beach; + } else { + gchar *str; + Py_ssize_t len; + + if ((PyString_AsStringAndSize(py_ret, &str, &len)) == -1) { + Py_DECREF (py_ret); + Py_DECREF (args); + goto beach; + } + GST_DEBUG ("got string of len %"G_GSSIZE_FORMAT, len); + if (len) + ret = g_memdup((gconstpointer) str, (guint) len); + } + Py_DECREF (py_ret); + Py_DECREF (args); + + beach: + pyg_gil_state_release (state); + return ret; +} + +static void +gst_type_find_suggest_handler (gpointer data, guint probability, const GstCaps * caps) +{ + PyGILState_STATE state; + PyObject *py_data; + PyObject *callback, *args; + + GST_DEBUG ("mkay"); + + if (!data) + return; + py_data = (PyObject *) data; + g_assert (PyTuple_Check (py_data)); + + state = pyg_gil_state_ensure (); + + /* Figure out the callback and create the arguments */ + if (!(callback = PyTuple_GetItem(py_data, 2))) + goto beach; + + args = Py_BuildValue ("(OIN)", + PyTuple_GetItem(py_data, 0), + probability, pyg_boxed_new (GST_TYPE_CAPS, (GstCaps*) caps, TRUE, TRUE)); + if (!args) + goto beach; + + /* Call python method */ + PyObject_CallObject (callback, args); + + Py_DECREF (args); + + beach: + pyg_gil_state_release (state); + return; +} + +static guint64 +gst_type_find_get_length_handler (gpointer data) +{ + guint64 ret = 0; + + /* Call python method */ + return ret; +} + +static PyObject * +_wrap_gst_type_find_new (PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "data", "peekfunction", "suggestfunction", "getlengthfunction", NULL }; + PyObject *py_data; + gpointer data; + PyObject *peekfunction; + PyObject *suggestfunction; + PyObject *getlengthfunction = NULL; + PyObject *pytypefind = NULL; + GstTypeFind *typefind = NULL; + + GST_DEBUG ("poeut"); + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOO|O:type_find_new", + kwlist, &py_data, &peekfunction, + &suggestfunction, &getlengthfunction)) { + PyErr_SetString (PyExc_TypeError, "Error parsing values ..."); + return NULL; + } + + if (!PyCallable_Check(peekfunction)) { + PyErr_SetString (PyExc_TypeError, "peekfunction is not callable"); + return NULL; + } + if (!PyCallable_Check(suggestfunction)) { + PyErr_SetString (PyExc_TypeError, "suggestfunction is not callable"); + return NULL; + } + if (getlengthfunction && (!PyCallable_Check(suggestfunction))) { + PyErr_SetString (PyExc_TypeError, "getlengthfunction is not callable"); + return NULL; + } + + /* Create a python list to put in typefind->data */ + if (getlengthfunction) + data = Py_BuildValue("(OOOO)", py_data, peekfunction, suggestfunction, getlengthfunction); + else + data = Py_BuildValue("(OOO)", py_data, peekfunction, suggestfunction); + + typefind = g_new0(GstTypeFind, 1); + typefind->peek = gst_type_find_peek_handler; + typefind->suggest = gst_type_find_suggest_handler; + typefind->data = data; + if (getlengthfunction) + typefind->get_length = gst_type_find_get_length_handler; + + pytypefind = pyg_pointer_new (GST_TYPE_TYPE_FIND, typefind); + + if (!pytypefind) { + PyErr_SetString (PyExc_TypeError, "pyg_pointer_new failed"); + } + + GST_DEBUG ("poeut : %p", pytypefind); + + return pytypefind; +} + +%% +override gst_type_find_register args + +static void +type_find_function (GstTypeFind *find, gpointer user_data) +{ + PyGILState_STATE state; + PyObject *data; + PyObject *callback, *args, *old_args; + PyObject *typefind; + + state = pyg_gil_state_ensure (); + + typefind = pyg_pointer_new(GST_TYPE_TYPE_FIND, find); + + data = (PyObject *) user_data; + callback = PyTuple_GET_ITEM(data, 0); + args = Py_BuildValue("(O)", typefind); + if (PyTuple_GET_SIZE(data) > 1) { + old_args = args; + args = PySequence_Concat(args, PyTuple_GET_ITEM(data, 1)); + Py_DECREF(old_args); + } + + PyObject_CallObject(callback, args); + + Py_DECREF(args); + Py_DECREF(typefind); + + pyg_gil_state_release (state); + + return; +} + +static void +type_find_function_data_destroy_notify(gpointer data) +{ + Py_DECREF((PyObject *) data); +} + +static PyObject * +_wrap_gst_type_find_register (PyObject *self, PyObject *args) +{ + guint rank; + PyObject *required_args; + PyObject *function; + PyObject *function_args = NULL; + PyObject *py_extensions = NULL, *ext; + PyObject *py_possible_caps = NULL; + PyObject *py_res = NULL; + gchar *name; + gpointer *data = NULL; + GStrv extensions = NULL; + guint i, n_extensions; + GstCaps *possible_caps = NULL; + gboolean res = FALSE; + + if (PyTuple_GET_SIZE(args) > 5) { + required_args = PyTuple_GetSlice(args, 0, 5); + function_args = PyTuple_GetSlice(args, 5, PyTuple_GET_SIZE(args)); + } else { + required_args = args; + } + + if (!PyArg_ParseTuple(required_args, "siO|OO:type_find_register", + &name, &rank, &function, &py_extensions, &py_possible_caps)) { + goto out; + } + + if (!PyCallable_Check(function)) { + PyErr_SetString (PyExc_TypeError, "function is not a callable"); + goto out; + } + + if (py_extensions) { + n_extensions = PySequence_Size(py_extensions); + if (n_extensions == -1) { + goto out; + } + + if (n_extensions > 0) { + extensions = (char **) g_malloc(sizeof(char *) * n_extensions + 1); + for(i = 0; i < n_extensions; ++i) { + ext = PySequence_GetItem(py_extensions, i); + + if (!PyString_Check(ext)) { + PyErr_SetString(PyExc_TypeError, "extension is not a string"); + goto out; + } + + extensions[i] = g_strdup(PyString_AS_STRING(ext)); + } + + extensions[n_extensions] = NULL; + } + } + + if (py_possible_caps) + possible_caps = pygst_caps_from_pyobject(py_possible_caps, NULL); + + if (function_args) + data = (gpointer) Py_BuildValue("(OO)", function, function_args); + else + data = (gpointer) Py_BuildValue("(O)", function); + + pyg_begin_allow_threads; + res = gst_type_find_register(NULL, name, rank, + type_find_function, extensions, possible_caps, + data, type_find_function_data_destroy_notify); + pyg_end_allow_threads; + + py_res = PyBool_FromLong(res); + +out: + if (required_args != args) { + Py_DECREF(required_args); + } + + Py_XDECREF(function_args); + + if (extensions) + g_strfreev(extensions); + + if (possible_caps) + gst_caps_unref(possible_caps); + + if (res == FALSE && data) { + Py_DECREF((PyObject *) data); + } + + return py_res; +} + +%% +override gst_type_find_peek kwargs +static PyObject * +_wrap_gst_type_find_peek (PyObject * self, PyObject * args, PyObject * kwargs) +{ + static char *kwlist[] = { "offset", "size", NULL }; + gint64 offset; + guint size; + GstTypeFind *typefind; + guint8 *data; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"LI:GstTypeFind.peek", + kwlist, &offset, &size)) + return NULL; + + typefind = pyg_pointer_get(self, GstTypeFind); + pyg_begin_allow_threads; + data = gst_type_find_peek(typefind, offset, size); + pyg_end_allow_threads; + + if (data == NULL) + /* return the empty string */ + return PyString_FromStringAndSize(NULL, 0); + + return PyString_FromStringAndSize((char *) data, size); +} + +%% +override gst_segment_set_seek kwargs +static PyObject * +_wrap_gst_segment_set_seek (PyObject * self, PyObject * args, PyObject * kwargs) +{ + static char *kwlist[] = { "rate", "format", "flags", "start_type", "start", + "stop_type", "stop", NULL }; + GstSeekType start_type, stop_type; + PyObject *py_format = NULL, *py_flags = NULL, *py_start_type = NULL; + PyObject *py_stop_type = NULL, *py_ret; + double rate; + GstFormat format; + gint64 start, stop; + GstSeekFlags flags; + gboolean update = FALSE; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"dOOOLOL:GstSegment.set_seek", + kwlist, &rate, &py_format, &py_flags, + &py_start_type, &start, &py_stop_type, + &stop)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FORMAT, py_format, (gint *)&format)) + return NULL; + if (pyg_flags_get_value(GST_TYPE_SEEK_FLAGS, py_flags, (gint *)&flags)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_SEEK_TYPE, py_start_type, (gint *)&start_type)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_SEEK_TYPE, py_stop_type, (gint *)&stop_type)) + return NULL; + pyg_begin_allow_threads; + gst_segment_set_seek(pyg_boxed_get(self, GstSegment), rate, format, flags, + start_type, start, stop_type, stop, &update); + pyg_end_allow_threads; + py_ret = PyBool_FromLong(update); + return py_ret; +} +%% +override gst_segment_clip kwargs +static PyObject * +_wrap_gst_segment_clip (PyObject * self, PyObject * args, PyObject * kwargs) +{ + static char *kwlist[] = { "format", "start", "stop", NULL}; + GstFormat format; + gint64 start, stop; + gint64 cstart = -1; + gint64 cstop = -1; + gboolean ret; + PyObject *py_ret, *py_format; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OLL:GstSegment.clip", + kwlist, &py_format, &start, &stop)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FORMAT, py_format, (gint *)&format)) + return NULL; + pyg_begin_allow_threads; + ret = gst_segment_clip (pyg_boxed_get(self, GstSegment), format, start, stop, + &cstart, &cstop); + pyg_end_allow_threads; + + /* Returns gboolean ret, gint64 clip_start, gint64 clip_stop */ + py_ret = PyList_New(3); + PyList_SetItem(py_ret, 0, PyBool_FromLong(ret)); + PyList_SetItem(py_ret, 1, PyLong_FromLongLong(cstart)); + PyList_SetItem(py_ret, 2, PyLong_FromLongLong(cstop)); + + return py_ret; +} + +%% +override GstURIHandler__proxy_do_get_type_full +static GstURIType +_wrap_GstURIHandler__proxy_do_get_type_full (GType type) +{ + PyGILState_STATE __py_state; + PyTypeObject *py_class; + PyObject *py_method; + PyObject *py_retval; + guint retval; + + __py_state = pyg_gil_state_ensure(); + py_class = pygobject_lookup_class (type); + if (py_class == NULL) { + pyg_gil_state_release (__py_state); + return GST_URI_UNKNOWN; + } + + py_method = PyObject_GetAttrString((PyObject *) py_class, "do_get_type_full"); + Py_DECREF (py_class); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return GST_URI_UNKNOWN; + } + + py_retval = PyObject_CallObject(py_method, NULL); + Py_DECREF (py_method); + if (!py_retval) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return GST_URI_UNKNOWN; + } + + retval = PyLong_AsLong (py_retval); + Py_DECREF(py_retval); + pyg_gil_state_release(__py_state); + + return retval; +} + +%% +override GstURIHandler__proxy_do_get_protocols_full +static gchar ** +_wrap_GstURIHandler__proxy_do_get_protocols_full (GType type) +{ + PyGILState_STATE __py_state; + PyTypeObject *py_class; + PyObject *py_method; + PyObject *py_retval; + Py_ssize_t ret_size, i; + gchar **retval; + + __py_state = pyg_gil_state_ensure(); + py_class = pygobject_lookup_class (type); + if (py_class == NULL) { + pyg_gil_state_release (__py_state); + return NULL; + } + + py_method = PyObject_GetAttrString((PyObject *) py_class, "do_get_protocols_full"); + Py_DECREF (py_class); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return NULL; + } + + py_retval = PyObject_CallObject(py_method, NULL); + Py_DECREF (py_method); + if (!py_retval) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return NULL; + } + + if (!PySequence_Check (py_retval)) { + PyErr_SetString (PyExc_TypeError, "GstURIHandler.do_get_protocols_full " + "must return a sequence of strings"); + Py_DECREF (py_retval); + return NULL; + } + + ret_size = PySequence_Size (py_retval); + if (ret_size == -1) { + Py_DECREF (py_retval); + pyg_gil_state_release(__py_state); + return NULL; + } + + retval = g_new (gchar *, ret_size + 1); + retval[ret_size] = NULL; + for (i = 0; i < PySequence_Size (py_retval); ++i) { + PyObject *item = PySequence_GetItem (py_retval, i); + if (!item) { + if (PyErr_Occurred ()) + PyErr_Print (); + g_strfreev (retval); + Py_DECREF (py_retval); + pyg_gil_state_release(__py_state); + return NULL; + } + + if (!PyString_Check (item)) { + PyErr_SetString (PyExc_TypeError, "GstURIHandler.do_get_protocols_full " + "must return a sequence of strings"); + Py_DECREF (item); + g_strfreev (retval); + Py_DECREF (py_retval); + pyg_gil_state_release(__py_state); + return NULL; + } + + retval [i] = PyString_AsString (item); + if (!retval [i]) { + if (PyErr_Occurred ()) + PyErr_Print (); + g_strfreev (retval); + Py_DECREF (item); + Py_DECREF (py_retval); + pyg_gil_state_release(__py_state); + return NULL; + } + + Py_DECREF (item); + } + + Py_DECREF(py_retval); + pyg_gil_state_release(__py_state); + + return retval; +} +%% +override GstURIHandler__do_get_type_full +static PyObject * +_wrap_GstURIHandler__do_get_type_full(PyObject *cls, PyObject *args, PyObject *kwargs) +{ + GstURIHandlerInterface *iface; + static char *kwlist[] = { "self", "type", NULL }; + PyGObject *self; + PyObject *py_type = NULL; + GType type; + guint ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O:GstURIHandler.get_type_full", kwlist, &PyGstURIHandler_Type, &self, &py_type)) + return NULL; + if ((type = pyg_type_from_object(py_type)) == 0) + return NULL; + iface = g_type_interface_peek(g_type_class_peek(pyg_type_from_object(cls)), GST_TYPE_URI_HANDLER); + if (iface->get_type_full) + ret = iface->get_type_full(type); + else { + PyErr_SetString(PyExc_NotImplementedError, "interface method GstURIHandler.get_type_full not implemented"); + return NULL; + } + return PyLong_FromUnsignedLong(ret); +} +%% +override GstURIHandler__do_get_protocols_full +static PyObject * +_wrap_GstURIHandler__do_get_protocols_full(PyObject *cls, PyObject *args, PyObject *kwargs) +{ + GstURIHandlerInterface *iface; + static char *kwlist[] = { "self", "type", NULL }; + PyGObject *self; + PyObject *py_type = NULL; + GType type; + gchar **ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O:GstURIHandler.get_protocols_full", kwlist, &PyGstURIHandler_Type, &self, &py_type)) + return NULL; + if ((type = pyg_type_from_object(py_type)) == 0) + return NULL; + iface = g_type_interface_peek(g_type_class_peek(pyg_type_from_object(cls)), GST_TYPE_URI_HANDLER); + if (iface->get_protocols_full) + ret = iface->get_protocols_full(type); + else { + PyErr_SetString(PyExc_NotImplementedError, "interface method GstURIHandler.get_protocols_full not implemented"); + return NULL; + } + if (ret) { + guint size = g_strv_length(ret); + PyObject *py_ret = PyTuple_New(size); + gint i; + for (i = 0; i < size; i++) + PyTuple_SetItem(py_ret, i, + PyString_FromString(ret[i])); + return py_ret; + } + return PyTuple_New (0); + +} + +%% +override g_error_new kwargs +static int +_wrap_g_error_new(PyGBoxed *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "domain", "code", "message", NULL }; + int code; + gchar *message; + gchar *domain; + GQuark domainq; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"sis:GError.__init__", kwlist, &domain, &code, &message)) + return -1; + domainq = g_quark_from_string(domain); + + self->gtype = GST_TYPE_G_ERROR; + self->free_on_dealloc = FALSE; + self->boxed = g_error_new(domainq, code, "%s", message); + + if (!self->boxed) { + PyErr_SetString(PyExc_RuntimeError, "could not create GError object"); + return -1; + } + self->free_on_dealloc = TRUE; + return 0; +} +%% +override-attr GstIndexEntry.NASSOCS +static PyObject * +_wrap_gst_index_entry__get_NASSOCS(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_ASSOCIATION) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not an AssociationEntry"); + return NULL; + } + return PyInt_FromLong(GST_INDEX_NASSOCS(entry)); +} +%% +override-attr GstIndexEntry.ASSOC_FLAGS +static PyObject * +_wrap_gst_index_entry__get_ASSOC_FLAGS(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_ASSOCIATION) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not an AssociationEntry"); + return NULL; + } + return pyg_flags_from_gtype(GST_TYPE_ASSOC_FLAGS, + GST_INDEX_ASSOC_FLAGS (entry)); +} +%% +override-attr GstIndexEntry.ID_DESCRIPTION +static PyObject * +_wrap_gst_index_entry__get_ID_DESCRIPTION(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_ID) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not an ID Entry"); + return NULL; + } + if (GST_INDEX_ID_DESCRIPTION (entry)) + return PyString_FromString(GST_INDEX_ID_DESCRIPTION (entry)); + Py_INCREF(Py_None); + return Py_None; +} +%% +override-attr GstIndexEntry.FORMAT_FORMAT +static PyObject * +_wrap_gst_index_entry__get_FORMAT_FORMAT(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_FORMAT) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not a FORMAT Entry"); + return NULL; + } + return pyg_enum_from_gtype (GST_TYPE_FORMAT, GST_INDEX_FORMAT_FORMAT (entry)); +} +%% +override-attr GstIndexEntry.FORMAT_KEY +static PyObject * +_wrap_gst_index_entry__get_FORMAT_KEY(PyObject *self, void *closure) +{ + GstIndexEntry *entry; + + g_assert (self); + entry = (GstIndexEntry*) pyg_boxed_get(self, GstIndexEntry); + g_assert (entry); + + if (entry->type != GST_INDEX_ENTRY_FORMAT) { + PyErr_SetString(PyExc_RuntimeError, "IndexEntry is not a FORMAT Entry"); + return NULL; + } + if (GST_INDEX_FORMAT_KEY (entry)) + return PyString_FromString(GST_INDEX_FORMAT_KEY (entry)); + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstbase.override b/gst/gstbase.override new file mode 100644 index 0000000..a523cd2 --- /dev/null +++ b/gst/gstbase.override @@ -0,0 +1,905 @@ +/* -*- Mode: C; ; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2006 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +%% +override GstBaseSrc__proxy_do_create +static GstFlowReturn +_wrap_GstBaseSrc__proxy_do_create (GstBaseSrc * self, + guint64 offset, + guint size, + GstBuffer ** buf) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + GstFlowReturn retval = GST_FLOW_ERROR; + PyObject *py_ret; + PyObject *py_flow; + PyObject *py_buffer; + PyObject *py_args; + PyObject *py_method; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_args = PyTuple_New(2); + PyTuple_SET_ITEM(py_args, 0, PyLong_FromUnsignedLongLong(offset)); + PyTuple_SET_ITEM(py_args, 1, PyInt_FromLong(size)); + + py_method = PyObject_GetAttrString(py_self, "do_create"); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + /* process the python return value */ + /* Should be a list containing the gst.FlowReturn and the gst.Buffer */ + if (PyTuple_Check(py_ret)) { + /* gst.FlowReturn */ + py_flow = PyTuple_GetItem(py_ret, 0); + + if (!py_flow) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_ret); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + if (py_flow == Py_None) { + GST_ERROR ("None return flow is not valid"); + goto beach; + } + + GST_DEBUG ("py_flow:%p", py_flow); + + if (pyg_enum_get_value(GST_TYPE_FLOW_RETURN, py_flow, (gint*) &retval)) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_ret); + Py_DECREF(py_flow); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + retval = GST_FLOW_ERROR; + goto beach; + } + + py_buffer = PyTuple_GetItem(py_ret, 1); + if (!py_buffer) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_ret); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + if (pygstminiobject_check(py_buffer, &PyGstBuffer_Type)) { + *buf = GST_BUFFER (pygstminiobject_get (py_buffer)); + gst_buffer_ref (*buf); + } else { + *buf = NULL; + } + } + + Py_DECREF(py_ret); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + + beach: + pyg_gil_state_release(__py_state); + + return retval; +} +%% +override GstBaseSrc__do_create kwargs +static PyObject * +_wrap_GstBaseSrc__do_create (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "offset", "size", NULL }; + PyGObject *self; + guint64 offset; + guint size; + PyObject *py_ret; + GstFlowReturn flow; + GstBuffer *buffer = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!KI:GstBaseSrc.create", + kwlist, &PyGstBaseSrc_Type, &self, &offset, &size)) + return NULL; + + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_SRC_CLASS(klass)->create) { + pyg_begin_allow_threads; + flow = GST_BASE_SRC_CLASS(klass)->create(GST_BASE_SRC(self->obj), offset, size, &buffer); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseSrc.set_caps not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + /* We now need to return a tuple with (flow, buffer) */ + if (buffer) + py_ret = PyTuple_New(2); + else + py_ret = PyTuple_New(1); + + PyTuple_SET_ITEM(py_ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, flow)); + + if (buffer) + PyTuple_SET_ITEM(py_ret, 1, pygstminiobject_new(GST_MINI_OBJECT (buffer))); + + return py_ret; +} +%% +override GstBaseSrc__proxy_do_get_size +static gboolean +_wrap_GstBaseSrc__proxy_do_get_size (GstBaseSrc * self, + guint64 * size) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + gboolean ret = FALSE; + PyObject *py_method; + PyObject *py_ret; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_method = PyObject_GetAttrString(py_self, "do_get_size"); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_self); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, NULL); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_self); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if (PyLong_Check(py_ret)) { + *size = PyLong_AsUnsignedLongLongMask(py_ret); + ret = TRUE; + } + + Py_DECREF(py_method); + Py_DECREF(py_self); + Py_DECREF(py_ret); + + beach: + pyg_gil_state_release(__py_state); + + return ret; +} +%% +override GstBaseSrc__do_get_size kwargs +static PyObject * +_wrap_GstBaseSrc__do_get_size (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", NULL }; + PyGObject *self; + gboolean ret; + guint64 size = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:GstBaseSrc.get_size", + kwlist, &PyGstBaseSrc_Type, &self)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_SRC_CLASS(klass)->get_size) { + pyg_begin_allow_threads; + ret = GST_BASE_SRC_CLASS(klass)->get_size(GST_BASE_SRC(self->obj), &size); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseSrc.get_size not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyLong_FromUnsignedLongLong(size); + + return py_ret; +} +%% +override GstBaseSrc__proxy_do_get_times +static void +_wrap_GstBaseSrc__proxy_do_get_times (GstBaseSrc * self, + GstBuffer *buffer, + GstClockTime * start, + GstClockTime * end) +{ + PyGILState_STATE __py_state; + PyObject *py_args; + PyObject *py_self; + PyObject *py_method; + PyObject *py_ret; + + __py_state = pyg_gil_state_ensure(); + + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + return; + } + + py_args = Py_BuildValue ("(N)", + pygstminiobject_new((GstMiniObject *)buffer)); + + py_method = PyObject_GetAttrString(py_self, "do_get_times"); + + Py_DECREF(py_self); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + + Py_DECREF(py_method); + + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if ((PyTuple_Check(py_ret)) && (PyTuple_Size (py_ret) == 2)) + PyArg_ParseTuple (py_ret, "KK", start, end); + + Py_DECREF (py_ret); + beach: + Py_DECREF (py_args); + pyg_gil_state_release(__py_state); + return; +} +%% +override GstBaseSrc__do_get_times kwargs +static PyObject * +_wrap_GstBaseSrc__do_get_times (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "buffer", NULL }; + PyGObject *self; + PyGstMiniObject *py_buffer; + GstClockTime start = 0; + GstClockTime end = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:GstBaseSrc.get_times", + kwlist, &PyGstBaseSrc_Type, &self, + &PyGstBuffer_Type, &py_buffer)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_SRC_CLASS(klass)->get_times) { + pyg_begin_allow_threads; + GST_BASE_SRC_CLASS(klass)->get_times(GST_BASE_SRC(self->obj), + GST_BUFFER(py_buffer->obj), + &start, &end); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseSrc.get_times not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyTuple_New(2); + PyTuple_SetItem(py_ret, 0, PyLong_FromUnsignedLongLong(start)); + PyTuple_SetItem(py_ret, 1, PyLong_FromUnsignedLongLong(end)); + + return py_ret; +} +%% +override GstPushSrc__proxy_do_create +static GstFlowReturn +_wrap_GstPushSrc__proxy_do_create (GstPushSrc * self, + GstBuffer **buffer) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + PyObject *py_method; + PyObject *py_ret; + PyGstMiniObject *py_buffer; + PyObject *py_flow; + GstFlowReturn ret = GST_FLOW_OK; + + __py_state = pyg_gil_state_ensure(); + + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_method = PyObject_GetAttrString(py_self, "do_create"); + + Py_DECREF(py_self); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, NULL); + + Py_DECREF(py_method); + + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if ((PyTuple_Check(py_ret)) && (PyTuple_Size (py_ret) == 2)) { + PyArg_ParseTuple (py_ret, "O!O!", &PyGEnum_Type, &py_flow, + &PyGstBuffer_Type, &py_buffer); + *buffer = GST_BUFFER (((PyGstMiniObject*) self)->obj); + gst_buffer_ref (*buffer); + pyg_enum_get_value(GST_TYPE_FLOW_RETURN, py_flow, (gint*)&ret); + } + + Py_DECREF (py_ret); + beach: + pyg_gil_state_release(__py_state); + return ret; +} +%% +override GstPushSrc__do_create kwargs +static PyObject * +_wrap_GstPushSrc__do_create (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", NULL }; + PyGObject *self; + GstBuffer *buffer; + GstFlowReturn flow; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:GstPushSrc.create", + kwlist, &PyGstPushSrc_Type, &self)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_PUSH_SRC_CLASS(klass)->create) { + pyg_begin_allow_threads; + flow = GST_PUSH_SRC_CLASS(klass)->create(GST_PUSH_SRC(self->obj), + (GstBuffer**) &buffer); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstPushSrc.create not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyTuple_New(2); + PyList_SetItem(py_ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, flow)); + PyList_SetItem(py_ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buffer))); + + return py_ret; +} +%% +override GstBaseTransform__proxy_do_get_unit_size +static gboolean +_wrap_GstBaseTransform__proxy_do_get_unit_size (GstBaseTransform * self, + GstCaps * caps, + guint * size) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + PyObject *py_caps; + gboolean ret = FALSE; + PyObject *py_args; + PyObject *py_method; + PyObject *py_ret; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + if (caps) + py_caps = pyg_boxed_new(GST_TYPE_CAPS, caps, FALSE, FALSE); // should copyval be TRUE instead? + else { + Py_INCREF (Py_None); + py_caps = Py_None; + } + + py_args = PyTuple_New(1); + PyTuple_SET_ITEM(py_args, 0, py_caps); + + py_method = PyObject_GetAttrString(py_self, "do_get_unit_size"); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if (PyInt_Check(py_ret)) { + *size = PyInt_AsLong(py_ret); + ret = TRUE; + } + + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + Py_DECREF(py_ret); + + beach: + pyg_gil_state_release(__py_state); + return ret; +} +%% +override GstBaseTransform__do_get_unit_size kwargs +static PyObject * +_wrap_GstBaseTransform__do_get_unit_size (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "caps", NULL }; + PyGObject *self; + PyGObject *caps; + gboolean ret; + guint size = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:GstBaseTransform.get_unit_size", + kwlist, &PyGstBaseTransform_Type, &self, &PyGstCaps_Type, &caps)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_TRANSFORM_CLASS(klass)->get_unit_size) { + pyg_begin_allow_threads; + ret = GST_BASE_TRANSFORM_CLASS(klass)->get_unit_size(GST_BASE_TRANSFORM(self->obj), GST_CAPS(caps->obj), &size); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseTransform.get_unit_size not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyLong_FromUnsignedLongLong(size); + + return py_ret; +} +%% +override GstBaseTransform__proxy_do_transform_size +static gboolean +_wrap_GstBaseTransform__proxy_do_transform_size (GstBaseTransform * self, + GstPadDirection direction, + GstCaps * caps, + guint size, + GstCaps * othercaps, + guint * othersize) +{ + PyGILState_STATE __py_state; + PyObject *py_self = NULL; + PyObject *py_direction = NULL; + PyObject *py_caps = NULL; + PyObject *py_size = NULL; + PyObject *py_othercaps = NULL; + PyObject *py_args = NULL; + PyObject *py_method = NULL; + PyObject *py_ret = NULL; + gboolean ret = FALSE; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_direction = pyg_enum_from_gtype(GST_TYPE_PAD_DIRECTION, direction); + + if (caps) + py_caps = pyg_boxed_new(GST_TYPE_CAPS, caps, FALSE, FALSE); // should copyval be TRUE instead? + else { + Py_INCREF (Py_None); + py_caps = Py_None; + } + + py_size = PyInt_FromLong(size); + + if (othercaps) + py_othercaps = pyg_boxed_new(GST_TYPE_CAPS, caps, FALSE, FALSE); // should copyval be TRUE instead? + else { + Py_INCREF (Py_None); + py_othercaps = Py_None; + } + + py_args = PyTuple_New(4); + PyTuple_SET_ITEM(py_args, 0, py_direction); + PyTuple_SET_ITEM(py_args, 1, py_caps); + PyTuple_SET_ITEM(py_args, 2, py_size); + PyTuple_SET_ITEM(py_args, 3, py_othercaps); + + py_method = PyObject_GetAttrString(py_self, "do_transform_size"); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + if (PyInt_Check(py_ret)) { + *othersize = PyInt_AsLong(py_ret); + ret = TRUE; + } + +beach: + Py_XDECREF(py_self); + Py_XDECREF(py_args); + Py_XDECREF(py_method); + Py_XDECREF(py_ret); + + pyg_gil_state_release(__py_state); + return ret; +} +%% +override GstBaseTransform__do_transform_size kwargs +static PyObject * +_wrap_GstBaseTransform__do_transform_size (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "direction", "caps", "size", "othercaps", NULL }; + PyGObject *self; + PyGObject *py_direction; + PyGObject *py_caps; + PyGObject *py_othercaps; + gboolean ret; + GstPadDirection direction; + guint size = 0; + guint othersize = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!O!iO!:GstBaseTransform.get_unit_size", + kwlist, &PyGstBaseTransform_Type, &self, &PyGEnum_Type, &py_direction, + &PyGstCaps_Type, &py_caps, &size, &PyGstCaps_Type, &py_othercaps)) + return NULL; + + pyg_enum_get_value(GST_TYPE_PAD_DIRECTION, + (PyObject *) py_direction, (gint *) &direction); + + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_TRANSFORM_CLASS(klass)->transform_size) { + pyg_begin_allow_threads; + ret = GST_BASE_TRANSFORM_CLASS(klass)->transform_size(GST_BASE_TRANSFORM(self->obj), + direction, GST_CAPS(py_caps->obj), size, + GST_CAPS(py_othercaps->obj), &othersize); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseTransform.transform_size not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyLong_FromUnsignedLongLong(othersize); + return py_ret; +} +%% +override GstBaseSink__proxy_do_get_times +static void +_wrap_GstBaseSink__proxy_do_get_times (GstBaseSink * self, + GstBuffer *buffer, + GstClockTime * start, + GstClockTime * end) +{ + PyGILState_STATE __py_state; + PyObject *py_args; + PyObject *py_self; + PyObject *py_method; + PyObject *py_ret; + + __py_state = pyg_gil_state_ensure(); + + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return; + } + + py_args = Py_BuildValue ("(N)", + pygstminiobject_new((GstMiniObject *)buffer)); + + py_method = PyObject_GetAttrString(py_self, "do_get_times"); + + Py_DECREF(py_self); + + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + py_ret = PyObject_CallObject(py_method, py_args); + + Py_DECREF(py_method); + + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + + /* + If the method returned a numeric, the return value will be TRUE. + For ANY other case, we don't set size and the return value is FALSE. + */ + + if ((PyTuple_Check(py_ret)) && (PyTuple_Size (py_ret) == 2)) + PyArg_ParseTuple (py_ret, "KK", start, end); + + Py_DECREF (py_ret); + beach: + Py_DECREF (py_args); + pyg_gil_state_release(__py_state); + return; +} +%% +override GstBaseSink__do_get_times kwargs +static PyObject * +_wrap_GstBaseSink__do_get_times (PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "buffer", NULL }; + PyGObject *self; + PyGstMiniObject *py_buffer; + GstClockTime start = 0; + GstClockTime end = 0; + PyObject *py_ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!:GstBaseSink.get_times", + kwlist, &PyGstBaseSink_Type, &self, + &PyGstBuffer_Type, &py_buffer)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_SINK_CLASS(klass)->get_times) { + pyg_begin_allow_threads; + GST_BASE_SINK_CLASS(klass)->get_times(GST_BASE_SINK(self->obj), + GST_BUFFER(py_buffer->obj), + &start, &end); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseSink.get_times not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + + py_ret = PyTuple_New(2); + PyTuple_SetItem(py_ret, 0, PyLong_FromUnsignedLongLong(start)); + PyTuple_SetItem(py_ret, 1, PyLong_FromUnsignedLongLong(end)); + + return py_ret; +} +%% +override gst_base_sink_query_latency noargs +static PyObject * +_wrap_gst_base_sink_query_latency (PyGObject *self) +{ + gboolean res, live = FALSE, upstream_live = FALSE; + GstClockTime minlat = GST_CLOCK_TIME_NONE, maxlat = GST_CLOCK_TIME_NONE; + + res = gst_base_sink_query_latency (GST_BASE_SINK (self->obj), &live, &upstream_live, + &minlat, &maxlat); + return Py_BuildValue("(OOOKK)", + PyBool_FromLong(res), + PyBool_FromLong(live), + PyBool_FromLong(upstream_live), + minlat, maxlat); +} +%% +override gst_base_src_query_latency noargs +static PyObject * +_wrap_gst_base_src_query_latency (PyGObject *self) +{ + gboolean res, live = FALSE; + GstClockTime minlat = GST_CLOCK_TIME_NONE, maxlat = GST_CLOCK_TIME_NONE; + + res = gst_base_src_query_latency (GST_BASE_SRC (self->obj), &live, + &minlat, &maxlat); + return Py_BuildValue("(OOKK)", + PyBool_FromLong(res), + PyBool_FromLong(live), + minlat, maxlat); +} +%% +override GstBaseTransform__do_src_event kwargs +static PyObject * +_wrap_GstBaseTransform__do_src_event(PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "event", NULL }; + PyGObject *self; + int ret; + PyGstMiniObject *event; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O!:GstBaseTransform.src_event", kwlist, &PyGstBaseTransform_Type, &self, &PyGstEvent_Type, &event)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BASE_TRANSFORM_CLASS(klass)->src_event) { + pyg_begin_allow_threads; + ret = GST_BASE_TRANSFORM_CLASS(klass)->src_event(GST_BASE_TRANSFORM(self->obj), + gst_event_ref (GST_EVENT(event->obj))); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBaseTransform.src_event not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + return PyBool_FromLong(ret); + +} +%% +override gst_adapter_take kwargs +static PyObject * +_wrap_gst_adapter_take(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "nbytes", NULL }; + PyObject *py_nbytes = NULL; + guint nbytes = 0; + guint8 *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GstAdapter.take", kwlist, &py_nbytes)) + return NULL; + if (py_nbytes) { + if (PyLong_Check(py_nbytes)) + nbytes = PyLong_AsUnsignedLong(py_nbytes); + else if (PyInt_Check(py_nbytes)) + nbytes = PyInt_AsLong(py_nbytes); + else + PyErr_SetString(PyExc_TypeError, "Parameter 'nbytes' must be an int or a long"); + if (PyErr_Occurred()) + return NULL; + } + pyg_begin_allow_threads; + ret = gst_adapter_take(GST_ADAPTER(self->obj), nbytes); + pyg_end_allow_threads; + if (ret) { + PyObject *py_ret = PyString_FromStringAndSize((gchar*) ret, nbytes); + g_free(ret); + return py_ret; + } + Py_INCREF(Py_None); + return Py_None; +} +%% +override gst_adapter_peek kwargs +static PyObject * +_wrap_gst_adapter_peek(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "size", NULL }; + PyObject *py_size = NULL; + const guint8 *ret; + guint size = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GstAdapter.peek", kwlist, &py_size)) + return NULL; + if (py_size) { + if (PyLong_Check(py_size)) + size = PyLong_AsUnsignedLong(py_size); + else if (PyInt_Check(py_size)) + size = PyInt_AsLong(py_size); + else + PyErr_SetString(PyExc_TypeError, "Parameter 'size' must be an int or a long"); + if (PyErr_Occurred()) + return NULL; + } + pyg_begin_allow_threads; + ret = gst_adapter_peek(GST_ADAPTER(self->obj), size); + pyg_end_allow_threads; + if (ret) + return PyString_FromStringAndSize((gchar*) ret, size); + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstbin.override b/gst/gstbin.override new file mode 100644 index 0000000..c473163 --- /dev/null +++ b/gst/gstbin.override @@ -0,0 +1,265 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +%% +ignore + gst_bin_get_by_name_recurse_up +%% +override gst_bin_add args +static PyObject * +_wrap_gst_bin_add(PyGObject *self, PyObject *args) +{ + PyGObject *element; + int i, len; + + len = PyTuple_Size(args); + if (len == 0) { + PyErr_SetString(PyExc_TypeError, "GstBin.add_many requires at least one argument"); + return NULL; + } + + + for (i = 0; i < len; i++) { + element = (PyGObject*)PyTuple_GetItem(args, i); + if (!pygobject_check(element, &PyGstElement_Type)) + { + PyErr_SetString(PyExc_TypeError, "argument must be a GstElement"); + return NULL; + } + } + + for (i = 0; i < len; i++) { + gboolean rest; + + element = (PyGObject*)PyTuple_GetItem(args, i); + pyg_begin_allow_threads; + rest = gst_bin_add(GST_BIN(self->obj), GST_ELEMENT(element->obj)); + pyg_end_allow_threads; + if (!rest) { + PyErr_Format(PyGstExc_AddError, "Could not add element '%s'", GST_OBJECT_NAME(element->obj)); + return NULL; + } + } + + Py_INCREF(Py_None); + return Py_None; +} + +%% +override gst_bin_add_many kwargs +static PyObject * +_wrap_gst_bin_add_many(PyGObject *self, PyObject *args) +{ + if (PyErr_Warn(PyExc_DeprecationWarning, "gst.Bin.add_many() is deprecated, use gst.Bin.add()") < 0) + return NULL; + return _wrap_gst_bin_add (self, args); +} + +%% +override gst_bin_remove args +static PyObject * +_wrap_gst_bin_remove(PyGObject *self, PyObject *args) +{ + PyGObject *element; + int i, len; + + len = PyTuple_Size(args); + if (len == 0) { + PyErr_SetString(PyExc_TypeError, "GstBin.remove_many requires at least one argument"); + return NULL; + } + + + for (i = 0; i < len; i++) { + element = (PyGObject*)PyTuple_GetItem(args, i); + if (!pygobject_check(element, &PyGstElement_Type)) + { + PyErr_SetString(PyExc_TypeError, "argument must be a GstElement"); + return NULL; + } + } + + for (i = 0; i < len; i++) { + gboolean rest; + element = (PyGObject*)PyTuple_GetItem(args, i); + pyg_begin_allow_threads; + rest = gst_bin_remove(GST_BIN(self->obj), GST_ELEMENT(element->obj)); + pyg_end_allow_threads; + if (!rest) { + PyErr_Format(PyGstExc_RemoveError, "Could not remove element '%s'", GST_OBJECT_NAME(element->obj)); + return NULL; + } + } + + Py_INCREF(Py_None); + return Py_None; +} + +%% +override gst_bin_remove_many kwargs +static PyObject * +_wrap_gst_bin_remove_many(PyGObject *self, PyObject *args) +{ + if (PyErr_Warn(PyExc_DeprecationWarning, "gst.Bin.remove_many() is deprecated, use gst.Bin.remove()") < 0) + return NULL; + return _wrap_gst_bin_remove (self, args); +} +%% +override gst_bin_get_by_name kwargs +static PyObject * +_wrap_gst_bin_get_by_name(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", "recurse", NULL }; + char *name; + gboolean recurse = FALSE; + GstElement *el; + PyObject *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|b:GstBin.get_by_name", + kwlist, &name, &recurse)) + return NULL; + + if (recurse) + el = gst_bin_get_by_name_recurse_up(GST_BIN(self->obj), name); + else + el = gst_bin_get_by_name(GST_BIN(self->obj), name); + + /* pygobject_new handles NULL checking */ + ret = pygobject_new((GObject *)el); + if (el) + gst_object_unref (el); /* from get_by_name */ + return ret; +} +%% +override-slot GstBin.tp_iter +static PyObject * +_wrap_gst_bin_tp_iter(PyGObject *self) +{ + return _wrap_gst_bin_iterate_elements(self); +} +%% +override GstBin__do_handle_message kwargs +static PyObject * +_wrap_GstBin__do_handle_message(PyObject *cls, PyObject *args, PyObject *kwargs) +{ + gpointer klass; + static char *kwlist[] = { "self", "message", NULL }; + PyGObject *self; + PyGstMiniObject *message; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!O!:GstBin.handle_message", kwlist, &PyGstBin_Type, &self, &PyGstMessage_Type, &message)) + return NULL; + klass = g_type_class_ref(pyg_type_from_object(cls)); + if (GST_BIN_CLASS(klass)->handle_message) { + gst_mini_object_ref (message->obj); + pyg_begin_allow_threads; + GST_BIN_CLASS(klass)->handle_message(GST_BIN(self->obj), GST_MESSAGE(message->obj)); + pyg_end_allow_threads; + } else { + PyErr_SetString(PyExc_NotImplementedError, "virtual method GstBin.handle_message not implemented"); + g_type_class_unref(klass); + return NULL; + } + g_type_class_unref(klass); + Py_INCREF(Py_None); + return Py_None; +} + +%% +override GstBin__proxy_do_handle_message +static void +_wrap_GstBin__proxy_do_handle_message(GstBin *self, GstMessage*message) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + PyObject *py_message = NULL; + PyObject *py_retval; + PyObject *py_args; + PyObject *py_method; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return; + } + if (message) { + py_message = pygstminiobject_new((GstMiniObject *) message); + gst_mini_object_unref ((GstMiniObject *) message); + } else { + Py_INCREF(Py_None); + py_message = Py_None; + } + + py_args = PyTuple_New(1); + Py_INCREF(py_message); + PyTuple_SET_ITEM(py_args, 0, py_message); + + py_method = PyObject_GetAttrString(py_self, "do_handle_message"); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_args); + gst_mini_object_ref ((GstMiniObject *) message); Py_DECREF(py_message); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return; + } + py_retval = PyObject_CallObject(py_method, py_args); + if (!py_retval) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_args); + gst_mini_object_ref ((GstMiniObject *) message); Py_DECREF(py_message); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return; + } + if (py_retval != Py_None) { + if (PyErr_Occurred()) + PyErr_Print(); + PyErr_SetString(PyExc_TypeError, "retval should be None"); + Py_DECREF(py_retval); + Py_DECREF(py_method); + Py_DECREF(py_args); + gst_mini_object_ref ((GstMiniObject *) message); Py_DECREF(py_message); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return; + } + + + Py_DECREF(py_retval); + Py_DECREF(py_method); + Py_DECREF(py_args); + gst_mini_object_ref ((GstMiniObject *) message); Py_DECREF(py_message); + + /* #577735: since the bus handler will return BUS_DROP, we should unref. + This is the only change from the generated code. */ + gst_mini_object_unref ((GstMiniObject *) message); + + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); +} diff --git a/gst/gstbuffer.override b/gst/gstbuffer.override new file mode 100644 index 0000000..c3c6ffe --- /dev/null +++ b/gst/gstbuffer.override @@ -0,0 +1,611 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2002 David I. Lehn + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +headers + +static Py_ssize_t gst_buffer_getreadbuffer (PyObject *self, + Py_ssize_t index, void **ptr); +static Py_ssize_t gst_buffer_getwritebuf (PyObject *self, + Py_ssize_t index, void **ptr); +static Py_ssize_t gst_buffer_getsegcount (PyObject *self, + Py_ssize_t *lenp); + +#if PY_VERSION_HEX >= 0x02050000 +static Py_ssize_t gst_buffer_getcharbuf (PyObject *self, + Py_ssize_t index, char **ptr); +#else +static Py_ssize_t gst_buffer_getcharbuf (PyObject *self, + Py_ssize_t index, const char **ptr); +#endif +%% +override gst_buffer_new kwargs +static int +_wrap_gst_buffer_new(PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "data", "buffer_size", NULL }; + char *data = NULL; + int size = 0; + int buf_size = -1; + + GST_INFO("self:%p", self); + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|z#i:GstBuffer.__init__", kwlist, + &data, &size, &buf_size)) + return -1; + + if (size < 0) { + PyErr_SetString(PyExc_TypeError, "buffer size must be >= 0"); + return -1; + } + if (buf_size < 0) + buf_size = size; + if (buf_size < size) { + PyErr_SetString(PyExc_TypeError, "buffer size must be >= data size"); + return -1; + } + + self->obj = GST_MINI_OBJECT(gst_buffer_new_and_alloc(buf_size)); + GST_INFO ("pyo:%p pyr:%"G_GSSIZE_FORMAT" minio:%p minir:%d", + self, ((PyObject*)self)->ob_refcnt, + self->obj, GST_MINI_OBJECT_REFCOUNT_VALUE(self->obj)); + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstBuffer object"); + return -1; + } + pygstminiobject_register_wrapper((PyObject *) self); + + if (data == NULL) + return 0; + + memcpy (GST_BUFFER_DATA (self->obj), data, size); + GST_BUFFER_SIZE (self->obj) = size; + + return 0; +} +%% +override-slot GstBuffer.tp_str +static PyObject * +_wrap_gst_buffer_tp_str (PyGstMiniObject *self) +{ + GstBuffer *buf; + + g_assert (self); + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert (buf); + + return PyString_FromStringAndSize((const gchar*) GST_BUFFER_DATA(buf), + (gint) GST_BUFFER_SIZE(buf)); +} + +%% +override-slot GstBuffer.tp_repr +static PyObject * +_wrap_gst_buffer_tp_repr (PyGstMiniObject *self) +{ + GstBuffer *buf; + guchar *data; + gchar *repr; + gint size = 0; + PyObject *ret; + + g_assert (self); + buf = GST_BUFFER(self->obj); + g_assert (buf); + + size = GST_BUFFER_SIZE (buf); + + if (size == 0) { + repr = g_strdup_printf ("", buf, size); + } else { + data = GST_BUFFER_DATA (buf); + repr = g_strdup_printf ( + "", buf, size, + *data, + size > 0 ? *(data + 1) : 0, + size > 1 ? *(data + 2) : 0, + size > 2 ? *(data + 3) : 0 + ); + } + ret = PyString_FromStringAndSize(repr, strlen (repr)); + g_free (repr); + return ret; +} + +%% +override-slot GstBuffer.tp_as_buffer +static PyBufferProcs _wrap_gst_buffer_tp_as_buffer = { + gst_buffer_getreadbuffer, /* bf_getreadbuffer */ + gst_buffer_getwritebuf, /* bf_getwritebuffer */ + gst_buffer_getsegcount, /* bf_getsegcount */ + gst_buffer_getcharbuf, /* bf_getcharbuffer */ +}; + +static Py_ssize_t +gst_buffer_getreadbuffer(PyObject *self, Py_ssize_t index, + void **ptr) +{ + GstBuffer *buf = GST_BUFFER(pygstminiobject_get(self)); + + if ( index != 0 ) { + PyErr_SetString(PyExc_SystemError, + "accessing non-existent GstBuffer segment"); + return -1; + } + + *ptr = GST_BUFFER_DATA(buf); + return GST_BUFFER_SIZE(buf); +} + +static Py_ssize_t +gst_buffer_getsegcount(PyObject *self, Py_ssize_t *lenp) +{ + GstBuffer *buf = GST_BUFFER(pygstminiobject_get(self)); + + if (lenp) + *lenp = GST_BUFFER_SIZE(buf); + return 1; +} + +/* Need a version that has const char ** for Python 2.4 */ +#if PY_VERSION_HEX >= 0x02050000 +static Py_ssize_t gst_buffer_getcharbuf (PyObject *self, + Py_ssize_t index, char **ptr) +#else +static Py_ssize_t gst_buffer_getcharbuf (PyObject *self, + Py_ssize_t index, const char **ptr) +#endif +{ + return gst_buffer_getreadbuffer (self, index, (void **) ptr); +} + +static Py_ssize_t +gst_buffer_getwritebuf(PyObject *self, Py_ssize_t index, void **ptr) +{ + GstBuffer *buf = GST_BUFFER(pygstminiobject_get(self)); + + if ( index != 0 ) { + PyErr_SetString(PyExc_SystemError, + "accessing non-existent GstBuffer segment"); + return -1; + } + + if (!gst_buffer_is_writable (buf)) { + PyErr_SetString(PyExc_TypeError, + "buffer is not writable"); + return -1; + } + + *ptr = GST_BUFFER_DATA(buf); + return GST_BUFFER_SIZE(buf); +} + +%% +override-slot GstBuffer.tp_as_sequence +/* FIXME: should buffer parts be buffers or strings? */ + +static Py_ssize_t +pygst_buffer_length(PyObject *self) +{ + return GST_BUFFER_SIZE(pygobject_get (self)); +} + +static PyObject * +pygst_buffer_slice(PyObject *self, Py_ssize_t start, Py_ssize_t end) +{ + GstBuffer *buf = GST_BUFFER (pygobject_get (self)); + if (start < 0) + start = 0; + if (end < 0) + end = 0; + if (end > GST_BUFFER_SIZE(buf)) + end = GST_BUFFER_SIZE(buf); + + if (end <= start) { + PyErr_SetString(PyExc_IndexError, "buffer index out of range"); + return NULL; + } + return PyString_FromStringAndSize((gchar *) GST_BUFFER_DATA (buf) + start, end - start); +} + +static PyObject * +pygst_buffer_item(PyObject *self, Py_ssize_t index) +{ + return pygst_buffer_slice (self, index, index + 1); +} + +static int +pygst_buffer_ass_slice (PyObject *self, Py_ssize_t start, + Py_ssize_t end, PyObject *val) +{ + GstBuffer *buf = GST_BUFFER (pygobject_get (self)); + const void *data; + Py_ssize_t len; + + if (!gst_buffer_is_writable (buf)) { + PyErr_SetString(PyExc_TypeError, "buffer is not writable"); + return -1; + } + /* FIXME: policy? */ + if (start < 0 || end <= start || end > GST_BUFFER_SIZE (buf)) { + PyErr_SetString(PyExc_IndexError, "buffer index out of range"); + return -1; + } + end -= start; + if (PyObject_AsReadBuffer(val, &data, &len)) + return -1; + if (len > end) + len = end; + memcpy (GST_BUFFER_DATA (buf) + start, data, len); + return 0; +} + +static int +pygst_buffer_ass_item (PyObject *self, Py_ssize_t index, PyObject *val) +{ + GstBuffer *buf = GST_BUFFER (pygobject_get (self)); + const void *data; + Py_ssize_t len; + + if (!gst_buffer_is_writable (buf)) { + PyErr_SetString(PyExc_TypeError, "buffer is not writable"); + return -1; + } + if (index < 0 || index > GST_BUFFER_SIZE (buf)) { + PyErr_SetString(PyExc_IndexError, "buffer index out of range"); + return -1; + } + if (PyObject_AsReadBuffer(val, &data, &len)) + return -1; + /* FIXME: how do we handle this? */ + if (len > GST_BUFFER_SIZE (buf) - index) + len = GST_BUFFER_SIZE (buf) - index; + memcpy (GST_BUFFER_DATA (buf) + index, data, len); + return 0; +} + +static PySequenceMethods _wrap_gst_buffer_tp_as_sequence = { + pygst_buffer_length, /* sq_length */ + NULL, /* sq_concat */ + NULL, /* sq_repeat */ + pygst_buffer_item, /* sq_item */ + pygst_buffer_slice, /* sq_slice */ + pygst_buffer_ass_item, /* sq_ass_item */ + pygst_buffer_ass_slice, /* sq_ass_slice */ + NULL, /* sq_contains */ + NULL, /* sq_inplace_concat */ + NULL, /* sq_inplace_repeat */ +}; +%% +define GstBuffer.copy_on_write +static PyObject * +_wrap_gst_buffer_copy_on_write (PyObject *self) +{ + GstBuffer *buf = GST_BUFFER(pygstminiobject_get(self)); + + GST_INFO("INCREF"); + if (gst_buffer_is_writable (buf)) { + Py_INCREF (self); + return self; + } + buf = gst_buffer_copy (buf); + self = pygstminiobject_new ((GstMiniObject *)(buf)); + gst_buffer_unref (buf); + return self; +} +%% +define GstBuffer.flag_is_set +static PyObject * +_wrap_gst_buffer_flag_is_set(PyObject *self, PyObject *args) +{ + int flag; + PyObject *retval; + GstBuffer *buf; + + if (!PyArg_ParseTuple(args, "i:GstBuffer.flag_is_set", &flag)) + return NULL; + + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert(GST_IS_BUFFER(buf)); + + retval = GST_BUFFER_FLAG_IS_SET(buf, flag) ? Py_True : Py_False; + Py_INCREF(retval); + return retval; +} +%% +define GstBuffer.flag_set +static PyObject * +_wrap_gst_buffer_flag_set(PyObject *self, PyObject *args) +{ + int flag; + GstBuffer *buf; + + if (!PyArg_ParseTuple(args, "i:GstBuffer.set", &flag)) + return NULL; + + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert(GST_IS_BUFFER(buf)); + GST_BUFFER_FLAG_SET(buf, flag); + + Py_INCREF(Py_None); + return Py_None; +} +%% +define GstBuffer.flag_unset +static PyObject * +_wrap_gst_buffer_flag_unset(PyObject *self, PyObject *args) +{ + int flag; + GstBuffer *buf; + + if (!PyArg_ParseTuple(args, "i:GstBuffer.unset", &flag)) + return NULL; + + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert(GST_IS_BUFFER(buf)); + GST_BUFFER_FLAG_UNSET(buf, flag); + + Py_INCREF(Py_None); + return Py_None; +} + +%% +override-attr GstBuffer.data +static PyObject * +_wrap_gst_buffer__get_data(PyObject *self, void *closure) +{ + GstBuffer *buf; + + g_assert (self); + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert (buf); + + return PyString_FromStringAndSize((const gchar*) GST_BUFFER_DATA(buf), + (gint) GST_BUFFER_SIZE(buf)); +} + +%% +override-attr GstBuffer.size +static PyObject * +_wrap_gst_buffer__get_size(PyObject *self, void *closure) +{ + return PyLong_FromUnsignedLongLong((guint) GST_BUFFER_SIZE(GST_BUFFER(pygstminiobject_get(self)))); +} +static int +_wrap_gst_buffer__set_size(PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint val; + GstBuffer *buf; + void* ptr; + + if (PyInt_CheckExact(value)) + val = PyInt_AsUnsignedLongLongMask(value); + else + val = PyLong_AsUnsignedLongLong(value); + if (PyErr_Occurred()) + return -1; + + g_assert (self); + buf = GST_BUFFER(pygstminiobject_get(self)); + g_assert (buf); + + ptr = realloc( GST_BUFFER_DATA(buf), val ); + if (ptr) + { + GST_BUFFER_DATA(buf) = ptr; + GST_BUFFER_SIZE(buf) = val; + } + else + { + /* Raise an error */ + PyErr_SetString( PyExc_RuntimeError, "Unable to realloc Buffer" ); + } + return 0; +} +%% +override-attr GstBuffer.timestamp +static PyObject * +_wrap_gst_buffer__get_timestamp(PyObject *self, void *closure) +{ + guint64 ret; + + ret = GST_BUFFER(pygstminiobject_get(self))->timestamp; + return PyLong_FromUnsignedLongLong(ret); +} +static int +_wrap_gst_buffer__set_timestamp(PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint64 val; + + if (PyInt_CheckExact(value)) + val = PyInt_AsUnsignedLongLongMask(value); + else + val = PyLong_AsUnsignedLongLong(value); + if (PyErr_Occurred()) + return -1; + + GST_BUFFER(self->obj)->timestamp = val; + return 0; +} +%% +override-attr GstBuffer.duration +static PyObject * +_wrap_gst_buffer__get_duration(PyObject *self, void *closure) +{ + guint64 ret; + + ret = GST_BUFFER(pygstminiobject_get(self))->duration; + return PyLong_FromUnsignedLongLong(ret); +} +static int +_wrap_gst_buffer__set_duration(PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint64 val; + + if (PyInt_CheckExact(value)) + val = PyInt_AsUnsignedLongLongMask(value); + else + val = PyLong_AsUnsignedLongLong(value); + if (PyErr_Occurred()) + return -1; + + GST_BUFFER(self->obj)->duration = val; + return 0; +} + +%% +override-attr GstBuffer.offset +static PyObject * +_wrap_gst_buffer__get_offset (PyObject *self, void *closure) +{ + guint64 ret; + GstMiniObject *miniobject; + g_assert (self); + + miniobject = pygstminiobject_get (self); + g_assert (miniobject); + + ret = GST_BUFFER_OFFSET (GST_BUFFER (miniobject)); + return PyLong_FromUnsignedLongLong (ret); +} + +static int +_wrap_gst_buffer__set_offset (PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint64 val; + g_assert (self); + + if (PyInt_CheckExact (value)) + val = PyInt_AsUnsignedLongLongMask (value); + else + val = PyLong_AsUnsignedLongLong (value); + if (PyErr_Occurred()) + return -1; + + GST_BUFFER_OFFSET (GST_BUFFER (self->obj)) = val; + return 0; +} + +%% +override-attr GstBuffer.offset_end +static PyObject * +_wrap_gst_buffer__get_offset_end (PyObject *self, void *closure) +{ + guint64 ret; + GstMiniObject *miniobject; + g_assert (self); + + miniobject = pygstminiobject_get (self); + g_assert (miniobject); + + ret = GST_BUFFER_OFFSET_END (GST_BUFFER (miniobject)); + return PyLong_FromUnsignedLongLong (ret); +} + +static int +_wrap_gst_buffer__set_offset_end (PyGstMiniObject *self, PyObject *value, void *closure) +{ + guint64 val; + g_assert (self); + + if (PyInt_CheckExact (value)) + val = PyInt_AsUnsignedLongLongMask (value); + else + val = PyLong_AsUnsignedLongLong (value); + if (PyErr_Occurred ()) + return -1; + + GST_BUFFER_OFFSET_END (GST_BUFFER (self->obj)) = val; + return 0; +} + +%% +override gst_buffer_stamp kwargs +static PyObject * +_wrap_gst_buffer_stamp (PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "src", NULL }; + PyGstMiniObject *srcobj; + GstBuffer *dest, *src; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, + "O:GstBuffer.stamp", + kwlist, &srcobj)) + return NULL; + dest = GST_BUFFER(pygstminiobject_get(self)); + src = GST_BUFFER(pygstminiobject_get(srcobj)); + gst_buffer_stamp (dest, (const GstBuffer*) src); + + Py_INCREF(Py_None); + return Py_None; +} +%% +override-attr GstBuffer.caps +static PyObject * +_wrap_gst_buffer__get_caps (PyObject *self, void *closure) +{ + GstMiniObject *miniobject; + GstCaps *ret; + + miniobject = pygstminiobject_get (self); + g_assert (miniobject); + + pyg_begin_allow_threads; + ret = gst_buffer_get_caps(GST_BUFFER(miniobject)); + pyg_end_allow_threads; + return pyg_boxed_new (GST_TYPE_CAPS, ret, FALSE, TRUE); +} +static int +_wrap_gst_buffer__set_caps (PyGstMiniObject *self, PyObject *value, void *closure) +{ + GstCaps *caps; + g_assert (self); + + caps = pygst_caps_from_pyobject (value, NULL); + if (PyErr_Occurred()) + return -1; + pyg_begin_allow_threads; + gst_buffer_set_caps(GST_BUFFER(self->obj), caps); + gst_caps_unref (caps); + pyg_end_allow_threads; + return 0; +} +%% +override gst_buffer_set_caps kwargs +static PyObject * +_wrap_gst_buffer_set_caps(PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "caps", NULL }; + PyObject *py_caps; + GstCaps *caps; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GstBuffer.set_caps", kwlist, &py_caps)) + return NULL; + caps = pygst_caps_from_pyobject (py_caps, NULL); + if (PyErr_Occurred()) + return NULL; + pyg_begin_allow_threads; + gst_buffer_set_caps(GST_BUFFER(self->obj), caps); + gst_caps_unref (caps); + pyg_end_allow_threads; + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstbus.override b/gst/gstbus.override new file mode 100644 index 0000000..23db495 --- /dev/null +++ b/gst/gstbus.override @@ -0,0 +1,272 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- + * vi:si:et:sw=4:sts=4:ts=4 + * + * gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Edward Hervey + */ +%% +ignore + gst_bus_create_watch + gst_bus_sync_signal_handler + gst_bus_async_signal_func +%% +headers +static GstBusSyncReply +bus_sync_handler (GstBus *bus, GstMessage *message, gpointer user_data) +{ + PyGILState_STATE state; + GstBusSyncReply res; + PyObject *py_userdata; + PyObject *py_msg; + PyObject *callback, *args; + PyObject *ret; + gint i, len; + + g_return_val_if_fail (user_data != NULL, GST_BUS_PASS); + + state = pyg_gil_state_ensure (); + + py_userdata = (PyObject *) user_data; + py_msg = pygstminiobject_new (GST_MINI_OBJECT (message)); + callback = PyTuple_GetItem (py_userdata, 0); + + /* Using N we give away our references to the args tuple */ + args = Py_BuildValue ("(NN)", + pygobject_new (G_OBJECT (bus)), + py_msg); + + /* add all *args to the args tuple object */ + len = PyTuple_Size (py_userdata); + for (i = 1; i < len; ++i) { + PyObject *tuple = args; + args = PySequence_Concat (tuple, PyTuple_GetItem (py_userdata, i)); + Py_DECREF (tuple); + } + ret = PyObject_CallObject (callback, args); + + if (!ret) { + PyErr_Print (); + res = GST_BUS_PASS; + } else { + if (ret == Py_None) { + PyErr_SetString (PyExc_TypeError, + "callback should return a BusSyncReply"); + PyErr_Print (); + res = GST_BUS_PASS; + } else if (pyg_enum_get_value (GST_TYPE_BUS_SYNC_REPLY, ret, + (gint *) &res)) + res = GST_BUS_PASS; + + Py_DECREF (ret); + } + Py_DECREF (args); + + pyg_gil_state_release (state); + + return res; +} + +static gboolean +bus_func (GstBus *bus, GstMessage *message, gpointer user_data) +{ + PyGILState_STATE state; + gboolean res; + PyObject *py_userdata; + PyObject *py_msg; + PyObject *callback, *args; + PyObject *ret; + gint i, len; + + g_return_val_if_fail (user_data != NULL, TRUE); + + GST_DEBUG_OBJECT (bus, "dispatching message %p", message); + + state = pyg_gil_state_ensure (); + + py_userdata = (PyObject *) user_data; + g_assert (PyTuple_Check (py_userdata)); + + py_msg = pygstminiobject_new (GST_MINI_OBJECT (message)); + callback = PyTuple_GetItem (py_userdata, 0); + + /* Using N we give away our references to the args tuple */ + args = Py_BuildValue ("(NN)", + pygobject_new (G_OBJECT (bus)), + py_msg); + g_assert (args); + + /* add all *args to the args tuple object */ + len = PyTuple_Size (py_userdata); + for (i = 1; i < len; ++i) { + PyObject *item; + PyObject *tuple = args; + + item = PyTuple_GetItem (py_userdata, i); + g_assert (item); + + args = PySequence_Concat (tuple, item); + g_assert (args); + + Py_DECREF (tuple); + } + ret = PyObject_CallObject(callback, args); + + if (!ret) { + PyErr_Print (); + res = TRUE; + } else { + if (ret == Py_None) { + PyErr_SetString (PyExc_TypeError, + "callback should return True or False"); + PyErr_Print (); + res = TRUE; + } else + res = PyObject_IsTrue (ret); + Py_DECREF (ret); + } + Py_DECREF (args); + + pyg_gil_state_release (state); + + GST_DEBUG_OBJECT (bus, "dispatched message %p", message); + + return res; +} + +%% +override gst_bus_set_sync_handler args +static PyObject * +_wrap_gst_bus_set_sync_handler (PyGObject *self, PyObject *args) +{ + PyObject *callback = NULL; + PyObject *cbargs = NULL; + PyObject *data = NULL; + PyObject *old_data = NULL; + gint len; + static GQuark sync_handler_data_quark = 0; + + len = PyTuple_Size(args); + + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Bus requires at least 1 arg"); + return NULL; + } + + if (sync_handler_data_quark == 0) + sync_handler_data_quark = \ + g_quark_from_static_string("PyGst::BusSyncHandlerData"); + + callback = PySequence_GetItem(args, 0); + if (callback != Py_None) { + if (!PyCallable_Check(callback)) { + Py_DECREF (callback); + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) { + Py_DECREF (callback); + return NULL; + } + + data = Py_BuildValue("(ON)", callback, cbargs); + Py_DECREF (cbargs); + if (data == NULL) { + Py_DECREF (callback); + return NULL; + } + + old_data = g_object_get_qdata (self->obj, sync_handler_data_quark); + if (old_data != NULL) { + Py_DECREF (old_data); + } + + g_object_set_qdata (self->obj, sync_handler_data_quark, data); + + gst_bus_set_sync_handler (GST_BUS (self->obj), + (GstBusSyncHandler) bus_sync_handler, + data); + } else { + old_data = g_object_get_qdata (self->obj, sync_handler_data_quark); + if (old_data != NULL) { + Py_DECREF (old_data); + } + + g_object_set_qdata (self->obj, sync_handler_data_quark, NULL); + + gst_bus_set_sync_handler (GST_BUS (self->obj), NULL, NULL); + } + + Py_DECREF (callback); + + Py_INCREF(Py_None); + return Py_None; +} +%% +override gst_bus_add_watch args +static PyObject * +_wrap_gst_bus_add_watch (PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + guint sigid; + guint len; + + len = PyTuple_Size(args); + + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Bus.add_watch requires at least 1 argument"); + return NULL; + } + + callback = PySequence_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) + return NULL; + /* FIXME: thomas: I'm pretty sure the second N needs to be O */ + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + + sigid = gst_bus_add_watch_full (GST_BUS (self->obj), G_PRIORITY_DEFAULT, + (GstBusFunc) bus_func, data, (GDestroyNotify)pyg_destroy_notify); + + return PyInt_FromLong(sigid); +} +%% +override gst_bus_add_signal_watch kwargs +static PyObject * +_wrap_gst_bus_add_signal_watch(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "priority", NULL }; + int priority = G_PRIORITY_DEFAULT; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i:GstBus.add_signal_watch", kwlist, &priority)) + return NULL; + pyg_begin_allow_threads; + gst_bus_add_signal_watch_full(GST_BUS(self->obj), priority); + pyg_end_allow_threads; + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstcaps.override b/gst/gstcaps.override new file mode 100644 index 0000000..77e3d84 --- /dev/null +++ b/gst/gstcaps.override @@ -0,0 +1,474 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Johan Dahlin + * 2005 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + * Benjamin Otte + */ +%% +headers +/* This is a (hopefully) smart hack to allow access to a caps' + * structures without falling into traps when the caps get destroyed + * before the structures get. + * This Hash Table uses the structure PyObjects as keys and the caps + * PyObjects as values. No clue if this is a fast data structure but it + * probably doesn't matter anyway. + */ +static GHashTable *structure_caps_map = NULL; + +static void +pygst_caps_map_add (PyObject *structure, PyObject *caps) +{ + /* we can't have free_on_dealloc stuff in here */ + g_assert (((PyGBoxed *)structure)->free_on_dealloc == FALSE); + g_hash_table_insert (structure_caps_map, structure, caps); +} + +static void +pygst_caps_map_remove_structure (PyObject *structure) +{ + g_hash_table_remove (structure_caps_map, structure); +} + +static gboolean +pygst_caps_map_foreach (gpointer structure, gpointer caps, gpointer match) +{ + PyGBoxed *boxed = structure; + + if (match != caps) + return FALSE; + + /* we can't have free_on_dealloc stuff in here */ + g_assert (boxed->free_on_dealloc == FALSE); + boxed->boxed = gst_structure_copy (boxed->boxed); + boxed->free_on_dealloc = TRUE; + return TRUE; +} + +static void +pygst_caps_map_modified (PyObject *caps) +{ + g_hash_table_foreach_remove (structure_caps_map, pygst_caps_map_foreach, caps); +} + +%% +init + structure_caps_map = g_hash_table_new (g_direct_hash, g_direct_equal); +%% +ignore + gst_caps_new_simple + gst_caps_new_full + gst_caps_set_simple +%% +override gst_caps_get_structure kwargs +static PyObject *pygst_caps_sq_item(PyObject *self, Py_ssize_t i); +static PyObject * +_wrap_gst_caps_get_structure(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "index", NULL }; + int index; + + if (PyErr_Warn(PyExc_DeprecationWarning, "caps.get_structure(i) is deprecated, use caps[i]") < 0) + return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i:GstCaps.get_structure", kwlist, &index)) + return NULL; + return pygst_caps_sq_item (self, index); +} +%% +override gst_caps_new_empty kwargs +static int +_wrap_gst_caps_new_empty(PyGBoxed *self, PyObject *args, PyObject *kwargs) +{ + PyObject* item; + int len, i; + + /* we wrap caps_new, caps_from_string and caps_new_full */ + len = PyTuple_Size(args); + self->gtype = GST_TYPE_CAPS; + self->free_on_dealloc = TRUE; + + if (len == 0) { + /* 0 length creates a new empty caps */ + self->boxed = gst_caps_new_empty(); + } else if (len == 1) { + item = PyTuple_GetItem(args, 0); + /* 1 length is either a string or a structure */ + self->boxed = pygst_caps_from_pyobject (item, NULL); + } else { + /* it's multiple arguments that can all be made to caps */ + GstCaps *append; + self->boxed = gst_caps_new_empty(); + for (i = 0; i < len; i++) + { + item = PyTuple_GetItem(args, i); + append = pygst_caps_from_pyobject (item, NULL); + if (!append) { + gst_caps_unref (self->boxed); + self->boxed = NULL; + break; + } + gst_caps_append (self->boxed, append); + } + } + if (!self->boxed) { + PyErr_SetString(PyExc_TypeError, "wrong arguments when creating GstCaps object"); + return -1; + } + return 0; +} + +%% +override-slot GstCaps.tp_richcompare + +static gboolean +pygst_caps_is_true_subset (GstCaps *caps1, GstCaps *caps2) +{ + GstCaps *tmp; + gboolean ret; + + /* order is important here */ + if (gst_caps_is_any (caps1)) + return FALSE; + if (gst_caps_is_any (caps2)) + return TRUE; + if (gst_caps_is_empty (caps2)) + return FALSE; + if (gst_caps_is_empty (caps1)) + return TRUE; + + tmp = gst_caps_subtract (caps1, caps2); + ret = gst_caps_is_empty (tmp); + gst_caps_unref (tmp); + if (!ret) + return FALSE; + tmp = gst_caps_subtract (caps2, caps1); + ret = gst_caps_is_empty (tmp); + gst_caps_unref (tmp); + return !ret; +} + +static PyObject * +_wrap_gst_caps_tp_richcompare (PyObject *py_caps1, PyObject *py_caps2, int comparison) +{ + GstCaps *caps1, *caps2; + gboolean caps2_is_copy; + PyObject *ret; + + caps1 = pyg_boxed_get (py_caps1, GstCaps); + caps2 = pygst_caps_from_pyobject (py_caps2, &caps2_is_copy); + if (PyErr_Occurred()) { + /* the second arg is not a caps */ + switch (comparison) { + case Py_EQ: + PyErr_Clear(); + ret = Py_False; + Py_INCREF (ret); + return ret; + case Py_NE: + PyErr_Clear(); + ret = Py_True; + Py_INCREF (ret); + return ret; + default: + return NULL; + } + } + + switch (comparison) { + case Py_LT: + ret = pygst_caps_is_true_subset (caps1, caps2) ? Py_True : Py_False; + break; + case Py_LE: + ret = gst_caps_is_subset (caps1, caps2) ? Py_True : Py_False; + break; + case Py_NE: + ret = gst_caps_is_equal (caps1, caps2) ? Py_False : Py_True; + break; + case Py_EQ: + ret = gst_caps_is_equal (caps1, caps2) ? Py_True : Py_False; + break; + case Py_GE: + ret = gst_caps_is_subset (caps2, caps1) ? Py_True : Py_False; + break; + case Py_GT: + ret = pygst_caps_is_true_subset (caps2, caps1) ? Py_True : Py_False; + break; + default: + PyErr_SetString (PyExc_RuntimeError, "invalid comparison operation"); + if (caps2 && caps2_is_copy) + gst_caps_unref (caps2); + return NULL; + } + if (caps2 && caps2_is_copy) + gst_caps_unref (caps2); + + Py_INCREF (ret); + return ret; +} + +%% +override-slot GstCaps.tp_as_number + +/* In this number code, we mimic the Python set.Set datatype. + * The same operations are supported. If you want to have an operation + * supported for caps, add it to Python's Set type first. + */ +#define BINARY_FUNC(name,func) \ +static PyObject * \ +name (PyObject *py_caps1, PyObject *py_caps2) \ +{ \ + GstCaps *caps1, *caps2, *ret; \ + gboolean caps2_is_copy; \ +\ + caps1 = pyg_boxed_get (py_caps1, GstCaps); \ + caps2 = pygst_caps_from_pyobject (py_caps2, &caps2_is_copy); \ + if (PyErr_Occurred()) \ + return NULL; \ + ret = func (caps1, caps2); \ + if (caps2 && caps2_is_copy) \ + gst_caps_unref (caps2); \ + return pyg_boxed_new (GST_TYPE_CAPS, ret, FALSE, TRUE); \ +} + +BINARY_FUNC (pygst_caps_nb_subtract, gst_caps_subtract) +BINARY_FUNC (pygst_caps_nb_and, gst_caps_intersect) +BINARY_FUNC (pygst_caps_nb_or, gst_caps_union) +static GstCaps * +pygst_caps_xor (const GstCaps *caps1, const GstCaps *caps2) +{ + GstCaps *intersect, *_union, *ret; + intersect = gst_caps_intersect (caps1, caps2); + _union = gst_caps_union (caps1, caps2); + ret = gst_caps_subtract (_union, intersect); + gst_caps_unref (_union); + gst_caps_unref (intersect); + gst_caps_do_simplify (ret); + return ret; +} +BINARY_FUNC (pygst_caps_nb_xor, pygst_caps_xor) + +static int +pygst_caps_nb_nonzero (PyObject *py_caps) +{ + GstCaps *caps = pyg_boxed_get (py_caps, GstCaps); + + if (gst_caps_is_empty (caps)) + return 0; + else + return 1; +} + +static int +pygst_caps_nb_coerce (PyObject **py_caps1, PyObject **py_caps2) +{ + GstCaps *caps1, *caps2 = NULL; + gboolean caps1_is_copy, caps2_is_copy; + + caps1 = pygst_caps_from_pyobject (*py_caps1, &caps1_is_copy); + if (!caps1) + goto error; + caps2 = pygst_caps_from_pyobject (*py_caps2, &caps2_is_copy); + if (!caps2) + goto error; + /* if they're not copies, they're caps already */ + if (caps1_is_copy) + *py_caps1 = pyg_boxed_new (GST_TYPE_CAPS, caps1, FALSE, TRUE); + else + Py_INCREF (*py_caps1); + if (caps2_is_copy) + *py_caps2 = pyg_boxed_new (GST_TYPE_CAPS, caps2, FALSE, TRUE); + else + Py_INCREF (*py_caps2); + return 0; + +error: + g_assert (PyErr_Occurred ()); + PyErr_Clear (); + if (caps1 && !caps1_is_copy) + gst_caps_unref (caps1); + return 1; +} + +static PyNumberMethods _wrap_gst_caps_tp_as_number = { + 0, /* nb_add */ + pygst_caps_nb_subtract, /* nb_subtract */ + 0, /* nb_multiply */ + 0, /* nb_divide */ + 0, /* nb_remainder */ + 0, /* nb_divmod */ + 0, /* nb_power */ + 0, /* nb_negative */ + 0, /* nb_positive */ + 0, /* nb_absolute */ + pygst_caps_nb_nonzero, /* nb_nonzero */ + 0, /* nb_invert */ + 0, /* nb_lshift */ + 0, /* nb_rshift */ + pygst_caps_nb_and, /* nb_and */ + pygst_caps_nb_xor, /* nb_xor */ + pygst_caps_nb_or, /* nb_or */ + pygst_caps_nb_coerce, /* nb_coerce */ + 0, /* nb_int */ + 0, /* nb_long */ + 0, /* nb_float */ + 0, /* nb_oct */ + 0, /* nb_hex */ + 0, /* nb_inplace_add */ + 0, /* nb_inplace_subtract */ + 0, /* nb_inplace_multiply */ + 0, /* nb_inplace_divide */ + 0, /* nb_inplace_remainder */ + 0, /* nb_inplace_power */ + 0, /* nb_inplace_lshift */ + 0, /* nb_inplace_rshift */ + 0, /* nb_inplace_and */ + 0, /* nb_inplace_xor */ + 0, /* nb_inplace_or */ + 0, /* nb_floor_divide */ + 0, /* nb_true_divide */ + 0, /* nb_inplace_floor_divide */ + 0, /* nb_inplace_true_divide */ +}; +%% +override-slot GstCaps.tp_as_sequence +static Py_ssize_t +pygst_caps_sq_length(PyObject *self) +{ + GstCaps *caps = pyg_boxed_get (self, GstCaps); + return gst_caps_get_size(caps); +} + +static PyObject * +pygst_caps_sq_item(PyObject *self, Py_ssize_t i) +{ + GstCaps *caps = pyg_boxed_get (self, GstCaps); + GstStructure *structure; + PyObject *ret; + + if (i < 0 || i >= gst_caps_get_size(caps)) { + PyErr_SetString(PyExc_IndexError, "list index out of range"); + return NULL; + } + + structure = gst_caps_get_structure(caps, i); + + /* pyg_boxed_new handles NULL checking */ + ret = pyg_boxed_new(GST_TYPE_STRUCTURE, + structure, + FALSE, FALSE); + if (ret) + pygst_caps_map_add (ret, self); + return ret; +} + +/* FIXME: This syntax sucks */ +static PyObject * +pygst_caps_sq_slice(PyObject *self, Py_ssize_t start, Py_ssize_t end) +{ + GstCaps *caps = pyg_boxed_get (self, GstCaps); + GstCaps *ret = gst_caps_new_empty (); + int i; + + if (start < 0) + start = 0; + if (end > gst_caps_get_size (caps)) + end = gst_caps_get_size (caps); + + for (i = start; i < end; i++) + gst_caps_append_structure (ret, gst_structure_copy (gst_caps_get_structure (caps, i))); + + return pyg_boxed_new(GST_TYPE_CAPS, ret, FALSE, TRUE); +} + +static PySequenceMethods _wrap_gst_caps_tp_as_sequence = { + pygst_caps_sq_length, + NULL, /* not allowed for sets, use | instead of + */ + NULL, /* doesn't make sense, because it'd still be the same */ + pygst_caps_sq_item, + pygst_caps_sq_slice, + NULL, /* doesn't make sense, you can only append */ + NULL, /* doesn't make sense, you can only append */ + NULL, /* doesn't make sense really, unless you use is_subset */ + NULL, /* not allowed for sets, use | instead of + */ + NULL /* doesn't make sense, because it'd still be the same */ +}; +%% +override-slot GstCaps.tp_dealloc +static void +_wrap_gst_caps_tp_dealloc (PyObject *self) +{ + PyGBoxed *boxed = (PyGBoxed *) self; + + if (boxed->free_on_dealloc && boxed->boxed) { + pygst_caps_map_modified (self); + GST_DEBUG ("unreffing caps %" GST_PTR_FORMAT " at %p with refcount %d", + boxed->boxed, boxed->boxed, GST_CAPS_REFCOUNT (boxed->boxed)); + gst_caps_unref (boxed->boxed); + } + + self->ob_type->tp_free((PyObject *)self); +} + +%% +override-slot GstCaps.tp_str +static PyObject * +_wrap_gst_caps_tp_str(PyGObject *self) +{ + gchar *tmp; + PyObject *retval; + + tmp = gst_caps_to_string((GstCaps*)self->obj); + retval = PyString_FromString(tmp); + g_free(tmp); + + return retval; +} + +%% +override-attr GstCaps.__refcount__ + +static PyObject * +_wrap_gst_caps__get___refcount__(PyGObject *self, void *closure) +{ + return PyInt_FromLong(GST_CAPS_REFCOUNT(self->obj)); +} + +%% +override gst_caps_append_structure kwargs +static PyObject * +_wrap_gst_caps_append_structure(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "structure", NULL }; + PyObject *py_structure; + GstStructure *structure = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GstCaps.append_structure", kwlist, &py_structure)) + return NULL; + if (pyg_boxed_check(py_structure, GST_TYPE_STRUCTURE)) + structure = gst_structure_copy(pyg_boxed_get(py_structure, GstStructure)); + else { + PyErr_SetString(PyExc_TypeError, "structure should be a GstStructure"); + return NULL; + } + pyg_begin_allow_threads; + gst_caps_append_structure(pyg_boxed_get(self, GstCaps), structure); + pyg_end_allow_threads; + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstelement.override b/gst/gstelement.override new file mode 100644 index 0000000..e8dc0ab --- /dev/null +++ b/gst/gstelement.override @@ -0,0 +1,637 @@ +/* -*- Mode: C; c-basic-offset: 8 -*- */ +/* gst-python + * Copyright (C) 2005 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +ignore + gst_element_get + gst_element_set + gst_element_get_property + gst_element_set_property +%% +override gst_element_get_pad_template args +static PyObject * +_wrap_gst_element_get_pad_template(PyGObject *self, PyObject *args) +{ + PyObject *ret; + gchar *name; + GstPadTemplate *tmpl; + + if (!PyArg_ParseTuple(args, "s:GstElement.get_pad_template", &name)) + return NULL; + + pyg_begin_allow_threads; + tmpl = gst_element_class_get_pad_template + (GST_ELEMENT_GET_CLASS (self->obj), name); + pyg_end_allow_threads; + + if (tmpl) { + ret = pygobject_new (G_OBJECT (tmpl)); + } else { + ret = Py_None; + Py_INCREF (ret); + } + + return ret; +} +%% +override gst_element_set_state kwargs +static PyObject * +_wrap_gst_element_set_state(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "state", NULL }; + PyObject *py_state = NULL; + GstState state; + gint ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GstElement.set_state", kwlist, &py_state)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_STATE, py_state, (gint *)&state)) + return NULL; + + pyg_begin_allow_threads; + + ret = gst_element_set_state(GST_ELEMENT(self->obj), state); + + pyg_end_allow_threads; + + return pyg_enum_from_gtype(GST_TYPE_STATE_CHANGE_RETURN, ret); +} +%% +override gst_element_get_state kwargs +static PyObject * +_wrap_gst_element_get_state(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "timeout", NULL }; + GstState state; + GstState pending; + GstStateChangeReturn ret; + GstClockTime timeout = GST_CLOCK_TIME_NONE; + PyObject *tuple; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "|K:GstElement.get_state", kwlist, + &timeout)) { + PyErr_SetString(PyExc_RuntimeError, "Timeout not specified correctly"); + return NULL; + } + + pyg_begin_allow_threads; + + ret = gst_element_get_state(GST_ELEMENT (self->obj), &state, &pending, + timeout); + + pyg_end_allow_threads; + + tuple = Py_BuildValue("(OOO)", + pyg_enum_from_gtype (GST_TYPE_STATE_CHANGE_RETURN, ret), + pyg_enum_from_gtype (GST_TYPE_STATE, state), + pyg_enum_from_gtype (GST_TYPE_STATE, pending)); + + return tuple; +} +%% +override gst_element_link_many args +static PyObject * +_wrap_gst_element_link_many(PyObject *self, PyObject *args) +{ + PyGObject *element, *element2; + int i, len; + + len = PyTuple_Size(args); + if (len < 2) + { + PyErr_SetString(PyExc_TypeError, "gst.element_link_many requires at least two argument"); + return NULL; + } + + + for (i = 0; i < len; i++) + { + element = (PyGObject*)PyTuple_GetItem(args, i); + if (!pygobject_check(element, &PyGstElement_Type)) + { + PyErr_SetString(PyExc_TypeError, "argument must be a GstElement"); + return NULL; + } + } + + /* Mimic the real gst_element_link_many */ + element = (PyGObject*)PyTuple_GetItem(args, 0); + element2 = (PyGObject*)PyTuple_GetItem(args, 1); + + i = 2; + while (1) { + gboolean res; + + pyg_begin_allow_threads; + res = gst_element_link(GST_ELEMENT(element->obj), + GST_ELEMENT(element2->obj)); + pyg_end_allow_threads; + + if (!res) + { + PyErr_Format(PyGstExc_LinkError, + "failed to link %s with %s", + GST_ELEMENT_NAME(element->obj), + GST_ELEMENT_NAME(element2->obj)); + return NULL; + } + + if (i >= len) + break; + + element = element2; + element2 = (PyGObject*)PyTuple_GetItem(args, i); + + i++; + } + + Py_INCREF(Py_True); + return Py_True; +} + + +%% +override gst_element_link kwargs +static PyObject * +_wrap_gst_element_link(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "dest", "filtercaps", NULL }; + PyGObject *dest; + PyObject *py_caps = NULL; + int ret; + GstCaps *caps = NULL; + gboolean caps_is_copy; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!|O:GstElement.link", + kwlist, &PyGstElement_Type, &dest, &py_caps)) + return NULL; + if (py_caps == NULL) + caps = NULL; + else { + caps = pygst_caps_from_pyobject (py_caps, &caps_is_copy); + if (caps == NULL) + /* an error happened, propagate up */ + return NULL; + } + + pyg_begin_allow_threads; + ret = gst_element_link_filtered(GST_ELEMENT(self->obj), GST_ELEMENT(dest->obj), caps); + pyg_end_allow_threads; + + if (caps && caps_is_copy) + gst_caps_unref (caps); + if (!ret) { + PyErr_Format(PyGstExc_LinkError, + "failed to link %s with %s", + GST_ELEMENT_NAME(self->obj), + GST_ELEMENT_NAME(dest->obj)); + return NULL; + } + return PyBool_FromLong(ret); +} + +%% +override gst_element_link_filtered kwargs +static PyObject * +_wrap_gst_element_link_filtered(PyGObject *self, PyObject *args, + PyObject *kwargs) +{ + if (PyErr_Warn(PyExc_DeprecationWarning, "element.link_filtered is deprecated, use element.link") < 0) + return NULL; + return _wrap_gst_element_link (self, args, kwargs); +} + +%% +override gst_element_link_pads kwargs +static gboolean +pad_name_from_object (PyObject *object, const gchar **name) +{ + if (object == Py_None) { + *name = NULL; + return TRUE; + } else if (PyString_Check (object)) { + *name = PyString_AsString (object); + return TRUE; + } else if (pygobject_check (object, &PyGstPad_Type)) { + GstObject *obj = GST_OBJECT (pygobject_get (object)); + pyg_begin_allow_threads; + *name = gst_object_get_name (obj); + pyg_end_allow_threads; + return TRUE; + } + PyErr_SetString(PyExc_TypeError, "argument could not be converted to a pad"); + return FALSE; +} + +static PyObject * +_wrap_gst_element_link_pads(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "srcpadname", "dest", "destpadname", NULL }; + const char *srcpadname, *destpadname; + PyGObject *dest; + PyObject *srcpad, *destpad; + int ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "OO!O:GstElement.link_pads", kwlist, + &srcpad, &PyGstElement_Type, &dest, + &destpad)) + return NULL; + if (!pad_name_from_object (srcpad, &srcpadname) || + !pad_name_from_object (destpad, &destpadname)) + return NULL; + + pyg_begin_allow_threads; + ret = gst_element_link_pads(GST_ELEMENT(self->obj), srcpadname, + GST_ELEMENT(dest->obj), destpadname); + pyg_end_allow_threads; + if (!ret) { + PyErr_SetString(PyGstExc_LinkError, "link failed"); + return NULL; + } + return PyBool_FromLong(ret); + +} + +%% +override gst_element_link_pads_filtered kwargs +static PyObject * +_wrap_gst_element_link_pads_filtered(PyGObject *self, PyObject *args, + PyObject *kwargs) +{ + static char *kwlist[] = { "srcpadname", "dest", "destpadname", + "filtercaps", NULL }; + char *srcpadname, *destpadname; + PyGObject *dest; + int ret; + PyObject *py_filtercaps; + GstCaps *filtercaps = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "sO!sO:GstElement.link_pads_filtered", + kwlist, &srcpadname, &PyGstElement_Type, + &dest, &destpadname, &py_filtercaps)) + return NULL; + if (pyg_boxed_check(py_filtercaps, GST_TYPE_CAPS)) + filtercaps = pyg_boxed_get(py_filtercaps, GstCaps); + else { + PyErr_SetString(PyExc_TypeError, "filtercaps should be a GstCaps"); + return NULL; + } + pyg_begin_allow_threads; + ret = gst_element_link_pads_filtered(GST_ELEMENT(self->obj), srcpadname, + GST_ELEMENT(dest->obj), destpadname, + filtercaps); + pyg_end_allow_threads; + if (!ret) { + PyErr_SetString(PyGstExc_LinkError, "link failed"); + return NULL; + } + return PyBool_FromLong(ret); +} + +%% +override gst_element_unlink_many args +static PyObject * +_wrap_gst_element_unlink_many(PyObject *self, PyObject *args) +{ + PyGObject *element, *element2; + int i, len; + + len = PyTuple_Size(args); + if (len < 2) + { + PyErr_SetString(PyExc_TypeError, "gst.element_unlink_many requires at least two arguments"); + return NULL; + } + + + for (i = 0; i < len; i++) + { + element = (PyGObject*)PyTuple_GetItem(args, i); + if (!pygobject_check(element, &PyGstElement_Type)) + { + PyErr_SetString(PyExc_TypeError, "argument must be a GstElement"); + return NULL; + } + } + + /* Mimic the real gst_element_unlink_many */ + element = (PyGObject*)PyTuple_GetItem(args, 0); + element2 = (PyGObject*)PyTuple_GetItem(args, 1); + + i = 2; + while (1) { + pyg_begin_allow_threads; + gst_element_unlink(GST_ELEMENT(element->obj), GST_ELEMENT(element2->obj)); + pyg_end_allow_threads; + + if (i >= len) + break; + + element = element2; + element2 = (PyGObject*)PyTuple_GetItem(args, i); + + i++; + } + Py_INCREF(Py_None); + return Py_None; +} +%% +override gst_element_send_event kwargs +static PyObject * +_wrap_gst_element_send_event(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "event", NULL }; + PyObject *py_event; + int ret; + GstEvent *event = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GstElement.send_event", kwlist, &py_event)) + return NULL; + if (pygstminiobject_check (py_event, &PyGstEvent_Type)) { + event = GST_EVENT (pygstminiobject_get (py_event)); + } else { + PyErr_SetString(PyExc_TypeError, "event should be a GstEvent"); + return NULL; + } + + /* The pipeline unrefs the event, but we want to keep the ownership */ + gst_event_ref(event); + + pyg_begin_allow_threads; + ret = gst_element_send_event(GST_ELEMENT(self->obj), event); + pyg_end_allow_threads; + + return PyBool_FromLong(ret); +} +%% +override gst_element_query_position args +static PyObject * +_wrap_gst_element_query_position (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + gboolean res; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + pyg_begin_allow_threads; + res = gst_element_query_position(GST_ELEMENT (self->obj), (GstFormat*) &format, &cur); + pyg_end_allow_threads; + + if (!res) { + PyErr_Format(PyGstExc_QueryError, + "query failed"); + return NULL; + } + + return Py_BuildValue("(LO)", cur, + pyg_enum_from_gtype(GST_TYPE_FORMAT, format)); +} +%% +override gst_element_query_duration args +static PyObject * +_wrap_gst_element_query_duration (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + gboolean res; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + pyg_begin_allow_threads; + res = gst_element_query_duration(GST_ELEMENT (self->obj), (GstFormat*) &format, &cur); + pyg_end_allow_threads; + + if (!res) { + PyErr_Format(PyGstExc_QueryError, + "query failed"); + return NULL; + } + + return Py_BuildValue("(LO)", cur, + pyg_enum_from_gtype(GST_TYPE_FORMAT, format)); +} +%% +override gst_element_query_convert kwargs +static PyObject * +_wrap_gst_element_query_convert (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "fromformat", "fromvalue", "destformat", NULL }; + PyObject *pfromformat, *pdestformat; + GstFormat srcformat, destformat; + gint64 fromval, dstval; + gboolean res; + + /* Input : src_format, src_val, dst_format */ + /* Returns : dst_format, dst_val OR None */ + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "OLO:GstElement.query_convert", + kwlist, &pfromformat, &fromval, &pdestformat)) + return NULL; + + if (pyg_enum_get_value(GST_TYPE_FORMAT, pfromformat, (gint *) &srcformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + if (pyg_enum_get_value(GST_TYPE_FORMAT, pdestformat, (gint *) &destformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + pyg_begin_allow_threads; + res = gst_element_query_convert (GST_ELEMENT(self->obj), + srcformat, fromval, + &destformat, &dstval); + pyg_end_allow_threads; + + if (!res) { + Py_INCREF(Py_None); + return Py_None; + } + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, destformat), + dstval); +} +%% +override gst_element_get_query_types noargs +static PyObject * +_wrap_gst_element_get_query_types (PyGObject *self) +{ + PyObject *ret; + PyObject *item; + int i; + GstQueryType *tab; + + pyg_begin_allow_threads; + tab = (GstQueryType*) gst_element_get_query_types(GST_ELEMENT(self->obj)); + pyg_end_allow_threads; + if (tab == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + + ret = PyList_New(0); + for (i = 0; tab[i] != 0; i++) { + item = pyg_enum_from_gtype (GST_TYPE_QUERY_TYPE, tab[i]); + PyList_Append(ret, item); + } + + return ret; +} +%% +override-slot GstElement.tp_iter +static PyObject * +_wrap_gst_element_tp_iter(PyGObject *self) +{ + return _wrap_gst_element_iterate_pads(self); +} +%% +override gst_element_get_pad_template_list noargs +static PyObject * +_wrap_gst_element_get_pad_template_list(PyGObject *self) +{ + PyObject *ret; + GList *res = NULL; + guint i; + + pyg_begin_allow_threads; + res = gst_element_class_get_pad_template_list + (GST_ELEMENT_GET_CLASS (self->obj)); + pyg_end_allow_threads; + + if (res) { + i = g_list_length (res); + ret = PyList_New (i); + for (i = 0 ; res ; res = g_list_next (res), i++) { + GstPadTemplate * tmpl = (GstPadTemplate *) res->data; + PyList_SetItem (ret, i, pygobject_new (G_OBJECT (tmpl))); + } + } else { + ret = Py_None; + Py_INCREF (ret); + } + + return ret; +} +%% +override GstElement__proxy_do_request_new_pad +static GstPad* +_wrap_GstElement__proxy_do_request_new_pad(GstElement *self, GstPadTemplate*templ, const gchar*name) +{ + PyGILState_STATE __py_state; + PyObject *py_self; + PyObject *py_templ = NULL; + PyObject *py_name; + GstPad* retval; + PyObject *py_retval; + PyObject *py_args; + PyObject *py_method; + + __py_state = pyg_gil_state_ensure(); + py_self = pygobject_new((GObject *) self); + if (!py_self) { + if (PyErr_Occurred()) + PyErr_Print(); + pyg_gil_state_release(__py_state); + return NULL; + } + if (templ) + py_templ = pygobject_new((GObject *) templ); + else { + Py_INCREF(Py_None); + py_templ = Py_None; + } + + if (name == NULL) { + Py_INCREF(Py_None); + py_name = Py_None; + } else { + py_name = PyString_FromString(name); + if (!py_name) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_templ); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return NULL; + } + } + + py_args = PyTuple_New(2); + PyTuple_SET_ITEM(py_args, 0, py_templ); + PyTuple_SET_ITEM(py_args, 1, py_name); + + py_method = PyObject_GetAttrString(py_self, "do_request_new_pad"); + if (!py_method) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_args); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return NULL; + } + py_retval = PyObject_CallObject(py_method, py_args); + if (!py_retval) { + if (PyErr_Occurred()) + PyErr_Print(); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return NULL; + } + if (!PyObject_TypeCheck(py_retval, &PyGObject_Type)) { + PyErr_SetString(PyExc_TypeError, "retval should be a GObject"); + PyErr_Print(); + Py_DECREF(py_retval); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + return NULL; + } + retval = (GstPad*) pygobject_get(py_retval); + g_object_ref((GObject *) retval); + + + Py_DECREF(py_retval); + Py_DECREF(py_method); + Py_DECREF(py_args); + Py_DECREF(py_self); + pyg_gil_state_release(__py_state); + + return retval; +} diff --git a/gst/gstelementfactory.override b/gst/gstelementfactory.override new file mode 100644 index 0000000..7d13189 --- /dev/null +++ b/gst/gstelementfactory.override @@ -0,0 +1,153 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* + * gstelementfactory.override - gstreamer element factory override + * Copyright (C) 2005 Alessandro Decina + * + * Authors: + * Alessandro Decina + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +%% +override gst_element_factory_make kwargs +static PyObject * +_wrap_gst_element_factory_make(PyObject *self, PyObject *args, PyObject *kwargs){ + static char *kwlist[] = { "factoryname", "name", NULL }; + char *factoryname, *name = NULL; + PyObject *py_ret; + GstElement *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|z:element_factory_make", kwlist, &factoryname, &name)) + return NULL; + + pyg_begin_allow_threads; + ret = gst_element_factory_make(factoryname, name); + pyg_end_allow_threads; + + if (ret == NULL) { + PyErr_SetString(PyGstExc_ElementNotFoundError, factoryname); + return NULL; + } + py_ret = pygobject_new((GObject *)ret); + g_object_unref((GObject *)ret); + return py_ret; +} +%% +override gst_element_factory_get_static_pad_templates noargs +static PyObject * +_wrap_gst_element_factory_get_static_pad_templates(PyGObject *self) +{ + const GList *list; + GList *l; + PyObject *py_list; + int i = 0; + + pyg_begin_allow_threads; + list = gst_element_factory_get_static_pad_templates (GST_ELEMENT_FACTORY (self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(g_list_length ((GList*) list)); + + for (l = (GList*) list; l ; l = g_list_next(l), i++) { + GstStaticPadTemplate *templ = (GstStaticPadTemplate*) l->data; + PyList_SetItem(py_list, i, pyg_pointer_new(GST_TYPE_STATIC_PAD_TEMPLATE, (gpointer) templ)); + } + return py_list; +} +%% +override gst_element_factory_list_get_elements kwargs +static PyObject * +_wrap_gst_element_factory_list_get_elements(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", "minrank", NULL }; + PyObject *py_minrank; + GstRank minrank; + GstElementFactoryListType listype; + GList *res, *tmp; + PyObject *pyres; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"KO:element_factory_list_get_elements", kwlist, + &listype, &py_minrank)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_RANK, py_minrank, (gint *)&minrank)) + return NULL; + pyg_begin_allow_threads; + res = gst_element_factory_list_get_elements(listype, minrank); + pyg_end_allow_threads; + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + GstElementFactory *fact = (GstElementFactory*) tmp->data; + PyObject *ltmp = pygobject_new (G_OBJECT (fact)); + + PyList_Append(pyres, ltmp); + } + gst_plugin_feature_list_free (res); + + return pyres; +} +%% +override gst_element_factory_list_filter kwargs +static PyObject * +_wrap_gst_element_factory_list_filter(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "list", "caps", "direction", "subsetonly", NULL }; + PyObject *py_list, *py_caps, *py_direction; + GList *inlist = NULL; + GList *res, *tmp; + GstCaps *caps; + GstPadDirection direction; + gboolean subsetonly, caps_is_copy; + PyObject *pyres; + guint i, n; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"OOOi:element_factory_list_filter", kwlist, + &py_list, &py_caps, &py_direction, &subsetonly)) + return NULL; + if (!PyList_Check (py_list)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_PAD_DIRECTION, py_direction, (gint *)&direction)) + return NULL; + caps = pygst_caps_from_pyobject(py_caps, &caps_is_copy); + n = PyList_GET_SIZE(py_list); + for (i = 0; i < n; i++) { + /* Get Object */ + inlist = g_list_append(inlist, pygobject_get (PyList_GET_ITEM (py_list, i))); + } + + pyg_begin_allow_threads; + res = gst_element_factory_list_filter(inlist, caps, direction, subsetonly); + pyg_end_allow_threads; + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + GstElementFactory *fact = (GstElementFactory*) tmp->data; + PyObject *ltmp = pygobject_new (G_OBJECT (fact)); + + PyList_Append(pyres, ltmp); + } + + gst_plugin_feature_list_free (res); + if (caps && caps_is_copy) + gst_caps_unref (caps); + if (inlist) + g_list_free (inlist); + + return pyres; +} + + diff --git a/gst/gstevent.override b/gst/gstevent.override new file mode 100644 index 0000000..c79526c --- /dev/null +++ b/gst/gstevent.override @@ -0,0 +1,331 @@ +/* -*- Mode: C; ; c-file-style: "k&r"; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +override gst_event_get_structure noargs +static PyObject * +_wrap_gst_event_get_structure(PyGstMiniObject *self) +{ + GstStructure *ret; + + ret = (GstStructure *) gst_event_get_structure(GST_EVENT(self->obj)); + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_STRUCTURE, ret, TRUE, TRUE); +} + +%% +override-slot GstEvent.tp_repr +static PyObject * +_wrap_gst_event_tp_repr (PyGObject *self) +{ + char *buf; + PyObject *retval; + GstEvent *event; + + event = GST_EVENT(self->obj); + + buf = g_strdup_printf ("", + gst_event_type_get_name (event->type), (long) self->obj); + + retval = PyString_FromString(buf); + g_free(buf); + return retval; +} +%% +override gst_event_parse_new_segment noargs +static PyObject * +_wrap_gst_event_parse_new_segment (PyGstMiniObject *self) +{ + gboolean update; + gdouble rate; + GstFormat format; + gint64 start_value, stop_value, base; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_NEWSEGMENT) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'NewSegment' event"); + return NULL; + } + + gst_event_parse_new_segment (GST_EVENT(self->obj), &update, &rate, &format, + &start_value, &stop_value, &base); + + return Py_BuildValue("(OdOLLL)", + PyBool_FromLong(update), + rate, pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + start_value, stop_value, base); +} +%% +override gst_event_parse_tag noargs +static PyObject * +_wrap_gst_event_parse_tag (PyGstMiniObject *self) +{ + PyObject *ret; + GstTagList *taglist; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_TAG) { + PyErr_SetString(PyExc_TypeError, "Event is not an 'Tag' event"); + return NULL; + } + + gst_event_parse_tag (GST_EVENT(self->obj), &taglist); + + ret = pyg_boxed_new (GST_TYPE_TAG_LIST, taglist, TRUE, TRUE); + + return ret; +} +%% +override gst_event_parse_qos noargs +static PyObject * +_wrap_gst_event_parse_qos (PyGstMiniObject *self) +{ + gdouble proportion; + GstClockTimeDiff diff; + GstClockTime timestamp; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_QOS) { + PyErr_SetString(PyExc_TypeError, "Event is not an 'Qos' event"); + return NULL; + } + + gst_event_parse_qos (GST_EVENT(self->obj), &proportion, + &diff, ×tamp); + + return Py_BuildValue("(dLK)", proportion, diff, timestamp); +} +%% +override gst_event_parse_seek noargs +static PyObject * +_wrap_gst_event_parse_seek (PyGstMiniObject *self) +{ + gdouble rate; + GstFormat format; + GstSeekFlags flags; + GstSeekType cur_type; + gint64 cur; + GstSeekType stop_type; + gint64 stop; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_SEEK) { + PyErr_SetString(PyExc_TypeError, "Event is not an 'Seek' event"); + return NULL; + } + + gst_event_parse_seek (GST_EVENT(self->obj), &rate, &format, &flags, + &cur_type, &cur, &stop_type, &stop); + + return Py_BuildValue("(dOOOLOL)", + rate, + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + pyg_flags_from_gtype (GST_TYPE_SEEK_FLAGS, flags), + pyg_enum_from_gtype (GST_TYPE_SEEK_TYPE, cur_type), + cur, + pyg_enum_from_gtype (GST_TYPE_SEEK_TYPE, stop_type), + stop); +} +%% +override gst_event_parse_buffer_size noargs +static PyObject * +_wrap_gst_event_parse_buffer_size (PyGstMiniObject *self) +{ + GstFormat format; + gint64 minsize; + gint64 maxsize; + gboolean async; + + if (GST_EVENT_TYPE (self->obj) != GST_EVENT_BUFFERSIZE) { + PyErr_SetString(PyExc_TypeError, "Event is not an 'BufferSize' event"); + return NULL; + } + + gst_event_parse_buffer_size (GST_EVENT (self->obj), + &format, &minsize, + &maxsize, &async); + + return Py_BuildValue("(OLLO)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, format), + minsize, maxsize, + PyBool_FromLong(async)); +} +%% +override gst_event_parse_latency noargs +static PyObject * +_wrap_gst_event_parse_latency (PyGstMiniObject * self) +{ + GstClockTime ctime = GST_CLOCK_TIME_NONE; + + if (GST_EVENT_TYPE (self->obj) != GST_EVENT_LATENCY) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'latency' event"); + return NULL; + } + + gst_event_parse_latency (GST_EVENT (self->obj), &ctime); + + return PyLong_FromUnsignedLongLong(ctime); +} +%% +override gst_event_new_navigation kwargs +static PyObject * +_wrap_gst_event_new_navigation(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "structure", NULL }; + PyObject *py_structure, *py_ret; + GstEvent *ret; + GstStructure *structure = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:event_new_navigation", kwlist, &py_structure)) + return NULL; + if (pyg_boxed_check(py_structure, GST_TYPE_STRUCTURE)) + structure = pyg_boxed_get(py_structure, GstStructure); + else { + PyErr_SetString(PyExc_TypeError, "structure should be a GstStructure"); + return NULL; + } + pyg_begin_allow_threads; + ret = gst_event_new_navigation(gst_structure_copy(structure)); + pyg_end_allow_threads; + py_ret = pygstminiobject_new((GstMiniObject *)ret); + if (ret != NULL) + gst_mini_object_unref((GstMiniObject *)ret); + return py_ret; +} +%% +override gst_event_new_custom kwargs +static PyObject * +_wrap_gst_event_new_custom(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", "structure", NULL }; + PyObject *py_type = NULL, *py_structure, *py_ret; + GstEvent *ret; + GstStructure *structure = NULL; + GstEventType type; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"OO:event_new_custom", kwlist, &py_type, &py_structure)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_EVENT_TYPE, py_type, (gint *)&type)) + return NULL; + if (pyg_boxed_check(py_structure, GST_TYPE_STRUCTURE)) + structure = pyg_boxed_get(py_structure, GstStructure); + else { + PyErr_SetString(PyExc_TypeError, "structure should be a GstStructure"); + return NULL; + } + pyg_begin_allow_threads; + ret = gst_event_new_custom(type, gst_structure_copy(structure)); + pyg_end_allow_threads; + py_ret = pygstminiobject_new((GstMiniObject *)ret); + if (ret != NULL) + gst_mini_object_unref((GstMiniObject *)ret); + return py_ret; +} +%% +override gst_event_new_tag kwargs +static PyObject * +_wrap_gst_event_new_tag(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "taglist", NULL }; + GstTagList *taglist = NULL; + PyObject *py_taglist, *py_ret; + GstEvent *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:event_new_tag", kwlist, &py_taglist)) + return NULL; + if (pyg_boxed_check(py_taglist, GST_TYPE_TAG_LIST)) + taglist = pyg_boxed_get(py_taglist, GstTagList); + else { + PyErr_SetString(PyExc_TypeError, "taglist should be a GstTagList"); + return NULL; + } + pyg_begin_allow_threads; + ret = gst_event_new_tag(gst_tag_list_copy(taglist)); + pyg_end_allow_threads; + py_ret = pygstminiobject_new((GstMiniObject *)ret); + if (ret != NULL) + gst_mini_object_unref((GstMiniObject *)ret); + return py_ret; +} +%% +override gst_event_parse_step noargs +static PyObject * +_wrap_gst_event_parse_step (PyGstMiniObject * self) +{ + GstFormat format; + guint64 amount; + gdouble rate; + gboolean flush, intermediate; + + if (GST_EVENT_TYPE (self->obj) != GST_EVENT_STEP) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'step' event"); + return NULL; + } + + gst_event_parse_step (GST_EVENT (self->obj), &format, &amount, &rate, + &flush, &intermediate); + + return Py_BuildValue("OKdOO", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + amount, rate, + PyBool_FromLong(flush), + PyBool_FromLong(intermediate)); +} +%% +override gst_event_parse_new_segment_full noargs +static PyObject * +_wrap_gst_event_parse_new_segment_full (PyGstMiniObject *self) +{ + gboolean update; + gdouble rate, applied_rate; + GstFormat format; + gint64 start_value, stop_value, base; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_NEWSEGMENT) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'NewSegment' event"); + return NULL; + } + + gst_event_parse_new_segment_full (GST_EVENT(self->obj), &update, &rate, + &applied_rate, &format, + &start_value, &stop_value, &base); + + return Py_BuildValue("(OddOLLL)", + PyBool_FromLong(update), + rate, applied_rate, pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + start_value, stop_value, base); +} +%% +override gst_event_parse_sink_message noargs +static PyObject * +_wrap_gst_event_parse_sink_message (PyGstMiniObject *self) +{ + GstMessage *message; + + if (GST_EVENT_TYPE(self->obj) != GST_EVENT_SINK_MESSAGE) { + PyErr_SetString(PyExc_TypeError, "Event is not a 'SinkMessage' event"); + return NULL; + } + + gst_event_parse_sink_message (GST_EVENT(self->obj), &message); + + if (message) + return pygstminiobject_new (GST_MINI_OBJECT (message)); + + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstlibs.override b/gst/gstlibs.override new file mode 100644 index 0000000..4280e13 --- /dev/null +++ b/gst/gstlibs.override @@ -0,0 +1,402 @@ +/* -*- Mode: C; ; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +ignore + gst_controller_new + gst_controller_*_valist + gst_controller_remove_properties_list + +%% +override gst_controller_set args +static PyObject * +_wrap_gst_controller_set (PyGObject *self, PyObject *args) +{ + GstController *controller = (GstController *) self->obj; + gchar *param_name; + GParamSpec *pspec = NULL; + GstClockTime timestamp; + GValue value = { 0, }; + PyObject *pvalue; + gboolean res; + + if (!PyArg_ParseTuple(args, "sLO:GstController.set", + ¶m_name, ×tamp, &pvalue)) + return NULL; + + if (!(pspec = g_object_class_find_property(G_OBJECT_GET_CLASS (controller->object), + (const gchar*) param_name))) { + PyErr_SetString (PyExc_TypeError, + "The controlled object doesn't have the given property"); + return NULL; + } + + g_value_init (&value, pspec->value_type); + + if (pyg_value_from_pyobject (&value, pvalue)) { + PyErr_SetString (PyExc_TypeError, + "Couldn't convert the given value to the good type"); + return NULL; + } + + res = gst_controller_set (controller, param_name, timestamp, &value); + if (res) { + Py_INCREF (Py_True); + return Py_True; + } + Py_INCREF (Py_False); + return Py_False; +} +%% +override gst_controller_get kwargs +static PyObject * +_wrap_gst_controller_get (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + GstController *controller = (GstController *) self->obj; + static char *kwlist[] = { "propertyname", "timestamp", NULL }; + gchar *propertyname; + GstClockTime timestamp; + GValue *value = NULL; + PyObject *pyvalue; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, + "sL:GstController.get", + kwlist, &propertyname, ×tamp)) + return NULL; + + value = gst_controller_get (controller, propertyname, timestamp); + if (value) { + pyvalue = pyg_value_as_pyobject (value, FALSE); + return pyvalue; + } + Py_INCREF (Py_None); + return Py_None; +} +%% +override gst_controller_new_list args +static int +_wrap_gst_controller_new_list(PyGObject *self, PyObject *args) +{ + PyObject *target_pyobj; + PyGObject *target; + gint len; + GList *list = NULL; + + if ((len = PyTuple_Size(args)) < 1) { + PyErr_SetString(PyExc_TypeError, "Controller requires at least a target object"); + return -1; + } + + target_pyobj = PyTuple_GetItem(args, 0); + if (!PyObject_TypeCheck(target_pyobj, &PyGObject_Type)) { + PyErr_Format(PyExc_TypeError, + "argument 1 must be %s, not %s", + PyGObject_Type.tp_name, + target_pyobj == Py_None ? "None" : target_pyobj->ob_type->tp_name); + return -1; + } + + target = (PyGObject *) target_pyobj; + + if (len > 1) + while (len-- > 1) { + PyObject *temp; + gchar *str; + + temp = PyTuple_GetItem(args, len); + str = PyString_AsString(temp); + if (str == NULL) { + g_list_free (list); + return -1; + } + GST_INFO("prepending %s [%d]", str, len); + list = g_list_prepend(list, str); + } + + self->obj = (GObject *) gst_controller_new_list(target->obj, list); + g_list_free (list); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstController object"); + return -1; + } + + pygobject_register_wrapper((PyObject *) self); + return 0; +} +%% +override gst_controller_remove_properties args +static PyObject * +_wrap_gst_controller_remove_properties (PyGObject *self, PyObject *args) +{ + GstController *controller = (GstController *) self->obj; + gint len; + GList *list = NULL; + gboolean res = FALSE; + PyObject *pret; + + if ((len = PyTuple_Size(args)) < 1) { + PyErr_SetString(PyExc_TypeError, "Please give at least one property name to remove"); + return NULL; + } + + while (len--) { + PyObject *temp; + gchar *str; + + temp = PyTuple_GetItem(args, len); + str = PyString_AsString(temp); + if (str == NULL) { + g_list_free (list); + return NULL; + } + GST_INFO("prepending %s [%d]", str, len); + list = g_list_prepend(list, str); + } + + res = gst_controller_remove_properties_list(controller, list); + g_list_free (list); + + if (res) + pret = Py_True; + else + pret = Py_False; + + Py_INCREF (pret); + + return pret; +} +%% +override gst_controller_set_from_list args +static PyObject * +_wrap_gst_controller_set_from_list (PyGObject *self, PyObject *args) +{ + GstController *controller = (GstController *) self->obj; + PyObject *temp; + gint len; + gchar *pname; + GSList *list = NULL; + GParamSpec *pspec = NULL; + gboolean res = FALSE; + PyObject *pret; + + if ((len = PyTuple_Size(args)) < 2) { + PyErr_SetString(PyExc_TypeError, "Please give a property name and a tuple of (time,value)"); + return NULL; + } + + temp = PyTuple_GetItem(args, 0); + if (!PyString_Check (temp)) { + PyErr_SetString(PyExc_TypeError, "First argument must be a string"); + return NULL; + } + pname = PyString_AsString(temp); + + if (!(pspec = g_object_class_find_property(G_OBJECT_GET_CLASS (controller->object), + (const gchar*) pname))) + goto error; + + while (len-- > 1) { + PyObject *temp2; + GstTimedValue *tval; + + temp2 = PyTuple_GetItem(args, len); + if (!PyTuple_Check (temp2)) { + PyErr_SetString (PyExc_TypeError, "Tuple doesn't contain tuples !"); + goto error; + } + tval = g_new0(GstTimedValue, 1); + tval->timestamp = PyLong_AsUnsignedLongLong(PyTuple_GetItem(temp2, 0)); + g_value_init (&tval->value, pspec->value_type); + if ((pyg_value_from_pyobject (&tval->value, PyTuple_GetItem (temp2, 1))) < 0) { + PyErr_SetString (PyExc_TypeError, "Couldn't convert value to correct type"); + goto error; + }; + + list = g_slist_prepend(list, tval); + } + + res = gst_controller_set_from_list(controller, pname, list); + g_slist_free (list); + + if (res) + pret = Py_True; + else + pret = Py_False; + + Py_INCREF (pret); + + return pret; + + error: + while (list) { + g_free(list->data); + list = g_slist_next(list); + } + g_slist_free (list); + return NULL; +} +%% +override gst_dp_header_payload_length kwargs +static PyObject * +_wrap_gst_dp_header_payload_length(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header", NULL }; + char *header; + gulong ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:dp_header_payload_length", kwlist, &header)) + return NULL; + ret = gst_dp_header_payload_length((guint8*)header); + return PyLong_FromUnsignedLong(ret); +} +%% +overrid gst_dp_header_payload_type kwargs +static PyObject * +_wrap_gst_dp_header_payload_type(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header", NULL }; + char *header; + gint ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:dp_header_payload_type", kwlist, &header)) + return NULL; + ret = gst_dp_header_payload_type((guint8*)header); + return pyg_enum_from_gtype(G_TYPE_NONE, ret); +} +%% +override gst_dp_buffer_from_header kwargs +static PyObject * +_wrap_gst_dp_buffer_from_header(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", NULL }; + char *header; + GstBuffer *ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Is:dp_buffer_from_header", kwlist, &header_length, &header)) + return NULL; + ret = gst_dp_buffer_from_header(header_length, (guint8*)header); + /* pygobject_new handles NULL checking */ + return pygstminiobject_new((GstMiniObject *)ret); +} +%% +override gst_dp_caps_from_packet kwargs +static PyObject * +_wrap_gst_dp_caps_from_packet(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", "payload", NULL }; + char *header, *payload; + GstCaps *ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Iss:dp_caps_from_packet", kwlist, &header_length, &header, &payload)) + return NULL; + ret = gst_dp_caps_from_packet(header_length, + (guint8*) header, + (guint8*) payload); + return pyg_boxed_new (GST_TYPE_CAPS, ret, FALSE, TRUE); +} +%% +override gst_dp_event_from_packet kwargs +static PyObject * +_wrap_gst_dp_event_from_packet(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", "payload", NULL }; + char *header, *payload; + GstEvent *ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Iss:dp_event_from_packet", kwlist, &header_length, &header, &payload)) + return NULL; + ret = gst_dp_event_from_packet(header_length, + (guint8*) header, + (guint8*) payload); + /* pygobject_new handles NULL checking */ + return pygstminiobject_new((GstMiniObject *)ret); +} +%% +override gst_dp_validate_header kwargs +static PyObject * +_wrap_gst_dp_validate_header(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", NULL }; + char *header; + int ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Is:dp_validate_header", kwlist, &header_length, &header)) + return NULL; + ret = gst_dp_validate_header(header_length, (guint8*) header); + return PyBool_FromLong(ret); + +} +%% +override gst_dp_validate_payload kwargs +static PyObject * +_wrap_gst_dp_validate_payload(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", "payload", NULL }; + char *header, *payload; + int ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Iss:dp_validate_payload", kwlist, &header_length, &header, &payload)) + return NULL; + ret = gst_dp_validate_payload(header_length, + (guint8*) header, + (guint8*) payload); + return PyBool_FromLong(ret); + +} +%% +override gst_dp_validate_packet kwargs +static PyObject * +_wrap_gst_dp_validate_packet(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header_length", "header", "payload", NULL }; + char *header, *payload; + int ret; + guint header_length; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Iss:dp_validate_packet", kwlist, &header_length, &header, &payload)) + return NULL; + ret = gst_dp_validate_packet(header_length, + (guint8*) header, + (guint8*) payload); + return PyBool_FromLong(ret); + +} +%% +override gst_dp_header_payload_type kwargs +static PyObject * +_wrap_gst_dp_header_payload_type(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "header", NULL }; + char *header; + gint ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:dp_header_payload_type", kwlist, &header)) + return NULL; + ret = gst_dp_header_payload_type((guint8*) header); + return pyg_enum_from_gtype(G_TYPE_NONE, ret); +} + diff --git a/gst/gstmessage.override b/gst/gstmessage.override new file mode 100644 index 0000000..666d589 --- /dev/null +++ b/gst/gstmessage.override @@ -0,0 +1,540 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +%% +override-slot GstMessage.tp_repr +static PyObject * +_wrap_gst_message_tp_repr (PyGstMiniObject *self) +{ + GstMessage *msg; + gchar *repr, *structure_str, *src_str; + PyObject *ret; + + g_assert (self); + msg = GST_MESSAGE (self->obj); + g_assert (msg); + + structure_str = msg->structure ? gst_structure_to_string (msg->structure) + : g_strdup ("(none)"); + if (msg->src) { + pyg_begin_allow_threads; + src_str = gst_object_get_name (msg->src); + pyg_end_allow_threads; + } else { + src_str = g_strdup ("(no src)"); + } + + repr = g_strdup_printf ("", + structure_str, src_str, msg); + g_free (src_str); + g_free (structure_str); + + ret = PyString_FromStringAndSize(repr, strlen (repr)); + g_free (repr); + + return ret; +} + +%% +override gst_message_parse_state_changed noargs +static PyObject * +_wrap_gst_message_parse_state_changed (PyGstMiniObject *self) +{ + GstState old; + GstState new; + GstState pen; + + /* Should raise an exception if it's not a state-changed message */ + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_STATE_CHANGED) { + PyErr_SetString(PyExc_TypeError, "Message is not a state-changed message"); + return NULL; + } + gst_message_parse_state_changed (GST_MESSAGE(self->obj), &old, &new, &pen); + + return Py_BuildValue("[OOO]", + pyg_enum_from_gtype(GST_TYPE_STATE, old), + pyg_enum_from_gtype(GST_TYPE_STATE, new), + pyg_enum_from_gtype(GST_TYPE_STATE, pen)); +} +%% +override gst_message_parse_segment_start noargs +static PyObject * +_wrap_gst_message_parse_segment_start (PyGstMiniObject *self) +{ + gint64 position; + GstFormat format; + + /* Should raise an exception if it's not a segment start message */ + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_SEGMENT_START) { + PyErr_SetString(PyExc_TypeError, "Message is not a segment start message"); + return NULL; + } + gst_message_parse_segment_start (GST_MESSAGE(self->obj), &format, &position); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, format), + position); +} + +%% +override gst_message_parse_segment_done noargs +static PyObject * +_wrap_gst_message_parse_segment_done (PyGstMiniObject *self) +{ + gint64 position; + GstFormat format; + + /* Should raise an exception if it's not a segment done message */ + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_SEGMENT_DONE) { + PyErr_SetString(PyExc_TypeError, "Message is not a segment done message"); + return NULL; + } + gst_message_parse_segment_done (GST_MESSAGE(self->obj), &format, &position); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, format), + position); +} + +%% +override gst_message_parse_error noargs +static PyObject * +_wrap_gst_message_parse_error (PyGstMiniObject *self) +{ + PyObject *ret; + GError *error = NULL; + gchar *debug; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_ERROR) { + PyErr_SetString(PyExc_TypeError, "Message is not an error message"); + return NULL; + } + + gst_message_parse_error (GST_MESSAGE(self->obj), &error, &debug); + + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_boxed_new (GST_TYPE_G_ERROR, error, TRUE, TRUE)); + if (error) + g_error_free (error); + if (debug != NULL) { + PyList_SetItem(ret, 1, PyString_FromString(debug)); + } else { + Py_INCREF (Py_None); + PyList_SetItem(ret, 1, Py_None); + } + g_free(debug); + return ret; +} +%% +override gst_message_parse_warning noargs +static PyObject * +_wrap_gst_message_parse_warning (PyGstMiniObject *self) +{ + PyObject *ret; + GError *warning = NULL; + gchar *debug; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_WARNING) { + PyErr_SetString(PyExc_TypeError, "Message is not an warning message"); + return NULL; + } + + gst_message_parse_warning (GST_MESSAGE(self->obj), &warning, &debug); + + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_boxed_new (GST_TYPE_G_ERROR, warning, TRUE, TRUE)); + if (warning) + g_error_free (warning); + if (debug != NULL) { + PyList_SetItem(ret, 1, PyString_FromString(debug)); + } else { + Py_INCREF (Py_None); + PyList_SetItem(ret, 1, Py_None); + } + g_free(debug); + return ret; +} +%% +override gst_message_parse_info noargs +static PyObject * +_wrap_gst_message_parse_info (PyGstMiniObject *self) +{ + PyObject *ret; + GError *info = NULL; + gchar *debug; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_INFO) { + PyErr_SetString(PyExc_TypeError, "Message is not an info message"); + return NULL; + } + + gst_message_parse_info (GST_MESSAGE(self->obj), &info, &debug); + + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_boxed_new (GST_TYPE_G_ERROR, info, TRUE, TRUE)); + if (info) + g_error_free (info); + if (debug != NULL) { + PyList_SetItem(ret, 1, PyString_FromString(debug)); + } else { + Py_INCREF (Py_None); + PyList_SetItem(ret, 1, Py_None); + } + g_free(debug); + return ret; +} +%% +override gst_message_parse_tag noargs +static PyObject * +_wrap_gst_message_parse_tag (PyGstMiniObject *self) +{ + PyObject *ret; + GstTagList *taglist; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_TAG) { + PyErr_SetString(PyExc_TypeError, "Message is not an Tag message"); + return NULL; + } + + gst_message_parse_tag (GST_MESSAGE(self->obj), &taglist); + + ret = pyg_boxed_new (GST_TYPE_TAG_LIST, taglist, TRUE, TRUE); + gst_tag_list_free (taglist); + return ret; +} +%% +override gst_message_parse_clock_provide noargs +static PyObject * +_wrap_gst_message_parse_clock_provide (PyGstMiniObject *self) +{ + GstClock *clock; + gboolean ready; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_CLOCK_PROVIDE) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'clock provide' message"); + return NULL; + } + + gst_message_parse_clock_provide (GST_MESSAGE(self->obj), &clock, &ready); + + return Py_BuildValue("(OO)", + pygobject_new(G_OBJECT (clock)), + PyBool_FromLong(ready)); +} +%% +override gst_message_parse_clock_lost noargs +static PyObject * +_wrap_gst_message_parse_clock_lost (PyGstMiniObject *self) +{ + GstClock *clock; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_CLOCK_LOST) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'clock lost' message"); + return NULL; + } + + gst_message_parse_clock_lost (GST_MESSAGE(self->obj), &clock); + + return pygobject_new(G_OBJECT(clock)); +} +%% +override gst_message_parse_new_clock noargs +static PyObject * +_wrap_gst_message_parse_new_clock (PyGstMiniObject *self) +{ + GstClock *clock; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_NEW_CLOCK) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'new clock' message"); + return NULL; + } + + gst_message_parse_new_clock (GST_MESSAGE(self->obj), &clock); + + return pygobject_new(G_OBJECT(clock)); +} +%% +override gst_message_parse_duration noargs +static PyObject * +_wrap_gst_message_parse_duration (PyGstMiniObject *self) +{ + GstFormat format; + gint64 duration; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_DURATION) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'duration' message"); + return NULL; + } + + gst_message_parse_duration (GST_MESSAGE(self->obj), &format, &duration); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + duration); +} +%% +override gst_message_parse_async_start noargs +static PyObject * +_wrap_gst_message_parse_async_start (PyGstMiniObject *self) +{ + gboolean res = FALSE; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_ASYNC_START) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'async-start' message"); + return NULL; + } + + gst_message_parse_async_start (GST_MESSAGE(self->obj), &res); + + return PyBool_FromLong (res); +} +%% +override gst_message_parse_buffering noargs +static PyObject * +_wrap_gst_message_parse_buffering (PyGstMiniObject *self) +{ + gint percent; + + if (GST_MESSAGE(self->obj)->type != GST_MESSAGE_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Message is not a 'buffering' message"); + return NULL; + } + + gst_message_parse_buffering (GST_MESSAGE(self->obj), &percent); + + return Py_BuildValue("i", percent); +} +%% +override gst_message_parse_tag_full noargs +static PyObject * +_wrap_gst_message_parse_tag_full (PyGstMiniObject *self) +{ + GstPad *pad; + GstTagList *taglist; + PyObject *ptlist; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_TAG) { + PyErr_SetString(PyExc_TypeError, "Message is not an Tag message"); + return NULL; + } + + gst_message_parse_tag_full (GST_MESSAGE (self->obj), &pad, &taglist); + ptlist = pyg_boxed_new (GST_TYPE_TAG_LIST, taglist, TRUE, TRUE); + gst_tag_list_free (taglist); + + return Py_BuildValue("(OO)", + pygobject_new((GObject*) pad), + ptlist); +} +%% +override gst_message_parse_step_done noargs +static PyObject * +_wrap_gst_message_parse_step_done (PyGstMiniObject *self) +{ + GstFormat format; + guint64 amount, duration; + gdouble rate; + gboolean flush, intermediate, eos; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STEP_DONE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'step-done' message"); + return NULL; + } + + gst_message_parse_step_done (GST_MESSAGE (self->obj), &format, &amount, &rate, + &flush, &intermediate, &duration, &eos); + + return Py_BuildValue("OKdOOKO", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + amount, rate, + PyBool_FromLong(flush), + PyBool_FromLong(intermediate), + duration, + PyBool_FromLong(eos)); +} +%% +override gst_message_parse_step_start noargs +static PyObject * +_wrap_gst_message_parse_step_start (PyGstMiniObject *self) +{ + GstFormat format; + guint64 amount; + gdouble rate; + gboolean active, flush, intermediate; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STEP_START) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'step-start' message"); + return NULL; + } + + gst_message_parse_step_start (GST_MESSAGE (self->obj), &active, &format, + &amount, &rate, &flush, &intermediate); + + return Py_BuildValue("OOKdOO", + PyBool_FromLong(active), + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + amount, rate, + PyBool_FromLong(flush), + PyBool_FromLong(intermediate)); +} +%% +override gst_message_parse_stream_status noargs +static PyObject * +_wrap_gst_message_parse_stream_status (PyGstMiniObject *self) +{ + GstStreamStatusType type; + GstElement *owner; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STREAM_STATUS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'stream-status' message"); + return NULL; + } + + gst_message_parse_stream_status (GST_MESSAGE (self->obj), &type, &owner); + + return Py_BuildValue("OO", + pyg_enum_from_gtype (GST_TYPE_STREAM_STATUS_TYPE, type), + pygobject_new((GObject*) owner)); +} +%% +override gst_message_parse_structure_change noargs +static PyObject * +_wrap_gst_message_parse_structure_change (PyGstMiniObject *self) +{ + GstStructureChangeType type; + GstElement *owner; + gboolean busy; + + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_STRUCTURE_CHANGE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'structure_change' message"); + return NULL; + } + + gst_message_parse_structure_change (GST_MESSAGE (self->obj), &type, &owner, &busy); + + return Py_BuildValue("OOO", + pyg_enum_from_gtype (GST_TYPE_STRUCTURE_CHANGE_TYPE, type), + pygobject_new((GObject*) owner), + PyBool_FromLong(busy)); +} +%% +override gst_message_parse_request_state noargs +static PyObject * +_wrap_gst_message_parse_request_state (PyGstMiniObject *self) +{ + GstState state; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_REQUEST_STATE) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'request_state' message"); + return NULL; + } + + gst_message_parse_request_state (GST_MESSAGE (self->obj), &state); + + return pyg_enum_from_gtype(GST_TYPE_STATE, state); +} +%% +override gst_message_parse_buffering_stats noargs +static PyObject * +_wrap_gst_message_parse_buffering_stats (PyGstMiniObject *self) +{ + GstBufferingMode mode; + gint avg_in, avg_out; + gint64 buffering_left; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'buffering' message"); + return NULL; + } + + gst_message_parse_buffering_stats (GST_MESSAGE (self->obj), &mode, &avg_in, &avg_out, + &buffering_left); + + return Py_BuildValue("OiiL", + pyg_enum_from_gtype (GST_TYPE_BUFFERING_MODE, mode), + avg_in, avg_out, buffering_left); +} +%% +override gst_message_parse_qos noargs +static PyObject * +_wrap_gst_message_parse_qos (PyGstMiniObject *self) +{ + gboolean live; + guint64 running_time, stream_time, timestamp, duration; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_QOS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'qos' message"); + return NULL; + } + + gst_message_parse_qos (GST_MESSAGE (self->obj), &live, &running_time, &stream_time, + ×tamp, &duration); + + return Py_BuildValue("OKKKK", + PyBool_FromLong(live), running_time, stream_time, + timestamp, duration); +} +%% +override gst_message_parse_qos_values noargs +static PyObject * +_wrap_gst_message_parse_qos_values (PyGstMiniObject *self) +{ + gint64 jitter; + gdouble proportion; + gint quality; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_QOS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'qos' message"); + return NULL; + } + + gst_message_parse_qos_values (GST_MESSAGE (self->obj), &jitter, + &proportion, &quality); + + return Py_BuildValue("Ldi", + jitter, proportion, quality); +} +%% +override gst_message_parse_qos_stats noargs +static PyObject * +_wrap_gst_message_parse_qos_stats (PyGstMiniObject *self) +{ + GstFormat format; + guint64 processed; + guint64 dropped; + + if (GST_MESSAGE_TYPE(self->obj) != GST_MESSAGE_QOS) { + PyErr_SetString(PyExc_TypeError, "Message is not an 'qos' message"); + return NULL; + } + + gst_message_parse_qos_stats (GST_MESSAGE (self->obj), &format, + &processed, &dropped); + + return Py_BuildValue("OKK", + pyg_enum_from_gtype(GST_TYPE_FORMAT, format), + processed, dropped); +} diff --git a/gst/gstmodule.c b/gst/gstmodule.c new file mode 100644 index 0000000..2a37f8e --- /dev/null +++ b/gst/gstmodule.c @@ -0,0 +1,395 @@ +/* -*- Mode: C; ; c-file-style: "k&r"; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2002 David I. Lehn + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David I. Lehn + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include "pygst-private.h" +#include "pygstexception.h" + +#include + + +void pygst_register_classes (PyObject * d); +void pygst_add_constants (PyObject * module, const gchar * strip_prefix); +void _pygst_register_boxed_types (PyObject * moddict); + +extern PyMethodDef pygst_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for bindings code */ +GST_DEBUG_CATEGORY (python_debug); /* for python code */ + +/* copied from pygtk to register GType */ +#define REGISTER_TYPE(d, type, name) \ + type.ob_type = &PyType_Type; \ + type.tp_alloc = PyType_GenericAlloc; \ + type.tp_new = PyType_GenericNew; \ + if (PyType_Ready(&type)) \ + return; \ + PyDict_SetItemString(d, name, (PyObject *)&type); + +#define REGISTER_GTYPE(d, type, name, gtype) \ + REGISTER_TYPE(d, type, name); \ + PyDict_SetItemString(type.tp_dict, "__gtype__", \ + o=pyg_type_wrapper_new(gtype)); \ + Py_DECREF(o); + +static PyObject * +pygstminiobject_from_gvalue (const GValue * value) +{ + GstMiniObject *miniobj; + + if ((miniobj = gst_value_get_mini_object (value)) == NULL) { + Py_INCREF (Py_None); + return Py_None; + } + return pygstminiobject_new (miniobj); +} + +static int +pygstminiobject_to_gvalue (GValue * value, PyObject * obj) +{ + PyGstMiniObject *self = (PyGstMiniObject *) obj; + + gst_value_set_mini_object (value, obj == Py_None ? NULL : self->obj); + + return 0; +} + +static void +sink_gstobject (GObject * object) +{ + if (GST_OBJECT_IS_FLOATING (object)) { + g_object_ref (object); + gst_object_sink (GST_OBJECT (object)); + } +} + +static PyObject * +pygst_fraction_from_value (const GValue * value) +{ + PyObject *module, *dict, *fraction_type, *args, *fraction; + gint numerator, denominator; + + numerator = gst_value_get_fraction_numerator (value); + denominator = gst_value_get_fraction_denominator (value); + + module = PyImport_ImportModule ("gst"); + dict = PyModule_GetDict (module); + fraction_type = PyMapping_GetItemString (dict, "Fraction"); + + args = Py_BuildValue ("(ii)", numerator, denominator); + fraction = PyObject_Call (fraction_type, args, NULL); + Py_DECREF (args); + Py_DECREF (fraction_type); + Py_DECREF (module); + + return fraction; +} + +static int +pygst_fraction_to_value (GValue * value, PyObject * object) +{ + PyObject *numerator, *denominator; + + numerator = PyObject_GetAttrString (object, "num"); + if (numerator == NULL) + goto fail; + + denominator = PyObject_GetAttrString (object, "denom"); + if (denominator == NULL) + goto fail; + + gst_value_set_fraction (value, + PyLong_AsLong (numerator), PyLong_AsLong (denominator)); + + return 0; + +fail: + return -1; +} + +struct _PyGst_Functions pygst_api_functions = { + pygst_caps_from_pyobject, + pygst_iterator_new, + pygstminiobject_new +}; + +/* for addon libraries ... */ +static void +pygst_register_api (PyObject * d) +{ + PyObject *api; + + api = PyCObject_FromVoidPtr (&pygst_api_functions, NULL); + PyDict_SetItemString (d, "_PyGst_API", api); + Py_DECREF (api); +} + +DL_EXPORT (void) +init_gst (void) +{ + PyObject *m, *d; + PyObject *av, *tuple; + int argc, i; + guint major, minor, micro, nano; + char **argv; + GError *error = NULL; + + init_pygobject (); + + /* pull in arguments */ + av = PySys_GetObject ("argv"); + if (av != NULL) { + argc = PyList_Size (av); + argv = g_new (char *, argc); + for (i = 0; i < argc; i++) + argv[i] = g_strdup (PyString_AsString (PyList_GetItem (av, i))); + } else { + /* gst_init_check does not like argc == 0 */ + argc = 1; + argv = g_new (char *, argc); + argv[0] = g_strdup (""); + } + if (!gst_init_check (&argc, &argv, &error)) { + gchar *errstr; + + if (argv != NULL) { + for (i = 0; i < argc; i++) + g_free (argv[i]); + g_free (argv); + } + errstr = g_strdup_printf ("can't initialize module gst: %s", + error ? GST_STR_NULL (error->message) : "no error given"); + PyErr_SetString (PyExc_RuntimeError, errstr); + g_free (errstr); + g_error_free (error); + setlocale (LC_NUMERIC, "C"); + return; + } + + setlocale (LC_NUMERIC, "C"); + if (argv != NULL) { + PySys_SetArgv (argc, argv); + for (i = 0; i < argc; i++) + g_free (argv[i]); + g_free (argv); + } + + /* Initialize debugging category */ + GST_DEBUG_CATEGORY_INIT (pygst_debug, "pygst", 0, + "GStreamer python bindings"); + GST_DEBUG_CATEGORY_INIT (python_debug, "python", GST_DEBUG_FG_GREEN, + "python code using gst-python"); + + pygobject_register_sinkfunc (GST_TYPE_OBJECT, sink_gstobject); + + m = Py_InitModule ("_gst", pygst_functions); + d = PyModule_GetDict (m); + pygst_register_api (d); + + /* gst version */ + gst_version (&major, &minor, µ, &nano); + tuple = Py_BuildValue ("(iii)", major, minor, micro); + PyDict_SetItemString (d, "gst_version", tuple); + Py_DECREF (tuple); + + /* gst-python version */ + tuple = Py_BuildValue ("(iii)", PYGST_MAJOR_VERSION, PYGST_MINOR_VERSION, + PYGST_MICRO_VERSION); + PyDict_SetItemString (d, "pygst_version", tuple); + Py_DECREF (tuple); + + /* clock stuff */ + PyModule_AddIntConstant (m, "SECOND", GST_SECOND); + PyModule_AddIntConstant (m, "MSECOND", GST_MSECOND); + PyModule_AddIntConstant (m, "NSECOND", GST_NSECOND); + + PyModule_AddObject (m, "CLOCK_TIME_NONE", + PyLong_FromUnsignedLongLong (GST_CLOCK_TIME_NONE)); + PyModule_AddObject (m, "BUFFER_OFFSET_NONE", + PyLong_FromUnsignedLongLong (GST_BUFFER_OFFSET_NONE)); + + pygst_exceptions_register_classes (d); + + REGISTER_TYPE (d, PyGstIterator_Type, "Iterator"); + + + pygstminiobject_register_class (d, "GstMiniObject", GST_TYPE_MINI_OBJECT, + &PyGstMiniObject_Type, NULL); + pyg_register_boxed_custom (GST_TYPE_MINI_OBJECT, + pygstminiobject_from_gvalue, pygstminiobject_to_gvalue); + + pygst_register_classes (d); + pygst_add_constants (m, "GST_"); + + /* make our types available */ + PyModule_AddObject (m, "TYPE_ELEMENT_FACTORY", + pyg_type_wrapper_new (GST_TYPE_ELEMENT_FACTORY)); + PyModule_AddObject (m, "TYPE_INDEX_FACTORY", + pyg_type_wrapper_new (GST_TYPE_INDEX_FACTORY)); + PyModule_AddObject (m, "TYPE_TYPE_FIND_FACTORY", + pyg_type_wrapper_new (GST_TYPE_TYPE_FIND_FACTORY)); + +#define ADD_GST_TAG(a) PyModule_AddStringConstant(m, "TAG_" #a, GST_TAG_##a) + /* GStreamer core tags */ + ADD_GST_TAG (TITLE); + ADD_GST_TAG (ARTIST); + ADD_GST_TAG (ALBUM); + ADD_GST_TAG (DATE); + ADD_GST_TAG (GENRE); + ADD_GST_TAG (COMMENT); + ADD_GST_TAG (TRACK_NUMBER); + ADD_GST_TAG (TRACK_COUNT); + ADD_GST_TAG (ALBUM_VOLUME_NUMBER); + ADD_GST_TAG (ALBUM_VOLUME_COUNT); + ADD_GST_TAG (LOCATION); + ADD_GST_TAG (DESCRIPTION); + ADD_GST_TAG (VERSION); + ADD_GST_TAG (ISRC); + ADD_GST_TAG (ORGANIZATION); + ADD_GST_TAG (COPYRIGHT); + ADD_GST_TAG (CONTACT); + ADD_GST_TAG (LICENSE); + ADD_GST_TAG (PERFORMER); + ADD_GST_TAG (DURATION); + ADD_GST_TAG (CODEC); + ADD_GST_TAG (VIDEO_CODEC); + ADD_GST_TAG (AUDIO_CODEC); + ADD_GST_TAG (BITRATE); + ADD_GST_TAG (NOMINAL_BITRATE); + ADD_GST_TAG (MINIMUM_BITRATE); + ADD_GST_TAG (MAXIMUM_BITRATE); + ADD_GST_TAG (SERIAL); + ADD_GST_TAG (ENCODER); + ADD_GST_TAG (ENCODER_VERSION); + ADD_GST_TAG (TRACK_GAIN); + ADD_GST_TAG (TRACK_PEAK); + ADD_GST_TAG (ALBUM_GAIN); + ADD_GST_TAG (ALBUM_PEAK); + ADD_GST_TAG (LANGUAGE_CODE); + ADD_GST_TAG (IMAGE); + ADD_GST_TAG (PREVIEW_IMAGE); + ADD_GST_TAG (EXTENDED_COMMENT); + ADD_GST_TAG (REFERENCE_LEVEL); + ADD_GST_TAG (BEATS_PER_MINUTE); + ADD_GST_TAG (LICENSE_URI); + ADD_GST_TAG (COPYRIGHT_URI); + ADD_GST_TAG (COMPOSER); + ADD_GST_TAG (ARTIST_SORTNAME); + ADD_GST_TAG (ALBUM_SORTNAME); + ADD_GST_TAG (TITLE_SORTNAME); +#if ((GST_VERSION_MICRO >= 21) || (GST_VERSION_MICRO == 20 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (ATTACHMENT); + ADD_GST_TAG (KEYWORDS); + ADD_GST_TAG (GEO_LOCATION_NAME); + ADD_GST_TAG (GEO_LOCATION_LATITUDE); + ADD_GST_TAG (GEO_LOCATION_LONGITUDE); + ADD_GST_TAG (GEO_LOCATION_ELEVATION); +#if ((GST_VERSION_MICRO >= 23) || (GST_VERSION_MICRO == 22 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (SUBTITLE_CODEC); + ADD_GST_TAG (HOMEPAGE); +#if ((GST_VERSION_MICRO >= 24) || (GST_VERSION_MICRO == 23 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (CONTAINER_FORMAT); +#if ((GST_VERSION_MICRO >= 25) || (GST_VERSION_MICRO == 24 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (ALBUM_ARTIST); + ADD_GST_TAG (ALBUM_ARTIST_SORTNAME); +#if ((GST_VERSION_MICRO >= 26) || (GST_VERSION_MICRO == 25 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (SHOW_NAME); + ADD_GST_TAG (SHOW_SORTNAME); + ADD_GST_TAG (SHOW_EPISODE_NUMBER); + ADD_GST_TAG (SHOW_SEASON_NUMBER); + ADD_GST_TAG (LYRICS); + ADD_GST_TAG (COMPOSER_SORTNAME); + ADD_GST_TAG (GROUPING); +#if ((GST_VERSION_MICRO >= 29) || (GST_VERSION_MICRO == 28 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (GEO_LOCATION_COUNTRY); + ADD_GST_TAG (GEO_LOCATION_CITY); + ADD_GST_TAG (GEO_LOCATION_SUBLOCATION); + ADD_GST_TAG (USER_RATING); +#if ((GST_VERSION_MICRO >= 30) || (GST_VERSION_MICRO == 29 && GST_VERSION_NANO > 0)) + ADD_GST_TAG (DEVICE_MANUFACTURER); + ADD_GST_TAG (IMAGE_ORIENTATION); + ADD_GST_TAG (DEVICE_MODEL); + ADD_GST_TAG (GEO_LOCATION_MOVEMENT_SPEED); + ADD_GST_TAG (GEO_LOCATION_MOVEMENT_DIRECTION); + ADD_GST_TAG (GEO_LOCATION_CAPTURE_DIRECTION); + ADD_GST_TAG (IMAGE_ORIENTATION); +#if ((GST_VERSION_MICRO >= 31) || (GST_VERSION_MICRO == 30 && GST_VERSION_NANO > 0)) +#define ADD_FACTORY_TYPE(a) PyModule_AddObject(m, "ELEMENT_FACTORY_TYPE_" #a,\ + PyLong_FromUnsignedLongLong(GST_ELEMENT_FACTORY_TYPE_##a)) + ADD_FACTORY_TYPE (DECODER); + ADD_FACTORY_TYPE (ENCODER); + ADD_FACTORY_TYPE (SINK); + ADD_FACTORY_TYPE (SRC); + ADD_FACTORY_TYPE (MUXER); + ADD_FACTORY_TYPE (DEMUXER); + ADD_FACTORY_TYPE (PARSER); + ADD_FACTORY_TYPE (PAYLOADER); + ADD_FACTORY_TYPE (DEPAYLOADER); + ADD_FACTORY_TYPE (FORMATTER); + ADD_FACTORY_TYPE (MAX_ELEMENTS); + ADD_FACTORY_TYPE (MEDIA_VIDEO); + ADD_FACTORY_TYPE (MEDIA_AUDIO); + ADD_FACTORY_TYPE (MEDIA_IMAGE); + ADD_FACTORY_TYPE (MEDIA_SUBTITLE); + ADD_FACTORY_TYPE (MEDIA_METADATA); + ADD_FACTORY_TYPE (ANY); + ADD_FACTORY_TYPE (MEDIA_ANY); + ADD_FACTORY_TYPE (VIDEO_ENCODER); + ADD_FACTORY_TYPE (AUDIO_ENCODER); + ADD_FACTORY_TYPE (AUDIOVIDEO_SINKS); + ADD_FACTORY_TYPE (DECODABLE); + ADD_GST_TAG (DATE_TIME); + ADD_GST_TAG (APPLICATION_NAME); + ADD_GST_TAG (APPLICATION_DATA); + ADD_GST_TAG (GEO_LOCATION_HORIZONTAL_ERROR); +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif + + PyModule_AddStringConstant (m, "LIBRARY_ERROR", + (gchar *) g_quark_to_string (GST_LIBRARY_ERROR)); + PyModule_AddStringConstant (m, "RESOURCE_ERROR", + (gchar *) g_quark_to_string (GST_RESOURCE_ERROR)); + PyModule_AddStringConstant (m, "CORE_ERROR", + (gchar *) g_quark_to_string (GST_CORE_ERROR)); + PyModule_AddStringConstant (m, "STREAM_ERROR", + (gchar *) g_quark_to_string (GST_STREAM_ERROR)); + + pyg_register_gtype_custom (GST_TYPE_FRACTION, + pygst_fraction_from_value, pygst_fraction_to_value); + + if (PyErr_Occurred ()) { + Py_FatalError ("can't initialize module gst"); + } +} diff --git a/gst/gstobject.override b/gst/gstobject.override new file mode 100644 index 0000000..ec8e78c --- /dev/null +++ b/gst/gstobject.override @@ -0,0 +1,165 @@ +/* -*- Mode: C -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Edward Hervey + */ + +%% +ignore + gst_object_default_deep_notify + gst_object_check_uniqueness + gst_object_replace + +%% +override-attr GstObject.__gstrefcount__ + +/* keep this attribute around even after 2.8 for compatibility reasons */ +static PyObject * +_wrap_gst_object__get___gstrefcount__ (PyGObject * self, void *closure) +{ + return PyInt_FromLong (GST_OBJECT_REFCOUNT_VALUE (self->obj)); +} + +%% +override-slot GstObject.tp_repr +static PyObject * +_wrap_gst_object_tp_repr (PyObject * self) +{ + gchar *repr; + PyObject *ret; + GstObject *object = GST_OBJECT (pygobject_get (self)); + + repr = g_strdup_printf ("<%s object (%s) at 0x%lx>", + self->ob_type->tp_name, + object ? ( + GST_OBJECT_NAME (object) ? GST_OBJECT_NAME (object) : "unnamed" + ) : "(null)", + (long) self); + ret = PyString_FromString (repr); + g_free (repr); + return ret; +} + +%% +override-slot GstObject.tp_str +static PyObject * +_wrap_gst_object_tp_str (PyObject * self) +{ + gchar *repr, *path; + PyObject *ret; + GstObject *object = GST_OBJECT (pygobject_get (self)); + + pyg_begin_allow_threads; + path = gst_object_get_path_string (object); + pyg_end_allow_threads; + + repr = g_strdup_printf ("%s (%s)", path, self->ob_type->tp_name); + ret = PyString_FromString (repr); + g_free (repr); + g_free (path); + return ret; +} +%% +override gst_object_set_property args + +/* + * REMOVE THE FOLLOWING CODE, once pygobject has fixed the issue of not + * releasing the GIL when calling g_object_set_property. + * + * See bug #395048 : set_property() doesn't release the GIL + **/ + +static gboolean +set_property_from_pspec(GObject *obj, + char *attr_name, + GParamSpec *pspec, + PyObject *pvalue) +{ + GValue value = { 0, }; + + if (pspec->flags & G_PARAM_CONSTRUCT_ONLY) { + PyErr_Format(PyExc_TypeError, + "property '%s' can only be set in constructor", + attr_name); + return FALSE; + } + + if (!(pspec->flags & G_PARAM_WRITABLE)) { + PyErr_Format(PyExc_TypeError, + "property '%s' is not writable", attr_name); + return FALSE; + } + + g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec)); +/* FIXME: bug in pygtk 2.8 series; see +http://svn.gnome.org/viewcvs/pygobject/trunk/gobject/pygobject.h?rev=566&r1=564&r2=566 */ + +#ifndef PYGOBJECT_2_12 +#undef pyg_param_gvalue_from_pyobject +#define pyg_param_gvalue_from_pyobject (_PyGObject_API->gvalue_from_param_pyobject) +#endif + + if (pyg_param_gvalue_from_pyobject(&value, pvalue, pspec) < 0) { + PyErr_SetString(PyExc_TypeError, + "could not convert argument to correct param type"); + return FALSE; + } + + pyg_begin_allow_threads; + g_object_set_property(obj, attr_name, &value); + pyg_end_allow_threads; + + g_value_unset(&value); + + return TRUE; +} + +static PyObject * +_wrap_gst_object_set_property(PyGObject *self, PyObject *args) +{ + gchar *param_name; + GParamSpec *pspec; + PyObject *pvalue; + + if (!PyArg_ParseTuple(args, "sO:gst.Object.set_property", ¶m_name, + &pvalue)) + return NULL; + + if (!GST_IS_OBJECT (self->obj)) { + PyErr_Format (PyExc_TypeError, + "object at %p of type %s is not initialized", + self, self->ob_type->tp_name); + return NULL; + } + + pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(self->obj), + param_name); + if (!pspec) { + PyErr_Format(PyExc_TypeError, + "object of type `%s' does not have property `%s'", + g_type_name(G_OBJECT_TYPE(self->obj)), param_name); + return NULL; + } + + if (!set_property_from_pspec(self->obj, param_name, pspec, pvalue)) + return NULL; + + Py_INCREF(Py_None); + return Py_None; +} diff --git a/gst/gstpad.override b/gst/gstpad.override new file mode 100644 index 0000000..2f701dd --- /dev/null +++ b/gst/gstpad.override @@ -0,0 +1,1682 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ + * vi:si:et:sw=4:sts=4:ts=4 + * + * gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin 0) || \ + (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR > 10) || \ + (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR == 10 && \ + GST_VERSION_MICRO >= 23) || \ + (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR == 10 && \ + GST_VERSION_MICRO == 22 && GST_VERSION_NANO > 0)) +#define HAVE_SET_BLOCKED_ASYNC_FULL 1 +#else +#define HAVE_SET_BLOCKED_ASYNC_FULL 0 +#endif + +/* we need to do this until PyClosures get exception handlers */ +#ifndef pyg_closure_set_exception_handler +# define pyg_closure_set_exception_handler(ig, nore) +# define EXCEPTION_HANDLER G_GNUC_UNUSED +#else +# define EXCEPTION_HANDLER +#endif +#define SET_PAD_CLOSURE(self, args, kwargs, name) \ + static char *kwlist[] = { G_STRINGIFY (name), NULL }; \ + PyObject *function; \ + GstPad *pad; \ + GClosure *closure; \ + PyGstPadPrivate *priv; \ +\ + if (!PyArg_ParseTupleAndKeywords(args, kwargs, \ + "O:GstPad.set_" G_STRINGIFY (name), \ + kwlist, \ + &function)) { \ + return NULL; \ + } \ +\ + if (!PyCallable_Check(function)) { \ + PyErr_SetString(PyExc_TypeError, G_STRINGIFY (name) " not callable"); \ + return NULL; \ + } \ +\ + closure = pyg_closure_new (function, NULL, NULL); \ + pyg_closure_set_exception_handler (closure, handle_ ## name ## _exception); \ + pygobject_watch_closure((PyObject *)self, closure); \ + priv = py_pad_private(self);\ + if (priv->name) { \ + g_closure_invalidate (priv->name); \ + g_closure_unref (priv->name); \ + } \ + priv->name = closure; \ + pad = (GstPad*)pygobject_get(self); \ + gst_pad_set_ ## name (pad, call_ ## name); \ +\ + Py_INCREF(Py_None); \ + return Py_None; + +static void +free_pad_private (gpointer data) +{ + PyGstPadPrivate *private = data; +#define INVALIDATE_CLOSURE(closure) \ + if (closure) { \ + g_closure_invalidate (closure); \ + g_closure_unref (closure); \ + closure = NULL; \ + } + INVALIDATE_CLOSURE (private->link_function) + INVALIDATE_CLOSURE (private->event_function) + INVALIDATE_CLOSURE (private->chain_function) + INVALIDATE_CLOSURE (private->get_function) + INVALIDATE_CLOSURE (private->getcaps_function) + INVALIDATE_CLOSURE (private->setcaps_function) + INVALIDATE_CLOSURE (private->activate_function) + INVALIDATE_CLOSURE (private->activatepull_function) + INVALIDATE_CLOSURE (private->activatepush_function) +#undef INVALIDATE_CLOSURE + + if (private->query_function) { + Py_DECREF (private->query_function); + private->query_function = NULL; + } +} + +static PyGstPadPrivate* +pad_private(GstPad *pad) +{ + PyGstPadPrivate *private; + static GQuark padprivate = 0; + + if (!padprivate) + padprivate = g_quark_from_static_string ("PyGst::PadPrivate"); + private = g_object_get_qdata (G_OBJECT (pad), padprivate); + if (private == NULL) { + private = g_new0(PyGstPadPrivate, 1); + private->pad = (PyGObject *) pygobject_new (G_OBJECT (pad)); + Py_DECREF (private->pad); + g_object_set_qdata_full (G_OBJECT (pad), padprivate, private, free_pad_private); + } + return private; +} + +static PyGstPadPrivate* +py_pad_private(PyGObject *pad) +{ + return pad_private ((GstPad *)pygobject_get(pad)); +} + +%% +ignore + gst_pad_select + gst_pad_selectv + gst_pad_new_from_template + gst_pad_load_and_link +%% +override gst_pad_set_getcaps_function kwargs + +static void EXCEPTION_HANDLER +handle_getcaps_function_exception (GValue *ret, guint n, const GValue *params) +{ + g_value_set_boxed (ret, gst_pad_get_pad_template_caps ( + GST_PAD (g_value_get_object (¶ms[0])))); + PyErr_Clear (); +} + +static GstCaps * +call_getcaps_function (GstPad *pad) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args = { 0, }; + GstCaps *caps; + + g_value_init (&ret, GST_TYPE_CAPS); + g_value_init (&args, GST_TYPE_PAD); + g_value_set_object (&args, pad); + + closure = pad_private(pad)->getcaps_function; + + g_closure_invoke (closure, &ret, 1, &args, NULL); + + caps = g_value_dup_boxed (&ret); + g_value_unset (&ret); + g_value_unset (&args); + return caps; +} + +static PyObject* +_wrap_gst_pad_set_getcaps_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, getcaps_function) +} + +%% +override gst_pad_set_link_function kwargs + +static void EXCEPTION_HANDLER +handle_link_function_exception (GValue *ret, guint n, const GValue *params) +{ + g_value_set_enum (ret, GST_PAD_LINK_REFUSED); + PyErr_Clear (); +} + +static GstPadLinkReturn +call_link_function (GstPad *pad, GstPad *peer) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args[2] = { { 0, }, {0, } }; + GstPadLinkReturn i; + + g_value_init (&ret, GST_TYPE_PAD_LINK_RETURN); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_init (&args[1], GST_TYPE_PAD); + g_value_set_object (&args[0], pad); + g_value_set_object (&args[1], peer); + + closure = pad_private(pad)->link_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + i = g_value_get_enum (&ret); + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + return i; +} + +static PyObject* +_wrap_gst_pad_set_link_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, link_function) +} + +%% +override gst_pad_set_chain_function kwargs + +static void EXCEPTION_HANDLER +handle_chain_function_exception (GValue *ret, guint n, const GValue *params) +{ + GstElement *element = GST_ELEMENT (gst_object_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static GstFlowReturn +call_chain_function(GstPad *pad, GstBuffer *buffer) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args[2] = { { 0, }, { 0, } }; + GstFlowReturn flow; + + g_value_init (&ret, GST_TYPE_FLOW_RETURN); + g_value_set_enum (&ret, GST_FLOW_ERROR); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_init (&args[1], GST_TYPE_BUFFER); + + g_value_set_object (&args[0], pad); + gst_value_set_mini_object (&args[1], GST_MINI_OBJECT (buffer)); + closure = pad_private(pad)->chain_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + flow = g_value_get_enum (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + + /* a chain function takes over the ref of the buffer handed to it; + * so we should unref after calling the pythonic chain func */ + gst_buffer_unref (buffer); + return flow; +} + +static PyObject* +_wrap_gst_pad_set_chain_function(PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, chain_function) +} + +%% +override gst_pad_set_event_function kwargs + +static void EXCEPTION_HANDLER +handle_event_function_exception (GValue *ret, guint n, const GValue *params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_event_function (GstPad *pad, GstEvent *event) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args[2] = { { 0, }, { 0, } }; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_init (&args[1], GST_TYPE_EVENT); + g_value_set_object (&args[0], pad); + gst_value_set_mini_object (&args[1], GST_MINI_OBJECT (event)); + closure = pad_private(pad)->event_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + return bool; +} + +static PyObject* +_wrap_gst_pad_set_event_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, + kwargs, event_function) +} + +%% +override gst_pad_set_query_function kwargs + +static gboolean +pypad_copy_struct_members (GQuark field_id, const GValue * value, + GstStructure* to_structure) +{ + gst_structure_id_set_value (to_structure, field_id, value); + + return TRUE; +} + +static gboolean +call_query_function (GstPad *pad, GstQuery *query) +{ + PyGILState_STATE __py_state; + PyGObject *py_pad; + PyGstPadPrivate *priv; + + PyObject *py_ret; + PyObject *py_args; + gboolean ret = FALSE; + GstQuery *query_copy; + PyObject *py_query; + + /* Push our GIL state */ + __py_state = pyg_gil_state_ensure(); + + /* Get the python version of the pad */ + py_pad = (PyGObject *) pygobject_new((GObject*) (pad)); + if (!py_pad) { + if (PyErr_Occurred()) + PyErr_Print(); + goto beach; + } + /* Private data, where our callback should be stored */ + priv = py_pad_private(py_pad); + if (priv->query_function == NULL) { + /* FIXME: Generate an error message somewhere? */ + Py_DECREF(py_pad); + goto beach; + } + + /* Create our arguments tuple and populate */ + py_args = PyTuple_New(2); + + /* We copy the query into a new one so that it can have a refcount + * of exactly 1 and be owned by python */ + pyg_begin_allow_threads; + query_copy = gst_query_copy (query); + pyg_end_allow_threads; + py_query = pygstminiobject_new((GstMiniObject *)query_copy); + gst_query_unref (query_copy); + + PyTuple_SetItem(py_args, 0, (PyObject *) (py_pad)); + PyTuple_SetItem(py_args, 1, py_query); + + /* Perform the callback into python, then parse the result */ + py_ret = PyObject_CallObject(priv->query_function, py_args); + if (!py_ret) { + if (PyErr_Occurred()) + PyErr_Print(); + + Py_DECREF(py_args); + goto beach; + } + + ret = (py_ret == Py_True ? TRUE : FALSE); + + /* If the query succeeded, copy the result back into the original query. + * We still have a refcount to it, because we didn't unref the py_query + * wrapper yet. */ + if (ret) { + /* I feel ill violating the poor query like this, but it's the only + * way to transfer data from our copy back to the original query */ + GstStructure *from, *to; + + pyg_begin_allow_threads; + from = GST_QUERY (query_copy)->structure; + to = query->structure; + gst_structure_foreach (from, + (GstStructureForeachFunc) pypad_copy_struct_members, to); + pyg_end_allow_threads; + } + + Py_DECREF(py_args); + Py_DECREF(py_ret); +beach: + pyg_gil_state_release(__py_state); + + return ret; +} + +static PyObject* +_wrap_gst_pad_set_query_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + static char *kwlist[] = { "query_function", NULL }; + PyObject *function; + GstPad *pad; + PyGstPadPrivate *priv; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O:GstPad.set_query_function", + kwlist, + &function)) { + return NULL; + } + + pad = (GstPad*)pygobject_get(self); + priv = py_pad_private(self); + + /* Allow setting query_function to None to clear it to NULL */ + if (function == Py_None) { + if (priv->query_function) { + Py_DECREF (priv->query_function); + priv->query_function = NULL; + } + gst_pad_set_query_function (pad, NULL); + goto out; + } + + if (!PyCallable_Check(function)) { + PyErr_SetString(PyExc_TypeError, "Passed query_function not callable"); + return NULL; + } + + if (priv->query_function) { + Py_DECREF (priv->query_function); + } + + Py_INCREF(function); + priv->query_function = function; + + gst_pad_set_query_function (pad, call_query_function); + +out: + Py_INCREF(Py_None); + return Py_None; +} + +%% +override gst_pad_set_setcaps_function kwargs + +static void EXCEPTION_HANDLER +handle_setcaps_function_exception (GValue *ret, guint n, const GValue *params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_setcaps_function (GstPad *pad, GstCaps *caps) +{ + GClosure *closure; + GValue ret = { 0, }; + GValue args[2] = { { 0, }, { 0, } }; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_init (&args[1], GST_TYPE_CAPS); + g_value_set_object (&args[0], pad); + gst_value_set_caps (&args[1], (const GstCaps*) caps); + closure = pad_private(pad)->setcaps_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + return bool; +} + +static PyObject* +_wrap_gst_pad_set_setcaps_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, + kwargs, setcaps_function) +} +%% +override gst_pad_set_activate_function kwargs + +static void EXCEPTION_HANDLER +handle_activate_function_exception (GValue * ret, guint n, const GValue * params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_activate_function (GstPad * pad) +{ + GClosure * closure; + GValue ret = { 0, }; + GValue args[1] = { {0, }}; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init(&args[0], GST_TYPE_PAD); + g_value_set_object (&args[0], pad); + closure = pad_private(pad)->activate_function; + + g_closure_invoke (closure, &ret, 1, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + + return bool; +} + +static PyObject * +_wrap_gst_pad_set_activate_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, activate_function) +} +%% +override gst_pad_set_activatepull_function kwargs + +static void EXCEPTION_HANDLER +handle_activatepull_function_exception (GValue * ret, guint n, const GValue * params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_activatepull_function (GstPad * pad, gboolean active) +{ + GClosure * closure; + GValue ret = { 0, }; + GValue args[2] = { {0, }, {0, } }; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_set_object (&args[0], pad); + g_value_init (&args[1], G_TYPE_BOOLEAN); + g_value_set_boolean (&args[1], active); + closure = pad_private(pad)->activatepull_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + + return bool; +} + +static PyObject * +_wrap_gst_pad_set_activatepull_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, activatepull_function); +} +%% +override gst_pad_set_activatepush_function kwargs + +static void EXCEPTION_HANDLER +handle_activatepush_function_exception (GValue * ret, guint n, const GValue * params) +{ + GstElement *element = GST_ELEMENT (gst_pad_get_parent (g_value_get_object (¶ms[0]))); + + if (!_pygst_element_check_error (element)) { + g_assert_not_reached (); /* only returns FALSE when there's no error */ + } +} + +static gboolean +call_activatepush_function (GstPad * pad, gboolean active) +{ + GClosure * closure; + GValue ret = { 0, }; + GValue args[2] = { {0, }, {0, }}; + gboolean bool; + + g_value_init (&ret, G_TYPE_BOOLEAN); + g_value_set_boolean (&ret, FALSE); + g_value_init (&args[0], GST_TYPE_PAD); + g_value_set_object (&args[0], pad); + g_value_init (&args[1], G_TYPE_BOOLEAN); + g_value_set_boolean (&args[1], active); + closure = pad_private(pad)->activatepush_function; + + g_closure_invoke (closure, &ret, 2, args, NULL); + + bool = g_value_get_boolean (&ret); + + g_value_unset (&ret); + g_value_unset (&args[0]); + g_value_unset (&args[1]); + + return bool; +} + +static PyObject * +_wrap_gst_pad_set_activatepush_function (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + SET_PAD_CLOSURE (self, args, kwargs, activatepush_function); +} +%% +override-slot GstPad.tp_repr +static PyObject * +_wrap_gst_pad_tp_repr (PyGObject *self) +{ + char *buf; + PyObject *retval; + GstPad *pad; + GstElement *parent; + gchar *padname = NULL; + gchar *elementname = NULL; + + pad = GST_PAD(self->obj); + + pyg_begin_allow_threads; + padname = gst_pad_get_name (pad); + + parent = GST_ELEMENT (gst_pad_get_parent (pad)); + if (parent) + elementname = gst_element_get_name (parent); + + buf = g_strdup_printf ("", + parent ? elementname : "---", + padname, (long) self->obj); + + g_free(padname); + + if (parent) { + gst_object_unref (parent); + g_free(elementname); + } + pyg_end_allow_threads; + + retval = PyString_FromString(buf); + g_free(buf); + + return retval; +} + +%% +override gst_pad_query kwargs +static PyObject * +_wrap_gst_pad_query(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "query", NULL }; + int ret; + PyGstMiniObject *query; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:GstPad.query", kwlist, &PyGstQuery_Type, &query)) + return NULL; + + pyg_begin_allow_threads; + ret = gst_pad_query(GST_PAD(self->obj), GST_QUERY (query->obj)); + pyg_end_allow_threads; + + return PyBool_FromLong(ret); +} +%% +override gst_pad_convert kwargs +static PyObject * +_wrap_gst_pad_convert(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "src_format", "src_value", + "dest_format", NULL }; + GstFormat src_format, dest_format; + PyObject *src_value_obj; + gint64 src_value, dest_value = 0; + gboolean ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "iOi:GstPad.convert", kwlist, + &src_format, &src_value_obj, + &dest_format)) + return NULL; + + src_value = PyLong_AsLongLong(src_value_obj); + + ret = gst_pad_convert(GST_PAD(self->obj), src_format, src_value, + &dest_format, &dest_value); + return PyLong_FromLongLong(dest_value); +} +%% +override gst_pad_link kwargs +static PyObject * +_wrap_gst_pad_link(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "sinkpad", NULL }; + PyGObject *sinkpad; + int ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:GstPad.link", kwlist, + &PyGstPad_Type, &sinkpad)) + return NULL; + pyg_begin_allow_threads; + ret = gst_pad_link(GST_PAD(self->obj), GST_PAD(sinkpad->obj)); + pyg_end_allow_threads; + if (ret) { + PyObject *exc_val = pyg_enum_from_gtype(GST_TYPE_PAD_LINK_RETURN, ret); + PyErr_SetObject(PyGstExc_LinkError, exc_val); + Py_DECREF(exc_val); + return NULL; + } + return PyBool_FromLong(ret); +} + +%% +override gst_pad_link_filtered kwargs +static PyObject * +_wrap_gst_pad_link_filtered(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "sinkpad", "filtercaps", NULL }; + PyGObject *sinkpad; + PyObject *py_filtercaps; + int ret; + GstCaps *filtercaps = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O:GstPad.link_filtered", + kwlist, &PyGstPad_Type, &sinkpad, + &py_filtercaps)) + return NULL; + if (pyg_boxed_check(py_filtercaps, GST_TYPE_CAPS)) + filtercaps = pyg_boxed_get(py_filtercaps, GstCaps); + else { + PyErr_SetString(PyExc_TypeError, "filtercaps should be a GstCaps"); + return NULL; + } + ret = gst_pad_link_filtered(GST_PAD(self->obj), + GST_PAD(sinkpad->obj), + filtercaps); + if (ret) { + PyObject *exc_val = pyg_enum_from_gtype(GST_TYPE_PAD_LINK_RETURN, ret); + PyErr_SetObject(PyGstExc_LinkError, exc_val); + Py_DECREF(exc_val); + return NULL; + } + return PyBool_FromLong(ret); +} +%% +override gst_pad_get_pad_template_caps noargs +static PyObject * +_wrap_gst_pad_get_pad_template_caps(PyGObject *self) +{ + GstCaps *ret = (GstCaps*)gst_pad_get_pad_template_caps(GST_PAD(self->obj)); + return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE); +} +%% +override gst_pad_template_get_caps noargs +static PyObject * +_wrap_gst_pad_template_get_caps(PyGObject *self) +{ + GstCaps *ret = (GstCaps*)gst_pad_template_get_caps(GST_PAD_TEMPLATE(self->obj)); + return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE); +} +%% +override gst_pad_template_get_caps_by_name kwargs +static PyObject * +_wrap_gst_pad_template_get_caps_by_name(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", NULL }; + char *name; + GstCaps *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:GstPadTemplate.get_caps_by_name", kwlist, &name)) + return NULL; + ret = (GstCaps*)gst_pad_template_get_caps_by_name(GST_PAD_TEMPLATE(self->obj), name); + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_CAPS, ret, TRUE, TRUE); +} +%% +new-constructor GST_TYPE_PAD +%% +override gst_pad_new kwargs +static int +_wrap_gst_pad_new(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", "direction", NULL }; + static char *kwlist2[] = { "template", "name", NULL }; + PyGObject *templ; + char *name = NULL; + PyObject *py_direction = NULL; + GstPadDirection direction; + + if (PyArg_ParseTupleAndKeywords (args, kwargs, "zO:GstPad.__init__", + kwlist, &name, &py_direction)) { + + GST_LOG ("gst.Pad.__init__: using gst_pad_new"); + if (pyg_enum_get_value (GST_TYPE_PAD_DIRECTION, py_direction, + (gint *) &direction)) { + GST_LOG ("gst.Pad.__init__: direction is not valid"); + return -1; + } + + self->obj = (GObject *) gst_pad_new (name, direction); + } else { + PyErr_Clear (); + + GST_LOG ("gst.Pad.__init__: using gst_pad_new_from_template"); + if (PyArg_ParseTupleAndKeywords (args, kwargs, "O!|s:GstPad.__init__", + kwlist2, &PyGstPadTemplate_Type, + &templ, &name)) { + if (name == NULL) + name = GST_PAD_TEMPLATE_NAME_TEMPLATE (GST_PAD_TEMPLATE ( + templ->obj)); + self->obj = (GObject *) gst_pad_new_from_template ( + GST_PAD_TEMPLATE (templ->obj), name); + } + } + if (!self->obj) { + PyErr_SetString (PyExc_RuntimeError, "could not create GstPad object"); + return -1; + } + pygobject_register_wrapper ((PyObject *)self); + return 0; +} +%% +override gst_pad_add_data_probe args + +static void +data_probe_destroy_data (gpointer data) +{ + PyGILState_STATE state; + PyObject *py_data = (PyObject *) data; + + state = pyg_gil_state_ensure(); + + Py_DECREF (py_data); + + pyg_gil_state_release(state); +} + +static gboolean +data_probe_callback_marshal(GstPad *pad, GstMiniObject *obj, gpointer user_data) +{ + PyGILState_STATE state; + PyObject *callback, *args; + PyObject *pret; + PyObject *py_user_data; + gboolean ret; + + g_return_val_if_fail(user_data != NULL, TRUE); + + state = pyg_gil_state_ensure(); + + py_user_data = (PyObject *) user_data; + + callback = PyTuple_GetItem(py_user_data, 0); + args = Py_BuildValue("(NN)", + pygobject_new(G_OBJECT(pad)), + pygstminiobject_new(GST_MINI_OBJECT(obj))); + + { + PyObject *tmp = args; + args = PySequence_Concat(tmp, PyTuple_GetItem(py_user_data, 1)); + Py_DECREF (tmp); + } + + pret = PyObject_CallObject(callback, args); + Py_DECREF(args); + + if (!pret) { + PyErr_Print(); + ret = TRUE; + } else { + ret = PyObject_IsTrue(pret)? TRUE : FALSE; + Py_DECREF(pret); + } + + pyg_gil_state_release(state); + + return ret; +} + +static PyObject * +_wrap_gst_pad_add_data_probe(PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + PyObject *pret; + gulong ret; + gint len; + + len = PyTuple_Size(args); + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Requires at least 1 arg"); + return NULL; + } + + callback = PyTuple_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) + return NULL; + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + + pyg_begin_allow_threads; + ret = gst_pad_add_data_probe_full(GST_PAD(self->obj), + (GCallback) data_probe_callback_marshal, data, + data_probe_destroy_data); + pyg_end_allow_threads; + + pret = PyLong_FromUnsignedLong(ret); + Py_INCREF(pret); + + return pret; +} +%% +override gst_pad_add_event_probe args +static PyObject * +_wrap_gst_pad_add_event_probe(PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + PyObject *pret; + gulong ret; + gint len; + + len = PyTuple_Size(args); + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Requires at least 1 arg"); + return NULL; + } + + callback = PyTuple_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) + return NULL; + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + + pyg_begin_allow_threads; + ret = gst_pad_add_event_probe_full(GST_PAD(self->obj), + (GCallback) data_probe_callback_marshal, data, + data_probe_destroy_data); + pyg_end_allow_threads; + + pret = PyLong_FromUnsignedLong(ret); + Py_INCREF(pret); + + return pret; +} +%% +override gst_pad_add_buffer_probe args + +static PyObject * +_wrap_gst_pad_add_buffer_probe(PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + PyObject *pret; + gulong ret; + gint len; + + len = PyTuple_Size(args); + if (len < 1) { + PyErr_SetString(PyExc_TypeError, "Requires at least 1 arg"); + return NULL; + } + + callback = PyTuple_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 1, len); + if (cbargs == NULL) + return NULL; + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + + pyg_begin_allow_threads; + ret = gst_pad_add_buffer_probe_full(GST_PAD(self->obj), + (GCallback) data_probe_callback_marshal, data, + data_probe_destroy_data); + pyg_end_allow_threads; + + pret = PyLong_FromUnsignedLong(ret); + Py_INCREF(pret); + + return pret; +} +%% +override-slot GstPadTemplate.tp_getattr +#define IS_ATTR(name) (strcmp (name, attr) == 0) +static PyObject * +_wrap_gst_pad_template_tp_getattr(PyObject *self, char *attr) +{ + GstPadTemplate *templ = GST_PAD_TEMPLATE (pygobject_get (self)); + + if (IS_ATTR ("__members__")) { + return Py_BuildValue("[ssss]", "name_template", "direction", "presence", "caps" ); + } else if (IS_ATTR ("name_template")) { + return PyString_FromString (GST_PAD_TEMPLATE_NAME_TEMPLATE(templ)); + } else if (IS_ATTR ("direction")) { + return pyg_enum_from_gtype(GST_TYPE_PAD_DIRECTION, GST_PAD_TEMPLATE_DIRECTION(templ)); + } else if (IS_ATTR ("presence")) { + return pyg_enum_from_gtype(GST_TYPE_PAD_PRESENCE, GST_PAD_TEMPLATE_PRESENCE(templ)); + } else if (IS_ATTR ("caps")) { + return pyg_boxed_new (GST_TYPE_CAPS, GST_PAD_TEMPLATE_CAPS(templ), TRUE, TRUE); + } + return Py_FindMethod((PyMethodDef*) _PyGstPadTemplate_methods, self, attr); +} +%% +override gst_pad_query_position args +static PyObject * +_wrap_gst_pad_query_position (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + PyObject *ret; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if ((gst_pad_query_position(GST_PAD (self->obj), (GstFormat*) &format, &cur))) { + ret = Py_BuildValue("(LO)", cur, + pyg_enum_from_gtype (GST_TYPE_FORMAT, format)); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + + return ret; +} +%% +override gst_pad_query_duration args +static PyObject * +_wrap_gst_pad_query_duration (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + PyObject *ret; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if ((gst_pad_query_duration(GST_PAD (self->obj), (GstFormat*) &format, &cur))) { + ret = Py_BuildValue("(LO)", cur, + pyg_enum_from_gtype (GST_TYPE_FORMAT, format)); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + + return ret; +} +%% +override gst_pad_query_convert kwargs +static PyObject * +_wrap_gst_pad_query_convert (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "fromformat", "fromvalue", "destformat", NULL }; + PyObject *pfromformat, *pdestformat; + GstFormat srcformat, destformat; + gint64 fromval, dstval; + + /* Input : src_format, src_val, dst_format */ + /* Returns : dst_format, dst_val OR None */ + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "0L0:GstPad.query_convert", + kwlist, &pfromformat, &fromval, &pdestformat)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FORMAT, pfromformat, (gint *) &srcformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + if (pyg_enum_get_value(GST_TYPE_FORMAT, pdestformat, (gint *) &destformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if (!(gst_pad_query_convert (GST_PAD(self->obj), + srcformat, fromval, + &destformat, &dstval))) { + Py_INCREF(Py_None); + return Py_None; + } + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, destformat), + dstval); +} +%% +override gst_pad_alloc_buffer kwargs +static PyObject * +_wrap_gst_pad_alloc_buffer (PyGObject *self, PyObject * args, PyObject *kwargs) +{ + static char *kwlist[] = {"offset", "size", "caps", NULL}; + guint64 offset; + gint size; + PyObject *pcaps; + GstCaps *caps; + PyObject *ret; + GstBuffer *buf; + GstFlowReturn res; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "KiO:GstPad.alloc_buffer", + kwlist, &offset, &size, &pcaps)) + return NULL; + caps = pyg_boxed_get(pcaps, GstCaps); + res = gst_pad_alloc_buffer (GST_PAD(pygobject_get(self)), + offset, size, caps, &buf); + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, res)); + if (res != GST_FLOW_OK) { + PyList_SetItem(ret, 1, Py_None); + } else { + PyList_SetItem(ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buf))); + /* Bring down the reference count, since we are meant to be the only + * one holding a reference to the newly created buffer. */ + gst_buffer_unref (buf); + } + return ret; +} +%% +override gst_pad_alloc_buffer_and_set_caps kwargs +static PyObject * +_wrap_gst_pad_alloc_buffer_and_set_caps (PyGObject *self, PyObject * args, PyObject *kwargs) +{ + static char *kwlist[] = {"offset", "size", "caps", NULL}; + guint64 offset; + gint size; + PyObject *pcaps; + GstCaps *caps; + PyObject *ret; + GstBuffer *buf; + GstFlowReturn res; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "KiO:GstPad.alloc_buffer_and_set_caps", + kwlist, &offset, &size, &pcaps)) + return NULL; + caps = pyg_boxed_get(pcaps, GstCaps); + res = gst_pad_alloc_buffer_and_set_caps (GST_PAD(pygobject_get(self)), + offset, size, caps, &buf); + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, res)); + if (res != GST_FLOW_OK) { + PyList_SetItem(ret, 1, Py_None); + } else { + PyList_SetItem(ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buf))); + /* Bring down the reference count, since we are meant to be the only + * one holding a reference to the newly created buffer. */ + gst_buffer_unref (buf); + } + return ret; +} +%% +override gst_pad_pull_range kwargs +static PyObject * +_wrap_gst_pad_pull_range (PyGObject *self, PyObject * args, PyObject *kwargs) +{ + static char *kwlist[] = {"offset", "size", NULL}; + guint64 offset; + gint size; + PyObject *ret; + GstBuffer *buf; + GstFlowReturn res; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "Ki:GstPad.pull_range", + kwlist, &offset, &size)) + return NULL; + res = gst_pad_pull_range (GST_PAD(pygobject_get(self)), + offset, size, &buf); + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, res)); + if (res != GST_FLOW_OK) { + PyList_SetItem(ret, 1, Py_None); + } else { + PyList_SetItem(ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buf))); + /* Bring down the reference count, since we are meant to be the only + * one holding a reference to the newly created buffer. */ + gst_buffer_unref (buf); + } + return ret; +} +%% +override gst_pad_get_range kwargs +static PyObject * +_wrap_gst_pad_get_range (PyGObject *self, PyObject * args, PyObject *kwargs) +{ + static char *kwlist[] = {"offset", "size", NULL}; + guint64 offset; + gint size; + PyObject *ret; + GstBuffer *buf; + GstFlowReturn res; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "Ki:GstPad.get_range", + kwlist, &offset, &size)) + return NULL; + res = gst_pad_get_range (GST_PAD(pygobject_get(self)), + offset, size, &buf); + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype(GST_TYPE_FLOW_RETURN, res)); + if (res != GST_FLOW_OK) { + PyList_SetItem(ret, 1, Py_None); + } else { + PyList_SetItem(ret, 1, pygstminiobject_new(GST_MINI_OBJECT(buf))); + /* Bring down the reference count, since we are meant to be the only + * one holding a reference to the newly created buffer. */ + gst_buffer_unref (buf); + } + return ret; +} +%% +override gst_pad_get_internal_links noargs +static PyObject * +_wrap_gst_pad_get_internal_links (PyGObject * self) +{ + PyObject *ret; + GList *lst, *tmp; + gint i; + + lst = gst_pad_get_internal_links (GST_PAD (pygobject_get(self))); + + ret = PyList_New(g_list_length(lst)); + for (tmp = lst, i = 0 ; tmp; tmp = g_list_next(tmp), ++i) { + PyList_SetItem(ret, i, pygobject_new(G_OBJECT(tmp->data))); + } + g_list_free(lst); + return ret; +} +%% +override gst_pad_get_internal_links_default noargs +static PyObject * +_wrap_gst_pad_get_internal_links_default (PyGObject * self) +{ + PyObject *ret; + GList *lst, *tmp; + gint i; + + lst = gst_pad_get_internal_links_default (GST_PAD (pygobject_get(self))); + + ret = PyList_New(g_list_length(lst)); + for (tmp = lst, i = 0 ; tmp; tmp = g_list_next(tmp), ++i) { + PyList_SetItem(ret, i, pygobject_new(G_OBJECT(tmp->data))); + } + g_list_free(lst); + return ret; +} +%% +override gst_pad_get_query_types noargs +static PyObject * +_wrap_gst_pad_get_query_types (PyGObject *self) +{ + PyObject *ret; + PyObject *item; + int i; + GstQueryType *tab; + + tab = (GstQueryType*) gst_pad_get_query_types(GST_PAD(self->obj)); + if (tab == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + + ret = PyList_New(0); + for (i = 0; tab[i] != 0; i++) { + item = pyg_enum_from_gtype (GST_TYPE_QUERY_TYPE, tab[i]); + PyList_Append(ret, item); + Py_XDECREF(item); + } + + return ret; +} +%% +override gst_pad_get_query_types_default noargs +static PyObject * +_wrap_gst_pad_get_query_types_default (PyGObject *self) +{ + PyObject *ret; + PyObject *item; + int i; + GstQueryType *tab; + + tab = (GstQueryType*) gst_pad_get_query_types_default(GST_PAD(self->obj)); + if (tab == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + + ret = PyList_New(0); + for (i = 0; tab[i] != 0; i++) { + item = pyg_enum_from_gtype (GST_TYPE_QUERY_TYPE, tab[i]); + PyList_Append(ret, item); + Py_XDECREF(item); + } + + return ret; +} +%% +override gst_pad_set_blocked_async args + +#if HAVE_SET_BLOCKED_ASYNC_FULL +static void +pad_block_destroy_data (gpointer data) +{ + PyGILState_STATE state; + PyObject *py_data = (PyObject *) data; + + state = pyg_gil_state_ensure(); + + Py_DECREF (py_data); + + pyg_gil_state_release(state); +} +#endif + +static void +pad_block_callback_marshal(GstPad *pad, gboolean blocked, gpointer user_data) +{ + PyGILState_STATE state; + PyObject *callback, *args; + PyObject *ret; + PyObject *py_user_data; + + g_return_if_fail(user_data != NULL); + + state = pyg_gil_state_ensure(); + + py_user_data = (PyObject *) user_data; + + callback = PyTuple_GetItem(py_user_data, 0); + args = Py_BuildValue("(NO)", + pygobject_new(G_OBJECT(pad)), + blocked ? Py_True : Py_False); + + { + PyObject *tmp = args; + args = PySequence_Concat(tmp, PyTuple_GetItem(py_user_data, 1)); + Py_DECREF (tmp); + } + + ret = PyObject_CallObject(callback, args); + Py_DECREF(args); + + if (!ret) + PyErr_Print(); + else + Py_DECREF(ret); + + pyg_gil_state_release(state); +} + +static PyObject * +_wrap_gst_pad_set_blocked_async (PyGObject *self, PyObject *args) +{ + PyObject *callback, *cbargs = NULL, *data; + PyObject *pblocked, *pret; + gboolean blocked; + gboolean ret; + gint len; + + len = PyTuple_Size(args); + + if (len < 2) { + PyErr_SetString(PyExc_TypeError, "Requires at least 2 arg"); + return NULL; + } + pblocked = PyTuple_GetItem(args, 0); + blocked = PyObject_IsTrue(pblocked); + + callback = PyTuple_GetItem(args, 1); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + return NULL; + } + cbargs = PySequence_GetSlice(args, 2, len); + if (cbargs == NULL) + return NULL; + data = Py_BuildValue("(ON)", callback, cbargs); + if (data == NULL) + return NULL; + pyg_begin_allow_threads; +#if HAVE_SET_BLOCKED_ASYNC_FULL + ret = gst_pad_set_blocked_async_full (GST_PAD (self->obj), blocked, + (GstPadBlockCallback) pad_block_callback_marshal, data, + pad_block_destroy_data); +#else + ret = gst_pad_set_blocked_async (GST_PAD (self->obj), blocked, + (GstPadBlockCallback) pad_block_callback_marshal, data); +#endif + pyg_end_allow_threads; + if (ret) + pret = Py_True; + else + pret = Py_False; + Py_INCREF(pret); + + return pret; +} +%% +override gst_pad_set_caps kwargs +static PyObject * +_wrap_gst_pad_set_caps(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "caps", NULL }; + PyObject *py_caps; + int ret; + GstCaps *caps; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GstPad.set_caps", kwlist, &py_caps)) + return NULL; + if (py_caps == Py_None) { + caps = NULL; + } else { + caps = pygst_caps_from_pyobject (py_caps, NULL); + if (PyErr_Occurred()) + return NULL; + } + pyg_begin_allow_threads; + ret = gst_pad_set_caps(GST_PAD(self->obj), caps); + if (ret && caps) + gst_caps_unref (caps); + pyg_end_allow_threads; + return PyBool_FromLong(ret); + +} +%% +override gst_pad_query_peer_position args +static PyObject * +_wrap_gst_pad_query_peer_position (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + PyObject *ret; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if ((gst_pad_query_peer_position(GST_PAD (self->obj), (GstFormat*) &format, &cur))) { + ret = PyList_New(2); + PyList_SetItem(ret, 0, PyLong_FromLongLong(cur)); + PyList_SetItem(ret, 1, pyg_enum_from_gtype (GST_TYPE_FORMAT, format )); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + + return ret; +} +%% +override gst_pad_query_peer_duration args +static PyObject * +_wrap_gst_pad_query_peer_duration (PyGObject *self, PyObject *args) +{ + gint64 cur; + gint format; + PyObject *pformat; + PyObject *ret; + + pformat = (PyObject*)PyTuple_GetItem(args, 0); + if (pyg_enum_get_value (GST_TYPE_FORMAT, pformat, &format)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if ((gst_pad_query_peer_duration(GST_PAD (self->obj), (GstFormat*) &format, &cur))) { + ret = PyList_New(2); + PyList_SetItem(ret, 0, PyLong_FromLongLong(cur)); + PyList_SetItem(ret, 1, pyg_enum_from_gtype (GST_TYPE_FORMAT, format )); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + + return ret; +} +%% +override gst_pad_query_peer_convert kwargs +static PyObject * +_wrap_gst_pad_query_peer_convert (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "fromformat", "fromvalue", "destformat", NULL }; + PyObject *pfromformat, *pdestformat; + GstFormat srcformat, destformat; + gint64 fromval, dstval; + PyObject *ret; + + /* Input : src_format, src_val, dst_format */ + /* Returns : dst_format, dst_val OR None */ + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "0L0:GstPad.query_peer_convert", + kwlist, &pfromformat, &fromval, &pdestformat)) + return NULL; + if (pyg_enum_get_value(GST_TYPE_FORMAT, pfromformat, (gint *) &srcformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + if (pyg_enum_get_value(GST_TYPE_FORMAT, pdestformat, (gint *) &destformat)) { + PyErr_SetString(PyExc_TypeError, "argument should be a GstFormat"); + return NULL; + } + + if (!(gst_pad_query_peer_convert (GST_PAD(self->obj), + srcformat, fromval, + &destformat, &dstval))) { + Py_INCREF(Py_None); + return Py_None; + } + + ret = PyList_New(2); + PyList_SetItem(ret, 0, pyg_enum_from_gtype (GST_TYPE_FORMAT, destformat)); + PyList_SetItem(ret, 1, PyLong_FromLongLong(dstval)); + + return ret; +} +%% +override-attr GstStaticPadTemplate.static_caps +static PyObject * +_wrap_gst_static_pad_template__get_static_caps(PyObject *self, void *closure) +{ + GstStaticPadTemplate *templ; + + + templ = pyg_pointer_get(self, GstStaticPadTemplate); + return pyg_pointer_new(GST_TYPE_STATIC_CAPS, &(templ->static_caps)); +} +%% +override gst_pad_start_task args +static void +pad_task_handler(void *data) { + PyGILState_STATE state; + PyObject *callback, *args = NULL; + PyObject *py_user_data; + + if (data == NULL) + return; + + state = pyg_gil_state_ensure(); + py_user_data = (PyObject*) data; + + callback = PyTuple_GetItem(py_user_data, 0); + if (!(PyCallable_Check(callback))) { + PyErr_Print(); + goto beach; + } + if (!(args = PyTuple_GetSlice(py_user_data, 1, PyTuple_Size(py_user_data)))) { + PyErr_Print(); + goto beach; + } + + if (!(PyTuple_Check(args))) { + PyErr_Print(); + goto beach; + } + + PyObject_CallObject(callback, args); + + if(PyErr_Occurred()) + PyErr_Print(); + + Py_DECREF(args); + + beach: + pyg_gil_state_release(state); +} + +static PyObject * +_wrap_gst_pad_start_task(PyGObject *self, PyObject *args) +{ + PyObject *callback, *data, *cbargs, *py_ret; + gboolean ret; + + /* 1st argument must be a callable */ + if (PyTuple_Size(args) < 1) { + PyErr_SetString(PyExc_TypeError, "gst.Pad.start_task() requires at least 1 argument"); + return NULL; + } + + callback = PySequence_GetItem(args, 0); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback must be a function or method"); + Py_DECREF(callback); + return NULL; + } + + if (!(cbargs = PySequence_GetSlice(args, 1, PyTuple_Size(args)))) { + Py_DECREF(callback); + return NULL; + } + + if (!(data = Py_BuildValue("(ON)", callback, cbargs))) { + Py_DECREF(callback); + Py_DECREF(cbargs); + return NULL; + } + + pyg_begin_allow_threads; + ret = gst_pad_start_task(GST_PAD(self->obj), (GstTaskFunction) pad_task_handler, data); + pyg_end_allow_threads; + + if (ret == TRUE) + py_ret = Py_True; + else + py_ret = Py_False; + + Py_INCREF(py_ret); + return py_ret; +} +%% +override gst_static_pad_template_get_caps noargs +static PyObject * +_wrap_gst_static_pad_template_get_caps(PyObject *self) +{ + GstCaps *ret; + + ret = gst_static_pad_template_get_caps(pyg_pointer_get(self, GstStaticPadTemplate)); + /* We take a copy of the caps so they don't disappear */ + ret = gst_caps_copy(ret); + return pyg_boxed_new (GST_TYPE_CAPS, ret, FALSE, TRUE); +} diff --git a/gst/gstquery.override b/gst/gstquery.override new file mode 100644 index 0000000..9435eee --- /dev/null +++ b/gst/gstquery.override @@ -0,0 +1,324 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +ignore + gst_query_set_formatsv +%% +override gst_query_parse_position noargs +static PyObject * +_wrap_gst_query_parse_position (PyGstMiniObject *self) +{ + GstFormat format; + gint64 cur; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_POSITION) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Position' query"); + return NULL; + } + + gst_query_parse_position (GST_QUERY(self->obj), &format, &cur); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + cur); +} +%% +override gst_query_parse_duration noargs +static PyObject * +_wrap_gst_query_parse_duration (PyGstMiniObject *self) +{ + GstFormat format; + gint64 cur; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_DURATION) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Duration' query"); + return NULL; + } + + gst_query_parse_duration (GST_QUERY(self->obj), &format, &cur); + + return Py_BuildValue("(OL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + cur); +} +%% +override gst_query_parse_convert noargs +static PyObject * +_wrap_gst_query_parse_convert (PyGstMiniObject *self) +{ + GstFormat srcformat, destformat; + gint64 srcvalue, destvalue; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_CONVERT) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Convert' query"); + return NULL; + } + + gst_query_parse_convert (GST_QUERY(self->obj), + &srcformat, &srcvalue, + &destformat, &destvalue); + + return Py_BuildValue("(OLOL)", + pyg_enum_from_gtype(GST_TYPE_FORMAT, srcformat), + srcvalue, + pyg_enum_from_gtype(GST_TYPE_FORMAT, destformat), + destvalue); +} +%% +override gst_query_parse_segment noargs +static PyObject * +_wrap_gst_query_parse_segment (PyGstMiniObject *self) +{ + gdouble rate; + GstFormat format; + gint64 start_value; + gint64 stop_value; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_SEGMENT) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Segment' query"); + return NULL; + } + + gst_query_parse_segment (GST_QUERY(self->obj), + &rate, &format, + &start_value, &stop_value); + + return Py_BuildValue("(dOLL)", + rate, + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + start_value, stop_value); +} +%% +override gst_query_parse_seeking noargs +static PyObject * +_wrap_gst_query_parse_seeking (PyGstMiniObject *self) +{ + GstFormat format; + gboolean seekable; + gint64 segment_start, segment_end; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_SEEKING) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Seeking' query"); + return NULL; + } + + gst_query_parse_seeking (GST_QUERY(self->obj), + &format, &seekable, + &segment_start, &segment_end); + + return Py_BuildValue("(OOLL)", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + PyBool_FromLong(seekable), + segment_start, + segment_end); +} +%% +override gst_query_parse_formats_length noargs +static PyObject * +_wrap_gst_query_parse_formats_length (PyGstMiniObject *self) +{ + PyObject *ret; + guint n_formats; + + if (GST_QUERY_TYPE(self->obj) != GST_QUERY_FORMATS) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Formats' query"); + return NULL; + } + + gst_query_parse_formats_length (GST_QUERY (self->obj), + &n_formats); + + ret = PyInt_FromLong(n_formats); + + return ret; +} +%% +override gst_query_parse_formats_nth kwargs +static PyObject * +_wrap_gst_query_parse_formats_nth (PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = {"nth", NULL}; + guint nth; + GstFormat format; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_FORMATS) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Formats' query"); + return NULL; + } + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "I:GstQuery.parse_formats_nth", kwlist, &nth)) + return NULL; + + gst_query_parse_formats_nth (GST_QUERY (self->obj), + nth, &format); + + return pyg_enum_from_gtype (GST_TYPE_FORMAT, format); +} +%% +override gst_query_set_formats args +static PyObject * +_wrap_gst_query_set_formats (PyGstMiniObject *self, PyObject *args) +{ + PyObject *ret = NULL; + gint len, i; + GstFormat *formats; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_FORMATS) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'Formats' query"); + return NULL; + } + + if ((len = PyTuple_Size(args)) < 1) { + PyErr_SetString(PyExc_TypeError, "You need to supply at least one gst.Format"); + return NULL; + } + + formats = g_new0(GstFormat, len); + + for (i = 0; i < len; i++) { + if (pyg_enum_get_value(GST_TYPE_FORMAT, + PyTuple_GetItem(args, i), + (gint *) &formats[i])) + goto beach; + } + + gst_query_set_formatsv (GST_QUERY(self->obj), len, formats); + + Py_INCREF(Py_None); + ret = Py_None; + + beach: + g_free(formats); + return ret; +} +%% +override gst_query_get_structure noargs +static PyObject * +_wrap_gst_query_get_structure(PyGstMiniObject *self) +{ + GstStructure *ret; + + pyg_begin_allow_threads; + ret = gst_query_get_structure(GST_QUERY(self->obj)); + pyg_end_allow_threads; + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_STRUCTURE, ret, FALSE, FALSE); +} +%% +override gst_query_parse_latency noargs +static PyObject * +_wrap_gst_query_parse_latency (PyGstMiniObject * self) +{ + gboolean islive; + GstClockTime minlat, maxlat; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_LATENCY) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'latency' query"); + return NULL; + } + + gst_query_parse_latency (GST_QUERY (self->obj), &islive, &minlat, &maxlat); + + return Py_BuildValue("(OKK)", + PyBool_FromLong(islive), + minlat, maxlat); +} +%% +override gst_query_parse_buffering_percent noargs +static PyObject * +_wrap_gst_query_parse_buffering_percent (PyGstMiniObject * self) +{ + gboolean busy; + gint percent; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'buffering' query"); + return NULL; + } + + gst_query_parse_buffering_percent (GST_QUERY (self->obj), &busy, &percent); + + return Py_BuildValue("(Od)", PyBool_FromLong(busy), percent); +} +%% +override gst_query_parse_buffering_stats noargs +static PyObject * +_wrap_gst_query_parse_buffering_stats (PyGstMiniObject * self) +{ + GstBufferingMode mode; + gint avg_in, avg_out; + gint64 buffering_left; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'buffering' query"); + return NULL; + } + + gst_query_parse_buffering_stats (GST_QUERY (self->obj), &mode, + &avg_in, &avg_out, + &buffering_left); + return Py_BuildValue("OiiL", + pyg_enum_from_gtype (GST_TYPE_BUFFERING_MODE, mode), + avg_in, avg_out, buffering_left); +} +%% +override gst_query_parse_buffering_range noargs +static PyObject * +_wrap_gst_query_parse_buffering_range (PyGstMiniObject * self) +{ + GstFormat format; + gint64 start, stop, estimated_total; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_BUFFERING) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'buffering' query"); + return NULL; + } + + gst_query_parse_buffering_range (GST_QUERY (self->obj), &format, + &start, &stop, &estimated_total); + return Py_BuildValue("OLLL", + pyg_enum_from_gtype (GST_TYPE_FORMAT, format), + start, stop, estimated_total); +} +%% +override gst_query_parse_uri noargs +static PyObject * +_wrap_gst_query_parse_uri (PyGstMiniObject * self) +{ + gchar *uri = NULL; + PyObject *ret; + + if (GST_QUERY_TYPE (self->obj) != GST_QUERY_URI) { + PyErr_SetString(PyExc_TypeError, "Query is not a 'uri' query"); + return NULL; + } + + gst_query_parse_uri (GST_QUERY (self->obj), &uri); + if (uri) { + ret = PyString_FromStringAndSize(uri, strlen (uri)); + g_free(uri); + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + return ret; +} diff --git a/gst/gststructure.override b/gst/gststructure.override new file mode 100644 index 0000000..771f83e --- /dev/null +++ b/gst/gststructure.override @@ -0,0 +1,348 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +%% +ignore + gst_structure_get_boolean + gst_structure_get_int + gst_structure_get_fourcc + gst_structure_get_double + gst_structure_get_date + gst_structure_get_clock_time + gst_structure_get_string + gst_structure_get_value + gst_structure_get_enum + gst_structure_get_fraction + gst_structure_set + gst_structure_get_name_id + gst_structure_id_get_value + gst_structure_id_set_value + gst_structure_set_parent_refcount + gst_structure_remove_fields + gst_structure_map_in_place + gst_structure_fixate_field_nearest_fraction +%% +override gst_structure_new kwargs +static int +_wrap_gst_structure_new(PyGBoxed *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", NULL }; + char *name; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:GstStructure.__init__", kwlist, &name)) + return -1; + + self->gtype = GST_TYPE_STRUCTURE; + self->free_on_dealloc = FALSE; + + self->boxed = gst_structure_new(name, NULL); + + if (!self->boxed) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstStructure object"); + return -1; + } + return 0; +} +%% +override gst_structure_set_value kwargs +static PyObject * +_wrap_gst_structure_set_value(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "field", "value", "type_name", NULL }; + char *field; + PyObject *py_value = NULL; + char *type_name = NULL; + GType type; + GValue value = { 0 }; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "sO|s:GstStructure.set_value", + kwlist, &field, &py_value, + &type_name)) { + return NULL; + } + + if (type_name) { + if (strcmp (type_name, "char") == 0) { + type = G_TYPE_CHAR; + } else if (strcmp (type_name, "uchar") == 0) { + type = G_TYPE_UCHAR; + } else if (strcmp (type_name, "boolean") == 0) { + type = G_TYPE_BOOLEAN; + } else if (strcmp (type_name, "int") == 0) { + type = G_TYPE_INT; + } else if (strcmp (type_name, "uint") == 0) { + type = G_TYPE_UINT; + } else if (strcmp (type_name, "long") == 0) { + type = G_TYPE_LONG; + } else if (strcmp (type_name, "ulong") == 0) { + type = G_TYPE_ULONG; + } else if (strcmp (type_name, "int64") == 0) { + type = G_TYPE_INT64; + } else if (strcmp (type_name, "uint64") == 0) { + type = G_TYPE_UINT64; + } else if (strcmp (type_name, "float") == 0) { + type = G_TYPE_FLOAT; + } else if (strcmp (type_name, "double") == 0) { + type = G_TYPE_DOUBLE; + } else if (strcmp (type_name, "string") == 0) { + type = G_TYPE_STRING; + } else { + PyErr_SetString(PyExc_TypeError, + "invalid type name"); + return NULL; + } + } else if (py_value == Py_None) { + PyErr_SetString(PyExc_TypeError, "value can't be None"); + return NULL; + } else { + type = pyg_type_from_object((PyObject *) py_value->ob_type); + } + + if (type != G_TYPE_INVALID) { + g_value_init(&value, type); + } else if (!pygst_value_init_for_pyobject(&value, py_value)) { + return NULL; + } + + if (pygst_value_from_pyobject(&value, py_value) != 0) { + return NULL; + } + gst_structure_set_value(pyg_boxed_get(self, GstStructure), field, + &value); + + Py_INCREF(Py_None); + return Py_None; +} +%% +define GstStructure.has_key args +static PyObject* +_wrap_gst_structure_has_key(PyGObject *self, PyObject *args) +{ + gchar *key; + gboolean has_field; + + if (!PyArg_ParseTuple(args, "s:GstStructure.has_key", &key)) + return NULL; + + has_field = gst_structure_has_field((GstStructure*)self->obj, key); + + return PyBool_FromLong(has_field); +} + +%% +override gst_structure_keys noargs +static PyObject * +_wrap_gst_structure_keys (PyObject *self) +{ + GstStructure *s; + int i, n; + PyObject *ret; + + s = pyg_boxed_get(self, GstStructure); + n = gst_structure_n_fields(s); + ret = PyList_New(n); + + for (i = 0; i < n; ++i) { + const gchar *name = gst_structure_nth_field_name (s, i); + PyList_SetItem(ret, i, PyString_FromString(name)); + } + + return ret; +} + + +%% +override-slot GstStructure.tp_as_mapping +static Py_ssize_t +_wrap_gst_structure_length(PyObject *self) +{ + PyGObject *gself = (PyGObject *)self; + return gst_structure_n_fields((GstStructure*)gself->obj); +} + +static PyObject * +_wrap_gst_structure_subscript(PyGObject *self, PyObject *py_key) +{ + PyObject *v = NULL; + const char *field = PyString_AsString(py_key); + + if (gst_structure_has_field((GstStructure*)self->obj, field)) { + const GValue *gvalue; + gvalue = gst_structure_get_value((GstStructure*)self->obj, field); + g_assert(gvalue != NULL); + v = pygst_value_as_pyobject(gvalue, TRUE); + } else { + PyErr_SetString(PyExc_KeyError, field); + } + + return v; +} + +static int +_wrap_gst_structure_ass_subscript(PyGObject *self, + PyObject *py_key, + PyObject *py_value) +{ + const char *key; + GstStructure* structure; + + structure = (GstStructure*)self->obj; + key = PyString_AsString(py_key); + if (py_value != NULL) { + GValue v = { 0, }; + if (!pygst_value_init_for_pyobject (&v, py_value)) + return -1; + if (pygst_value_from_pyobject(&v, py_value)) + return -1; + gst_structure_set_value(structure, key, &v); + g_value_unset(&v); + } else { + gst_structure_remove_field(structure, key); + } + + return 0; +} + +static PyMappingMethods _wrap_gst_structure_tp_as_mapping = { + _wrap_gst_structure_length, /* mp_length */ + (binaryfunc)_wrap_gst_structure_subscript, /* mp_subscript */ + (objobjargproc)_wrap_gst_structure_ass_subscript /* mp_ass_subscript */ +}; + +%% +override gst_structure_foreach kwargs +static gboolean +pygst_structure_foreach_marshal(GQuark field_id, + const GValue *value, + gpointer user_data) +{ + PyGstCustomNotify *cunote = user_data; + PyObject *py_field, *py_value, *retobj; + gboolean retval = TRUE; + PyGILState_STATE state; + + g_assert(cunote->func); + + state = pyg_gil_state_ensure(); + + py_field = Py_BuildValue("s", g_quark_to_string(field_id)); + py_value = pygst_value_as_pyobject(value, FALSE); + if (cunote->data) + retobj = PyEval_CallFunction(cunote->func, "(NNO)", + py_field, py_value, + cunote->data); + else + retobj = PyEval_CallFunction(cunote->func, "(NN)", + py_field, py_value); + + if (PyErr_Occurred () || (retobj == NULL) || (retobj == Py_None)) { + PyErr_Print (); + retval = FALSE; + } else if (retobj != Py_None) { + retval = PyInt_AsLong(retobj); + } + + Py_XDECREF(retobj); + + pyg_gil_state_release(state); + + return retval; +} + +static PyObject * +_wrap_gst_structure_foreach (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + static char *kwlist[] = { "foreach_function", "args", NULL }; + PyObject *pyfunc, *pyarg = NULL; + PyGstCustomNotify cunote; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "O|O:GstStructure.foreach", + kwlist, + &pyfunc, &pyarg)) { + return NULL; + } + + if (!PyCallable_Check(pyfunc)) { + PyErr_SetString(PyExc_TypeError, "foreach_function not callable"); + return NULL; + } + + cunote.func = pyfunc; + cunote.data = pyarg; + gst_structure_foreach(pyg_boxed_get(self, GstStructure), + pygst_structure_foreach_marshal, + &cunote); + + Py_INCREF(Py_None); + return Py_None; +} +%% +override-slot GstStructure.tp_repr +static PyObject * +_wrap_gst_structure_tp_repr (PyGObject *self) +{ + char *buf; + PyObject *retval; + + buf = g_strdup_printf("", + gst_structure_get_name((GstStructure*)self->obj), + (long)self->obj); + + retval = PyString_FromString(buf); + g_free(buf); + return retval; +} +%% +override gst_structure_from_string kwargs +static PyObject * +_wrap_gst_structure_from_string(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "string", NULL }; + char *string; + GstStructure *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:structure_from_string", kwlist, &string)) + return NULL; + + ret = gst_structure_from_string(string, NULL); + + /* pyg_boxed_new handles NULL checking */ + return pyg_boxed_new(GST_TYPE_STRUCTURE, ret, FALSE, TRUE); +} +%% +override-slot GstStructure.tp_dealloc +static void +_wrap_gst_structure_tp_dealloc (PyObject *self) +{ + PyGBoxed *boxed = (PyGBoxed *) self; + + if (boxed->free_on_dealloc && boxed->boxed) { + gst_structure_free (boxed->boxed); + } else if (boxed->boxed) { + pygst_caps_map_remove_structure (self); + } + + self->ob_type->tp_free((PyObject *)self); +} diff --git a/gst/gsttaglist.override b/gst/gsttaglist.override new file mode 100644 index 0000000..3775232 --- /dev/null +++ b/gst/gsttaglist.override @@ -0,0 +1,160 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2005 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Edward Hervey + */ + +%% +ignore-glob + gst_tag_list_get_* +%% +ignore + gst_tag_list_add + gst_tag_list_add_values + gst_tag_list_add_valist_values + gst_tag_list_copy_value + gst_tag_list_get + gst_tag_list_remove_tag + gst_tag_list_foreach + gst_is_tag_list +%% +define GstTagList.keys noargs +static void +tag_foreach_func_list (const GstTagList *list, + const gchar *tag, + PyObject *py_list) +{ + int count; + + count = gst_tag_list_get_tag_size(GST_TAG_LIST(list), tag); + if (count == 0) + PyErr_SetString(PyExc_KeyError, tag); + else if (count > 0) + PyList_Append(py_list, PyString_FromString(tag)); +} + +static PyObject* +_wrap_gst_tag_list_keys(PyGObject *self) +{ + PyObject *dict; + + dict = PyList_New(0); + + gst_tag_list_foreach(GST_TAG_LIST(self->obj), + (GstTagForeachFunc)tag_foreach_func_list, + (gpointer)dict); + return dict; +} +%% +override-slot GstTagList.tp_as_mapping +static Py_ssize_t +_wrap_gst_tag_list_length(PyObject *self) +{ + PyGObject *gself = (PyGObject *)self; + return gst_structure_n_fields((GstStructure*)gself->obj); +} + +static PyObject * +_wrap_gst_tag_list_subscript(PyGObject *self, PyObject *py_key) +{ + PyObject *v = NULL; + const char *field = PyString_AsString(py_key); + + if (gst_structure_has_field((GstStructure*)self->obj, field)) { + const GValue *gvalue; + gvalue = gst_structure_get_value((GstStructure*)self->obj, field); + g_assert(gvalue != NULL); + v = pygst_value_as_pyobject(gvalue, TRUE); + } else { + PyErr_SetString(PyExc_KeyError, field); + } + + return v; +} + +static int +_wrap_gst_tag_list_ass_subscript(PyGObject *self, + PyObject *py_key, + PyObject *py_value) +{ + const char *key; + GstStructure* structure; + GType tagtype; + + structure = (GstStructure*)self->obj; + key = PyString_AsString(py_key); + if (py_value != NULL) { + GValue v = { 0, }; + + if (!pygst_value_init_for_pyobject (&v, py_value)) + return -1; + if (pygst_value_from_pyobject(&v, py_value)) + return -1; + + /* some tags are supposed to be uint, but there is no unsigned + * int python type, so convert here if needed */ + if (gst_tag_exists (key)) { + tagtype = gst_tag_get_type (key); + + if (tagtype && tagtype != G_VALUE_TYPE (&v)) { + GValue w = { 0, }; + + g_value_init (&w, tagtype); + g_value_transform (&v, &w); + g_value_unset (&v); + g_value_init (&v, tagtype); + g_value_copy (&w, &v); + } + } + gst_structure_set_value(structure, key, &v); + g_value_unset(&v); + } else { + gst_structure_remove_field(structure, key); + } + + return 0; +} + +static PyMappingMethods _wrap_gst_tag_list_tp_as_mapping = { + _wrap_gst_tag_list_length, /* mp_length */ + (binaryfunc)_wrap_gst_tag_list_subscript, /* mp_subscript */ + (objobjargproc)_wrap_gst_tag_list_ass_subscript /* mp_ass_subscript */ +}; +%% +override-slot GstTagList.tp_as_sequence +static int +_wrap_gst_tag_list_contains(PyGObject *self, PyObject *py_key) +{ + return gst_structure_has_field((GstStructure*)self->obj, + PyString_AsString(py_key)); +} + +static PySequenceMethods _wrap_gst_tag_list_tp_as_sequence = { + (lenfunc)NULL, + (binaryfunc)NULL, + (ssizeargfunc)NULL, + (ssizeargfunc)NULL, + (ssizessizeargfunc)NULL, + (ssizeobjargproc)NULL, + (ssizessizeobjargproc)NULL, + (objobjproc)_wrap_gst_tag_list_contains, + (binaryfunc)NULL, + (ssizeargfunc)NULL, +}; + diff --git a/gst/gstversion.override.in b/gst/gstversion.override.in new file mode 100644 index 0000000..fd340aa --- /dev/null +++ b/gst/gstversion.override.in @@ -0,0 +1,21 @@ +%% +include +@IGNORE_GST_0_10_21@ +@IGNORE_GST_0_10_22@ +@IGNORE_GST_0_10_23@ +@IGNORE_GST_PB_0_10_23@ +@IGNORE_GST_0_10_24@ +@IGNORE_GST_0_10_25@ +@IGNORE_GST_PB_0_10_25@ +@IGNORE_GST_0_10_26@ +@IGNORE_GST_PB_0_10_26@ +@IGNORE_GST_LOADSAVE@ +@IGNORE_GST_0_10_29@ +@IGNORE_GST_PB_0_10_29@ +@IGNORE_GST_0_10_30@ +@IGNORE_GST_PB_0_10_30@ +@IGNORE_GST_0_10_31@ +@IGNORE_GST_PB_0_10_31@ +@IGNORE_GST_0_10_32@ +@IGNORE_GST_PB_0_10_32@ +%% diff --git a/gst/interfaces.defs b/gst/interfaces.defs new file mode 100644 index 0000000..c88d812 --- /dev/null +++ b/gst/interfaces.defs @@ -0,0 +1,1255 @@ +;; -*- scheme -*- + +(include "xoverlay.defs") + +;; object definitions ... + +;; +;; interface definitions ... +;; + +(define-interface ColorBalance + (in-module "Gst") + (c-name "GstColorBalance") + (gtype-id "GST_TYPE_COLOR_BALANCE") + (vtable "GstColorBalanceClass") +) + +(define-object ColorBalanceChannel + (in-module "Gst") + (parent "GObject") + (c-name "GstColorBalanceChannel") + (gtype-id "GST_TYPE_COLOR_BALANCE_CHANNEL") + (fields + '("gchar*" "label") + '("gint" "min_value") + '("gint" "max_value") + ) +) + +(define-interface Mixer + (in-module "Gst") + (c-name "GstMixer") + (gtype-id "GST_TYPE_MIXER") + (fields + '("GstMixerType" "mixer_type") + ) + (vtable "GstMixerClass") +) + +(define-object MixerTrack + (in-module "Gst") + (parent "GObject") + (c-name "GstMixerTrack") + (gtype-id "GST_TYPE_MIXER_TRACK") + (fields + '("gchar*" "label") + '("GstMixerTrackFlags" "flags") + '("gint" "num_channels") + '("gint" "min_volume") + '("gint" "max_volume") + ) +) + +(define-object MixerOptions + (in-module "Gst") + (parent "GstMixerTrack") + (c-name "GstMixerOptions") + (gtype-id "GST_TYPE_MIXER_OPTIONS") +) + +(define-interface Navigation + (in-module "Gst") + (c-name "GstNavigation") + (gtype-id "GST_TYPE_NAVIGATION") + (vtable "GstNavigationInterface") +) + +(define-interface PropertyProbe + (in-module "Gst") + (c-name "GstPropertyProbe") + (gtype-id "GST_TYPE_PROPERTY_PROBE") + (vtable "GstPropertyProbeInterface") +) + +(define-interface Tuner + (in-module "Gst") + (c-name "GstTuner") + (gtype-id "GST_TYPE_TUNER") + (vtable "GstTunerClass") +) + +(define-object TunerChannel + (in-module "Gst") + (parent "GObject") + (c-name "GstTunerChannel") + (gtype-id "GST_TYPE_TUNER_CHANNEL") + (fields + '("gchar*" "label") + '("GstTunerChannelFlags" "flags") + '("gfloat" "freq_multiplicator") + '("gulong" "min_frequency") + '("gulong" "max_frequency") + '("gint" "min_signal") + '("gint" "max_signal")) +) + +(define-object TunerNorm + (in-module "Gst") + (parent "GObject") + (c-name "GstTunerNorm") + (gtype-id "GST_TYPE_TUNER_NORM") + (fields + '("gchar*" "label") + '("GValue*" "framerate")) +) + +;; Enumerations and flags ... + +(define-enum ColorBalanceType + (in-module "Gst") + (c-name "GstColorBalanceType") + (gtype-id "GST_TYPE_COLOR_BALANCE_TYPE") + (values + '("hardware" "GST_COLOR_BALANCE_HARDWARE") + '("software" "GST_COLOR_BALANCE_SOFTWARE") + ) +) + +(define-enum MixerType + (in-module "Gst") + (c-name "GstMixerType") + (gtype-id "GST_TYPE_MIXER_TYPE") + (values + '("hardware" "GST_MIXER_HARDWARE") + '("software" "GST_MIXER_SOFTWARE") + ) +) + +(define-enum MixerMessageType + (in-module "Gst") + (c-name "GstMixerMessageType") + (gtype-id "GST_TYPE_MIXER_MESSAGE_TYPE") + (values + '("invalid" "GST_MIXER_MESSAGE_INVALID") + '("mute-toggled" "GST_MIXER_MESSAGE_MUTE_TOGGLED") + '("record-toggled" "GST_MIXER_MESSAGE_RECORD_TOGGLED") + '("volume-changed" "GST_MIXER_MESSAGE_VOLUME_CHANGED") + '("option-changed" "GST_MIXER_MESSAGE_OPTION_CHANGED") + ) +) + +(define-flags MixerFlags + (in-module "Gst") + (c-name "GstMixerFlags") + (gtype-id "GST_TYPE_MIXER_FLAGS") + (values + '("none" "GST_MIXER_FLAG_NONE") + '("auto-notifications" "GST_MIXER_FLAG_AUTO_NOTIFICATIONS") + '("has-whitelist" "GST_MIXER_FLAG_HAS_WHITELIST") + '("grouping" "GST_MIXER_FLAG_GROUPING") + ) +) + +(define-flags MixerTrackFlags + (in-module "Gst") + (c-name "GstMixerTrackFlags") + (gtype-id "GST_TYPE_MIXER_TRACK_FLAGS") + (values + '("input" "GST_MIXER_TRACK_INPUT") + '("output" "GST_MIXER_TRACK_OUTPUT") + '("mute" "GST_MIXER_TRACK_MUTE") + '("record" "GST_MIXER_TRACK_RECORD") + '("master" "GST_MIXER_TRACK_MASTER") + '("software" "GST_MIXER_TRACK_SOFTWARE") + '("no-record" "GST_MIXER_TRACK_NO_RECORD") + '("no-mute" "GST_MIXER_TRACK_NO_MUTE") + '("whitelist" "GST_MIXER_TRACK_WHITELIST") + '("readonly" "GST_MIXER_TRACK_READONLY") + '("writeonly" "GST_MIXER_TRACK_WRITEONLY") + ) +) + +(define-enum NavigationCommand + (in-module "Gst") + (c-name "GstNavigationCommand") + (gtype-id "GST_TYPE_NAVIGATION_COMMAND") + (values + '("invalid" "GST_NAVIGATION_COMMAND_INVALID") + '("menu1" "GST_NAVIGATION_COMMAND_MENU1") + '("menu2" "GST_NAVIGATION_COMMAND_MENU2") + '("menu3" "GST_NAVIGATION_COMMAND_MENU3") + '("menu4" "GST_NAVIGATION_COMMAND_MENU4") + '("menu5" "GST_NAVIGATION_COMMAND_MENU5") + '("menu6" "GST_NAVIGATION_COMMAND_MENU6") + '("menu7" "GST_NAVIGATION_COMMAND_MENU7") + '("left" "GST_NAVIGATION_COMMAND_LEFT") + '("right" "GST_NAVIGATION_COMMAND_RIGHT") + '("up" "GST_NAVIGATION_COMMAND_UP") + '("down" "GST_NAVIGATION_COMMAND_DOWN") + '("activate" "GST_NAVIGATION_COMMAND_ACTIVATE") + '("prev-angle" "GST_NAVIGATION_COMMAND_PREV_ANGLE") + '("next-angle" "GST_NAVIGATION_COMMAND_NEXT_ANGLE") + ) +) + +(define-enum NavigationQueryType + (in-module "Gst") + (c-name "GstNavigationQueryType") + (gtype-id "GST_TYPE_NAVIGATION_QUERY_TYPE") + (values + '("invalid" "GST_NAVIGATION_QUERY_INVALID") + '("commands" "GST_NAVIGATION_QUERY_COMMANDS") + '("angles" "GST_NAVIGATION_QUERY_ANGLES") + ) +) + +(define-enum NavigationMessageType + (in-module "Gst") + (c-name "GstNavigationMessageType") + (gtype-id "GST_TYPE_NAVIGATION_MESSAGE_TYPE") + (values + '("invalid" "GST_NAVIGATION_MESSAGE_INVALID") + '("mouse-over" "GST_NAVIGATION_MESSAGE_MOUSE_OVER") + '("commands-changed" "GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED") + '("angles-changed" "GST_NAVIGATION_MESSAGE_ANGLES_CHANGED") + ) +) + +(define-enum NavigationEventType + (in-module "Gst") + (c-name "GstNavigationEventType") + (gtype-id "GST_TYPE_NAVIGATION_EVENT_TYPE") + (values + '("invalid" "GST_NAVIGATION_EVENT_INVALID") + '("key-press" "GST_NAVIGATION_EVENT_KEY_PRESS") + '("key-release" "GST_NAVIGATION_EVENT_KEY_RELEASE") + '("mouse-button-press" "GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS") + '("mouse-button-release" "GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE") + '("mouse-move" "GST_NAVIGATION_EVENT_MOUSE_MOVE") + '("command" "GST_NAVIGATION_EVENT_COMMAND") + ) +) + +(define-enum StreamVolumeFormat + (in-module "Gst") + (c-name "GstStreamVolumeFormat") + (gtype-id "GST_TYPE_STREAM_VOLUME_FORMAT") + (values + '("linear" "GST_STREAM_VOLUME_FORMAT_LINEAR") + '("cubic" "GST_STREAM_VOLUME_FORMAT_CUBIC") + '("db" "GST_STREAM_VOLUME_FORMAT_DB") + ) +) + +(define-flags TunerChannelFlags + (in-module "Gst") + (c-name "GstTunerChannelFlags") + (gtype-id "GST_TYPE_TUNER_CHANNEL_FLAGS") + (values + '("input" "GST_TUNER_CHANNEL_INPUT") + '("output" "GST_TUNER_CHANNEL_OUTPUT") + '("frequency" "GST_TUNER_CHANNEL_FREQUENCY") + '("audio" "GST_TUNER_CHANNEL_AUDIO") + ) +) + +;; From /opt/gnome/include/gstreamer-0.7/gst/colorbalance/colorbalance.h + +(define-function gst_color_balance_get_type + (c-name "gst_color_balance_get_type") + (return-type "GType") +) + +(define-method list_colorbalance_channels + (of-object "GstColorBalance") + (c-name "gst_color_balance_list_channels") + (return-type "const-GList*") +) + +(define-method set_value + (of-object "GstColorBalance") + (c-name "gst_color_balance_set_value") + (return-type "none") + (parameters + '("GstColorBalanceChannel*" "channel") + '("gint" "value") + ) +) + +(define-method get_value + (of-object "GstColorBalance") + (c-name "gst_color_balance_get_value") + (return-type "gint") + (parameters + '("GstColorBalanceChannel*" "channel") + ) +) + +(define-method value_changed + (of-object "GstColorBalance") + (c-name "gst_color_balance_value_changed") + (return-type "none") + (parameters + '("GstColorBalanceChannel*" "channel") + '("gint" "value") + ) +) + +(define-virtual list_channels + (of-object "GstColorBalance") + (return-type "const-GList*") +) + +(define-virtual set_value + (of-object "GstColorBalance") + (return-type "none") + (parameters + '("GstColorBalanceChannel*" "channel") + '("gint" "value") + ) +) + +(define-virtual get_value + (of-object "GstColorBalance") + (return-type "gint") + (parameters + '("GstColorBalanceChannel*" "channel") + ) +) + + + +;; From /opt/gnome/include/gstreamer-0.7/gst/mixer/mixer.h + +(define-function gst_mixer_get_type + (c-name "gst_mixer_get_type") + (return-type "GType") +) + +(define-method list_tracks + (of-object "GstMixer") + (c-name "gst_mixer_list_tracks") + (return-type "const-GList*") +) + +(define-method set_volume + (of-object "GstMixer") + (c-name "gst_mixer_set_volume") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gint*" "volumes") + ) +) + +(define-method get_volume + (of-object "GstMixer") + (c-name "gst_mixer_get_volume") + (return-type "tuple") + (parameters + '("GstMixerTrack*" "track") + ) +) + +(define-method set_mute + (of-object "GstMixer") + (c-name "gst_mixer_set_mute") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "mute") + ) +) + +(define-method set_record + (of-object "GstMixer") + (c-name "gst_mixer_set_record") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "record") + ) +) + +(define-method set_option + (of-object "GstMixer") + (c-name "gst_mixer_set_option") + (return-type "none") + (parameters + '("GstMixerOptions*" "opts") + '("gchar*" "value") + ) +) + +(define-method get_option + (of-object "GstMixer") + (c-name "gst_mixer_get_option") + (return-type "const-gchar*") + (parameters + '("GstMixerOptions*" "opts") + ) +) + +(define-method mute_toggled + (of-object "GstMixer") + (c-name "gst_mixer_mute_toggled") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "mute") + ) +) + +(define-method record_toggled + (of-object "GstMixer") + (c-name "gst_mixer_record_toggled") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "record") + ) +) + +(define-method volume_changed + (of-object "GstMixer") + (c-name "gst_mixer_volume_changed") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gint*" "volumes") + ) +) + +(define-method option_changed + (of-object "GstMixer") + (c-name "gst_mixer_option_changed") + (return-type "none") + (parameters + '("GstMixerOptions*" "opts") + '("gchar*" "value") + ) +) + +(define-method get_mixer_flags + (of-object "GstMixer") + (c-name "gst_mixer_get_mixer_flags") + (return-type "GstMixerFlags") +) + +(define-function mixer_message_get_type + (c-name "gst_mixer_message_get_type") + (return-type "GstMixerMessageType") + (parameters + '("GstMessage*" "message") + ) +) + +(define-function mixer_message_parse_mute_toggled + (c-name "gst_mixer_message_parse_mute_toggled") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerTrack**" "track") + '("gboolean*" "mute") + ) +) + +(define-function mixer_message_parse_record_toggled + (c-name "gst_mixer_message_parse_record_toggled") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerTrack**" "track") + '("gboolean*" "record") + ) +) + +(define-function mixer_message_parse_volume_changed + (c-name "gst_mixer_message_parse_volume_changed") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerTrack**" "track") + '("gint**" "volumes") + '("gint*" "num_channels") + ) +) + +(define-function mixer_message_parse_option_changed + (c-name "gst_mixer_message_parse_option_changed") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerOptions**" "options") + '("const-gchar**" "value") + ) +) + +(define-function gst_mixer_message_parse_options_list_changed + (c-name "gst_mixer_message_parse_options_list_changed") + (return-type "none") + (parameters + '("GstMessage*" "message") + '("GstMixerOptions**" "options") + ) +) + +(define-virtual list_tracks + (of-object "GstMixer") + (return-type "const-GList*") +) + +(define-virtual set_volume + (of-object "GstMixer") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gint*" "volumes") + ) +) + +(define-virtual get_volume + (of-object "GstMixer") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gint*" "volumes") + ) +) + +(define-virtual set_mute + (of-object "GstMixer") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "mute") + ) +) + +(define-virtual set_record + (of-object "GstMixer") + (return-type "none") + (parameters + '("GstMixerTrack*" "track") + '("gboolean" "record") + ) +) + + +;; From ../gst-plugins-base/gst-libs/gst/interfaces/mixeroptions.h + +(define-function gst_mixer_options_get_type + (c-name "gst_mixer_options_get_type") + (return-type "GType") +) + +(define-method get_values + (of-object "GstMixerOptions") + (c-name "gst_mixer_options_get_values") + (return-type "GList*") +) + + +;; From /opt/gnome/include/gstreamer-0.7/gst/navigation/navigation.h + +(define-function navigation_get_type + (c-name "gst_navigation_get_type") + (return-type "GType") +) + +(define-function navigation_query_get_type + (c-name "gst_navigation_query_get_type") + (return-type "GstNavigationQueryType") + (parameters + '("GstQuery*" "query") + ) +) + +(define-function navigation_query_new_commands + (c-name "gst_navigation_query_new_commands") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-function navigation_query_set_commands + (c-name "gst_navigation_query_set_commands") + (return-type "none") + (parameters + '("GstQuery*" "query") + '("gint" "n_cmds") + ) + (varargs #t) +) + +(define-function navigation_query_set_commandsv + (c-name "gst_navigation_query_set_commandsv") + (return-type "none") + (parameters + '("GstQuery*" "query") + '("gint" "n_cmds") + '("GstNavigationCommand*" "cmds") + ) +) + +(define-function navigation_query_parse_commands_length + (c-name "gst_navigation_query_parse_commands_length") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + '("guint*" "n_cmds") + ) +) + +(define-function navigation_query_parse_commands_nth + (c-name "gst_navigation_query_parse_commands_nth") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + '("guint" "nth") + '("GstNavigationCommand*" "cmd") + ) +) + +(define-function navigation_query_new_angles + (c-name "gst_navigation_query_new_angles") + (caller-owns-return #t) + (return-type "GstQuery*") +) + +(define-function navigation_query_set_angles + (c-name "gst_navigation_query_set_angles") + (return-type "none") + (parameters + '("GstQuery*" "query") + '("guint" "cur_angle") + '("guint" "n_angles") + ) +) + +(define-function navigation_query_parse_angles + (c-name "gst_navigation_query_parse_angles") + (return-type "gboolean") + (parameters + '("GstQuery*" "query") + '("guint*" "cur_angle") + '("guint*" "n_angles") + ) +) + +(define-function navigation_message_get_type + (c-name "gst_navigation_message_get_type") + (return-type "GstNavigationMessageType") + (parameters + '("GstMessage*" "message") + ) +) + +(define-function navigation_message_new_mouse_over + (c-name "gst_navigation_message_new_mouse_over") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("gboolean" "active") + ) +) + +(define-function navigation_message_parse_mouse_over + (c-name "gst_navigation_message_parse_mouse_over") + (return-type "gboolean") + (parameters + '("GstMessage*" "message") + '("gboolean*" "active") + ) +) + +(define-function navigation_message_new_commands_changed + (c-name "gst_navigation_message_new_commands_changed") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + ) +) + +(define-function navigation_message_new_angles_changed + (c-name "gst_navigation_message_new_angles_changed") + (return-type "GstMessage*") + (caller-owns-return #t) + (parameters + '("GstObject*" "src") + '("guint" "cur_angle") + '("guint" "n_angles") + ) +) + +(define-function navigation_message_parse_angles_changed + (c-name "gst_navigation_message_parse_angles_changed") + (return-type "gboolean") + (parameters + '("GstMessage*" "message") + '("guint*" "cur_angle") + '("guint*" "n_angles") + ) +) + +(define-function navigation_event_get_type + (c-name "gst_navigation_event_get_type") + (return-type "GstNavigationEventType") + (parameters + '("GstEvent*" "event") + ) +) + +(define-function navigation_event_parse_key_event + (c-name "gst_navigation_event_parse_key_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("const-gchar**" "key") + ) +) + +(define-function navigation_event_parse_mouse_button_event + (c-name "gst_navigation_event_parse_mouse_button_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("gint*" "button") + '("gdouble*" "x") + '("gdouble*" "y") + ) +) + +(define-function navigation_event_parse_mouse_move_event + (c-name "gst_navigation_event_parse_mouse_move_event") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("gdouble*" "x") + '("gdouble*" "y") + ) +) + +(define-function navigation_event_parse_command + (c-name "gst_navigation_event_parse_command") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("GstNavigationCommand*" "command") + ) +) + +(define-method send_event + (of-object "GstNavigation") + (c-name "gst_navigation_send_event") + (return-type "none") + (parameters + '("GstStructure*" "structure") + ) +) + +(define-method send_key_event + (of-object "GstNavigation") + (c-name "gst_navigation_send_key_event") + (return-type "none") + (parameters + '("const-char*" "event") + '("const-char*" "key") + ) +) + +(define-method send_mouse_event + (of-object "GstNavigation") + (c-name "gst_navigation_send_mouse_event") + (return-type "none") + (parameters + '("const-char*" "event") + '("int" "button") + '("double" "x") + '("double" "y") + ) +) + +(define-virtual send_event + (of-object "GstNavigation") + (return-type "none") + (parameters + '("GstStructure*" "structure") + ) +) + +(define-method send_command + (of-object "GstNavigation") + (c-name "gst_navigation_send_command") + (return-type "none") + (parameters + '("GstNavigationCommand" "command") + ) +) + +;; From /opt/gnome/include/gstreamer-0.7/gst/propertyprobe/propertyprobe.h + +(define-function gst_property_probe_get_type + (c-name "gst_property_probe_get_type") + (return-type "GType") +) + +(define-method probe_get_properties + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_get_properties") + (return-type "const-GList*") +) + +(define-method probe_get_property + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_get_property") + (return-type "const-GParamSpec*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method probe_property + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_probe_property") + (return-type "none") + (parameters + '("const-GParamSpec*" "pspec") + ) +) + +(define-method probe_property_name + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_probe_property_name") + (return-type "none") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method needs_probe + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_needs_probe") + (return-type "gboolean") + (parameters + '("const-GParamSpec*" "pspec") + ) +) + +(define-method needs_probe_name + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_needs_probe_name") + (return-type "gboolean") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method get_values + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_get_values") + (return-type "GValueArray*") + (parameters + '("const-GParamSpec*" "pspec") + ) +) + +(define-method probe_get_values_name + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_get_values_name") + (return-type "GValueArray*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-method probe_and_get_values + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_probe_and_get_values") + (return-type "GValueArray*") + (parameters + '("const-GParamSpec*" "pspec") + ) +) + +(define-method probe_and_get_values_name + (of-object "GstPropertyProbe") + (c-name "gst_property_probe_probe_and_get_values_name") + (return-type "GValueArray*") + (parameters + '("const-gchar*" "name") + ) +) + +(define-virtual get_properties + (of-object "GstPropertyProbe") + (return-type "const-GList*") +) + +(define-virtual needs_probe + (of-object "GstPropertyProbe") + (return-type "gboolean") + (parameters + '("guint" "prop_id") + '("const-GParamSpec*" "pspec") + ) +) + +(define-virtual probe_property + (of-object "GstPropertyProbe") + (return-type "none") + (parameters + '("guint" "prop_id") + '("const-GParamSpec*" "pspec") + ) +) + +(define-virtual get_values + (of-object "GstPropertyProbe") + (return-type "GValueArray*") + (parameters + '("guint" "prop_id") + '("const-GParamSpec*" "pspec") + ) +) + + +;; From streamvolume.h + +(define-method set_volume + (of-object "GstStreamVolume") + (c-name "gst_stream_volume_set_volume") + (return-type "none") + (parameters + '("GstStreamVolumeFormat" "format") + '("gdouble" "val") + ) +) + +(define-method get_volume + (of-object "GstStreamVolume") + (c-name "gst_stream_volume_get_volume") + (return-type "gdouble") + (parameters + '("GstStreamVolumeFormat" "format") + ) +) + +(define-method set_mute + (of-object "GstStreamVolume") + (c-name "gst_stream_volume_set_mute") + (return-type "none") + (parameters + '("gboolean" "mute") + ) +) + +(define-method get_mute + (of-object "GstStreamVolume") + (c-name "gst_stream_volume_get_mute") + (return-type "gboolean") +) + +(define-function stream_volume_convert_volume + (c-name "gst_stream_volume_convert_volume") + (return-type "gdouble") + (parameters + '("GstStreamVolumeFormat" "from") + '("GstStreamVolumeFormat" "to") + '("gdouble" "val") + ) +) + + +;; From /opt/gnome/include/gstreamer-0.7/gst/tuner/tuner.h + +(define-function gst_tuner_get_type + (c-name "gst_tuner_get_type") + (return-type "GType") +) + +(define-method list_channels + (of-object "GstTuner") + (c-name "gst_tuner_list_channels") + (return-type "const-GList*") +) + +(define-method set_channel + (of-object "GstTuner") + (c-name "gst_tuner_set_channel") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-method get_channel + (of-object "GstTuner") + (c-name "gst_tuner_get_channel") + (return-type "GstTunerChannel*") +) + +(define-method list_norms + (of-object "GstTuner") + (c-name "gst_tuner_list_norms") + (return-type "const-GList*") +) + +(define-method set_norm + (of-object "GstTuner") + (c-name "gst_tuner_set_norm") + (return-type "none") + (parameters + '("GstTunerNorm*" "channel") + ) +) + +(define-method get_norm + (of-object "GstTuner") + (c-name "gst_tuner_get_norm") + (return-type "GstTunerNorm*") +) + +(define-method set_frequency + (of-object "GstTuner") + (c-name "gst_tuner_set_frequency") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + '("gulong" "frequency") + ) +) + +(define-method get_frequency + (of-object "GstTuner") + (c-name "gst_tuner_get_frequency") + (return-type "gulong") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-method signal_strength + (of-object "GstTuner") + (c-name "gst_tuner_signal_strength") + (return-type "gint") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-method find_norm_by_name + (of-object "GstTuner") + (c-name "gst_tuner_find_norm_by_name") + (return-type "GstTunerNorm*") + (parameters + '("gchar*" "norm") + ) +) + +(define-method find_channel_by_name + (of-object "GstTuner") + (c-name "gst_tuner_find_channel_by_name") + (return-type "GstTunerChannel*") + (parameters + '("gchar*" "channel") + ) +) + +(define-method channel_changed + (of-object "GstTuner") + (c-name "gst_tuner_channel_changed") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-method norm_changed + (of-object "GstTuner") + (c-name "gst_tuner_norm_changed") + (return-type "none") + (parameters + '("GstTunerNorm*" "norm") + ) +) + +(define-method frequency_changed + (of-object "GstTuner") + (c-name "gst_tuner_frequency_changed") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + '("gulong" "frequency") + ) +) + +(define-method signal_changed + (of-object "GstTuner") + (c-name "gst_tuner_signal_changed") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + '("gint" "signal") + ) +) + +(define-virtual list_channels + (of-object "GstTuner") + (return-type "const-GList*") +) + +(define-virtual set_channel + (of-object "GstTuner") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-virtual get_channel + (of-object "GstTuner") + (return-type "GstTunerChannel*") +) + +(define-virtual list_norms + (of-object "GstTuner") + (return-type "const-GList*") +) + +(define-virtual set_norm + (of-object "GstTuner") + (return-type "none") + (parameters + '("GstTunerNorm*" "channel") + ) +) + +(define-virtual get_norm + (of-object "GstTuner") + (return-type "GstTunerNorm*") +) + +(define-virtual set_frequency + (of-object "GstTuner") + (return-type "none") + (parameters + '("GstTunerChannel*" "channel") + '("gulong" "frequency") + ) +) + +(define-virtual get_frequency + (of-object "GstTuner") + (return-type "gulong") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +(define-virtual signal_strength + (of-object "GstTuner") + (return-type "gint") + (parameters + '("GstTunerChannel*" "channel") + ) +) + +;; -*- scheme -*- +; object definitions ... +;; Enumerations and flags ... + + +;; From videoorientation.h + +;; +;; interface definitions ... +;; + +(define-interface VideoOrientation + (in-module "Gst") + (c-name "GstVideoOrientation") + (gtype-id "GST_TYPE_VIDEO_ORIENTATION") + (vtable "GstVideoOrientationClass") +) + +(define-function gst_video_orientation_get_type + (c-name "gst_video_orientation_get_type") + (return-type "GType") +) + +(define-method get_hflip + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_get_hflip") + (return-type "gboolean") + (parameters + '("gboolean*" "flip") + ) +) + +(define-method get_vflip + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_get_vflip") + (return-type "gboolean") + (parameters + '("gboolean*" "flip") + ) +) + +(define-method get_hcenter + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_get_hcenter") + (return-type "gboolean") + (parameters + '("gint*" "center") + ) +) + +(define-method get_vcenter + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_get_vcenter") + (return-type "gboolean") + (parameters + '("gint*" "center") + ) +) + +(define-method set_hflip + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_set_hflip") + (return-type "gboolean") + (parameters + '("gboolean" "flip") + ) +) + +(define-method set_vflip + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_set_vflip") + (return-type "gboolean") + (parameters + '("gboolean" "flip") + ) +) + +(define-method set_hcenter + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_set_hcenter") + (return-type "gboolean") + (parameters + '("gint" "center") + ) +) + +(define-method set_vcenter + (of-object "GstVideoOrientation") + (c-name "gst_video_orientation_set_vcenter") + (return-type "gboolean") + (parameters + '("gint" "center") + ) +) + + diff --git a/gst/interfaces.override b/gst/interfaces.override new file mode 100644 index 0000000..ad06738 --- /dev/null +++ b/gst/interfaces.override @@ -0,0 +1,486 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2004 David I. Lehn + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David I. Lehn + */ +%% +headers +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include +#include +#include +#include +#include +#ifdef HAVE_STREAM_VOLUME_INTERFACE +#include +#endif + +%% +modulename gst.interfaces +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Query as PyGstQuery_Type +%% +include + xoverlay.override + gstversion.override +%% +ignore-glob + _* + gstinterfaces_*init + *_get_type +%% +override gst_tuner_list_channels noargs +static PyObject * +_wrap_gst_tuner_list_channels(PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_TUNER (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_tuner_list_channels(GST_TUNER(self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GstTunerChannel *channel = (GstTunerChannel*)l->data; + PyObject *py_channel = pygobject_new(G_OBJECT(channel)); + PyList_Append(py_list, py_channel); + Py_DECREF(py_channel); + } + + return py_list; +} +%% +override gst_tuner_list_norms noargs +static PyObject * +_wrap_gst_tuner_list_norms(PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_TUNER (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_tuner_list_norms(GST_TUNER(self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GstTunerNorm *norm = (GstTunerNorm*)l->data; + PyObject *py_norm = pygobject_new(G_OBJECT(norm)); + PyList_Append(py_list, py_norm); + Py_DECREF(py_norm); + } + + return py_list; +} +%% +override gst_mixer_list_tracks noargs +static PyObject * +_wrap_gst_mixer_list_tracks(PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_MIXER (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_mixer_list_tracks(GST_MIXER(self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GstMixerTrack *track = (GstMixerTrack*)l->data; + PyObject *py_track = pygobject_new(G_OBJECT(track)); + PyList_Append(py_list, py_track); + Py_DECREF(py_track); + } + + return py_list; +} +%% +override gst_color_balance_list_channels noargs +static PyObject * +_wrap_gst_color_balance_list_channels(PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_COLOR_BALANCE (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_color_balance_list_channels(GST_COLOR_BALANCE(self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GstColorBalanceChannel *channel = (GstColorBalanceChannel*)l->data; + PyObject *py_channel = pygobject_new(G_OBJECT(channel)); + PyList_Append(py_list, py_channel); + Py_DECREF(py_channel); + } + + return py_list; +} +%% +override gst_mixer_options_get_values noargs +static PyObject * +_wrap_gst_mixer_options_get_values (PyGObject *self) +{ + GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_MIXER_OPTIONS (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_mixer_options_get_values (GST_MIXER_OPTIONS (self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + gchar *value = (gchar *) l->data; + PyObject *py_string = PyString_FromString(g_strdup(value)); + PyList_Append(py_list, py_string); + Py_DECREF (py_string); + } + + return py_list; +} + +%% +override gst_mixer_set_volume kwargs +static PyObject * +_wrap_gst_mixer_set_volume (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "track", "volumes", NULL }; + PyGObject *track; + PyObject *py_tuple; + gint *volumes = NULL; + gint channels; + int i; + PyObject *ret; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, "O!O:GstMixer.set_volume", + kwlist, &PyGstMixerTrack_Type, &track, &py_tuple)) + return NULL; + + g_object_get (GST_MIXER_TRACK (track->obj), "num-channels", &channels, + NULL); + + if (channels != PyTuple_Size (py_tuple)) { + PyErr_Format (PyExc_TypeError, + "Track channel count %d != volume tuple size %d", + channels, (gint) PyTuple_Size (py_tuple)); + return NULL; + } + + Py_INCREF(Py_None); + ret = Py_None; + + if (channels == 0) + return ret; + + volumes = g_malloc (channels * sizeof (gint)); + for (i = 0; i < channels; ++i) { + volumes[i] = PyInt_AsLong (PyTuple_GET_ITEM (py_tuple, i)); + } + + pyg_begin_allow_threads; + gst_mixer_set_volume (GST_MIXER (self->obj), GST_MIXER_TRACK (track->obj), + volumes); + pyg_end_allow_threads; + + g_free (volumes); + + return ret; +} + +%% +override gst_mixer_get_volume kwargs +static PyObject * +_wrap_gst_mixer_get_volume (PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "track", NULL }; + PyGObject *track; + PyObject *py_tuple; + gint *volumes = NULL; + gint channels; + int i; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, "O!:GstMixer.get_volume", + kwlist, &PyGstMixerTrack_Type, &track)) + return NULL; + + g_object_get (GST_MIXER_TRACK (track->obj), "num-channels", &channels, + NULL); + + volumes = g_malloc (channels * sizeof (gint)); + /* 0 channels will cause volume to be a NULL pointer, but we still want + * our (empty) tuple */ + if (channels) { + pyg_begin_allow_threads; + gst_mixer_get_volume (GST_MIXER (self->obj), GST_MIXER_TRACK (track->obj), + volumes); + pyg_end_allow_threads; + } + + py_tuple = PyTuple_New (channels); + + for (i = 0; i < channels; ++i) { + PyTuple_SET_ITEM (py_tuple, i, PyInt_FromLong (volumes[i])); + } + g_free (volumes); + + return py_tuple; +} + +%% +override gst_property_probe_get_property args +static PyObject * +_wrap_gst_property_probe_get_property (PyGObject *self, PyObject *args) +{ + const char *name; + const GParamSpec *spec; + + if (!PyArg_ParseTuple(args, "s:ProbeProperty.get_property", &name)) + return NULL; + + pyg_begin_allow_threads; + spec = gst_property_probe_get_property (GST_PROPERTY_PROBE (self->obj), + name); + pyg_end_allow_threads; + + if (!spec) { + PyErr_Format(PyExc_ValueError, "unknown property: %s", name); + return NULL; + } + + return pyg_param_spec_new((GParamSpec*)spec); +} +%% +override gst_property_probe_get_properties noargs +static PyObject * +_wrap_gst_property_probe_get_properties (PyGObject *self) +{ + const GList *l, *list; + PyObject *py_list; + + g_return_val_if_fail (GST_IS_PROPERTY_PROBE (self->obj), PyList_New(0)); + + pyg_begin_allow_threads; + list = gst_property_probe_get_properties (GST_PROPERTY_PROBE (self->obj)); + pyg_end_allow_threads; + + py_list = PyList_New(0); + for (l = list; l; l = l->next) { + GParamSpec *spec = (GParamSpec*)l->data; + PyObject *py_gspec = pyg_param_spec_new((GParamSpec*)spec); + PyList_Append(py_list, py_gspec); + Py_DECREF(py_gspec); + } + + return py_list; +} +%% +override gst_property_probe_get_values_name args +static PyObject * +_wrap_gst_property_probe_get_values_name (PyGObject *self, PyObject *args) +{ + const char *name; + GValueArray *array; + PyObject *py_list; + int i; + + g_return_val_if_fail (GST_IS_PROPERTY_PROBE (self->obj), PyList_New(0)); + + if (!PyArg_ParseTuple(args, "s:ProbeProperty.get_values_name", &name)) + return NULL; + + pyg_begin_allow_threads; + array = gst_property_probe_get_values_name (GST_PROPERTY_PROBE (self->obj), + name); + pyg_end_allow_threads; + + py_list = PyList_New(0); + + if (array) { + for (i = 0; i < array->n_values; i++) { + GValue *value = g_value_array_get_nth(array, i); + PyObject *py_value = pyg_value_as_pyobject(value, TRUE); + PyList_Append(py_list, py_value); + Py_DECREF(py_value); + + } + g_value_array_free(array); + } + + return py_list; +} +%% +override gst_mixer_message_parse_mute_toggled noargs +static PyObject * +_wrap_gst_mixer_message_parse_mute_toggled (PyGstMiniObject * self) +{ + GstMixerTrack *track; + gboolean mute; + + if (GST_MESSAGE(self->obj)->type != GST_MIXER_MESSAGE_MUTE_TOGGLED) { + PyErr_SetString(PyExc_TypeError, "Message is not a mute-toggled message"); + return NULL; + } + gst_mixer_message_parse_mute_toggled (GST_MESSAGE(self->obj), &track, &mute); + + return Py_BuildValue("(OO)", + pygobject_new(G_OBJECT (track)), + PyBool_FromLong(mute)); +} +%% +override gst_mixer_message_parse_record_toggled noargs +static PyObject * +_wrap_gst_mixer_message_parse_record_toggled (PyGstMiniObject * self) +{ + GstMixerTrack *track; + gboolean record; + + if (GST_MESSAGE(self->obj)->type != GST_MIXER_MESSAGE_RECORD_TOGGLED) { + PyErr_SetString(PyExc_TypeError, "Message is not a record-toggled message"); + return NULL; + } + gst_mixer_message_parse_record_toggled (GST_MESSAGE(self->obj), &track, &record); + + return Py_BuildValue("(OO)", + pygobject_new(G_OBJECT (track)), + PyBool_FromLong(record)); +} +%% +override gst_mixer_message_parse_volume_changed noargs +static PyObject * +_wrap_gst_mixer_message_parse_volume_changed (PyGstMiniObject * self) +{ + GstMixerTrack *track; + gint *volumes; + gint num_channels; + PyObject *pvolumes; + int i; + + if (GST_MESSAGE(self->obj)->type != GST_MIXER_MESSAGE_VOLUME_CHANGED) { + PyErr_SetString(PyExc_TypeError, "Message is not a volume-changed message"); + return NULL; + } + gst_mixer_message_parse_volume_changed (GST_MESSAGE(self->obj), &track, &volumes, &num_channels); + + pvolumes = PyList_New (num_channels); + + for (i = 0; i < num_channels; ++i) { + PyList_SET_ITEM (pvolumes, i, PyInt_FromLong (volumes[i])); + } + g_free (volumes); + + return Py_BuildValue("(OOi)", + pygobject_new(G_OBJECT (track)), + pvolumes, num_channels); +} +%% +override gst_mixer_message_parse_option_changed noargs +static PyObject * +_wrap_gst_mixer_message_parse_option_changed (PyGstMiniObject * self) +{ + GstMixerOptions *options; + const gchar *value = NULL; + + if (GST_MESSAGE(self->obj)->type != GST_MIXER_MESSAGE_OPTION_CHANGED) { + PyErr_SetString(PyExc_TypeError, "Message is not a option-changed message"); + return NULL; + } + gst_mixer_message_parse_option_changed (GST_MESSAGE(self->obj), &options, &value); + + return Py_BuildValue("(Os)", + pygobject_new(G_OBJECT (options)), + value); +} +%% +override gst_video_orientation_get_hflip noargs +static PyObject * +_wrap_gst_video_orientation_get_hflip (PyGObject * self) +{ + gboolean flip, res; + + res = gst_video_orientation_get_hflip (GST_VIDEO_ORIENTATION (self->obj), &flip); + + return Py_BuildValue("(OO)", + PyBool_FromLong(res), + PyBool_FromLong(flip)); +} +%% +override gst_video_orientation_get_vflip noargs +static PyObject * +_wrap_gst_video_orientation_get_vflip (PyGObject * self) +{ + gboolean flip, res; + + res = gst_video_orientation_get_vflip (GST_VIDEO_ORIENTATION (self->obj), &flip); + + return Py_BuildValue("(OO)", + PyBool_FromLong(res), + PyBool_FromLong(flip)); +} +%% +override gst_video_orientation_get_hcenter noargs +static PyObject * +_wrap_gst_video_orientation_get_hcenter (PyGObject * self) +{ + gboolean res; + gint center; + + res = gst_video_orientation_get_hcenter (GST_VIDEO_ORIENTATION (self->obj), ¢er); + + return Py_BuildValue("(Oi)", + PyBool_FromLong(res), + center); +} +%% +override gst_video_orientation_get_vcenter noargs +static PyObject * +_wrap_gst_video_orientation_get_vcenter (PyGObject * self) +{ + gboolean res; + gint center; + + res = gst_video_orientation_get_vcenter (GST_VIDEO_ORIENTATION (self->obj), ¢er); + + return Py_BuildValue("(Oi)", + PyBool_FromLong(res), + center); +} diff --git a/gst/interfacesmodule.c b/gst/interfacesmodule.c new file mode 100644 index 0000000..b297db4 --- /dev/null +++ b/gst/interfacesmodule.c @@ -0,0 +1,55 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2004 David I. Lehn + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David I. Lehn + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include "pygst.h" + +void pyinterfaces_register_classes (PyObject * d); +void pyinterfaces_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pyinterfaces_functions[]; + +DL_EXPORT (void) +initinterfaces (void) +{ + PyObject *m, *d; + + init_pygobject (); + pygst_init (); + + m = Py_InitModule ("interfaces", pyinterfaces_functions); + d = PyModule_GetDict (m); + + pyinterfaces_register_classes (d); + pyinterfaces_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.interfaces"); + } +} diff --git a/gst/libs.defs b/gst/libs.defs new file mode 100644 index 0000000..17436c9 --- /dev/null +++ b/gst/libs.defs @@ -0,0 +1,684 @@ +;; -*- scheme -*- +; object definitions ... + +(define-object ControlSource + (in-module "Gst") + (parent "GObject") + (c-name "GstControlSource") + (gtype-id "GST_TYPE_CONTROL_SOURCE") +) + +(define-object Controller + (in-module "Gst") + (parent "GObject") + (c-name "GstController") + (gtype-id "GST_TYPE_CONTROLLER") +) + +(define-object InterpolationControlSource + (in-module "Gst") + (parent "GstControlSource") + (c-name "GstInterpolationControlSource") + (gtype-id "GST_TYPE_INTERPOLATION_CONTROL_SOURCE") +) + +(define-object LFOControlSource + (in-module "Gst") + (parent "GstControlSource") + (c-name "GstLFOControlSource") + (gtype-id "GST_TYPE_LFO_CONTROL_SOURCE") +) + + +;; Enumerations and flags ... + +(define-enum InterpolateMode + (in-module "Gst") + (c-name "GstInterpolateMode") + (values + '("none" "GST_INTERPOLATE_NONE") + '("trigger" "GST_INTERPOLATE_TRIGGER") + '("linear" "GST_INTERPOLATE_LINEAR") + '("quadratic" "GST_INTERPOLATE_QUADRATIC") + '("cubic" "GST_INTERPOLATE_CUBIC") + '("user" "GST_INTERPOLATE_USER") + ) +) + +(define-enum LFOWaveform + (in-module "Gst") + (c-name "GstLFOWaveform") + (gtype-id "GST_TYPE_LFO_WAVEFORM") + (values + '("sine" "GST_LFO_WAVEFORM_SINE") + '("square" "GST_LFO_WAVEFORM_SQUARE") + '("saw" "GST_LFO_WAVEFORM_SAW") + '("reverse-saw" "GST_LFO_WAVEFORM_REVERSE_SAW") + '("triangle" "GST_LFO_WAVEFORM_TRIANGLE") + ) +) + +(define-enum DPVersion + (in-module "Gst") + (c-name "GstDPVersion") + (gtype-id "GST_TYPE_DP_VERSION") + (values + '("0-2" "GST_DP_VERSION_0_2") + '("1-0" "GST_DP_VERSION_1_0") + ) +) + +(define-flags DPHeaderFlag + (in-module "Gst") + (c-name "GstDPHeaderFlag") + (values + '("none" "GST_DP_HEADER_FLAG_NONE") + '("crc-header" "GST_DP_HEADER_FLAG_CRC_HEADER") + '("crc-payload" "GST_DP_HEADER_FLAG_CRC_PAYLOAD") + '("crc" "GST_DP_HEADER_FLAG_CRC") + ) +) + +(define-enum DPPayloadType + (in-module "Gst") + (c-name "GstDPPayloadType") + (values + '("none" "GST_DP_PAYLOAD_NONE") + '("buffer" "GST_DP_PAYLOAD_BUFFER") + '("caps" "GST_DP_PAYLOAD_CAPS") + '("event-none" "GST_DP_PAYLOAD_EVENT_NONE") + ) +) + +;; From ../gstreamer/libs/gst/controller/gst-controller.h + +(define-function gst_controller_get_type + (c-name "gst_controller_get_type") + (return-type "GType") +) + +(define-function gst_controller_new_valist + (c-name "gst_controller_new_valist") + (return-type "GstController*") + (parameters + '("GObject*" "object") + '("va_list" "var_args") + ) +) + +(define-function gst_controller_new_list + (c-name "gst_controller_new_list") + (is-constructor-of "GstController") + (return-type "GstController*") + (parameters + '("GObject*" "object") + '("GList*" "list") + ) +) + +(define-function gst_controller_new + (c-name "gst_controller_new") + (return-type "GstController*") + (parameters + '("GObject*" "object") + ) + (varargs #t) +) + +(define-method remove_properties_valist + (of-object "GstController") + (c-name "gst_controller_remove_properties_valist") + (return-type "gboolean") + (parameters + '("va_list" "var_args") + ) +) + +(define-method remove_properties + (of-object "GstController") + (c-name "gst_controller_remove_properties") + (return-type "gboolean") + (parameters + ) + (varargs #t) +) + +(define-method remove_properties_list + (of-object "GstController") + (c-name "gst_controller_remove_properties_list") + (return-type "gboolean") + (parameters + '("GList*" "list") + ) +) + +(define-method set_disabled + (of-object "GstController") + (c-name "gst_controller_set_disabled") + (return-type "none") + (parameters + '("gboolean" "disabled") + ) +) + +(define-method set_property_disabled + (of-object "GstController") + (c-name "gst_controller_set_property_disabled") + (return-type "none") + (parameters + '("gchar*" "property_name") + '("gboolean" "disabled") + ) +) + +(define-method set_control_source + (of-object "GstController") + (c-name "gst_controller_set_control_source") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GstControlSource*" "csource") + ) +) + +(define-method get_control_source + (of-object "GstController") + (c-name "gst_controller_get_control_source") + (return-type "GstControlSource*") + (parameters + '("gchar*" "property_name") + ) +) +(define-method set + (of-object "GstController") + (c-name "gst_controller_set") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GstClockTime" "timestamp") + '("GValue*" "value") + ) +) + +(define-method set_from_list + (of-object "GstController") + (c-name "gst_controller_set_from_list") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GSList*" "timedvalues") + ) +) + +(define-method unset + (of-object "GstController") + (c-name "gst_controller_unset") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GstClockTime" "timestamp") + ) +) + +(define-method unset_all + (of-object "GstController") + (c-name "gst_controller_unset_all") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + ) +) + +(define-method get + (of-object "GstController") + (c-name "gst_controller_get") + (return-type "GValue*") + (parameters + '("gchar*" "property_name") + '("GstClockTime" "timestamp") + ) +) + +(define-method get_all + (of-object "GstController") + (c-name "gst_controller_get_all") + (return-type "const-GList*") + (parameters + '("gchar*" "property_name") + ) +) + +(define-method suggest_next_sync + (of-object "GstController") + (c-name "gst_controller_suggest_next_sync") + (return-type "GstClockTime") +) + +(define-method sync_values + (of-object "GstController") + (c-name "gst_controller_sync_values") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + ) +) + +(define-method get_value_arrays + (of-object "GstController") + (c-name "gst_controller_get_value_arrays") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GSList*" "value_arrays") + ) +) + +(define-method get_value_array + (of-object "GstController") + (c-name "gst_controller_get_value_array") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GstValueArray*" "value_array") + ) +) + +(define-method set_interpolation_mode + (of-object "GstController") + (c-name "gst_controller_set_interpolation_mode") + (return-type "gboolean") + (parameters + '("gchar*" "property_name") + '("GstInterpolateMode" "mode") + ) +) + +(define-function object_control_properties + (c-name "gst_object_control_properties") + (return-type "GstController*") + (parameters + '("GObject*" "object")) + (varargs #t) +) + +(define-function object_uncontrol_properties + (c-name "gst_object_uncontrol_properties") + (return-type "gboolean") + (parameters + '("GObject*" "object") + ) + (varargs #t) +) + +(define-function object_get_controller + (c-name "gst_object_get_controller") + (return-type "GstController*") + (parameters + '("GObject*" "object") + ) +) + +(define-function object_set_controller + (c-name "gst_object_set_controller") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("GstController*" "controller") + ) +) + +(define-function object_suggest_next_sync + (c-name "gst_object_suggest_next_sync") + (return-type "GstClockTime") + (parameters + '("GObject*" "object") + ) +) + +(define-function object_sync_values + (c-name "gst_object_sync_values") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("GstClockTime" "timestamp") + ) +) + +(define-function gst_object_set_control_source + (c-name "gst_object_set_control_source") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("gchar*" "property_name") + '("GstControlSource*" "csource") + ) +) + +(define-function gst_object_get_control_source + (c-name "gst_object_get_control_source") + (return-type "GstControlSource*") + (parameters + '("GObject*" "object") + '("gchar*" "property_name") + ) +) + +(define-function object_get_value_arrays + (c-name "gst_object_get_value_arrays") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("GstClockTime" "timestamp") + '("GSList*" "value_arrays") + ) +) + +(define-function object_get_value_array + (c-name "gst_object_get_value_array") + (return-type "gboolean") + (parameters + '("GObject*" "object") + '("GstClockTime" "timestamp") + '("GstValueArray*" "value_array") + ) +) + +(define-function object_get_control_rate + (c-name "gst_object_get_control_rate") + (return-type "GstClockTime") + (parameters + '("GObject*" "object") + ) +) + +(define-function object_set_control_rate + (c-name "gst_object_set_control_rate") + (return-type "none") + (parameters + '("GObject*" "object") + '("GstClockTime" "control_rate") + ) +) + +(define-function gst_controller_init + (c-name "gst_controller_init") + (return-type "gboolean") + (parameters + '("int*" "argc") + '("char***" "argv") + ) +) + + + +;; From gstcontrolsource.h + +(define-function gst_control_source_get_type + (c-name "gst_control_source_get_type") + (return-type "GType") + (parameters + ) +) + +(define-method get_value + (of-object "GstControlSource") + (c-name "gst_control_source_get_value") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GValue*" "value") + ) +) + +(define-method get_value_array + (of-object "GstControlSource") + (c-name "gst_control_source_get_value_array") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GstValueArray*" "value_array") + ) +) + +(define-method bind + (of-object "GstControlSource") + (c-name "gst_control_source_bind") + (return-type "gboolean") + (parameters + '("GParamSpec*" "pspec") + ) +) + + + +;; From gstinterpolationcontrolsource.h + +(define-function gst_interpolation_control_source_get_type + (c-name "gst_interpolation_control_source_get_type") + (return-type "GType") + (parameters + ) +) + +(define-function gst_interpolation_control_source_new + (c-name "gst_interpolation_control_source_new") + (is-constructor-of "GstInterpolationControlSource") + (return-type "GstInterpolationControlSource*") + (parameters + ) +) + +(define-method set_interpolation_mode + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_set_interpolation_mode") + (return-type "gboolean") + (parameters + '("GstInterpolateMode" "mode") + ) +) + +(define-method set + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_set") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + '("GValue*" "value") + ) +) + +(define-method set_from_list + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_set_from_list") + (return-type "gboolean") + (parameters + '("GSList*" "timedvalues") + ) +) + +(define-method unset + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_unset") + (return-type "gboolean") + (parameters + '("GstClockTime" "timestamp") + ) +) + +(define-method unset_all + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_unset_all") + (return-type "none") +) + +(define-method get_all + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_get_all") + (return-type "GList*") +) + +(define-method get_count + (of-object "GstInterpolationControlSource") + (c-name "gst_interpolation_control_source_get_count") + (return-type "gint") +) + + + +;; From gstlfocontrolsource.h + +(define-function gst_lfo_control_source_get_type + (c-name "gst_lfo_control_source_get_type") + (return-type "GType") + (parameters + ) +) + +(define-function gst_lfo_waveform_get_type + (c-name "gst_lfo_waveform_get_type") + (return-type "GType") + (parameters + ) +) + +(define-function gst_lfo_control_source_new + (c-name "gst_lfo_control_source_new") + (is-constructor-of "GstLfoControlSource") + (return-type "GstLFOControlSource*") + (parameters + ) +) + +;; From ../gstreamer/libs/gst/dataprotocol/dataprotocol.h + +(define-function dp_init + (c-name "gst_dp_init") + (return-type "none") +) + +(define-function dp_packetizer_new + (c-name "gst_dp_packetizer_new") + (is-constructor-of "GstDpPacketizer") + (return-type "GstDPPacketizer*") + (parameters + '("GstDPVersion" "version") + ) +) + +(define-function gst_dp_crc + (c-name "gst_dp_crc") + (return-type "guint16") + (parameters + '("const-guint8*" "buffer") + '("guint" "length") + ) +) + +(define-function dp_header_payload_length + (c-name "gst_dp_header_payload_length") + (return-type "guint32") + (parameters + '("const-gchar*" "header") + ) +) + +(define-function dp_header_payload_type + (c-name "gst_dp_header_payload_type") + (return-type "GstDPPayloadType") + (parameters + '("const-gchar*" "header") + ) +) + +(define-function dp_header_from_buffer + (c-name "gst_dp_header_from_buffer") + (return-type "gboolean") + (parameters + '("const-GstBuffer*" "buffer") + '("GstDPHeaderFlag" "flags") + '("guint*" "length") + '("guint8**" "header") + ) +) + +(define-function dp_packet_from_caps + (c-name "gst_dp_packet_from_caps") + (return-type "gboolean") + (parameters + '("const-GstCaps*" "caps") + '("GstDPHeaderFlag" "flags") + '("guint*" "length") + '("guint8**" "header") + '("guint8**" "payload") + ) +) + +(define-function dp_packet_from_event + (c-name "gst_dp_packet_from_event") + (return-type "gboolean") + (parameters + '("const-GstEvent*" "event") + '("GstDPHeaderFlag" "flags") + '("guint*" "length") + '("guint8**" "header") + '("guint8**" "payload") + ) +) + +(define-function dp_buffer_from_header + (c-name "gst_dp_buffer_from_header") + (return-type "GstBuffer*") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + ) +) + +(define-function dp_caps_from_packet + (c-name "gst_dp_caps_from_packet") + (return-type "GstCaps*") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + '("const-guint8*" "payload") + ) +) + +(define-function dp_event_from_packet + (c-name "gst_dp_event_from_packet") + (return-type "GstEvent*") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + '("const-guint8*" "payload") + ) +) + +(define-function dp_validate_header + (c-name "gst_dp_validate_header") + (return-type "gboolean") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + ) +) + +(define-function dp_validate_payload + (c-name "gst_dp_validate_payload") + (return-type "gboolean") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + '("const-guint8*" "payload") + ) +) + +(define-function dp_validate_packet + (c-name "gst_dp_validate_packet") + (return-type "gboolean") + (parameters + '("guint" "header_length") + '("const-guint8*" "header") + '("const-guint8*" "payload") + ) +) diff --git a/gst/pbutils.defs b/gst/pbutils.defs new file mode 100644 index 0000000..a662eaf --- /dev/null +++ b/gst/pbutils.defs @@ -0,0 +1,1056 @@ +;; -*- scheme -*- +; object definitions ... +;; Enumerations and flags ... + +(define-boxed InstallPluginsContext + (in-module "Gst") + (c-name "GstInstallPluginsContext") + (gtype-id "GST_TYPE_INSTALL_PLUGINS_CONTEXT") +) + +(define-enum InstallPluginsReturn + (in-module "Gst") + (c-name "GstInstallPluginsReturn") + (gtype-id "GST_TYPE_INSTALL_PLUGINS_RETURN") + (values + '("success" "GST_INSTALL_PLUGINS_SUCCESS") + '("not-found" "GST_INSTALL_PLUGINS_NOT_FOUND") + '("error" "GST_INSTALL_PLUGINS_ERROR") + '("partial-success" "GST_INSTALL_PLUGINS_PARTIAL_SUCCESS") + '("user-abort" "GST_INSTALL_PLUGINS_USER_ABORT") + '("crashed" "GST_INSTALL_PLUGINS_CRASHED") + '("invalid" "GST_INSTALL_PLUGINS_INVALID") + '("started-ok" "GST_INSTALL_PLUGINS_STARTED_OK") + '("internal-failure" "GST_INSTALL_PLUGINS_INTERNAL_FAILURE") + '("helper-missing" "GST_INSTALL_PLUGINS_HELPER_MISSING") + '("install-in-progress" "GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS") + ) +) + +(define-object Discoverer + (in-module "Gst") + (parent "GObject") + (c-name "GstDiscoverer") + (gtype-id "GST_TYPE_DISCOVERER") +) + +(define-enum DiscovererResult + (in-module "Gst") + (c-name "GstDiscovererResult") + (gtype-id "GST_TYPE_DISCOVERER_RESULT") + (values + '("ok" "GST_DISCOVERER_OK") + '("uri-invalid" "GST_DISCOVERER_URI_INVALID") + '("error" "GST_DISCOVERER_ERROR") + '("timeout" "GST_DISCOVERER_TIMEOUT") + '("busy" "GST_DISCOVERER_BUSY") + '("missing-plugins" "GST_DISCOVERER_MISSING_PLUGINS") + ) +) + +(define-miniobject DiscovererInfo + (in-module "Gst") + (c-name "GstDiscovererInfo") + (parent "GstMiniObject") + (gtype-id "GST_TYPE_DISCOVERER_INFO") +) + +(define-miniobject DiscovererStreamInfo + (in-module "Gst") + (c-name "GstDiscovererStreamInfo") + (parent "GstMiniObject") + (gtype-id "GST_TYPE_DISCOVERER_STREAM_INFO") +) + +(define-miniobject DiscovererContainerInfo + (in-module "Gst") + (c-name "GstDiscovererContainerInfo") + (parent "GstDiscovererStreamInfo") + (gtype-id "GST_TYPE_DISCOVERER_CONTAINER_INFO") +) + +(define-miniobject DiscovererAudioInfo + (in-module "Gst") + (c-name "GstDiscovererAudioInfo") + (parent "GstDiscovererStreamInfo") + (gtype-id "GST_TYPE_DISCOVERER_AUDIO_INFO") +) + +(define-miniobject DiscovererVideoInfo + (in-module "Gst") + (c-name "GstDiscovererVideoInfo") + (parent "GstDiscovererStreamInfo") + (gtype-id "GST_TYPE_DISCOVERER_VIDEO_INFO") +) + +(define-miniobject EncodingProfile + (in-module "Gst") + (c-name "GstEncodingProfile") + (parent "GstMiniObject") + (gtype-id "GST_TYPE_ENCODING_PROFILE") +) + +(define-miniobject EncodingContainerProfile + (in-module "Gst") + (c-name "GstEncodingContainerProfile") + (parent "GstEncodingProfile") + (gtype-id "GST_TYPE_ENCODING_CONTAINER_PROFILE") +) + +(define-miniobject EncodingVideoProfile + (in-module "Gst") + (c-name "GstEncodingVideoProfile") + (parent "GstEncodingProfile") + (gtype-id "GST_TYPE_ENCODING_VIDEO_PROFILE") +) + +(define-miniobject EncodingAudioProfile + (in-module "Gst") + (c-name "GstEncodingAudioProfile") + (parent "GstEncodingProfile") + (gtype-id "GST_TYPE_ENCODING_AUDIO_PROFILE") +) + +(define-miniobject EncodingTarget + (in-module "Gst") + (c-name "GstEncodingTarget") + (parent "GstMiniObject") + (gtype-id "GST_TYPE_ENCODING_TARGET") +) + +;; From codec-utils.h + +(define-function codec_utils_aac_get_sample_rate_from_index + (c-name "gst_codec_utils_aac_get_sample_rate_from_index") + (return-type "guint") + (parameters + '("guint" "sr_idx") + ) +) + +(define-function codec_utils_aac_get_profile + (c-name "gst_codec_utils_aac_get_profile") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "audio_config") + '("guint" "len") + ) +) + +(define-function codec_utils_aac_get_level + (c-name "gst_codec_utils_aac_get_level") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "audio_config") + '("guint" "len") + ) +) + +(define-method codec_utils_aac_caps_set_level_and_profile + (of-object "GstCaps") + (c-name "gst_codec_utils_aac_caps_set_level_and_profile") + (return-type "gboolean") + (parameters + '("const-guint8*" "audio_config") + '("guint" "len") + ) +) + +(define-function codec_utils_h264_get_profile + (c-name "gst_codec_utils_h264_get_profile") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "sps") + '("guint" "len") + ) +) + +(define-function codec_utils_h264_get_level + (c-name "gst_codec_utils_h264_get_level") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "sps") + '("guint" "len") + ) +) + +(define-method codec_utils_h264_caps_set_level_and_profile + (of-object "GstCaps") + (c-name "gst_codec_utils_h264_caps_set_level_and_profile") + (return-type "gboolean") + (parameters + '("const-guint8*" "sps") + '("guint" "len") + ) +) + +(define-function codec_utils_mpeg4video_get_profile + (c-name "gst_codec_utils_mpeg4video_get_profile") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "vis_obj_seq") + '("guint" "len") + ) +) + +(define-function codec_utils_mpeg4video_get_level + (c-name "gst_codec_utils_mpeg4video_get_level") + (return-type "const-gchar*") + (parameters + '("const-guint8*" "vis_obj_seq") + '("guint" "len") + ) +) + +(define-method codec_utils_mpeg4video_caps_set_level_and_profile + (of-object "GstCaps") + (c-name "gst_codec_utils_mpeg4video_caps_set_level_and_profile") + (return-type "gboolean") + (parameters + '("const-guint8*" "vis_obj_seq") + '("guint" "len") + ) +) + + +;; From descriptions.h + +(define-function add_codec_description_to_tag_list + (c-name "gst_pb_utils_add_codec_description_to_tag_list") + (return-type "gboolean") + (parameters + '("GstTagList*" "taglist") + '("const-gchar*" "codec_tag") + '("const-GstCaps*" "caps") + ) +) + +(define-function get_codec_description + (c-name "gst_pb_utils_get_codec_description") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "caps") + ) +) + +(define-function get_source_description + (c-name "gst_pb_utils_get_source_description") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function get_sink_description + (c-name "gst_pb_utils_get_sink_description") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function get_decoder_description + (c-name "gst_pb_utils_get_decoder_description") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "caps") + ) +) + +(define-function get_encoder_description + (c-name "gst_pb_utils_get_encoder_description") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "caps") + ) +) + +(define-function get_element_description + (c-name "gst_pb_utils_get_element_description") + (return-type "gchar*") + (parameters + '("const-gchar*" "factory_name") + ) +) + + + +;; From install-plugins.h + +(define-function install_plugins_context_new + (c-name "gst_install_plugins_context_new") + (is-constructor-of "GstInstallPluginsContext") + (return-type "GstInstallPluginsContext*") +) + +(define-method free + (of-object "GstInstallPluginsContext") + (c-name "gst_install_plugins_context_free") + (return-type "none") +) + +(define-method set_xid + (of-object "GstInstallPluginsContext") + (c-name "gst_install_plugins_context_set_xid") + (return-type "none") + (parameters + '("guint" "xid") + ) +) + +(define-function install_plugins_async + (c-name "gst_install_plugins_async") + (return-type "GstInstallPluginsReturn") + (parameters + '("gchar**" "details") + '("GstInstallPluginsContext*" "ctx") + '("GstInstallPluginsResultFunc" "func") + '("gpointer" "user_data") + ) +) + +(define-function install_plugins_sync + (c-name "gst_install_plugins_sync") + (return-type "GstInstallPluginsReturn") + (parameters + '("gchar**" "details") + '("GstInstallPluginsContext*" "ctx") + ) +) + +(define-method get_name + (of-object "GstInstallPluginsReturn") + (c-name "gst_install_plugins_return_get_name") + (return-type "const-gchar*") +) + +(define-function install_plugins_installation_in_progress + (c-name "gst_install_plugins_installation_in_progress") + (return-type "gboolean") +) + +(define-function install_plugins_supported + (c-name "gst_install_plugins_supported") + (return-type "gboolean") +) + + +;; From encoding-profile.h + +(define-method get_name + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_name") + (return-type "const-gchar*") +) + +(define-method get_description + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_description") + (return-type "const-gchar*") +) + +(define-method get_format + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_format") + (return-type "const-GstCaps*") +) + +(define-method get_preset + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_preset") + (return-type "const-gchar*") +) + +(define-method get_presence + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_presence") + (return-type "guint") +) + +(define-method get_restriction + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_restriction") + (return-type "const-GstCaps*") +) + +(define-method set_name + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_name") + (return-type "none") + (parameters + '("const-gchar*" "name" (null-ok) (default "NULL")) + ) +) + +(define-method set_description + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_description") + (return-type "none") + (parameters + '("const-gchar*" "description" (null-ok) (default "NULL")) + ) +) + +(define-method set_format + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_format") + (return-type "none") + (parameters + '("GstCaps*" "format") + ) +) + +(define-method set_preset + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_preset") + (return-type "none") + (parameters + '("const-gchar*" "preset" (null-ok) (default "NULL")) + ) +) + +(define-method set_restriction + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_restriction") + (return-type "none") + (parameters + '("GstCaps*" "restriction" (null-ok) (default "NULL")) + ) +) + +(define-method set_presence + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_set_presence") + (return-type "none") + (parameters + '("guint" "presence") + ) +) + +(define-method is_equal + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_is_equal") + (return-type "gboolean") + (parameters + '("GstEncodingProfile*" "b") + ) +) + +(define-method get_input_caps + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_input_caps") + (return-type "GstCaps*") +) + +(define-method get_type_nick + (of-object "GstEncodingProfile") + (c-name "gst_encoding_profile_get_type_nick") + (return-type "const-gchar*") +) + +(define-function encoding_profile_find + (c-name "gst_encoding_profile_find") + (return-type "GstEncodingProfile*") + (parameters + '("const-gchar*" "targetname") + '("const-gchar*" "profilename") + '("const-gchar*" "category" (null-ok) (default "NULL")) + ) +) + +(define-method add_profile + (of-object "GstEncodingContainerProfile") + (c-name "gst_encoding_container_profile_add_profile") + (return-type "gboolean") + (parameters + '("GstEncodingProfile*" "profile") + ) +) + +(define-method contains_profile + (of-object "GstEncodingContainerProfile") + (c-name "gst_encoding_container_profile_contains_profile") + (return-type "gboolean") + (parameters + '("GstEncodingProfile*" "profile") + ) +) + +(define-method get_profiles + (of-object "GstEncodingContainerProfile") + (c-name "gst_encoding_container_profile_get_profiles") + (return-type "const-GList*") +) + +(define-function gst_encoding_container_profile_new + (c-name "gst_encoding_container_profile_new") + (is-constructor-of "GstEncodingContainerProfile") + (return-type "GstEncodingContainerProfile*") + (parameters + '("const-gchar*" "name" (null-ok) (default "NULL")) + '("const-gchar*" "description" (null-ok) (default "NULL")) + '("GstCaps*" "format") + '("const-gchar*" "preset"(null-ok) (default "NULL")) + ) +) + +(define-function gst_encoding_video_profile_new + (c-name "gst_encoding_video_profile_new") + (is-constructor-of "GstEncodingVideoProfile") + (return-type "GstEncodingVideoProfile*") + (parameters + '("GstCaps*" "format") + '("const-gchar*" "preset" (null-ok) (default "NULL")) + '("GstCaps*" "restriction" (null-ok)) + '("guint" "presence") + ) +) + +(define-function gst_encoding_audio_profile_new + (c-name "gst_encoding_audio_profile_new") + (is-constructor-of "GstEncodingAudioProfile") + (return-type "GstEncodingAudioProfile*") + (parameters + '("GstCaps*" "format") + '("const-gchar*" "preset" (null-ok) (default "NULL")) + '("GstCaps*" "restriction" (null-ok)) + '("guint" "presence") + ) +) + +(define-method get_pass + (of-object "GstEncodingVideoProfile") + (c-name "gst_encoding_video_profile_get_pass") + (return-type "guint") +) + +(define-method get_variableframerate + (of-object "GstEncodingVideoProfile") + (c-name "gst_encoding_video_profile_get_variableframerate") + (return-type "gboolean") +) + +(define-method set_pass + (of-object "GstEncodingVideoProfile") + (c-name "gst_encoding_video_profile_set_pass") + (return-type "none") + (parameters + '("guint" "pass") + ) +) + +(define-method set_variableframerate + (of-object "GstEncodingVideoProfile") + (c-name "gst_encoding_video_profile_set_variableframerate") + (return-type "none") + (parameters + '("gboolean" "variableframerate") + ) +) + + + +;; From encoding-target.h + +(define-function gst_encoding_target_new + (c-name "gst_encoding_target_new") + (is-constructor-of "GstEncodingTarget") + (return-type "GstEncodingTarget*") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "category") + '("const-gchar*" "description") + '("const-GList*" "profiles") + ) +) + +(define-method get_name + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_get_name") + (return-type "const-gchar*") +) + +(define-method get_category + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_get_category") + (return-type "const-gchar*") +) + +(define-method get_description + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_get_description") + (return-type "const-gchar*") +) + +(define-method get_profiles + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_get_profiles") + (return-type "const-GList*") +) + +(define-method add_profile + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_add_profile") + (return-type "gboolean") + (parameters + '("GstEncodingProfile*" "profile") + ) +) + +(define-method save + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_save") + (return-type "gboolean") + (parameters + '("GError**" "error") + ) +) + +(define-method save_to_file + (of-object "GstEncodingTarget") + (c-name "gst_encoding_target_save_to_file") + (return-type "gboolean") + (parameters + '("const-gchar*" "path") + '("GError**" "error") + ) +) + +(define-function encoding_target_load + (c-name "gst_encoding_target_load") + (return-type "GstEncodingTarget*") + (parameters + '("const-gchar*" "name") + '("const-gchar*" "category") + '("GError**" "error") + ) +) + +(define-function encoding_target_load_from_file + (c-name "gst_encoding_target_load_from_file") + (return-type "GstEncodingTarget*") + (parameters + '("const-gchar*" "path") + '("GError**" "error") + ) +) + +(define-function encoding_list_available_categories + (c-name "gst_encoding_list_available_categories") + (return-type "GList*") +) + +(define-function encoding_list_all_targets + (c-name "gst_encoding_list_all_targets") + (return-type "GList*") + (parameters + '("const-gchar*" "categoryname") + ) +) + + + +;; From gstdiscoverer.h + +(define-method get_previous + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_previous") + (return-type "GstDiscovererStreamInfo*") +) + +(define-method get_next + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_next") + (return-type "GstDiscovererStreamInfo*") +) + +(define-method get_caps + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_caps") + (return-type "GstCaps*") +) + +(define-method get_tags + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_tags") + (return-type "const-GstTagList*") +) + +(define-method get_misc + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_misc") + (return-type "const-GstStructure*") +) + +(define-method get_stream_type_nick + (of-object "GstDiscovererStreamInfo") + (c-name "gst_discoverer_stream_info_get_stream_type_nick") + (return-type "const-gchar*") +) + +(define-method get_streams + (of-object "GstDiscovererContainerInfo") + (c-name "gst_discoverer_container_info_get_streams") + (return-type "GList*") +) + +(define-method get_channels + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_channels") + (return-type "guint") +) + +(define-method get_sample_rate + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_sample_rate") + (return-type "guint") +) + +(define-method get_depth + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_depth") + (return-type "guint") +) + +(define-method get_bitrate + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_bitrate") + (return-type "guint") +) + +(define-method get_max_bitrate + (of-object "GstDiscovererAudioInfo") + (c-name "gst_discoverer_audio_info_get_max_bitrate") + (return-type "guint") +) + +(define-method get_width + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_width") + (return-type "guint") +) + +(define-method get_height + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_height") + (return-type "guint") +) + +(define-method get_depth + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_depth") + (return-type "guint") +) + +(define-method get_framerate_num + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_framerate_num") + (return-type "guint") +) + +(define-method get_framerate_denom + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_framerate_denom") + (return-type "guint") +) + +(define-method get_par_num + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_par_num") + (return-type "guint") +) + +(define-method get_par_denom + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_par_denom") + (return-type "guint") +) + +(define-method is_interlaced + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_is_interlaced") + (return-type "gboolean") +) + +(define-method get_bitrate + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_bitrate") + (return-type "guint") +) + +(define-method get_max_bitrate + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_get_max_bitrate") + (return-type "guint") +) + +(define-method is_image + (of-object "GstDiscovererVideoInfo") + (c-name "gst_discoverer_video_info_is_image") + (return-type "gboolean") +) + +(define-method copy + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_copy") + (return-type "GstDiscovererInfo*") +) + +(define-method get_uri + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_uri") + (return-type "const-gchar*") +) + +(define-method get_result + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_result") + (return-type "GstDiscovererResult") +) + +(define-method get_stream_info + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_stream_info") + (return-type "GstDiscovererStreamInfo*") +) + +(define-method get_stream_list + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_stream_list") + (return-type "GList*") +) + +(define-method get_duration + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_duration") + (return-type "GstClockTime") +) + +(define-method get_seekable + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_seekable") + (return-type "gboolean") +) + +(define-method get_misc + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_misc") + (return-type "const-GstStructure*") +) + +(define-method get_tags + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_tags") + (return-type "const-GstTagList*") +) + +(define-method get_streams + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_streams") + (return-type "GList*") + (parameters + '("GType" "streamtype") + ) +) + +(define-method get_audio_streams + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_audio_streams") + (return-type "GList*") +) + +(define-method get_video_streams + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_video_streams") + (return-type "GList*") +) + +(define-method get_container_streams + (of-object "GstDiscovererInfo") + (c-name "gst_discoverer_info_get_container_streams") + (return-type "GList*") +) + + +(define-function gst_discoverer_new + (c-name "gst_discoverer_new") + (is-constructor-of "GstDiscoverer") + (return-type "GstDiscoverer*") + (parameters + '("GstClockTime" "timeout") + '("GError**" "err") + ) +) + +(define-method start + (of-object "GstDiscoverer") + (c-name "gst_discoverer_start") + (return-type "none") +) + +(define-method stop + (of-object "GstDiscoverer") + (c-name "gst_discoverer_stop") + (return-type "none") +) + +(define-method discover_uri_async + (of-object "GstDiscoverer") + (c-name "gst_discoverer_discover_uri_async") + (return-type "gboolean") + (parameters + '("const-gchar*" "uri") + ) +) + +(define-method discover_uri + (of-object "GstDiscoverer") + (c-name "gst_discoverer_discover_uri") + (return-type "GstDiscovererInfo*") + (parameters + '("const-gchar*" "uri") + '("GError**" "err") + ) +) + +;; From gstpluginsbaseversion.h + +(define-function plugins_base_version + (c-name "gst_plugins_base_version") + (return-type "none") + (parameters + '("guint*" "major") + '("guint*" "minor") + '("guint*" "micro") + '("guint*" "nano") + ) +) + +(define-function plugins_base_version_string + (c-name "gst_plugins_base_version_string") + (return-type "gchar*") +) + + + +;; From missing-plugins.h + +(define-function missing_uri_source_message_new + (c-name "gst_missing_uri_source_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-gchar*" "protocol") + ) +) + +(define-function missing_uri_sink_message_new + (c-name "gst_missing_uri_sink_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-gchar*" "protocol") + ) +) + +(define-function missing_element_message_new + (c-name "gst_missing_element_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-gchar*" "factory_name") + ) +) + +(define-function missing_decoder_message_new + (c-name "gst_missing_decoder_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-GstCaps*" "decode_caps") + ) +) + +(define-function missing_encoder_message_new + (c-name "gst_missing_encoder_message_new") + (return-type "GstMessage*") + (parameters + '("GstElement*" "element") + '("const-GstCaps*" "encode_caps") + ) +) + +(define-function missing_plugin_message_get_installer_detail + (c-name "gst_missing_plugin_message_get_installer_detail") + (return-type "gchar*") + (parameters + '("GstMessage*" "msg") + ) +) + +(define-function missing_plugin_message_get_description + (c-name "gst_missing_plugin_message_get_description") + (return-type "gchar*") + (parameters + '("GstMessage*" "msg") + ) +) + +(define-function is_missing_plugin_message + (c-name "gst_is_missing_plugin_message") + (return-type "gboolean") + (parameters + '("GstMessage*" "msg") + ) +) + +(define-function missing_uri_source_installer_detail_new + (c-name "gst_missing_uri_source_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function missing_uri_sink_installer_detail_new + (c-name "gst_missing_uri_sink_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function missing_element_installer_detail_new + (c-name "gst_missing_element_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-gchar*" "factory_name") + ) +) + +(define-function missing_decoder_installer_detail_new + (c-name "gst_missing_decoder_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "decode_caps") + ) +) + +(define-function missing_encoder_installer_detail_new + (c-name "gst_missing_encoder_installer_detail_new") + (return-type "gchar*") + (parameters + '("const-GstCaps*" "encode_caps") + ) +) + + + +;; From pbutils.h + +(define-function init + (c-name "gst_pb_utils_init") + (return-type "none") +) + + diff --git a/gst/pbutils.override b/gst/pbutils.override new file mode 100644 index 0000000..a3de280 --- /dev/null +++ b/gst/pbutils.override @@ -0,0 +1,486 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +%% +headers + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include "pygstminiobject.h" +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +static void +install_plugins_result_handler(GstInstallPluginsReturn result, gpointer user_data) +{ + PyGILState_STATE state; + PyObject *callback, *args; + PyObject *py_user_data; + PyObject *py_result; + PyObject *ret; + gint i, len; + + if (user_data == NULL) + return; + + state = pyg_gil_state_ensure(); + + py_user_data = (PyObject*) user_data; + py_result = pyg_enum_from_gtype(GST_TYPE_INSTALL_PLUGINS_RETURN, result); + + callback = PyTuple_GetItem(py_user_data, 0); + args = Py_BuildValue("(N)", py_result); + + len = PyTuple_Size(py_user_data); + for (i = 1; i < len; ++i) { + PyObject *tuple = args; + args = PySequence_Concat(tuple, PyTuple_GetItem(py_user_data, i)); + Py_DECREF(tuple); + } + + ret = PyObject_CallObject(callback, args); + + if (PyErr_Occurred()) + PyErr_Print(); + + Py_DECREF(args); + pyg_gil_state_release(state); + +} +%% +modulename gst.pbutils +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Message as PyGstMessage_Type +import gst.MiniObject as PyGstMiniObject_Type +%% +include + gstversion.override +%% +ignore-glob + _* + *init + *_free + *_get_type +%% +override gst_install_plugins_sync kwargs +static PyObject * +_wrap_gst_install_plugins_sync(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "details", "context", NULL }; + PyObject *py_ctx; + GstInstallPluginsContext *ctx; + GstInstallPluginsReturn ret; + gchar **details; + gint len; + PyObject *py_ret; + PyObject *py_details; + Py_ssize_t i; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO:install_plugins_sync", + kwlist, &py_details, &py_ctx)) + return NULL; + + if (!pyg_boxed_check(py_ctx, GST_TYPE_INSTALL_PLUGINS_CONTEXT)) { + PyErr_SetString(PyExc_TypeError, "Argument 2 must be a gst.pbutils.InstallPluginsContext"); + return NULL; + } + + len = PySequence_Size(py_details); + if ((!PySequence_Check(py_details)) || (len < 1)) { + PyErr_SetString(PyExc_TypeError, "Details need to be a non-empty list or tuple of strings"); + Py_DECREF(py_details); + return NULL; + } + + details = g_new0(gchar*, len+1); + + /* Check all items in py_details are strings */ + for (i = 0; i < len; i++) { + PyObject *py_str = PySequence_GetItem(py_details, i); + gchar *str; + + if (!PyString_Check(py_str)) { + PyErr_SetString(PyExc_TypeError, "Details need to be a non-empty list or tuple of strings"); + Py_DECREF(py_str); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + if (!(str = PyString_AsString(py_str))) { + Py_DECREF(py_str); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + details[i] = g_strdup(str); + Py_DECREF(py_str); + } + + ctx = (GstInstallPluginsContext *) pyg_boxed_get(py_ctx, GstInstallPluginsContext); + + pyg_begin_allow_threads; + ret = gst_install_plugins_sync(details, ctx); + pyg_end_allow_threads; + + g_strfreev(details); + + py_ret = pyg_enum_from_gtype(GST_TYPE_INSTALL_PLUGINS_RETURN, ret); + return py_ret; +} +%% +override gst_install_plugins_async args +static PyObject * +_wrap_gst_install_plugins_async(PyGObject *self, PyObject *args) +{ + PyObject *py_ctx, *py_ret, *py_details, *callback, *cbargs, *data; + GstInstallPluginsContext *ctx; + GstInstallPluginsReturn ret; + gchar **details; + gint len; + Py_ssize_t i; + + if (PyTuple_Size(args) < 3) { + PyErr_SetString(PyExc_TypeError, "install_plugins_async requires at least 3 arguments"); + return NULL; + } + + py_ctx = PySequence_GetItem(args, 1); + + if (!pyg_boxed_check(py_ctx, GST_TYPE_INSTALL_PLUGINS_CONTEXT)) { + PyErr_SetString(PyExc_TypeError, "Argument 2 must be a gst.pbutils.InstallPluginsContext"); + Py_DECREF(py_ctx); + return NULL; + } + + py_details = PySequence_GetItem(args, 0); + if ((!PySequence_Check(py_details)) || (PySequence_Size(py_details) < 1)) { + PyErr_SetString(PyExc_TypeError, "Details need to be a non-empty list or tuple of strings"); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + return NULL; + } + + len = PySequence_Size(py_details); + details = g_new0(gchar*, len+1); + + /* Check all items in py_details are strings */ + for (i = 0; i < len; i++) { + PyObject *py_str = PySequence_GetItem(py_details, i); + gchar *str; + + if (!PyString_Check(py_str)) { + PyErr_SetString(PyExc_TypeError, "Details need to be a non-empty list or tuple of strings"); + Py_DECREF(py_str); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + if (!(str = PyString_AsString(py_str))) { + Py_DECREF(py_str); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + details[i] = g_strdup(str); + Py_DECREF(py_str); + } + + callback = PySequence_GetItem(args, 2); + if (!PyCallable_Check(callback)) { + PyErr_SetString(PyExc_TypeError, "callback is not callable"); + Py_DECREF(callback); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + g_strfreev(details); + } + + if (!(cbargs = PySequence_GetSlice(args, 3, PyTuple_Size(args)))) { + Py_DECREF(callback); + Py_DECREF(py_ctx); + Py_DECREF(py_details); + g_strfreev(details); + return NULL; + } + if (!(data = Py_BuildValue("(ON)", callback, cbargs))) { + Py_DECREF(py_details); + Py_DECREF(py_ctx); + Py_DECREF(callback); + Py_DECREF(cbargs); + } + + ctx = (GstInstallPluginsContext *) pyg_boxed_get(py_ctx, GstInstallPluginsContext); + pyg_begin_allow_threads; + ret = gst_install_plugins_async(details, ctx, + (GstInstallPluginsResultFunc) install_plugins_result_handler, + data); + pyg_end_allow_threads; + + g_strfreev(details); + + py_ret = pyg_enum_from_gtype(GST_TYPE_INSTALL_PLUGINS_RETURN, ret); + return py_ret; +} +%% +override gst_plugins_base_version noargs +static PyObject * +_wrap_gst_plugins_base_version (PyObject *self) +{ + guint major, minor, micro, nano; + PyObject *py_tuple; + + gst_plugins_base_version (&major, &minor, µ, &nano); + py_tuple = PyTuple_New(4); + PyTuple_SetItem(py_tuple, 0, PyInt_FromLong(major)); + PyTuple_SetItem(py_tuple, 1, PyInt_FromLong(minor)); + PyTuple_SetItem(py_tuple, 2, PyInt_FromLong(micro)); + PyTuple_SetItem(py_tuple, 3, PyInt_FromLong(nano)); + + return py_tuple; +} +%% +override gst_discoverer_info_get_stream_list noargs +static PyObject * +_wrap_gst_discoverer_info_get_stream_list(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_info_get_stream_list(GST_DISCOVERER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_info_get_streams kwargs +static PyObject * +_wrap_gst_discoverer_info_get_streams(PyGstMiniObject * self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "type", NULL }; + GList *res, *tmp; + PyObject *pyres, *py_type; + GType ftype; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O:GstDiscovererInfo.get_streams", kwlist, &py_type)) + return NULL; + if ((ftype = pyg_type_from_object(py_type)) == 0) + return NULL; + res = gst_discoverer_info_get_streams(GST_DISCOVERER_INFO (self->obj), ftype); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_info_get_audio_streams noargs +static PyObject * +_wrap_gst_discoverer_info_get_audio_streams(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_info_get_audio_streams(GST_DISCOVERER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_info_get_video_streams noargs +static PyObject * +_wrap_gst_discoverer_info_get_video_streams(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_info_get_video_streams(GST_DISCOVERER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_info_get_container_streams noargs +static PyObject * +_wrap_gst_discoverer_info_get_container_streams(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_info_get_container_streams(GST_DISCOVERER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_discoverer_container_info_get_streams noargs +static PyObject * +_wrap_gst_discoverer_container_info_get_streams(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = gst_discoverer_container_info_get_streams(GST_DISCOVERER_CONTAINER_INFO (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + gst_discoverer_stream_info_list_free(res); + return pyres; +} +%% +override gst_encoding_container_profile_get_profiles noargs +static PyObject * +_wrap_gst_encoding_container_profile_get_profiles(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = (GList*) gst_encoding_container_profile_get_profiles(GST_ENCODING_CONTAINER_PROFILE (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + g_list_free (res); + return pyres; +} +%% +override gst_encoding_target_get_profiles noargs +static PyObject * +_wrap_gst_encoding_target_get_profiles(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = (GList*) gst_encoding_target_get_profiles(GST_ENCODING_TARGET (self->obj)); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + g_list_free (res); + return pyres; +} +%% +override gst_encoding_list_all_targets kwargs +static PyObject * +_wrap_gst_encoding_list_all_targets(PyGstMiniObject * self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "categoryname", NULL }; + GList *res, *tmp; + const gchar *categoryname = NULL; + PyObject *pyres; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"!s:GstDiscovererInfo.get_streams", kwlist, &categoryname)) + return NULL; + res = (GList*) gst_encoding_list_all_targets(categoryname); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, pygstminiobject_new((GstMiniObject*) tmp->data)); + } + if (res) + g_list_free (res); + return pyres; +} +%% +override gst_encoding_list_available_categories noargs +static PyObject * +_wrap_gst_encoding_list_available_categories(PyGstMiniObject * self) +{ + GList *res, *tmp; + PyObject *pyres; + + res = (GList*) gst_encoding_list_available_categories(); + + pyres = PyList_New(0); + for (tmp = res; tmp; tmp = tmp->next) { + PyList_Append(pyres, PyString_FromString((const gchar*) tmp->data)); + g_free (tmp->data); + } + if (res) + g_list_free (res); + return pyres; +} +%% +override gst_encoding_target_new kwargs +static int +_wrap_gst_encoding_target_new(PyGstMiniObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "name", "category", "description", NULL }; + char *name, *description, *category; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs,"sss:GstEncodingContainerProfile.__init__", kwlist, &name, &category, &description)) + return -1; + + self->obj = (GstMiniObject *)gst_encoding_target_new(name, category, description, NULL); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstEncodingTarget miniobject"); + return -1; + } + pygstminiobject_register_wrapper((PyObject *)self); + return 0; +} diff --git a/gst/pbutilsmodule.c b/gst/pbutilsmodule.c new file mode 100644 index 0000000..215eca7 --- /dev/null +++ b/gst/pbutilsmodule.c @@ -0,0 +1,65 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include "pygst.h" + +void pypbutils_register_classes (PyObject * d); +void pypbutils_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pypbutils_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for python code */ + +DL_EXPORT (void) +initpbutils (void) +{ + PyObject *m, *d; + PyObject *gst; + + init_pygobject (); + + /* Make sure gst module is loaded and ready */ + gst = pygst_init (); + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.pbutils"); + } + + gst_pb_utils_init (); + + m = Py_InitModule ("pbutils", pypbutils_functions); + d = PyModule_GetDict (m); + + pypbutils_register_classes (d); + pypbutils_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.pbutils"); + } +} diff --git a/gst/pygst-private.h b/gst/pygst-private.h new file mode 100644 index 0000000..cb7c6be --- /dev/null +++ b/gst/pygst-private.h @@ -0,0 +1,44 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2010 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _PYGST_PRIVATE_H_ +#define _PYGST_PRIVATE_H_ + +#ifdef _PYGST_H_ +# error "include pygst.h or pygst-private.h but not both" +#endif + +#define _INSIDE_PYGST_ +#include "pygst.h" +#include "common.h" + +extern PyTypeObject PyGstMiniObject_Type; + +/* from gst-types.c */ +GstCaps *pygst_caps_from_pyobject (PyObject *object, gboolean *copy); +PyObject* pygst_iterator_new(GstIterator *iter); + +/* from pygstminiobject.c */ +PyObject * +pygstminiobject_new(GstMiniObject *obj); + + + +#endif /* _PYGST_PRIVATE_H_ */ diff --git a/gst/pygst.h b/gst/pygst.h new file mode 100644 index 0000000..23b4b8a --- /dev/null +++ b/gst/pygst.h @@ -0,0 +1,102 @@ +/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* gst-python + * Copyright (C) 2010 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _PYGST_H_ +#define _PYGST_H_ + +#include + +#include +#include +#include + +G_BEGIN_DECLS + +struct _PyGst_Functions { + GstCaps* (*caps_from_pyobject) (PyObject *object, gboolean *copy); + PyObject* (*iterator_new) (GstIterator *iter); + PyObject* (*miniobject_new) (GstMiniObject *obj); +}; + +#define pygstminiobject_get(v) (((PyGstMiniObject *)(v))->obj) +#define pygstminiobject_check(v,base) (PyObject_TypeCheck(v,base)) + +typedef struct { + PyObject_HEAD + GstMiniObject *obj; + PyObject *inst_dict; /* the instance dictionary -- must be last */ + PyObject *weakreflist; /* list of weak references */ +} PyGstMiniObject; + +#ifndef _INSIDE_PYGST_ + +#if defined(NO_IMPORT_PYGOBJECT) +extern struct _PyGst_Functions *_PyGst_API; +#else +struct _PyGst_Functions *_PyGst_API; +#endif + +#define pygst_caps_from_pyobject (_PyGst_API->caps_from_pyobject) +#define pygst_iterator_new (_PyGst_API->iterator_new) +#define pygstminiobject_new (_PyGst_API->miniobject_new) + +static inline PyObject * +pygst_init(void) +{ + PyObject *gstobject, *cobject; + + gstobject = PyImport_ImportModule("gst._gst"); + if (!gstobject) { + if (PyErr_Occurred()) + { + PyObject *type, *value, *traceback; + PyObject *py_orig_exc; + PyErr_Fetch(&type, &value, &traceback); + py_orig_exc = PyObject_Repr(value); + Py_XDECREF(type); + Py_XDECREF(value); + Py_XDECREF(traceback); + PyErr_Format(PyExc_ImportError, + "could not import gst (error was: %s)", + PyString_AsString(py_orig_exc)); + Py_DECREF(py_orig_exc); + } else { + PyErr_SetString(PyExc_ImportError, + "could not import gst (no error given)"); + } + return NULL; + } + + cobject = PyObject_GetAttrString(gstobject, "_PyGst_API"); + if (!cobject) { + PyErr_SetString(PyExc_ImportError, + "could not import gst (getting _PyGst_API)"); + return NULL; + } + _PyGst_API = (struct _PyGst_Functions *) PyCObject_AsVoidPtr(cobject); + + return gstobject; +} + +#endif /* _INSIDE_PYGST_ */ + +G_END_DECLS + +#endif /* !_PYGST_H_ */ diff --git a/gst/pygstexception.c b/gst/pygstexception.c new file mode 100644 index 0000000..9e60b16 --- /dev/null +++ b/gst/pygstexception.c @@ -0,0 +1,269 @@ +/* + * pygstexception.c - gst-python exceptions + * Copyright (C) 2005 Alessandro Decina + * + * Authors: + * Alessandro Decina + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include "structmember.h" + +PyObject *PyGstExc_LinkError = NULL; +PyObject *PyGstExc_AddError = NULL; +PyObject *PyGstExc_QueryError = NULL; +PyObject *PyGstExc_RemoveError = NULL; +PyObject *PyGstExc_PluginNotFoundError = NULL; +PyObject *PyGstExc_ElementNotFoundError = NULL; + + +static PyObject * +call_exception_init (PyObject * args) +{ + PyObject *parent_init = NULL; + PyObject *res = NULL; + + /* get Exception.__init__ */ + parent_init = PyObject_GetAttrString (PyExc_Exception, "__init__"); + if (parent_init == NULL) + goto exception; + + /* call Exception.__init__. This will set self.args */ + res = PyObject_CallObject (parent_init, args); + if (res == NULL) + goto exception; + + Py_DECREF (parent_init); + + return res; + +exception: + Py_XDECREF (parent_init); + Py_XDECREF (res); + + return NULL; +} + +static int +add_method (PyObject * klass, PyObject * dict, PyMethodDef * method) +{ + PyObject *module = NULL; + PyObject *func = NULL; + PyObject *meth = NULL; + + module = PyString_FromString ("gst"); + if (module == NULL) + goto exception; + + func = PyCFunction_NewEx (method, NULL, module); + if (func == NULL) + goto exception; + Py_DECREF (module); + + meth = PyMethod_New (func, NULL, klass); + if (meth == NULL) + goto exception; + Py_DECREF (func); + + if (PyDict_SetItemString (dict, method->ml_name, meth) < 0) + goto exception; + Py_DECREF (meth); + + return 0; + +exception: + Py_XDECREF (module); + Py_XDECREF (func); + Py_XDECREF (meth); + + return -1; +} + +static PyObject * +link_error_init (PyObject * self, PyObject * args) +{ + PyObject *err_type = NULL; + int status; + + if (!PyArg_ParseTuple (args, "O|O:__init__", &self, &err_type)) + return NULL; + + if (err_type == NULL) + err_type = Py_None; + Py_INCREF (err_type); + + /* set self.error */ + status = PyObject_SetAttrString (self, "error", err_type); + Py_DECREF (err_type); + if (status < 0) + return NULL; + + return call_exception_init (args); +} + +static PyObject * +element_not_found_error_init (PyObject * self, PyObject * args) +{ + PyObject *element_name = NULL; + int status; + + if (!PyArg_ParseTuple (args, "O|O:__init__", &self, &element_name)) + return NULL; + + if (element_name == NULL) + element_name = Py_None; + Py_INCREF (element_name); + + /* set self.name */ + status = PyObject_SetAttrString (self, "name", element_name); + Py_DECREF (element_name); + if (status < 0) + return NULL; + + return call_exception_init (args); +} + +static PyMethodDef link_error_init_method = { "__init__", + link_error_init, METH_VARARGS +}; + +static PyMethodDef element_not_found_error_init_method = { "__init__", + element_not_found_error_init, METH_VARARGS +}; + +void +pygst_exceptions_register_classes (PyObject * d) +{ + PyObject *dict = NULL; + + /* register gst.LinkError */ + dict = PyDict_New (); + if (dict == NULL) + goto exception; + + PyGstExc_LinkError = PyErr_NewException ("gst.LinkError", + PyExc_Exception, dict); + if (PyGstExc_LinkError == NULL) + goto exception; + + if (add_method (PyGstExc_LinkError, dict, &link_error_init_method) < 0) + goto exception; + + Py_DECREF (dict); + + if (PyDict_SetItemString (d, "LinkError", PyGstExc_LinkError) < 0) + goto exception; + + Py_DECREF (PyGstExc_LinkError); + + /* register gst.AddError */ + PyGstExc_AddError = PyErr_NewException ("gst.AddError", + PyExc_Exception, NULL); + if (PyGstExc_AddError == NULL) + goto exception; + + if (PyDict_SetItemString (d, "AddError", PyGstExc_AddError) < 0) + goto exception; + + Py_DECREF (PyGstExc_AddError); + + /* register gst.RemoveError */ + PyGstExc_RemoveError = PyErr_NewException ("gst.RemoveError", + PyExc_Exception, NULL); + if (PyGstExc_RemoveError == NULL) + goto exception; + + if (PyDict_SetItemString (d, "RemoveError", PyGstExc_RemoveError) < 0) + goto exception; + + Py_DECREF (PyGstExc_RemoveError); + + /* register gst.QueryError */ + PyGstExc_QueryError = PyErr_NewException ("gst.QueryError", + PyExc_Exception, NULL); + if (PyGstExc_QueryError == NULL) + goto exception; + + if (PyDict_SetItemString (d, "QueryError", PyGstExc_QueryError) < 0) + goto exception; + + Py_DECREF (PyGstExc_QueryError); + +/* FIXME: remove this method in 0.11; element_factory_make deals with element + factories, not plug-ins */ + + /* register gst.PluginNotFoundError */ + dict = PyDict_New (); + if (dict == NULL) + goto exception; + + PyGstExc_PluginNotFoundError = + PyErr_NewException ("gst.PluginNotFoundError", PyExc_Exception, dict); + if (PyGstExc_PluginNotFoundError == NULL) + goto exception; + + if (add_method (PyGstExc_PluginNotFoundError, + dict, &element_not_found_error_init_method) < 0) + goto exception; + + Py_DECREF (dict); + + if (PyDict_SetItemString (d, "PluginNotFoundError", + PyGstExc_PluginNotFoundError) < 0) + goto exception; + + Py_DECREF (PyGstExc_PluginNotFoundError); + + /* register gst.ElementNotFoundError */ + dict = PyDict_New (); + if (dict == NULL) + goto exception; + + PyGstExc_ElementNotFoundError = + PyErr_NewException ("gst.ElementNotFoundError", + PyGstExc_PluginNotFoundError, dict); + if (PyGstExc_ElementNotFoundError == NULL) + goto exception; + + if (add_method (PyGstExc_ElementNotFoundError, + dict, &element_not_found_error_init_method) < 0) + goto exception; + + Py_DECREF (dict); + + if (PyDict_SetItemString (d, "ElementNotFoundError", + PyGstExc_ElementNotFoundError) < 0) + goto exception; + + Py_DECREF (PyGstExc_ElementNotFoundError); + + return; + + return; + +exception: + Py_XDECREF (dict); + Py_XDECREF (PyGstExc_LinkError); + Py_XDECREF (PyGstExc_AddError); + Py_XDECREF (PyGstExc_RemoveError); + Py_XDECREF (PyGstExc_QueryError); + Py_XDECREF (PyGstExc_PluginNotFoundError); + Py_XDECREF (PyGstExc_ElementNotFoundError); + + return; +} diff --git a/gst/pygstexception.h b/gst/pygstexception.h new file mode 100644 index 0000000..f6d2297 --- /dev/null +++ b/gst/pygstexception.h @@ -0,0 +1,36 @@ +/* + * pygstexception.h - gst-python exceptions + * Copyright (C) 2005 Alessandro Decina + * + * Authors: + * Alessandro Decina + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _PYGSTEXCEPTION_H_ +#define _PYGSTEXCEPTION_H_ + +extern PyObject *PyGstExc_LinkError; +extern PyObject *PyGstExc_AddError; +extern PyObject *PyGstExc_RemoveError; +extern PyObject *PyGstExc_QueryError; +extern PyObject *PyGstExc_PluginNotFoundError; +extern PyObject *PyGstExc_ElementNotFoundError; + +void pygst_exceptions_register_classes(PyObject *d); + +#endif /* _PYGSTEXCEPTION_H_ */ diff --git a/gst/pygstiterator.c b/gst/pygstiterator.c new file mode 100644 index 0000000..ba009a9 --- /dev/null +++ b/gst/pygstiterator.c @@ -0,0 +1,160 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2005 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ +/* define this for all source files that don't run init_pygobject() + * before including pygobject.h */ +#define NO_IMPORT_PYGOBJECT + +#include "pygst-private.h" + +static void +pygst_iterator_dealloc (PyGstIterator * self) +{ + gst_iterator_free (self->iter); + PyObject_Del ((PyObject *) self); +} + +static PyObject * +pygst_iterator_iter_next (PyGstIterator * self) +{ + gpointer element; + PyObject *retval = NULL; + GstIteratorResult result; + + result = gst_iterator_next (self->iter, &element); + switch (result) { + case GST_ITERATOR_DONE: + PyErr_SetNone (PyExc_StopIteration); + break; + case GST_ITERATOR_OK: + if (g_type_is_a (self->iter->type, G_TYPE_OBJECT)) { + retval = pygobject_new (G_OBJECT (element)); + g_object_unref (element); + } else if (g_type_is_a (self->iter->type, GST_TYPE_MINI_OBJECT)) { + retval = pygstminiobject_new (GST_MINI_OBJECT (element)); + gst_mini_object_unref (element); + } else { + const gchar *type_name; + + type_name = g_type_name (self->iter->type); + PyErr_Format (PyExc_TypeError, "Unsupported child type: %s", + type_name ? type_name : "unknown"); + } + break; + case GST_ITERATOR_RESYNC: + /* XXX: add/raise gst.IteratorResync */ + PyErr_SetString (PyExc_TypeError, "Resync"); + break; + case GST_ITERATOR_ERROR: + PyErr_SetString (PyExc_TypeError, "Error"); + break; + default: + g_assert_not_reached (); + break; + } + return retval; +} + +static PyObject * +pygst_iterator_next (PyGstIterator * self) +{ + /* Be compatible with Pythons API rather than GStreamers */ + return pygst_iterator_iter_next (self); +} + +static PyObject * +pygst_iterator_push (PyGstIterator * self, PyObject * args) +{ + PyGstIterator *other; + + if (!PyArg_ParseTuple (args, "O!:push", &PyGstIterator_Type, &other)) + return NULL; + + gst_iterator_push (self->iter, other->iter); + + Py_INCREF (Py_None); + return Py_None; +} + +static PyObject * +pygst_iterator_resync (PyGstIterator * self) +{ + gst_iterator_resync (self->iter); + + Py_INCREF (Py_None); + return Py_None; +} + +static PyMethodDef _PyGstIterator_methods[] = { + {"next", (PyCFunction) pygst_iterator_next, METH_NOARGS}, + {"push", (PyCFunction) pygst_iterator_push, METH_VARARGS}, + {"resync", (PyCFunction) pygst_iterator_resync, METH_NOARGS}, + {NULL, NULL, 0} +}; + +PyTypeObject PyGstIterator_Type = { + PyObject_HEAD_INIT (NULL) + 0, /* ob_size */ + "gst.Iterator", /* tp_name */ + sizeof (PyGstIterator), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor) pygst_iterator_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "GstIterator wrapper", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc) pygst_iterator_iter_next, /* tp_iternext */ + _PyGstIterator_methods, /* tp_methods */ +}; + +PyObject * +pygst_iterator_new (GstIterator * iter) +{ + PyGstIterator *self; + + if (iter == NULL) { + PyErr_SetString (PyExc_TypeError, "Invalid GstIterator (NULL)"); + return NULL; + } + + self = PyObject_NEW (PyGstIterator, &PyGstIterator_Type); + self->iter = iter; + GST_DEBUG ("self:%p , iterator:%p, type:%lu", + self, self->iter, self->iter->type); + return (PyObject *) self; +} diff --git a/gst/pygstminiobject.c b/gst/pygstminiobject.c new file mode 100644 index 0000000..443d245 --- /dev/null +++ b/gst/pygstminiobject.c @@ -0,0 +1,381 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- + * pygtk- Python bindings for the GTK toolkit. + * Copyright (C) 1998-2003 James Henstridge + * + * pygobject.c: wrapper for the GObject type. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + +#define NO_IMPORT_PYGOBJECT +#define _INSIDE_PYGST_ +#include "common.h" +#include "pygstminiobject.h" +#include "pygst.h" +#include + +static const gchar pygstminiobject_class_id[] = "PyGstMiniObject::class"; +static GQuark pygstminiobject_class_key = 0; +/* static const gchar pygstminiobject_wrapper_id[] = "PyGstMiniObject::wrapper"; */ +/* static GQuark pygstminiobject_wrapper_key = 0; */ + +static void pygstminiobject_dealloc (PyGstMiniObject * self); +/* static int pygstminiobject_traverse(PyGstMiniObject *self, visitproc visit, void *arg); */ +/* static int pygstminiobject_clear(PyGstMiniObject *self); */ + +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/** + * pygstminiobject_lookup_class: + * @gtype: the GType of the GstMiniObject subclass. + * + * This function looks up the wrapper class used to represent + * instances of a GstMiniObject represented by @gtype. If no wrapper class + * or interface has been registered for the given GType, then a new + * type will be created. + * + * Returns: The wrapper class for the GstMiniObject or NULL if the + * GType has no registered type and a new type couldn't be created + */ +PyTypeObject * +pygstminiobject_lookup_class (GType gtype) +{ + PyTypeObject *py_type = NULL; + GType ctype = gtype; + + while (!py_type && ctype) { + py_type = g_type_get_qdata (ctype, pygstminiobject_class_key); + ctype = g_type_parent (ctype); + } + if (!ctype) + g_error ("Couldn't find a good base type!!"); + + return py_type; +} + +/** + * pygstminiobject_register_class: + * @dict: the module dictionary. A reference to the type will be stored here. + * @type_name: not used ? + * @gtype: the GType of the Gstminiobject subclass. + * @type: the Python type object for this wrapper. + * @bases: a tuple of Python type objects that are the bases of this type. + * + * This function is used to register a Python type as the wrapper for + * a particular Gstminiobject subclass. It will also insert a reference to + * the wrapper class into the module dictionary passed as a reference, + * which simplifies initialisation. + */ +void +pygstminiobject_register_class (PyObject * dict, const gchar * type_name, + GType gtype, PyTypeObject * type, PyObject * bases) +{ + PyObject *o; + const char *class_name, *s; + + if (!pygstminiobject_class_key) + pygstminiobject_class_key = + g_quark_from_static_string (pygstminiobject_class_id); + + class_name = type->tp_name; + s = strrchr (class_name, '.'); + if (s != NULL) + class_name = s + 1; + + type->ob_type = &PyType_Type; + type->tp_alloc = PyType_GenericAlloc; + type->tp_new = PyType_GenericNew; + if (bases) { + type->tp_bases = bases; + type->tp_base = (PyTypeObject *) PyTuple_GetItem (bases, 0); + } + + if (PyType_Ready (type) < 0) { + g_warning ("couldn't make the type `%s' ready", type->tp_name); + return; + } + + if (gtype) { + o = pyg_type_wrapper_new (gtype); + PyDict_SetItemString (type->tp_dict, "__gtype__", o); + Py_DECREF (o); + + /* stash a pointer to the python class with the GType */ + Py_INCREF (type); + g_type_set_qdata (gtype, pygstminiobject_class_key, type); + } + + PyDict_SetItemString (dict, (char *) class_name, (PyObject *) type); +} + +void +pygstminiobject_register_wrapper (PyObject * self) +{ +} + + +/** + * pygstminiobject_new: + * @obj: a GstMiniObject instance. + * + * This function gets a reference to a wrapper for the given GstMiniObject + * instance. A new wrapper will always be created. + * + * Returns: a reference to the wrapper for the GstMiniObject. + */ +PyObject * +pygstminiobject_new (GstMiniObject * obj) +{ + PyGstMiniObject *self = NULL; + PyGILState_STATE state; + PyTypeObject *tp = NULL; + + if (obj == NULL) { + Py_INCREF (Py_None); + return Py_None; + } + + /* since mini objects cannot notify us when they get destroyed, we + * can't use a global hash to map GMO to PyO, and have to create a new + * Python object every time we see it */ + tp = pygstminiobject_lookup_class (G_OBJECT_TYPE (obj)); + GST_DEBUG ("have to create wrapper for object %p", obj); + if (!tp) + g_warning ("Couldn't get class for type object : %p", obj); + if (tp->tp_flags & Py_TPFLAGS_HEAPTYPE) { + GST_INFO ("Increment refcount %p", tp); + Py_INCREF (tp); + } + state = pyg_gil_state_ensure (); + self = PyObject_New (PyGstMiniObject, tp); + pyg_gil_state_release (state); + + if (self == NULL) + return NULL; + self->obj = gst_mini_object_ref (obj); + + self->inst_dict = NULL; + self->weakreflist = NULL; + + GST_DEBUG ("created Python object %p for GstMiniObject %p [ref:%d]", + self, obj, GST_MINI_OBJECT_REFCOUNT_VALUE (obj)); + return (PyObject *) self; +} + +static void +pygstminiobject_dealloc (PyGstMiniObject * self) +{ + PyGILState_STATE state; + + g_return_if_fail (self != NULL); + + GST_DEBUG ("At the beginning %p", self); + state = pyg_gil_state_ensure (); + + if (self->obj) { + GST_DEBUG ("PyO %p unreffing GstMiniObject %p [ref:%d]", self, + self->obj, GST_MINI_OBJECT_REFCOUNT_VALUE (self->obj)); + gst_mini_object_unref (self->obj); + GST_DEBUG ("setting self %p -> obj to NULL", self); + self->obj = NULL; + } + + if (self->inst_dict) { + Py_DECREF (self->inst_dict); + self->inst_dict = NULL; + } + + self->ob_type->tp_free ((PyObject *) self); + pyg_gil_state_release (state); + GST_DEBUG ("At the end %p", self); +} + +static int +pygstminiobject_compare (PyGstMiniObject * self, PyGstMiniObject * v) +{ + if (self->obj == v->obj) + return 0; + if (self->obj > v->obj) + return -1; + return 1; +} + +static long +pygstminiobject_hash (PyGstMiniObject * self) +{ + return (long) self->obj; +} + +static PyObject * +pygstminiobject_repr (PyGstMiniObject * self) +{ + gchar buf[256]; + + g_snprintf (buf, sizeof (buf), + "<%s mini-object (%s) at 0x%lx>", + self->ob_type->tp_name, + self->obj ? G_OBJECT_TYPE_NAME (self->obj) : "uninitialized", + (long) self); + return PyString_FromString (buf); +} + + +static void +pygstminiobject_free (PyObject * op) +{ + PyObject_FREE (op); +} + + +/* ---------------- PyGstMiniObject methods ----------------- */ + +static int +pygstminiobject_init (PyGstMiniObject * self, PyObject * args, + PyObject * kwargs) +{ + GType object_type; + GstMiniObjectClass *class; + + if (!PyArg_ParseTuple (args, ":GstMiniObject.__init__", &object_type)) + return -1; + + object_type = pyg_type_from_object ((PyObject *) self); + if (!object_type) + return -1; + + if (G_TYPE_IS_ABSTRACT (object_type)) { + PyErr_Format (PyExc_TypeError, "cannot create instance of abstract " + "(non-instantiable) type `%s'", g_type_name (object_type)); + return -1; + } + + if ((class = g_type_class_ref (object_type)) == NULL) { + PyErr_SetString (PyExc_TypeError, + "could not get a reference to type class"); + return -1; + } + + self->obj = gst_mini_object_new (object_type); + if (self->obj == NULL) + PyErr_SetString (PyExc_RuntimeError, "could not create object"); + + g_type_class_unref (class); + + return (self->obj) ? 0 : -1; +} + +static PyObject * +pygstminiobject__gstminiobject_init__ (PyGstMiniObject * self, PyObject * args, + PyObject * kwargs) +{ + if (pygstminiobject_init (self, args, kwargs) < 0) + return NULL; + Py_INCREF (Py_None); + return Py_None; +} + +static PyObject * +pygstminiobject_copy (PyGstMiniObject * self, PyObject * args) +{ + return pygstminiobject_new (gst_mini_object_copy (self->obj)); +} + +static PyMethodDef pygstminiobject_methods[] = { + {"__gstminiobject_init__", + (PyCFunction) pygstminiobject__gstminiobject_init__, + METH_VARARGS | METH_KEYWORDS}, + {"copy", (PyCFunction) pygstminiobject_copy, METH_VARARGS, + "Copies the miniobject"}, + {NULL, NULL, 0} +}; + +static PyObject * +pygstminiobject_get_dict (PyGstMiniObject * self, void *closure) +{ + if (self->inst_dict == NULL) { + self->inst_dict = PyDict_New (); + if (self->inst_dict == NULL) + return NULL; + } + Py_INCREF (self->inst_dict); + return self->inst_dict; +} + +static PyObject * +pygstminiobject_get_refcount (PyGstMiniObject * self, void *closure) +{ + return PyInt_FromLong (GST_MINI_OBJECT_REFCOUNT_VALUE (self->obj)); +} + +static PyObject * +pygstminiobject_get_flags (PyGstMiniObject * self, void *closure) +{ + return PyInt_FromLong (GST_MINI_OBJECT_FLAGS (self->obj)); +} + +static PyGetSetDef pygstminiobject_getsets[] = { + {"__dict__", (getter) pygstminiobject_get_dict, (setter) 0}, + {"__grefcount__", (getter) pygstminiobject_get_refcount, (setter) 0,}, + {"flags", (getter) pygstminiobject_get_flags, (setter) 0,}, + {NULL, 0, 0} +}; + +PyTypeObject PyGstMiniObject_Type = { + PyObject_HEAD_INIT (NULL) + 0, /* ob_size */ + "gst.MiniObject", /* tp_name */ + sizeof (PyGstMiniObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor) pygstminiobject_dealloc, /* tp_dealloc */ + (printfunc) 0, /* tp_print */ + (getattrfunc) 0, /* tp_getattr */ + (setattrfunc) 0, /* tp_setattr */ + (cmpfunc) pygstminiobject_compare, /* tp_compare */ + (reprfunc) pygstminiobject_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc) pygstminiobject_hash, /* tp_hash */ + (ternaryfunc) 0, /* tp_call */ + (reprfunc) 0, /* tp_str */ + (getattrofunc) 0, /* tp_getattro */ + (setattrofunc) 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + NULL, /* Documentation string */ + (traverseproc) 0, /* tp_traverse */ + (inquiry) 0, /* tp_clear */ + (richcmpfunc) 0, /* tp_richcompare */ + offsetof (PyGstMiniObject, weakreflist), /* tp_weaklistoffset */ + (getiterfunc) 0, /* tp_iter */ + (iternextfunc) 0, /* tp_iternext */ + pygstminiobject_methods, /* tp_methods */ + 0, /* tp_members */ + pygstminiobject_getsets, /* tp_getset */ + (PyTypeObject *) 0, /* tp_base */ + (PyObject *) 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + offsetof (PyGstMiniObject, inst_dict), /* tp_dictoffset */ + (initproc) pygstminiobject_init, /* tp_init */ + (allocfunc) 0, /* tp_alloc */ + (newfunc) 0, /* tp_new */ + (freefunc) pygstminiobject_free, /* tp_free */ + (inquiry) 0, /* tp_is_gc */ + (PyObject *) 0, /* tp_bases */ +}; diff --git a/gst/pygstminiobject.h b/gst/pygstminiobject.h new file mode 100644 index 0000000..08a5304 --- /dev/null +++ b/gst/pygstminiobject.h @@ -0,0 +1,39 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ + +#ifndef _PYGSTMINIOBJECT_H_ +#define _PYGSTMINIOBJECT_H_ + +#include + +#include +#include + +G_BEGIN_DECLS + +/* Work around bugs in PyGILState api fixed in 2.4.0a4 */ +#undef PYGIL_API_IS_BUGGY +#if PY_VERSION_HEX < 0x020400A4 +#define PYGIL_API_IS_BUGGY TRUE +#else +#define PYGIL_API_IS_BUGGY FALSE +#endif + + +void +pygstminiobject_register_class(PyObject *dict, const gchar *type_name, + GType gtype, PyTypeObject *type, + PyObject *bases); +void +pygstminiobject_register_wrapper(PyObject *self); + +void +pygst_miniobject_init(); + +#ifndef _INSIDE_PYGSTMINIOBJECT_ + + +#endif /* !_INSIDE_PYGSTMINIOBJECT_ */ + +G_END_DECLS + +#endif /* !_PYGSTMINIOBJECT_H_ */ diff --git a/gst/pygstvalue.c b/gst/pygstvalue.c new file mode 100644 index 0000000..60fff3a --- /dev/null +++ b/gst/pygstvalue.c @@ -0,0 +1,414 @@ +/* gst-python + * Copyright (C) 2004 Andy Wingo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Andy Wingo + */ + +/* define this for all source files that don't run init_pygobject() + * before including pygobject.h */ +#define NO_IMPORT_PYGOBJECT + +#include "pygst-private.h" +#include "pygstvalue.h" + +static PyObject *gstvalue_class = NULL; +static PyObject *gstfourcc_class = NULL; +static PyObject *gstintrange_class = NULL; +static PyObject *gstdoublerange_class = NULL; +static PyObject *gstfraction_class = NULL; +static PyObject *gstfractionrange_class = NULL; + +/* helper function */ + +/* Finds the greatest common divisor. + * Returns 1 if none other found. + * This is Euclid's algorithm. */ +static long +my_gcd (long num, long denom) +{ + while (denom != 0) { + long temp = num; + + num = denom; + denom = temp % denom; + } + + return ABS (num); +} + +/** + * pygst_value_as_pyobject: + * @value: the GValue object. + * @copy_boxed: true if boxed values should be copied. + * + * This function creates/returns a Python wrapper object that + * represents the GValue passed as an argument. + * + * Returns: a PyObject representing the value. + */ +PyObject * +pygst_value_as_pyobject (const GValue * value, gboolean copy_boxed) +{ + PyObject *ret = pyg_value_as_pyobject (value, copy_boxed); + if (!ret) { + PyErr_Clear (); + if (GST_VALUE_HOLDS_FOURCC (value)) { + gchar str[5]; + g_snprintf (str, 5, "%" GST_FOURCC_FORMAT, + GST_FOURCC_ARGS (gst_value_get_fourcc (value))); + ret = PyObject_Call (gstfourcc_class, Py_BuildValue ("(s)", str), NULL); + } else if (GST_VALUE_HOLDS_INT_RANGE (value)) { + ret = PyObject_Call + (gstintrange_class, + Py_BuildValue ("ii", + gst_value_get_int_range_min (value), + gst_value_get_int_range_max (value)), NULL); + } else if (GST_VALUE_HOLDS_DOUBLE_RANGE (value)) { + ret = PyObject_Call + (gstdoublerange_class, + Py_BuildValue ("dd", + gst_value_get_double_range_min (value), + gst_value_get_double_range_max (value)), NULL); + } else if (GST_VALUE_HOLDS_LIST (value)) { + int i, len; + len = gst_value_list_get_size (value); + ret = PyList_New (len); + for (i = 0; i < len; i++) { + PyList_SetItem (ret, i, + pygst_value_as_pyobject + (gst_value_list_get_value (value, i), copy_boxed)); + } + } else if (GST_VALUE_HOLDS_ARRAY (value)) { + int i, len; + len = gst_value_array_get_size (value); + ret = PyTuple_New (len); + for (i = 0; i < len; i++) { + PyTuple_SetItem (ret, i, + pygst_value_as_pyobject + (gst_value_array_get_value (value, i), copy_boxed)); + } + } else if (GST_VALUE_HOLDS_FRACTION (value)) { + ret = PyObject_Call + (gstfraction_class, + Py_BuildValue ("ii", + gst_value_get_fraction_numerator (value), + gst_value_get_fraction_denominator (value)), NULL); + } else if (GST_VALUE_HOLDS_FRACTION_RANGE (value)) { + const GValue *min, *max; + min = gst_value_get_fraction_range_min (value); + max = gst_value_get_fraction_range_max (value); + ret = PyObject_Call + (gstfractionrange_class, + Py_BuildValue ("OO", + pygst_value_as_pyobject (min, copy_boxed), + pygst_value_as_pyobject (max, copy_boxed)), NULL); + } else if (GST_VALUE_HOLDS_BUFFER (value)) { + return pygstminiobject_new (gst_value_get_mini_object (value)); + } else { + gchar buf[256]; + g_snprintf (buf, 256, "unknown type: %s", + g_type_name (G_VALUE_TYPE (value))); + PyErr_SetString (PyExc_TypeError, buf); + } + } + + if (G_VALUE_TYPE (value) == G_TYPE_STRING) { + PyObject *u = NULL; + + /* FIXME: docs are not clear on whether this sets a python + exception when it fails */ + u = PyUnicode_FromEncodedObject (ret, "utf-8", NULL); + Py_DECREF (ret); + ret = u; + } + + return ret; +} + +#define VALUE_TYPE_CHECK(v, t) \ +G_STMT_START{\ +if (!G_VALUE_HOLDS (v, t)) {\ + gchar errbuf[256];\ + g_snprintf (errbuf, 256, "Could not convert %s to %s",\ + g_type_name (t), g_type_name (G_VALUE_TYPE (v)));\ + PyErr_SetString (PyExc_TypeError, errbuf);\ + return -1;\ +}}G_STMT_END + +gboolean +pygst_value_init_for_pyobject (GValue * value, PyObject * obj) +{ + GType t; + + if (obj == Py_None) { + PyErr_SetString (PyExc_TypeError, "value can't be None"); + return FALSE; + } + + if (!(t = pyg_type_from_object ((PyObject *) obj->ob_type))) { + if (PyObject_IsInstance (obj, gstvalue_class)) { + PyErr_Clear (); + if (PyObject_IsInstance (obj, gstfourcc_class)) + t = GST_TYPE_FOURCC; + else if (PyObject_IsInstance (obj, gstintrange_class)) + t = GST_TYPE_INT_RANGE; + else if (PyObject_IsInstance (obj, gstdoublerange_class)) + t = GST_TYPE_DOUBLE_RANGE; + else if (PyObject_IsInstance (obj, gstfraction_class)) + t = GST_TYPE_FRACTION; + else if (PyObject_IsInstance (obj, gstfractionrange_class)) + t = GST_TYPE_FRACTION_RANGE; + else { + PyErr_SetString (PyExc_TypeError, "Unexpected gst.Value instance"); + return FALSE; + } + } else if (PyObject_IsInstance (obj, (PyObject *) & PyGstMiniObject_Type)) { + PyErr_Clear (); + t = GST_TYPE_MINI_OBJECT; + } else if (PyTuple_Check (obj)) { + PyErr_Clear (); + t = GST_TYPE_ARRAY; + } else if (PyList_Check (obj)) { + PyErr_Clear (); + t = GST_TYPE_LIST; + } else if (PyUnicode_Check (obj)) { + /* unicode strings should be converted to UTF-8 */ + PyErr_Clear (); + t = G_TYPE_STRING; + } else { + /* pyg_type_from_object already set the error */ + return FALSE; + } + } + g_value_init (value, t); + return TRUE; +} + +static int +pygst_value_from_pyobject_internal (GValue * value, PyObject * obj) +{ + GType f = g_type_fundamental (G_VALUE_TYPE (value)); + + /* work around a bug in pygtk whereby pyg_value_from_pyobject claims success + for unknown fundamental types without actually doing anything */ + if (f < G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_USER_FIRST) + && pyg_value_from_pyobject (value, obj) == 0) { + return 0; + } else if (PyObject_IsInstance (obj, gstvalue_class)) { + PyErr_Clear (); + + if (PyObject_IsInstance (obj, gstfourcc_class)) { + PyObject *pystr; + gchar *str; + VALUE_TYPE_CHECK (value, GST_TYPE_FOURCC); + if (!(pystr = PyObject_GetAttrString (obj, "fourcc"))) + return -1; + if (!(str = PyString_AsString (pystr))) + return -1; + g_assert (strlen (str) == 4); + gst_value_set_fourcc (value, GST_STR_FOURCC (str)); + } else if (PyObject_IsInstance (obj, gstintrange_class)) { + PyObject *pyval; + long low, high; + VALUE_TYPE_CHECK (value, GST_TYPE_INT_RANGE); + if (!(pyval = PyObject_GetAttrString (obj, "low"))) + return -1; + low = PyInt_AsLong (pyval); + g_assert (G_MININT <= low && low <= G_MAXINT); + if (!(pyval = PyObject_GetAttrString (obj, "high"))) + return -1; + high = PyInt_AsLong (pyval); + g_assert (G_MININT <= high && high <= G_MAXINT); + gst_value_set_int_range (value, (int) low, (int) high); + } else if (PyObject_IsInstance (obj, gstdoublerange_class)) { + PyObject *pyval; + double low, high; + VALUE_TYPE_CHECK (value, GST_TYPE_DOUBLE_RANGE); + if (!(pyval = PyObject_GetAttrString (obj, "low"))) + return -1; + low = PyFloat_AsDouble (pyval); + if (!(pyval = PyObject_GetAttrString (obj, "high"))) + return -1; + high = PyFloat_AsDouble (pyval); + gst_value_set_double_range (value, low, high); + } else if (PyObject_IsInstance (obj, gstfraction_class)) { + PyObject *pyval; + long num, denom; + long gcd = 0; + VALUE_TYPE_CHECK (value, GST_TYPE_FRACTION); + if (!(pyval = PyObject_GetAttrString (obj, "num"))) + return -1; + num = PyInt_AsLong (pyval); + if ((num == -1) && PyErr_Occurred ()) + return -1; + g_assert (G_MININT <= num && num <= G_MAXINT); + if (!(pyval = PyObject_GetAttrString (obj, "denom"))) + return -1; + denom = PyInt_AsLong (pyval); + if ((denom == -1) && PyErr_Occurred ()) + return -1; + /* we need to reduce the values to be smaller than MAXINT */ + if ((gcd = my_gcd (num, denom))) { + num /= gcd; + denom /= gcd; + } + g_assert (G_MININT <= denom && denom <= G_MAXINT); + gst_value_set_fraction (value, (int) num, (int) denom); + } else if (PyObject_IsInstance (obj, gstfractionrange_class)) { + GValue low = { 0, }; + GValue high = { 0, }; + PyObject *pylow, *pyhigh; + + VALUE_TYPE_CHECK (value, GST_TYPE_FRACTION_RANGE); + if (!(pylow = PyObject_GetAttrString (obj, "low"))) + return -1; + if (!pygst_value_init_for_pyobject (&low, pylow)) + return -1; + if (pygst_value_from_pyobject (&low, pylow) != 0) + return -1; + + if (!(pyhigh = PyObject_GetAttrString (obj, "high"))) + return -1; + if (!pygst_value_init_for_pyobject (&high, pyhigh)) + return -1; + if (pygst_value_from_pyobject (&high, pyhigh) != 0) + return -1; + + gst_value_set_fraction_range (value, &low, &high); + } else { + gchar buf[256]; + gchar *str = PyString_AsString (PyObject_Repr (obj)); + g_snprintf (buf, 256, "Unknown gst.Value type: %s", str); + PyErr_SetString (PyExc_TypeError, buf); + return -1; + } + return 0; + } else if (PyObject_IsInstance (obj, (PyObject *) & PyGstMiniObject_Type)) { + VALUE_TYPE_CHECK (value, GST_TYPE_MINI_OBJECT); + gst_value_set_mini_object (value, pygstminiobject_get (obj)); + return 0; + } else if (PyTuple_Check (obj)) { + gint i, len; + PyErr_Clear (); + VALUE_TYPE_CHECK (value, GST_TYPE_ARRAY); + len = PyTuple_Size (obj); + for (i = 0; i < len; i++) { + PyObject *o; + GValue new = { 0, }; + o = PyTuple_GetItem (obj, i); + if (!pygst_value_init_for_pyobject (&new, o)) + return -1; + if (pygst_value_from_pyobject (&new, o) != 0) { + g_value_unset (&new); + return -1; + } + gst_value_array_append_value (value, &new); + g_value_unset (&new); + } + return 0; + } else if (PyList_Check (obj)) { + gint i, len; + PyErr_Clear (); + VALUE_TYPE_CHECK (value, GST_TYPE_LIST); + len = PyList_Size (obj); + for (i = 0; i < len; i++) { + PyObject *o; + GValue new = { 0, }; + o = PyList_GetItem (obj, i); + if (!pygst_value_init_for_pyobject (&new, o)) + return -1; + if (pygst_value_from_pyobject (&new, o) != 0) { + g_value_unset (&new); + return -1; + } + gst_value_list_append_value (value, &new); + g_value_unset (&new); + } + return 0; + } else { + return -1; + } +} + +/** + * pygst_value_from_pyobject: + * @value: the GValue object to store the converted value in. + * @obj: the Python object to convert. + * + * This function converts a Python object and stores the result in a + * GValue. The GValue must be initialised in advance with + * g_value_init(). If the Python object can't be converted to the + * type of the GValue, then an error is returned. + * + * Returns: 0 on success, -1 on error. + */ +int +pygst_value_from_pyobject (GValue * value, PyObject * obj) +{ + PyObject *v = NULL; + int res; + + /* Unicode objects should be converted to utf-8 strings */ + if (PyObject_TypeCheck (obj, &PyUnicode_Type)) { + + v = PyUnicode_AsUTF8String (obj); + obj = v; + } + + res = pygst_value_from_pyobject_internal (value, obj); + + if (v) { + Py_DECREF (obj); + } + + return res; +} + +#define NULL_CHECK(o) if (!o) goto err + +gboolean +pygst_value_init (void) +{ + PyObject *module, *dict; + + if ((module = PyImport_ImportModule ("gst")) == NULL) + return FALSE; + + dict = PyModule_GetDict (module); + + gstvalue_class = (PyObject *) PyDict_GetItemString (dict, "Value"); + NULL_CHECK (gstvalue_class); + gstfourcc_class = (PyObject *) PyDict_GetItemString (dict, "Fourcc"); + NULL_CHECK (gstfourcc_class); + gstintrange_class = (PyObject *) PyDict_GetItemString (dict, "IntRange"); + NULL_CHECK (gstintrange_class); + gstdoublerange_class = + (PyObject *) PyDict_GetItemString (dict, "DoubleRange"); + NULL_CHECK (gstdoublerange_class); + gstfraction_class = (PyObject *) PyDict_GetItemString (dict, "Fraction"); + NULL_CHECK (gstfraction_class); + gstfractionrange_class = + (PyObject *) PyDict_GetItemString (dict, "FractionRange"); + NULL_CHECK (gstfractionrange_class); + return TRUE; + +err: + PyErr_SetString (PyExc_ImportError, + "Failed to get GstValue classes from gst module"); + return FALSE; +} diff --git a/gst/pygstvalue.h b/gst/pygstvalue.h new file mode 100644 index 0000000..a65f00b --- /dev/null +++ b/gst/pygstvalue.h @@ -0,0 +1,29 @@ +/* gst-python + * Copyright (C) 2004 Andy Wingo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Andy Wingo + */ + +#include +#include + + +PyObject *pygst_value_as_pyobject(const GValue *value, gboolean copy_boxed); +gboolean pygst_value_init_for_pyobject (GValue *value, PyObject *obj); +int pygst_value_from_pyobject(GValue *value, PyObject *obj); +gboolean pygst_value_init(void); diff --git a/gst/tag.defs b/gst/tag.defs new file mode 100644 index 0000000..a9f4927 --- /dev/null +++ b/gst/tag.defs @@ -0,0 +1,306 @@ +;; -*- scheme -*- +; object definitions ... +(define-object TagDemux + (in-module "Gst") + (parent "GstElement") + (c-name "GstTagDemux") + (gtype-id "GST_TYPE_TAG_DEMUX") +) + +;; Enumerations and flags ... + +(define-enum TagDemuxResult + (in-module "Gst") + (c-name "GstTagDemuxResult") + (gtype-id "GST_TYPE_TAG_DEMUX_RESULT") + (values + '("broken-tag" "GST_TAG_DEMUX_RESULT_BROKEN_TAG") + '("again" "GST_TAG_DEMUX_RESULT_AGAIN") + '("ok" "GST_TAG_DEMUX_RESULT_OK") + ) +) + +(define-enum TagImageType + (in-module "Gst") + (c-name "GstTagImageType") + (gtype-id "GST_TYPE_TAG_IMAGE_TYPE") + (values + '("none" "GST_TAG_IMAGE_TYPE_NONE") + '("undefined" "GST_TAG_IMAGE_TYPE_UNDEFINED") + '("front-cover" "GST_TAG_IMAGE_TYPE_FRONT_COVER") + '("back-cover" "GST_TAG_IMAGE_TYPE_BACK_COVER") + '("leaflet-page" "GST_TAG_IMAGE_TYPE_LEAFLET_PAGE") + '("medium" "GST_TAG_IMAGE_TYPE_MEDIUM") + '("lead-artist" "GST_TAG_IMAGE_TYPE_LEAD_ARTIST") + '("artist" "GST_TAG_IMAGE_TYPE_ARTIST") + '("conductor" "GST_TAG_IMAGE_TYPE_CONDUCTOR") + '("band-orchestra" "GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA") + '("composer" "GST_TAG_IMAGE_TYPE_COMPOSER") + '("lyricist" "GST_TAG_IMAGE_TYPE_LYRICIST") + '("recording-location" "GST_TAG_IMAGE_TYPE_RECORDING_LOCATION") + '("during-recording" "GST_TAG_IMAGE_TYPE_DURING_RECORDING") + '("during-performance" "GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE") + '("video-capture" "GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE") + '("fish" "GST_TAG_IMAGE_TYPE_FISH") + '("illustration" "GST_TAG_IMAGE_TYPE_ILLUSTRATION") + '("band-artist-logo" "GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO") + '("publisher-studio-logo" "GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO") + ) +) + + +;; From gsttagdemux.h + +(define-function demux_get_type + (c-name "gst_tag_demux_get_type") + (return-type "GType") +) + + + +;; From tag.h + +(define-function image_type_get_type + (c-name "gst_tag_image_type_get_type") + (return-type "GType") +) + +(define-function from_vorbis_tag + (c-name "gst_tag_from_vorbis_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "vorbis_tag") + ) +) + +(define-function to_vorbis_tag + (c-name "gst_tag_to_vorbis_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "gst_tag") + ) +) + +(define-function gst_vorbis_tag_add + (c-name "gst_vorbis_tag_add") + (return-type "none") + (parameters + '("GstTagList*" "list") + '("const-gchar*" "tag") + '("const-gchar*" "value") + ) +) + +(define-function to_vorbis_comments + (c-name "gst_tag_to_vorbis_comments") + (return-type "GList*") + (parameters + '("const-GstTagList*" "list") + '("const-gchar*" "tag") + ) +) + +(define-function list_from_vorbiscomment_buffer + (c-name "gst_tag_list_from_vorbiscomment_buffer") + (return-type "GstTagList*") + (parameters + '("const-GstBuffer*" "buffer") + '("const-guint8*" "id_data") + '("const-guint" "id_data_length") + '("gchar**" "vendor_string") + ) +) + +(define-method to_vorbiscomment_buffer + (of-object "GstTagList") + (c-name "gst_tag_list_to_vorbiscomment_buffer") + (return-type "GstBuffer*") + (parameters + '("const-guint8*" "id_data") + '("const-guint" "id_data_length") + '("const-gchar*" "vendor_string") + ) +) + +(define-function id3_genre_count + (c-name "gst_tag_id3_genre_count") + (return-type "guint") +) + +(define-function id3_genre_get + (c-name "gst_tag_id3_genre_get") + (return-type "const-gchar*") + (parameters + '("const-guint" "id") + ) +) + +(define-function list_new_from_id3v1 + (c-name "gst_tag_list_new_from_id3v1") + (return-type "GstTagList*") + (parameters + '("const-guint8*" "data") + ) +) + +(define-function from_id3_tag + (c-name "gst_tag_from_id3_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "id3_tag") + ) +) + +(define-function from_id3_user_tag + (c-name "gst_tag_from_id3_user_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "type") + '("const-gchar*" "id3_user_tag") + ) +) + +(define-function to_id3_tag + (c-name "gst_tag_to_id3_tag") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "gst_tag") + ) +) + +(define-method add_id3_image + (of-object "GstTagList") + (c-name "gst_tag_list_add_id3_image") + (return-type "gboolean") + (parameters + '("const-guint8*" "image_data") + '("guint" "image_data_len") + '("guint" "id3_picture_type") + ) +) + +(define-method to_exif_buffer + (of-object "GstTagList") + (c-name "gst_tag_list_to_exif_buffer") + (return-type "GstBuffer*") + (parameters + '("gint" "byte_order") + '("guint32" "base_offset") + ) +) + +(define-method to_exif_buffer_with_tiff_header + (of-object "GstTagList") + (c-name "gst_tag_list_to_exif_buffer_with_tiff_header") + (return-type "GstBuffer*") +) + +(define-function tag_list_from_exif_buffer + (c-name "gst_tag_list_from_exif_buffer") + (return-type "GstTagList*") + (parameters + '("const-GstBuffer*" "buffer") + '("gint" "byte_order") + '("guint32" "base_offset") + ) +) + +(define-function tag_list_from_exif_buffer_with_tiff_header + (c-name "gst_tag_list_from_exif_buffer_with_tiff_header") + (return-type "GstTagList*") + (parameters + '("const-GstBuffer*" "buffer") + ) +) + +(define-function parse_extended_comment + (c-name "gst_tag_parse_extended_comment") + (return-type "gboolean") + (parameters + '("const-gchar*" "ext_comment") + '("gchar**" "key") + '("gchar**" "lang") + '("gchar**" "value") + '("gboolean" "fail_if_no_key") + ) +) + +(define-function freeform_string_to_utf8 + (c-name "gst_tag_freeform_string_to_utf8") + (return-type "gchar*") + (parameters + '("const-gchar*" "data") + '("gint" "size") + '("const-gchar**" "env_vars") + ) +) + +(define-function image_data_to_image_buffer + (c-name "gst_tag_image_data_to_image_buffer") + (return-type "GstBuffer*") + (parameters + '("const-guint8*" "image_data") + '("guint" "image_data_len") + '("GstTagImageType" "image_type") + ) +) + +(define-function register_musicbrainz_tags + (c-name "gst_tag_register_musicbrainz_tags") + (return-type "none") +) + +(define-function get_language_codes + (c-name "gst_tag_get_language_codes") + (return-type "gchar**") +) + +(define-function get_language_name + (c-name "gst_tag_get_language_name") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "language_code") + ) +) + +(define-function get_language_code_iso_639_1 + (c-name "gst_tag_get_language_code_iso_639_1") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "lang_code") + ) +) + +(define-function get_language_code_iso_639_2B + (c-name "gst_tag_get_language_code_iso_639_2B") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "lang_code") + ) +) + +(define-function get_language_code_iso_639_2T + (c-name "gst_tag_get_language_code_iso_639_2T") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "lang_code") + ) +) + +(define-function tag_list_from_xmp_buffer + (c-name "gst_tag_list_from_xmp_buffer") + (return-type "GstTagList*") + (parameters + '("const-GstBuffer*" "buffer") + ) +) + +(define-function tag_list_to_xmp_buffer + (c-name "gst_tag_list_to_xmp_buffer") + (return-type "GstBuffer*") + (parameters + '("const-GstTagList*" "taglist") + '("gboolean" "readonly") + ) +) + diff --git a/gst/tag.override b/gst/tag.override new file mode 100644 index 0000000..813c44d --- /dev/null +++ b/gst/tag.override @@ -0,0 +1,105 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +%% +headers + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include +#include "pygstminiobject.h" +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +%% +modulename gst.tag +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Pad as PyGstPad_Type +import gst.Buffer as PyGstBuffer_Type +import gst.Message as PyGstMessage_Type +import gst.SystemClock as PyGstSystemClock_Type +import gst.BaseTransform as PyGstBaseTransform_Type +import gst.BaseSink as PyGstBaseSink_Type +%% +include + gstversion.override +%% +ignore-glob + _* + *init + *_free + *_get_type + +%% +override gst_tag_to_vorbis_comments +static PyObject * +_wrap_gst_tag_to_vorbis_comments(PyObject *self, PyObject *args, PyObject *kwargs) +{ + PyObject *py_taglist; + const GstTagList *taglist; + const gchar *tag; + + const GList *list; + const GList *l; + PyObject *py_list; + + if (!PyArg_ParseTuple(args, "Os", &py_taglist, &tag)) + return NULL; + + if (pyg_boxed_check(py_taglist, GST_TYPE_TAG_LIST)) + taglist = pyg_boxed_get(py_taglist, GstTagList); + else { + PyErr_SetString(PyExc_TypeError, "list should be a GstTagList"); + return NULL; + } + + + pyg_begin_allow_threads; + list = gst_tag_to_vorbis_comments (taglist, tag); + pyg_end_allow_threads; + + py_list = PyList_New(0); + + for (l = list; l; l = l->next) { + gchar *pair = (gchar *)l->data; + PyObject *py_pair = PyString_FromString(pair); + PyList_Append(py_list, py_pair); + Py_DECREF(py_pair); + } + return py_list; + +} diff --git a/gst/tagmodule.c b/gst/tagmodule.c new file mode 100644 index 0000000..ec303fc --- /dev/null +++ b/gst/tagmodule.c @@ -0,0 +1,58 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include "pygst.h" + +void pytag_register_classes (PyObject * d); +void pytag_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pytag_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for python code */ + +DL_EXPORT (void) +inittag (void) +{ + PyObject *m, *d; + + init_pygobject (); + pygst_init (); + /* Initialize tag library */ + gst_tag_register_musicbrainz_tags (); + + m = Py_InitModule ("tag", pytag_functions); + d = PyModule_GetDict (m); + + pytag_register_classes (d); + pytag_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.tag"); + } +} diff --git a/gst/video.defs b/gst/video.defs new file mode 100644 index 0000000..744721e --- /dev/null +++ b/gst/video.defs @@ -0,0 +1,371 @@ +;; -*- scheme -*- +; object definitions ... +(define-object VideoFilter + (in-module "Gst") + (parent "GstBaseTransform") + (c-name "GstVideoFilter") + (gtype-id "GST_TYPE_VIDEO_FILTER") +) + +(define-object VideoSink + (in-module "Gst") + (parent "GstBaseSink") + (c-name "GstVideoSink") + (gtype-id "GST_TYPE_VIDEO_SINK") +) + +;; Enumerations and flags ... + +(define-enum VideoFormat + (in-module "Gst") + (c-name "GstVideoFormat") + (gtype-id "GST_TYPE_VIDEO_FORMAT") + (values + '("unknown" "GST_VIDEO_FORMAT_UNKNOWN") + '("i420" "GST_VIDEO_FORMAT_I420") + '("yv12" "GST_VIDEO_FORMAT_YV12") + '("yuy2" "GST_VIDEO_FORMAT_YUY2") + '("uyvy" "GST_VIDEO_FORMAT_UYVY") + '("ayuv" "GST_VIDEO_FORMAT_AYUV") + '("rgbx" "GST_VIDEO_FORMAT_RGBx") + '("bgrx" "GST_VIDEO_FORMAT_BGRx") + '("xrgb" "GST_VIDEO_FORMAT_xRGB") + '("xbgr" "GST_VIDEO_FORMAT_xBGR") + '("rgba" "GST_VIDEO_FORMAT_RGBA") + '("bgra" "GST_VIDEO_FORMAT_BGRA") + '("argb" "GST_VIDEO_FORMAT_ARGB") + '("abgr" "GST_VIDEO_FORMAT_ABGR") + '("rgb" "GST_VIDEO_FORMAT_RGB") + '("bgr" "GST_VIDEO_FORMAT_BGR") + '("y41b" "GST_VIDEO_FORMAT_Y41B") + '("y42b" "GST_VIDEO_FORMAT_Y42B") + '("yvyu" "GST_VIDEO_FORMAT_YVYU") + '("y444" "GST_VIDEO_FORMAT_Y444") + '("v210" "GST_VIDEO_FORMAT_v210") + '("v216" "GST_VIDEO_FORMAT_v216") + '("nv12" "GST_VIDEO_FORMAT_NV12") + '("nv21" "GST_VIDEO_FORMAT_NV21") + '("gray8" "GST_VIDEO_FORMAT_GRAY8") + '("gray16-be" "GST_VIDEO_FORMAT_GRAY16_BE") + '("gray16-le" "GST_VIDEO_FORMAT_GRAY16_LE") + '("v308" "GST_VIDEO_FORMAT_v308") + '("y800" "GST_VIDEO_FORMAT_Y800") + '("y16" "GST_VIDEO_FORMAT_Y16") + '("rgb16" "GST_VIDEO_FORMAT_RGB16") + '("bgr16" "GST_VIDEO_FORMAT_BGR16") + '("rgb15" "GST_VIDEO_FORMAT_RGB15") + '("bgr15" "GST_VIDEO_FORMAT_BGR15") + '("uyvp" "GST_VIDEO_FORMAT_UYVP") + '("a420" "GST_VIDEO_FORMAT_A420") + '("rgb8-paletted" "GST_VIDEO_FORMAT_RGB8_PALETTED") + '("yuv9" "GST_VIDEO_FORMAT_YUV9") + '("yvu9" "GST_VIDEO_FORMAT_YVU9") + '("iyu1" "GST_VIDEO_FORMAT_IYU1") + ) +) + + +;; From gstvideofilter.h + +(define-function gst_video_filter_get_type + (c-name "gst_video_filter_get_type") + (return-type "GType") +) + + + +;; From gstvideosink.h + +(define-function gst_video_sink_get_type + (c-name "gst_video_sink_get_type") + (return-type "GType") +) + +(define-function video_sink_center_rect + (c-name "gst_video_sink_center_rect") + (return-type "none") + (parameters + '("GstVideoRectangle" "src") + '("GstVideoRectangle" "dst") + '("GstVideoRectangle*" "result") + '("gboolean" "scaling") + ) +) + + + +;; From video.h + +(define-function get_size + (c-name "gst_video_get_size") + (return-type "gboolean") + (parameters + '("GstPad*" "pad") + '("gint*" "width") + '("gint*" "height") + ) +) + +(define-function calculate_display_ratio + (c-name "gst_video_calculate_display_ratio") + (return-type "gboolean") + (parameters + '("guint*" "dar_n") + '("guint*" "dar_d") + '("guint" "video_width") + '("guint" "video_height") + '("guint" "video_par_n") + '("guint" "video_par_d") + '("guint" "display_par_n") + '("guint" "display_par_d") + ) +) + +(define-function format_parse_caps + (c-name "gst_video_format_parse_caps") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("GstVideoFormat*" "format") + '("int*" "width") + '("int*" "height") + ) +) + +(define-function format_parse_caps_interlaced + (c-name "gst_video_format_parse_caps_interlaced") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("gboolean*" "interlaced") + ) +) + +(define-function parse_caps_framerate + (c-name "gst_video_parse_caps_framerate") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("int*" "fps_n") + '("int*" "fps_d") + ) +) + +(define-function parse_caps_pixel_aspect_ratio + (c-name "gst_video_parse_caps_pixel_aspect_ratio") + (return-type "gboolean") + (parameters + '("GstCaps*" "caps") + '("int*" "par_n") + '("int*" "par_d") + ) +) + +(define-function parse_caps_color_matrix + (c-name "gst_video_parse_caps_color_matrix") + (return-type "const-char*") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-function parse_caps_chroma_site + (c-name "gst_video_parse_caps_chroma_site") + (return-type "const-char*") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-function video_parse_caps_palette + (c-name "gst_video_parse_caps_palette") + (return-type "GstBuffer*") + (parameters + '("GstCaps*" "caps") + ) +) + +(define-method new_caps + (of-object "GstVideoFormat") + (c-name "gst_video_format_new_caps") + (caller-owns-return #t) + (return-type "GstCaps*") + (parameters + '("int" "width") + '("int" "height") + '("int" "framerate_n") + '("int" "framerate_d") + '("int" "par_n") + '("int" "par_d") + ) +) + +(define-method new_caps_interlaced + (of-object "GstVideoFormat") + (c-name "gst_video_format_new_caps_interlaced") + (caller-owns-return #t) + (return-type "GstCaps*") + (parameters + '("int" "width") + '("int" "height") + '("int" "framerate_n") + '("int" "framerate_d") + '("int" "par_n") + '("int" "par_d") + '("gboolean" "interlaced") + ) +) + +(define-function format_from_fourcc + (c-name "gst_video_format_from_fourcc") + (return-type "GstVideoFormat") + (parameters + '("guint32" "fourcc") + ) +) + +(define-method to_fourcc + (of-object "GstVideoFormat") + (c-name "gst_video_format_to_fourcc") + (return-type "guint32") +) + +(define-method is_rgb + (of-object "GstVideoFormat") + (c-name "gst_video_format_is_rgb") + (return-type "gboolean") +) + +(define-method is_yuv + (of-object "GstVideoFormat") + (c-name "gst_video_format_is_yuv") + (return-type "gboolean") +) + +(define-method is_gray + (of-object "GstVideoFormat") + (c-name "gst_video_format_is_gray") + (return-type "gboolean") +) + +(define-method has_alpha + (of-object "GstVideoFormat") + (c-name "gst_video_format_has_alpha") + (return-type "gboolean") +) + +(define-method get_row_stride + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_row_stride") + (return-type "int") + (parameters + '("int" "component") + '("int" "width") + ) +) + +(define-method get_pixel_stride + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_pixel_stride") + (return-type "int") + (parameters + '("int" "component") + ) +) + +(define-method get_component_width + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_component_width") + (return-type "int") + (parameters + '("int" "component") + '("int" "width") + ) +) + +(define-method get_component_height + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_component_height") + (return-type "int") + (parameters + '("int" "component") + '("int" "height") + ) +) + +(define-method get_component_offset + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_component_offset") + (return-type "int") + (parameters + '("int" "component") + '("int" "width") + '("int" "height") + ) +) + +(define-method get_size + (of-object "GstVideoFormat") + (c-name "gst_video_format_get_size") + (return-type "int") + (parameters + '("int" "width") + '("int" "height") + ) +) + +(define-method convert + (of-object "GstVideoFormat") + (c-name "gst_video_format_convert") + (return-type "gboolean") + (parameters + '("int" "width") + '("int" "height") + '("int" "fps_n") + '("int" "fps_d") + '("GstFormat" "src_format") + '("gint64" "src_value") + '("GstFormat" "dest_format") + '("gint64*" "dest_value") + ) +) + +(define-function event_new_still_frame + (c-name "gst_video_event_new_still_frame") + (return-type "GstEvent*") + (parameters + '("gboolean" "in_still") + ) +) + +(define-function event_parse_still_frame + (c-name "gst_video_event_parse_still_frame") + (return-type "gboolean") + (parameters + '("GstEvent*" "event") + '("gboolean*" "in_still") + ) +) +(define-function video_convert_frame + (c-name "gst_video_convert_frame") + (return-type "GstBuffer*") + (parameters + '("GstBuffer*" "buf") + '("const-GstCaps*" "to_caps") + '("GstClockTime" "timeout") + '("GError**" "error") + ) +) + +(define-function video_convert_frame_async + (c-name "gst_video_convert_frame_async") + (return-type "none") + (parameters + '("GstBuffer*" "buf") + '("const-GstCaps*" "to_caps") + '("GstClockTime" "timeout") + '("GstVideoConvertFrameCallback" "callback") + '("gpointer" "user_data") + '("GDestroyNotify" "destroy_notify") + ) +) diff --git a/gst/video.override b/gst/video.override new file mode 100644 index 0000000..ad2acd6 --- /dev/null +++ b/gst/video.override @@ -0,0 +1,66 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +%% +headers + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define NO_IMPORT_PYGOBJECT +#include "common.h" +#include "pygst.h" + +#include + +#include +#include +#include +#include "pygstminiobject.h" +GST_DEBUG_CATEGORY_EXTERN (pygst_debug); +#define GST_CAT_DEFAULT pygst_debug + +/* Boonky define that allows for backwards compatibility with Python 2.4 */ +#if PY_VERSION_HEX < 0x02050000 +#define Py_ssize_t int +#endif + +%% +modulename gst.video +%% +import gobject.GObject as PyGObject_Type +import gst.Object as PyGstObject_Type +import gst.Structure as PyGstStructure_Type +import gst.Element as PyGstElement_Type +import gst.Pad as PyGstPad_Type +import gst.Buffer as PyGstBuffer_Type +import gst.Message as PyGstMessage_Type +import gst.SystemClock as PyGstSystemClock_Type +import gst.BaseTransform as PyGstBaseTransform_Type +import gst.BaseSink as PyGstBaseSink_Type +%% +include + gstversion.override +%% +ignore-glob + _* + *init + *_free + *_get_type diff --git a/gst/videomodule.c b/gst/videomodule.c new file mode 100644 index 0000000..9308a15 --- /dev/null +++ b/gst/videomodule.c @@ -0,0 +1,58 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2008 Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include +#include +#include +#include "pygst.h" + +void pyvideo_register_classes (PyObject * d); +void pyvideo_add_constants (PyObject * module, const gchar * strip_prefix); + +extern PyMethodDef pyvideo_functions[]; + +GST_DEBUG_CATEGORY (pygst_debug); /* for python code */ + +DL_EXPORT (void) +initvideo (void) +{ + PyObject *m, *d, *gst; + + init_pygobject (); + gst = pygst_init (); + + m = Py_InitModule ("video", pyvideo_functions); + d = PyModule_GetDict (m); + + pyvideo_register_classes (d); + pyvideo_add_constants (m, "GST_"); + + if (PyErr_Occurred ()) { + PyErr_Print (); + Py_FatalError ("can't initialize module gst.video"); + } +} diff --git a/gst/xoverlay.defs b/gst/xoverlay.defs new file mode 100644 index 0000000..db7072d --- /dev/null +++ b/gst/xoverlay.defs @@ -0,0 +1,53 @@ +;; -*- scheme -*- +; object definitions ... +;; Enumerations and flags ... + +(define-interface XOverlay + (in-module "Gst") + (c-name "GstXOverlay") + (gtype-id "GST_TYPE_X_OVERLAY") +) + +;; From /opt/gnome/include/gstreamer-0.7/gst/xoverlay/xoverlay.h + +(define-method set_xwindow_id + (of-object "GstXOverlay") + (c-name "gst_x_overlay_set_xwindow_id") + (return-type "none") + (parameters + '("gulong" "xwindow_id") + ) +) + +(define-method set_render_rectangle + (of-object "GstXOverlay") + (c-name "gst_x_overlay_set_render_rectangle") + (return-type "gboolean") + (parameters + '("gint" "x") + '("gint" "y") + '("gint" "width") + '("gint" "height") + ) +) + +(define-method expose + (of-object "GstXOverlay") + (c-name "gst_x_overlay_expose") + (return-type "none") +) + +(define-method got_xwindow_id + (of-object "GstXOverlay") + (c-name "gst_x_overlay_got_xwindow_id") + (return-type "none") + (parameters + '("gulong" "xwindow_id") + ) +) + +(define-method prepare_xwindow_id + (of-object "GstXOverlay") + (c-name "gst_x_overlay_prepare_xwindow_id") + (return-type "none") +) \ No newline at end of file diff --git a/gst/xoverlay.override b/gst/xoverlay.override new file mode 100644 index 0000000..dd382e7 --- /dev/null +++ b/gst/xoverlay.override @@ -0,0 +1,24 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2004 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ +%% +headers + +#include diff --git a/gstlibtoolimporter.py b/gstlibtoolimporter.py new file mode 100644 index 0000000..4b08de4 --- /dev/null +++ b/gstlibtoolimporter.py @@ -0,0 +1,112 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python +# Copyright (C) 2009 Alessandro Decina +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author: Alessandro Decina + +# importer for uninstalled setup, see PEP +# http://www.python.org/dev/peps/pep-0302/ + +import os +import sys +import imp + +class Loader(object): + def __init__(self, fileobj, filename, description): + self.fileobj = fileobj + self.filename = filename + self.description = description + + def find_real_filename(self): + dlname = None + installed = False + for line in self.fileobj: + if len(line) > 7 and line[:7] == 'dlname=': + dlname = line[8:-2] + elif len(line) > 10 and line[:10] == 'installed=': + installed = line[10:-1] == 'yes' + + if not dlname: + return None + + if installed or os.path.dirname(self.filename).endswith('.libs'): + filename = os.path.join(os.path.dirname(self.filename), dlname) + else: + filename = os.path.join(os.path.dirname(self.filename), '.libs', dlname) + + return filename + + def load_module(self, name): + try: + module = sys.modules[name] + self.fileobj.close() + + return module + except KeyError: + pass + + filename = self.find_real_filename() + self.fileobj.close() + if filename is None: + raise ImportError("No module named %s" % name) + + fileobj = file(filename, 'rb') + + module = imp.new_module(name) + sys.modules[name] = module + + imp.load_module(name, fileobj, filename, self.description) + fileobj.close() + + return module + +class Importer(object): + def find_module(self, name, path=None): + if path is None: + path = sys.path + + for directory in path: + fileobj, filename, description = self.find_libtool_module(name, directory) + if fileobj is not None: + return Loader(fileobj, filename, description) + + return None + + def find_libtool_module(self, name, directory): + name = name.split(".")[-1] + absname = os.path.join(directory, name) + for suffix in ('.la', '.module.la'): + filename = absname + suffix + try: + fileobj = file(filename, 'rb') + except IOError: + continue + + return fileobj, filename, (suffix, 'rb', imp.C_EXTENSION) + + return None, None, None + +importer = Importer() + +def install(): + sys.meta_path.append(importer) + +def uninstall(): + sys.meta_path.remove(importer) diff --git a/gstoptionmodule.c b/gstoptionmodule.c new file mode 100644 index 0000000..2e9009b --- /dev/null +++ b/gstoptionmodule.c @@ -0,0 +1,50 @@ +/* -*- Mode: C; ; c-file-style: "k&r"; c-basic-offset: 4 -*- */ +/* gst-python + * Copyright (C) 2007 Johan Dahlin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Johan Dahlin + */ + +#include +#include +#include + +static PyObject * +_wrap_gstoption_get_group (PyObject *self) +{ + GOptionGroup *option_group; + + option_group = gst_init_get_option_group(); + return pyg_option_group_new(option_group); +} + +static PyMethodDef pygstoption_functions[] = { + { "get_group", (PyCFunction)_wrap_gstoption_get_group, METH_NOARGS, NULL }, + { NULL, NULL, 0, NULL } +}; + +DL_EXPORT(void) +initgstoption (void) +{ + init_pygobject (); + + if (!g_thread_supported ()) + g_thread_init (NULL); + + Py_InitModule ("gstoption", pygstoption_functions); +} diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..6781b98 --- /dev/null +++ b/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/ltmain.sh b/ltmain.sh new file mode 100755 index 0000000..c7bf234 --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,9642 @@ + +# libtool (GNU libtool) 2.4 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4 Debian-2.4-4 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4 Debian-2.4-4" +TIMESTAMP="" +package_revision=1.3293 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="/bin/grep -E"} +: ${FGREP="/bin/grep -F"} +: ${GREP="/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/bin/sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type \`$version_type'" + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_apped perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 0000000..8ff3c76 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,7851 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 0000000..17cfd51 --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,369 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 0000000..9000a05 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 0000000..9c7b5d4 --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3293 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4]) +m4_define([LT_PACKAGE_REVISION], [1.3293]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4' +macro_revision='1.3293' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 0000000..c573da9 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,98 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/missing b/missing new file mode 100755 index 0000000..28055d2 --- /dev/null +++ b/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/packaging/gstreamer-python.changes b/packaging/gstreamer-python.changes new file mode 100644 index 0000000..458c8ce --- /dev/null +++ b/packaging/gstreamer-python.changes @@ -0,0 +1,2 @@ +* Fri Aug 31 22:00:58 UTC 2012 - jimmy.huang@intel.com +- Intial import from upstream. diff --git a/packaging/gstreamer-python.spec b/packaging/gstreamer-python.spec new file mode 100644 index 0000000..51a5ba9 --- /dev/null +++ b/packaging/gstreamer-python.spec @@ -0,0 +1,60 @@ +Name: gstreamer-python +Summary: Python bindings for GStreamer +Version: 0.10.22 +Release: 1 +Group: System/Libraries +License: LGPLv2+ +URL: http://gstreamer.freedesktop.org/ +Source: http://gstreamer.freedesktop.org/src/gst-python/gst-python-%{version}.tar.gz +BuildRequires: pkgconfig(python) +BuildRequires: pkgconfig(gstreamer-0.10) +BuildRequires: pkgconfig(gstreamer-plugins-base-0.10) +BuildRequires: pkgconfig(pygobject-2.0) +Requires: pygobject +Requires: gstreamer +Requires: gst-plugins-base + +%description +This module contains a wrapper that allows GStreamer applications +to be written in Python. + + + +%package devel +Summary: Headers for developing programs that will use %{name} +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} +Requires: pkgconfig +Requires: gstreamer-devel + +%description devel +This package contains the static libraries and header files needed for +developing gstreamer-python applications. + + + +%prep +%setup -q -n gst-python-%{version} + +%build +%configure --disable-static +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +%make_install + +find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';' + +%files +%defattr(-,root,root,-) +%doc AUTHORS COPYING ChangeLog NEWS README +%{_libdir}/gstreamer-0.10/libgstpython.so +%{python_sitelib}/* +%dir %{_datadir}/gst-python +%{_datadir}/gst-python + +%files devel +%defattr(-,root,root,-) +%{_includedir}/gstreamer-0.10/gst/*.h +%{_libdir}/pkgconfig/*.pc diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am new file mode 100644 index 0000000..e11e4cd --- /dev/null +++ b/pkgconfig/Makefile.am @@ -0,0 +1,27 @@ +### all of the standard pc files we need to generate +pcfiles = \ + gst-python-@GST_MAJORMINOR@.pc + +pcfiles_uninstalled = \ + gst-python-@GST_MAJORMINOR@-uninstalled.pc + +all-local: $(pcfiles) $(pcfiles_uninstalled) + +cp_verbose = $(cp_verbose_$(V)) +cp_verbose_ = $(cp_verbose_$(AM_DEFAULT_VERBOSITY)) +cp_verbose_0 = @echo " CP $@"; + +### how to generate pc files +$(pcfiles): %-@GST_MAJORMINOR@.pc: %.pc + $(cp_verbose_0)cp $< $@ +$(pcfiles_uninstalled): %-@GST_MAJORMINOR@-uninstalled.pc: %-uninstalled.pc + $(cp_verbose_0)cp $< $@ + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = $(pcfiles) + +EXTRA_DIST = \ + gst-python.pc.in \ + gst-python-uninstalled.pc.in + +CLEANFILES = $(pcfiles) $(pcfiles_uninstalled) diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in new file mode 100644 index 0000000..0840456 --- /dev/null +++ b/pkgconfig/Makefile.in @@ -0,0 +1,543 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = pkgconfig +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/gst-python-uninstalled.pc.in \ + $(srcdir)/gst-python.pc.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gst-python.pc gst-python-uninstalled.pc +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +### all of the standard pc files we need to generate +pcfiles = \ + gst-python-@GST_MAJORMINOR@.pc + +pcfiles_uninstalled = \ + gst-python-@GST_MAJORMINOR@-uninstalled.pc + +cp_verbose = $(cp_verbose_$(V)) +cp_verbose_ = $(cp_verbose_$(AM_DEFAULT_VERBOSITY)) +cp_verbose_0 = @echo " CP $@"; +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = $(pcfiles) +EXTRA_DIST = \ + gst-python.pc.in \ + gst-python-uninstalled.pc.in + +CLEANFILES = $(pcfiles) $(pcfiles_uninstalled) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pkgconfig/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu pkgconfig/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +gst-python.pc: $(top_builddir)/config.status $(srcdir)/gst-python.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +gst-python-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gst-python-uninstalled.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) all-local +installdirs: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-pkgconfigDATA + + +all-local: $(pcfiles) $(pcfiles_uninstalled) + +### how to generate pc files +$(pcfiles): %-@GST_MAJORMINOR@.pc: %.pc + $(cp_verbose_0)cp $< $@ +$(pcfiles_uninstalled): %-@GST_MAJORMINOR@-uninstalled.pc: %-uninstalled.pc + $(cp_verbose_0)cp $< $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pkgconfig/gst-python-uninstalled.pc.in b/pkgconfig/gst-python-uninstalled.pc.in new file mode 100644 index 0000000..13168b2 --- /dev/null +++ b/pkgconfig/gst-python-uninstalled.pc.in @@ -0,0 +1,16 @@ +# the standard variables don't make sense for an uninstalled copy +#prefix= +#exec_prefix= +#datadir=${pcfiledir}/.. +pyexecdir=${pcfiledir}/.. + +# same here. Useful when calling the code generator in addon packages. +pygstincludedir=@abs_top_builddir@ +#defsdir=${datadir}/gst-python/@GST_MAJORMINOR@/defs +#codegendir=${datadir}/pygst/0.10/codegen + +Name: gst-python uninstalled +Description: Python bindings for GStreamer, not installed +Requires: pygobject-2.0, gstreamer-@GST_MAJORMINOR@ +Version: @VERSION@ +Cflags: -I${pygstincludedir} diff --git a/pkgconfig/gst-python.pc.in b/pkgconfig/gst-python.pc.in new file mode 100644 index 0000000..4c5e1f1 --- /dev/null +++ b/pkgconfig/gst-python.pc.in @@ -0,0 +1,15 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +datadir=@datadir@ +pyexecdir=@pyexecdir@ + +# same here. Useful when calling the code generator in addon packages. +pygstincludedir=@includedir@/gstreamer-@GST_MAJORMINOR@ +defsdir=${datadir}/gst-python/@GST_MAJORMINOR@/defs +codegendir=${datadir}/pygst/0.10/codegen + +Name: gst-python +Description: Python bindings for GStreamer +Requires: pygobject-2.0, gstreamer-@GST_MAJORMINOR@ +Version: @VERSION@ +Cflags: -I${pygstincludedir} diff --git a/plugin/Makefile.am b/plugin/Makefile.am new file mode 100644 index 0000000..d4a42c0 --- /dev/null +++ b/plugin/Makefile.am @@ -0,0 +1,11 @@ +plugin_LTLIBRARIES = libgstpython.la + +INCLUDES = $(PYGOBJECT_CFLAGS) $(GST_CFLAGS)\ + -DPYTHON_VERSION=\"$(PYTHON_VERSION)\" \ + -DPY_LIB_LOC="\"$(PYTHON_LIB_LOC)\"" \ + -DPY_LIB_SUFFIX=$(PYTHON_LIB_SUFFIX) \ + $(PYTHON_INCLUDES) + +libgstpython_la_SOURCES = gstpythonplugin.c +libgstpython_la_LDFLAGS = -module -avoid-version +libgstpython_la_LIBADD = $(GST_LIBS) diff --git a/plugin/Makefile.in b/plugin/Makefile.in new file mode 100644 index 0000000..7d7b32c --- /dev/null +++ b/plugin/Makefile.in @@ -0,0 +1,652 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = plugin +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(plugindir)" +LTLIBRARIES = $(plugin_LTLIBRARIES) +am__DEPENDENCIES_1 = +libgstpython_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_libgstpython_la_OBJECTS = gstpythonplugin.lo +libgstpython_la_OBJECTS = $(am_libgstpython_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libgstpython_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libgstpython_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libgstpython_la_SOURCES) +DIST_SOURCES = $(libgstpython_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +plugin_LTLIBRARIES = libgstpython.la +INCLUDES = $(PYGOBJECT_CFLAGS) $(GST_CFLAGS)\ + -DPYTHON_VERSION=\"$(PYTHON_VERSION)\" \ + -DPY_LIB_LOC="\"$(PYTHON_LIB_LOC)\"" \ + -DPY_LIB_SUFFIX=$(PYTHON_LIB_SUFFIX) \ + $(PYTHON_INCLUDES) + +libgstpython_la_SOURCES = gstpythonplugin.c +libgstpython_la_LDFLAGS = -module -avoid-version +libgstpython_la_LIBADD = $(GST_LIBS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugin/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu plugin/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)" + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \ + } + +uninstall-pluginLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \ + done + +clean-pluginLTLIBRARIES: + -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) + @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgstpython.la: $(libgstpython_la_OBJECTS) $(libgstpython_la_DEPENDENCIES) + $(AM_V_CCLD)$(libgstpython_la_LINK) -rpath $(plugindir) $(libgstpython_la_OBJECTS) $(libgstpython_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstpythonplugin.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(plugindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginLTLIBRARIES \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-pluginLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/plugin/gstpythonplugin.c b/plugin/gstpythonplugin.c new file mode 100644 index 0000000..2a08d19 --- /dev/null +++ b/plugin/gstpythonplugin.c @@ -0,0 +1,426 @@ +/* gst-python + * Copyright (C) 2009 Edward Hervey + * 2005 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* include this first, before NO_IMPORT_PYGOBJECT is defined */ +#include +#include +#include + +void *_PyGstElement_Type; + +GST_DEBUG_CATEGORY_STATIC (pyplugindebug); +#define GST_CAT_DEFAULT pyplugindebug + +#define GST_ORIGIN "http://gstreamer.freedesktop.org" + +static PyObject *element; + +static inline gboolean +np_init_pygobject (void) +{ + gboolean res = FALSE; + PyObject *gobject = NULL; + PyObject *main_module = NULL; + PyObject *mdict = NULL; + PyObject *pygtk = NULL; + PyObject *cobject; + + pygtk = PyImport_ImportModule ("pygtk"); + if (pygtk == NULL) { + PyErr_Print (); + GST_WARNING ("could not import pygtk"); + goto beach; + } + + if (!(PyObject_CallMethod (pygtk, "require", "s", "2.0"))) { + GST_WARNING ("could not run pygtk.require"); + PyErr_Print (); + goto beach; + } + + gobject = PyImport_ImportModule ("gobject"); + if (gobject == NULL) { + PyErr_Print (); + GST_WARNING ("could not import gobject"); + goto beach; + } + + main_module = PyImport_AddModule ("__main__"); + mdict = PyModule_GetDict (gobject); + + cobject = PyMapping_GetItemString (mdict, "_PyGObject_API"); + if (cobject == NULL) { + GST_WARNING ("could not find _PyGObject_API"); + goto beach; + } + + _PyGObject_API = + (struct _PyGObject_Functions *) PyCObject_AsVoidPtr (cobject); + if (_PyGObject_API == NULL) { + PyErr_Print (); + GST_WARNING ("_PyGObject_API is not a valid CObject"); + goto beach; + } + + if (!(PyObject_CallMethod (gobject, "threads_init", NULL, NULL))) { + PyErr_Print (); + GST_WARNING ("could not initialize threads"); + goto beach; + } + + res = TRUE; + +beach: + Py_XDECREF (pygtk); + Py_XDECREF (gobject); + + return res; +} + +static gboolean +gst_python_plugin_load_file (GstPlugin * plugin, const char *name) +{ + PyObject *main_module, *main_locals; + PyObject *elementfactory; + int pos = 0; + GType gtype; + PyObject *module; + const gchar *facname; + guint rank; + PyObject *class; + + GST_DEBUG ("loading plugin %s", name); + + main_module = PyImport_AddModule ("__main__"); + if (main_module == NULL) { + GST_WARNING ("Could not get __main__, ignoring plugin %s", name); + PyErr_Print (); + PyErr_Clear (); + return FALSE; + } + + main_locals = PyModule_GetDict (main_module); + module = + PyImport_ImportModuleEx ((char *) name, main_locals, main_locals, NULL); + if (!module) { + GST_DEBUG ("Could not load module, ignoring plugin %s", name); + PyErr_Print (); + PyErr_Clear (); + return FALSE; + } + + /* Get __gstelementfactory__ from file */ + elementfactory = PyObject_GetAttrString (module, "__gstelementfactory__"); + if (!elementfactory) { + GST_DEBUG ("python file doesn't contain __gstelementfactory__"); + PyErr_Clear (); + return FALSE; + } + + /* parse tuple : name, rank, gst.ElementClass */ + if (!PyArg_ParseTuple (elementfactory, "sIO", &facname, &rank, &class)) { + GST_WARNING ("__gstelementfactory__ isn't correctly formatted"); + PyErr_Print (); + PyErr_Clear (); + Py_DECREF (elementfactory); + return FALSE; + } + + if (!(PyObject_IsSubclass (class, (PyObject *) _PyGstElement_Type))) { + GST_WARNING ("the class provided isn't a subclass of gst.Element"); + PyErr_Print (); + PyErr_Clear (); + Py_DECREF (elementfactory); + Py_DECREF (class); + return FALSE; + } + + GST_LOG ("Valid plugin"); + Py_DECREF (elementfactory); + + return gst_element_register (plugin, facname, rank, + pyg_type_from_object (class)); +} + +static gboolean +gst_python_load_directory (GstPlugin * plugin, gchar * path) +{ + GST_LOG ("Checking for python plugins in %s", path); + GDir *dir; + const gchar *file; + GError *error = NULL; + gboolean ret = TRUE; + + dir = g_dir_open (path, 0, &error); + if (!dir) { + /*retval should probably be depending on error, but since we ignore it... */ + GST_WARNING ("Couldn't open Python plugin dir: %s", error->message); + g_error_free (error); + return FALSE; + } + while ((file = g_dir_read_name (dir))) { + /* FIXME : go down in subdirectories */ + if (g_str_has_suffix (file, ".py")) { + gsize len = strlen (file) - 3; + gchar *name = g_strndup (file, len); + ret &= gst_python_plugin_load_file (plugin, name); + g_free (name); + } + } + return TRUE; +} + +static gboolean +gst_python_plugin_load (GstPlugin * plugin) +{ + PyObject *sys_path; + const gchar *plugin_path; + gboolean ret = TRUE; + + sys_path = PySys_GetObject ("path"); + + /* Mimic the order in which the registry is checked in core */ + + /* 1. check env_variable GST_PLUGIN_PATH */ + plugin_path = g_getenv ("GST_PLUGIN_PATH"); + if (plugin_path) { + char **list; + int i; + + GST_DEBUG ("GST_PLUGIN_PATH set to %s", plugin_path); + list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0); + for (i = 0; list[i]; i++) { + gchar *sysdir = g_build_filename (list[i], "python", NULL); + PyList_Insert (sys_path, 0, PyString_FromString (sysdir)); + gst_python_load_directory (plugin, sysdir); + g_free (sysdir); + } + + g_strfreev (list); + } + + /* 2. Check for GST_PLUGIN_SYSTEM_PATH */ + plugin_path = g_getenv ("GST_PLUGIN_SYSTEM_PATH"); + if (plugin_path == NULL) { + char *home_plugins; + + /* 2.a. Scan user and system-wide plugin directory */ + GST_DEBUG ("GST_PLUGIN_SYSTEM_PATH not set"); + + /* plugins in the user's home directory take precedence over + * system-installed ones */ + home_plugins = g_build_filename (g_get_home_dir (), + ".gstreamer-" GST_MAJORMINOR, "plugins", "python", NULL); + PyList_Insert (sys_path, 0, PyString_FromString (home_plugins)); + gst_python_load_directory (plugin, home_plugins); + g_free (home_plugins); + + /* add the main (installed) library path */ + PyList_Insert (sys_path, 0, PyString_FromString (PLUGINDIR "/python")); + gst_python_load_directory (plugin, PLUGINDIR "/python"); + } else { + gchar **list; + gint i; + + /* 2.b. Scan GST_PLUGIN_SYSTEM_PATH */ + GST_DEBUG ("GST_PLUGIN_SYSTEM_PATH set to %s", plugin_path, plugin_path); + list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0); + for (i = 0; list[i]; i++) { + gchar *sysdir; + + sysdir = g_build_filename (list[i], "python", NULL); + + PyList_Insert (sys_path, 0, PyString_FromString (sysdir)); + gst_python_load_directory (plugin, sysdir); + g_free (sysdir); + } + g_strfreev (list); + } + + + return ret; +} + +/** + *pygst_require: + * @version: the version required + * + * Checks if the pygst/gst python modules are available. + * Requests the specified version. + * + * Returns: the gst-python module, or NULL if there was an error. + */ + +static PyObject * +pygst_require (gchar * version) +{ + PyObject *pygst, *gst; + PyObject *require; + PyObject *modules; + gboolean doupdate = TRUE; + const gchar *regupd; + + modules = PySys_GetObject ("modules"); + /* Try to see if 'gst' is already imported */ + if (!(gst = PyMapping_GetItemString (modules, "gst"))) { + PyErr_Clear (); + + /* if not, see if 'pygst' was already imported. If so, we assume that + * 'pygst.require' has already been called. */ + if (!(pygst = PyMapping_GetItemString (modules, "pygst"))) { + PyErr_Clear (); + + if (!(pygst = PyImport_ImportModule ("pygst"))) { + GST_ERROR ("the pygst module is not available!"); + goto error; + } + + if (!(PyObject_CallMethod (pygst, "require", "s", version))) { + GST_ERROR ("the required version, %s, of gst-python is not available!", + version); + Py_DECREF (pygst); + goto error; + } + } + + /* We don't want the registry to be loaded when we import gst */ + if ((regupd = g_getenv ("GST_REGISTRY_UPDATE")) + && (!strcmp (regupd, "no"))) + doupdate = FALSE; + g_setenv ("GST_REGISTRY_UPDATE", "no", TRUE); + + if (!(gst = PyImport_ImportModule ("gst"))) { + GST_ERROR ("couldn't import the gst module"); + Py_DECREF (pygst); + if (doupdate) + g_unsetenv ("GST_REGISTRY_UPDATE"); + goto error; + } + } + + if (doupdate) + g_unsetenv ("GST_REGISTRY_UPDATE"); + +#define IMPORT(x, y) \ + _PyGst##x##_Type = (void *)PyObject_GetAttrString(gst, y); \ + if (_PyGst##x##_Type == NULL) { \ + PyErr_Print(); \ + return NULL; \ + } + IMPORT (Element, "Element"); + + return gst; + +error: + { + PyErr_Print (); + PyErr_Clear (); + return NULL; + } +} + +static gboolean +plugin_init (GstPlugin * plugin) +{ + PyGILState_STATE state; + PyObject *gst, *dict, *pyplugin; + gboolean we_initialized = FALSE; + GModule *libpython; + gpointer has_python = NULL; + + GST_DEBUG_CATEGORY_INIT (pyplugindebug, "pyplugin", 0, + "Python plugin loader"); + + gst_plugin_add_dependency_simple (plugin, + "HOME/.gstreamer-0.10/plugins/python:GST_PLUGIN_SYSTEM_PATH/python:GST_PLUGIN_PATH/python", + PLUGINDIR "/python:HOME/.gstreamer-0.10/plugins/python:" + "GST_PLUGIN_SYSTEM_PATH/python:GST_PLUGIN_PATH/python", NULL, + GST_PLUGIN_DEPENDENCY_FLAG_NONE); + + GST_LOG ("Checking to see if libpython is already loaded"); + g_module_symbol (g_module_open (NULL, G_MODULE_BIND_LOCAL), "_Py_NoneStruct", + &has_python); + if (has_python) { + GST_LOG ("libpython is already loaded"); + } else { + GST_LOG ("loading libpython"); + libpython = + g_module_open (PY_LIB_LOC "/libpython" PYTHON_VERSION "." + PY_LIB_SUFFIX, 0); + if (!libpython) { + GST_WARNING ("Couldn't g_module_open libpython. Reason: %s", + g_module_error ()); + return FALSE; + } + } + + if (!Py_IsInitialized ()) { + GST_LOG ("python wasn't initialized"); + /* set the correct plugin for registering stuff */ + Py_Initialize (); + we_initialized = TRUE; + } else { + GST_LOG ("python was already initialized"); + state = PyGILState_Ensure (); + } + + GST_LOG ("initializing pygobject"); + if (!np_init_pygobject ()) { + GST_WARNING ("pygobject initialization failed"); + return FALSE; + } + + if (!(gst = pygst_require ("0.10"))) { + return FALSE; + } + + if (we_initialized) { + pyplugin = pygobject_new (G_OBJECT (plugin)); + if (!pyplugin || PyModule_AddObject (gst, "__plugin__", pyplugin) != 0) { + g_warning ("Couldn't set plugin"); + Py_DECREF (pyplugin); + } + } + + dict = PyModule_GetDict (gst); + if (!dict) { + GST_ERROR ("no dict?!"); + return FALSE; + } + + gst_python_plugin_load (plugin); + + if (we_initialized) { + /* We need to release the GIL since we're going back to C land */ + PyEval_SaveThread (); + } else + PyGILState_Release (state); + return TRUE; +} + +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "python", + "loader for plugins written in python", + plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_ORIGIN) diff --git a/py-compile b/py-compile new file mode 100755 index 0000000..3f9d05b --- /dev/null +++ b/py-compile @@ -0,0 +1,146 @@ +#!/bin/sh +# py-compile - Compile a Python program + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software +# Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +if [ -z "$PYTHON" ]; then + PYTHON=python +fi + +basedir= +destdir= +files= +while test $# -ne 0; do + case "$1" in + --basedir) + basedir=$2 + if test -z "$basedir"; then + echo "$0: Missing argument to --basedir." 1>&2 + exit 1 + fi + shift + ;; + --destdir) + destdir=$2 + if test -z "$destdir"; then + echo "$0: Missing argument to --destdir." 1>&2 + exit 1 + fi + shift + ;; + -h|--h*) + cat <<\EOF +Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." + +Byte compile some python scripts FILES. Use --destdir to specify any +leading directory path to the FILES that you don't want to include in the +byte compiled file. Specify --basedir for any additional path information you +do want to be shown in the byte compiled file. + +Example: + py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py + +Report bugs to . +EOF + exit $? + ;; + -v|--v*) + echo "py-compile $scriptversion" + exit $? + ;; + *) + files="$files $1" + ;; + esac + shift +done + +if test -z "$files"; then + echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 + exit 1 +fi + +# if basedir was given, then it should be prepended to filenames before +# byte compilation. +if [ -z "$basedir" ]; then + pathtrans="path = file" +else + pathtrans="path = os.path.join('$basedir', file)" +fi + +# if destdir was given, then it needs to be prepended to the filename to +# byte compile but not go into the compiled file. +if [ -z "$destdir" ]; then + filetrans="filepath = path" +else + filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)" +fi + +$PYTHON -c " +import sys, os, py_compile + +files = '''$files''' + +sys.stdout.write('Byte-compiling python modules...\n') +for file in files.split(): + $pathtrans + $filetrans + if not os.path.exists(filepath) or not (len(filepath) >= 3 + and filepath[-3:] == '.py'): + continue + sys.stdout.write(file) + sys.stdout.flush() + py_compile.compile(filepath, filepath + 'c', path) +sys.stdout.write('\n')" || exit $? + +# this will fail for python < 1.5, but that doesn't matter ... +$PYTHON -O -c " +import sys, os, py_compile + +files = '''$files''' +sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n') +for file in files.split(): + $pathtrans + $filetrans + if not os.path.exists(filepath) or not (len(filepath) >= 3 + and filepath[-3:] == '.py'): + continue + sys.stdout.write(file) + sys.stdout.flush() + py_compile.compile(filepath, filepath + 'o', path) +sys.stdout.write('\n')" 2>/dev/null || : + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/pygst.py.in b/pygst.py.in new file mode 100644 index 0000000..a55a552 --- /dev/null +++ b/pygst.py.in @@ -0,0 +1,63 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +# pygst - Python bindings for the GStreamer multimedia framework. +# Copyright (C) 1998-2002 James Henstridge +# (C) 2005 Edward Hervey +# +# pygst.py: pygst version selection code. +# +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# This allows parallel installation of gst-python +# +# In order to have backward compatibility + +import sys + +__all__ = ['require'] + +_pygst_dir = '@PYGSTDIR@' + +_pygst_version = '@GST_MAJORMINOR@' + +_pygst_required_version = None + +class RequiredVersionError(ValueError, AssertionError): + # AssertionError is subclassed for compatibility reasons. + pass + + +def require(version): + global _pygst_required_version + + if _pygst_required_version != None: + if _pygst_required_version != version: + raise RequiredVersionError, "a different version of gst was already required" + else: + return + + if sys.modules.has_key('gst'): + raise RequiredVersionError, "pygst.require() must be called before importing gst" + + if version != _pygst_version: + raise RequiredVersionError, "Only version '%s' is available" % _pygst_version + + # move the pygst path to the front + while _pygst_dir in sys.path: + sys.path.remove(_pygst_dir) + sys.path.insert(0, _pygst_dir) + + _pygst_required_version = version diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am new file mode 100644 index 0000000..0ab6377 --- /dev/null +++ b/testsuite/Makefile.am @@ -0,0 +1,140 @@ +INCLUDES = \ + $(PYTHON_INCLUDES) \ + $(PYGOBJET_CFLAGS) \ + $(PYGST_CFLAGS) \ + $(GST_CFLAGS) + +noinst_LTLIBRARIES = testhelper.la +linked_LIBS = testhelper.la + +testhelper_la_LDFLAGS = -module -avoid-version +testhelper_la_LIBADD = $(GLIB_LIBS) +testhelper_la_CFLAGS = $(PYGOBJECT_CFLAGS) +testhelper_la_SOURCES = \ + testhelpermodule.c \ + test-object.c + +# This is a hack to make sure a shared library is built +testhelper.la: $(testhelper_la_OBJECTS) $(testhelper_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(pkgpyexecdir) $(testhelper_la_LDFLAGS) $(testhelper_la_OBJECTS) $(testhelper_la_LIBADD) $(LIBS) + +tests = \ + test_adapter.py \ + test_audio.py \ + test_bin.py \ + test_buffer.py \ + test_caps.py \ + test_element.py \ + test_event.py \ + test_ghostpad.py \ + test_interface.py \ + test_message.py \ + test_pad.py \ + test_pipeline.py \ + test_registry.py \ + test_struct.py \ + test_segment.py \ + test_taglist.py \ + test_xml.py \ + test_pbutils.py \ + test_gst.py + +check-local: testhelper.la + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py + @rm -fr *.pyc + +check-verbose: testhelper.la + @VERBOSE=yes PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @VERBOSE=yes PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py + @rm -fr *.pyc + +EXTRA_DIST = $(tests) common.py cleanup.py runtests.py test-object.h python.supp gstpython.supp + +if HAVE_VALGRIND +check-valgrind: + $(PYTHON) cleanup.py + make valgrind +else +check-valgrind: + @true +endif + +GSTSUPP = $(top_srcdir)/common/gst.supp +PYTHONSUPP = $(top_srcdir)/testsuite/python.supp +GSTPYTHONSUPP = $(top_srcdir)/testsuite/gstpython.supp +TESTS_ENVIRONMENT = PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) LC_ALL=C + +# gdb any given test_x.py by running make test_x.py.gdb +%.gdb: % + $(TESTS_ENVIRONMENT) \ + gdb --args \ + $(PYTHON) \ + $* + +# valgrind any given test_x.py by running make test_x.py.valgrind +%.valgrind: % + $(TESTS_ENVIRONMENT) \ + G_DEBUG=gc-friendly G_SLICE=always-malloc \ + $(VALGRIND_PATH) -q \ + --suppressions=$(GSTSUPP) \ + --suppressions=$(PYTHONSUPP) \ + --suppressions=$(GSTPYTHONSUPP) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=50 \ + $(PYTHON) \ + $* 2>&1 | tee valgrind.log + @if grep "tely lost" valgrind.log; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +# valgrind any given test_x.py by running make test_x.py.valgrind +%.gen-suppressions: % + $(TESTS_ENVIRONMENT) \ + G_DEBUG=gc-friendly G_SLICE=always-malloc \ + $(VALGRIND_PATH) -q \ + --suppressions=$(GSTSUPP) \ + --suppressions=$(PYTHONSUPP) \ + --suppressions=$(GSTPYTHONSUPP) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=50 \ + --gen-suppressions=all \ + $(PYTHON) \ + $* 2>&1 | tee valgrind.log + @if grep "tely lost" valgrind.log; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +%.check: % + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py $* + @rm -fr *.pyc + +%.forever: % + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @while true; do \ + PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) \ + $(PYTHON) $(srcdir)/runtests.py $* || break; done + @rm -fr *.pyc + +# valgrind all tests +valgrind: $(tests) + @echo "Valgrinding tests ..." + @failed=0; \ + for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(tests)); do \ + make $$t.valgrind; \ + if test "$$?" -ne 0; then \ + echo "Valgrind error for test $$t"; \ + failed=`expr $$failed + 1`; \ + whicht="$$whicht $$t"; \ + fi; \ + done; \ + if test "$$failed" -ne 0; then \ + echo "$$failed tests had leaks under valgrind:"; \ + echo "$$whicht"; \ + false; \ + fi diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in new file mode 100644 index 0000000..87c24af --- /dev/null +++ b/testsuite/Makefile.in @@ -0,0 +1,745 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = testsuite +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-valgrind.m4 \ + $(top_srcdir)/common/m4/gst.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +testhelper_la_DEPENDENCIES = +am_testhelper_la_OBJECTS = testhelper_la-testhelpermodule.lo \ + testhelper_la-test-object.lo +testhelper_la_OBJECTS = $(am_testhelper_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +testhelper_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(testhelper_la_CFLAGS) \ + $(CFLAGS) $(testhelper_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(testhelper_la_SOURCES) +DIST_SOURCES = $(testhelper_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +EXEEXT = @EXEEXT@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GLIB_REQ = @GLIB_REQ@ +GREP = @GREP@ +GSTPB_REQ = @GSTPB_REQ@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_DISABLE_ALLOC_TRACE = @GST_DISABLE_ALLOC_TRACE@ +GST_DISABLE_GST_DEBUG = @GST_DISABLE_GST_DEBUG@ +GST_DISABLE_LOADSAVE = @GST_DISABLE_LOADSAVE@ +GST_DISABLE_PARSE = @GST_DISABLE_PARSE@ +GST_DISABLE_PLUGIN = @GST_DISABLE_PLUGIN@ +GST_DISABLE_REGISTRY = @GST_DISABLE_REGISTRY@ +GST_DISABLE_TRACE = @GST_DISABLE_TRACE@ +GST_DISABLE_XML = @GST_DISABLE_XML@ +GST_DP_CFLAGS = @GST_DP_CFLAGS@ +GST_DP_LIBS = @GST_DP_LIBS@ +GST_LIBS = @GST_LIBS@ +GST_MAJORMINOR = @GST_MAJORMINOR@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_LIBS = @GST_OPTION_LIBS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_REQ = @GST_REQ@ +GTK_REQ = @GTK_REQ@ +IGNORE_GST_0_10_21 = @IGNORE_GST_0_10_21@ +IGNORE_GST_0_10_22 = @IGNORE_GST_0_10_22@ +IGNORE_GST_0_10_23 = @IGNORE_GST_0_10_23@ +IGNORE_GST_0_10_24 = @IGNORE_GST_0_10_24@ +IGNORE_GST_0_10_25 = @IGNORE_GST_0_10_25@ +IGNORE_GST_0_10_26 = @IGNORE_GST_0_10_26@ +IGNORE_GST_0_10_29 = @IGNORE_GST_0_10_29@ +IGNORE_GST_0_10_30 = @IGNORE_GST_0_10_30@ +IGNORE_GST_0_10_31 = @IGNORE_GST_0_10_31@ +IGNORE_GST_0_10_32 = @IGNORE_GST_0_10_32@ +IGNORE_GST_LOADSAVE = @IGNORE_GST_LOADSAVE@ +IGNORE_GST_PB_0_10_23 = @IGNORE_GST_PB_0_10_23@ +IGNORE_GST_PB_0_10_25 = @IGNORE_GST_PB_0_10_25@ +IGNORE_GST_PB_0_10_26 = @IGNORE_GST_PB_0_10_26@ +IGNORE_GST_PB_0_10_29 = @IGNORE_GST_PB_0_10_29@ +IGNORE_GST_PB_0_10_30 = @IGNORE_GST_PB_0_10_30@ +IGNORE_GST_PB_0_10_31 = @IGNORE_GST_PB_0_10_31@ +IGNORE_GST_PB_0_10_32 = @IGNORE_GST_PB_0_10_32@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +PYEXECDIR = @PYEXECDIR@ +PYGOBJECT_2_12_CFLAGS = @PYGOBJECT_2_12_CFLAGS@ +PYGOBJECT_2_12_LIBS = @PYGOBJECT_2_12_LIBS@ +PYGOBJECT_2_16_CFLAGS = @PYGOBJECT_2_16_CFLAGS@ +PYGOBJECT_2_16_LIBS = @PYGOBJECT_2_16_LIBS@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYGOBJECT_REQ = @PYGOBJECT_REQ@ +PYGST_CFLAGS = @PYGST_CFLAGS@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYGTK_REQ = @PYGTK_REQ@ +PYTHON = @PYTHON@ +PYTHONDIR = @PYTHONDIR@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_LIB_SUFFIX = @PYTHON_LIB_SUFFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VERSION = @VERSION@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +INCLUDES = \ + $(PYTHON_INCLUDES) \ + $(PYGOBJET_CFLAGS) \ + $(PYGST_CFLAGS) \ + $(GST_CFLAGS) + +noinst_LTLIBRARIES = testhelper.la +linked_LIBS = testhelper.la +testhelper_la_LDFLAGS = -module -avoid-version +testhelper_la_LIBADD = $(GLIB_LIBS) +testhelper_la_CFLAGS = $(PYGOBJECT_CFLAGS) +testhelper_la_SOURCES = \ + testhelpermodule.c \ + test-object.c + +tests = \ + test_adapter.py \ + test_audio.py \ + test_bin.py \ + test_buffer.py \ + test_caps.py \ + test_element.py \ + test_event.py \ + test_ghostpad.py \ + test_interface.py \ + test_message.py \ + test_pad.py \ + test_pipeline.py \ + test_registry.py \ + test_struct.py \ + test_segment.py \ + test_taglist.py \ + test_xml.py \ + test_pbutils.py \ + test_gst.py + +EXTRA_DIST = $(tests) common.py cleanup.py runtests.py test-object.h python.supp gstpython.supp +GSTSUPP = $(top_srcdir)/common/gst.supp +PYTHONSUPP = $(top_srcdir)/testsuite/python.supp +GSTPYTHONSUPP = $(top_srcdir)/testsuite/gstpython.supp +TESTS_ENVIRONMENT = PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) LC_ALL=C +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu testsuite/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testhelper_la-test-object.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testhelper_la-testhelpermodule.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +testhelper_la-testhelpermodule.lo: testhelpermodule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testhelper_la_CFLAGS) $(CFLAGS) -MT testhelper_la-testhelpermodule.lo -MD -MP -MF $(DEPDIR)/testhelper_la-testhelpermodule.Tpo -c -o testhelper_la-testhelpermodule.lo `test -f 'testhelpermodule.c' || echo '$(srcdir)/'`testhelpermodule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testhelper_la-testhelpermodule.Tpo $(DEPDIR)/testhelper_la-testhelpermodule.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testhelpermodule.c' object='testhelper_la-testhelpermodule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testhelper_la_CFLAGS) $(CFLAGS) -c -o testhelper_la-testhelpermodule.lo `test -f 'testhelpermodule.c' || echo '$(srcdir)/'`testhelpermodule.c + +testhelper_la-test-object.lo: test-object.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testhelper_la_CFLAGS) $(CFLAGS) -MT testhelper_la-test-object.lo -MD -MP -MF $(DEPDIR)/testhelper_la-test-object.Tpo -c -o testhelper_la-test-object.lo `test -f 'test-object.c' || echo '$(srcdir)/'`test-object.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testhelper_la-test-object.Tpo $(DEPDIR)/testhelper_la-test-object.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test-object.c' object='testhelper_la-test-object.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testhelper_la_CFLAGS) $(CFLAGS) -c -o testhelper_la-test-object.lo `test -f 'test-object.c' || echo '$(srcdir)/'`test-object.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-local +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \ + clean-generic clean-libtool clean-noinstLTLIBRARIES ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# This is a hack to make sure a shared library is built +testhelper.la: $(testhelper_la_OBJECTS) $(testhelper_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(pkgpyexecdir) $(testhelper_la_LDFLAGS) $(testhelper_la_OBJECTS) $(testhelper_la_LIBADD) $(LIBS) + +check-local: testhelper.la + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py + @rm -fr *.pyc + +check-verbose: testhelper.la + @VERBOSE=yes PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @VERBOSE=yes PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py + @rm -fr *.pyc + +@HAVE_VALGRIND_TRUE@check-valgrind: +@HAVE_VALGRIND_TRUE@ $(PYTHON) cleanup.py +@HAVE_VALGRIND_TRUE@ make valgrind +@HAVE_VALGRIND_FALSE@check-valgrind: +@HAVE_VALGRIND_FALSE@ @true + +# gdb any given test_x.py by running make test_x.py.gdb +%.gdb: % + $(TESTS_ENVIRONMENT) \ + gdb --args \ + $(PYTHON) \ + $* + +# valgrind any given test_x.py by running make test_x.py.valgrind +%.valgrind: % + $(TESTS_ENVIRONMENT) \ + G_DEBUG=gc-friendly G_SLICE=always-malloc \ + $(VALGRIND_PATH) -q \ + --suppressions=$(GSTSUPP) \ + --suppressions=$(PYTHONSUPP) \ + --suppressions=$(GSTPYTHONSUPP) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=50 \ + $(PYTHON) \ + $* 2>&1 | tee valgrind.log + @if grep "tely lost" valgrind.log; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +# valgrind any given test_x.py by running make test_x.py.valgrind +%.gen-suppressions: % + $(TESTS_ENVIRONMENT) \ + G_DEBUG=gc-friendly G_SLICE=always-malloc \ + $(VALGRIND_PATH) -q \ + --suppressions=$(GSTSUPP) \ + --suppressions=$(PYTHONSUPP) \ + --suppressions=$(GSTPYTHONSUPP) \ + --tool=memcheck --leak-check=full --trace-children=yes \ + --leak-resolution=high --num-callers=50 \ + --gen-suppressions=all \ + $(PYTHON) \ + $* 2>&1 | tee valgrind.log + @if grep "tely lost" valgrind.log; then \ + rm valgrind.log; \ + exit 1; \ + fi + @rm valgrind.log + +%.check: % + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/runtests.py $* + @rm -fr *.pyc + +%.forever: % + @PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) $(PYTHON) $(srcdir)/cleanup.py + @while true; do \ + PYTHONPATH=$(top_builddir):$(top_builddir)/gst/.libs:`pwd`:$(top_srcdir):$(PYTHONPATH) \ + $(PYTHON) $(srcdir)/runtests.py $* || break; done + @rm -fr *.pyc + +# valgrind all tests +valgrind: $(tests) + @echo "Valgrinding tests ..." + @failed=0; \ + for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(tests)); do \ + make $$t.valgrind; \ + if test "$$?" -ne 0; then \ + echo "Valgrind error for test $$t"; \ + failed=`expr $$failed + 1`; \ + whicht="$$whicht $$t"; \ + fi; \ + done; \ + if test "$$failed" -ne 0; then \ + echo "$$failed tests had leaks under valgrind:"; \ + echo "$$whicht"; \ + false; \ + fi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/testsuite/cleanup.py b/testsuite/cleanup.py new file mode 100644 index 0000000..6673d56 --- /dev/null +++ b/testsuite/cleanup.py @@ -0,0 +1,4 @@ +import pygst +pygst.require('0.10') +import gst + diff --git a/testsuite/common.py b/testsuite/common.py new file mode 100644 index 0000000..eca4877 --- /dev/null +++ b/testsuite/common.py @@ -0,0 +1,204 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +try: + from dl import RTLD_LAZY, RTLD_GLOBAL +except ImportError: + # dl doesn't seem to be available on 64bit systems + try: + from DLFCN import RTLD_LAZY, RTLD_GLOBAL + except ImportError: + pass +import os +import sys +import gc +import unittest + +import pygtk +pygtk.require('2.0') + +import gobject +try: + gobject.threads_init() +except: + print "WARNING: gobject doesn't have threads_init, no threadsafety" + +# Detect the version of pygobject +# In pygobject >= 2.13.0 the refcounting of objects has changed. +pgmaj,pgmin,pgmac = gobject.pygobject_version +if pgmaj >= 2 and pgmin >= 13: + pygobject_2_13 = True +else: + pygobject_2_13 = False + +# Don't insert before . +# sys.path.insert(1, os.path.join('..')) + +# Load GST and make sure we load it from the current build +sys.setdlopenflags(RTLD_LAZY | RTLD_GLOBAL) + +topbuilddir = os.path.abspath(os.path.join('..')) +topsrcdir = os.path.abspath(os.path.join('..')) +if topsrcdir.endswith('_build'): + topsrcdir = os.path.dirname(topsrcdir) + +# gst's __init__.py is in topbuilddir/gst +path = os.path.abspath(os.path.join(topbuilddir, 'gst')) +import gst +file = gst.__file__ +assert file.startswith(path), 'bad gst path: %s' % file + +# gst's interfaces is in topbuilddir/gst +path = os.path.abspath(os.path.join(topbuilddir, 'gst')) +try: + import gst.interfaces +except ImportError: + # hack: we import it from our builddir/gst/.libs instead; ugly + import interfaces + gst.interfaces = interfaces +file = gst.interfaces.__file__ +assert file.startswith(path), 'bad gst.interfaces path: %s' % file + +# gst's tags is in topbuilddir/gst +path = os.path.abspath(os.path.join(topbuilddir, 'gst')) +try: + import gst.tag +except ImportError: + # hack: we import it from our builddir/gst/.libs instead; ugly + import tag + gst.tag = tag +file = gst.tag.__file__ +assert file.startswith(path), 'bad gst.tag path: %s' % file + +# gst's pbutils is in topbuilddir/gst +path = os.path.abspath(os.path.join(topbuilddir, 'gst')) +try: + import gst.pbutils +except ImportError: + # hack: we import it from our builddir/gst/.libs instead; ugly + import pbutils + gst.pbutils = pbutils +file = gst.pbutils.__file__ +assert file.startswith(path), 'bad gst.pbutils path: %s' % file + +# testhelper needs gstlibtoolimporter +import gstlibtoolimporter +gstlibtoolimporter.install() +import testhelper +gstlibtoolimporter.uninstall() + +_stderr = None + +def disable_stderr(): + global _stderr + _stderr = file('/tmp/stderr', 'w+') + sys.stderr = os.fdopen(os.dup(2), 'w') + os.close(2) + os.dup(_stderr.fileno()) + +def enable_stderr(): + global _stderr + + os.close(2) + os.dup(sys.stderr.fileno()) + _stderr.seek(0, 0) + data = _stderr.read() + _stderr.close() + os.remove('/tmp/stderr') + return data + +def run_silent(function, *args, **kwargs): + disable_stderr() + + try: + function(*args, **kwargs) + except Exception, exc: + enable_stderr() + raise exc + + output = enable_stderr() + + return output + +class TestCase(unittest.TestCase): + + _types = [gst.Object, gst.MiniObject] + + def gccollect(self): + # run the garbage collector + ret = 0 + gst.debug('garbage collecting') + while True: + c = gc.collect() + ret += c + if c == 0: break + gst.debug('done garbage collecting, %d objects' % ret) + return ret + + def gctrack(self): + # store all gst objects in the gc in a tracking dict + # call before doing any allocation in your test, from setUp + gst.debug('tracking gc GstObjects for types %r' % self._types) + self.gccollect() + self._tracked = {} + for c in self._types: + self._tracked[c] = [o for o in gc.get_objects() if isinstance(o, c)] + + def gcverify(self): + # verify no new gst objects got added to the gc + # call after doing all cleanup in your test, from tearDown + gst.debug('verifying gc GstObjects for types %r' % self._types) + new = [] + for c in self._types: + objs = [o for o in gc.get_objects() if isinstance(o, c)] + new.extend([o for o in objs if o not in self._tracked[c]]) + + self.failIf(new, new) + #self.failIf(new, ["%r:%d" % (type(o), id(o)) for o in new]) + del self._tracked + + def setUp(self): + """ + Override me by chaining up to me at the start of your setUp. + """ + # Using private variables is BAD ! this variable changed name in + # python 2.5 + try: + methodName = self.__testMethodName + except: + methodName = self._testMethodName + gst.debug('%s.%s' % (self.__class__.__name__, methodName)) + self.gctrack() + + def tearDown(self): + """ + Override me by chaining up to me at the end of your tearDown. + """ + # Using private variables is BAD ! this variable changed name in + # python 2.5 + try: + methodName = self.__testMethodName + except: + methodName = self._testMethodName + gst.debug('%s.%s' % (self.__class__.__name__, methodName)) + self.gccollect() + self.gcverify() diff --git a/testsuite/gstpython.supp b/testsuite/gstpython.supp new file mode 100644 index 0000000..d3b9abc --- /dev/null +++ b/testsuite/gstpython.supp @@ -0,0 +1,241 @@ +{ + pthread leak + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls* +} + +{ + pthread leak 2 + Memcheck:Leak + fun:memalign + fun:_dl_allocate_tls* +} + +{ + popt leak + Memcheck:Leak + fun:malloc + fun:nss_parse_service_list + fun:__nss_database_lookup + obj:* + obj:* + fun:getpwuid_r@@GLIBC_2.2.5 + fun:g_get_any_init_do + fun:g_get_home_dir + fun:init_post + fun:init_popt_callback +} + +{ + pygobject init leak + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:type_node_* + fun:type_node_* + fun:* + fun:* + fun:g_type_init* + fun:initgobject +} + +{ + borked pthread creation + Memcheck:Param + write(buf) + fun:__pthread_initialize_manager + fun:pthread_create@@GLIBC_2.2.5 + fun:g_thread_create* + fun:g_thread_create* +} + +{ + borked pthread creation 2 + Memcheck:Param + write(buf) + fun:pthread_create@@GLIBC_2.2.5 + fun:* + fun:* + fun:* + fun:* + fun:gst_task_start +} + +{ + Syscall param clone(child_tidptr) contains uninitialised byte(s) + Memcheck:Param + clone(child_tidptr) + fun:clone +} + +{ + memory loss when creating thread + Memcheck:Leak + fun:malloc + fun:__pthread_initialize_manager + fun:pthread_create* +} + +# pyg_enable_threads memleak + +{ + memleak in pyg_enable_threads + Memcheck:Leak + fun:malloc + fun:* + fun:* + fun:* + fun:* + fun:* + fun:pyg_enable_threads +} + + +{ + memleak in pyg_enable_threads 2 + Memcheck:Leak + fun:malloc + fun:* + fun:* + fun:* + fun:* + fun:pyg_enable_threads +} + +{ + memleak in pyg_enable_threads 3 + Memcheck:Leak + fun:malloc + fun:* + fun:* + fun:* + fun:pyg_enable_threads +} + +#pygobject leaks + +{ + PyType_Ready leak + Memcheck:Leak + fun:malloc + fun:PyObject_Malloc + fun:_PyObject_GC_Malloc + fun:PyType_GenericAlloc + fun:* + fun:* + fun:PyType_Ready +} + +#gst debug category new leak +{ + gst debug category new leak + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_strdup + fun:_gst_debug_category_new +} + +# memleak in gst_element_state_get_name that we can't get rid of +{ + gst_element_state_get_name + Memcheck:Leak + fun:malloc + fun:* + fun:g_vasprintf + fun:g_strdup* + fun:g_strdup* + fun:_wrap_gst_element_state_get_name +} + +#memleak in pygobject_new_with_interfaces +# weird, cos it seems to free the return value of g_type_interfaces +{ + _gst_element_factory_make + Memcheck:Leak + fun:malloc + fun:g_malloc + fun:g_type_interfaces +} + +#memleak in static_pad_template +{ + gst_static_pad_template_get + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:g_type_create_instance + fun:g_object_constructor + fun:gst_object_constructor + fun:* + fun:* + fun:* + fun:gst_static_pad_template_get +} + +#leak in libxml +{ + xml_parse_memory leak + Memcheck:Leak + fun:malloc + fun:* + fun:xml* +} + +# FIXME : This is an awful leak that has do to with the gst_pad_set_*_function wrappers +{ + leak in gst_pad_set_*_function wrappers + Memcheck:Leak + fun:calloc + fun:g_malloc0 + fun:pad_private +} + +# python leak in runtime compiler +{ + python leak in runtime compiler + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_New* + fun:PyDict_New + fun:PySymtableEntry_New + fun:symtable_* + fun:symtable_* + fun:jcompile +} + +#FIXME : These leaks are in core. See bug #344761 +{ + leak in init_gst, when creating the argv to give to gst_init_check() + Memcheck:Leak + fun:* + fun:g_malloc + fun:init_gst +} + +{ + The GOption context is leaking in gst_init_check + Memcheck:Leak + fun:* + fun:g_malloc0 + fun:g_option_context_new + fun:gst_init_check + fun:init_gst +} + +{ + The GDir is leaked. + Memcheck:Leak + fun:* + fun:g_malloc + fun:g_dir_open + fun:gst_registry_scan_path_level + fun:gst_registry_scan_path + fun:init_post + fun:g_option_context_parse + fun:gst_init_check + fun:init_gst +} diff --git a/testsuite/python.supp b/testsuite/python.supp new file mode 100644 index 0000000..87fd226 --- /dev/null +++ b/testsuite/python.supp @@ -0,0 +1,520 @@ +# +# This is a valgrind suppression file that should be used when using valgrind. +# +# Here's an example of running valgrind: +# +# cd python/dist/src +# valgrind --tool=memcheck --suppressions=Misc/valgrind-python.supp \ +# ./python -E -tt ./Lib/test/regrtest.py -u bsddb,network +# +# You must edit Objects/obmalloc.c and uncomment Py_USING_MEMORY_DEBUGGER +# to use the preferred suppressions with Py_ADDRESS_IN_RANGE. +# +# If you do not want to recompile Python, you can uncomment +# suppressions for PyObject_Free and PyObject_Realloc. +# +# See Misc/README.valgrind for more information. + +# all tool names: Addrcheck,Memcheck,cachegrind,helgrind,massif +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Value8 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Addr8 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Value8 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Addr8 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64) + Memcheck:Value8 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:PyObject_Realloc +} + +### +### All the suppressions below are for errors that occur within libraries +### that Python uses. The problems to not appear to be related to Python's +### use of the libraries. +### +{ + GDBM problems, see test_gdbm + Memcheck:Param + write(buf) + fun:write + fun:gdbm_open + +} + +{ + Avoid problem in libc on gentoo + Memcheck:Cond + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so +} + +{ + Avoid problem in glibc on gentoo + Memcheck:Addr8 + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libc-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_open + obj:/lib/libdl-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libdl-2.3.4.so + fun:dlopen +} + +{ + Avoid problem in glibc on gentoo + Memcheck:Addr8 + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libc-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_open + obj:/lib/libdl-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libdl-2.3.4.so + fun:dlopen +} + +{ + Avoid problem in glibc on gentoo + Memcheck:Cond + obj:/lib/ld-2.3.4.so + obj:/lib/libc-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_open + obj:/lib/libdl-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libdl-2.3.4.so + fun:dlopen +} + +{ + Avoid problem in glibc on gentoo + Memcheck:Cond + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libc-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_open + obj:/lib/libdl-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/libdl-2.3.4.so + fun:dlopen +} + +{ + Avoid problems w/readline doing a putenv and leaking on exit + Memcheck:Leak + fun:malloc + fun:xmalloc + fun:sh_set_lines_and_columns + fun:_rl_get_screen_size + fun:_rl_init_terminal_io + obj:/lib/libreadline.so.4.3 + fun:rl_initialize + fun:setup_readline + fun:initreadline + fun:_PyImport_LoadDynamicModule + fun:load_module + fun:import_submodule + fun:load_next + fun:import_module_ex + fun:PyImport_ImportModuleEx +} + +{ + Mysterious leak that seems to deal w/pthreads + Memcheck:Leak + fun:calloc + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + fun:_dl_allocate_tls + fun:__pthread_initialize_minimal +} + +{ + Mysterious leak that seems to deal w/pthreads + Memcheck:Leak + fun:memalign + obj:/lib/ld-2.3.4.so + fun:_dl_allocate_tls + fun:__pthread_initialize_minimal +} + +### +### These occur from somewhere within the SSL, when running +### test_socket_sll. They are too general to leave on by default. +### +###{ +### somewhere in SSL stuff +### Memcheck:Cond +### fun:memset +###} +###{ +### somewhere in SSL stuff +### Memcheck:Value4 +### fun:memset +###} +### +###{ +### somewhere in SSL stuff +### Memcheck:Cond +### fun:MD5_Update +###} +### +###{ +### somewhere in SSL stuff +### Memcheck:Value4 +### fun:MD5_Update +###} + +# +# All of these problems come from using test_socket_ssl +# +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_bin2bn +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_num_bits_word +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:BN_num_bits_word +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_mod_exp_mont_word +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_mod_exp_mont +} + +{ + from test_socket_ssl + Memcheck:Param + write(buf) + fun:write + obj:/usr/lib/libcrypto.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:RSA_verify +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:RSA_verify +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:DES_set_key_unchecked +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:DES_encrypt2 +} + +{ + from test_socket_ssl + Memcheck:Cond + obj:/usr/lib/libssl.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Value4 + obj:/usr/lib/libssl.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BUF_MEM_grow_clean +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:memcpy + fun:ssl3_read_bytes +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:SHA1_Update +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:SHA1_Update +} + + +# python init memleak +{ + Py_Main memleak + Memcheck:Leak + fun:malloc + fun:PyObject_Malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_* + fun:* + fun:* + fun:* + fun:* + fun:Py_InitializeEx +} + +{ + Py_Main memleak + Memcheck:Leak + fun:malloc + fun:PyObject_Malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:Py_InitializeEx +} + +{ + Py_Main memleak v2 + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_New + fun:* + fun:* + fun:* + fun:* + fun:* + fun:Py_InitializeEx +} + +{ + Read compiled module memleak + Memcheck:Leak + fun:malloc + fun:PyObject_Malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_NewVar + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:* + fun:read_compiled_module +} + +{ + PyRun_SimpleFileExFlags memleak + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_Malloc + fun:_PyObject_GC_New* + fun:* + fun:* + fun:* + fun:PyRun_SimpleFileExFlags +} + +# memleak in update_keyword_args +{ + update_keyword_args + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_Malloc + fun:* + fun:* + fun:update_keyword_args +} + +# memleaks/conds in import_submodule +{ + memleak in import_submodule + Memcheck:Cond + fun:strcpy + fun:find_module +} + +{ + wrong jump in import_submodule + Memcheck:Cond + fun:find_module + fun:import_submodule +} + +{ + wrong jump in import_submodule + Memcheck:Cond + fun:find_module + fun:load_package + fun:load_module + fun:import_submodule +} + +{ + Use of uninitialised value of size 4 + Memcheck:Value4 + fun:strcpy + fun:find_module +} + +## KNOWN MEMORY LEAK in gst_element_state_get_name +## See gstreamer/gst/gstutils.c +{ + Known leak in gst_element_state_get_name + Memcheck:Leak + fun:* + fun:* + fun:* + fun:* + fun:g_strdup_printf + fun:gst_element_state_get_name +} + +## Suppressions for FC5 64bit + +{ + Wrong jump in PyImport_ImportModuleEx + Memcheck:Cond + fun:__strcpy_chk + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + fun:PyImport_ImportModuleEx +} + +{ + Wrong jump in PyImport_ImportModuleEx + Memcheck:Cond + fun:__strcpy_chk + fun:PyImport_ImportModuleEx +} + +{ + Wrong jump in PyImport_ImportModuleEx + Memcheck:Cond + fun:__strcpy_chk + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + fun:PyObject_Call + fun:PyObject_CallFunction + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + obj:/usr/lib64/libpython2.4.so.1.0 + fun:PyImport_ImportModuleEx +} diff --git a/testsuite/runtests.py b/testsuite/runtests.py new file mode 100644 index 0000000..592a4e3 --- /dev/null +++ b/testsuite/runtests.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import glob +import os +import sys +import unittest + +SKIP_FILES = ['common', 'runtests'] + +os.environ['LC_MESSAGES'] = 'C' + +def gettestnames(which): + if not which: + dir = os.path.split(os.path.abspath(__file__))[0] + which = [os.path.basename(p) for p in glob.glob('%s/test_*.py' % dir)] + + names = map(lambda x: x[:-3], which) + for f in SKIP_FILES: + if f in names: + names.remove(f) + return names + +suite = unittest.TestSuite() +loader = unittest.TestLoader() + +for name in gettestnames(sys.argv[1:]): + suite.addTest(loader.loadTestsFromName(name)) + +descriptions = 1 +verbosity = 1 +if os.environ.has_key('VERBOSE'): + descriptions = 2 + verbosity = 2 + +testRunner = unittest.TextTestRunner(descriptions=descriptions, + verbosity=verbosity) +result = testRunner.run(suite) +if result.failures or result.errors: + sys.exit(1) diff --git a/testsuite/test-object.c b/testsuite/test-object.c new file mode 100644 index 0000000..738f568 --- /dev/null +++ b/testsuite/test-object.c @@ -0,0 +1,25 @@ +#include "test-object.h" + +enum +{ + /* FILL ME */ + SIGNAL_EVENT, + LAST_SIGNAL +}; + + +static guint test_object_signals[LAST_SIGNAL] = { 0 }; + +G_DEFINE_TYPE(TestObject, test_object, G_TYPE_OBJECT); + +static void test_object_init (TestObject *self) {} +static void test_object_class_init (TestObjectClass *klass) +{ + test_object_signals[SIGNAL_EVENT] = + g_signal_new ("event", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (TestObjectClass, event), NULL, NULL, + g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, + GST_TYPE_EVENT); + +} + diff --git a/testsuite/test-object.h b/testsuite/test-object.h new file mode 100644 index 0000000..973cfc1 --- /dev/null +++ b/testsuite/test-object.h @@ -0,0 +1,23 @@ +#include +#include + +/* TestObject */ + +typedef struct { + GObject parent; +} TestObject; + +typedef struct { + GObjectClass parent_class; + /* signals */ + void (*event) (TestObject *object, GstEvent *event); +} TestObjectClass; + +#define TEST_TYPE_OBJECT (test_object_get_type()) +#define TEST_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_OBJECT, TestObject)) +#define TEST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass)) +#define TEST_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_OBJECT)) +#define TEST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT)) +#define TEST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), TEST_TYPE_OBJECT, TestObjectClass)) + +GType test_object_get_type (void); diff --git a/testsuite/test_adapter.py b/testsuite/test_adapter.py new file mode 100644 index 0000000..dc0f248 --- /dev/null +++ b/testsuite/test_adapter.py @@ -0,0 +1,83 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2009 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gobject, gst, unittest, TestCase + +class AdapterTest(TestCase): + + def setUp(self): + TestCase.setUp(self) + self.adapter = gst.Adapter() + + def tearDown(self): + self.adapter = None + TestCase.tearDown(self) + + def testAvailable(self): + # starts empty + self.assertEquals(self.adapter.available(), 0) + self.assertEquals(self.adapter.available_fast(), 0) + + # let's give it 4 bytes + self.adapter.push(gst.Buffer("1234")) + self.assertEquals(self.adapter.available_fast(), 4) + + # let's give it another 5 bytes + self.adapter.push(gst.Buffer("56789")) + # we now have 9 bytes + self.assertEquals(self.adapter.available(), 9) + # but can only do a fast take of 4 bytes (the first buffer) + self.assertEquals(self.adapter.available_fast(), 4) + + def testPeek(self): + self.adapter.push(gst.Buffer("0123456789")) + + # let's peek at 5 bytes + b = self.adapter.peek(5) + # it can return more than 5 bytes + self.assert_(len(b) >= 5) + self.assertEquals(b, "01234") + + # it's still 10 bytes big + self.assertEquals(self.adapter.available(), 10) + + # if we try to peek more than what's available, we'll have None + self.assertEquals(self.adapter.peek(11), None) + + def testFlush(self): + self.adapter.push(gst.Buffer("0123456789")) + self.assertEquals(self.adapter.available(), 10) + + self.adapter.flush(5) + self.assertEquals(self.adapter.available(), 5) + + # it flushed the first 5 bytes + self.assertEquals(self.adapter.peek(5), "56789") + + self.adapter.flush(5) + self.assertEquals(self.adapter.available(), 0) + + def testTake(self): + self.adapter.push(gst.Buffer("0123456789")) + self.assertEquals(self.adapter.available(), 10) + + s = self.adapter.take(5) + self.assertEquals(s, "01234") + self.assertEquals(self.adapter.available(), 5) diff --git a/testsuite/test_audio.py b/testsuite/test_audio.py new file mode 100644 index 0000000..60321c8 --- /dev/null +++ b/testsuite/test_audio.py @@ -0,0 +1,38 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2009 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gobject, gst, unittest, TestCase + +class Audio(TestCase): + + def testBufferclip(self): + assert hasattr(gst.audio, "buffer_clip") + # create a segment + segment = gst.Segment() + gst.debug("Created the new segment") + # we'll put a new segment of 500ms to 1000ms + segment.set_newsegment(False, 1.0, gst.FORMAT_TIME, 0, -1, 0) + gst.debug("Initialized the new segment") + # create a new dummy buffer + b = gst.Buffer("this is a really useless line") + gst.debug("Created the buffer") + # clip... which shouldn't do anything + b2 = gst.audio.buffer_clip(b, segment, 44100, 8) + gst.debug("DONE !") diff --git a/testsuite/test_bin.py b/testsuite/test_bin.py new file mode 100644 index 0000000..d10ceac --- /dev/null +++ b/testsuite/test_bin.py @@ -0,0 +1,196 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# Copyright (C) 2005 Thomas Vander Stichele +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gobject, gst, unittest, TestCase, pygobject_2_13 + +import sys +import time + +# see +# http://www.sicem.biz/personal/lgs/docs/gobject-python/gobject-tutorial.html +class MyBin(gst.Bin): + _state_changed = False + + def __init__(self, name): + # we need to call GObject's init to be able to do self.do_* + gobject.GObject.__init__(self) + # since we can't chain up to our parent's __init__, we set the + # name manually + self.set_property('name', name) + + def do_change_state(self, state_change): + if state_change == gst.STATE_CHANGE_PAUSED_TO_PLAYING: + self._state_changed = True + # FIXME: it seems a vmethod increases the refcount without unreffing + # print self.__gstrefcount__ + # print self.__grefcount__ + + # chain up to parent + return gst.Bin.do_change_state(self, state_change) + +# we need to register the type for PyGTK < 2.8 +gobject.type_register(MyBin) + +# FIXME: fix leak in vmethods before removing overriding fixture +class BinSubclassTest(TestCase): + def setUp(self): + pass + + def tearDown(self): + pass + + def testStateChange(self): + bin = MyBin("mybin") + self.assertEquals(bin.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(bin), pygobject_2_13 and 2 or 3) + + self.assertEquals(bin.get_name(), "mybin") + self.assertEquals(bin.__gstrefcount__, 1) + + # test get_state with no timeout + (ret, state, pending) = bin.get_state() + self.failIfEqual(ret, gst.STATE_CHANGE_FAILURE) + self.assertEquals(bin.__gstrefcount__, 1) + + # set to playing + bin.set_state(gst.STATE_PLAYING) + self.failUnless(bin._state_changed) + + # test get_state with no timeout + (ret, state, pending) = bin.get_state() + self.failIfEqual(ret, gst.STATE_CHANGE_FAILURE) + + if ret == gst.STATE_CHANGE_SUCCESS: + self.assertEquals(state, gst.STATE_PLAYING) + self.assertEquals(pending, gst.STATE_VOID_PENDING) + + # test get_state with a timeout + (ret, state, pending) = bin.get_state(1) + self.failIfEqual(ret, gst.STATE_CHANGE_FAILURE) + + if ret == gst.STATE_CHANGE_SUCCESS: + self.assertEquals(state, gst.STATE_PLAYING) + self.assertEquals(pending, gst.STATE_VOID_PENDING) + + (ret, state, pending) = bin.get_state(timeout=gst.SECOND) + + # back to NULL + bin.set_state(gst.STATE_NULL) + +class BinAddRemove(TestCase): + def setUp(self): + TestCase.setUp(self) + self.bin = gst.Bin('bin') + + def tearDown(self): + del self.bin + TestCase.tearDown(self) + + def testError(self): + gst.info("creating fakesrc") + src = gst.element_factory_make('fakesrc', 'name') + gst.info("creating fakesink") + sink = gst.element_factory_make('fakesink', 'name') + gst.info("adding src:%d to bin" % src.__gstrefcount__) + self.assertEqual(src.__gstrefcount__, 1) + self.bin.add(src) + self.assertEqual(src.__gstrefcount__, 2) + gst.info("added src:%d" % src.__gstrefcount__) + self.assertRaises(gst.AddError, self.bin.add, sink) + self.assertRaises(gst.AddError, self.bin.add, src) + self.assertRaises(gst.RemoveError, self.bin.remove, sink) + gst.info("removing src") + self.bin.remove(src) + gst.info("removed") + self.assertRaises(gst.RemoveError, self.bin.remove, src) + + def testMany(self): + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + self.bin.add(src, sink) + self.assertRaises(gst.AddError, self.bin.add, src, sink) + self.bin.remove(src, sink) + self.assertRaises(gst.RemoveError, self.bin.remove, src, sink) + +class Preroll(TestCase): + def setUp(self): + TestCase.setUp(self) + self.bin = gst.Bin('bin') + + def tearDown(self): + # FIXME: wait for state change thread to settle down + while self.bin.__gstrefcount__ > 1: + time.sleep(0.1) + self.assertEquals(self.bin.__gstrefcount__, 1) + del self.bin + TestCase.tearDown(self) + + def testFake(self): + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + self.bin.add(src) + + # bin will go to paused, src pad task will start and error out + self.bin.set_state(gst.STATE_PAUSED) + ret = self.bin.get_state() + self.assertEquals(ret[0], gst.STATE_CHANGE_SUCCESS) + self.assertEquals(ret[1], gst.STATE_PAUSED) + self.assertEquals(ret[2], gst.STATE_VOID_PENDING) + + # adding the sink will cause the bin to go in preroll mode + gst.debug('adding sink and setting to PAUSED, should cause preroll') + self.bin.add(sink) + sink.set_state(gst.STATE_PAUSED) + ret = self.bin.get_state(timeout=0) + self.assertEquals(ret[0], gst.STATE_CHANGE_ASYNC) + self.assertEquals(ret[1], gst.STATE_PAUSED) + self.assertEquals(ret[2], gst.STATE_PAUSED) + + # to actually complete preroll, we need to link and re-enable fakesrc + src.set_state(gst.STATE_READY) + src.link(sink) + src.set_state(gst.STATE_PAUSED) + ret = self.bin.get_state() + self.assertEquals(ret[0], gst.STATE_CHANGE_SUCCESS) + self.assertEquals(ret[1], gst.STATE_PAUSED) + self.assertEquals(ret[2], gst.STATE_VOID_PENDING) + + self.bin.set_state(gst.STATE_NULL) + self.bin.get_state() + +class ConstructorTest(TestCase): + def testGood(self): + bin = gst.Bin() + bin = gst.Bin(None) + bin = gst.Bin('') + bin = gst.Bin('myname') + + def testBad(self): + # these are now valid. pygobject will take care of converting + # the arguments to a string. + #self.assertRaises(TypeError, gst.Bin, 0) + #self.assertRaises(TypeError, gst.Bin, gst.Bin()) + pass + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_buffer.py b/testsuite/test_buffer.py new file mode 100644 index 0000000..b4a5fb2 --- /dev/null +++ b/testsuite/test_buffer.py @@ -0,0 +1,178 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +import gc +from common import gobject, gst, unittest, TestCase + +class BufferTest(TestCase): + def testBufferBuffer(self): + buf = gst.Buffer('test') + assert str(buffer(buf)) == 'test' + + def testBufferStr(self): + buffer = gst.Buffer('test') + assert str(buffer) == 'test' + + def testBufferAlloc(self): + bla = 'mooooooo' + buffer = gst.Buffer(bla + '12345') + gc.collect () + assert str(buffer) == 'mooooooo12345' + + def testBufferBadConstructor(self): + self.assertRaises(TypeError, gst.Buffer, 'test', 0) + + def testBufferStrNull(self): + test_string = 't\0e\0s\0t\0' + buffer = gst.Buffer(test_string) + assert str(buffer) == test_string + + def testBufferSize(self): + test_string = 'a little string' + buffer = gst.Buffer(test_string) + assert len(buffer) == len(test_string) + assert hasattr(buffer, 'size') + assert buffer.size == len(buffer) + + def testBufferCreateSub(self): + s = '' + for i in range(64): + s += '%02d' % i + + buffer = gst.Buffer(s) + self.assertEquals(len(buffer), 128) + + sub = buffer.create_sub(16, 16) + self.assertEquals(sub.size, 16) + self.assertEquals(sub.data, buffer.data[16:32]) + self.assertEquals(sub.offset, gst.CLOCK_TIME_NONE) + + def testBufferMerge(self): + buffer1 = gst.Buffer('foo') + buffer2 = gst.Buffer('bar') + + merged_buffer = buffer1.merge(buffer2) + assert str(merged_buffer) == 'foobar' + + def testBufferJoin(self): + buffer1 = gst.Buffer('foo') + buffer2 = gst.Buffer('bar') + + joined_buffer = buffer1.merge(buffer2) + assert str(joined_buffer) == 'foobar' + + def testBufferSpan(self): + buffer1 = gst.Buffer('foo') + buffer2 = gst.Buffer('bar') + + spaned_buffer = buffer1.span(0L, buffer2, 6L) + assert str(spaned_buffer) == 'foobar' + def testBufferCopyOnWrite(self): + s='test_vector' + buffer = gst.Buffer(s) + sub = buffer.create_sub(0, buffer.size) + self.assertEquals(sub.size, buffer.size) + out = sub.copy_on_write () + self.assertEquals(out.size, sub.size) + assert str(out) == str(buffer) + out[5] = 'w' + assert str(out) == 'test_wector' + + def testBufferFlagIsSet(self): + buffer = gst.Buffer() + # Off by default + assert not buffer.flag_is_set(gst.BUFFER_FLAG_READONLY) + + # Try switching on and off + buffer.flag_set(gst.BUFFER_FLAG_READONLY) + assert buffer.flag_is_set(gst.BUFFER_FLAG_READONLY) + buffer.flag_unset(gst.BUFFER_FLAG_READONLY) + assert not buffer.flag_is_set(gst.BUFFER_FLAG_READONLY) + + # Try switching on and off + buffer.flag_set(gst.BUFFER_FLAG_IN_CAPS) + assert buffer.flag_is_set(gst.BUFFER_FLAG_IN_CAPS) + buffer.flag_unset(gst.BUFFER_FLAG_IN_CAPS) + assert not buffer.flag_is_set(gst.BUFFER_FLAG_IN_CAPS) + + def testAttrFlags(self): + buffer = gst.Buffer() + assert hasattr(buffer, "flags") + assert isinstance(buffer.flags, int) + + def testAttrTimestamp(self): + buffer = gst.Buffer() + assert hasattr(buffer, "timestamp") + assert isinstance(buffer.timestamp, long) + + assert buffer.timestamp == gst.CLOCK_TIME_NONE + buffer.timestamp = 0 + assert buffer.timestamp == 0 + buffer.timestamp = 2**64 - 1 + assert buffer.timestamp == 2**64 - 1 + + def testAttrDuration(self): + buffer = gst.Buffer() + assert hasattr(buffer, "duration") + assert isinstance(buffer.duration, long) + + assert buffer.duration == gst.CLOCK_TIME_NONE + buffer.duration = 0 + assert buffer.duration == 0 + buffer.duration = 2**64 - 1 + assert buffer.duration == 2**64 - 1 + + def testAttrOffset(self): + buffer = gst.Buffer() + assert hasattr(buffer, "offset") + assert isinstance(buffer.offset, long) + + assert buffer.offset == gst.CLOCK_TIME_NONE + buffer.offset = 0 + assert buffer.offset == 0 + buffer.offset = 2**64 - 1 + assert buffer.offset == 2**64 - 1 + + def testAttrOffset_end(self): + buffer = gst.Buffer() + assert hasattr(buffer, "offset_end") + assert isinstance(buffer.offset_end, long) + + assert buffer.offset_end == gst.CLOCK_TIME_NONE + buffer.offset_end = 0 + assert buffer.offset_end == 0 + buffer.offset_end = 2**64 - 1 + assert buffer.offset_end == 2**64 - 1 + + def testBufferCaps(self): + buffer = gst.Buffer() + caps = gst.caps_from_string('foo/blah') + gst.info("before settings caps") + buffer.set_caps(caps) + gst.info("after settings caps") + c = buffer.get_caps() + gst.info("after getting caps") + self.assertEquals(caps, c) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_caps.py b/testsuite/test_caps.py new file mode 100644 index 0000000..dddc507 --- /dev/null +++ b/testsuite/test_caps.py @@ -0,0 +1,196 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +from common import gst, unittest, TestCase + +class CapsTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.caps = gst.caps_from_string('video/x-raw-yuv,width=10,framerate=5/1;video/x-raw-rgb,width=15,framerate=10/1') + self.assertEquals(self.caps.__refcount__, 1) + self.structure = self.caps[0] + self.any = gst.Caps("ANY") + self.assertEquals(self.any.__refcount__, 1) + self.empty = gst.Caps() + self.assertEquals(self.empty.__refcount__, 1) + + def testCapsMime(self): + mime = self.structure.get_name() + assert mime == 'video/x-raw-yuv' + + def testCapsList(self): + 'check if we can access Caps as a list' + structure = self.caps[0] + mime = structure.get_name() + assert mime == 'video/x-raw-yuv' + structure = self.caps[1] + mime = structure.get_name() + assert mime == 'video/x-raw-rgb' + + def testCapsContainingMiniObjects(self): + # buffer contains hex encoding of ascii 'abcd' + caps = gst.Caps("video/x-raw-yuv, buf=(buffer)61626364") + buf = caps[0]['buf'] + assert isinstance(buf, gst.Buffer) + assert buf.data == "abcd" + + buf = gst.Buffer("1234") + caps[0]['buf2'] = buf + buf2 = caps[0]['buf2'] + assert buf2 == buf + + def testCapsConstructEmpty(self): + caps = gst.Caps() + assert isinstance(caps, gst.Caps) + + def testCapsConstructFromString(self): + caps = gst.Caps('video/x-raw-yuv,width=10') + assert isinstance(caps, gst.Caps) + assert len(caps) == 1 + assert isinstance(caps[0], gst.Structure) + assert caps[0].get_name() == 'video/x-raw-yuv' + assert isinstance(caps[0]['width'], int) + assert caps[0]['width'] == 10 + + def testCapsConstructFromStructure(self): + struct = gst.structure_from_string('video/x-raw-yuv,width=10,framerate=[0/1, 25/3]') + caps = gst.Caps(struct) + assert isinstance(caps, gst.Caps) + assert len(caps) == 1 + assert isinstance(caps[0], gst.Structure) + assert caps[0].get_name() == 'video/x-raw-yuv' + assert isinstance(caps[0]['width'], int) + assert caps[0]['width'] == 10 + assert isinstance(caps[0]['framerate'], gst.FractionRange) + + def testCapsConstructFromStructures(self): + struct1 = gst.structure_from_string('video/x-raw-yuv,width=10') + struct2 = gst.structure_from_string('video/x-raw-rgb,height=20.0') + caps = gst.Caps(struct1, struct2) + assert isinstance(caps, gst.Caps) + assert len(caps) == 2 + struct = caps[0] + assert isinstance(struct, gst.Structure), struct + assert struct.get_name() == 'video/x-raw-yuv', struct.get_name() + assert struct.has_key('width') + assert isinstance(struct['width'], int) + assert struct['width'] == 10 + struct = caps[1] + assert isinstance(struct, gst.Structure), struct + assert struct.get_name() == 'video/x-raw-rgb', struct.get_name() + assert struct.has_key('height') + assert isinstance(struct['height'], float) + assert struct['height'] == 20.0 + + def testCapsReferenceStructs(self): + 'test that shows why it\'s not a good idea to use structures by reference' + caps = gst.Caps('hi/mom,width=0') + structure = caps[0] + del caps + assert structure['width'] == 0 + + + def testCapsStructureChange(self): + 'test if changing the structure of the caps works by reference' + assert self.structure['width'] == 10 + self.structure['width'] = 5 + assert self.structure['width'] == 5.0 + # check if we changed the caps as well + structure = self.caps[0] + assert structure['width'] == 5.0 + + def testCapsBadConstructor(self): + struct = gst.structure_from_string('video/x-raw-yuv,width=10') + self.assertRaises(TypeError, gst.Caps, None) + self.assertRaises(TypeError, gst.Caps, 1) + self.assertRaises(TypeError, gst.Caps, 2.0) + self.assertRaises(TypeError, gst.Caps, object) + self.assertRaises(TypeError, gst.Caps, 1, 2, 3) + + # This causes segfault! + #self.assertRaises(TypeError, gst.Caps, struct, 10, None) + + def testTrueFalse(self): + 'test that comparisons using caps work the intended way' + assert self.any # not empty even though it has no structures + assert not self.empty + assert not gst.Caps('EMPTY') # also empty + assert gst.Caps('your/mom') + + def testComparisons(self): + assert self.empty < self.any + assert self.empty < self.structure + assert self.empty < self.caps + assert self.caps < self.any + assert self.empty <= self.empty + assert self.caps <= self.caps + assert self.caps <= self.any + assert self.empty == "EMPTY" + assert self.caps != self.any + assert self.empty != self.any + assert self.any > self.empty + assert self.any >= self.empty + + def testFilters(self): + name = 'video/x-raw-yuv' + filtercaps = gst.Caps(*[struct for struct in self.caps if struct.get_name() == name]) + intersection = self.caps & 'video/x-raw-yuv' + assert filtercaps == intersection + + def doSubtract(self, set, subset): + '''mimic the test in GStreamer core's testsuite/caps/subtract.c''' + assert not set - set + assert not subset - subset + assert not subset - set + test = set - subset + assert test + test2 = test | subset + test = test2 - set + assert not test + #our own extensions foolow here + assert subset == set & subset + assert set == set | subset + assert set - subset == set ^ subset + + def testSubtract(self): + self.doSubtract( + gst.Caps ("some/mime, _int = [ 1, 2 ], list = { \"A\", \"B\", \"C\" }"), + gst.Caps ("some/mime, _int = 1, list = \"A\"")) + self.doSubtract( + gst.Caps ("some/mime, _double = (double) 1.0; other/mime, _int = { 1, 2 }"), + gst.Caps ("some/mime, _double = (double) 1.0")) + + def testNoneValue(self): + caps = gst.Caps("foo") + + def invalid_assignment(): + caps[0]["bar"] = None + self.assertRaises(TypeError, invalid_assignment) + + def invalid_set_value(): + caps[0].set_value("bar", None) + self.assertRaises(TypeError, invalid_set_value) + + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_element.py b/testsuite/test_element.py new file mode 100644 index 0000000..3c84e1a --- /dev/null +++ b/testsuite/test_element.py @@ -0,0 +1,268 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase, pygobject_2_13 + +import sys + +# since I can't subclass gst.Element for some reason, I use a bin here +# it don't matter to Jesus +class TestElement(gst.Bin): + def break_it_down(self): + self.debug('Hammer Time') + +class ElementTest(TestCase): + name = 'fakesink' + alias = 'sink' + + def testGoodConstructor(self): + element = gst.element_factory_make(self.name, self.alias) + assert element is not None, 'element is None' + assert isinstance(element, gst.Element) + assert element.get_name() == self.alias + +## FIXME : Make a new test for state changes, using bus signals + +## class FakeSinkTest(ElementTest): +## FAKESINK_STATE_ERROR_NONE = "0" +## FAKESINK_STATE_ERROR_NULL_READY, = "1" +## FAKESINK_STATE_ERROR_READY_PAUSED, = "2" +## FAKESINK_STATE_ERROR_PAUSED_PLAYING = "3" +## FAKESINK_STATE_ERROR_PLAYING_PAUSED = "4" +## FAKESINK_STATE_ERROR_PAUSED_READY = "5" +## FAKESINK_STATE_ERROR_READY_NULL = "6" + +## name = 'fakesink' +## alias = 'sink' +## def setUp(self): +## ElementTest.setUp(self) +## self.element = gst.element_factory_make('fakesink', 'sink') + +## def tearDown(self): +## self.element.set_state(gst.STATE_NULL) +## del self.element +## ElementTest.tearDown(self) + +## def checkError(self, old_state, state, name): +## assert self.element.get_state() == gst.STATE_NULL +## assert self.element.set_state(old_state) +## assert self.element.get_state() == old_state +## self.element.set_property('state-error', name) +## self.error = False +## def error_cb(element, source, gerror, debug): +## assert isinstance(element, gst.Element) +## assert element == self.element +## assert isinstance(source, gst.Element) +## assert source == self.element +## assert isinstance(gerror, gst.GError) +## self.error = True + +## self.element.connect('error', error_cb) +## self.element.set_state (state) +## assert self.error, 'error not set' +## #assert error_message.find('ERROR') != -1 + +## self.element.get_state() == old_state, 'state changed' + +## def testStateErrorNullReady(self): +## self.checkError(gst.STATE_NULL, gst.STATE_READY, +## self.FAKESINK_STATE_ERROR_NULL_READY) + +## def testStateErrorReadyPaused(self): +## self.checkError(gst.STATE_READY, gst.STATE_PAUSED, +## self.FAKESINK_STATE_ERROR_READY_PAUSED) + +## def testStateErrorPausedPlaying(self): +## self.checkError(gst.STATE_PAUSED, gst.STATE_PLAYING, +## self.FAKESINK_STATE_ERROR_PAUSED_PLAYING) + +## def testStateErrorPlayingPaused(self): +## self.checkError(gst.STATE_PLAYING, gst.STATE_PAUSED, +## self.FAKESINK_STATE_ERROR_PLAYING_PAUSED) + +## def testStateErrorPausedReady(self): +## self.checkError(gst.STATE_PAUSED, gst.STATE_READY, +## self.FAKESINK_STATE_ERROR_PAUSED_READY) + +## def testStateErrorReadyNull(self): +## self.checkError(gst.STATE_READY, gst.STATE_NULL, +## self.FAKESINK_STATE_ERROR_READY_NULL) + +## def checkStateChange(self, old, new): +## def state_change_cb(element, old_s, new_s): +## assert isinstance(element, gst.Element) +## assert element == self.element +## assert old_s == old +## assert new_s == new + +## assert self.element.set_state(old) +## assert self.element.get_state(0.0)[1] == old + +## # FIXME: replace with messages +## # self.element.connect('state-change', state_change_cb) + +## assert self.element.set_state(new) +## assert self.element.get_state(0.0)[1] == new + +## def testStateChangeNullReady(self): +## self.checkStateChange(gst.STATE_NULL, gst.STATE_READY) + +## def testStateChangeReadyPaused(self): +## self.checkStateChange(gst.STATE_READY, gst.STATE_PAUSED) + +## def testStateChangePausedPlaying(self): +## self.checkStateChange(gst.STATE_PAUSED, gst.STATE_PLAYING) + +## def testStateChangePlayingPaused(self): +## self.checkStateChange(gst.STATE_PLAYING, gst.STATE_PAUSED) + +## def testStateChangePausedReady(self): +## self.checkStateChange(gst.STATE_PAUSED, gst.STATE_READY) + +## def testStateChangeReadyNull(self): +## self.checkStateChange(gst.STATE_READY, gst.STATE_NULL) + +class NonExistentTest(ElementTest): + name = 'this-element-does-not-exist' + alias = 'no-alias' + + testGoodConstructor = lambda s: None + testGoodConstructor2 = lambda s: None + +class FileSrcTest(ElementTest): + name = 'filesrc' + alias = 'source' + +class FileSinkTest(ElementTest): + name = 'filesink' + alias = 'sink' + +class ElementName(TestCase): + def testElementStateGetName(self): + get_name = gst.element_state_get_name + for state in ('NULL', + 'READY', + 'PLAYING', + 'PAUSED'): + name = 'STATE_' + state + assert hasattr(gst, name) + attr = getattr(gst, name) + assert get_name(attr) == state + + assert get_name(gst.STATE_VOID_PENDING) == 'VOID_PENDING' + assert get_name(-1) == 'UNKNOWN!(-1)' + self.assertRaises(TypeError, get_name, '') + +class QueryTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.parse_launch('fakesrc name=source ! fakesink') + self.assertEquals(self.pipeline.__gstrefcount__, 1) + + self.element = self.pipeline.get_by_name('source') + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(self.element.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.element), pygobject_2_13 and 2 or 3) + + def tearDown(self): + del self.pipeline + del self.element + TestCase.tearDown(self) + + def testQuery(self): + gst.debug('querying fakesrc in FORMAT_BYTES') + res = self.element.query_position(gst.FORMAT_BYTES) + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + self.assertEquals(self.element.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.element), pygobject_2_13 and 2 or 3) + assert res + assert res[0] == 0 + self.assertRaises(gst.QueryError, self.element.query_position, + gst.FORMAT_TIME) + self.gccollect() + +class QueueTest(TestCase): + def testConstruct(self): + queue = gst.element_factory_make('queue') + assert queue.get_name() == 'queue0' + self.assertEquals(queue.__gstrefcount__, 1) + +class DebugTest(TestCase): + def testDebug(self): + e = gst.element_factory_make('fakesrc') + e.error('I am an error string') + e.warning('I am a warning string') + e.info('I am an info string') + e.debug('I am a debug string') + e.log('I am a log string') + e.debug('I am a formatted %s %s' % ('log', 'string')) + + def testElementDebug(self): + e = TestElement("testelement") + e.set_property("name", "testelement") + e.break_it_down() + +class LinkTest(TestCase): + def testLinkNoPads(self): + src = gst.Bin() + sink = gst.Bin() + self.assertRaises(gst.LinkError, src.link, sink) + + def testLink(self): + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + self.failUnless(src.link(sink)) + # FIXME: this unlink leaks, no idea why + # src.unlink(sink) + # print src.__gstrefcount__ + + def testLinkPads(self): + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + # print src.__gstrefcount__ + self.failUnless(src.link_pads("src", sink, "sink")) + src.unlink_pads("src", sink, "sink") + + def testLinkFiltered(self): + # a filtered link uses capsfilter and thus needs a bin + bin = gst.Bin() + src = gst.element_factory_make('fakesrc') + sink = gst.element_factory_make('fakesink') + bin.add(src, sink) + caps = gst.caps_from_string("audio/x-raw-int") + + self.failUnless(src.link(sink, caps)) + + # DANGER WILL. src is not actually connected to sink, since + # there's a capsfilter in the way. What a leaky abstraction. + # FIXME + # src.unlink(sink) + + # instead, mess with pads directly + pad = src.get_pad('src') + pad.unlink(pad.get_peer()) + pad = sink.get_pad('sink') + pad.get_peer().unlink(pad) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_event.py b/testsuite/test_event.py new file mode 100644 index 0000000..6a4860d --- /dev/null +++ b/testsuite/test_event.py @@ -0,0 +1,244 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os +import sys +import time +import tempfile + +from common import gst, unittest, testhelper, TestCase + +class EventTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.parse_launch('fakesrc ! fakesink name=sink') + self.sink = self.pipeline.get_by_name('sink') + self.pipeline.set_state(gst.STATE_PLAYING) + + def tearDown(self): + gst.debug('setting pipeline to NULL') + self.pipeline.set_state(gst.STATE_NULL) + gst.debug('set pipeline to NULL') + # FIXME: wait for state change thread to die + while self.pipeline.__gstrefcount__ > 1: + gst.debug('waiting for self.pipeline G rc to drop to 1') + time.sleep(0.1) + self.assertEquals(self.pipeline.__gstrefcount__, 1) + + del self.sink + del self.pipeline + TestCase.tearDown(self) + + def testEventSeek(self): + # this event only serves to change the rate of data transfer + event = gst.event_new_seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_FLUSH, + gst.SEEK_TYPE_NONE, 0, gst.SEEK_TYPE_NONE, 0) + # FIXME: but basesrc goes into an mmap/munmap spree, needs to be fixed + + event = gst.event_new_seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_FLUSH, + gst.SEEK_TYPE_SET, 0, gst.SEEK_TYPE_NONE, 0) + assert event + gst.debug('sending event') + self.sink.send_event(event) + gst.debug('sent event') + + self.assertEqual(event.parse_seek(), (1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_FLUSH, + gst.SEEK_TYPE_SET, 0, gst.SEEK_TYPE_NONE, 0)) + + def testWrongEvent(self): + buffer = gst.Buffer() + self.assertRaises(TypeError, self.sink.send_event, buffer) + number = 1 + self.assertRaises(TypeError, self.sink.send_event, number) + + +class EventFileSrcTest(TestCase): + + def setUp(self): + TestCase.setUp(self) + gst.info("start") + self.filename = tempfile.mktemp() + open(self.filename, 'w').write(''.join(map(str, range(10)))) + + self.pipeline = gst.parse_launch('filesrc name=source location=%s blocksize=1 ! fakesink signal-handoffs=1 name=sink' % self.filename) + self.source = self.pipeline.get_by_name('source') + self.sink = self.pipeline.get_by_name('sink') + self.sigid = self.sink.connect('handoff', self.handoff_cb) + self.bus = self.pipeline.get_bus() + + def tearDown(self): + self.pipeline.set_state(gst.STATE_NULL) + self.sink.disconnect(self.sigid) + if os.path.exists(self.filename): + os.remove(self.filename) + del self.bus + del self.pipeline + del self.source + del self.sink + del self.handoffs + TestCase.tearDown(self) + + def handoff_cb(self, element, buffer, pad): + self.handoffs.append(str(buffer)) + + def playAndIter(self): + self.handoffs = [] + self.pipeline.set_state(gst.STATE_PLAYING) + assert self.pipeline.set_state(gst.STATE_PLAYING) + while 42: + msg = self.bus.pop() + if msg and msg.type == gst.MESSAGE_EOS: + break + assert self.pipeline.set_state(gst.STATE_PAUSED) + handoffs = self.handoffs + self.handoffs = [] + return handoffs + + def sink_seek(self, offset, method=gst.SEEK_TYPE_SET): + self.sink.seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_FLUSH, + method, offset, + gst.SEEK_TYPE_NONE, 0) + + def testSimple(self): + handoffs = self.playAndIter() + assert handoffs == map(str, range(10)) + + def testSeekCur(self): + self.sink_seek(8) + self.playAndIter() + +class TestEmit(TestCase): + def testEmit(self): + object = testhelper.get_object() + object.connect('event', self._event_cb) + + # First emit from C + testhelper.emit_event(object) + + # Then emit from Python + object.emit('event', gst.event_new_eos()) + + def _event_cb(self, obj, event): + assert isinstance(event, gst.Event) + + +class TestDelayedEventProbe(TestCase): + # this test: + # starts a pipeline with only a source + # adds an event probe to catch the (first) new-segment + # adds a buffer probe to "autoplug" and send out this event + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.Pipeline() + self.src = gst.element_factory_make('fakesrc') + self.src.set_property('num-buffers', 10) + self.pipeline.add(self.src) + self.srcpad = self.src.get_pad('src') + + def tearDown(self): + gst.debug('setting pipeline to NULL') + self.pipeline.set_state(gst.STATE_NULL) + gst.debug('set pipeline to NULL') + # FIXME: wait for state change thread to die + while self.pipeline.__gstrefcount__ > 1: + gst.debug('waiting for self.pipeline G rc to drop to 1') + time.sleep(0.1) + self.assertEquals(self.pipeline.__gstrefcount__, 1) + + def testProbe(self): + self.srcpad.add_event_probe(self._event_probe_cb) + self._buffer_probe_id = self.srcpad.add_buffer_probe( + self._buffer_probe_cb) + + self._newsegment = None + self._eos = None + self._had_buffer = False + + self.pipeline.set_state(gst.STATE_PLAYING) + + while not self._eos: + time.sleep(0.1) + + # verify if our newsegment event is still around and valid + self.failUnless(self._newsegment) + self.assertEquals(self._newsegment.type, gst.EVENT_NEWSEGMENT) + self.assertEquals(self._newsegment.__grefcount__, 1) + + # verify if our eos event is still around and valid + self.failUnless(self._eos) + self.assertEquals(self._eos.type, gst.EVENT_EOS) + self.assertEquals(self._eos.__grefcount__, 1) + + def _event_probe_cb(self, pad, event): + if event.type == gst.EVENT_NEWSEGMENT: + self._newsegment = event + self.assertEquals(event.__grefcount__, 3) + # drop the event, we're storing it for later sending + return False + + if event.type == gst.EVENT_EOS: + self._eos = event + # we also want fakesink to get it + return True + + # sinks now send Latency events upstream + if event.type == gst.EVENT_LATENCY: + return True + + self.fail("Got an unknown event %r" % event) + + def _buffer_probe_cb(self, pad, buffer): + self.failUnless(self._newsegment) + + # fake autoplugging by now putting in a fakesink + sink = gst.element_factory_make('fakesink') + self.pipeline.add(sink) + self.src.link(sink) + sink.set_state(gst.STATE_PLAYING) + + pad = sink.get_pad('sink') + pad.send_event(self._newsegment) + + # we don't want to be called again + self.srcpad.remove_buffer_probe(self._buffer_probe_id) + + self._had_buffer = True + # now let the buffer through + return True + +class TestEventCreationParsing(TestCase): + + def testEventStep(self): + if hasattr(gst.Event, "parse_step"): + e = gst.event_new_step(gst.FORMAT_TIME, 42, 1.0, True, True) + + self.assertEquals(e.type, gst.EVENT_STEP) + + fmt, amount, rate, flush, intermediate = e.parse_step() + self.assertEquals(fmt, gst.FORMAT_TIME) + self.assertEquals(amount, 42) + self.assertEquals(rate, 1.0) + self.assertEquals(flush, True) + self.assertEquals(intermediate, True) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_ghostpad.py b/testsuite/test_ghostpad.py new file mode 100644 index 0000000..8a390df --- /dev/null +++ b/testsuite/test_ghostpad.py @@ -0,0 +1,194 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase, pygobject_2_13 + +import sys +import gc +import gobject + +class SrcBin(gst.Bin): + def prepare(self): + src = gst.element_factory_make('fakesrc') + self.add(src) + pad = src.get_pad("src") + ghostpad = gst.GhostPad("src", pad) + self.add_pad(ghostpad) +gobject.type_register(SrcBin) + +class SinkBin(gst.Bin): + def prepare(self): + sink = gst.element_factory_make('fakesink') + self.add(sink) + pad = sink.get_pad("sink") + ghostpad = gst.GhostPad("sink", pad) + self.add_pad(ghostpad) + self.sink = sink + + def connect_handoff(self, cb, *args, **kwargs): + self.sink.set_property('signal-handoffs', True) + self.sink.connect('handoff', cb, *args, **kwargs) + +gobject.type_register(SinkBin) + + +class PipeTest(TestCase): + def setUp(self): + gst.info("setUp") + TestCase.setUp(self) + self.pipeline = gst.Pipeline() + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + + self.src = SrcBin() + self.src.prepare() + self.sink = SinkBin() + self.sink.prepare() + self.assertEquals(self.src.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + gst.info("end of SetUp") + + def tearDown(self): + gst.info("tearDown") + self.assertTrue (self.pipeline.__gstrefcount__ >= 1 and self.pipeline.__gstrefcount__ <= 2) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.sink), 3) + gst.debug('deleting pipeline') + del self.pipeline + self.gccollect() + + self.assertEquals(self.src.__gstrefcount__, 1) # parent gone + self.assertEquals(self.sink.__gstrefcount__, 1) # parent gone + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + gst.debug('deleting src') + del self.src + self.gccollect() + gst.debug('deleting sink') + del self.sink + self.gccollect() + + TestCase.tearDown(self) + + def testBinState(self): + self.pipeline.add(self.src, self.sink) + self.src.link(self.sink) + self.sink.connect_handoff(self._sink_handoff_cb) + self._handoffs = 0 + + self.assertTrue(self.pipeline.set_state(gst.STATE_PLAYING) != gst.STATE_CHANGE_FAILURE) + while True: + (ret, cur, pen) = self.pipeline.get_state() + if ret == gst.STATE_CHANGE_SUCCESS and cur == gst.STATE_PLAYING: + break + + while self._handoffs < 10: + pass + + self.assertEquals(self.pipeline.set_state(gst.STATE_NULL), gst.STATE_CHANGE_SUCCESS) + while True: + (ret, cur, pen) = self.pipeline.get_state() + if ret == gst.STATE_CHANGE_SUCCESS and cur == gst.STATE_NULL: + break + +## def testProbedLink(self): +## self.pipeline.add(self.src) +## pad = self.src.get_pad("src") + +## self.sink.connect_handoff(self._sink_handoff_cb) +## self._handoffs = 0 + +## # FIXME: adding a probe to the ghost pad does not work atm +## # id = pad.add_buffer_probe(self._src_buffer_probe_cb) +## realpad = pad.get_target() +## self._probe_id = realpad.add_buffer_probe(self._src_buffer_probe_cb) + +## self._probed = False + +## while True: +## (ret, cur, pen) = self.pipeline.get_state() +## if ret == gst.STATE_CHANGE_SUCCESS and cur == gst.STATE_PLAYING: +## break + +## while not self._probed: +## pass + +## while self._handoffs < 10: +## pass + +## self.pipeline.set_state(gst.STATE_NULL) +## while True: +## (ret, cur, pen) = self.pipeline.get_state() +## if ret == gst.STATE_CHANGE_SUCCESS and cur == gst.STATE_NULL: +## break + + def _src_buffer_probe_cb(self, pad, buffer): + gst.debug("received probe on pad %r" % pad) + self._probed = True + gst.debug('adding sink bin') + self.pipeline.add(self.sink) + # this seems to get rid of the warnings about pushing on an unactivated + # pad + gst.debug('setting sink state') + + # FIXME: attempt one: sync to current pending state of bin + (res, cur, pen) = self.pipeline.get_state(timeout=0) + target = pen + if target == gst.STATE_VOID_PENDING: + target = cur + gst.debug("setting sink state to %r" % target) + # FIXME: the following print can cause a lock-up; why ? + # print target + # if we don't set async, it will possibly end up in PAUSED + self.sink.set_state(target) + + gst.debug('linking') + self.src.link(self.sink) + gst.debug('removing buffer probe id %r' % self._probe_id) + pad.remove_buffer_probe(self._probe_id) + self._probe_id = None + gst.debug('done') + + def _sink_handoff_cb(self, sink, buffer, pad): + gst.debug('received handoff on pad %r' % pad) + self._handoffs += 1 + +class TargetTest(TestCase): + def test_target(self): + src = gst.Pad("src", gst.PAD_SRC) + + ghost = gst.GhostPad("ghost_src", src) + self.failUnless(ghost.get_target() is src) + + ghost.set_target(None) + self.failUnless(ghost.get_target() is None) + + ghost.set_target(src) + self.failUnless(ghost.get_target() is src) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_gst.py b/testsuite/test_gst.py new file mode 100644 index 0000000..6ad50f4 --- /dev/null +++ b/testsuite/test_gst.py @@ -0,0 +1,36 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# Copyright (C) 2009 Thomas Vander Stichele +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, TestCase, unittest + +class TimeArgsTest(TestCase): + def testNoneTime(self): + self.assertRaises(TypeError, gst.TIME_ARGS, None) + + def testStringTime(self): + self.assertRaises(TypeError, gst.TIME_ARGS, "String") + + def testClockTimeNone(self): + self.assertEquals(gst.TIME_ARGS(gst.CLOCK_TIME_NONE), 'CLOCK_TIME_NONE') + + def testOneSecond(self): + self.assertEquals(gst.TIME_ARGS(gst.SECOND), '0:00:01.000000000') + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_interface.py b/testsuite/test_interface.py new file mode 100644 index 0000000..a89e0e8 --- /dev/null +++ b/testsuite/test_interface.py @@ -0,0 +1,92 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase + +import gobject + +def find_mixer_element(): + """ Searches for an element implementing the mixer interface """ + allmix = [x for x in gst.registry_get_default().get_feature_list(gst.ElementFactory) + if x.has_interface("GstMixer") and x.has_interface("GstPropertyProbe")] + if allmix == []: + return None + return allmix[0] + +class Availability(TestCase): + def testXOverlay(self): + assert hasattr(gst.interfaces, 'XOverlay') + assert issubclass(gst.interfaces.XOverlay, gobject.GInterface) + + def testMixer(self): + assert hasattr(gst.interfaces, 'Mixer') + assert issubclass(gst.interfaces.Mixer, gobject.GInterface) + +class FunctionCall(TestCase): + def FIXME_testXOverlay(self): + # obviously a testsuite is not allowed to instantiate this + # since it needs a running X or will fail. find some way to + # deal with that. + element = gst.element_factory_make('xvimagesink') + assert isinstance(element, gst.Element) + assert isinstance(element, gst.interfaces.XOverlay) + element.set_xwindow_id(0L) + +class MixerTest(TestCase): + def setUp(self): + TestCase.setUp(self) + amix = find_mixer_element() + if amix: + self.mixer = amix.create() + else: + self.mixer = None + + def tearDown(self): + del self.mixer + TestCase.tearDown(self) + + def testGetProperty(self): + if self.mixer == None: + return + self.failUnless(self.mixer.probe_get_property('device')) + self.assertRaises(ValueError, + self.mixer.probe_get_property, 'non-existent') + + def testGetProperties(self): + if self.mixer == None: + return + properties = self.mixer.probe_get_properties() + self.failUnless(properties) + self.assertEqual(type(properties), list) + prop = properties[0] + self.assertEqual(prop.name, 'device') + self.assertEqual(prop.value_type, gobject.TYPE_STRING) + + def testGetValuesName(self): + if self.mixer == None: + return + values = self.mixer.probe_get_values_name('device') + self.assertEqual(type(values), list) + + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_message.py b/testsuite/test_message.py new file mode 100644 index 0000000..5d34b5e --- /dev/null +++ b/testsuite/test_message.py @@ -0,0 +1,202 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2005 Thomas Vander Stichele +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +from common import gobject, gst, unittest, TestCase +import gc + +class NewTest(TestCase): + def testEOS(self): + gst.info("creating new bin") + b = gst.Bin() + gst.info("creating new EOS message from that bin") + m = gst.message_new_eos(b) + gst.info("got message : %s" % m) + + def message_application_cb(self, bus, message): + gst.info("got application message") + self.got_message = True + self.loop.quit() + + def testApplication(self): + self.loop = gobject.MainLoop() + gst.info("creating new pipeline") + bin = gst.Pipeline() + bus = bin.get_bus() + bus.add_signal_watch() + self.got_message = False + bus.connect('message::application', self.message_application_cb) + + struc = gst.Structure("foo") + msg = gst.message_new_application(bin, struc) + # the bus is flushing in NULL, so we need to set the pipeline to READY + bin.set_state(gst.STATE_READY) + bus.post(msg) + self.loop.run() + bus.remove_signal_watch() + bin.set_state(gst.STATE_NULL) + self.failUnless(self.got_message == True) + self.gccollect() + +class TestCreateMessages(TestCase): + + def setUp(self): + TestCase.setUp(self) + self.element = gst.Bin() + + def tearDown(self): + del self.element + + def testCustomMessage(self): + # create two custom messages using the same structure + s = gst.Structure("something") + assert s != None + e1 = gst.message_new_custom(gst.MESSAGE_APPLICATION, self.element, s) + assert e1 + e2 = gst.message_new_custom(gst.MESSAGE_APPLICATION, self.element, s) + assert e2 + + # make sure the two structures are equal + self.assertEquals(e1.structure.to_string(), + e2.structure.to_string()) + + def testTagMessage(self): + # Create a taglist + t = gst.TagList() + t['something'] = "else" + t['another'] = 42 + + # Create two messages using that same taglist + m1 = gst.message_new_tag(self.element, t) + assert m1 + m2 = gst.message_new_tag(self.element, t) + assert m2 + + # make sure the two messages have the same taglist + t1 = m1.parse_tag() + assert t1 + keys = t1.keys() + keys.sort() + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t1['something'], "else") + self.assertEquals(t1['another'], 42) + t2 = m2.parse_tag() + assert t2 + keys = t2.keys() + keys.sort() + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t2['something'], "else") + self.assertEquals(t2['another'], 42) + + def testTagFullMessage(self): + if hasattr(gst.Message, 'parse_tag_full'): + p = gst.Pad("blahblah", gst.PAD_SRC) + # Create a taglist + t = gst.TagList() + t['something'] = "else" + t['another'] = 42 + + # Create two messages using that same taglist + m1 = gst.message_new_tag_full(self.element, p, t) + assert m1 + m2 = gst.message_new_tag_full(self.element, p, t) + assert m2 + + # make sure the two messages have the same taglist + p1, t1 = m1.parse_tag_full() + assert t1 + keys = t1.keys() + keys.sort() + self.assertEquals(p1, p) + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t1['something'], "else") + self.assertEquals(t1['another'], 42) + p2, t2 = m2.parse_tag_full() + assert t2 + keys = t2.keys() + keys.sort() + self.assertEquals(p2, p) + self.assertEquals(keys, ['another', 'something']) + self.assertEquals(t2['something'], "else") + self.assertEquals(t2['another'], 42) + + def testStepStartMessage(self): + if hasattr(gst, 'message_new_step_start'): + m = gst.message_new_step_start(self.element, True, + gst.FORMAT_TIME, 42, 1.0, + True, True) + self.assertEquals(m.type, gst.MESSAGE_STEP_START) + active, format, amount, rate, flush, intermediate = m.parse_step_start() + self.assertEquals(active, True) + self.assertEquals(format, gst.FORMAT_TIME) + self.assertEquals(amount, 42) + self.assertEquals(rate, 1.0) + self.assertEquals(flush, True) + self.assertEquals(intermediate, True) + + def testStepDoneMessage(self): + if hasattr(gst, 'message_new_step_done'): + m = gst.message_new_step_done(self.element, gst.FORMAT_TIME, 42, + 1.0, True, True, 54, True) + self.assertEquals(m.type, gst.MESSAGE_STEP_DONE) + + fmt, am, rat, flu, inter, dur, eos = m.parse_step_done() + self.assertEquals(fmt, gst.FORMAT_TIME) + self.assertEquals(am, 42) + self.assertEquals(rat, 1.0) + self.assertEquals(flu, True) + self.assertEquals(inter, True) + self.assertEquals(dur, 54) + self.assertEquals(eos, True) + + def testStructureChangeMessage(self): + if hasattr(gst, 'message_new_structure_change'): + p = gst.Pad("blah", gst.PAD_SINK) + m = gst.message_new_structure_change(p, + gst.STRUCTURE_CHANGE_TYPE_PAD_LINK, + self.element, True) + + self.assertEquals(m.type, gst.MESSAGE_STRUCTURE_CHANGE) + sct, owner, busy = m.parse_structure_change() + self.assertEquals(sct, gst.STRUCTURE_CHANGE_TYPE_PAD_LINK) + self.assertEquals(owner, self.element) + self.assertEquals(busy, True) + + def testRequestStateMessage(self): + if hasattr(gst, 'message_new_request_state'): + m = gst.message_new_request_state(self.element, gst.STATE_NULL) + self.assertEquals(m.type, gst.MESSAGE_REQUEST_STATE) + self.assertEquals(m.parse_request_state(), gst.STATE_NULL) + + def testBufferingStatsMessage(self): + if hasattr(gst.Message, 'set_buffering_stats'): + gst.debug("Creating buffering message") + m = gst.message_new_buffering(self.element, 50) + gst.debug("Setting stats") + m.set_buffering_stats(gst.BUFFERING_LIVE, 30, 1024, 123456) + self.assertEquals(m.type, gst.MESSAGE_BUFFERING) + mode, ain, aout, left = m.parse_buffering_stats() + self.assertEquals(mode, gst.BUFFERING_LIVE) + self.assertEquals(ain, 30) + self.assertEquals(aout, 1024) + self.assertEquals(left, 123456) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_pad.py b/testsuite/test_pad.py new file mode 100644 index 0000000..f82f47f --- /dev/null +++ b/testsuite/test_pad.py @@ -0,0 +1,568 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase, pygobject_2_13 + +import sys +import time + +class PadTemplateTest(TestCase): + def testConstructor(self): + template = gst.PadTemplate("template", gst.PAD_SINK, + gst.PAD_ALWAYS, gst.caps_from_string("audio/x-raw-int")) + self.failUnless(template) + self.assertEquals(sys.getrefcount(template), pygobject_2_13 and 2 or 3) + #self.assertEquals(template.__gstrefcount__, 1) + +class PadPushUnlinkedTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.src = gst.Pad("src", gst.PAD_SRC) + self.sink = gst.Pad("sink", gst.PAD_SINK) + + def tearDown(self): + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 1) + del self.src + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + del self.sink + TestCase.tearDown(self) + + def testNoProbe(self): + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_NOT_LINKED) + # pushing it takes a ref in the python wrapper to keep buffer + # alive afterwards; but the core unrefs the ref it receives + self.assertEquals(self.buffer.__grefcount__, 1) + + def testFalseProbe(self): + id = self.src.add_buffer_probe(self._probe_handler, False) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + self.assertEquals(self.buffer.__grefcount__, 1) + self.src.remove_buffer_probe(id) + + def testTrueProbe(self): + id = self.src.add_buffer_probe(self._probe_handler, True) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_NOT_LINKED) + self.assertEquals(self.buffer.__grefcount__, 1) + self.src.remove_buffer_probe(id) + + def _probe_handler(self, pad, buffer, ret): + return ret + +class PadPushLinkedTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.src = gst.Pad("src", gst.PAD_SRC) + self.sink = gst.Pad("sink", gst.PAD_SINK) + caps = gst.caps_from_string("foo/bar") + self.src.set_caps(caps) + self.sink.set_caps(caps) + self.sink.set_chain_function(self._chain_func) + self.src.set_active(True) + self.sink.set_active(True) + self.src.link(self.sink) + self.buffers = [] + + def tearDown(self): + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 1) + self.src.set_caps(None) + del self.src + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + self.sink.set_caps(None) + del self.sink + TestCase.tearDown(self) + + def _chain_func(self, pad, buffer): + gst.debug('got buffer %r, id %x, with GMO rc %d'% ( + buffer, id(buffer), buffer.__grefcount__)) + self.buffers.append(buffer) + + return gst.FLOW_OK + + def testNoProbe(self): + self.buffer = gst.Buffer() + gst.debug('created new buffer %r, id %x' % ( + self.buffer, id(self.buffer))) + self.assertEquals(self.buffer.__grefcount__, 1) + gst.debug('pushing buffer on linked pad, no probe') + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + gst.debug('pushed buffer on linked pad, no probe') + # one refcount is held by our scope, another is held on + # self.buffers through _chain_func + self.assertEquals(self.buffer.__grefcount__, 2) + self.assertEquals(len(self.buffers), 1) + self.buffers = None + self.assertEquals(self.buffer.__grefcount__, 1) + + def testFalseProbe(self): + id = self.src.add_buffer_probe(self._probe_handler, False) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + self.assertEquals(self.buffer.__grefcount__, 1) + self.src.remove_buffer_probe(id) + self.assertEquals(len(self.buffers), 0) + + def testTrueProbe(self): + probe_id = self.src.add_buffer_probe(self._probe_handler, True) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + # one refcount is held by our scope, another is held on + # self.buffers through _chain_func + self.assertEquals(self.buffer.__grefcount__, 2) + + # they are not the same Python object ... + self.failIf(self.buffer is self.buffers[0]) + self.failIf(id(self.buffer) == id(self.buffers[0])) + # ... but they wrap the same GstBuffer + self.failUnless(self.buffer == self.buffers[0]) + self.assertEquals(repr(self.buffer), repr(self.buffers[0])) + + self.src.remove_buffer_probe(probe_id) + self.assertEquals(len(self.buffers), 1) + self.buffers = None + self.assertEquals(self.buffer.__grefcount__, 1) + + def _probe_handler(self, pad, buffer, ret): + return ret + +# test for event probes with linked pads +class PadPushEventLinkedTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.src = gst.Pad("src", gst.PAD_SRC) + self.sink = gst.Pad("sink", gst.PAD_SINK) + caps = gst.caps_from_string("foo/bar") + self.src.set_caps(caps) + self.sink.set_caps(caps) + self.sink.set_chain_function(self._chain_func) + self.src.set_active(True) + self.sink.set_active(True) + self.src.link(self.sink) + self.events = [] + + def tearDown(self): + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 1) + self.src.set_caps(None) + del self.src + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + self.sink.set_caps(None) + del self.sink + TestCase.tearDown(self) + + def _chain_func(self, pad, buffer): + gst.debug('got buffer %r, id %x, with GMO rc %d'% ( + buffer, id(buffer), buffer.__grefcount__)) + self.buffers.append(buffer) + + return gst.FLOW_OK + + def testNoProbe(self): + self.event = gst.event_new_eos() + gst.debug('created new eos %r, id %x' % ( + self.event, id(self.event))) + self.assertEquals(self.event.__grefcount__, 1) + gst.debug('pushing event on linked pad, no probe') + self.assertEquals(self.src.push_event(self.event), True) + gst.debug('pushed event on linked pad, no probe') + # one refcount is held by our scope + self.assertEquals(self.event.__grefcount__, 1) + # the event has reffed the src pad as the src of the event + self.assertEquals(self.src.__grefcount__, 2) + # clear it + self.event = None + self.assertEquals(self.src.__grefcount__, 1) + + def testFalseProbe(self): + probe_id = self.src.add_event_probe(self._probe_handler, False) + self.event = gst.event_new_eos() + gst.debug('created new eos %r, id %x' % ( + self.event, id(self.event))) + self.assertEquals(self.event.__grefcount__, 1) + # a false probe return drops the event and returns False + self.assertEquals(self.src.push_event(self.event), False) + # one ref in our local scope, another in self.events + self.assertEquals(self.event.__grefcount__, 2) + self.assertEquals(self.sink.__grefcount__, 1) + # the event has reffed the src pad as the src of the event + self.assertEquals(self.src.__grefcount__, 2) + # remove the event from existence + self.event = None + self.events = None + self.assertEquals(self.src.__grefcount__, 1) + self.src.remove_buffer_probe(probe_id) + + def testTrueProbe(self): + probe_id = self.src.add_event_probe(self._probe_handler, True) + self.event = gst.event_new_eos() + gst.debug('created new eos %r, id %x' % ( + self.event, id(self.event))) + self.assertEquals(self.event.__grefcount__, 1) + # a True probe lets it pass + self.assertEquals(self.src.push_event(self.event), True) + + # one refcount is held by our scope, another is held on + # self.events through _probe + self.assertEquals(self.event.__grefcount__, 2) + + # they are not the same Python object ... + self.failIf(self.event is self.events[0]) + self.failIf(id(self.event) == id(self.events[0])) + # ... but they wrap the same GstEvent + self.assertEquals(repr(self.event), repr(self.events[0])) + self.failUnless(self.event == self.events[0]) + + self.src.remove_buffer_probe(probe_id) + self.assertEquals(len(self.events), 1) + self.events = None + self.assertEquals(self.event.__grefcount__, 1) + + # the event has reffed the src pad as the src of the event + self.assertEquals(self.src.__grefcount__, 2) + # clear it + self.event = None + self.assertEquals(self.src.__grefcount__, 1) + + def _probe_handler(self, pad, event, ret): + gst.debug("probed, pad %r, event %r" % (pad, event)) + self.events.append(event) + return ret + +# a test to show that we can link a pad from the probe handler + +class PadPushProbeLinkTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.src = gst.Pad("src", gst.PAD_SRC) + self.sink = gst.Pad("sink", gst.PAD_SINK) + caps = gst.caps_from_string("foo/bar") + self.src.set_caps(caps) + self.sink.set_caps(caps) + self.src.set_active(True) + self.sink.set_active(True) + self.sink.set_chain_function(self._chain_func) + self.buffers = [] + + def tearDown(self): + self.assertEquals(sys.getrefcount(self.src), pygobject_2_13 and 2 or 3) + self.assertEquals(self.src.__gstrefcount__, 1) + self.src.set_caps(None) + del self.src + self.assertEquals(sys.getrefcount(self.sink), pygobject_2_13 and 2 or 3) + self.assertEquals(self.sink.__gstrefcount__, 1) + self.sink.set_caps(None) + del self.sink + TestCase.tearDown(self) + + def _chain_func(self, pad, buffer): + self.buffers.append(buffer) + + return gst.FLOW_OK + + def testProbeLink(self): + id = self.src.add_buffer_probe(self._probe_handler) + self.buffer = gst.Buffer() + self.assertEquals(self.buffer.__grefcount__, 1) + gst.debug('pushing buffer on linked pad, no probe') + self.assertEquals(self.src.push(self.buffer), gst.FLOW_OK) + gst.debug('pushed buffer on linked pad, no probe') + # one refcount is held by our scope, another is held on + # self.buffers through _chain_func + self.assertEquals(self.buffer.__grefcount__, 2) + self.assertEquals(len(self.buffers), 1) + self.buffers = None + self.assertEquals(self.buffer.__grefcount__, 1) + + + def _probe_handler(self, pad, buffer): + self.src.link(self.sink) + return True + + +class PadTest(TestCase): + def testConstructor(self): + # first style uses gst_pad_new + gst.debug('creating pad with name src') + pad = gst.Pad("src", gst.PAD_SRC) + self.failUnless(pad) + self.assertEquals(sys.getrefcount(pad), pygobject_2_13 and 2 or 3) + self.assertEquals(pad.__gstrefcount__, 1) + + gst.debug('creating pad with no name') + self.failUnless(gst.Pad(None, gst.PAD_SRC)) + self.failUnless(gst.Pad(name=None, direction=gst.PAD_SRC)) + self.failUnless(gst.Pad(direction=gst.PAD_SRC, name=None)) + self.failUnless(gst.Pad(direction=gst.PAD_SRC, name="src")) + + # second uses gst_pad_new_from_template + #template = gst.PadTemplate() + +class PadPipelineTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.parse_launch('fakesrc name=source ! fakesink') + src = self.pipeline.get_by_name('source') + self.srcpad = src.get_pad('src') + + def tearDown(self): + del self.pipeline + del self.srcpad + TestCase.tearDown(self) + +# FIXME: now that GstQuery is a miniobject with various _new_ factory +# functions, we need to figure out a way to deal with them in python +# def testQuery(self): +# assert self.sink.query(gst.QUERY_TOTAL, gst.FORMAT_BYTES) == -1 +# assert self.srcpad.query(gst.QUERY_POSITION, gst.FORMAT_BYTES) == 0 +# assert self.srcpad.query(gst.QUERY_POSITION, gst.FORMAT_TIME) == 0 + + +class PadProbePipeTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.Pipeline() + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + + self.fakesrc = gst.element_factory_make('fakesrc') + self.fakesink = gst.element_factory_make('fakesink') + self.assertEquals(self.fakesrc.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + + self.pipeline.add(self.fakesrc, self.fakesink) + self.assertEquals(self.fakesrc.__gstrefcount__, 2) # added + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + self.assertEquals(self.fakesink.__gstrefcount__, 2) # added + self.assertEquals(sys.getrefcount(self.fakesink), pygobject_2_13 and 2 or 3) + + self.fakesrc.link(self.fakesink) + + self.assertEquals(self.pipeline.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + self.assertEquals(self.fakesrc.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + self.assertEquals(self.fakesink.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.fakesink), pygobject_2_13 and 2 or 3) + + def tearDown(self): + # Refcount must be either 1 or 2, to allow for a possibly still running + # state-recalculation thread + self.assertTrue (self.pipeline.__gstrefcount__ >= 1 and self.pipeline.__gstrefcount__ <= 2) + + self.assertEquals(sys.getrefcount(self.pipeline), pygobject_2_13 and 2 or 3) + self.assertEquals(self.fakesrc.__gstrefcount__, 2) + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + gst.debug('deleting pipeline') + del self.pipeline + self.gccollect() + + self.assertEquals(self.fakesrc.__gstrefcount__, 1) # parent gone + self.assertEquals(self.fakesink.__gstrefcount__, 1) # parent gone + self.assertEquals(sys.getrefcount(self.fakesrc), pygobject_2_13 and 2 or 3) + self.assertEquals(sys.getrefcount(self.fakesink), pygobject_2_13 and 2 or 3) + gst.debug('deleting fakesrc') + del self.fakesrc + self.gccollect() + gst.debug('deleting fakesink') + del self.fakesink + self.gccollect() + + TestCase.tearDown(self) + + def testFakeSrcProbeOnceKeep(self): + self.fakesrc.set_property('num-buffers', 1) + + self.fakesink.set_property('signal-handoffs', True) + self.fakesink.connect('handoff', self._handoff_callback_fakesink) + + pad = self.fakesrc.get_pad('src') + id = pad.add_buffer_probe(self._probe_callback_fakesrc) + self._got_fakesrc_buffer = 0 + self._got_fakesink_buffer = 0 + self.pipeline.set_state(gst.STATE_PLAYING) + while not self._got_fakesrc_buffer: + gst.debug('waiting for fakesrc buffer') + pass + while not self._got_fakesink_buffer: + gst.debug('waiting for fakesink buffer') + pass + + gst.debug('got buffers from fakesrc and fakesink') + self.assertEquals(self._got_fakesink_buffer, 1) + pad.remove_buffer_probe(id) + + self.pipeline.set_state(gst.STATE_NULL) + + def testFakeSrcProbeMany(self): + self.fakesrc.set_property('num-buffers', 1000) + + pad = self.fakesrc.get_pad('src') + id = pad.add_buffer_probe(self._probe_callback_fakesrc) + self._got_fakesrc_buffer = 0 + self.pipeline.set_state(gst.STATE_PLAYING) + while not self._got_fakesrc_buffer == 1000: + import time + # allow for context switching; a busy loop here locks up the + # streaming thread too much + time.sleep(.0001) + pad.remove_buffer_probe(id) + + self.pipeline.set_state(gst.STATE_NULL) + + def _probe_callback_fakesrc(self, pad, buffer): + self.failUnless(isinstance(pad, gst.Pad)) + self.failUnless(isinstance(buffer, gst.Buffer)) + self._got_fakesrc_buffer += 1 + gst.debug('fakesrc sent buffer %r, %d total sent' % ( + buffer, self._got_fakesrc_buffer)) + return True + + def _handoff_callback_fakesink(self, sink, buffer, pad): + self.failUnless(isinstance(buffer, gst.Buffer)) + self.failUnless(isinstance(pad, gst.Pad)) + self._got_fakesink_buffer += 1 + gst.debug('fakesink got buffer %r, %d total received' % ( + buffer, self._got_fakesrc_buffer)) + gst.debug('pad %r, py refcount %d, go rc %d, gst rc %d' % ( + pad, sys.getrefcount(pad), pad.__grefcount__, pad.__gstrefcount__)) + return True + + def testRemovingProbe(self): + self.fakesrc.set_property('num-buffers', 10) + + handle = None + self._num_times_called = 0 + def buffer_probe(pad, buffer, data): + self._num_times_called += 1 + pad.remove_buffer_probe(handle) + return True + + pad = self.fakesrc.get_pad('src') + data = [] + handle = pad.add_buffer_probe(buffer_probe, data) + self.pipeline.set_state(gst.STATE_PLAYING) + m = self.pipeline.get_bus().poll(gst.MESSAGE_EOS, -1) + assert m + assert self._num_times_called == 1 + self.pipeline.set_state(gst.STATE_NULL) + assert sys.getrefcount(buffer_probe) == 2 + assert sys.getrefcount(data) == 2 + # FIXME: having m going out of scope doesn't seem to be enough + # to get it gc collected, and it keeps a ref to the pipeline. + # Look for a way to not have to do this explicitly + del m + self.gccollect() + +class PadRefCountTest(TestCase): + def testAddPad(self): + # add a pad to an element + e = gst.element_factory_make('fakesrc') + self.assertEquals(sys.getrefcount(e), pygobject_2_13 and 2 or 3) + self.assertEquals(e.__gstrefcount__, 1) + + gst.debug('creating pad with name mypad') + pad = gst.Pad("mypad", gst.PAD_SRC) + self.failUnless(pad) + self.assertEquals(sys.getrefcount(pad), pygobject_2_13 and 2 or 3) + self.assertEquals(pad.__gstrefcount__, 1) + + gst.debug('adding pad to element') + e.add_pad(pad) + self.assertEquals(sys.getrefcount(e), pygobject_2_13 and 2 or 3) + self.assertEquals(e.__gstrefcount__, 1) + self.assertEquals(sys.getrefcount(pad), pygobject_2_13 and 2 or 3) + self.assertEquals(pad.__gstrefcount__, 2) # added to element + + gst.debug('deleting element and collecting') + self.gccollect() + del e + if not pygobject_2_13: + # the element will be collected at 'del e' if we're using + # pygobject >= 2.13.0 + self.assertEquals(self.gccollect(), 1) # collected the element + self.assertEquals(sys.getrefcount(pad), pygobject_2_13 and 2 or 3) + self.assertEquals(pad.__gstrefcount__, 1) # removed from element + + gst.debug('deleting pad and collecting') + del pad + if not pygobject_2_13: + # the pad will be collected at 'del pad' if we're using + # pygobject >= 2.13.0 + self.assertEquals(self.gccollect(), 1) # collected the pad + gst.debug('going into teardown') + +class PadBlockTest(TestCase): + def testCallbackFlush(self): + # check that the same block callback can be called more than once (weird + # test but it was broken) + + def blocked_cb(pad, blocked): + pad.push_event(gst.event_new_flush_start()) + + pad = gst.Pad('src', gst.PAD_SRC) + pad.set_active(True) + pad.set_blocked_async(True, blocked_cb) + + for i in xrange(10): + buf = gst.Buffer('ciao') + pad.push(buf) + pad.push_event(gst.event_new_flush_stop()) + + def testCallbackRefcount(self): + def blocked_cb(pad, blocked): + pad.set_blocked_async(False, unblocked_cb) + + def unblocked_cb(pad, blocked): + pass + + cb_refcount = sys.getrefcount(blocked_cb) + # sys.getrefcount() returns refcount + 1 + self.assertEquals(cb_refcount, 2) + + pad = gst.Pad('src', gst.PAD_SRC) + pad.set_active(True) + pad.set_blocked_async(True, blocked_cb) + # set_blocked_async refs the callback + self.assertEquals(sys.getrefcount(blocked_cb), 3) + + buf = gst.Buffer('ciao') + pad.push(buf) + + # in blocked_cb() we called set_blocked_async() with a different + # callback, so blocked_cb() should have been unreffed + cb_refcount_after = sys.getrefcount(blocked_cb) + self.assertEquals(sys.getrefcount(blocked_cb), cb_refcount) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_pbutils.py b/testsuite/test_pbutils.py new file mode 100644 index 0000000..94325e3 --- /dev/null +++ b/testsuite/test_pbutils.py @@ -0,0 +1,63 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2008 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gobject, gst, unittest, TestCase + +class Descriptions(TestCase): + + def testSourceDescription(self): + assert hasattr(gst.pbutils, 'get_source_description') + self.assertEquals(gst.pbutils.get_source_description("file"), + "FILE protocol source") + + def testSinkDescription(self): + assert hasattr(gst.pbutils, 'get_sink_description') + self.assertEquals(gst.pbutils.get_sink_description("file"), + "FILE protocol sink") + + def testDecoderDescription(self): + assert hasattr(gst.pbutils, 'get_decoder_description') + self.assertEquals(gst.pbutils.get_decoder_description(gst.caps_from_string("audio/mpeg,mpegversion=1,layer=3")), + 'MPEG-1 Layer 3 (MP3) decoder') + + def testCodecDescription(self): + assert hasattr(gst.pbutils, 'get_codec_description') + self.assertEquals(gst.pbutils.get_codec_description(gst.caps_from_string("audio/mpeg,mpegversion=1,layer=3")), + 'MPEG-1 Layer 3 (MP3)') + + def testEncoderDescription(self): + assert hasattr(gst.pbutils, 'get_encoder_description') + self.assertEquals(gst.pbutils.get_encoder_description(gst.caps_from_string("audio/mpeg,mpegversion=1,layer=3")), + 'MPEG-1 Layer 3 (MP3) encoder') + + def testElementDescription(self): + assert hasattr(gst.pbutils, 'get_element_description') + self.assertEquals(gst.pbutils.get_element_description("something"), + "GStreamer element something") + + def testAddCodecDescription(self): + assert hasattr(gst.pbutils, 'add_codec_description_to_tag_list') + +# TODO +# Add tests for the other parts of pbutils: +# * missing-plugins +# * install-plugins (and detect if there weren't compiled because of a version +# of plugins-base too low) + diff --git a/testsuite/test_pipeline.py b/testsuite/test_pipeline.py new file mode 100644 index 0000000..a57c7f9 --- /dev/null +++ b/testsuite/test_pipeline.py @@ -0,0 +1,250 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import time + +from common import gst, unittest, TestCase, pygobject_2_13 + +import gobject + +class TestConstruction(TestCase): + def setUp(self): + self.gctrack() + + def tearDown(self): + self.gccollect() + self.gcverify() + + def testGoodConstructor(self): + name = 'test-pipeline' + pipeline = gst.Pipeline(name) + self.assertEquals(pipeline.__gstrefcount__, 1) + assert pipeline is not None, 'pipeline is None' + self.failUnless(isinstance(pipeline, gst.Pipeline), + 'pipeline is not a GstPipline') + assert pipeline.get_name() == name, 'pipelines name is wrong' + self.assertEquals(pipeline.__gstrefcount__, 1) + + def testParseLaunch(self): + pipeline = gst.parse_launch('fakesrc ! fakesink') + +class Pipeline(TestCase): + def setUp(self): + self.gctrack() + self.pipeline = gst.Pipeline('test-pipeline') + source = gst.element_factory_make('fakesrc', 'source') + source.set_property('num-buffers', 5) + sink = gst.element_factory_make('fakesink', 'sink') + self.pipeline.add(source, sink) + gst.element_link_many(source, sink) + + def tearDown(self): + del self.pipeline + self.gccollect() + self.gcverify() + + def testRun(self): + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_NULL) + self.pipeline.set_state(gst.STATE_PLAYING) + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_PLAYING) + + time.sleep(1) + + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_PLAYING) + self.pipeline.set_state(gst.STATE_NULL) + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_NULL) + +class PipelineTags(TestCase): + def setUp(self): + self.gctrack() + self.pipeline = gst.parse_launch('audiotestsrc num-buffers=100 ! vorbisenc name=encoder ! oggmux name=muxer ! fakesink') + + def tearDown(self): + del self.pipeline + self.gccollect() + self.gcverify() + + def testRun(self): + # in 0.10.15.1, this triggers + # sys:1: gobject.Warning: g_value_get_uint: assertion `G_VALUE_HOLDS_UINT (value)' failed + # during pipeline playing + + l = gst.TagList() + l[gst.TAG_ARTIST] = 'artist' + l[gst.TAG_TRACK_NUMBER] = 1 + encoder = self.pipeline.get_by_name('encoder') + encoder.merge_tags(l, gst.TAG_MERGE_APPEND) + + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_NULL) + self.pipeline.set_state(gst.STATE_PLAYING) + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_PLAYING) + + time.sleep(1) + + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_PLAYING) + self.pipeline.set_state(gst.STATE_NULL) + self.assertEqual(self.pipeline.get_state()[1], gst.STATE_NULL) + + +class Bus(TestCase): + def testGet(self): + pipeline = gst.Pipeline('test') + self.assertEquals(pipeline.__gstrefcount__, 1) + bus = pipeline.get_bus() + self.assertEquals(pipeline.__gstrefcount__, 1) + # one for python and one for the pipeline + self.assertEquals(bus.__gstrefcount__, 2) + + del pipeline + if not pygobject_2_13: + self.failUnless(self.gccollect()) + self.assertEquals(bus.__gstrefcount__, 1) + +class PipelineAndBus(TestCase): + def setUp(self): + TestCase.setUp(self) + self.pipeline = gst.Pipeline('test-pipeline') + source = gst.element_factory_make('fakesrc', 'source') + sink = gst.element_factory_make('fakesink', 'sink') + self.pipeline.add(source, sink) + gst.element_link_many(source, sink) + + self.bus = self.pipeline.get_bus() + self.assertEquals(self.bus.__gstrefcount__, 2) + self.handler = self.bus.add_watch(self._message_received) + self.assertEquals(self.bus.__gstrefcount__, 3) + self.assertEquals(self.pipeline.__gstrefcount__, 1) + + self.loop = gobject.MainLoop() + + def tearDown(self): + # FIXME: fix the refcount issues with the bus/pipeline + # flush the bus to be able to assert on the pipeline refcount + #while self.pipeline.__gstrefcount__ > 1: + self.gccollect() + + # one for the pipeline, two for the snake + # three for the watch now shake shake shake but don't you + self.assertEquals(self.bus.__gstrefcount__, 3) + self.failUnless(gobject.source_remove(self.handler)) + self.assertEquals(self.bus.__gstrefcount__, 2) + self.gccollect() + + gst.debug('THOMAS: pipeline rc %d' % self.pipeline.__gstrefcount__) + #self.assertEquals(self.pipeline.__gstrefcount__, 1) + del self.pipeline + self.gccollect() + #self.assertEquals(self.bus.__gstrefcount__, 2) + del self.bus + self.gccollect() + + # the async thread can be holding a ref, Wim is going to work on this + #TestCase.tearDown(self) + + def _message_received(self, bus, message): + gst.debug('received message: %s, %s' % ( + message.src.get_path_string(), message.type.value_nicks[1])) + t = message.type + if t == gst.MESSAGE_STATE_CHANGED: + old, new, pen = message.parse_state_changed() + gst.debug('%r state change from %r to %r' % ( + message.src.get_path_string(), old, new)) + if message.src == self.pipeline and new == self.final: + self.loop.quit() + + return True + + def testPlaying(self): + self.final = gst.STATE_PLAYING + ret = self.pipeline.set_state(gst.STATE_PLAYING) + self.assertEquals(ret, gst.STATE_CHANGE_ASYNC) + + # go into a main loop to wait for messages + self.loop.run() + + # we go to READY so we get messages; going to NULL would set + # the bus flushing + self.final = gst.STATE_READY + ret = self.pipeline.set_state(gst.STATE_READY) + self.assertEquals(ret, gst.STATE_CHANGE_SUCCESS) + self.loop.run() + + # FIXME: not setting to NULL causes a deadlock; we might want to + # fix this in the bindings + self.assertEquals(self.pipeline.set_state(gst.STATE_NULL), + gst.STATE_CHANGE_SUCCESS) + self.assertEquals(self.pipeline.get_state(), + (gst.STATE_CHANGE_SUCCESS, gst.STATE_NULL, gst.STATE_VOID_PENDING)) + self.gccollect() + +class TestPipeSub(gst.Pipeline): + def do_handle_message(self, message): + self.debug('do_handle_message') + gst.Pipeline.do_handle_message(self, message) + self.type = message.type +gobject.type_register(TestPipeSub) + +class TestPipeSubSub(TestPipeSub): + def do_handle_message(self, message): + self.debug('do_handle_message') + TestPipeSub.do_handle_message(self, message) +gobject.type_register(TestPipeSubSub) + + +# see http://bugzilla.gnome.org/show_bug.cgi?id=577735 +class TestSubClass(TestCase): + def setUp(self): + self.gctrack() + + def tearDown(self): + self.gccollect() + self.gcverify() + + def testSubClass(self): + p = TestPipeSub() + u = gst.element_factory_make('uridecodebin') + self.assertEquals(u.__grefcount__, 1) + self.failIf(getattr(p, 'type', None)) + # adding uridecodebin triggers a clock-provide message; + # this message should be dropped, and thus not affect + # the refcount of u beyond the parenting. + p.add(u) + self.assertEquals(getattr(p, 'type', None), gst.MESSAGE_CLOCK_PROVIDE) + self.assertEquals(u.__grefcount__, 2) + del p + self.assertEquals(u.__grefcount__, 1) + + def testSubSubClass(self): + # Edward is worried that a subclass of a subclass will screw up + # the refcounting wrt. GST_BUS_DROP + p = TestPipeSubSub() + u = gst.element_factory_make('uridecodebin') + self.assertEquals(u.__grefcount__, 1) + self.failIf(getattr(p, 'type', None)) + p.add(u) + self.assertEquals(getattr(p, 'type', None), gst.MESSAGE_CLOCK_PROVIDE) + self.assertEquals(u.__grefcount__, 2) + del p + self.assertEquals(u.__grefcount__, 1) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_registry.py b/testsuite/test_registry.py new file mode 100644 index 0000000..521463a --- /dev/null +++ b/testsuite/test_registry.py @@ -0,0 +1,68 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +import gc +from common import gst, unittest, TestCase + +class RegistryTest(TestCase): + def setUp(self): + self.registry = gst.registry_get_default() + self.plugins = self.registry.get_plugin_list() + TestCase.setUp(self) + + def testGetDefault(self): + assert(self.registry) + + def testPluginList(self): + names = map(lambda p: p.get_name(), self.plugins) + self.failUnless('staticelements' in names) + + def testGetPathList(self): + # FIXME: this returns an empty list; probably due to core; + # examine problem + + paths = self.registry.get_path_list() + +class RegistryFeatureTest(TestCase): + def setUp(self): + self.registry = gst.registry_get_default() + self.plugins = self.registry.get_plugin_list() + self.efeatures = self.registry.get_feature_list(gst.TYPE_ELEMENT_FACTORY) + self.tfeatures = self.registry.get_feature_list(gst.TYPE_TYPE_FIND_FACTORY) + self.ifeatures = self.registry.get_feature_list(gst.TYPE_INDEX_FACTORY) + TestCase.setUp(self) + + def testFeatureList(self): + self.assertRaises(TypeError, self.registry.get_feature_list, "kaka") + + elements = map(lambda f: f.get_name(), self.efeatures) + self.failUnless('fakesink' in elements) + + typefinds = map(lambda f: f.get_name(), self.tfeatures) + + indexers = map(lambda f: f.get_name(), self.ifeatures) + self.failUnless('memindex' in indexers) + + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_segment.py b/testsuite/test_segment.py new file mode 100644 index 0000000..c96dded --- /dev/null +++ b/testsuite/test_segment.py @@ -0,0 +1,62 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2006 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase + +class SegmentTest(TestCase): + def testSeekNoSize(self): + segment = gst.Segment() + segment.init(gst.FORMAT_BYTES) + + # configure segment to start at 100 with no defined stop position + update = segment.set_seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_NONE, + gst.SEEK_TYPE_SET, 100, + gst.SEEK_TYPE_NONE, -1) + self.assertEquals(update, True) + self.assertEquals(segment.start, 100) + self.assertEquals(segment.stop, -1) + + # configure segment to stop relative, should not do anything since + # size is unknown + update = segment.set_seek(1.0, gst.FORMAT_BYTES, gst.SEEK_FLAG_NONE, + gst.SEEK_TYPE_NONE, 200, + gst.SEEK_TYPE_CUR, -100) + + # the update flag is deprecated, we cannot check for proper behaviour. + #self.assertEquals(update, False) + self.assertEquals(segment.start, 100) + self.assertEquals(segment.stop, -1) + + # clipping on outside range, always returns False + res, cstart, cstop = segment.clip(gst.FORMAT_BYTES, 0, 50) + self.assertEquals(res, False) + + # touching lower bound but outside + res, cstart, cstop = segment.clip(gst.FORMAT_BYTES, 50, 100) + self.assertEquals(res, False) + + # partially inside + res, cstart, cstop = segment.clip(gst.FORMAT_BYTES, 50, 150) + self.assertEquals(res, True) + self.assertEquals(cstart, 100) + self.assertEquals(cstop, 150) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_struct.py b/testsuite/test_struct.py new file mode 100644 index 0000000..5ab75d3 --- /dev/null +++ b/testsuite/test_struct.py @@ -0,0 +1,123 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +from common import gst, unittest, TestCase + +class StructureTest(TestCase): + def setUp(self): + TestCase.setUp(self) + self.struct = gst.structure_from_string('video/x-raw-yuv,width=10,foo="bar",pixel-aspect-ratio=1/2,framerate=5/1,boolean=(boolean)true') + + def testName(self): + assert self.struct.get_name() == 'video/x-raw-yuv' + self.struct.set_name('foobar') + assert self.struct.get_name() == 'foobar' + + def testInt(self): + assert self.struct.has_key('width') + assert isinstance(self.struct['width'], int) + assert self.struct['width'] == 10, self.struct['width'] + self.struct['width'] = 5 + assert self.struct.has_key('width') + assert isinstance(self.struct['width'], int) + assert self.struct['width'] == 5, self.struct['width'] + + def testString(self): + assert self.struct.has_key('foo') + assert isinstance(self.struct['foo'], unicode) + assert self.struct['foo'] == 'bar', self.struct['foo'] + self.struct['foo'] = 'baz' + assert self.struct.has_key('foo') + assert isinstance(self.struct['foo'], unicode) + assert self.struct['foo'] == 'baz', self.struct['foo'] + + def testBoolean(self): + assert self.struct.has_key('boolean') + assert isinstance(self.struct['boolean'], bool) + assert self.struct['boolean'] == True, self.struct['boolean'] + self.struct['boolean'] = False + assert self.struct.has_key('boolean') + assert isinstance(self.struct['boolean'], bool) + assert self.struct['boolean'] == False, self.struct['boolean'] + + def testCreateInt(self): + self.struct['integer'] = 5 + assert self.struct.has_key('integer') + assert isinstance(self.struct['integer'], int) + assert self.struct['integer'] == 5, self.struct['integer'] + + def testGstValue(self): + s = self.struct + s['fourcc'] = gst.Fourcc('XVID') + assert s['fourcc'].fourcc == 'XVID' + s['frac'] = gst.Fraction(3,4) + assert s['frac'].num == 3 + assert s['frac'].denom == 4 + s['fracrange'] = gst.FractionRange(gst.Fraction(0,1), + gst.Fraction(25,3)) + assert s['fracrange'].low.num == 0 + assert s['fracrange'].low.denom == 1 + assert s['fracrange'].high.num == 25 + assert s['fracrange'].high.denom == 3 + s['intrange'] = gst.IntRange(5,21) + assert s['intrange'].low == 5 + assert s['intrange'].high == 21 + s['doublerange'] = gst.DoubleRange(6.,21.) + assert s['doublerange'].low == 6. + assert s['doublerange'].high == 21. + s['fixedlist'] = (4, 5, 6) + assert isinstance(s['fixedlist'], tuple) + assert s['fixedlist'] == (4, 5, 6) + s['list'] = [4, 5, 6] + assert isinstance(s['list'], list) + assert s['list'] == [4, 5, 6] + s['boolean'] = True + assert isinstance(s['boolean'], bool) + assert s['boolean'] == True + + # finally, some recursive tests + s['rflist'] = ([(['a', 'b'], ['c', 'd']),'e'], ['f', 'g']) + assert s['rflist'] == ([(['a', 'b'], ['c', 'd']),'e'], ['f', 'g']) + s['rlist'] = [([(['a', 'b'], ['c', 'd']),'e'], ['f', 'g']), 'h'] + assert s['rlist'] == [([(['a', 'b'], ['c', 'd']),'e'], ['f', 'g']), 'h'] + + def testStructureChange(self): + assert self.struct['framerate'] == gst.Fraction(5, 1) + self.struct['framerate'] = gst.Fraction(10, 1) + assert self.struct['framerate'] == gst.Fraction(10, 1) + self.struct['pixel-aspect-ratio'] = gst.Fraction(4, 2) + assert self.struct['pixel-aspect-ratio'].num == 2 + assert self.struct['pixel-aspect-ratio'].denom == 1 + + def testKeys(self): + k = self.struct.keys() + self.failUnless(k) + self.assertEquals(len(k), 5) + self.failUnless("width" in k) + self.failUnless("foo" in k) + self.failUnless("framerate" in k) + self.failUnless("pixel-aspect-ratio" in k) + self.failUnless("boolean" in k) + +if __name__ == "__main__": + unittest.main() diff --git a/testsuite/test_taglist.py b/testsuite/test_taglist.py new file mode 100644 index 0000000..2b94918 --- /dev/null +++ b/testsuite/test_taglist.py @@ -0,0 +1,71 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2007 Johan Dahlin +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, TestCase + + +class TestTagList(TestCase): + def testContains(self): + taglist = gst.TagList() + self.failIf('key' in taglist) + taglist['key'] = 'value' + self.failUnless('key' in taglist) + + def testLength(self): + taglist = gst.TagList() + self.assertEqual(len(taglist), 0) + taglist['key1'] = 'value' + taglist['key2'] = 'value' + self.assertEqual(len(taglist), 2) + + def testKeys(self): + taglist = gst.TagList() + self.assertEqual(taglist.keys(), []) + taglist['key1'] = 'value' + taglist['key2'] = 'value' + keys = taglist.keys() + keys.sort() + self.assertEqual(keys, ['key1', 'key2']) + + def testUnicode(self): + taglist = gst.TagList() + + # normal ASCII text + taglist[gst.TAG_ARTIST] = 'Artist' + self.failUnless(isinstance(taglist[gst.TAG_ARTIST], unicode)) + self.assertEquals(taglist[gst.TAG_ARTIST], u'Artist') + self.assertEquals(taglist[gst.TAG_ARTIST], 'Artist') + + # normal ASCII text as unicode + taglist[gst.TAG_ARTIST] = u'Artist' + self.failUnless(isinstance(taglist[gst.TAG_ARTIST], unicode)) + self.assertEquals(taglist[gst.TAG_ARTIST], u'Artist') + self.assertEquals(taglist[gst.TAG_ARTIST], 'Artist') + + # real unicode + taglist[gst.TAG_ARTIST] = u'S\xc3\xadgur R\xc3\xb3s' + self.failUnless(isinstance(taglist[gst.TAG_ARTIST], unicode)) + self.assertEquals(taglist[gst.TAG_ARTIST], u'S\xc3\xadgur R\xc3\xb3s') + + def testUnsignedInt(self): + taglist = gst.TagList() + taglist[gst.TAG_TRACK_NUMBER] = 1 + vorbis = gst.tag.to_vorbis_comments(taglist, gst.TAG_TRACK_NUMBER) + self.assertEquals(vorbis, ['TRACKNUMBER=1']) diff --git a/testsuite/test_xml.py b/testsuite/test_xml.py new file mode 100644 index 0000000..615a41a --- /dev/null +++ b/testsuite/test_xml.py @@ -0,0 +1,53 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 +# +# gst-python - Python bindings for GStreamer +# Copyright (C) 2002 David I. Lehn +# Copyright (C) 2004 Johan Dahlin +# Copyright (C) 2005 Edward Hervey +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from common import gst, unittest, TestCase + +class PadTest(TestCase): + + def testQuery(self): + # don't run this test if we don't have the libxml2 module + try: + import libxml2 + except: + return + xml = gst.XML() + xml.parse_memory(""" + + + test-pipeline + pipeline + + name + test-pipeline + + +""") + elements = xml.get_topelements() + assert len(elements) == 1 + element = elements[0] + assert isinstance(element, gst.Pipeline) + assert element.get_name() == 'test-pipeline' + +if __name__ == "__main__": + unittest.main() + diff --git a/testsuite/testhelpermodule.c b/testsuite/testhelpermodule.c new file mode 100644 index 0000000..1325262 --- /dev/null +++ b/testsuite/testhelpermodule.c @@ -0,0 +1,56 @@ +#include "pygobject.h" +#include "test-object.h" + +#include +#include + +static PyObject * +_wrap_get_object (PyObject * self) +{ + GObject *obj; + obj = g_object_new (TEST_TYPE_OBJECT, NULL); + if (!obj) { + return NULL; + } + + return pygobject_new(obj); +} + +static PyObject * +_wrap_emit_event (PyObject * self, PyObject *args) +{ + PyGObject *obj; + GstEventType event_type = GST_EVENT_UNKNOWN; + GstEvent *event; + + if (!PyArg_ParseTuple(args, "O|i", &obj, &event_type)) + return NULL; + + event = gst_event_new_custom(event_type, NULL); + + g_signal_emit_by_name(G_OBJECT(obj->obj), "event", event); + + gst_mini_object_unref(GST_MINI_OBJECT(event)); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyMethodDef testhelper_methods[] = { + { "get_object", (PyCFunction)_wrap_get_object, METH_NOARGS }, + { "emit_event", (PyCFunction)_wrap_emit_event, METH_VARARGS }, + { NULL, NULL } +}; + +void +inittesthelper () +{ + PyObject *m, *d; + + init_pygobject(); + gst_init(NULL, NULL); + + m = Py_InitModule ("testhelper", testhelper_methods); + + d = PyModule_GetDict(m); +} diff --git a/win32/MANIFEST b/win32/MANIFEST new file mode 100644 index 0000000..295ff5c --- /dev/null +++ b/win32/MANIFEST @@ -0,0 +1,6 @@ +win32/MANIFEST +win32/common/config.h +win32/common/config.h.in +win32/vs6/gst_python.dsw +win32/vs6/libgstpython.dsp +win32/vs6/pygenfiles.dsp \ No newline at end of file diff --git a/win32/common/config.h b/win32/common/config.h new file mode 100644 index 0000000..7f90c9f --- /dev/null +++ b/win32/common/config.h @@ -0,0 +1,88 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Defined if gcov is enabled to force a rebuild due to config.h changing */ +#undef GST_GCOV_ENABLED + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* We can use the plugins-install methods */ +#define HAVE_PLUGINS_INSTALL 1 + +/* Defined if we have a 2.12 series pygobject */ +#undef HAVE_PYGOBJECT_2_12 + +/* Defined if we have a 2.16 series pygobject */ +#undef HAVE_PYGOBJECT_2_16 + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if valgrind should be used */ +#undef HAVE_VALGRIND + +/* We can use the videoorientation interface */ +#define HAVE_VIDEO_ORIENTATION_INTERFACE 1 + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#define PACKAGE "gst-python" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "GStreamer Python Bindings" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "GStreamer Python Bindings 0.10.22" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "gst-python" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "0.10.22" + +/* PyGst major version */ +#define PYGST_MAJOR_VERSION 0 + +/* PyGst micro version */ +#define PYGST_MICRO_VERSION 22 + +/* PyGst minor version */ +#define PYGST_MINOR_VERSION 10 + +/* PyGst nano version */ +#define PYGST_NANO_VERSION 0 + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#define VERSION "0.10.22" diff --git a/win32/common/config.h.in b/win32/common/config.h.in new file mode 100644 index 0000000..6407204 --- /dev/null +++ b/win32/common/config.h.in @@ -0,0 +1,88 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Defined if gcov is enabled to force a rebuild due to config.h changing */ +#undef GST_GCOV_ENABLED + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* We can use the plugins-install methods */ +#define HAVE_PLUGINS_INSTALL 1 + +/* Defined if we have a 2.12 series pygobject */ +#undef HAVE_PYGOBJECT_2_12 + +/* Defined if we have a 2.16 series pygobject */ +#undef HAVE_PYGOBJECT_2_16 + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if valgrind should be used */ +#undef HAVE_VALGRIND + +/* We can use the videoorientation interface */ +#define HAVE_VIDEO_ORIENTATION_INTERFACE 1 + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#define PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* PyGst major version */ +#define PYGST_MAJOR_VERSION @PACKAGE_VERSION_MAJOR@ + +/* PyGst micro version */ +#define PYGST_MICRO_VERSION @PACKAGE_VERSION_MICRO@ + +/* PyGst minor version */ +#define PYGST_MINOR_VERSION @PACKAGE_VERSION_MINOR@ + +/* PyGst nano version */ +#define PYGST_NANO_VERSION @PACKAGE_VERSION_NANO@ + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#define VERSION "@VERSION@" diff --git a/win32/vs6/gst_python.dsw b/win32/vs6/gst_python.dsw new file mode 100644 index 0000000..16b4194 --- /dev/null +++ b/win32/vs6/gst_python.dsw @@ -0,0 +1,41 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "libgstpython"=".\libgstpython.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "pygenfiles"=".\pygenfiles.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/win32/vs6/libgstpython.dsp b/win32/vs6/libgstpython.dsp new file mode 100644 index 0000000..e010dd8 --- /dev/null +++ b/win32/vs6/libgstpython.dsp @@ -0,0 +1,205 @@ +# Microsoft Developer Studio Project File - Name="libgstpython" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=libgstpython - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libgstpython.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libgstpython.mak" CFG="libgstpython - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libgstpython - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "libgstpython - Win32 Release python24" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "libgstpython - Win32 Release python25" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "libgstpython - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../../gst-plugins-base/" /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python24\include" /I "C:\Python24\include\pygtk-2.0" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib libxml2.lib libgstnet-0.10.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug" /libpath:"C:\Python24\libs\\" +# Begin Special Build Tool +TargetPath=.\Debug\libgstpython.dll +SOURCE="$(InputPath)" +PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10 +# End Special Build Tool + +!ELSEIF "$(CFG)" == "libgstpython - Win32 Release python24" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "libgstpython___Win32_Release_python24" +# PROP BASE Intermediate_Dir "libgstpython___Win32_Release_python24" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release_python24" +# PROP Intermediate_Dir "Release_python24" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MD /W3 /O1 /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python24\include\pygtk-2.0" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FR /FD /c +# SUBTRACT BASE CPP /YX +# ADD CPP /nologo /MD /W3 /O1 /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python24\include\pygtk-2.0" /I "C:\Python24\include\\" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FR /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib libxml2.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" +# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib libxml2.lib libgstnet-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" /libpath:"C:\Python24\libs\\" +# Begin Special Build Tool +TargetPath=.\Release_python24\libgstpython.dll +SOURCE="$(InputPath)" +PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10 +# End Special Build Tool + +!ELSEIF "$(CFG)" == "libgstpython - Win32 Release python25" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "libgstpython___Win32_Release_python25" +# PROP BASE Intermediate_Dir "libgstpython___Win32_Release_python25" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release_python25" +# PROP Intermediate_Dir "Release_python25" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MD /W3 /O1 /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python24\include\pygtk-2.0" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FR /FD /c +# SUBTRACT BASE CPP /YX +# ADD CPP /nologo /MD /W3 /O1 /I "../../../gstreamer" /I "../../../gstreamer/libs" /I "../common" /I "../../../gst-plugins-base/gst-libs" /I "C:\Python25\include\pygtk-2.0" /I "C:\Python25\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPYTHON_EXPORTS" /D "HAVE_CONFIG_H" /D "HAVE_VIDEO_ORIENTATION_INTERFACE" /FR /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib libxml2.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" +# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib libgstdataprotocol-0.10.lib libgstcontroller-0.10.lib libxml2.lib libgstnet-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" /libpath:"C:\Python25\libs" +# Begin Special Build Tool +TargetPath=.\Release_python25\libgstpython.dll +SOURCE="$(InputPath)" +PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10 +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "libgstpython - Win32 Debug" +# Name "libgstpython - Win32 Release python24" +# Name "libgstpython - Win32 Release python25" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE="..\..\gst\gst-argtypes.c" +# End Source File +# Begin Source File + +SOURCE=..\..\gst\gst.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\gstmodule.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\interfaces.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\interfacesmodule.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstexception.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstiterator.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstminiobject.c +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstvalue.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\gst\common.h +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstexception.h +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstminiobject.h +# End Source File +# Begin Source File + +SOURCE=..\..\gst\pygstvalue.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/win32/vs6/pygenfiles.dsp b/win32/vs6/pygenfiles.dsp new file mode 100644 index 0000000..af295ca --- /dev/null +++ b/win32/vs6/pygenfiles.dsp @@ -0,0 +1,123 @@ +# Microsoft Developer Studio Project File - Name="pygenfiles" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Generic Project" 0x010a + +CFG=pygenfiles - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "pygenfiles.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "pygenfiles.mak" CFG="pygenfiles - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pygenfiles - Win32 Release" (based on "Win32 (x86) Generic Project") +!MESSAGE "pygenfiles - Win32 Debug" (based on "Win32 (x86) Generic Project") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +MTL=midl.exe + +!IF "$(CFG)" == "pygenfiles - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" + +!ELSEIF "$(CFG)" == "pygenfiles - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" + +!ENDIF + +# Begin Target + +# Name "pygenfiles - Win32 Release" +# Name "pygenfiles - Win32 Debug" +# Begin Source File + +SOURCE=..\..\gst\gst.override + +!IF "$(CFG)" == "pygenfiles - Win32 Release" + +# Begin Custom Build +InputPath=..\..\gst\gst.override + +"gst_output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\Python24\python.exe ..\..\codegen/codegen.py --load-types ..\..\gst\arg-types.py --register ..\..\gst\gst-types.defs --override ..\..\gst\gst.override --extendpath ..\..\gst\ --extendpath ..\..\gst\ --prefix pygst ..\..\gst\gst.defs > ..\..\gst\gen-gst.c + move ..\..\gst\gen-gst.c ..\..\gst\gst.c + +# End Custom Build + +!ELSEIF "$(CFG)" == "pygenfiles - Win32 Debug" + +# Begin Custom Build +InputPath=..\..\gst\gst.override + +"gst_output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\Python24\python.exe ..\..\codegen/codegen.py --load-types ..\..\gst\arg-types.py --register ..\..\gst\gst-types.defs --override ..\..\gst\gst.override --extendpath ..\..\gst\ --extendpath ..\..\gst\ --prefix pygst ..\..\gst\gst.defs > ..\..\gst\gen-gst.c + move ..\..\gst\gen-gst.c ..\..\gst\gst.c + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\..\gst\interfaces.override + +!IF "$(CFG)" == "pygenfiles - Win32 Release" + +# Begin Custom Build +InputPath=..\..\gst\interfaces.override + +"interfaces_output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\Python24\python.exe ..\..\codegen/codegen.py --load-types ..\..\gst\arg-types.py --register ..\..\gst\gst-types.defs --override ..\..\gst\interfaces.override --extendpath ..\..\gst\ --extendpath ..\..\gst\ --prefix pyinterfaces ..\..\gst\interfaces.defs > ..\..\gst\gen-interfaces.c + move ..\..\gst\gen-interfaces.c ..\..\gst\interfaces.c + + +# End Custom Build + +!ELSEIF "$(CFG)" == "pygenfiles - Win32 Debug" + +# Begin Custom Build +InputPath=..\..\gst\interfaces.override + +"interfaces_output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\Python24\python.exe ..\..\codegen/codegen.py --load-types ..\..\gst\arg-types.py --register ..\..\gst\gst-types.defs --override ..\..\gst\interfaces.override --extendpath ..\..\gst\ --extendpath ..\..\gst\ --prefix pyinterfaces ..\..\gst\interfaces.defs > ..\..\gst\gen-interfaces.c + move ..\..\gst\gen-interfaces.c ..\..\gst\interfaces.c + + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project -- 2.7.4