From ee96b8b4ed303ec374e37237f86555754cf2ae60 Mon Sep 17 00:00:00 2001 From: DongHun Kwak Date: Wed, 12 Jul 2017 08:35:42 +0900 Subject: Imported Upstream version 2.27.90 Change-Id: I23ecc791685b18ea66500f2af94287da6bec1436 Signed-off-by: DongHun Kwak --- ChangeLog | 3121 +++++++++++++++++++++++++- Makefile.am | 29 + Makefile.in | 33 + NEWS | 289 +++ PKG-INFO | 4 +- aclocal.m4 | 12 +- codegen/Makefile.am | 2 + codegen/Makefile.in | 5 + codegen/argtypes.py | 8 +- codegen/definitions.py | 14 +- codegen/docextract_to_xml.py | 2 +- configure | 2243 +++++++++++------- configure.ac | 18 +- docs/Makefile.am | 2 + docs/Makefile.in | 5 + docs/html/class-gioappinfo.html | 12 +- docs/html/class-gioapplaunchcontext.html | 8 +- docs/html/class-gioasyncresult.html | 12 +- docs/html/class-giobufferedinputstream.html | 10 +- docs/html/class-giobufferedoutputstream.html | 10 +- docs/html/class-giocancellable.html | 10 +- docs/html/class-giodatainputstream.html | 8 +- docs/html/class-giodataoutputstream.html | 8 +- docs/html/class-giodrive.html | 10 +- docs/html/class-gioemblem.html | 12 +- docs/html/class-gioemblemedicon.html | 10 +- docs/html/class-giofile.html | 12 +- docs/html/class-giofileattributeinfo.html | 6 +- docs/html/class-giofileenumerator.html | 8 +- docs/html/class-giofileicon.html | 8 +- docs/html/class-giofileinfo.html | 8 +- docs/html/class-giofileinputstream.html | 10 +- docs/html/class-giofilemonitor.html | 8 +- docs/html/class-giofileoutputstream.html | 10 +- docs/html/class-giofilterinputstream.html | 8 +- docs/html/class-giofilteroutputstream.html | 8 +- docs/html/class-gioicon.html | 14 +- docs/html/class-gioinputstream.html | 8 +- docs/html/class-gioloadableicon.html | 12 +- docs/html/class-giomemoryinputstream.html | 12 +- docs/html/class-giomemoryoutputstream.html | 10 +- docs/html/class-giomount.html | 12 +- docs/html/class-giomountoperation.html | 10 +- docs/html/class-giooutputstream.html | 8 +- docs/html/class-gioseekable.html | 10 +- docs/html/class-giosimpleasyncresult.html | 10 +- docs/html/class-giothemedicon.html | 8 +- docs/html/class-giounixinputstream.html | 8 +- docs/html/class-giounixoutputstream.html | 8 +- docs/html/class-giovolume.html | 12 +- docs/html/class-giovolumemonitor.html | 12 +- docs/html/class-glibmaincontext.html | 10 +- docs/html/class-glibmainloop.html | 10 +- docs/html/class-gobject.html | 12 +- docs/html/class-gobjectgboxed.html | 8 +- docs/html/class-gobjectginterface.html | 6 +- docs/html/class-gobjectgpointer.html | 8 +- docs/html/gio-class-reference.html | 2 +- docs/html/gio-constants.html | 2 +- docs/html/gio-functions.html | 4 +- docs/html/giounix-class-reference.html | 2 +- docs/html/glib-class-reference.html | 2 +- docs/html/glib-constants.html | 2 +- docs/html/glib-functions.html | 6 +- docs/html/gobject-class-reference.html | 2 +- docs/html/gobject-constants.html | 2 +- docs/html/gobject-functions.html | 6 +- docs/html/index.html | 2 +- docs/html/pygobject-introduction.html | 2 +- dsextras.py | 25 +- examples/Makefile.am | 2 + examples/Makefile.in | 5 + gi/Makefile.am | 11 +- gi/Makefile.in | 19 +- gi/gimodule.c | 144 +- gi/module.py | 66 +- gi/overrides/GIMarshallingTests.py | 2 +- gi/overrides/GLib.py | 322 ++- gi/overrides/Gdk.py | 50 +- gi/overrides/Gio.py | 99 + gi/overrides/Gtk.py | 335 ++- gi/overrides/Makefile.am | 6 +- gi/overrides/Makefile.in | 9 +- gi/overrides/Pango.py | 51 + gi/overrides/__init__.py | 27 +- gi/pygi-argument.c | 180 +- gi/pygi-closure.c | 69 +- gi/pygi-foreign-cairo.c | 72 +- gi/pygi-foreign-gvariant.c | 4 +- gi/pygi-foreign-gvariant.h | 2 +- gi/pygi-foreign.c | 2 +- gi/pygi-info.c | 46 +- gi/pygi-invoke.c | 118 +- gi/pygi-invoke.h | 3 +- gi/pygi-property.c | 8 +- gi/pygi.h | 2 +- gi/repository/Makefile.am | 4 +- gi/repository/Makefile.in | 7 +- gi/types.py | 149 +- gio/Makefile.am | 2 +- gio/Makefile.in | 7 +- gio/gfile.override | 5 +- glib/Makefile.am | 6 +- glib/Makefile.in | 12 +- glib/glibmodule.c | 5 +- glib/pyglib-private.h | 3 + glib/pyglib-python-compat.h | 8 + glib/pyglib.c | 62 +- glib/pygmaincontext.c | 22 + glib/pygmaincontext.h | 2 +- glib/pygmainloop.c | 5 +- glib/pygoptioncontext.c | 21 + glib/pygoptioncontext.h | 2 + glib/pygoptiongroup.c | 26 + glib/pygoptiongroup.h | 2 + glib/pygsource.c | 2 +- gobject/Makefile.am | 4 +- gobject/Makefile.in | 7 +- gobject/__init__.py | 6 +- gobject/gobjectmodule.c | 42 +- gobject/propertyhelper.py | 26 +- gobject/pygobject-private.h | 11 + gobject/pygobject.c | 94 +- gobject/pygtype.c | 35 +- ltmain.sh | 2405 +++++++++++++------- m4/libtool.m4 | 1042 ++++++--- m4/ltversion.m4 | 12 +- m4/python.m4 | 43 +- setup.py | 10 +- tests/Makefile.am | 38 +- tests/Makefile.in | 58 +- tests/compathelper.py | 19 + tests/org.gnome.test.gschema.xml | 25 + tests/runtests.py | 1 + tests/test-floating.c | 66 + tests/test-floating.h | 41 + tests/test_everything.py | 112 +- tests/test_gcancellable.py | 15 - tests/test_gdbus.py | 94 + tests/test_gi.py | 118 +- tests/test_gicon.py | 112 - tests/test_gio.py | 1138 ---------- tests/test_gobject.py | 158 +- tests/test_gresolver.py | 65 - tests/test_gsocket.py | 126 -- tests/test_overrides.py | 744 +++++- tests/test_properties.py | 25 + tests/testhelpermodule.c | 107 +- 148 files changed, 10687 insertions(+), 4368 deletions(-) create mode 100644 gi/overrides/Gio.py create mode 100644 gi/overrides/Pango.py create mode 100644 tests/org.gnome.test.gschema.xml delete mode 100644 tests/test_gcancellable.py create mode 100644 tests/test_gdbus.py delete mode 100644 tests/test_gicon.py delete mode 100644 tests/test_gio.py delete mode 100644 tests/test_gresolver.py delete mode 100644 tests/test_gsocket.py diff --git a/ChangeLog b/ChangeLog index 24f3539..b138b03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,2905 @@ +commit 5dae6386ef74b6334daa3d0baf7c2e43d93a7e40 +Author: John (J5) Palmieri +Date: Fri Feb 11 11:05:04 2011 -0500 + + bump version and edit NEWS for release + + NEWS | 289 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 290 insertions(+), 1 deletions(-) + +commit e12097a3fc006f435ae01156e55cacd7622a6e06 +Author: John (J5) Palmieri +Date: Thu Feb 10 16:46:08 2011 -0500 + + fix build to correctly use python-config + + autogen.sh | 3 +++ + configure.ac | 6 ------ + m4/python.m4 | 9 +++++---- + tests/runtests.py | 1 + + 4 files changed, 9 insertions(+), 10 deletions(-) + +commit 5ec107f805e32d4183b3c1a015d411992fc46a48 +Author: Martin Pitt +Date: Wed Feb 9 18:00:34 2011 +0100 + + Run gio tests separately when enabled + + As we can't load both gio and gi.repository.Gio at the same time, + run the gio + tests separately when gio is enabled. + + tests/Makefile.am | 13 ++++++++++++- + 1 files changed, 12 insertions(+), 1 deletions(-) + +commit 02ac041ba001bdda506f749e90aebc86a414d7c1 +Author: Martin Pitt +Date: Wed Feb 2 13:33:55 2011 +0100 + + Revert "Remove gio static bindings" + + This reverts commit bca5834fc8fa342149e0eec7b396877a2abe6d33. + + We still need the static gio bindings for now. + + https://bugzilla.gnome.org/show_bug.cgi?id=638899 + + Makefile.am | 2 +- + configure.ac | 22 +- + gio/.gitignore | 3 + + gio/Makefile.am | 117 + + gio/__init__.py | 40 + + gio/gappinfo.override | 213 ++ + gio/gapplaunchcontext.override | 99 + + gio/gbufferedinputstream.override | 70 + + gio/gcancellable.override | 38 + + gio/gdatainputstream.override | 250 ++ + gio/gdrive.override | 347 ++ + gio/gfile.override | 2215 +++++++++++ + gio/gfileattribute.override | 153 + + gio/gfileenumerator.override | 184 + + gio/gfileinfo.override | 121 + + gio/gfileinputstream.override | 68 + + gio/gfileiostream.override | 68 + + gio/gfileoutputstream.override | 68 + + gio/gicon.override | 310 ++ + gio/ginputstream.override | 344 ++ + gio/gio-types.defs | 807 ++++ + gio/gio.defs | 7465 + +++++++++++++++++++++++++++++++++++++ + gio/gio.override | 409 ++ + gio/giomodule.c | 208 + + gio/giostream.override | 68 + + gio/gmemoryinputstream.override | 91 + + gio/gmemoryoutputstream.override | 45 + + gio/gmount.override | 454 +++ + gio/goutputstream.override | 292 ++ + gio/gresolver.override | 312 ++ + gio/gsocket.override | 575 +++ + gio/gvolume.override | 237 ++ + gio/gvolumemonitor.override | 94 + + gio/pygio-utils.c | 236 ++ + gio/pygio-utils.h | 49 + + gio/unix-types.defs | 55 + + gio/unix.defs | 475 +++ + gio/unix.override | 62 + + gio/unixmodule.c | 52 + + tests/Makefile.am | 9 + + tests/runtests-windows.py | 3 + + tests/test_gcancellable.py | 15 + + tests/test_gicon.py | 112 + + tests/test_gio.py | 1138 ++++++ + tests/test_gresolver.py | 68 + + tests/test_gsocket.py | 126 + + 46 files changed, 18187 insertions(+), 2 deletions(-) + +commit a535e4af7c38fd7917d804470e8c46da4c2a86ea +Author: Steve Frécinaux +Date: Wed Feb 9 17:32:03 2011 +0100 + + Decrease the refcount for GInitiallyUnowned constructors. + + This mimicks the weird legacy pygtk behaviour and makes all the tests + pass despite the proper fixes having been reverted. + + https://bugzilla.gnome.org/show_bug.cgi?id=641525 + + gi/pygi-invoke.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 657d113c766c5ff9c5e7285ff5309283333983e4 +Author: Steve Frécinaux +Date: Wed Feb 9 17:03:30 2011 +0100 + + Ensure the sink functions are only ran once. + + This mitigates in a not-so-clean way the leak experienced in pygobject + for wrappers created multiple times, without breaking pygtk. + + https://bugzilla.gnome.org/show_bug.cgi?id=641525 + + gobject/pygobject.c | 23 +++++++++++++++-------- + 1 files changed, 15 insertions(+), 8 deletions(-) + +commit d32c0ecc6cde743047054e65355cbbfbf808d5ce +Author: Steve Frécinaux +Date: Wed Feb 9 17:15:41 2011 +0100 + + Revert "Fix wrong refcount when calling introspected widget + constructors" + + This reverts commit 7bc4122897d9d05172a2bd5b56bded87e2afaec4. + + https://bugzilla.gnome.org/show_bug.cgi?id=641525 + + gobject/pygobject.c | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +commit 4c9715b29f8883e23027cca10157ea96013b0dbc +Author: Steve Frécinaux +Date: Wed Feb 9 16:33:42 2011 +0100 + + Revert "Fix reference leaks for GInitiallyUnowned objects" + + This reverts commit f0a0b6c2eda89622de2b1e5ebb6a48103ad72a42. + The test cases have been kept. + + https://bugzilla.gnome.org/show_bug.cgi?id=641525 + + gobject/gobjectmodule.c | 2 -- + gobject/pygobject.c | 14 +++++++------- + 2 files changed, 7 insertions(+), 9 deletions(-) + +commit 14c4cf8e6edae893538680964380d543bde4a14d +Author: Martin Pitt +Date: Wed Feb 9 11:34:59 2011 +0100 + + Run test suite under dbus-launch + + When available, run the test suite in dbus-launch, so that the + GDBus tests + succeed even when building this in an environment without a running + session + D-BUS (such as distribution package builds). + + tests/Makefile.am | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 0858f550e2b6f75e3f583f963f5952f5ddae4e0e +Author: Martin Pitt +Date: Tue Feb 8 15:46:36 2011 +0100 + + Fix test_gdbus.py to be Python3 friendly + + - TestCase.assert_() has been deprecated by assertTrue(). + - Exceptions don't have a message attribute any more, use str(e) + + tests/test_gdbus.py | 34 +++++++++++++++------------------- + 1 files changed, 15 insertions(+), 19 deletions(-) + +commit b7f32e4cca0cef201489b55653f96ac64a8f9ab9 +Author: Martin Pitt +Date: Sat Jan 29 12:20:50 2011 +0100 + + [gi] Provide comfortable GSettings API + + Make Gio.Settings behave like a dictionary, with transparent + conversion from/to + GVariants. Also provide a more comfortable constructor. + + https://bugzilla.gnome.org/show_bug.cgi?id=640838 + + gi/overrides/Gio.py | 54 ++++++++++++++++++++++++++++ + tests/org.gnome.test.gschema.xml | 9 +++++ + tests/test_overrides.py | 73 + ++++++++++++++++++++++++++++++------- + 3 files changed, 122 insertions(+), 14 deletions(-) + +commit 8dad0eaed60a9de26e9a729a48a1f6bc74be486e +Author: Laszlo Pandy +Date: Fri Feb 4 16:36:07 2011 +0100 + + Fix vfunc search bug when using GInterfaces and a do_* method. + + If a class inherits from a GInterface, as well as implements a do_* + method (which is not in a super class), all the base interfaces + will be searched for an __info__ attribute. GInterface doesn't + have one, causing an error on class creation. + + https://bugzilla.gnome.org/show_bug.cgi?id=641493 + + gi/types.py | 4 +++- + tests/test_gi.py | 8 ++++++++ + 2 files changed, 11 insertions(+), 1 deletions(-) + +commit 2660be1f227be7a53092483bc9d8ead1bd1fb266 +Author: Laszlo Pandy +Date: Thu Feb 3 15:31:42 2011 +0100 + + [GI] Add tests for Gtk.Widget.drag_* methods. + + Previously all the drag_* methods were accessible as Gtk.drag_*. + Now that the (method) attribute has been included for these + methods in Gtk+, this test checks that they are included as class + methods when using pygobject introspection. + + https://bugzilla.gnome.org/show_bug.cgi?id=639945 + + tests/test_overrides.py | 40 ++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 40 insertions(+), 0 deletions(-) + +commit 09acaff29dfaabc77477cffca2c7137f68991e7f +Author: Ignacio Casal Quinteiro +Date: Wed Feb 2 21:00:48 2011 +0100 + + [python 3] use the right syntaxis to raise exceptions + + codegen/argtypes.py | 8 ++++---- + codegen/definitions.py | 14 +++++++------- + gi/overrides/Gtk.py | 2 +- + 3 files changed, 12 insertions(+), 12 deletions(-) + +commit 36094e5982d3e05d5662843b6d401f0974f5235f +Author: Ignacio Casal Quinteiro +Date: Wed Feb 2 20:50:12 2011 +0100 + + [gi] return PYGLIB_MODULE_ERROR_RETURN on error and use pygobject_init + + tests/testhelpermodule.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit c913c1789296310c2cf27554ce719d7f6e9c94cd +Author: Ignacio Casal Quinteiro +Date: Wed Feb 2 20:37:21 2011 +0100 + + [gi] return PYGLIB_MODULE_ERROR_RETURN on error + + This is to avoid some warnings when building with python 3 + + gi/gimodule.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 7bc4122897d9d05172a2bd5b56bded87e2afaec4 +Author: Steve Frécinaux +Date: Sat Jan 29 00:16:50 2011 +0100 + + Fix wrong refcount when calling introspected widget constructors + + Introspected widget constructors, like Gtk.Button.new(), can return + objects with a floating reference, which was then reffed by pygobject, + resulting in two references, despite the object is not owned by + anyone. + + This patch uses ref_sink() when pygobject takes its own reference, to + avoid adding that extra reference. Hence we now claim ownership on + objects returned by constructors with transfer=none (which is the case + for nearly all the widget constructors, despite the floating ref). + + https://bugzilla.gnome.org/show_bug.cgi?id=640868 + + gobject/pygobject.c | 4 +++- + tests/test_everything.py | 9 ++++++++- + 2 files changed, 11 insertions(+), 2 deletions(-) + +commit afeaaa126f7cd6556fb855ecd0facc174c0f946c +Author: Simon Schampijer +Date: Wed Jan 19 16:19:46 2011 +0100 + + Gdk.Window: Map the standard constructor to the *new* constructor + + Gdk.Window had to be made abstract + (see c4a36d875235e0bf1e52dbf2fa14d08bfc8bd4ec in gtk), + this override allows using the standard constructor + + This commit adds as well a testcase. + + https://bugzilla.gnome.org/show_bug.cgi?id=639936 + + gi/overrides/Gdk.py | 6 ++++++ + tests/test_overrides.py | 8 ++++++++ + 2 files changed, 14 insertions(+), 0 deletions(-) + +commit 858669f92c9907dd70b4966d6a8521ed122225be +Author: Martin Pitt +Date: Mon Jan 31 17:38:52 2011 +0100 + + Ship tests/org.gnome.test.gschema.xml in dist tarballs + + tests/Makefile.am | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 69207910209ebfe450df616aeb8fa4cc2e7eccf3 +Author: Martin Pitt +Date: Fri Jan 28 17:14:19 2011 +0100 + + [gi] Add GSettings tests + + Ryan Lortie proposed an override for more convenient GSettings access, + so let's + first make sure that the canonical GLib API works. + + tests/Makefile.am | 7 +++++-- + tests/org.gnome.test.gschema.xml | 16 ++++++++++++++++ + tests/test_overrides.py | 31 +++++++++++++++++++++++++++++++ + 3 files changed, 52 insertions(+), 2 deletions(-) + +commit 488478a83640d50baee963337fcc870fec76b784 +Author: Martin Pitt +Date: Fri Jan 28 07:20:26 2011 +0100 + + [gi] Provide GtkTextBuffer.insert_with_tags_by_name() + + Provide an actual insert_with_tags_by_name() instead of overloading + insert_with_tags() to handle both types. This keeps the overrides + consistent + with the actual GTK API. + + gi/overrides/Gtk.py | 19 ++++++++++++++----- + tests/test_overrides.py | 4 ++-- + 2 files changed, 16 insertions(+), 7 deletions(-) + +commit dace1a553793fb7fb054b60760f02c9e5cf00b38 +Author: Martin Pitt +Date: Thu Jan 27 13:37:18 2011 +0100 + + [gi] Support tag names in GtkTextBuffer.insert_with_tags() + + Neither insert_with_tags() nor insert_with_tags_by_name() are + introspectable + due to using varargs. As both are useful, support both cases in + the override. + + gi/overrides/Gtk.py | 5 +++++ + tests/test_overrides.py | 9 +++++++++ + 2 files changed, 14 insertions(+), 0 deletions(-) + +commit 91d34124b2a5128e93e13c7fee8693d5edc4e9bb +Author: Ignacio Casal Quinteiro +Date: Thu Jan 27 12:23:18 2011 +0100 + + Add MAINTAINERCLEANFILES + + This var behaves like .gitignore and allows us to skip some specific + files. + + Makefile.am | 27 +++++++++++++++++++++++++++ + 1 files changed, 27 insertions(+), 0 deletions(-) + +commit 8a98d26981ce68809a21c64cac4962e58c927905 +Author: Ignacio Casal Quinteiro +Date: Thu Jan 27 12:15:30 2011 +0100 + + Remove .gitignore files and use git.mk + + git.mk is a script maintained in pango. From time to time we must + check if it was updated and update it here. + + .gitignore | 46 ---------- + Makefile.am | 2 + + codegen/.gitignore | 2 - + codegen/Makefile.am | 2 + + docs/.gitignore | 7 -- + docs/Makefile.am | 2 + + examples/Makefile.am | 2 + + gi/.gitignore | 40 --------- + gi/Makefile.am | 2 + + gi/overrides/Makefile.am | 2 + + gi/repository/Makefile.am | 2 + + gi/tests/Makefile.am | 2 + + git.mk | 200 + +++++++++++++++++++++++++++++++++++++++++++++ + glib/Makefile.am | 2 + + gobject/.gitignore | 3 - + gobject/Makefile.am | 2 + + tests/.gitignore | 2 - + tests/Makefile.am | 2 + + 18 files changed, 222 insertions(+), 100 deletions(-) + +commit 331c42b63bc60a3b906fa21e1c0a7c1b9428f347 +Author: Martin Pitt +Date: Thu Jan 27 12:04:19 2011 +0100 + + pygi-convert.sh: Convert Pango.TabAlign.* + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit be1a2959fa0a3d8682e0e8aef389d73dacab0689 +Author: Martin Pitt +Date: Thu Jan 27 12:02:39 2011 +0100 + + pygi-convert.sh: Drop window -> get_window() conversion + + It is doing more harm than good for projects which use things like + self.window. + + pygi-convert.sh | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit dd7deb4b658c56857c26b1a278a3d688f2ea6a2a +Author: Martin Pitt +Date: Thu Jan 27 11:58:26 2011 +0100 + + pygi-convert.sh: Don't convert self.window assignments + + pygi-convert.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 975341a26772966d4afc87a88a6a566d61237fa0 +Author: Steve Frécinaux +Date: Fri Jan 21 18:41:54 2011 +0100 + + Fix leaked python reference in python-defined subclasses + + https://bugzilla.gnome.org/show_bug.cgi?id=640184 + + gobject/gobjectmodule.c | 1 + + tests/test_gobject.py | 4 ++++ + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit a59e2d58bdb3f31a4f415dbe14b7d9988ac28ce3 +Author: Steve Frécinaux +Date: Fri Jan 21 15:54:43 2011 +0100 + + Add some tests for the number of python refs held at creation time + + https://bugzilla.gnome.org/show_bug.cgi?id=640184 + + tests/test_gobject.py | 21 +++++++++++++++++++++ + 1 files changed, 21 insertions(+), 0 deletions(-) + +commit 7d70105eb324ea4b6a58c2d3fb3f2dda36e7ab33 +Author: Steve Frécinaux +Date: Fri Jan 21 17:24:49 2011 +0100 + + Factor out parameter marshalling from construction functions. + + https://bugzilla.gnome.org/show_bug.cgi?id=640197 + + gobject/gobjectmodule.c | 35 ++------------------- + gobject/pygobject-private.h | 5 +++ + gobject/pygobject.c | 71 + +++++++++++++++++++++++++----------------- + 3 files changed, 50 insertions(+), 61 deletions(-) + +commit a3e0cfe8924887ecd1e07cedd2cfb999c853ac62 +Author: John (J5) Palmieri +Date: Wed Jan 26 15:34:24 2011 -0500 + + [gi] in python 3 an array of uint8 can be bytes but not string + + tests/test_gi.py | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 843553ea958eddec185bb660851a310dc050a14b +Author: John (J5) Palmieri +Date: Wed Jan 26 15:30:06 2011 -0500 + + [gi] fix Gio.FileEnumerator to reflect the Python 3 iter protocol + + gi/overrides/Gio.py | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit 6ff357839feb39930a5f3175de3d0ed35f24d3f4 +Author: John (J5) Palmieri +Date: Wed Jan 26 15:17:03 2011 -0500 + + [gi] python 3 fixes + + Patches need to work in Python 3 - here are some of the issues I + fixed up. + Patch submitters should keep this in mind. When I note to only + use something + in tests it means that there is a compat module that is only available + to the + tests. Actuall code should either add the workaround to the top + of their + module or try not to have a distinction between things such as + unicode and + longs which no longer exist in Python 3 + + * use range instead of xrange - loss of performance in Python 2 but + Python 3 i + treats range similarly to python 2's xrange + * use dict.items() instead of dict.iteritems() - same as the xrange + issue + * callable does not exist in 3.x, use hasattr(obj, '__call__') or + + if sys.version_info > (3, 0): + def callable(obj): + return hasattr(obj, '__call__') + + * using unicode in tests is tricky, you can't use u'' even in + a versioned + conditional as python3's parser chokes on it. Do this in tests + (and only i + in tests): + + from compathelper import _unicode + unicode_string = _unicode('this is a unicode string') + + * exception caching changed in 2.7, instead of except Exception, + e we now use + except Exception as e. Do this to be compatible with older + versions: + + except Exception: + etype, e = sys.exc_info()[:2] + + * Unbound methods with an im_func attribute no longer exits in 3.x. + Unbound methods are now just functions so class.method in 3.x is + equivalent to class.method.im_func in 2.x. If you have to go this + low level do this: + + func = class1.method + if sys.version_info < (3,0): + func = func.im_func + + * all numbers are long in 3.x so 42L is invalid in 3.x. In tests (and + only in tests) do this: + + from compathelper import _long + l = _long(42) + + gi/overrides/GLib.py | 16 ++++++++-------- + gi/types.py | 5 ++++- + tests/compathelper.py | 19 +++++++++++++++++++ + tests/test_gdbus.py | 12 ++++++++---- + tests/test_gi.py | 19 ++++++++++++------- + tests/test_overrides.py | 8 +++++--- + 6 files changed, 56 insertions(+), 23 deletions(-) + +commit 832d662b9f90f5762bbf28b3cca73f947c1f83ce +Author: John (J5) Palmieri +Date: Wed Jan 26 14:00:08 2011 -0500 + + [gi] fix try/except blocks using depricated raise format + + gi/overrides/GLib.py | 4 ++-- + gi/overrides/Gdk.py | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit d3e30e240fed6ef1dd40fd29fd13dc2effc6c7b1 +Author: Martin Pitt +Date: Wed Jan 26 19:03:48 2011 +0100 + + [gi] Add docstring to GLib.Variant constructor + + gi/overrides/GLib.py | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +commit 963cd52fec26f7a4fb34414f8ac6662932ede322 +Author: Martin Pitt +Date: Wed Jan 26 18:45:38 2011 +0100 + + [gi] update gdbus test cases for previous GVariant change + + tests/test_gdbus.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 27e3a6276ff5f2cdc03ddf69ee80d44c3bf2c094 +Author: Martin Pitt +Date: Wed Jan 26 18:39:17 2011 +0100 + + [gi] Accept only a single object in GLib.Variant constructor + + We previously allowed flat arguments for tuple signatures, e. g. + + GLib.Variant('(ii)', 1, 2) + + However, that's not how GVariant is supposed to work. Remove the + special case + to handle flat argument lists, and only accept a single value, i. e. + + GLib.Variant('(ii)', (1, 2)) + + Note that this breaks the current API, but as it is not used widely + yet, let's + better fix it now. + + Thanks to Ryan Lortie for pointing this out! + + gi/overrides/GLib.py | 25 ++++++++++--------------- + tests/test_overrides.py | 32 +++++++++++++------------------- + 2 files changed, 23 insertions(+), 34 deletions(-) + +commit b15e8e2c0c933d0f827a70280faf875ac383d81b +Author: Laszlo Pandy +Date: Wed Jan 26 00:40:49 2011 +0100 + + Speed up _setup_native_vfuncs() + + This changes _setup_native_vfuncs() to only install native + vfunc wrappers from the current class on the current class. + Native vfuncs will not be propogated up or down the class + hierarchy as this is unnecessary and wastes CPU and memory. + + Since the normal process in python to retrieve a method or + attribute recurses to the base classes if an attribute is not + found in the subclass, there is no need to setup all base class + virtual functions on a subclass. + + This patch removes the recursion in _setup_native_vfuncs() + and lets Python find them in the base classes like a normal + Python class would work. This significantly increases the speed + of any class which is or inherits from a C class which includes + virtual methods. + + https://bugzilla.gnome.org/show_bug.cgi?id=640629 + + gi/types.py | 26 +++++++++++++------------- + tests/test_gi.py | 13 +++++++++++++ + 2 files changed, 26 insertions(+), 13 deletions(-) + +commit 569d42ac2f50fb706ef289ff631db743483f40ee +Author: Laszlo Pandy +Date: Thu Jan 20 16:26:18 2011 +0100 + + Speed up class creation: rewrite _setup_vfuncs() to be much more + efficient. + + This patch rewrites the _setup_vfuncs() method to remove recursion and + make the running time linear in the number of virtual functions to + hook up + (ie. methods starting with "do_") instead of linear in the number of + virtual functions in the base class which could possibly be + overridden. + + Since most classes do not override all of the virtual functions in the + base class (and many override none), this runs much faster. + + It is possible to not recurse on all base classes because + non-interface + base classes will have the virtual function installed as an attribute. + Thus getattr() can be called, which recurses to the base classes much + faster than a custom implementation in Python. If the method cannot be + found with getattr(), all interface bases classes are searched + manually. + + The function is_function_in_classes() has been deleted. Because of the + above changes, it is not used anymore. + + https://bugzilla.gnome.org/show_bug.cgi?id=640073 + + gi/types.py | 104 + +++++++++++++++++++++++++++++++++--------------------- + tests/test_gi.py | 13 +++++++ + 2 files changed, 77 insertions(+), 40 deletions(-) + +commit 8f4e6536f3c2edf38a45632d1c23eb7c6681c3be +Author: Sebastian Pölsterl +Date: Mon Jan 24 19:23:19 2011 +0100 + + pygi-convert.sh: Convert gtk.UI_MANAGER_* + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 1f473b5164407a178203eb8cc7f3c786e0d0e5c2 +Author: Sebastian Pölsterl +Date: Fri Jan 21 18:41:54 2011 +0100 + + pygi-convert.sh: Convert gdk.GRAB_* + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit f5d0b7b9d189f65503c0bf66d8bda4186ca3223a +Author: Ignacio Casal Quinteiro +Date: Fri Jan 21 16:45:07 2011 +0100 + + [gi] set the gtype GValue correctly + + gi/pygi-property.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit ce521011d7f6d7f082aaea76fa05c5af9f6e93f5 +Author: Ignacio Casal Quinteiro +Date: Fri Jan 21 16:20:23 2011 +0100 + + [gi] use the right argument type for callback + + gi/pygi-foreign-cairo.c | 8 ++++---- + gi/pygi-foreign-gvariant.c | 4 ++-- + gi/pygi-foreign-gvariant.h | 2 +- + gi/pygi-foreign.c | 2 +- + gi/pygi.h | 2 +- + 5 files changed, 9 insertions(+), 9 deletions(-) + +commit a060287d1a6d190acb9d344f08fd5662e3296da5 +Author: Martin Pitt +Date: Fri Jan 21 11:00:27 2011 +0100 + + [gi] Add test cases for GDBus client operations + + tests/Makefile.am | 1 + + tests/test_gdbus.py | 94 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 95 insertions(+), 0 deletions(-) + +commit e97e28048efb966ecc1a03277d36cbaa81b8db7d +Author: Martin Pitt +Date: Fri Jan 21 09:54:14 2011 +0100 + + [gi] Add Variant construction/unpack support for boxed Variants + + Construction uses a GVariantBuilder for now, as the new_variant() + constructor + currently does not work (see + https://bugzilla.gnome.org/show_bug.cgi?id=639952) + + gi/overrides/GLib.py | 18 +++++++++++++++++- + tests/test_overrides.py | 26 ++++++++++++++++++++++++++ + 2 files changed, 43 insertions(+), 1 deletions(-) + +commit 71dd03261fc06b8180c14cd31b54d8e4b200be3a +Merge: bc29600 bd002c7 +Author: Dieter Verfaillie +Date: Fri Jan 21 09:33:16 2011 +0100 + + Merge branch 'windows-setup-fixes' + +commit bc29600a2a04c972ceab7ef8d3292e8633977591 +Author: Thomas Hindoe Paaboel Andersen +Date: Thu Jan 20 19:48:23 2011 +0100 + + pygi-convert.sh: GdkPixbuf methods + + GNOME bug #639880 + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d1b0fa501cc431baa530d96fb50f4c35590890ac +Author: Thomas Hindoe Paaboel Andersen +Date: Thu Jan 20 19:45:01 2011 +0100 + + pygi-convert.sh: Gdk.COLORSPACE_RGB + + GNOME bug #639880 + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 6d8ff4d5bdda5480089543869535cc3ee83da2f5 +Author: Martin Pitt +Date: Wed Jan 19 11:41:11 2011 +0100 + + [gi] Support nested objects and empty sequences in GLib.Variant + building + + The GVariant constructor (in the overrides) previously did not + support empty + arrays/dictionaries or nested structures. Rewrite the VariantCreator + class to + be fully recursive and determine the element types of + arrays/dictionaries. + + This now also allows you to use actual tuples as input values for + GVariant + tuple types. Taking values from the flat argument list is still + supported for + convenience, though. + + https://bugzilla.gnome.org/show_bug.cgi?id=639939 + + gi/overrides/GLib.py | 229 + +++++++++++++++++++++++++---------------------- + tests/test_overrides.py | 159 +++++++++++++++++++++++++++++++-- + 2 files changed, 273 insertions(+), 115 deletions(-) + +commit ac095f5435f106e175fa3297cb273e63c85d2809 +Author: Tomeu Vizoso +Date: Thu Jan 20 15:55:45 2011 +0100 + + Uncomment test_gi.TestInterfaceClash + + tests/test_gi.py | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +commit f0a0b6c2eda89622de2b1e5ebb6a48103ad72a42 +Author: Steve Frécinaux +Date: Thu Jan 20 14:14:15 2011 +0100 + + Fix reference leaks for GInitiallyUnowned objects + + References were leaked for GInitiallyUnowned objects which got their + wrappers created several times, because someone else holds reference + on it and it got out of python scope at some point. + + https://bugzilla.gnome.org/show_bug.cgi?id=639949 + + gobject/gobjectmodule.c | 2 + + gobject/pygobject.c | 14 +++++----- + tests/test-floating.c | 36 ++++++++++++++++++++++++++ + tests/test-floating.h | 21 +++++++++++++++ + tests/test_gobject.py | 63 + ++++++++++++++++++++++++++++++++++++++++++++++ + tests/testhelpermodule.c | 50 ++++++++++++++++++++++++++++++++++++ + 6 files changed, 179 insertions(+), 7 deletions(-) + +commit cae2cf3d4fb049c94389bf8f84d7d97a544d7a3f +Author: Steve Frécinaux +Date: Wed Jan 19 16:57:57 2011 +0100 + + Add tests for refcount of a GObject owned by a library + + When the object is constructed, its refcount is 2 because the library + refs it once. It should remain around until we ask the library to + release its reference. + + https://bugzilla.gnome.org/show_bug.cgi?id=639949 + + tests/test-floating.c | 30 ++++++++++++++++++++++ + tests/test-floating.h | 20 +++++++++++++++ + tests/test_gobject.py | 62 + ++++++++++++++++++++++++++++++++++++++++++++++ + tests/testhelpermodule.c | 51 +++++++++++++++++++++++++++++++++++++ + 4 files changed, 163 insertions(+), 0 deletions(-) + +commit b6737b91938d527872eff1d645a205cacf94e15d +Author: Steve Frécinaux +Date: Wed Jan 19 14:52:41 2011 +0100 + + Add a test to check for regular object reference count + + https://bugzilla.gnome.org/show_bug.cgi?id=639949 + + tests/test_gobject.py | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit 2b0f1ede820414ef1cfd6b37569fcb946d2031fc +Author: Martin Pitt +Date: Thu Jan 20 14:15:52 2011 +0100 + + [gi] Update TreeView.enable_model_drag_{source,dest} to current GTK + + GTK master now landed a lot of annotation fixes which also correctly + marks the + array length argument of + Gtk.TreeView.enable_model_drag_{source,dest}(). Thus + drop the explicit array length argument from the call in the override. + + gi/overrides/Gtk.py | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit b59edf4f0f7cab44033f9d704d476e10ee0d0c0a +Author: Steve Frécinaux +Date: Wed Jan 19 18:04:10 2011 +0100 + + Fix a typo in a private symbol name. + + gobject/gobjectmodule.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 6447688e283a8fb22de3ab68cbc06e34ad23d198 +Author: Martin Pitt +Date: Thu Jan 20 11:49:08 2011 +0100 + + pygi-convert.sh: Convert glib.source_remove() + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 84ee8de4bc00a8f901926cc6386d73c12dbd0b0b +Author: Martin Pitt +Date: Thu Jan 20 11:42:34 2011 +0100 + + Fix typo in previous commit to actually convert glib.GError + + pygi-convert.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b238cb614338f46e6feb7935cca0a55c7a929418 +Author: Martin Pitt +Date: Thu Jan 20 11:40:14 2011 +0100 + + pygi-convert.sh: Move some glib bits which are better handled + by gobject + + pygi-convert.sh | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 21c09a7ee294b59abb3eca6f64f13bf5c8a2fa0e +Author: Laszlo Pandy +Date: Wed Jan 19 12:00:02 2011 +0100 + + Modify override for Gtk.Adjustment to allow position or keyword + arguments in __init__(). + + Previously passing no arguments was not working, because the default + value for each parameter was None, and GObject.__init__() refuses to + allow None for integer properties. This patch does not pass None up + to GObject.__init__. Instead it does not pass the parameter at all, + and uses the class's default values. + + https://bugzilla.gnome.org/show_bug.cgi?id=639934 + + gi/overrides/Gtk.py | 14 ++++++++++++-- + tests/test_overrides.py | 34 +++++++++++++++++++++++++++------- + 2 files changed, 39 insertions(+), 9 deletions(-) + +commit d465e25297ad6589ff2cd0c00e11e8bd8ffe3f78 +Author: Martin Pitt +Date: Wed Jan 19 22:52:51 2011 +0100 + + [gi] Fix small typo in previous commit + + The GVariant signature of the self test had a trailing 'i'. The + current + GVariant builder doesn't mind, but the new implementation proposed + in bug + 639939 does. + + tests/test_overrides.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2b8e1d0531dcb8f57dc9f2fddf25970bee3daa90 +Author: Martin Pitt +Date: Wed Jan 19 20:18:19 2011 +0100 + + [gi] Add pythonic iterator and indexing for string GVariants + + This extends commit b1a98083c to also work for strings. + + gi/overrides/GLib.py | 8 +++++++- + tests/test_overrides.py | 13 +++++++++++++ + 2 files changed, 20 insertions(+), 1 deletions(-) + +commit 7c2f48bb6d67ec9a1ee5ac03a5aee34b54c6ebdd +Author: Tomeu Vizoso +Date: Wed Jan 19 18:09:23 2011 +0100 + + Construct structs using default API constructor + + If the struct has something that looks like a default constructor, + use it instead of trying to directly allocate it, as it will fail + if the struct fields are not exposed. + + https://bugzilla.gnome.org/show_bug.cgi?id=627444 + + gi/pygi-info.c | 37 +++++++++++++++++++++++++++++++++++++ + gi/types.py | 7 +++++++ + 2 files changed, 44 insertions(+), 0 deletions(-) + +commit db7300e173388d9557dcd2333781bfaa6b021605 +Author: Martin Pitt +Date: Wed Jan 19 18:54:39 2011 +0100 + + pygi-convert.sh: Migrate Gdk.Cursor constructor, and some cursor names + + pygi-convert.sh | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 4c1d4faddf1c9cb233c484da3eadd8e31c231f70 +Author: Martin Pitt +Date: Wed Jan 19 18:43:29 2011 +0100 + + pygi-convert.sh: Handle .window attributes + + In general, convert them to .get_window(). For some of them, prefer + calling the + GtkWidget methods instead. + + pygi-convert.sh | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit b1049b947d073fb569ba900a4d5c8519482d831e +Author: Tomeu Vizoso +Date: Wed Jan 19 17:35:09 2011 +0100 + + Also deal with foreign boxed structs + + cairo.Context has been boxed and our tests started failing + + https://bugzilla.gnome.org/show_bug.cgi?id=639967 + + gi/pygi-argument.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 25b69ae257a12b6dc97ed3f2f7ea54b166ddbba1 +Author: Laszlo Pandy +Date: Wed Jan 19 17:45:11 2011 +0100 + + [gi] Convert GErrors to GObject.GError exceptions, and throw them + upon returning from calling the C function. + + This changes gi to make use of pyglib_error_check() which already + exists in pyglib. + + The included tests make use of the other patch attached to this bug, + to check that the right exception is thrown from the new function + in GIMarshallingTests. + two Gtk C functions. + + https://bugzilla.gnome.org/show_bug.cgi?id=639834 + + gi/Makefile.am | 3 ++- + gi/pygi-invoke.c | 12 +++--------- + tests/test_gi.py | 10 ++++++++++ + 3 files changed, 15 insertions(+), 10 deletions(-) + +commit e6fcafc6179e963cbae7774e7ee50415bde2c523 +Author: Martin Pitt +Date: Wed Jan 19 17:03:06 2011 +0100 + + pygi-convert.sh: Don't convert glib -> GLib for now + + This currently leads to a load of crashes, MemoryErrors, etc, as + GLib is not + very well introspectable, due to the low-level operations that + it performs. + + John Palmieri confirms that using the static "glib" binding is + preferred for + now, so disable the replacement rules. + + pygi-convert.sh | 19 ++++++++++--------- + 1 files changed, 10 insertions(+), 9 deletions(-) + +commit 167261d556eab0d2e448c7ed28eef540a024ba1d +Author: Tomeu Vizoso +Date: Wed Jan 19 16:47:08 2011 +0100 + + Link libregress.so to GIO_LIBS again + + configure.ac | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit d143afa6da4f5b5f47be8df11fa41d7b47ab1794 +Author: Laszlo Pandy +Date: Wed Jan 19 16:14:42 2011 +0100 + + Fix attributes 2BUTTON_PRESS and 3BUTTON_PRESS of Gdk.EventType. + + This puts an underscore in front of 2BUTTON_PRESS and 3BUTTON_PRESS + because in Python attributes starting with a numeral causes a + syntax error. + + gi/overrides/Gdk.py | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit 614b6ca7f45c4acbee088fe74fecf279ed50cc0c +Author: Sebastian Pölsterl +Date: Wed Jan 19 15:27:33 2011 +0100 + + [gi] Fixed typo in exception + + gi/overrides/Gtk.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b2189424f9dd6d3a4a5b9792f0d5843fc27657d1 +Author: Sebastian Pölsterl +Date: Wed Jan 19 15:12:25 2011 +0100 + + [gi] Enable handling of Gdk.EventType.2BUTTON_PRESS and 3BUTTON_PRESS + + gi/overrides/Gdk.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 5eca5ff2c9509ec96158fe43b29f0fd951243efe +Author: Martin Pitt +Date: Wed Jan 19 14:54:57 2011 +0100 + + Revert "Fix Pango FontDescription override" + + According to + http://library.gnome.org/devel/pango/1.28/pango-Fonts.html#pango-font-description-new + the default constructor actually does take no arguments; we should + actually fix + the MemoryError. Add a test case for this. + + Remove the FIXME though, as pango_font_description_from_string() + is not a + FontDescription constructor, but a static factory method. + + Thanks to Paolo Borelli for pointing this out! + + This reverts commit 8878c57676091c08e66bc6cbe735d898cb420582. + + gi/overrides/Pango.py | 5 ++++- + tests/test_overrides.py | 5 +++++ + 2 files changed, 9 insertions(+), 1 deletions(-) + +commit 9e7b95b3676a1b502662523a9bd4ebe40ccb4845 +Author: Tony Young +Date: Thu Dec 16 23:39:33 2010 +0000 + + Python iterator interface support for GFileEnumerator. + + gi/overrides/Gio.py | 41 +++++++++++++++++++++++++++++++++++++++++ + gi/overrides/Makefile.am | 1 + + tests/test_overrides.py | 20 ++++++++++++++++++++ + 3 files changed, 62 insertions(+), 0 deletions(-) + +commit bca5834fc8fa342149e0eec7b396877a2abe6d33 +Author: Tomeu Vizoso +Date: Fri Jan 7 12:10:37 2011 +0100 + + Remove gio static bindings + + https://bugzilla.gnome.org/show_bug.cgi?id=638899 + + Makefile.am | 2 +- + configure.ac | 25 - + gio/.gitignore | 3 - + gio/Makefile.am | 117 - + gio/__init__.py | 40 - + gio/gappinfo.override | 213 -- + gio/gapplaunchcontext.override | 99 - + gio/gbufferedinputstream.override | 70 - + gio/gcancellable.override | 38 - + gio/gdatainputstream.override | 250 -- + gio/gdrive.override | 347 -- + gio/gfile.override | 2215 ----------- + gio/gfileattribute.override | 153 - + gio/gfileenumerator.override | 184 - + gio/gfileinfo.override | 121 - + gio/gfileinputstream.override | 68 - + gio/gfileiostream.override | 68 - + gio/gfileoutputstream.override | 68 - + gio/gicon.override | 310 -- + gio/ginputstream.override | 344 -- + gio/gio-types.defs | 807 ---- + gio/gio.defs | 7465 + ------------------------------------- + gio/gio.override | 409 -- + gio/giomodule.c | 208 - + gio/giostream.override | 68 - + gio/gmemoryinputstream.override | 91 - + gio/gmemoryoutputstream.override | 45 - + gio/gmount.override | 454 --- + gio/goutputstream.override | 292 -- + gio/gresolver.override | 312 -- + gio/gsocket.override | 575 --- + gio/gvolume.override | 237 -- + gio/gvolumemonitor.override | 94 - + gio/pygio-utils.c | 236 -- + gio/pygio-utils.h | 49 - + gio/unix-types.defs | 55 - + gio/unix.defs | 475 --- + gio/unix.override | 62 - + gio/unixmodule.c | 52 - + tests/Makefile.am | 9 - + tests/runtests-windows.py | 3 - + tests/test_gcancellable.py | 15 - + tests/test_gicon.py | 112 - + tests/test_gio.py | 1138 ------ + tests/test_gresolver.py | 68 - + tests/test_gsocket.py | 126 - + 46 files changed, 1 insertions(+), 18191 deletions(-) + +commit 09f7ca7e2378e6679002677ac3f4802f4cc7d9d5 +Author: Ignacio Casal Quinteiro +Date: Wed Jan 19 12:04:15 2011 +0100 + + [gi] set length when marshalling guint8 erases + + gi/pygi-argument.c | 1 + + tests/test_gi.py | 4 ++++ + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 22eee43e50a150ace80694213fb87be9f0c72f51 +Author: Sebastian Pölsterl +Date: Wed Jan 19 10:27:47 2011 +0100 + + Convert Gdk.Pixbuf to GdkPixbuf.Pixbuf + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit a4b210d69c832629894090b7154ae194209b0c60 +Author: Arnaud Charlet +Date: Tue Jan 18 18:31:29 2011 +0100 + + Disable calls to PyGILState_* when threads are disabled + + Since threads may also be disabled in Python too, those symbols + may not + be resolved. + + https://bugzilla.gnome.org/show_bug.cgi?id=374603 + + glib/pyglib.c | 12 ++++++++++++ + gobject/pygobject-private.h | 6 ++++++ + 2 files changed, 18 insertions(+), 0 deletions(-) + +commit a000627ec3904b9414ce375aec8d144fc0c26248 +Author: Martin Pitt +Date: Tue Jan 18 18:29:50 2011 +0100 + + pygi-convert.sh: Do not comment out set_cell_data_func() calls; + these should be ported properly + + pygi-convert.sh | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 99ff4610fb5ece2fc8d2f9eba13e661968adf3f0 +Author: Martin Pitt +Date: Tue Jan 18 18:26:01 2011 +0100 + + pygi-convert.sh: Fix match for adding missing imports + + pygi-convert.sh | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 3aa95011fad67df20370e92bf25236a34d7d08d3 +Author: Martin Pitt +Date: Tue Jan 18 18:09:30 2011 +0100 + + pygi-convert.sh: Fix Gtk.Label handling to be idempotent + + As we are not replacing line by line, but the whole file at once, + this is a bit + hackish unfortunately. We can't use a match test or a lookahead/behind + assertion. + + pygi-convert.sh | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 36bc1c17e7d4189059337cc6a73c64edd819ec12 +Author: Laszlo Pandy +Date: Tue Jan 18 17:29:52 2011 +0100 + + Remove trailing whitespace from gi/overrides/Gtk.py + + gi/overrides/Gtk.py | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit 8878c57676091c08e66bc6cbe735d898cb420582 +Author: Martin Pitt +Date: Tue Jan 18 16:47:10 2011 +0100 + + Fix Pango FontDescription override + + Trying to call __new__() on a record crashes with a MemoryError, + so just call + the intended static factory method for a None argument as well + (which works + just fine now). + + gi/overrides/Pango.py | 7 +------ + 1 files changed, 1 insertions(+), 6 deletions(-) + +commit efbbe71634037fa100b17327389b883b259cca54 +Author: Martin Pitt +Date: Tue Jan 18 16:23:39 2011 +0100 + + tests: Respect existing $GI_TYPELIB_PATH + + This allows us to run the test suite against local typelibs. + + tests/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f56d85a7f39c2088bf9fd50b1b1e5b67c03104d3 +Merge: 84d6142 7d997b6 +Author: Sebastian Pölsterl +Date: Tue Jan 18 13:14:45 2011 +0100 + + Merge branch 'value' + +commit 7d997b6fe88343776c4d67a9f3437ba0c4122da0 +Author: Sebastian Pölsterl +Date: Tue Jan 18 13:12:36 2011 +0100 + + GTK overrides: Do type conversion to column types of ListStore and + TreeStore in set_value + + gi/overrides/Gtk.py | 28 ++++++++++++++++++---------- + tests/test_overrides.py | 12 +++++++++++- + 2 files changed, 29 insertions(+), 11 deletions(-) + +commit 84d6142c14a7ebfb7284d3db52e14d3393f93905 +Author: Steve Frécinaux +Date: Mon Jan 17 18:57:58 2011 +0100 + + Always register a new GType when a GObject class is subclassed + + This patch makes the GType <-> python mapping much more predictible, + and fixes the bug caused by overriding methods without specifying a + __gtype_name__ member in the subclass, and makes type_register useless + for real :-) + + It is still possible to provide an explicit __gtype_name__ member + in the + subclass as it allows having a predictible GType name, which is handy + for some of our tests. There is also an explicit special case for + overrides because we obviously do not want to register new GTypes for + those ones as it would clearly defeat the purpose of overrides. + + https://bugzilla.gnome.org/show_bug.cgi?id=543056 + + gobject/__init__.py | 6 +++--- + tests/test_gi.py | 21 ++------------------- + 2 files changed, 5 insertions(+), 22 deletions(-) + +commit 30750ccef31e6c864628f418fc00e8c573d29a1b +Author: Simon van der Linden +Date: Tue Jan 18 12:57:13 2011 +0100 + + Raise required versions of GLib and GObject-Introspection + + https://bugzilla.gnome.org/show_bug.cgi?id=612126 + + configure.ac | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 761e98d32729f5894f4c75a54c65ed11329dc9d5 +Author: Martin Pitt +Date: Tue Jan 18 12:52:32 2011 +0100 + + pygi-convert.sh: Handle keysyms + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d62cdfa38a675c1daf3bc12d5cd769434eea5dc8 +Author: Martin Pitt +Date: Tue Jan 18 12:14:09 2011 +0100 + + GLib overrides: Add test case for array variant building + + tests/test_overrides.py | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 69a78307f3762e3f54d28d98514cec7d31ff20db +Author: Tomeu Vizoso +Date: Tue Jan 18 10:21:03 2011 +0100 + + Remove cairo.RectangleInt from the foreign module + + https://bugzilla.gnome.org/show_bug.cgi?id=639824 + + gi/pygi-foreign-cairo.c | 96 + ----------------------------------------------- + 1 files changed, 0 insertions(+), 96 deletions(-) + +commit 017680c9a5e163021628bf29543598861a3b600a +Author: Tomeu Vizoso +Date: Tue Jan 18 10:20:25 2011 +0100 + + Dont try to guess the transfer if its a boxed + + https://bugzilla.gnome.org/show_bug.cgi?id=639823 + + gi/pygi-invoke.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 771ef76574690eb98926249f38661d741d1ebbb0 +Author: Ignacio Casal Quinteiro +Date: Tue Jan 18 12:02:01 2011 +0100 + + The tags can be Empty not None. + + gi/overrides/Gtk.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b1a98083cdc50653e1d7bfb809bdf089f833df3d +Author: Martin Pitt +Date: Tue Jan 18 12:01:28 2011 +0100 + + Add Pythonic iterators and indexing to GVariant + + Add the usual set of iterators and index accessors to GLib.Variant + objects + which are containers. + + Add corresponding test cases. + + gi/overrides/GLib.py | 50 ++++++++++++++++++++++++++++++++++++++++++ + tests/test_overrides.py | 55 + +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 105 insertions(+), 0 deletions(-) + +commit ecb9f824c503c529d43e585b4cdb4c1c9ab14593 +Author: Martin Pitt +Date: Tue Jan 18 10:48:03 2011 +0100 + + Add GLib.Variant.unpack() + + This method decomposes a GLib.Variant into a native Python object, + i. e. the + counterpart of _VariantCreator. This makes it a lot nicer for + application + developers to use e. g. return values from gdbus calls. + + Add appropriate test case. + + gi/overrides/GLib.py | 45 + +++++++++++++++++++++++++++++++++++++++++++++ + tests/test_overrides.py | 33 ++++++++++++++++++++++++++++++++- + 2 files changed, 77 insertions(+), 1 deletions(-) + +commit 31c73dee34a52fd22b5ff3a23adce92cea5ddc3d +Author: Ignacio Casal Quinteiro +Date: Tue Jan 18 10:56:18 2011 +0100 + + Add override for gtk_text_buffer_insert_with_tags + + gi/overrides/Gtk.py | 12 ++++++++++++ + tests/test_overrides.py | 6 ++++++ + 2 files changed, 18 insertions(+), 0 deletions(-) + +commit fc7d7f7f153d57ff3866b7bfd5e6479d702cc4d9 +Author: Simon van der Linden +Date: Mon Jan 17 14:35:14 2011 +0100 + + Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES + + https://bugzilla.gnome.org/show_bug.cgi?id=620215 + + gi/Makefile.am | 6 ++++-- + gio/Makefile.am | 2 +- + glib/Makefile.am | 2 +- + m4/python.m4 | 7 +++++-- + tests/Makefile.am | 2 +- + 5 files changed, 12 insertions(+), 7 deletions(-) + +commit bceec758b27e6c396d17a79424633b5dc9116f54 +Author: Simon van der Linden +Date: Mon Jan 17 14:20:55 2011 +0100 + + Kill JD_CHECK_PYTHON_HEADERS + + Use AM_CHECK_PYTHON_HEADERS instead, which is identical. + + https://bugzilla.gnome.org/show_bug.cgi?id=620215 + + configure.ac | 2 +- + m4/python.m4 | 31 +------------------------------ + 2 files changed, 2 insertions(+), 31 deletions(-) + +commit e2dea065da94d17a915abe1ce4671b1dc48e02c0 +Author: Sebastian Pölsterl +Date: Mon Jan 17 19:09:27 2011 +0100 + + Revert "Override Gtk.Box.pack_start and pack_end to set default + values to be compliant with pygtk" + + This reverts commit a8c727b9c4195d8085a45661683a18614ae84485. + + Conflicts: + + gi/overrides/Gtk.py + + gi/overrides/Gtk.py | 10 ---------- + 1 files changed, 0 insertions(+), 10 deletions(-) + +commit 4fbae9629adc166627de05bb0946b71485343d69 +Author: Sebastian Pölsterl +Date: Mon Jan 17 19:08:23 2011 +0100 + + Revert "Override Gtk.CellLayout.pack_start and pack_end to add + default values to be compliant with pygtk" + + This reverts commit 232841148f35684be83a2f47b5b18da4fb74f63a. + + gi/overrides/Gtk.py | 13 ++----------- + 1 files changed, 2 insertions(+), 11 deletions(-) + +commit c054f0aca67952876b3519bb75ddc62c5517f7cb +Author: Sebastian Pölsterl +Date: Mon Jan 17 19:08:06 2011 +0100 + + Revert "Override Gtk.TreeViewColumn.pack_start, pack_end and + set_cell_data_func to add default values to be compliant with pygtk" + + This reverts commit ed7e7a8f22b1481acf78c0c2e4c489dbad72f599. + + gi/overrides/Gtk.py | 9 --------- + 1 files changed, 0 insertions(+), 9 deletions(-) + +commit 2d9534f347505573da46743b47318e08bf073aef +Author: Martin Pitt +Date: Mon Jan 17 18:54:10 2011 +0100 + + pygi-convert.sh: Handle gtk.combo_box_new_text() + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 914d3a0a29680f4d3aa0e1f8afdd625b017b013a +Author: Sebastian Pölsterl +Date: Mon Jan 17 16:57:53 2011 +0100 + + Override TreeSortable.set_sort_func and set_default_sort_func to + add default values to be pygtk compliant + + gi/overrides/Gtk.py | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit ed7e7a8f22b1481acf78c0c2e4c489dbad72f599 +Author: Sebastian Pölsterl +Date: Mon Jan 17 16:29:28 2011 +0100 + + Override Gtk.TreeViewColumn.pack_start, pack_end and + set_cell_data_func to add default values to be compliant with pygtk + + gi/overrides/Gtk.py | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit 232841148f35684be83a2f47b5b18da4fb74f63a +Author: Sebastian Pölsterl +Date: Mon Jan 17 16:28:51 2011 +0100 + + Override Gtk.CellLayout.pack_start and pack_end to add default values + to be compliant with pygtk + + gi/overrides/Gtk.py | 13 +++++++++++-- + 1 files changed, 11 insertions(+), 2 deletions(-) + +commit 1dec12826753756fcadefc8ef8c756fc902c320b +Author: Sebastian Pölsterl +Date: Mon Jan 17 15:54:32 2011 +0100 + + Override Gtk.Paned pack1 and pack2 to add default values to be + compliant with pygtk + + gi/overrides/Gtk.py | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit a8c727b9c4195d8085a45661683a18614ae84485 +Author: Sebastian Pölsterl +Date: Mon Jan 17 15:46:25 2011 +0100 + + Override Gtk.Box.pack_start and pack_end to set default values to + be compliant with pygtk + + gi/overrides/Gtk.py | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit 7cc8ac35bb0d8dbf7d66f014f8cd7ff070b3acb8 +Author: Steve Frécinaux +Date: Wed Aug 4 00:30:05 2010 +0200 + + Handle GObject subclasses in the property helper. + + https://bugzilla.gnome.org/show_bug.cgi?id=625982 + + gobject/propertyhelper.py | 26 +++++++++++++------------- + tests/test_properties.py | 9 +++++++++ + 2 files changed, 22 insertions(+), 13 deletions(-) + +commit 7a0548dbfbdfe481f75315b6bc7824a9f1a8a87b +Author: Martin Pitt +Date: Mon Jan 17 17:52:15 2011 +0100 + + Fix handling of unicode for GtkTreeModels + + The code previously converted an unicode object into unicode, but + in Python 2.X + models actually have to specify 'str' (GTK expects a gchararray). So + encode to + UTF-8 instead to get what GTK expects. + + Add corresponding test case. + + gi/overrides/Gtk.py | 2 +- + tests/test_overrides.py | 12 +++++++++++- + 2 files changed, 12 insertions(+), 2 deletions(-) + +commit 09c21c79fb6063c8451f53d4588363d2be7239f4 +Author: Laszlo Pandy +Date: Mon Jan 17 16:46:08 2011 +0100 + + In IntrospectionModule and DynamicModule classes, make all instance + attributes start with an underscore. + + This changes IntrospectionModule.version to _version and + DynamicModule.introspection_module to _introspection_module. + This is done to mark the attributes as private, and also avoid name + collisions with attributes from the typelib. + In Gstreamer, there is a function gst_version, which was previously + inaccessible because of IntrospectionModule.version overriding it. + + gi/module.py | 26 +++++++++++++------------- + gi/overrides/GIMarshallingTests.py | 2 +- + gi/overrides/GLib.py | 2 +- + gi/overrides/Gdk.py | 10 +++++----- + gi/overrides/Gtk.py | 2 +- + gi/overrides/Pango.py | 2 +- + gi/overrides/__init__.py | 2 +- + tests/test_everything.py | 2 +- + 8 files changed, 24 insertions(+), 24 deletions(-) + +commit 2c70beca9e76e4dc253453c556e6985ce59a3dd9 +Author: Laszlo Pandy +Date: Mon Jan 17 16:17:25 2011 +0100 + + Amend previous enum wrapping commit to remove redundant setting of + __info__ attribute. + + gi/module.py | 2 +- + gi/types.py | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 6fbb6be5a5d0d9cd43e1504b8dda5aa75feb95ca +Author: Martin Pitt +Date: Mon Jan 17 16:16:45 2011 +0100 + + pygi-convert.sh: Handle GdkPixbuf.InterpType + + pygi-convert.sh | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 66a5784f4ab5de5b6d8d51eb4ce869fa26f6a601 +Author: Laszlo Pandy +Date: Mon Jan 17 15:43:34 2011 +0100 + + Fix wrapping of enums: Create new Python type for each non-gtype enum. + + Previously non-gtype enums used the same class, which meant they + were all the same type. + This caused another problem that since they were all the same class, + attributes from different enums were available from each other. + + A new test case is created to check for this bug. It requires a new + enum from the GIMarshallingTests (updating gobject-introspection + will be required). + + gi/module.py | 2 +- + gi/types.py | 2 ++ + tests/test_gi.py | 10 ++++++++++ + 3 files changed, 13 insertions(+), 1 deletions(-) + +commit da50d5620a42046d4fc905bb28a0890d73533cb1 +Author: Tomeu Vizoso +Date: Mon Dec 13 18:03:51 2010 +0100 + + Use g_vfunc_info_invoke for chaining up in vfuncs + + https://bugzilla.gnome.org/show_bug.cgi?id=637165 + + gi/pygi-info.c | 4 +- + gi/pygi-invoke.c | 72 + +++++++++++++++++++++++++++++++++++++++++------------ + gi/pygi-invoke.h | 3 +- + gi/types.py | 28 ++++++++++++++++++++- + tests/test_gi.py | 5 ++- + 5 files changed, 89 insertions(+), 23 deletions(-) + +commit 8ceef79c98a1c2e22ed8ab655ef1169f1763dd23 +Author: Simon van der Linden +Date: Fri Dec 31 18:38:04 2010 +0100 + + Move pyglib_{main_context, option_context, option_group}_new into + _PyGLib_API + + _PyG{MainContext, OptionContext, and OptionGroup_Type} were not + be initialized + when used inside the glib module, since pyglib_init is not called. + + pyglib.c is compiled as a stand-alone library loaded by the _glib + module that + declares the above-mentioned types. Hence, they cannot be accessed + by the + former. This patch moves the functions that need those symbols + into the + glib._glib module and exports them to the pyglib library through + _PyGLib_API. + + https://bugzilla.gnome.org/show_bug.cgi?id=636656 + + glib/glibmodule.c | 5 +++- + glib/pyglib-private.h | 3 ++ + glib/pyglib.c | 48 + ++-------------------------------------------- + glib/pygmaincontext.c | 22 +++++++++++++++++++++ + glib/pygmaincontext.h | 2 +- + glib/pygmainloop.c | 2 +- + glib/pygoptioncontext.c | 21 ++++++++++++++++++++ + glib/pygoptioncontext.h | 2 + + glib/pygoptiongroup.c | 26 +++++++++++++++++++++++++ + glib/pygoptiongroup.h | 2 + + glib/pygsource.c | 2 +- + 11 files changed, 86 insertions(+), 49 deletions(-) + +commit 17caffe4eeefeaf33a56ececbc6c7454f60b9d76 +Author: Martin Pitt +Date: Mon Jan 17 14:51:26 2011 +0100 + + pygi-convert.sh: Handle Gdk.DragAction + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit aa390aa80f06ac83ec89e5c5ee143d21ace97917 +Author: Martin Pitt +Date: Mon Jan 17 14:46:58 2011 +0100 + + pygi-convert.sh: Generalize Gtk.Settings migration + + There are other GSettings.get_* functions like get_for_screen(). + + pygi-convert.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2e6d5bb49425e6087ca61765ecb72e7a760f2ab2 +Author: Martin Pitt +Date: Mon Jan 17 11:22:46 2011 +0100 + + pygi-convert.sh: Don't change the name of "glib" submodules + + This particular affects dbus.mainloop.glib.* + + pygi-convert.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3887b030fc19d25e0cd7b4ed504f4ed23363c3d6 +Author: Paolo Borelli +Date: Sun Jan 16 22:09:56 2011 +0100 + + Plug another memory leak + + Do not leak interface info in (g|s)_et_property. + + gi/pygi-property.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit a4950b4cbb3c7567a8586061bb361adb7d9afb98 +Author: Paolo Borelli +Date: Sun Jan 16 21:43:30 2011 +0100 + + Plug a small memory leak. + + Do not leak type_info in find_vfunc_info + + gi/gimodule.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit d0cbcc45366d40702c69cef207d3c0f361260c02 +Author: Paolo Borelli +Date: Sun Jan 16 12:16:31 2011 +0100 + + Override Table.attach() to behave like pygtk + + It is fairly common and even gtk itself still has attach_defaults. + + gi/overrides/Gtk.py | 3 +++ + tests/test_overrides.py | 4 ++++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit 6409d659326bf3cefdf6051379e8bc2031f16733 +Author: Martin Pitt +Date: Sat Jan 15 11:20:23 2011 -0600 + + pygi-convert.sh: Convert Pango.WrapMode + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 6aaa6a38198e84a189ca1e8d26b1871d5b6bb711 +Author: Martin Pitt +Date: Sat Jan 15 11:17:09 2011 -0600 + + pygi-convert.sh: Don't change the name of "gtk" submodules + + Some projects have local modules like "myproject.ui.gtk". Avoid + changing those, + just change module names which start with "gtk" or "gdk". + + pygi-convert.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit c36fbf4918c8557a8e274a12004a412da3b22b2c +Author: Laszlo Pandy +Date: Tue Jan 11 21:41:47 2011 +0100 + + Fix the __dir__() methods on DynamicModule and IntrospectionModule + + Previously the __dir__() methods did not list all attributes. + A simple test case is included. It does not test to see if + every attribute is listed, it just tests a few of each kind: + - (wrapped) typelib attributes + - class attributes and methods + - instance attributes + + A set() is used to avoid returning duplicate attributes. + The test case checks for this as well. + + https://bugzilla.gnome.org/show_bug.cgi?id=639229 + + gi/module.py | 28 +++++++++++++++++++++------- + tests/test_everything.py | 18 ++++++++++++++++++ + 2 files changed, 39 insertions(+), 7 deletions(-) + +commit 1679e6af3f212e4d4644e048dc3c6177ed3fac6b +Author: Paolo Borelli +Date: Thu Jan 13 00:02:20 2011 +0100 + + pygi-convert.sh: handle ReliefStyle + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit bd002c72675d35b5e60ab773181e7c36c30d2625 +Author: Dieter Verfaillie +Date: Tue Jan 11 22:21:18 2011 +0100 + + setup.py: fix the provides keyword argument + + setup.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 59dac72d0fa8e1d68bbbc13d76c2747f1cb11857 +Author: Dieter Verfaillie +Date: Tue Jan 11 22:19:18 2011 +0100 + + setup.py: use the same spaces-less format for all setup() parameters + + setup.py | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 4992dca9f5cea68d85eb2ed86105c9c6b8311d79 +Author: Laszlo Pandy +Date: Tue Jan 11 19:30:38 2011 +0100 + + Add a __repr__() method to DynamicModule. + + This patch adds a __repr__() method to DynamicModule so that modules + provide a + meaningful string with the typelib path included: + + >>> from gi.repository import Gtk + >>> Gtk + + + https://bugzilla.gnome.org/show_bug.cgi?id=639232 + + gi/module.py | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit 2ffaec59e7349c145a0e2a5edba2ffb7d8628369 +Author: Tomeu Vizoso +Date: Tue Jan 11 19:40:19 2011 +0100 + + Go back to using getattr() in DynamicModule.__getattr__ + + Breaks marshalling of some types + + gi/module.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 52a298cc0f05ceec96457f17f9a801e9838fb757 +Author: Laszlo Pandy +Date: Tue Jan 11 19:26:50 2011 +0100 + + Change __dir__() to report all the attributes that __getattr__ + supports + + Change DynamicModule.__dir__() to return the local class members as + well as the + typelib attributes. + + Change DynamicModule.__getattr__() to call + IntrospectionModule.__getattr__() + directly, so that it won't inadvertently return class attributes from + IntrospectionModule. + + https://bugzilla.gnome.org/show_bug.cgi?id=639229 + + gi/module.py | 10 +++++++--- + 1 files changed, 7 insertions(+), 3 deletions(-) + +commit 202a268db7f98f5a3c525c6e65ec4bff1917257e +Author: Emilio Pozuelo Monfort +Date: Sat Jan 8 02:19:52 2011 +0000 + + Bump the minimum gio dependency + + Needed for G_TYPE_CONVERTER_FLAGS and others. + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit c3aa36151fdef9ed9884d93114786bbe86387983 +Author: Tomeu Vizoso +Date: Fri Jan 7 12:58:11 2011 +0100 + + Add test for incorrect attributes in Gdk.Event + + tests/test_overrides.py | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 204b45c7e95eb50d9e3843127fb10e13b1b17fee +Author: Simon van der Linden +Date: Sun Jan 2 19:25:55 2011 +0100 + + Don't call getattr again in gi.overrides.Gdk.Event.__getattr__ + + __getattr__ is only called when the attribute is not found through + the normal + mechanism, so getattr must not be called again in __getattr__ + (which would + create an infinite loop). + + Another possibility would be to implement __getattribute__ instead, + which is + called in place of the normal mechanism. In that case, calling + getattr would be + needed for normal attributes. + + https://bugzilla.gnome.org/show_bug.cgi?id=638523 + + gi/overrides/Gdk.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 6cf298ca5565d0eb99824f050ff47407e50a5c01 +Author: Mike Gorse +Date: Fri Jan 7 09:08:31 2011 +0100 + + Release allocated array of arguments when handling closures + + https://bugzilla.gnome.org/show_bug.cgi?id=638847 + + gi/pygi-closure.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 1be76d5e006efa24598ff7bf26153660dbe0a890 +Author: Mike Gorse +Date: Fri Jan 7 09:07:35 2011 +0100 + + Release GIValueInfo when checking an enum argument + + https://bugzilla.gnome.org/show_bug.cgi?id=638847 + + gi/pygi-argument.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 8d5a7857876669f56bb03bf618bcfdcc290721c0 +Author: Eitan Isaacson +Date: Wed Dec 22 12:34:10 2010 -0800 + + Respect different type lengths when assigning out-argument pointers. + + https://bugzilla.gnome.org/show_bug.cgi?id=637832 + + gi/pygi-closure.c | 66 + +++++++++++++++++++++++++++++++++++++++++++++-------- + 1 files changed, 56 insertions(+), 10 deletions(-) + +commit f14976ffabec28f6cafe1e37dc81d207a947d4ca +Author: Tomeu Vizoso +Date: Tue Dec 28 18:34:25 2010 +0100 + + Fix stupid name clash + + gi/module.py | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit 01b2a193d403beb861eab524300b4f1af63157ce +Author: Tomeu Vizoso +Date: Tue Dec 28 13:49:18 2010 +0100 + + Add /usr/share to XDG_DATA_DIRS when running the tests + + tests/Makefile.am | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +commit efc186f692f9eac781cc47456be74a3da7f14dcd +Author: Tomeu Vizoso +Date: Tue Dec 28 13:25:34 2010 +0100 + + Comment out tests that require SRV lookups + + tests/test_gresolver.py | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit d2462cc1ab51d76fb4625c47c3d34de1d5d0dee8 +Author: Tomeu Vizoso +Date: Tue Dec 28 13:00:16 2010 +0100 + + Use suppresion file when running valgrind + + tests/Makefile.am | 2 +- + tests/python.supp | 387 + +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 388 insertions(+), 1 deletions(-) + +commit 0ee58113ecbea72784c52de928c041fc8fc88984 +Author: Ignacio Casal Quinteiro +Date: Thu Dec 23 00:10:41 2010 +0100 + + Fix warnings. + + gi/pygi-argument.c | 16 +++++++--------- + gi/pygi-foreign-cairo.c | 13 ++----------- + gio/gfile.override | 5 ++--- + glib/pyglib-python-compat.h | 3 +++ + glib/pyglib.c | 2 +- + glib/pygmainloop.c | 3 ++- + 6 files changed, 17 insertions(+), 25 deletions(-) + +commit 78ea84cd91392400ebac5a361ef8793bfe928fd0 +Author: Jesse van den Kieboom +Date: Sun Dec 19 23:10:57 2010 +0100 + + Allow comparing Gtk.TreePath to None + + https://bugzilla.gnome.org/show_bug.cgi?id=637615 + + gi/overrides/Gtk.py | 12 ++++++------ + tests/test_overrides.py | 6 ++++++ + 2 files changed, 12 insertions(+), 6 deletions(-) + +commit 046cc5915286e042d1040271a90676b77632409e +Author: John (J5) Palmieri +Date: Thu Dec 16 15:41:10 2010 -0500 + + handle unicode objects in properties + + * There are still some cavets in Python 2: + - properties are returned as String objects with the unicode + code points + - you must add # coding=utf-8 to the top of your python file + or python + will error out if it sees embeded unicode charaters (such as when + supporting python 3 and python 2 from the same source) + + https://bugzilla.gnome.org/show_bug.cgi?id=620579 + + gobject/pygtype.c | 35 ++++++++++++++++++++++++++--------- + tests/test_properties.py | 16 ++++++++++++++++ + 2 files changed, 42 insertions(+), 9 deletions(-) + +commit 7aa783d5cd674f34da318f826bd5f4a0e09d24cb +Author: Dieter Verfaillie +Date: Tue Dec 14 12:29:54 2010 +0100 + + dsextras.py: check if gcc is there when platform is win32 and compiler + is mingw32 + + dsextras.py | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit cebf5f09a6c5018ced64f35e7747fc81b93b823e +Author: Dieter Verfaillie +Date: Tue Dec 14 12:29:01 2010 +0100 + + dsextras.py: be consistent in how distutils imports are done + + dsextras.py | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 35e590d48c78f2e76c47c2b4eaf0f7e8d1ed5c93 +Author: Dieter Verfaillie +Date: Tue Dec 14 12:25:07 2010 +0100 + + dsextras.py: add have_gcc() function + + dsextras.py | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 637c2c287cfb0e89365026531c651111f5593ac7 +Author: Dieter Verfaillie +Date: Tue Dec 14 12:24:41 2010 +0100 + + dsextras.py: use distutils.spawn.find_executable for have_pkgconfig() + + dsextras.py | 8 ++------ + 1 files changed, 2 insertions(+), 6 deletions(-) + +commit 020d00bc0ce7b77006b4d4f42d63122d79bcbf89 +Author: Dieter Verfaillie +Date: Tue Dec 14 12:22:54 2010 +0100 + + setup.py: fix another case of use True/False instead of 1/0 + + setup.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b03cc9e0d66d8caea3cd6a63db198c43de9267e9 +Author: Paolo Borelli +Date: Mon Dec 13 10:21:52 2010 +0100 + + pygi-convert.sh: improve GtkSourceView conversion + + pygi-convert.sh | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit fbc12cd7c09a67de9e28b7b0b28de9dc0e0e3418 +Author: Paolo Borelli +Date: Mon Dec 13 10:27:56 2010 +0100 + + pygi-convert.sh: Gtk.DialogFlags conversion + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 73e933d2429aea4d14e15350a538da1c5c3f71eb +Author: José Alburquerque +Date: Sun Dec 12 20:38:46 2010 -0500 + + Doc Extractor: Print the gtk-doc blocks sorted by function name. + + * codegen/docextract_to_xml.py: Print the xml of the gtk-doc + block in + alphabetical order according to the identifier (function name) + so that + the generation of xml files in the C++ bindings is deterministic. + Thanks to Krzesimir Nowak for suggesting this in a gtksourceviewmm + recent commit. + + codegen/docextract_to_xml.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit db7ffa75b007074cb6b33b547c6d8140da300a3e +Author: Paolo Borelli +Date: Mon Dec 13 00:17:26 2010 +0100 + + pygi-convert.sh: add more Gtk conversions and sort + + pygi-convert.sh | 50 ++++++++++++++++++++++++++------------------------ + 1 files changed, 26 insertions(+), 24 deletions(-) + +commit f4bfe73d0ccedf7f671d3acd6d9e262d5383b733 +Author: Paolo Borelli +Date: Mon Dec 13 00:01:40 2010 +0100 + + pygi-convert.sh: convert Atk + + pygi-convert.sh | 12 ++++++++++++ + 1 files changed, 12 insertions(+), 0 deletions(-) + +commit e55ce3667eb1d352bf96f265bf018ffe8aea75f9 +Author: Paolo Borelli +Date: Sun Dec 12 23:48:48 2010 +0100 + + pygi-convert.sh: convert a few more Gio types + + pygi-convert.sh | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit acc9f84bc6e13d76c6516cefe393d4a4f868aa24 +Author: Paolo Borelli +Date: Sun Dec 12 14:19:00 2010 +0100 + + pygi-convert.sh: more GLib conversion + + pygi-convert.sh | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit c903390814bebdc62d530472f6f94feecc59b8b3 +Author: Paolo Borelli +Date: Sun Dec 12 14:00:34 2010 +0100 + + pygi-convert.sh: remove two cases handled by overrides + + pygi-convert.sh | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit d33c987e505ec8ddffa2b8cb5526f05b9b5f62be +Author: Paolo Borelli +Date: Sun Dec 12 13:38:56 2010 +0100 + + Override Gtk.ScrolledWindow constructor + + gi/overrides/Gtk.py | 7 +++++++ + tests/test_overrides.py | 7 +++++++ + 2 files changed, 14 insertions(+), 0 deletions(-) + +commit 1c24bb089fcd69e3104ae72a0e7560a8c5a3f05b +Author: Paolo Borelli +Date: Sun Dec 12 12:32:39 2010 +0100 + + pygi-convert.sh: Fix 'find' syntax + + pygi-convert.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f0a1d6b6bb53d0fa2788d8b9027d737b0aef8dfc +Author: Paolo Borelli +Date: Sun Dec 12 12:29:38 2010 +0100 + + pygi-convert.sh: start handling Gio and GLib + + pygi-convert.sh | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +commit 365bf3251af3498dc797a58cce071805451b49b1 +Author: Paolo Borelli +Date: Sat Dec 11 23:05:31 2010 +0100 + + pygi-convert.sh: convert Gdk.ScrollDirection. + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit bca603de0f217fb290189a0ea330f82961c46d5d +Author: Paolo Borelli +Date: Sat Dec 11 15:03:21 2010 +0100 + + Override Pango.Layout constructor. + + I must take a Pango.Context argument. Unfortumately the context is + not a + gobject property so we need to jump through some oops. + + gi/overrides/Pango.py | 13 +++++++++++++ + tests/test_overrides.py | 6 ++++++ + 2 files changed, 19 insertions(+), 0 deletions(-) + +commit df233301802e3f7f9ce338cde015ca2a2fc648ab +Author: Paolo Borelli +Date: Sat Dec 11 14:18:53 2010 +0100 + + Remove Pango.FontDescription() conversion. + + It is now properly handled by an override. + + pygi-convert.sh | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit d8abcc9463542af9cd43d71849d0ad4c183b570b +Author: Paolo Borelli +Date: Fri Dec 10 14:05:20 2010 +0100 + + Override GtkAction and GtkRadioAction constructors. + + gi/overrides/Gtk.py | 20 +++++++++++++++++--- + tests/test_overrides.py | 18 ++++++++++++++++++ + 2 files changed, 35 insertions(+), 3 deletions(-) + +commit 7924b18a99a0680c04aca46be4b64a7aa507dfe5 +Author: Dmitrijs Ledkovs +Date: Sat Dec 4 22:13:28 2010 +0000 + + Override Adjustment constructor to behave like pygtk + + https://bugzilla.gnome.org/show_bug.cgi?id=636486 + + gi/overrides/Gtk.py | 7 +++++++ + tests/test_overrides.py | 9 +++++++++ + 2 files changed, 16 insertions(+), 0 deletions(-) + +commit e76352dd83c8706e68ad57d00d185da9afea99c4 +Author: John (J5) Palmieri +Date: Thu Dec 9 13:23:10 2010 -0500 + + add secondary_text apis to MessageDialog + + gi/overrides/Gtk.py | 8 ++++++++ + tests/test_overrides.py | 8 ++++++++ + 2 files changed, 16 insertions(+), 0 deletions(-) + +commit de682b2d36c362140ab7d43c0743b01ec0865a74 +Author: John (J5) Palmieri +Date: Wed Dec 8 16:39:27 2010 -0500 + + [gi] get rid of some debug prints and fix error messages + + gi/overrides/Gtk.py | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +commit dbb16571803bf51f497768bf80944514f4290ee5 +Author: Paolo Borelli +Date: Wed Dec 8 18:25:15 2010 +0100 + + Fix demo for override changes. + + demos/gtk-demo/gtk-demo.py | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 2adcd95762944a4e27123093d3c8d080e49be1ea +Author: Paolo Borelli +Date: Wed Dec 8 18:06:01 2010 +0100 + + Override Pango.FontDescription. + + demos/gtk-demo/gtk-demo.py | 2 +- + gi/overrides/Makefile.am | 1 + + gi/overrides/Pango.py | 40 + ++++++++++++++++++++++++++++++++++++++++ + tests/test_overrides.py | 7 +++++++ + 4 files changed, 49 insertions(+), 1 deletions(-) + +commit 769da968c9187414d0420412d8fb8c833d12042a +Author: Tomeu Vizoso +Date: Wed Dec 8 17:38:11 2010 +0100 + + Stop checking that all vfuncs are implemented + + Because some methods are optionally implementable but g-i won't + tell us. + + https://bugzilla.gnome.org/show_bug.cgi?id=619606 + + gi/gimodule.c | 4 +++- + gi/types.py | 12 ++---------- + tests/test_gi.py | 10 ---------- + 3 files changed, 5 insertions(+), 21 deletions(-) + +commit 167a01c46b3fa0b3c8339502c875d32bd2bca974 +Author: Paolo Borelli +Date: Wed Dec 8 17:37:00 2010 +0100 + + Fix usage of TreeIter api that is now an override. + + demos/gtk-demo/gtk-demo.py | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit d2cfd6e9250d40de7c715ac74e299deddf137683 +Author: Paolo Borelli +Date: Wed Dec 8 17:34:54 2010 +0100 + + Fix Gtk.Label(label="Foo") + + Use 'label' as an argument name instead of 'str', otherwise we may + end up up with two 'label' in the kwds dict. Besides 'str' is a + reserved keyword. + + gi/overrides/Gtk.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit c0c684c9bb4e2bc08d7cb6ac246705e8a3b77656 +Author: Paolo Borelli +Date: Wed Dec 8 14:16:39 2010 +0100 + + Fix typo when raising an exception + + gi/types.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 88c9a3ad49d9fcf779c3523672d8bf4767910301 +Author: Sebastian Pölsterl +Date: Wed Dec 8 10:46:27 2010 +0100 + + pygi-convert.sh: Added more conversions + + pygi-convert.sh | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +commit 4d8d96326b2cac91e6d75e6601b92e202d1918ff +Author: Paolo Borelli +Date: Tue Dec 7 20:39:15 2010 +0100 + + Override LinkButton constructor to make 'uri' mandatory + + gi/overrides/Gtk.py | 7 +++++++ + tests/test_overrides.py | 6 ++++++ + 2 files changed, 13 insertions(+), 0 deletions(-) + +commit f4f7fb35af1b41598dc050f5df155a01c370a920 +Author: Dmitry Morozov +Date: Sat Dec 4 19:19:19 2010 +0600 + + Container should be iterable. + + gi/overrides/Gtk.py | 9 +++++++++ + tests/test_overrides.py | 6 +++++- + 2 files changed, 14 insertions(+), 1 deletions(-) + +commit d2ad05d6d8d53b941e0ad33fcb200f1245a2d308 +Author: Paolo Borelli +Date: Tue Dec 7 14:13:00 2010 +0100 + + No need to import Gdk + + gi/overrides/Gtk.py | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit b6a40badf0b2b59e690ce818efb03c7c816b8a04 +Author: Paolo Borelli +Date: Tue Dec 7 14:07:53 2010 +0100 + + Remove semicolumns + + gi/overrides/Gtk.py | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +commit cdc9c26553bf47ea488676e7bdc5f8ab0a2c906b +Author: John (J5) Palmieri +Date: Mon Dec 6 16:05:30 2010 -0500 + + [gi] make sure Gtk.Button override passes all keywords to parent + constructor + + gi/overrides/Gtk.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit cede81ad65db017e95543d8d35715751aa202fed +Author: Paolo Borelli +Date: Sun Dec 5 13:31:20 2010 +0100 + + Fix cut&paste error in the Label override + + gi/overrides/Gtk.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 607c59b74ebbc1e39cb4121c870b689e1888c106 +Author: Paolo Borelli +Date: Sat Dec 4 16:03:27 2010 +0100 + + pygi-convert.sh: handle TextWindowType + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit dfeabe0b68938e27da2e65903983b5113dc422f1 +Author: Paolo Borelli +Date: Sat Dec 4 15:49:15 2010 +0100 + + Override Label constructor to behave like pygtk + + gi/overrides/Gtk.py | 7 +++++++ + tests/test_overrides.py | 4 ++++ + 2 files changed, 11 insertions(+), 0 deletions(-) + +commit da4e045e5abbed2796cc4ed39df35a0dde2de31b +Author: Paolo Borelli +Date: Sat Dec 4 15:40:35 2010 +0100 + + Override GtkTable constructor to behave like pygtk + + gi/overrides/Gtk.py | 7 +++++++ + tests/test_overrides.py | 12 ++++++++++++ + 2 files changed, 19 insertions(+), 0 deletions(-) + +commit 81452c23ab1befa59ff375692e582791432796a5 +Author: Paolo Borelli +Date: Sat Dec 4 12:59:43 2010 +0100 + + pygi-convert.sh: convert MovementStep + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 4d097eea94258eda0c328711491fd456cbd6741b +Author: Paolo Borelli +Date: Sat Dec 4 11:57:02 2010 +0100 + + Update Gdk overrides to work with latest Gtk+ 3 + + For now added consitionals on version == 2.0, but maybe at some + point we + shuld just clean up the old stuff. + + gi/overrides/Gdk.py | 22 ++++++++++++++++------ + 1 files changed, 16 insertions(+), 6 deletions(-) + +commit cda317195566711d66190145b545e26ed7226172 +Author: Johan Dahlin +Date: Thu Dec 2 23:47:40 2010 -0200 + + Gtk: add an override for Gtk.main_quit + + Override gtk.main_quit so that it can be used as a callback + to signals, most importantly to the destroy signal of a widget: + + widget.connect('destroy', gtk.main_quit) + + This is compatible with what PyGTK does. + + https://bugzilla.gnome.org/show_bug.cgi?id=636336 + + gi/overrides/Gtk.py | 5 ++++- + gi/overrides/__init__.py | 27 +++++++++++++++++++++++++-- + 2 files changed, 29 insertions(+), 3 deletions(-) + +commit 82689cbf53d92b1b951a459fe3de0e1d3a91791a +Author: John (J5) Palmieri +Date: Thu Dec 2 16:27:04 2010 -0500 + + [gi] handle subtypes when inserting into tree models + + * Often modules will give back basic types wrapped in a subtype. + This is the case with D-Bus where you may want to keep some of the + metadata around. More often than not, the developer is just looking + to use the basetype. + + * This override checks the column type and handles basic types such as + gchararrays, ints, longs, floats and doubles, converting them + to their + base types before sending them to the generic GI type marshaller. + + * More types may need to be supported but these are the common + cases where + apps break. + + https://bugzilla.gnome.org/show_bug.cgi?id=635172 + + gi/overrides/Gtk.py | 38 ++++++++++++++++++++++++++++++++++++-- + tests/test_overrides.py | 8 +++++++- + 2 files changed, 43 insertions(+), 3 deletions(-) + +commit 677490e9402bad7b7c2a832345ef54f7f0c5fc7f +Author: Paolo Borelli +Date: Fri Dec 3 23:39:50 2010 +0100 + + Override TreeSelection.select_path and TreeView.scroll_to_cell + + The "path" argument may also be a string or a tuple + + gi/overrides/Gtk.py | 10 ++++++++++ + tests/test_overrides.py | 29 +++++++++++++++++++++++++++++ + 2 files changed, 39 insertions(+), 0 deletions(-) + +commit dacfe618fa244445c979f1a5efa80c1f9a5a4ae9 +Author: Paolo Borelli +Date: Fri Dec 3 23:29:00 2010 +0100 + + Override TreePath.__new__ + + Instead of having a private _tree_path_from_string it is cleaner to + override __new__ and it will be useful for all the api that take a + TreePath or a string or a tuple. + + gi/overrides/Gtk.py | 33 +++++++++++++++------------------ + tests/test_overrides.py | 18 ++++++++++++++++++ + 2 files changed, 33 insertions(+), 18 deletions(-) + +commit 7a8af9e220ee48aa28f6b025c5dae324b14fe128 +Author: Paolo Borelli +Date: Sun Nov 28 13:02:30 2010 +0100 + + Override Container to behave like a sequence + + gi/overrides/Gtk.py | 6 ++++++ + tests/test_overrides.py | 11 +++++++++++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit 94e8befc935d4a6c7f766e34195e10fc3fb3b93a +Author: John (J5) Palmieri +Date: Tue Nov 30 16:57:05 2010 -0500 + + refactor Jonathan Matthew recurse vfunc patch so it applys and clean + up a bit + + * this patch does the recursion using the previous patche's support + functions + + gi/types.py | 55 + +++++++++++++++++++++++++++++++++++++++++++++---------- + 1 files changed, 45 insertions(+), 10 deletions(-) + +commit 9c5aee4f06f92457f9ae987656c0c469f76d0ee8 +Author: Jonathan Matthew +Date: Thu Jul 22 23:19:51 2010 +1000 + + Recurse up through base classes when setting up vfuncs + + * this patch adds the support methods to do the recursion + + https://bugzilla.gnome.org/show_bug.cgi?id=625033 + + gi/gimodule.c | 130 + +++++++++++++++++++++++++++++++++++++++--------------- + tests/test_gi.py | 37 +++++++++++++++ + 2 files changed, 131 insertions(+), 36 deletions(-) + +commit 78358e1ab54d02317f397276adee03ecb2187588 +Author: John (J5) Palmieri +Date: Mon Nov 29 18:29:57 2010 -0500 + + add a profiling torture test for when we fix up invoke + + tests/test_everything.py | 67 + ++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 67 insertions(+), 0 deletions(-) + +commit 792e679c06df4357843fd310c7953a931172fc99 +Author: John (J5) Palmieri +Date: Mon Nov 29 16:41:38 2010 -0500 + + moved dynamic and base modules outside of gtk-2.0 directory + + * do not move header files yet as they are mostly used by static + bindings + * do not remove pygtk.pth and pygtk.py files yet - there is a debate + on moving + these back to pygtk but you might want to import gio static + bindings without + having to have pygtk installed + * I have not tested this with pygtk, committing it so we can find + out if it + causes any issues with legacy modules and code + + gi/Makefile.am | 2 +- + gi/overrides/Makefile.am | 2 +- + gi/repository/Makefile.am | 2 +- + glib/Makefile.am | 2 +- + gobject/Makefile.am | 2 +- + tests/test_gi.py | 2 -- + tests/test_overrides.py | 3 --- + 7 files changed, 5 insertions(+), 10 deletions(-) + +commit c587e1ace7429195ac6fd4db03d2f33e2af09838 +Author: John (J5) Palmieri +Date: Mon Nov 29 15:11:46 2010 -0500 + + add test for inout argument count + + tests/test_gi.py | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 5de88b4bcffdafcf8c7c20033cdf95dc690199ce +Author: John (J5) Palmieri +Date: Mon Nov 22 19:17:23 2010 -0500 + + [gi] add check for UNICHAR + + https://bugzilla.gnome.org/show_bug.cgi?id=623615 + + gi/pygi-argument.c | 27 ++++++++++++++++++++++++++- + tests/test_everything.py | 17 +++++++++++++++-- + 2 files changed, 41 insertions(+), 3 deletions(-) + +commit f129b3db2c78d3cce3614993fdd1619fb9eb9c79 +Author: Paolo Borelli +Date: Sun Nov 21 12:16:53 2010 +0100 + + Support gunichar + + https://bugzilla.gnome.org/show_bug.cgi?id=623615 + + gi/pygi-argument.c | 60 + ++++++++++++++++++++++++++++++++++++++++++++++ + gi/pygi-info.c | 5 ++++ + tests/test_everything.py | 5 ++++ + 3 files changed, 70 insertions(+), 0 deletions(-) + +commit fd2c0288eb67823fca1265348a27a9f8f147ae50 +Author: Paolo Borelli +Date: Sat Nov 27 23:01:42 2010 +0100 + + pygi-convert.sh: gtk.accel_map -> Gtk.AccelMap._ + + pygi-convert.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 13d0ff1d9c129bb458e234b630ebe920b50e2e0f +Author: Paolo Borelli +Date: Sat Nov 27 22:34:13 2010 +0100 + + pygi-convert.sh: handle "from gtk import gdk" + + pygi-convert.sh | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 63a97634031c3d159ad77fdaa1f6341d7656eb07 +Author: Paolo Borelli +Date: Sat Nov 27 22:23:24 2010 +0100 + + pygi-convert.sh: add some Pango special cases + + pygi-convert.sh | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 57e42bf4230d1aa20a47e3b0df2e509602333892 +Author: Paolo Borelli +Date: Sat Nov 27 19:51:38 2010 +0100 + + Override TextIter (begins|ends|toggles)_tag() + + Make the tag argument optional. + + gi/overrides/Gtk.py | 9 +++++++++ + tests/test_overrides.py | 17 +++++++++++++++++ + 2 files changed, 26 insertions(+), 0 deletions(-) + +commit 828b698e47ee819a60d24a772a3cc51ff9cd6601 +Author: Paolo Borelli +Date: Sat Nov 27 19:32:48 2010 +0100 + + Override TextBuffer.set_text() to make length optional + + gi/overrides/Gtk.py | 3 +++ + tests/test_overrides.py | 11 ++++++++++- + 2 files changed, 13 insertions(+), 1 deletions(-) + +commit bf55dc862755a57bb1b998702d284fc460e88a30 +Author: Paolo Borelli +Date: Sat Nov 27 16:46:40 2010 +0100 + + Override TextBuffer.create_mark() + + Override create_mark to make the left_gravity argument optional + + gi/overrides/Gtk.py | 3 +++ + tests/test_overrides.py | 3 +++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 94c0e2f71636d055bdebe3ec378f3d339eea66c9 +Author: Paolo Borelli +Date: Sat Nov 27 16:10:33 2010 +0100 + + Fix TextBuffer.get_selection_bounds() override + + Fix the override and add unit test + + gi/overrides/Gtk.py | 8 +++++--- + tests/test_overrides.py | 7 +++++++ + 2 files changed, 12 insertions(+), 3 deletions(-) + +commit 0cd717e3926276540b9145e58a4a3368136b00de +Author: John (J5) Palmieri +Date: Mon Nov 22 18:35:09 2010 -0500 + + [gi] fix ActionGroup constructor to allow other keyword properties + to be set + + gi/overrides/Gtk.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 226777cdb70fc72d206664ffd8b6737f7239d23f +Author: John (J5) Palmieri +Date: Mon Nov 22 18:32:28 2010 -0500 + + [gi] require the name parameter when creatin a Gtk.ActionGroup + + gi/overrides/Gtk.py | 3 +++ + tests/test_overrides.py | 2 ++ + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit d0049fa9982d13b3553b05569fb0a227e48b6647 +Author: Paolo Borelli +Date: Sun Nov 21 15:20:58 2010 +0100 + + Override UIManager.insert_action_group + + https://bugzilla.gnome.org/show_bug.cgi?id=635437 + + gi/overrides/Gtk.py | 3 +++ + tests/test_overrides.py | 34 +++++++++++++++++++++------------- + 2 files changed, 24 insertions(+), 13 deletions(-) + +commit e1db544e46aeed984133896af34b671a6a5547df +Author: Paolo Borelli +Date: Sun Nov 21 23:03:25 2010 +0100 + + Override TreeModel.get() to return a tuple + + https://bugzilla.gnome.org/show_bug.cgi?id=635466 + + gi/overrides/Gtk.py | 15 +++++++++++++++ + tests/test_overrides.py | 6 ++++++ + 2 files changed, 21 insertions(+), 0 deletions(-) + +commit a5e806ad8a8b279402ff7adb1c1cdc04f9f3da76 +Author: Paolo Borelli +Date: Sun Nov 21 21:57:40 2010 +0100 + + Make TreeSelection.get_selected_rows compatible with PyGtk + + https://bugzilla.gnome.org/show_bug.cgi?id=635464 + + gi/overrides/Gtk.py | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 1c537bc67107948c92b51ba6ba749747e84263e2 +Author: John (J5) Palmieri +Date: Mon Nov 22 15:04:00 2010 -0500 + + [gi] switch to using sequences/tuples when marshalling + cairo_rectangle_int_t + + * Upstream pycairo didn't want to add a new wrapper for + cairo_rectangle_int_t + * this works around that issue by using 4 element squences instead + which + should be accepted by pycairo for any API that takes a rect + + gi/pygi-foreign-cairo.c | 85 + +++++++++++++++++++++++++++++++++++----------- + 1 files changed, 64 insertions(+), 21 deletions(-) + +commit 4cede8f12321bed6c3b71813a62c01b61853ba69 +Author: John (J5) Palmieri +Date: Fri Nov 19 16:46:53 2010 -0500 + + [gi] overrides for treeview Drag and Drop + + https://bugzilla.gnome.org/show_bug.cgi?id=627367 + + gi/overrides/Gdk.py | 7 +++++++ + gi/overrides/Gtk.py | 25 +++++++++++++++++++++++++ + 2 files changed, 32 insertions(+), 0 deletions(-) + +commit 3fd51bb903724b752f72f49c7cb35652b819791d +Author: John (J5) Palmieri +Date: Fri Nov 19 16:44:32 2010 -0500 + + [gi] when encountering guint8 arrays treat them as byte arrays + + * In Python 2 this means returning a PyString object + * In Python 3 we return a PyBytes object + + https://bugzilla.gnome.org/show_bug.cgi?id=627367 + + gi/pygi-argument.c | 65 + ++++++++++++++++++++++++++++++++++++++++++--------- + tests/test_gi.py | 6 +++- + 2 files changed, 57 insertions(+), 14 deletions(-) + +commit 7ddb0f7fd8b1b9e8f691c6d42a83cb16c6561d26 +Author: Martin Pitt +Date: Fri Nov 19 18:19:38 2010 +0100 + + pygi-convert.sh: Add pynotify -> Notify + + pygi-convert.sh | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit bf03d4db03a7739ac16ddc4e614441557ede554d +Author: Martin Pitt +Date: Fri Nov 19 09:08:07 2010 +0100 + + pygi-convert.sh: Remove sugar specifics, and allow command line + file list + + This script is generally useful for converting pygtk2 projects, + not just for + sugar. Remove the sugar specific bits, since they will just cause + errors. + + Also allow the user to specify the files to convert as command line + arguments. If not given, all *.py files will be processed. + + https://bugzilla.gnome.org/show_bug.cgi?id=635244 + + pygi-convert.sh | 25 +++++-------------------- + 1 files changed, 5 insertions(+), 20 deletions(-) + +commit 18f5d229d3a4b9520c1c456be2635c8e36015c12 +Author: Martin Pitt +Date: Fri Nov 19 09:00:35 2010 +0100 + + pygi-convert.sh: Cover Message and Buttons types + + https://bugzilla.gnome.org/show_bug.cgi?id=635244 + + pygi-convert.sh | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit ef74273c2043944708515e59a654ebe4944b46ff +Author: John (J5) Palmieri +Date: Thu Nov 18 13:54:48 2010 -0500 + + [gi] fix actiongroup test since actions are hashed + + * when actions are listed they may not show up in the order they + were entered + since they reside in an unordered hash internally + + tests/test_overrides.py | 9 +++++---- + 1 files changed, 5 insertions(+), 4 deletions(-) + +commit 2c25886bf6710568d0646f82dce4770faa44c40d +Author: John (J5) Palmieri +Date: Wed Nov 17 14:38:09 2010 -0500 + + [gi] when converting to UTF-8 accept Python Unicode objects as input + (Python 2) + + https://bugzilla.gnome.org/show_bug.cgi?id=620579 + + gi/pygi-argument.c | 14 ++++++++++++-- + glib/pyglib-python-compat.h | 5 +++++ + tests/test_gi.py | 3 +++ + 3 files changed, 20 insertions(+), 2 deletions(-) + +commit 8c2d32c8205b971b4353e3d5d2ed1efa6ef0e06c +Author: Damien Caliste +Date: Fri Nov 12 10:20:32 2010 +0100 + + Correct a bug in the freeing of memory in pygi-invoke.c. + + When a method with inout arguments is called from Python with + a wrong number of arguments, the system crashs because of an + assertion fail. This patch corrects this behaviour. + + https://bugzilla.gnome.org/show_bug.cgi?id=634671 + + gi/pygi-invoke.c | 25 ++++++++++++++----------- + 1 files changed, 14 insertions(+), 11 deletions(-) + commit d9bab3b185bb59bd29e3c3f6225f3636f58ec45e Author: John (J5) Palmieri -Date: Wed Nov 10 14:11:56 2010 -0500 +Date: Wed Nov 10 14:11:56 2010 -0500 update news for release @@ -10,7 +2909,7 @@ Date: Wed Nov 10 14:11:56 2010 -0500 commit 1338a95339e21cc02b9df6d10166996c8b97a6bf Author: Jonathan Matthew -Date: Tue Sep 28 13:44:13 2010 +1000 +Date: Tue Sep 28 13:44:13 2010 +1000 Implement richcompare for GIBaseInfo @@ -21,7 +2920,7 @@ Date: Tue Sep 28 13:44:13 2010 +1000 commit 9ce3edf69824935aeca9e676eaa9782786c22a97 Author: John (J5) Palmieri -Date: Tue Nov 9 22:57:41 2010 -0500 +Date: Tue Nov 9 22:57:41 2010 -0500 [gi] add the rectangle_int_t forign cairo type @@ -37,7 +2936,7 @@ Date: Tue Nov 9 22:57:41 2010 -0500 commit 68b8211d8b014cf26ca7e9ab751fb3f61f228290 Author: John (J5) Palmieri -Date: Mon Oct 25 18:28:36 2010 -0400 +Date: Mon Oct 25 18:28:36 2010 -0400 add a foreign type for cairo_rectangle_int_t and allow it to be caller-allocated @@ -59,22 +2958,22 @@ Date: Mon Oct 25 18:28:36 2010 -0400 gi/pygi-foreign-cairo.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++ - gi/pygi-invoke.c | 15 ++++++++++- + gi/pygi-invoke.c | 15 ++++++++++- 2 files changed, 70 insertions(+), 2 deletions(-) commit ce8b948310220288e9eef904eef4ec8f4e24a376 Author: John (J5) Palmieri -Date: Tue Nov 9 22:11:51 2010 -0500 +Date: Tue Nov 9 22:11:51 2010 -0500 [gi] add overrides to Gtk.Editable - gi/overrides/Gtk.py | 17 +++++++++++++++++ + gi/overrides/Gtk.py | 17 +++++++++++++++++ tests/test_overrides.py | 12 ++++++++++++ 2 files changed, 29 insertions(+), 0 deletions(-) commit 87dbc716f26cefc0e9427c3d6e8befe8eabd3d1e Author: John (J5) Palmieri -Date: Tue Nov 9 21:12:54 2010 -0500 +Date: Tue Nov 9 21:12:54 2010 -0500 [gi] handle virtual invokers @@ -88,12 +2987,12 @@ Date: Tue Nov 9 21:12:54 2010 -0500 where vfunc is named differently from their invoker gi/pygi-info.c | 16 ++++++++++++++++ - gi/types.py | 2 +- + gi/types.py | 2 +- 2 files changed, 17 insertions(+), 1 deletions(-) commit 540e9f1f349ba3625e28b7673c92210eb8974098 Author: John (J5) Palmieri -Date: Tue Nov 9 12:17:05 2010 -0500 +Date: Tue Nov 9 12:17:05 2010 -0500 add overrides for the insert* apis of list_store and tree_store @@ -102,24 +3001,24 @@ Date: Tue Nov 9 12:17:05 2010 -0500 https://bugzilla.gnome.org/show_bug.cgi?id=634423 - gi/overrides/Gtk.py | 80 + gi/overrides/Gtk.py | 80 ++++++++++++++++++++++++++++++++++++---------- tests/test_overrides.py | 53 ++++++++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 19 deletions(-) commit 0bcb58b9541d9ae52e1d96e6239e9dbe0698872a Author: John (J5) Palmieri -Date: Fri Nov 5 13:56:12 2010 -0400 +Date: Fri Nov 5 13:56:12 2010 -0400 fix dialogs overrides which were relying on broken inheritance behavior - gi/overrides/Gtk.py | 14 ++++++++++++-- + gi/overrides/Gtk.py | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-) commit 89c104d17d79d7b935cd76101cba19d49390f7be Author: John (J5) Palmieri -Date: Thu Nov 4 12:00:14 2010 -0400 +Date: Thu Nov 4 12:00:14 2010 -0400 Add a overrides registry so we can refrence overrides inside the module @@ -138,26 +3037,26 @@ Date: Thu Nov 4 12:00:14 2010 -0400 https://bugzilla.gnome.org/show_bug.cgi?id=633347 - gi/module.py | 12 +++++++++- - gi/overrides/GIMarshallingTests.py | 2 +- - gi/overrides/Gdk.py | 2 +- - gi/overrides/Gtk.py | 2 +- - gi/overrides/__init__.py | 43 + gi/module.py | 12 +++++++++- + gi/overrides/GIMarshallingTests.py | 2 +- + gi/overrides/Gdk.py | 2 +- + gi/overrides/Gtk.py | 2 +- + gi/overrides/__init__.py | 43 ++++++++++++++++++++++++++++++++++++ - gi/types.py | 8 ------ - tests/test_overrides.py | 27 ++++++++++++++++++++++ + gi/types.py | 8 ------ + tests/test_overrides.py | 27 ++++++++++++++++++++++ 7 files changed, 84 insertions(+), 12 deletions(-) commit 878b8f630acd2146bee364054acd45cd33eea37a Merge: cdacaa9 e317838 Author: John Stowers -Date: Fri Nov 5 11:40:22 2010 +1300 +Date: Fri Nov 5 11:40:22 2010 +1300 Merge remote branch 'dieterv/setup-fixes-for-merge' commit e317838178fba5f0590fb8bd323f49602d564b53 Author: Dieter Verfaillie -Date: Thu Nov 4 11:16:43 2010 +0100 +Date: Thu Nov 4 11:16:43 2010 +0100 setup.py: ease maintenance burden for tests installation @@ -166,17 +3065,17 @@ Date: Thu Nov 4 11:16:43 2010 +0100 commit cdacaa9572893796e0f3aa3730d0191911cb29ee Author: John (J5) Palmieri -Date: Wed Nov 3 09:51:09 2010 -0400 +Date: Wed Nov 3 09:51:09 2010 -0400 fix inheritence issues in overrides - gi/overrides/Gtk.py | 79 + gi/overrides/Gtk.py | 79 ++++++++++++++++++++++++++------------------------- 1 files changed, 40 insertions(+), 39 deletions(-) commit 3d5955767d81f45e796ab2af0707533375681774 Author: Dieter Verfaillie -Date: Wed Nov 3 09:38:56 2010 +0100 +Date: Wed Nov 3 09:38:56 2010 +0100 tests: add runtests-windows.py script @@ -188,7 +3087,7 @@ Date: Wed Nov 3 09:38:56 2010 +0100 commit 8cb3f2e78161639c568110aad6a807dcf59f3ae8 Author: Dieter Verfaillie -Date: Wed Nov 3 09:35:52 2010 +0100 +Date: Wed Nov 3 09:35:52 2010 +0100 pygobject_postinstall.py: remove pygobject-2.0.pc treatment from postinstall as pkg-config on windows figures out the correct prefix @@ -201,7 +3100,7 @@ Date: Wed Nov 3 09:35:52 2010 +0100 commit 63167574df53eb481cc11b6a097b2bfe7d5747f5 Author: Dieter Verfaillie -Date: Wed Nov 3 09:34:38 2010 +0100 +Date: Wed Nov 3 09:34:38 2010 +0100 pygobject_postinstall.py: remove shortcut creation @@ -212,7 +3111,7 @@ Date: Wed Nov 3 09:34:38 2010 +0100 commit f7b12611f94fd8c27fb67a03746c10149ce6e0ef Author: Dieter Verfaillie -Date: Wed Nov 3 09:31:14 2010 +0100 +Date: Wed Nov 3 09:31:14 2010 +0100 setup.py: formatting cleanup, makes things readable @@ -223,7 +3122,7 @@ Date: Wed Nov 3 09:31:14 2010 +0100 commit a31b4196fbb4638a245430f2fdeafd7534b1d84d Author: Dieter Verfaillie -Date: Wed Nov 3 09:28:36 2010 +0100 +Date: Wed Nov 3 09:28:36 2010 +0100 setup.py: build and install tests @@ -235,7 +3134,7 @@ Date: Wed Nov 3 09:28:36 2010 +0100 commit 7c3b0c20b83c05833d73c240690dce3daf43fde8 Author: Dieter Verfaillie -Date: Wed Nov 3 09:26:59 2010 +0100 +Date: Wed Nov 3 09:26:59 2010 +0100 setup.py: install documentation when available on build system @@ -246,7 +3145,7 @@ Date: Wed Nov 3 09:26:59 2010 +0100 commit 78533d851ee1314686f18cfa793613a9cf7d6686 Author: Dieter Verfaillie -Date: Wed Nov 3 09:25:56 2010 +0100 +Date: Wed Nov 3 09:25:56 2010 +0100 setup.py: install pygobject-codegen script @@ -257,7 +3156,7 @@ Date: Wed Nov 3 09:25:56 2010 +0100 commit ad40688df533dda0b1f7be8ea37c542b8796a26b Author: Dieter Verfaillie -Date: Wed Nov 3 09:24:45 2010 +0100 +Date: Wed Nov 3 09:24:45 2010 +0100 setup.py: install fixxref.py script @@ -268,7 +3167,7 @@ Date: Wed Nov 3 09:24:45 2010 +0100 commit 21ddfc66e4e18c002a33154eb4ab81170ed71ecc Author: Dieter Verfaillie -Date: Wed Nov 3 09:23:05 2010 +0100 +Date: Wed Nov 3 09:23:05 2010 +0100 setup.py: rearrange constants @@ -279,7 +3178,7 @@ Date: Wed Nov 3 09:23:05 2010 +0100 commit 7d353d04892de67265bf693f591f37fd393de639 Author: Dieter Verfaillie -Date: Wed Nov 3 09:18:11 2010 +0100 +Date: Wed Nov 3 09:18:11 2010 +0100 setup.py: check python version and pkgconig availability before anything else @@ -291,7 +3190,7 @@ Date: Wed Nov 3 09:18:11 2010 +0100 commit 286364ed39953e942e24d5911519bcac2f90975a Author: Dieter Verfaillie -Date: Wed Nov 3 09:05:59 2010 +0100 +Date: Wed Nov 3 09:05:59 2010 +0100 setup.py: simplify sys.platform != 'win32' detection and error reporting @@ -303,7 +3202,7 @@ Date: Wed Nov 3 09:05:59 2010 +0100 commit 3f70f92904c123e6cc40929c0affd3f75d061828 Author: Dieter Verfaillie -Date: Wed Nov 3 09:02:30 2010 +0100 +Date: Wed Nov 3 09:02:30 2010 +0100 setup.py: rearrange imports @@ -314,7 +3213,7 @@ Date: Wed Nov 3 09:02:30 2010 +0100 commit 9aa54b65f729c0f3b0e96ab7ff797f87dad6a455 Author: Dieter Verfaillie -Date: Wed Nov 3 08:58:00 2010 +0100 +Date: Wed Nov 3 08:58:00 2010 +0100 README.win32: update build instructions @@ -325,100 +3224,100 @@ Date: Wed Nov 3 08:58:00 2010 +0100 commit 5a33105f690ba84b2e4bb15d73d3467e92fa06e0 Author: Dieter Verfaillie -Date: Wed Nov 3 07:59:18 2010 +0100 +Date: Wed Nov 3 07:59:18 2010 +0100 dsextras.py: formatting cleanup, makes things readable Signed-off-by: Dieter Verfaillie - dsextras.py | 148 + dsextras.py | 148 +++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 93 insertions(+), 55 deletions(-) commit d03503d0412d173acb383926ab3c2d640dad3e3f Author: Dieter Verfaillie -Date: Wed Nov 3 07:00:40 2010 +0100 +Date: Wed Nov 3 07:00:40 2010 +0100 dsextras.py: add ggc4 to MSVC compatible struct packing comment Signed-off-by: Dieter Verfaillie - dsextras.py | 4 ++-- + dsextras.py | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) commit 8c62968e9f8467e24870b8c4f61112676eef4630 Author: Dieter Verfaillie -Date: Wed Nov 3 06:56:32 2010 +0100 +Date: Wed Nov 3 06:56:32 2010 +0100 dsextras.py: use the pkgc_ functions instead of repeating pgk-config incantations all over the place Signed-off-by: Dieter Verfaillie - dsextras.py | 15 ++++++--------- + dsextras.py | 15 ++++++--------- 1 files changed, 6 insertions(+), 9 deletions(-) commit b98277afc24886bbda400e0ad360992bffa77b7c Author: Dieter Verfaillie -Date: Wed Nov 3 06:49:48 2010 +0100 +Date: Wed Nov 3 06:49:48 2010 +0100 dsextras.py: add pkgc_get_version and pkgc_get_defs_dir functions Signed-off-by: Dieter Verfaillie - dsextras.py | 10 ++++++++++ + dsextras.py | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) commit a565558652ebc3fa49d7aea40d399b06bbe376c4 Author: Dieter Verfaillie -Date: Wed Nov 3 06:45:05 2010 +0100 +Date: Wed Nov 3 06:45:05 2010 +0100 dsextras.py: PEP8: Comparisons to singletons like None should always be done with 'is' or 'is not', never the equality operators. Signed-off-by: Dieter Verfaillie - dsextras.py | 4 ++-- + dsextras.py | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) commit 4b1ff0c7f9953f925d2178069263cca67ca7db02 Author: Dieter Verfaillie -Date: Wed Nov 3 06:44:21 2010 +0100 +Date: Wed Nov 3 06:44:21 2010 +0100 dsextras.py: use True/False instead of 1/0 Signed-off-by: Dieter Verfaillie - dsextras.py | 25 +++++++++++++------------ + dsextras.py | 25 +++++++++++++------------ 1 files changed, 13 insertions(+), 12 deletions(-) commit 819a21cea831c3892040390e9446b78a91d1cbbe Author: Dieter Verfaillie -Date: Wed Nov 3 06:28:04 2010 +0100 +Date: Wed Nov 3 06:28:04 2010 +0100 dsextras.py: rearrange imports Signed-off-by: Dieter Verfaillie - dsextras.py | 58 + dsextras.py | 58 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 31 insertions(+), 27 deletions(-) commit d20edbfdde2819f8d4fee8cb3170c126fcd31d5f Author: Dieter Verfaillie -Date: Wed Nov 3 06:16:21 2010 +0100 +Date: Wed Nov 3 06:16:21 2010 +0100 Add distutils generated build/dist directories and eclipse configuration files to .gitignore Signed-off-by: Dieter Verfaillie - .gitignore | 7 +++++++ + .gitignore | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) commit 268d6ed2b0b1d266c612da4453b6117d9e14437e Author: John (J5) Palmieri -Date: Thu Oct 28 15:32:28 2010 -0400 +Date: Thu Oct 28 15:32:28 2010 -0400 [gi] add tests for calling dir on a dynamic module @@ -427,7 +3326,7 @@ Date: Thu Oct 28 15:32:28 2010 -0400 commit f6386a6e0d225c83cdbe1add4c4d3ea51d3ec2f0 Author: Deepankar Sharma -Date: Wed Oct 27 18:28:11 2010 -0400 +Date: Wed Oct 27 18:28:11 2010 -0400 [gi] dir() now works for modules @@ -438,7 +3337,7 @@ Date: Wed Oct 27 18:28:11 2010 -0400 commit 28ed01c34c503cfb4f14fe7af7912060ca70aba6 Author: Simón Pena -Date: Mon Sep 20 23:10:14 2010 +0200 +Date: Mon Sep 20 23:10:14 2010 +0200 Don't check the inner type when comparing gpointers @@ -454,7 +3353,7 @@ Date: Mon Sep 20 23:10:14 2010 +0200 commit 1731f89e4b5a20c33976963e12a1f39a21d33fde Author: John (J5) Palmieri -Date: Thu Oct 28 14:21:12 2010 -0400 +Date: Thu Oct 28 14:21:12 2010 -0400 Release GIL when calling into C functions @@ -467,7 +3366,7 @@ Date: Thu Oct 28 14:21:12 2010 -0400 commit 783e2e351ec7470bda6b441e51f387dd61543c4b Author: José Aliste -Date: Fri Oct 15 14:30:10 2010 -0300 +Date: Fri Oct 15 14:30:10 2010 -0300 _gi.Repository : Implement missing info bindings. @@ -480,7 +3379,7 @@ Date: Fri Oct 15 14:30:10 2010 -0300 commit 2ca897273f52ae38f5e06e72c773a048e199eee5 Author: John (J5) Palmieri -Date: Thu Oct 28 13:49:15 2010 -0400 +Date: Thu Oct 28 13:49:15 2010 -0400 include Python.h so that PY_VERSION_HEX gets defined @@ -489,123 +3388,123 @@ Date: Thu Oct 28 13:49:15 2010 -0400 commit 8b28b1d713df33931e255600ab98feda37a8e02a Author: John (J5) Palmieri -Date: Thu Oct 28 13:47:34 2010 -0400 +Date: Thu Oct 28 13:47:34 2010 -0400 [gi] make overrides work for python 3.x protocols and alias for python 2.x - gi/overrides/Gtk.py | 9 +++++++-- + gi/overrides/Gtk.py | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) commit 3c09710d2f68af9c16ce39fd25656147656a486a Author: Sebastian Pölsterl -Date: Sat Oct 23 14:24:24 2010 +0200 +Date: Sat Oct 23 14:24:24 2010 +0200 Override Gtk.Widget.translate_coordinates to not return success value - gi/overrides/Gtk.py | 11 +++++++++++ + gi/overrides/Gtk.py | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) commit 9d4443b3de8c327d8645ddde0a7a6dc5b977d7b4 Author: Sebastian Pölsterl -Date: Sat Oct 23 14:22:36 2010 +0200 +Date: Sat Oct 23 14:22:36 2010 +0200 Override Gtk.TreeViewColumn.cell_get_position to not return success value - gi/overrides/Gtk.py | 5 +++++ + gi/overrides/Gtk.py | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) commit 6679d39ace06294e98f9d6fc911ed6fb27656010 Author: Sebastian Pölsterl -Date: Sat Oct 23 14:21:36 2010 +0200 +Date: Sat Oct 23 14:21:36 2010 +0200 Override get_path_at_pos and get_dest_row_at_pos of Gtk.TreeView to not return success value - gi/overrides/Gtk.py | 15 +++++++++++++++ + gi/overrides/Gtk.py | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-) commit 80b1b266fa68a5c67106871502017166628f71e4 Author: Sebastian Pölsterl -Date: Sat Oct 23 14:20:38 2010 +0200 +Date: Sat Oct 23 14:20:38 2010 +0200 Override Gtk.TreeSortable.get_sort_column_id to not return success value - gi/overrides/Gtk.py | 12 ++++++++++++ + gi/overrides/Gtk.py | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) commit 17cd0fb3a2d2ca0c6109c41727ba0b8c42217cd5 Author: Sebastian Pölsterl -Date: Sat Oct 23 14:19:20 2010 +0200 +Date: Sat Oct 23 14:19:20 2010 +0200 Override forward_search and backward_search of Gtk.TextIter to not return success value - gi/overrides/Gtk.py | 15 +++++++++++++++ + gi/overrides/Gtk.py | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-) commit 95c86fa31da3d2fe84db0e2b5bc2a6dc896c9223 Author: Sebastian Pölsterl -Date: Sat Oct 23 14:18:09 2010 +0200 +Date: Sat Oct 23 14:18:09 2010 +0200 Override Gtk.TextBuffer.get_selection_bounds to not return success value - gi/overrides/Gtk.py | 5 +++++ + gi/overrides/Gtk.py | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) commit da6d87460b9392c29d025a7eed9249fb604204bc Author: Sebastian Pölsterl -Date: Sat Oct 23 14:17:04 2010 +0200 +Date: Sat Oct 23 14:17:04 2010 +0200 Override Gtk.RecentInfo.get_application_info to not return success value - gi/overrides/Gtk.py | 10 ++++++++++ + gi/overrides/Gtk.py | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) commit 0ed2e8772bdc405b0d0c7e0b2803e0e141abcb6a Author: Sebastian Pölsterl -Date: Sat Oct 23 14:16:21 2010 +0200 +Date: Sat Oct 23 14:16:21 2010 +0200 Override Gtk.IMContext.get_surrounding to not return success value - gi/overrides/Gtk.py | 10 ++++++++++ + gi/overrides/Gtk.py | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) commit b85b445f15421209c0b4adf676d7c8218d6437c5 Author: Sebastian Pölsterl -Date: Sat Oct 23 14:15:24 2010 +0200 +Date: Sat Oct 23 14:15:24 2010 +0200 Override get_item_at_pos, get_visible_range, get_dest_item_at_pos of Gtk.IconView to not return success value - gi/overrides/Gtk.py | 19 +++++++++++++++++++ + gi/overrides/Gtk.py | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) commit 684d716192d58c972083e579e909bcd97f8a5025 Author: Sebastian Pölsterl -Date: Sat Oct 23 14:13:47 2010 +0200 +Date: Sat Oct 23 14:13:47 2010 +0200 Override Gtk.Container.get_focus_chain to not return success value - gi/overrides/Gtk.py | 10 ++++++++++ + gi/overrides/Gtk.py | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) commit 8ec830c57fafbfe50d9619c6caba3cb95a00d688 Author: Sebastian Pölsterl -Date: Sat Oct 23 14:12:44 2010 +0200 +Date: Sat Oct 23 14:12:44 2010 +0200 Override Gtk.ComboBox.get_active_iter to not return success value - gi/overrides/Gtk.py | 10 ++++++++++ + gi/overrides/Gtk.py | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) commit b483852904468722230903989e3451c7c6a24c0f Author: John (J5) Palmieri -Date: Tue Oct 12 12:18:33 2010 -0400 +Date: Tue Oct 12 12:18:33 2010 -0400 [gi] make parameter check less strict when dealing with GValue params @@ -620,19 +3519,19 @@ Date: Tue Oct 12 12:18:33 2010 -0400 https://bugzilla.gnome.org/show_bug.cgi?id=622987 - gi/pygi-argument.c | 17 +++++--------- - gobject/gobjectmodule.c | 4 +- - gobject/pygobject-private.h | 1 + - gobject/pygobject.h | 2 + - gobject/pygtype.c | 37 ++++++++++++++++++++++++++++--- - tests/test_gi.py | 1 - - tests/test_overrides.py | 50 + gi/pygi-argument.c | 17 +++++--------- + gobject/gobjectmodule.c | 4 +- + gobject/pygobject-private.h | 1 + + gobject/pygobject.h | 2 + + gobject/pygtype.c | 37 ++++++++++++++++++++++++++++--- + tests/test_gi.py | 1 - + tests/test_overrides.py | 50 +++++++++++++++++++++++++++++++++++++++--- 7 files changed, 90 insertions(+), 22 deletions(-) commit 8c87d622dcc6d76a981edfc5818fe67bb2e114e2 Author: John Stowers -Date: Fri Oct 22 13:28:31 2010 +1300 +Date: Fri Oct 22 13:28:31 2010 +1300 Shortcut removal is not needed on post-uninstall @@ -641,7 +3540,7 @@ Date: Fri Oct 22 13:28:31 2010 +1300 commit a3ed97fe6f80548801739fe6b72771b9eb6d93f7 Author: John Stowers -Date: Thu Oct 21 13:25:35 2010 +1300 +Date: Thu Oct 21 13:25:35 2010 +1300 Disable shortcut creation in windows installer @@ -650,20 +3549,20 @@ Date: Thu Oct 21 13:25:35 2010 +1300 commit a3d6212b0abccef58f05d454c091936776413d98 Author: John (J5) Palmieri -Date: Thu Oct 7 11:43:27 2010 -0400 +Date: Thu Oct 7 11:43:27 2010 -0400 overrides for all subclasses of dialog https://bugzilla.gnome.org/show_bug.cgi?id=631634 - gi/overrides/Gtk.py | 94 + gi/overrides/Gtk.py | 94 ++++++++++++++++++++++++++++++++++++++++++++--- tests/test_overrides.py | 64 +++++++++++++++++++++++++++++++- 2 files changed, 151 insertions(+), 7 deletions(-) commit a87e3ba64b54e6df0b5b96af47c34e3be790b58f Author: Sebastian Pölsterl -Date: Thu Oct 7 19:37:53 2010 +0200 +Date: Thu Oct 7 19:37:53 2010 +0200 Make TreeModel behave like in GTK-2.x @@ -686,14 +3585,14 @@ Date: Thu Oct 7 19:37:53 2010 +0200 https://bugzilla.gnome.org/show_bug.cgi?id=631547 - gi/overrides/Gtk.py | 195 + gi/overrides/Gtk.py | 195 +++++++++++++++++++++++++++++++++++++++++++++++ tests/test_overrides.py | 160 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 349 insertions(+), 6 deletions(-) commit acfcc29af727fb67d0dfbbcc7cc14963ef21f1ea Author: John Stowers -Date: Sat Oct 16 18:59:25 2010 +1300 +Date: Sat Oct 16 18:59:25 2010 +1300 Correctly build GIO on windows @@ -702,7 +3601,7 @@ Date: Sat Oct 16 18:59:25 2010 +1300 commit 33b59fd7437009b6c3ed43412e171d2cc91ee317 Author: John Stowers -Date: Sat Oct 16 18:17:28 2010 +1300 +Date: Sat Oct 16 18:17:28 2010 +1300 Require Python >= 2.6.0 for Windows build @@ -711,45 +3610,45 @@ Date: Sat Oct 16 18:17:28 2010 +1300 commit 544e0e4de4f5f97b0584eaf72ae8a081eca28ab6 Author: John Stowers -Date: Sat Oct 16 17:41:01 2010 +1300 +Date: Sat Oct 16 17:41:01 2010 +1300 Fix depreciation warning in dsextras.py - dsextras.py | 2 +- + dsextras.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) commit 239ff961778e4e1587404d8a70dfbe8630ab0623 Author: John Stowers -Date: Sat Oct 16 17:34:50 2010 +1300 +Date: Sat Oct 16 17:34:50 2010 +1300 Fix build on windows - gi/pygi-foreign.c | 5 ++++- - gi/pygi.h | 5 ++++- - setup.py | 4 ++-- + gi/pygi-foreign.c | 5 ++++- + gi/pygi.h | 5 ++++- + setup.py | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) commit 9a2f81d63012fef23fdde2b4d903bd69601c07c6 Author: Michael Culbertson -Date: Sat Oct 16 17:08:11 2010 +1300 +Date: Sat Oct 16 17:08:11 2010 +1300 Support for GCC4 in Windows distutils build - bug 626548 - dsextras.py | 3 ++- + dsextras.py | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) commit 27367c8dc3a3a31fdd778505b319cd3f4afb9e27 Author: John Stowers -Date: Fri Oct 15 09:39:02 2010 +1300 +Date: Fri Oct 15 09:39:02 2010 +1300 Remove obsolete comments in dsextras.py - dsextras.py | 11 ++--------- + dsextras.py | 11 ++--------- 1 files changed, 2 insertions(+), 9 deletions(-) commit b5f383f854fb8f72677828b029589320c59006d1 Author: John Stowers -Date: Fri Oct 15 09:21:03 2010 +1300 +Date: Fri Oct 15 09:21:03 2010 +1300 Broken dsextras.py pkg-config check error message diff --git a/Makefile.am b/Makefile.am index 6fe43c6..b9b9ed3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -27,6 +27,33 @@ EXTRA_DIST = \ m4/jhflags.m4 \ m4/python.m4 +MAINTAINERCLEANFILES = \ + $(srcdir)/INSTALL \ + $(srcdir)/aclocal.m4 \ + $(srcdir)/autoscan.log \ + $(srcdir)/compile \ + $(srcdir)/config.guess \ + $(srcdir)/config.h.in \ + $(srcdir)/config.sub \ + $(srcdir)/configure.scan \ + $(srcdir)/depcomp \ + $(srcdir)/install-sh \ + $(srcdir)/ltmain.sh \ + $(srcdir)/missing \ + $(srcdir)/mkinstalldirs \ + $(srcdir)/omf.make \ + $(srcdir)/xmldocs.make \ + $(srcdir)/gtk-doc.make \ + $(srcdir)/ChangeLog \ + $(srcdir)/py-compile \ + $(srcdir)/m4/libtool.m4 \ + $(srcdir)/m4/ltoptions.m4 \ + $(srcdir)/m4/ltsugar.m4 \ + $(srcdir)/m4/ltversion.m4 \ + $(srcdir)/m4/lt~obsolete.m4 \ + `find "$(srcdir)" -type f -name Makefile.in -print` \ + `find "$(srcdir)" -type f -name "*.pyc" -print` + BUILT_EXTRA_DIST = \ ChangeLog @@ -131,3 +158,5 @@ check.gdb: check.valgrind: cd tests && $(MAKE) check.valgrind + +-include $(top_srcdir)/git.mk diff --git a/Makefile.in b/Makefile.in index f56904c..1a8fbdd 100644 --- a/Makefile.in +++ b/Makefile.in @@ -209,6 +209,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -237,6 +238,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -252,6 +254,7 @@ 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@ @@ -325,6 +328,33 @@ EXTRA_DIST = \ m4/jhflags.m4 \ m4/python.m4 +MAINTAINERCLEANFILES = \ + $(srcdir)/INSTALL \ + $(srcdir)/aclocal.m4 \ + $(srcdir)/autoscan.log \ + $(srcdir)/compile \ + $(srcdir)/config.guess \ + $(srcdir)/config.h.in \ + $(srcdir)/config.sub \ + $(srcdir)/configure.scan \ + $(srcdir)/depcomp \ + $(srcdir)/install-sh \ + $(srcdir)/ltmain.sh \ + $(srcdir)/missing \ + $(srcdir)/mkinstalldirs \ + $(srcdir)/omf.make \ + $(srcdir)/xmldocs.make \ + $(srcdir)/gtk-doc.make \ + $(srcdir)/ChangeLog \ + $(srcdir)/py-compile \ + $(srcdir)/m4/libtool.m4 \ + $(srcdir)/m4/ltoptions.m4 \ + $(srcdir)/m4/ltsugar.m4 \ + $(srcdir)/m4/ltversion.m4 \ + $(srcdir)/m4/lt~obsolete.m4 \ + `find "$(srcdir)" -type f -name Makefile.in -print` \ + `find "$(srcdir)" -type f -name "*.pyc" -print` + BUILT_EXTRA_DIST = \ ChangeLog @@ -923,6 +953,7 @@ distclean-generic: 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 "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-pkgpyexecLTLIBRARIES \ @@ -1101,6 +1132,8 @@ check.gdb: check.valgrind: cd tests && $(MAKE) check.valgrind +-include $(top_srcdir)/git.mk + # 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 index eabb703..1e46f04 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,292 @@ +2.27.90 11-Feb-2011 (2.28 pre-release) + - fix build to correctly use python-config (John (J5) Palmieri) + - Run gio tests separately when enabled (Martin Pitt) + - Revert "Remove gio static bindings" (Martin Pitt) + - Decrease the refcount for GInitiallyUnowned constructors. (Steve Frécinaux) + - Ensure the sink functions are only ran once. (Steve Frécinaux) + - Revert "Fix wrong refcount when calling introspected widget constructors" (Steve Frécinaux) + - Revert "Fix reference leaks for GInitiallyUnowned objects" (Steve Frécinaux) + - Run test suite under dbus-launch (Martin Pitt) + - Fix test_gdbus.py to be Python3 friendly (Martin Pitt) + - [gi] Provide comfortable GSettings API (Martin Pitt) + - Fix vfunc search bug when using GInterfaces and a do_* method. (Laszlo Pandy) + - [GI] Add tests for Gtk.Widget.drag_* methods. (Laszlo Pandy) + - [python 3] use the right syntaxis to raise exceptions (Ignacio Casal Quinteiro) + - [gi] return PYGLIB_MODULE_ERROR_RETURN on error and use pygobject_init (Ignacio Casal Quinteiro) + - [gi] return PYGLIB_MODULE_ERROR_RETURN on error (Ignacio Casal Quinteiro) + - Fix wrong refcount when calling introspected widget constructors (Steve Frécinaux) + - Gdk.Window: Map the standard constructor to the *new* constructor (Simon Schampijer) + - Ship tests/org.gnome.test.gschema.xml in dist tarballs (Martin Pitt) + - [gi] Add GSettings tests (Martin Pitt) + - [gi] Provide GtkTextBuffer.insert_with_tags_by_name() (Martin Pitt) + - [gi] Support tag names in GtkTextBuffer.insert_with_tags() (Martin Pitt) + - Add MAINTAINERCLEANFILES (Ignacio Casal Quinteiro) + - Remove .gitignore files and use git.mk (Ignacio Casal Quinteiro) + - pygi-convert.sh: Convert Pango.TabAlign.* (Martin Pitt) + - pygi-convert.sh: Drop window -> get_window() conversion (Martin Pitt) + - pygi-convert.sh: Don't convert self.window assignments (Martin Pitt) + - Fix leaked python reference in python-defined subclasses (Steve Frécinaux) + - Add some tests for the number of python refs held at creation time (Steve Frécinaux) + - Factor out parameter marshalling from construction functions. (Steve Frécinaux) + - [gi] in python 3 an array of uint8 can be bytes but not string (John (J5) Palmieri) + - [gi] fix Gio.FileEnumerator to reflect the Python 3 iter protocol (John (J5) Palmieri) + - [gi] python 3 fixes (John (J5) Palmieri) + - [gi] fix try/except blocks using depricated raise format (John (J5) Palmieri) + - [gi] Add docstring to GLib.Variant constructor (Martin Pitt) + - [gi] update gdbus test cases for previous GVariant change (Martin Pitt) + - [gi] Accept only a single object in GLib.Variant constructor (Martin Pitt) + - Speed up _setup_native_vfuncs() (Laszlo Pandy) + - Speed up class creation: rewrite _setup_vfuncs() to be much more efficient. (Laszlo Pandy) + - pygi-convert.sh: Convert gtk.UI_MANAGER_* (Sebastian Pölsterl) + - pygi-convert.sh: Convert gdk.GRAB_* (Sebastian Pölsterl) + - [gi] set the gtype GValue correctly (Ignacio Casal Quinteiro) + - [gi] use the right argument type for callback (Ignacio Casal Quinteiro) + - [gi] Add test cases for GDBus client operations (Martin Pitt) + - [gi] Add Variant construction/unpack support for boxed Variants (Martin Pitt) + - Merge branch 'windows-setup-fixes' (Dieter Verfaillie) + - pygi-convert.sh: GdkPixbuf methods (Thomas Hindoe Paaboel Andersen) + - pygi-convert.sh: Gdk.COLORSPACE_RGB (Thomas Hindoe Paaboel Andersen) + - [gi] Support nested objects and empty sequences in GLib.Variant building (Martin Pitt) + - Uncomment test_gi.TestInterfaceClash (Tomeu Vizoso) + - Fix reference leaks for GInitiallyUnowned objects (Steve Frécinaux) + - Add tests for refcount of a GObject owned by a library (Steve Frécinaux) + - Add a test to check for regular object reference count (Steve Frécinaux) + - [gi] Update TreeView.enable_model_drag_{source,dest} to current GTK (Martin Pitt) + - Fix a typo in a private symbol name. (Steve Frécinaux) + - pygi-convert.sh: Convert glib.source_remove() (Martin Pitt) + - Fix typo in previous commit to actually convert glib.GError (Martin Pitt) + - pygi-convert.sh: Move some glib bits which are better handled by gobject (Martin Pitt) + - Modify override for Gtk.Adjustment to allow position or keyword arguments in __init__(). (Laszlo Pandy) + - [gi] Fix small typo in previous commit (Martin Pitt) + - [gi] Add pythonic iterator and indexing for string GVariants (Martin Pitt) + - Construct structs using default API constructor (Tomeu Vizoso) + - pygi-convert.sh: Migrate Gdk.Cursor constructor, and some cursor names (Martin Pitt) + - pygi-convert.sh: Handle .window attributes (Martin Pitt) + - Also deal with foreign boxed structs (Tomeu Vizoso) + - [gi] Convert GErrors to GObject.GError exceptions, and throw them upon returning from calling the C function. (Laszlo Pandy) + - pygi-convert.sh: Don't convert glib -> GLib for now (Martin Pitt) + - Link libregress.so to GIO_LIBS again (Tomeu Vizoso) + - Fix attributes 2BUTTON_PRESS and 3BUTTON_PRESS of Gdk.EventType. (Laszlo Pandy) + - [gi] Fixed typo in exception (Sebastian Pölsterl) + - [gi] Enable handling of Gdk.EventType.2BUTTON_PRESS and 3BUTTON_PRESS (Sebastian Pölsterl) + - Revert "Fix Pango FontDescription override" (Martin Pitt) + - Python iterator interface support for GFileEnumerator. (Tony Young) + - Remove gio static bindings (Tomeu Vizoso) + - [gi] set length when marshalling guint8 erases (Ignacio Casal Quinteiro) + - Convert Gdk.Pixbuf to GdkPixbuf.Pixbuf (Sebastian Pölsterl) + - Disable calls to PyGILState_* when threads are disabled (Arnaud Charlet) + - pygi-convert.sh: Do not comment out set_cell_data_func() calls; these should be ported properly (Martin Pitt) + - pygi-convert.sh: Fix match for adding missing imports (Martin Pitt) + - pygi-convert.sh: Fix Gtk.Label handling to be idempotent (Martin Pitt) + - Remove trailing whitespace from gi/overrides/Gtk.py (Laszlo Pandy) + - Fix Pango FontDescription override (Martin Pitt) + - tests: Respect existing $GI_TYPELIB_PATH (Martin Pitt) + - Merge branch 'value' (Sebastian Pölsterl) + - GTK overrides: Do type conversion to column types of ListStore and TreeStore in set_value (Sebastian Pölsterl) + - Always register a new GType when a GObject class is subclassed (Steve Frécinaux) + - Raise required versions of GLib and GObject-Introspection (Simon van der Linden) + - pygi-convert.sh: Handle keysyms (Martin Pitt) + - GLib overrides: Add test case for array variant building (Martin Pitt) + - Remove cairo.RectangleInt from the foreign module (Tomeu Vizoso) + - Dont try to guess the transfer if its a boxed (Tomeu Vizoso) + - The tags can be Empty not None. (Ignacio Casal Quinteiro) + - Add Pythonic iterators and indexing to GVariant (Martin Pitt) + - Add GLib.Variant.unpack() (Martin Pitt) + - Add override for gtk_text_buffer_insert_with_tags (Ignacio Casal Quinteiro) + - Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES (Simon van der Linden) + - Kill JD_CHECK_PYTHON_HEADERS (Simon van der Linden) + - Revert "Override Gtk.Box.pack_start and pack_end to set default values to be compliant with pygtk" (Sebastian Pölsterl) + - Revert "Override Gtk.CellLayout.pack_start and pack_end to add default values to be compliant with pygtk" (Sebastian Pölsterl) + - Revert "Override Gtk.TreeViewColumn.pack_start, pack_end and set_cell_data_func to add default values to be compliant with pygtk" (Sebastian Pölsterl) + - pygi-convert.sh: Handle gtk.combo_box_new_text() (Martin Pitt) + - Override TreeSortable.set_sort_func and set_default_sort_func to add default values to be pygtk compliant (Sebastian Pölsterl) + - Override Gtk.TreeViewColumn.pack_start, pack_end and set_cell_data_func to add default values to be compliant with pygtk (Sebastian Pölsterl) + - Override Gtk.CellLayout.pack_start and pack_end to add default values to be compliant with pygtk (Sebastian Pölsterl) + - Override Gtk.Paned pack1 and pack2 to add default values to be compliant with pygtk (Sebastian Pölsterl) + - Override Gtk.Box.pack_start and pack_end to set default values to be compliant with pygtk (Sebastian Pölsterl) + - Handle GObject subclasses in the property helper. (Steve Frécinaux) + - Fix handling of unicode for GtkTreeModels (Martin Pitt) + - In IntrospectionModule and DynamicModule classes, make all instance attributes start with an underscore. (Laszlo Pandy) + - Amend previous enum wrapping commit to remove redundant setting of __info__ attribute. (Laszlo Pandy) + - pygi-convert.sh: Handle GdkPixbuf.InterpType (Martin Pitt) + - Fix wrapping of enums: Create new Python type for each non-gtype enum. (Laszlo Pandy) + - Use g_vfunc_info_invoke for chaining up in vfuncs (Tomeu Vizoso) + - Move pyglib_{main_context, option_context, option_group}_new into _PyGLib_API (Simon van der Linden) + - pygi-convert.sh: Handle Gdk.DragAction (Martin Pitt) + - pygi-convert.sh: Generalize Gtk.Settings migration (Martin Pitt) + - pygi-convert.sh: Don't change the name of "glib" submodules (Martin Pitt) + - Plug another memory leak (Paolo Borelli) + - Plug a small memory leak. (Paolo Borelli) + - Override Table.attach() to behave like pygtk (Paolo Borelli) + - pygi-convert.sh: Convert Pango.WrapMode (Martin Pitt) + - pygi-convert.sh: Don't change the name of "gtk" submodules (Martin Pitt) + - Fix the __dir__() methods on DynamicModule and IntrospectionModule (Laszlo Pandy) + - pygi-convert.sh: handle ReliefStyle (Paolo Borelli) + - setup.py: fix the provides keyword argument (Dieter Verfaillie) + - setup.py: use the same spaces-less format for all setup() parameters (Dieter Verfaillie) + - Add a __repr__() method to DynamicModule. (Laszlo Pandy) + - Go back to using getattr() in DynamicModule.__getattr__ (Tomeu Vizoso) + - Change __dir__() to report all the attributes that __getattr__ supports (Laszlo Pandy) + - Bump the minimum gio dependency (Emilio Pozuelo Monfort) + - Add test for incorrect attributes in Gdk.Event (Tomeu Vizoso) + - Don't call getattr again in gi.overrides.Gdk.Event.__getattr__ (Simon van der Linden) + - Release allocated array of arguments when handling closures (Mike Gorse) + - Release GIValueInfo when checking an enum argument (Mike Gorse) + - Respect different type lengths when assigning out-argument pointers. (Eitan Isaacson) + - Fix stupid name clash (Tomeu Vizoso) + - Add /usr/share to XDG_DATA_DIRS when running the tests (Tomeu Vizoso) + - Comment out tests that require SRV lookups (Tomeu Vizoso) + - Use suppresion file when running valgrind (Tomeu Vizoso) + - Fix warnings. (Ignacio Casal Quinteiro) + - Allow comparing Gtk.TreePath to None (Jesse van den Kieboom) + - handle unicode objects in properties (John (J5) Palmieri) + - dsextras.py: check if gcc is there when platform is win32 and compiler is mingw32 (Dieter Verfaillie) + - dsextras.py: be consistent in how distutils imports are done (Dieter Verfaillie) + - dsextras.py: add have_gcc() function (Dieter Verfaillie) + - dsextras.py: use distutils.spawn.find_executable for have_pkgconfig() (Dieter Verfaillie) + - setup.py: fix another case of use True/False instead of 1/0 (Dieter Verfaillie) + - pygi-convert.sh: improve GtkSourceView conversion (Paolo Borelli) + - pygi-convert.sh: Gtk.DialogFlags conversion (Paolo Borelli) + - Doc Extractor: Print the gtk-doc blocks sorted by function name. (José Alburquerque) + - pygi-convert.sh: add more Gtk conversions and sort (Paolo Borelli) + - pygi-convert.sh: convert Atk (Paolo Borelli) + - pygi-convert.sh: convert a few more Gio types (Paolo Borelli) + - pygi-convert.sh: more GLib conversion (Paolo Borelli) + - pygi-convert.sh: remove two cases handled by overrides (Paolo Borelli) + - Override Gtk.ScrolledWindow constructor (Paolo Borelli) + - pygi-convert.sh: Fix 'find' syntax (Paolo Borelli) + - pygi-convert.sh: start handling Gio and GLib (Paolo Borelli) + - pygi-convert.sh: convert Gdk.ScrollDirection. (Paolo Borelli) + - Override Pango.Layout constructor. (Paolo Borelli) + - Remove Pango.FontDescription() conversion. (Paolo Borelli) + - Override GtkAction and GtkRadioAction constructors. (Paolo Borelli) + - Override Adjustment constructor to behave like pygtk (Dmitrijs Ledkovs) + - add secondary_text apis to MessageDialog (John (J5) Palmieri) + - [gi] get rid of some debug prints and fix error messages (John (J5) Palmieri) + - Fix demo for override changes. (Paolo Borelli) + - Override Pango.FontDescription. (Paolo Borelli) + - Stop checking that all vfuncs are implemented (Tomeu Vizoso) + - Fix usage of TreeIter api that is now an override. (Paolo Borelli) + - Fix Gtk.Label(label="Foo") (Paolo Borelli) + - Fix typo when raising an exception (Paolo Borelli) + - pygi-convert.sh: Added more conversions (Sebastian Pölsterl) + - Override LinkButton constructor to make 'uri' mandatory (Paolo Borelli) + - Container should be iterable. (Dmitry Morozov) + - No need to import Gdk (Paolo Borelli) + - Remove semicolumns (Paolo Borelli) + - [gi] make sure Gtk.Button override passes all keywords to parent constructor (John (J5) Palmieri) + - Fix cut&paste error in the Label override (Paolo Borelli) + - pygi-convert.sh: handle TextWindowType (Paolo Borelli) + - Override Label constructor to behave like pygtk (Paolo Borelli) + - Override GtkTable constructor to behave like pygtk (Paolo Borelli) + - pygi-convert.sh: convert MovementStep (Paolo Borelli) + - Update Gdk overrides to work with latest Gtk+ 3 (Paolo Borelli) + - Gtk: add an override for Gtk.main_quit (Johan Dahlin) + - [gi] handle subtypes when inserting into tree models (John (J5) Palmieri) + - Override TreeSelection.select_path and TreeView.scroll_to_cell (Paolo Borelli) + - Override TreePath.__new__ (Paolo Borelli) + - Override Container to behave like a sequence (Paolo Borelli) + - refactor Jonathan Matthew recurse vfunc patch so it applys and clean up a bit (John (J5) Palmieri) + - Recurse up through base classes when setting up vfuncs (Jonathan Matthew) + - add a profiling torture test for when we fix up invoke (John (J5) Palmieri) + - moved dynamic and base modules outside of gtk-2.0 directory (John (J5) Palmieri) + - add test for inout argument count (John (J5) Palmieri) + - [gi] add check for UNICHAR (John (J5) Palmieri) + - Support gunichar (Paolo Borelli) + - pygi-convert.sh: gtk.accel_map -> Gtk.AccelMap._ (Paolo Borelli) + - pygi-convert.sh: handle "from gtk import gdk" (Paolo Borelli) + - pygi-convert.sh: add some Pango special cases (Paolo Borelli) + - Override TextIter (begins|ends|toggles)_tag() (Paolo Borelli) + - Override TextBuffer.set_text() to make length optional (Paolo Borelli) + - Override TextBuffer.create_mark() (Paolo Borelli) + - Fix TextBuffer.get_selection_bounds() override (Paolo Borelli) + - [gi] fix ActionGroup constructor to allow other keyword properties to be set (John (J5) Palmieri) + - [gi] require the name parameter when creatin a Gtk.ActionGroup (John (J5) Palmieri) + - Override UIManager.insert_action_group (Paolo Borelli) + - Override TreeModel.get() to return a tuple (Paolo Borelli) + - Make TreeSelection.get_selected_rows compatible with PyGtk (Paolo Borelli) + - [gi] switch to using sequences/tuples when marshalling cairo_rectangle_int_t (John (J5) Palmieri) + - [gi] overrides for treeview Drag and Drop (John (J5) Palmieri) + - [gi] when encountering guint8 arrays treat them as byte arrays (John (J5) Palmieri) + - pygi-convert.sh: Add pynotify -> Notify (Martin Pitt) + - pygi-convert.sh: Remove sugar specifics, and allow command line file list (Martin Pitt) + - pygi-convert.sh: Cover Message and Buttons types (Martin Pitt) + - [gi] fix actiongroup test since actions are hashed (John (J5) Palmieri) + - [gi] when converting to UTF-8 accept Python Unicode objects as input (Python 2) (John (J5) Palmieri) + - Correct a bug in the freeing of memory in pygi-invoke.c. (Damien Caliste) + - update news for release (John (J5) Palmieri) + - Implement richcompare for GIBaseInfo (Jonathan Matthew) + - [gi] add the rectangle_int_t forign cairo type (John (J5) Palmieri) + - add a foreign type for cairo_rectangle_int_t and allow it to be caller-allocated (John (J5) Palmieri) + - [gi] add overrides to Gtk.Editable (John (J5) Palmieri) + - [gi] handle virtual invokers (John (J5) Palmieri) + - add overrides for the insert* apis of list_store and tree_store (John (J5) Palmieri) + - fix dialogs overrides which were relying on broken inheritance behavior (John (J5) Palmieri) + - Add a overrides registry so we can refrence overrides inside the module (John (J5) Palmieri) + - Merge remote branch 'dieterv/setup-fixes-for-merge' (John Stowers) + - setup.py: ease maintenance burden for tests installation (Dieter Verfaillie) + - fix inheritence issues in overrides (John (J5) Palmieri) + - tests: add runtests-windows.py script (Dieter Verfaillie) + - pygobject_postinstall.py: remove pygobject-2.0.pc treatment from postinstall as pkg-config on windows figures out the correct prefix at runtime (Dieter Verfaillie) + - pygobject_postinstall.py: remove shortcut creation (Dieter Verfaillie) + - setup.py: formatting cleanup, makes things readable (Dieter Verfaillie) + - setup.py: build and install tests (Dieter Verfaillie) + - setup.py: install documentation when available on build system (Dieter Verfaillie) + - setup.py: install pygobject-codegen script (Dieter Verfaillie) + - setup.py: install fixxref.py script (Dieter Verfaillie) + - setup.py: rearrange constants (Dieter Verfaillie) + - setup.py: check python version and pkgconig availability before anything else (Dieter Verfaillie) + - setup.py: simplify sys.platform != 'win32' detection and error reporting (Dieter Verfaillie) + - setup.py: rearrange imports (Dieter Verfaillie) + - README.win32: update build instructions (Dieter Verfaillie) + - dsextras.py: formatting cleanup, makes things readable (Dieter Verfaillie) + - dsextras.py: add ggc4 to MSVC compatible struct packing comment (Dieter Verfaillie) + - dsextras.py: use the pkgc_ functions instead of repeating pgk-config incantations all over the place (Dieter Verfaillie) + - dsextras.py: add pkgc_get_version and pkgc_get_defs_dir functions (Dieter Verfaillie) + - dsextras.py: PEP8: Comparisons to singletons like None should always be done with 'is' or 'is not', never the equality operators. (Dieter Verfaillie) + - dsextras.py: use True/False instead of 1/0 (Dieter Verfaillie) + - dsextras.py: rearrange imports (Dieter Verfaillie) + - Add distutils generated build/dist directories and eclipse configuration files to .gitignore (Dieter Verfaillie) + - [gi] add tests for calling dir on a dynamic module (John (J5) Palmieri) + - [gi] dir() now works for modules (Deepankar Sharma) + - Don't check the inner type when comparing gpointers (Simón Pena) + - Release GIL when calling into C functions (John (J5) Palmieri) + - _gi.Repository : Implement missing info bindings. (José Aliste) + - include Python.h so that PY_VERSION_HEX gets defined (John (J5) Palmieri) + - [gi] make overrides work for python 3.x protocols and alias for python 2.x (John (J5) Palmieri) + - Override Gtk.Widget.translate_coordinates to not return success value (Sebastian Pölsterl) + - Override Gtk.TreeViewColumn.cell_get_position to not return success value (Sebastian Pölsterl) + - Override get_path_at_pos and get_dest_row_at_pos of Gtk.TreeView to not return success value (Sebastian Pölsterl) + - Override Gtk.TreeSortable.get_sort_column_id to not return success value (Sebastian Pölsterl) + - Override forward_search and backward_search of Gtk.TextIter to not return success value (Sebastian Pölsterl) + - Override Gtk.TextBuffer.get_selection_bounds to not return success value (Sebastian Pölsterl) + - Override Gtk.RecentInfo.get_application_info to not return success value (Sebastian Pölsterl) + - Override Gtk.IMContext.get_surrounding to not return success value (Sebastian Pölsterl) + - Override get_item_at_pos, get_visible_range, get_dest_item_at_pos of Gtk.IconView to not return success value (Sebastian Pölsterl) + - Override Gtk.Container.get_focus_chain to not return success value (Sebastian Pölsterl) + - Override Gtk.ComboBox.get_active_iter to not return success value (Sebastian Pölsterl) + - [gi] make parameter check less strict when dealing with GValue params (John (J5) Palmieri) + - Shortcut removal is not needed on post-uninstall (John Stowers) + - Disable shortcut creation in windows installer (John Stowers) + - overrides for all subclasses of dialog (John (J5) Palmieri) + - Make TreeModel behave like in GTK-2.x (Sebastian Pölsterl) + - Correctly build GIO on windows (John Stowers) + - Require Python >= 2.6.0 for Windows build (John Stowers) + - Fix depreciation warning in dsextras.py (John Stowers) + - Fix build on windows (John Stowers) + - Support for GCC4 in Windows distutils build - bug 626548 (Michael Culbertson) + - Remove obsolete comments in dsextras.py (John Stowers) + - Broken dsextras.py pkg-config check error message (John Stowers) + - add compat functions for the deprecated PyCObject api (John (J5) Palmieri) + - Add __path__ attributes. (Damien Caliste) + - Override Gtk.TreeSelection.get_selected to not return success value. (Sebastian Pölsterl) + - Make row optional in Gtk.TreeStore/ListStore.append override (Vincent Untz) + - Revert "add compat functions for the deprecated PyCObject api" (John (J5) Palmieri) + - return NULL instead of -1 which fixes crash when introspection is turned off (John (J5) Palmieri) + - add compat functions for the deprecated PyCObject api (John (J5) Palmieri) + - fix commit 7fe83108 which didn't use the compat functions for string handling (John (J5) Palmieri) + - Python 3 fixes for dsextras and the python.m4 distribution files (John (J5) Palmieri) + 2.27.0 10-Nov-2010 - Implement richcompare for GIBaseInfo (Jonathan Matthew) - [gi] add the rectangle_int_t forign cairo type (John (J5) Palmieri) diff --git a/PKG-INFO b/PKG-INFO index a67b488..3c75ee1 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: PyGObject -Version: 2.27.0 +Version: 2.27.90 Summary: Python bindings for GObject Home-page: http://www.pygtk.org/ Author: James Henstridge @@ -8,7 +8,7 @@ Author-email: james@daa.com.au Maintainer: Johan Dahlin Maintainer-email: johan@gnome.org License: GNU LGPL -Download-url: ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/2.27/pygobject-2.27.0.tar.gz +Download-url: ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/2.27/pygobject-2.27.90.tar.gz Description: Python bindings for GLib, GObject and GIO Platform: POSIX, Windows Classifier: Development Status :: 5 - Production/Stable diff --git a/aclocal.m4 b/aclocal.m4 index dc4f96d..9508e3e 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -13,8 +13,8 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.66],, -[m4_warning([this file was generated for autoconf 2.66. +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'.])]) @@ -112,14 +112,14 @@ dnl int main () { - int major, minor, micro; + unsigned int major, minor, micro; char *tmp_version; fclose (fopen ("conf.glibtest", "w")); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_glib_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + if (sscanf(tmp_version, "%u.%u.%u", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } @@ -158,9 +158,9 @@ main () } else { - printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); - printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n", major, minor, micro); printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); diff --git a/codegen/Makefile.am b/codegen/Makefile.am index cdb1e99..f9886eb 100644 --- a/codegen/Makefile.am +++ b/codegen/Makefile.am @@ -29,3 +29,5 @@ codegen_PYTHON = \ reversewrapper.py EXTRA_DIST = $(codegen_SCRIPTS) README.defs pygobject-codegen-$(PLATFORM_VERSION).in + +-include $(top_srcdir)/git.mk diff --git a/codegen/Makefile.in b/codegen/Makefile.in index f6b1340..040c36e 100644 --- a/codegen/Makefile.in +++ b/codegen/Makefile.in @@ -144,6 +144,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -172,6 +173,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -187,6 +189,7 @@ 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@ @@ -567,6 +570,8 @@ uninstall-am: uninstall-binSCRIPTS uninstall-codegenPYTHON \ uninstall-codegenPYTHON uninstall-codegenSCRIPTS +-include $(top_srcdir)/git.mk + # 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/argtypes.py b/codegen/argtypes.py index b35f6ef..46e868e 100644 --- a/codegen/argtypes.py +++ b/codegen/argtypes.py @@ -79,14 +79,14 @@ class ArgType: def write_param(self, ptype, pname, pdflt, pnull, info): """Add code to the WrapperInfo instance to handle parameter.""" - raise RuntimeError, "write_param not implemented for %s" % \ - self.__class__.__name__ + 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__ + raise RuntimeError("write_return not implemented for %s" + % self.__class__.__name__) class NoneArg(ArgType): def write_return(self, ptype, ownsreturn, info): diff --git a/codegen/definitions.py b/codegen/definitions.py index aca5adb..bfb6faf 100644 --- a/codegen/definitions.py +++ b/codegen/definitions.py @@ -71,15 +71,15 @@ class Definition(object): 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" + 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" + 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" + raise RuntimeError("this is an abstract class") def guess_return_value_ownership(self): "return 1 if caller owns return value" @@ -407,7 +407,7 @@ class MethodDef(MethodDefBase): for item in ('c_name', 'of_object'): if self.__dict__[item] == None: self.write_defs(sys.stderr) - raise RuntimeError, "definition missing required %s" % (item,) + raise RuntimeError("definition missing required %s" % (item,)) def write_defs(self, fp=sys.stdout): fp.write('(define-method ' + self.name + '\n') @@ -491,7 +491,7 @@ class FunctionDef(Definition): for item in ('c_name',): if self.__dict__[item] == None: self.write_defs(sys.stderr) - raise RuntimeError, "definition missing required %s" % (item,) + raise RuntimeError("definition missing required %s" % (item,)) _method_write_defs = MethodDef.__dict__['write_defs'] @@ -513,8 +513,8 @@ class FunctionDef(Definition): 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]) + 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: diff --git a/codegen/docextract_to_xml.py b/codegen/docextract_to_xml.py index 7ac1053..f41c839 100755 --- a/codegen/docextract_to_xml.py +++ b/codegen/docextract_to_xml.py @@ -89,7 +89,7 @@ if __name__ == '__main__': print "" - for name, value in docs.items(): + for name, value in sorted(docs.items()): # Get the type of comment block ('function', 'signal' or # 'property') (the value is a GtkDoc). block_type = value.get_type() diff --git a/configure b/configure index 47d71e0..c7a71c0 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.66 for pygobject 2.27.0. +# Generated by GNU Autoconf 2.68 for pygobject 2.27.90. # # Report bugs to . # @@ -91,6 +91,7 @@ fi 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 @@ -224,11 +225,18 @@ IFS=$as_save_IFS # 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 - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} + 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 : @@ -563,8 +571,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='pygobject' PACKAGE_TARNAME='pygobject' -PACKAGE_VERSION='2.27.0' -PACKAGE_STRING='pygobject 2.27.0' +PACKAGE_VERSION='2.27.90' +PACKAGE_STRING='pygobject 2.27.90' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=pygobject' PACKAGE_URL='' @@ -649,6 +657,7 @@ ENABLE_DOCS_FALSE ENABLE_DOCS_TRUE XSLTPROC PLATFORM +PYTHON_LIBS PYTHON_INCLUDES pkgpyexecdir pyexecdir @@ -665,7 +674,9 @@ OTOOL LIPO NMEDIT DSYMUTIL +MANIFEST_TOOL RANLIB +ac_ct_AR AR LN_S NM @@ -789,6 +800,7 @@ with_pic enable_fast_install enable_dependency_tracking with_gnu_ld +with_sysroot enable_libtool_lock enable_thread enable_docs @@ -806,6 +818,14 @@ LDFLAGS LIBS CPPFLAGS CPP +CPPFLAGS +CC +LDFLAGS +LIBS +CPPFLAGS +CC +LIBS +CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR @@ -881,8 +901,9 @@ do fi case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -1222,7 +1243,7 @@ Try \`$0 --help' for more information" $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} + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac @@ -1360,7 +1381,7 @@ 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 pygobject 2.27.0 to adapt to many kinds of systems. +\`configure' configures pygobject 2.27.90 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1430,7 +1451,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of pygobject 2.27.0:";; + short | recursive ) echo "Configuration of pygobject 2.27.90:";; esac cat <<\_ACEOF @@ -1462,6 +1483,8 @@ Optional Packages: --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). --without-ffi Disable libffi support Some influential environment variables: @@ -1559,8 +1582,8 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -pygobject configure 2.27.0 -generated by GNU Autoconf 2.66 +pygobject configure 2.27.90 +generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation @@ -1606,7 +1629,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile @@ -1652,7 +1675,7 @@ fi # 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link @@ -1666,7 +1689,7 @@ 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 "test \"\${$3+set}\"" = set; then : +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -1684,7 +1707,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile @@ -1709,7 +1732,7 @@ $as_echo "$ac_try_echo"; } >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { + test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : @@ -1720,7 +1743,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp @@ -1762,7 +1785,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run @@ -1775,7 +1798,7 @@ 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 "test \"\${$3+set}\"" = set; then : +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -1830,15 +1853,15 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + 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 pygobject $as_me 2.27.0, which was -generated by GNU Autoconf 2.66. Invocation command line was +It was created by pygobject $as_me 2.27.90, which was +generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2201,9 +2224,9 @@ $as_echo "#define PYGOBJECT_MINOR_VERSION 27" >>confdefs.h PYGOBJECT_MINOR_VERSION=27 -$as_echo "#define PYGOBJECT_MICRO_VERSION 0" >>confdefs.h +$as_echo "#define PYGOBJECT_MICRO_VERSION 90" >>confdefs.h -PYGOBJECT_MICRO_VERSION=0 +PYGOBJECT_MICRO_VERSION=90 ac_config_headers="$ac_config_headers config.h" @@ -2268,7 +2291,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. { $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 test "${ac_cv_path_install+set}" = set; then : +if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2445,7 +2468,7 @@ if test "$cross_compiling" != no; then 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 test "${ac_cv_prog_STRIP+set}" = set; then : +if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then @@ -2485,7 +2508,7 @@ if test -z "$ac_cv_prog_STRIP"; then 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then @@ -2538,7 +2561,7 @@ 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 test "${ac_cv_path_mkdir+set}" = set; then : + if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2589,7 +2612,7 @@ do 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 test "${ac_cv_prog_AWK+set}" = set; then : +if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then @@ -2629,7 +2652,7 @@ done $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 "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -2687,7 +2710,7 @@ fi # Define the identity of the package. PACKAGE='pygobject' - VERSION='2.27.0' + VERSION='2.27.90' cat >>confdefs.h <<_ACEOF @@ -2759,7 +2782,7 @@ $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : +if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias @@ -2793,7 +2816,7 @@ 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 test "${ac_cv_host+set}" = set; then : +if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then @@ -2909,7 +2932,7 @@ case $host in 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 test "${ac_cv_prog_AS+set}" = set; then : +if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then @@ -2949,7 +2972,7 @@ if test -z "$ac_cv_prog_AS"; then 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 test "${ac_cv_prog_ac_ct_AS+set}" = set; then : +if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then @@ -3001,7 +3024,7 @@ fi 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 test "${ac_cv_prog_DLLTOOL+set}" = set; then : +if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then @@ -3041,7 +3064,7 @@ if test -z "$ac_cv_prog_DLLTOOL"; then 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 test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then @@ -3093,7 +3116,7 @@ fi 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 test "${ac_cv_prog_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then @@ -3133,7 +3156,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then @@ -3211,8 +3234,8 @@ esac -macro_version='2.2.10' -macro_revision='1.3175' +macro_version='2.4' +macro_revision='1.3293' @@ -3252,7 +3275,7 @@ 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 && \ +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 @@ -3369,7 +3392,7 @@ if test -n "$ac_tool_prefix"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3409,7 +3432,7 @@ if test -z "$ac_cv_prog_CC"; then 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3462,7 +3485,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3502,7 +3525,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3561,7 +3584,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3605,7 +3628,7 @@ do 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3888,7 +3911,7 @@ 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 test "${ac_cv_objext+set}" = set; then : +if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -3939,7 +3962,7 @@ 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 test "${ac_cv_c_compiler_gnu+set}" = set; then : +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -3976,7 +3999,7 @@ 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 test "${ac_cv_prog_cc_g+set}" = set; then : +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag @@ -4054,7 +4077,7 @@ else 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 test "${ac_cv_prog_cc_c89+set}" = set; then : +if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no @@ -4153,7 +4176,7 @@ 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : +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 @@ -4278,7 +4301,7 @@ 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 test "${ac_cv_path_SED+set}" = set; then : +if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ @@ -4360,7 +4383,7 @@ 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 test "${ac_cv_path_GREP+set}" = set; then : +if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then @@ -4423,7 +4446,7 @@ $as_echo "$ac_cv_path_GREP" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : +if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 @@ -4490,7 +4513,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : +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 @@ -4621,7 +4644,7 @@ 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 test "${lt_cv_path_LD+set}" = set; then : +if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then @@ -4661,7 +4684,7 @@ 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 test "${lt_cv_prog_gnu_ld+set}" = set; then : +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. @@ -4688,7 +4711,7 @@ 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 test "${lt_cv_path_NM+set}" = set; then : +if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then @@ -4751,7 +4774,7 @@ else 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 test "${ac_cv_prog_DUMPBIN+set}" = set; then : +if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then @@ -4795,7 +4818,7 @@ do 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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then @@ -4867,7 +4890,7 @@ 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 test "${lt_cv_nm_interface+set}" = set; then : +if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" @@ -4902,7 +4925,7 @@ 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 test "${lt_cv_sys_max_cmd_len+set}" = set; then : +if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 @@ -5047,8 +5070,8 @@ $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"}, \ - = c,a/b,, \ + 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 @@ -5097,9 +5120,83 @@ 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 test "${lt_cv_ld_reload_flag+set}" = set; then : +if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' @@ -5113,6 +5210,11 @@ case $reload_flag in 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' @@ -5135,7 +5237,7 @@ if test -n "$ac_tool_prefix"; then 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 test "${ac_cv_prog_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then @@ -5175,7 +5277,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then @@ -5231,7 +5333,7 @@ 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 test "${lt_cv_deplibs_check_method+set}" = set; then : +if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' @@ -5433,6 +5535,21 @@ 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 @@ -5446,14 +5563,165 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + # 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 test "${ac_cv_prog_AR+set}" = set; then : +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 @@ -5466,7 +5734,7 @@ do 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}ar" + 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 @@ -5486,14 +5754,18 @@ $as_echo "no" >&6; } fi + test -n "$AR" && break + done fi -if test -z "$ac_cv_prog_AR"; then +if test -z "$AR"; then ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 + 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 test "${ac_cv_prog_ac_ct_AR+set}" = set; then : +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -5506,7 +5778,7 @@ do 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="ar" + 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 @@ -5525,6 +5797,10 @@ else $as_echo "no" >&6; } fi + + test -n "$ac_ct_AR" && break +done + if test "x$ac_ct_AR" = x; then AR="false" else @@ -5536,12 +5812,10 @@ ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi -else - AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru +: ${AR=ar} +: ${AR_FLAGS=cru} @@ -5553,12 +5827,70 @@ test -z "$AR_FLAGS" && 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 test "${ac_cv_prog_STRIP+set}" = set; then : +if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then @@ -5598,7 +5930,7 @@ if test -z "$ac_cv_prog_STRIP"; then 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then @@ -5657,7 +5989,7 @@ if test -n "$ac_tool_prefix"; then 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 test "${ac_cv_prog_RANLIB+set}" = set; then : +if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then @@ -5697,7 +6029,7 @@ if test -z "$ac_cv_prog_RANLIB"; then 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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then @@ -5826,7 +6158,7 @@ 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 test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : +if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else @@ -5887,8 +6219,8 @@ esac 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'" +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= @@ -5924,6 +6256,7 @@ for ac_symprfx in "" "_"; do 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 @@ -5965,6 +6298,18 @@ _LT_EOF 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 @@ -5976,7 +6321,7 @@ _LT_EOF cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ -const struct { +LT_DLSYM_CONST struct { const char *name; void *address; } @@ -6002,8 +6347,8 @@ static const void *lt_preloaded_setup() { _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" + 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 @@ -6013,8 +6358,8 @@ _LT_EOF test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi @@ -6051,6 +6396,14 @@ else $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 + + @@ -6069,6 +6422,46 @@ 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; } + @@ -6198,7 +6591,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) 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 test "${lt_cv_cc_needs_belf+set}" = set; then : +if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c @@ -6266,6 +6659,123 @@ 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*) @@ -6274,7 +6784,7 @@ need_locks="$enable_libtool_lock" 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 test "${ac_cv_prog_DSYMUTIL+set}" = set; then : +if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then @@ -6314,7 +6824,7 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then 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 test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then @@ -6366,7 +6876,7 @@ fi 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 test "${ac_cv_prog_NMEDIT+set}" = set; then : +if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then @@ -6406,7 +6916,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then 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 test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then @@ -6458,7 +6968,7 @@ fi 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 test "${ac_cv_prog_LIPO+set}" = set; then : +if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then @@ -6498,7 +7008,7 @@ if test -z "$ac_cv_prog_LIPO"; then 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 test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then @@ -6550,7 +7060,7 @@ fi 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 test "${ac_cv_prog_OTOOL+set}" = set; then : +if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then @@ -6590,7 +7100,7 @@ if test -z "$ac_cv_prog_OTOOL"; then 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 test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then @@ -6642,7 +7152,7 @@ fi 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 test "${ac_cv_prog_OTOOL64+set}" = set; then : +if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then @@ -6682,7 +7192,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then 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 test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then @@ -6757,7 +7267,7 @@ 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 test "${lt_cv_apple_cc_single_mod+set}" = set; then : +if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no @@ -6786,7 +7296,7 @@ fi $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 test "${lt_cv_ld_exported_symbols_list+set}" = set; then : +if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no @@ -6818,7 +7328,7 @@ fi $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 test "${lt_cv_ld_force_load+set}" = set; then : +if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no @@ -6895,7 +7405,7 @@ if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : + if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded @@ -6925,7 +7435,7 @@ else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -6941,11 +7451,11 @@ else ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi @@ -6984,7 +7494,7 @@ else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -7000,11 +7510,11 @@ else ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else @@ -7023,7 +7533,7 @@ 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 test "${ac_cv_header_stdc+set}" = set; then : +if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -7154,7 +7664,7 @@ 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" = x""yes; then : +if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF @@ -7309,7 +7819,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : +if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null @@ -7387,7 +7897,7 @@ 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; then : +if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in @@ -7453,7 +7963,7 @@ 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; then : +if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in @@ -7595,7 +8105,7 @@ if test "$GCC" = yes; then { $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 test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no @@ -7648,8 +8158,6 @@ fi lt_prog_compiler_pic= lt_prog_compiler_static= -{ $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 test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' @@ -7814,6 +8322,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } 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) @@ -7933,13 +8447,17 @@ case $host_os in lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - +{ $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. @@ -7947,7 +8465,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; } 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 test "${lt_cv_prog_compiler_pic_works+set}" = set; then : +if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no @@ -8000,13 +8518,18 @@ 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 test "${lt_cv_prog_compiler_static_works+set}" = set; then : +if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no @@ -8049,7 +8572,7 @@ 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 test "${lt_cv_prog_compiler_c_o+set}" = set; then : +if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no @@ -8104,7 +8627,7 @@ $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 test "${lt_cv_prog_compiler_c_o+set}" = set; then : +if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no @@ -8350,7 +8873,8 @@ _LT_EOF 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/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + 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' @@ -8398,7 +8922,7 @@ _LT_EOF if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then - tmp_addflag= + tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler @@ -8468,8 +8992,8 @@ _LT_EOF archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - 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' + 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 ;; @@ -8487,8 +9011,8 @@ _LT_EOF _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - 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' + 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 @@ -8534,8 +9058,8 @@ _LT_EOF *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - 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' + 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 @@ -8665,7 +9189,13 @@ _LT_EOF allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + 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 @@ -8678,22 +9208,29 @@ main () _ACEOF if ac_fn_c_try_link "$LINENO"; then : -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -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 "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi + 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + 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" @@ -8705,7 +9242,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi else # Determine the default libpath from the value encoded in an # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + 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 @@ -8718,22 +9261,29 @@ main () _ACEOF if ac_fn_c_try_link "$LINENO"; then : -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -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 "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi + 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + 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, @@ -8778,20 +9328,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. - 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' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes + 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*) @@ -8856,7 +9449,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + 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 @@ -8864,7 +9457,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hpux9*) if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + 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 @@ -8880,7 +9473,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi @@ -8904,10 +9497,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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 @@ -8924,7 +9517,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi # (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 test "${lt_cv_prog_compiler__b+set}" = set; then : +if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no @@ -8986,23 +9579,36 @@ fi irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then - archive_cmds='$CC -shared $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' + 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. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + # 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) {} +int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $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' - + 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" + 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' @@ -9087,7 +9693,7 @@ rm -f core conftest.err conftest.$ac_objext \ 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} $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' + 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 \*' @@ -9106,9 +9712,9 @@ rm -f core conftest.err conftest.$ac_objext \ no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + 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 ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $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"*) @@ -9296,7 +9902,7 @@ x|xyes) # 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 test "${lt_cv_archive_cmds_need_lc+set}" = set; then : +if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* @@ -9684,8 +10290,9 @@ cygwin* | mingw* | pw32* | cegcc*) need_version=no need_lib_prefix=no - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + 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}`~ @@ -9718,13 +10325,71 @@ cygwin* | mingw* | pw32* | cegcc*) 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 - dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; @@ -9938,7 +10603,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then : + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no @@ -10362,7 +11027,7 @@ else # 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 test "${ac_cv_lib_dl_dlopen+set}" = set; then : +if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10396,7 +11061,7 @@ 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" = x""yes; then : +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -10410,12 +11075,12 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : +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 test "${ac_cv_lib_dld_shl_load+set}" = set; then : +if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10449,16 +11114,16 @@ 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" = x""yes; then : +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" = x""yes; then : +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 test "${ac_cv_lib_dl_dlopen+set}" = set; then : +if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10492,12 +11157,12 @@ 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" = x""yes; then : +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 test "${ac_cv_lib_svld_dlopen+set}" = set; then : +if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10531,12 +11196,12 @@ 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" = x""yes; then : +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 test "${ac_cv_lib_dld_dld_link+set}" = set; then : +if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10570,7 +11235,7 @@ 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" = x""yes; then : +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi @@ -10611,7 +11276,7 @@ fi { $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 test "${lt_cv_dlopen_self+set}" = set; then : +if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : @@ -10664,10 +11329,10 @@ else /* 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)) -void fnord () __attribute__((visibility("default"))); +int fnord () __attribute__((visibility("default"))); #endif -void fnord () { int i=42; } +int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); @@ -10717,7 +11382,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; } 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 test "${lt_cv_dlopen_self_static+set}" = set; then : +if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : @@ -10770,10 +11435,10 @@ else /* 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)) -void fnord () __attribute__((visibility("default"))); +int fnord () __attribute__((visibility("default"))); #endif -void fnord () { int i=42; } +int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); @@ -11054,6 +11719,7 @@ fi 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 @@ -11380,8 +12046,8 @@ Usage: $0 [OPTIONS] Report bugs to ." lt_cl_version="\ -pygobject config.lt 2.27.0 -configured by $0, generated by GNU Autoconf 2.66. +pygobject config.lt 2.27.90 +configured by $0, generated by GNU Autoconf 2.68. Copyright (C) 2010 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation @@ -11454,12 +12120,18 @@ 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"`' @@ -11474,14 +12146,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de 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_wl='`$ECHO "$lt_prog_compiler_wl" | $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"`' @@ -11514,12 +12189,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q 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"`' -fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $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"`' @@ -11576,8 +12251,12 @@ 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 \ @@ -11587,12 +12266,14 @@ 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_wl \ 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 \ @@ -11608,7 +12289,6 @@ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ -fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ @@ -11644,6 +12324,7 @@ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ +postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ @@ -11817,16 +12498,36 @@ 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". +# 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 @@ -11856,6 +12557,12 @@ 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 @@ -11865,6 +12572,9 @@ 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 @@ -11979,12 +12689,12 @@ with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - # 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 @@ -12071,9 +12781,6 @@ inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols @@ -12089,6 +12796,9 @@ 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 @@ -12121,210 +12831,169 @@ ltmain="$ac_aux_dir/ltmain.sh" # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# 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 () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# 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 () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# 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_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}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# 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 () -{ - # Extract subdirectory from the argument. - 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_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} - - -# 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 -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || + 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" @@ -12347,7 +13016,7 @@ $lt_cl_success || as_fn_exit 1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } -if test "${ac_cv_search_strerror+set}" = set; then : +if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -12381,11 +13050,11 @@ for ac_lib in '' cposix; do fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test "${ac_cv_search_strerror+set}" = set; then : + if ${ac_cv_search_strerror+:} false; then : break fi done -if test "${ac_cv_search_strerror+set}" = set; then : +if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no @@ -12411,7 +13080,7 @@ if test -n "$ac_tool_prefix"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -12451,7 +13120,7 @@ if test -z "$ac_cv_prog_CC"; then 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -12504,7 +13173,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -12544,7 +13213,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -12603,7 +13272,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -12647,7 +13316,7 @@ do 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -12731,7 +13400,7 @@ 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 test "${ac_cv_c_compiler_gnu+set}" = set; then : +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12768,7 +13437,7 @@ 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 test "${ac_cv_prog_cc_g+set}" = set; then : +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag @@ -12846,7 +13515,7 @@ else 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 test "${ac_cv_prog_cc_c89+set}" = set; then : +if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no @@ -12945,7 +13614,7 @@ 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : +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 @@ -13078,7 +13747,7 @@ if test -n "$ac_tool_prefix"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -13118,7 +13787,7 @@ if test -z "$ac_cv_prog_CC"; then 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -13171,7 +13840,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -13211,7 +13880,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -13270,7 +13939,7 @@ if test -z "$CC"; then 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 test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -13314,7 +13983,7 @@ do 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -13398,7 +14067,7 @@ 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 test "${ac_cv_c_compiler_gnu+set}" = set; then : +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13435,7 +14104,7 @@ 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 test "${ac_cv_prog_cc_g+set}" = set; then : +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag @@ -13513,7 +14182,7 @@ else 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 test "${ac_cv_prog_cc_c89+set}" = set; then : +if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no @@ -13612,7 +14281,7 @@ 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : +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 @@ -13747,7 +14416,7 @@ $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 "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; then : +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 @@ -13899,7 +14568,7 @@ fi # VERSION. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.5.2" >&5 $as_echo_n "checking for a Python interpreter with version >= 2.5.2... " >&6; } -if test "${am_cv_pathless_PYTHON+set}" = set; then : +if ${am_cv_pathless_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else @@ -13933,7 +14602,7 @@ $as_echo "$am_cv_pathless_PYTHON" >&6; } set dummy $am_cv_pathless_PYTHON; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PYTHON+set}" = set; then : +if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in @@ -13981,7 +14650,7 @@ fi { $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 test "${am_cv_python_version+set}" = set; then : +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])"` @@ -14000,7 +14669,7 @@ $as_echo "$am_cv_python_version" >&6; } { $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 test "${am_cv_python_platform+set}" = set; then : +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)"` @@ -14014,7 +14683,7 @@ $as_echo "$am_cv_python_platform" >&6; } { $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 test "${am_cv_python_pythondir+set}" = set; then : +if ${am_cv_python_pythondir+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX'))" 2>/dev/null || @@ -14031,7 +14700,7 @@ $as_echo "$am_cv_python_pythondir" >&6; } { $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 test "${am_cv_python_pyexecdir+set}" = set; then : +if ${am_cv_python_pyexecdir+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX'))" 2>/dev/null || @@ -14108,7 +14777,7 @@ do 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 test "${ac_cv_path_PYTHON+set}" = set; then : +if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in @@ -14159,7 +14828,7 @@ test -n "$PYTHON" || PYTHON=":" { $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 test "${am_cv_python_version+set}" = set; then : +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])"` @@ -14178,7 +14847,7 @@ $as_echo "$am_cv_python_version" >&6; } { $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 test "${am_cv_python_platform+set}" = set; then : +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)"` @@ -14192,7 +14861,7 @@ $as_echo "$am_cv_python_platform" >&6; } { $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 test "${am_cv_python_pythondir+set}" = set; then : +if ${am_cv_python_pythondir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$prefix" = xNONE @@ -14230,7 +14899,7 @@ $as_echo "$am_cv_python_pythondir" >&6; } { $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 test "${am_cv_python_pyexecdir+set}" = set; then : +if ${am_cv_python_pyexecdir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$exec_prefix" = xNONE @@ -14275,15 +14944,19 @@ $as_echo "$am_cv_python_pyexecdir" >&6; } $as_echo_n "checking for headers required to compile python extensions... " >&6; } py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"` py_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"` -if test -x "$PYTHON-config"; then -PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null` +PYTHON_CONFIG=`which $PYTHON`-config +if test -x "$PYTHON_CONFIG"; then +PYTHON_INCLUDES=`$PYTHON_CONFIG --includes 2>/dev/null` +PYTHON_LIBS=`$PYTHON_CONFIG --libs 2>/dev/null` else PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" +PYTHON_LIBS="-lpython${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 @@ -14299,18 +14972,12 @@ else $as_echo "not found" >&6; } as_fn_error $? "could not find Python headers" "$LINENO" 5 fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext CPPFLAGS="$save_CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PySignal_SetWakeupFd in Python.h" >&5 $as_echo_n "checking for PySignal_SetWakeupFd in Python.h... " >&6; } -py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"` -if test -x "$PYTHON-config"; then -PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null` -else -PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" -fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS="-Wall -Werror $PYTHON_INCLUDES" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14362,7 +15029,7 @@ if test "${enable_docs}" != no; then set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_XSLTPROC+set}" = set; then : +if ${ac_cv_path_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in @@ -14417,7 +15084,7 @@ fi py_mod_var=`echo thread'_' | sed 'y%./+-%__p_%'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python module thread" >&5 $as_echo_n "checking for python module thread... " >&6; } -if eval "test \"\${py_cv_mod_$py_mod_var+set}\"" = set; then : +if eval \${py_cv_mod_$py_mod_var+:} false; then : $as_echo_n "(cached) " >&6 else @@ -14510,7 +15177,7 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then 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 test "${ac_cv_path_PKG_CONFIG+set}" = set; then : +if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in @@ -14553,7 +15220,7 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then 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 test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in @@ -14625,7 +15292,7 @@ fi PKG_CONFIG=no fi - min_glib_version=2.22.4 + min_glib_version=2.24.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB - version >= $min_glib_version" >&5 $as_echo_n "checking for GLIB - version >= $min_glib_version... " >&6; } @@ -14675,14 +15342,14 @@ else int main () { - int major, minor, micro; + unsigned int major, minor, micro; char *tmp_version; fclose (fopen ("conf.glibtest", "w")); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_glib_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + if (sscanf(tmp_version, "%u.%u.%u", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } @@ -14721,9 +15388,9 @@ main () } else { - printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); - printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n", major, minor, micro); printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); @@ -14971,12 +15638,12 @@ if test -n "$GIO_CFLAGS"; then pkg_cv_GIO_CFLAGS="$GIO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.22.4\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.22.4") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.24.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.24.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_GIO_CFLAGS=`$PKG_CONFIG --cflags "gio-2.0 >= 2.22.4" 2>/dev/null` + pkg_cv_GIO_CFLAGS=`$PKG_CONFIG --cflags "gio-2.0 >= 2.24.0" 2>/dev/null` else pkg_failed=yes fi @@ -14987,12 +15654,12 @@ if test -n "$GIO_LIBS"; then pkg_cv_GIO_LIBS="$GIO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.22.4\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.22.4") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.24.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.24.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_GIO_LIBS=`$PKG_CONFIG --libs "gio-2.0 >= 2.22.4" 2>/dev/null` + pkg_cv_GIO_LIBS=`$PKG_CONFIG --libs "gio-2.0 >= 2.24.0" 2>/dev/null` else pkg_failed=yes fi @@ -15012,9 +15679,9 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - GIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gio-2.0 >= 2.22.4" 2>&1` + GIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gio-2.0 >= 2.24.0" 2>&1` else - GIO_PKG_ERRORS=`$PKG_CONFIG --print-errors "gio-2.0 >= 2.22.4" 2>&1` + GIO_PKG_ERRORS=`$PKG_CONFIG --print-errors "gio-2.0 >= 2.24.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GIO_PKG_ERRORS" >&5 @@ -15160,17 +15827,17 @@ if test -n "$GI_CFLAGS"; then pkg_cv_GI_CFLAGS="$GI_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 \""; } >&5 - ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_GI_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + pkg_cv_GI_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 " 2>/dev/null` else pkg_failed=yes @@ -15182,17 +15849,17 @@ if test -n "$GI_LIBS"; then pkg_cv_GI_LIBS="$GI_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 \""; } >&5 - ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_GI_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + pkg_cv_GI_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 " 2>/dev/null` else pkg_failed=yes @@ -15213,19 +15880,19 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - GI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + GI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 " 2>&1` else - GI_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + GI_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GI_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (glib-2.0 >= 2.22.4 - gobject-introspection-1.0 >= 0.9.5 + as_fn_error $? "Package requirements (glib-2.0 >= 2.24.0 + gobject-introspection-1.0 >= 0.10.2 ) were not met: $GI_PKG_ERRORS @@ -15274,14 +15941,14 @@ if test -n "$PYCAIRO_CFLAGS"; then pkg_cv_PYCAIRO_CFLAGS="$PYCAIRO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pycairo >= 1.0.2 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pycairo >= 1.2.0 \""; } >&5 - ($PKG_CONFIG --exists --print-errors "pycairo >= 1.0.2 + ($PKG_CONFIG --exists --print-errors "pycairo >= 1.2.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_PYCAIRO_CFLAGS=`$PKG_CONFIG --cflags "pycairo >= 1.0.2 + pkg_cv_PYCAIRO_CFLAGS=`$PKG_CONFIG --cflags "pycairo >= 1.2.0 " 2>/dev/null` else pkg_failed=yes @@ -15293,14 +15960,14 @@ if test -n "$PYCAIRO_LIBS"; then pkg_cv_PYCAIRO_LIBS="$PYCAIRO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pycairo >= 1.0.2 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pycairo >= 1.2.0 \""; } >&5 - ($PKG_CONFIG --exists --print-errors "pycairo >= 1.0.2 + ($PKG_CONFIG --exists --print-errors "pycairo >= 1.2.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_PYCAIRO_LIBS=`$PKG_CONFIG --libs "pycairo >= 1.0.2 + pkg_cv_PYCAIRO_LIBS=`$PKG_CONFIG --libs "pycairo >= 1.2.0 " 2>/dev/null` else pkg_failed=yes @@ -15321,16 +15988,16 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - PYCAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "pycairo >= 1.0.2 + PYCAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "pycairo >= 1.2.0 " 2>&1` else - PYCAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors "pycairo >= 1.0.2 + PYCAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors "pycairo >= 1.2.0 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PYCAIRO_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (pycairo >= 1.0.2 + as_fn_error $? "Package requirements (pycairo >= 1.2.0 ) were not met: $PYCAIRO_PKG_ERRORS @@ -15566,10 +16233,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && + 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;} - cat confcache >$cache_file + 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;} @@ -15661,7 +16339,7 @@ if test -z "${ENABLE_CAIRO_TRUE}" && test -z "${ENABLE_CAIRO_FALSE}"; then Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -: ${CONFIG_STATUS=./config.status} +: "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" @@ -15762,6 +16440,7 @@ fi 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 @@ -16068,8 +16747,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by pygobject $as_me 2.27.0, which was -generated by GNU Autoconf 2.66. Invocation command line was +This file was extended by pygobject $as_me 2.27.90, which was +generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -16134,8 +16813,8 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -pygobject config.status 2.27.0 -configured by $0, generated by GNU Autoconf 2.66, +pygobject config.status 2.27.90 +configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. @@ -16156,11 +16835,16 @@ 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 @@ -16182,6 +16866,7 @@ do $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;; @@ -16288,12 +16973,18 @@ 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"`' @@ -16308,14 +16999,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de 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_wl='`$ECHO "$lt_prog_compiler_wl" | $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"`' @@ -16348,12 +17042,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q 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"`' -fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $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"`' @@ -16410,8 +17104,12 @@ 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 \ @@ -16421,12 +17119,14 @@ 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_wl \ 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 \ @@ -16442,7 +17142,6 @@ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ -fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ @@ -16478,6 +17177,7 @@ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ +postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ @@ -16566,9 +17266,10 @@ fi # after its creation but before its name has been assigned to `$tmp'. $debug || { - tmp= + tmp= ac_tmp= trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $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 } @@ -16576,12 +17277,13 @@ $debug || { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" + 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. @@ -16603,7 +17305,7 @@ else ac_cs_awk_cr=$ac_cr fi -echo 'BEGIN {' >"$tmp/subs1.awk" && +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF @@ -16631,7 +17333,7 @@ done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h @@ -16679,7 +17381,7 @@ t delim rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" @@ -16711,7 +17413,7 @@ 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 < "$tmp/subs1.awk" > "$tmp/subs.awk" \ +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF @@ -16745,7 +17447,7 @@ fi # test -n "$CONFIG_FILES" # 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 >"$tmp/defines.awk" <<\_ACAWK || +cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF @@ -16757,8 +17459,8 @@ _ACEOF # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then + 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 @@ -16878,7 +17580,7 @@ do for ac_f do case $ac_f in - -) ac_f="$tmp/stdin";; + -) 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 `:'. @@ -16913,7 +17615,7 @@ $as_echo "$as_me: creating $ac_file" >&6;} esac case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ + *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; @@ -17050,21 +17752,22 @@ 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 "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 +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' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { 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 "$tmp/stdin" + rm -f "$ac_tmp/stdin" case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + -) 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 ;; @@ -17075,20 +17778,20 @@ which seems to be undefined. Please make sure it is defined" >&2;} if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ + && 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" "$tmp/config.h" >/dev/null 2>&1; then + 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 "$tmp/config.h" "$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 "$tmp/defines.awk"' "$ac_file_inputs" \ + && 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. @@ -17363,16 +18066,36 @@ 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". +# 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 @@ -17402,6 +18125,12 @@ 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 @@ -17411,6 +18140,9 @@ 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 @@ -17525,12 +18257,12 @@ with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - # 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 @@ -17617,9 +18349,6 @@ inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols @@ -17635,6 +18364,9 @@ 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 @@ -17667,210 +18399,169 @@ ltmain="$ac_aux_dir/ltmain.sh" # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# 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 () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# 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 () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# 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_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}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# 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 () -{ - # Extract subdirectory from the argument. - 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_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} - - -# 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 -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || + 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" diff --git a/configure.ac b/configure.ac index 2eb6499..7b77401 100644 --- a/configure.ac +++ b/configure.ac @@ -12,14 +12,14 @@ m4_define(python3_min_ver, 3.1) dnl the pygobject version number m4_define(pygobject_major_version, 2) m4_define(pygobject_minor_version, 27) -m4_define(pygobject_micro_version, 0) +m4_define(pygobject_micro_version, 90) m4_define(pygobject_version, pygobject_major_version.pygobject_minor_version.pygobject_micro_version) dnl versions of packages we require ... -m4_define(introspection_required_version, 0.9.5) -m4_define(pycairo_required_version, 1.0.2) -m4_define(glib_required_version, 2.22.4) -m4_define(gio_required_version, 2.22.4) +m4_define(introspection_required_version, 0.10.2) +m4_define(pycairo_required_version, 1.2.0) +m4_define(glib_required_version, 2.24.0) +m4_define(gio_required_version, 2.24.0) m4_define(giounix_required_version, 2.22.4) AC_INIT(pygobject, pygobject_version, @@ -101,15 +101,9 @@ if test $build_py3k = true ; then [AC_MSG_ERROR(too old)]) fi -JD_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)]) +AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)]) AC_MSG_CHECKING([for PySignal_SetWakeupFd in Python.h]) -py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"` -if test -x "$PYTHON-config"; then -PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null` -else -PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" -fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS="-Wall -Werror $PYTHON_INCLUDES" AC_TRY_COMPILE([#include ], diff --git a/docs/Makefile.am b/docs/Makefile.am index 391eec8..418df8a 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -193,3 +193,5 @@ $(HTML_FILES): $(XML_FILES) $(XSL_FILES) # pdfxmltex pygobject-ref.fo >output output gio.AppInfo

gio.AppInfo

gio.AppInfo — Information about an installed application and methods to launch it (with file arguments).

Synopsis

class gio.AppInfo(gobject.GInterface):
+gio.AppInfo

gio.AppInfo

gio.AppInfo — Information about an installed application and methods to launch it (with file arguments).

Synopsis

class gio.AppInfo(gobject.GInterface):
     gio.AppInfo(commandline, application_name=None, flags=gio.APP_INFO_CREATE_NONE)
def add_supports_type(content_type)
def can_delete()
def can_remove_supports_type()
def delete()
def dup()
def equal(appinfo2)
def get_commandline()
def get_description()
def get_executable()
def get_icon()
def get_id()
def get_name()
def launch(files, launch_context)
def launch_uris(uris, launch_context)
def remove_supports_type(content_type)
def set_as_default_for_extension(extension)
def set_as_default_for_type(content_type)
def should_show()
def supports_files()
def supports_uris()
 Functions
  
-    def gio.app_info_get_all()
def gio.app_info_get_all_for_type(content_type)
def gio.app_info_get_default_for_type(content_type, must_support_uris)
def gio.app_info_get_default_for_uri_scheme(uri_scheme)
def gio.app_info_reset_type_association(content_type)

Known Implementation

+

Known Implementation

gio.AppInfo is implemented by gio.DesktopAppInfo -

Description

+

Description

gio.AppInfo and gio.AppLaunchContext are used for describing and launching applications installed on the system. @@ -43,7 +43,7 @@

Creates a new gio.AppInfo from the given information. -

Methods

gio.AppInfo.add_supports_type

    def add_supports_type(content_type)

content_type :

A string.

+

Methods

gio.AppInfo.add_supports_type

    def add_supports_type(content_type)

content_type :

A string.

The add_supports_type() method adds a content type to the application information to indicate the application is capable of opening files with the given content type. @@ -166,7 +166,7 @@

The supports_uris() method checks if the application accepts uris as arguments. -

Functions

gio.app_info_get_all

    def app_info_get_all()

Returns :

A list of gio.AppInfos. +

Functions

gio.app_info_get_all

    def app_info_get_all()

Returns :

A list of gio.AppInfos.

The app_info_get_all() function gets a list of all of the applications currently registered on this system. diff --git a/docs/html/class-gioapplaunchcontext.html b/docs/html/class-gioapplaunchcontext.html index 3c435dd..3d93295 100644 --- a/docs/html/class-gioapplaunchcontext.html +++ b/docs/html/class-gioapplaunchcontext.html @@ -1,7 +1,7 @@ -gio.AppLaunchContext

gio.AppLaunchContext

gio.AppLaunchContext — Application launch context.

Synopsis

class gio.AppLaunchContext(gobject.GObject):
-    gio.AppLaunchContext()
def get_display(info, files)
def get_startup_notify_id(info, files)
def launch_failed(startup_notify_id)

Ancestry

+-- gobject.GObject
+gio.AppLaunchContext

gio.AppLaunchContext

gio.AppLaunchContext — Application launch context.

Synopsis

class gio.AppLaunchContext(gobject.GObject):
+    gio.AppLaunchContext()
def get_display(info, files)
def get_startup_notify_id(info, files)
def launch_failed(startup_notify_id)

Description

+

Description

The gio.AppLaunchContext is used for integrating the launch with the launching application. This is used to handle for instance startup notification and launching the new application on the same screen as the launching window. @@ -11,7 +11,7 @@ Creates a new application launch context. This is not normally used, instead you instantiate a subclass of this, such as gtk.gdk.AppLaunchContext. -

Methods

gio.AppLaunchContext.get_display

    def get_display(info, files)

info :

a +

Methods

gio.AppLaunchContext.get_display

    def get_display(info, files)

info :

a gio.AppInfo

files :

a list of gio.File diff --git a/docs/html/class-gioasyncresult.html b/docs/html/class-gioasyncresult.html index cf6969a..ddc75ac 100644 --- a/docs/html/class-gioasyncresult.html +++ b/docs/html/class-gioasyncresult.html @@ -1,13 +1,13 @@ -gio.AsyncResult

gio.AsyncResult

gio.AsyncResult — Asynchronous Function Results.

Synopsis

class gio.AsyncResult(gobject.GInterface):
-    def get_source_object()

Ancestry

+-- gobject.GInterface
+gio.AsyncResult

gio.AsyncResult

gio.AsyncResult — Asynchronous Function Results.

Synopsis

class gio.AsyncResult(gobject.GInterface):
+    def get_source_object()

Prerequisites

+

Prerequisites

gio.AsyncResult is required by gobject.GObject. -

Known Implementation

+

Known Implementation

gio.AsyncResult is implemented by gio.SimpleAsyncResult. -

Description

+

Description

gio.AsyncResult provides a base class for implementing asynchronous function results.

@@ -37,7 +37,7 @@ separate thread, if GThread has been initialized, but otherwise they are sent to the Main Event Loop and processed in an idle function. So, if you truly need asynchronous operations, make sure to initialize GThread. -

Methods

gio.AsyncResult.get_source_object

    def get_source_object()

Returns :

the source object for the res. +

Methods

gio.AsyncResult.get_source_object

    def get_source_object()

Returns :

the source object for the res.

The get_source_object() method gets the source object from a gio.AsyncResult diff --git a/docs/html/class-giobufferedinputstream.html b/docs/html/class-giobufferedinputstream.html index 07a815f..e6a334b 100644 --- a/docs/html/class-giobufferedinputstream.html +++ b/docs/html/class-giobufferedinputstream.html @@ -1,12 +1,12 @@ -gio.BufferedInputStream

gio.BufferedInputStream

gio.BufferedInputStream — Buffered Input Stream

Synopsis

class gio.BufferedInputStream(gio.FilterInputStream):
+gio.BufferedInputStream

gio.BufferedInputStream

gio.BufferedInputStream — Buffered Input Stream

Synopsis

class gio.BufferedInputStream(gio.FilterInputStream):
     gio.BufferedInputStream(base_stream)
def fill(count, cancellable=None)
def fill_async(count, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def fill_finish(result)
def get_available()
def get_buffer_size()
def read_byte(cancellable=None)
def set_buffer_size(size)
 Functions
  
-    def gio.buffered_input_stream_new_sized(size)

gio.BufferedInputStream Properties

"buffer-size"Read - Write - ConstructThe size of the backend buffer. Allowed values: >= 1. Default value: 4096.

Description

+

gio.BufferedInputStream Properties

"buffer-size"Read - Write - ConstructThe size of the backend buffer. Allowed values: >= 1. Default value: 4096.

Description

gio.BufferedInputStream implements gio.FilterInputStream and provides for buffered reads. @@ -33,7 +33,7 @@

Creates a new gio.InputStream from the given base_stream, with a buffer set to the default size (4 kilobytes). -

Methods

gio.BufferedInputStream.fill

    def fill(count, cancellable=None)

count :

the number of bytes that will be read from the stream. +

Methods

gio.BufferedInputStream.fill

    def fill(count, cancellable=None)

count :

the number of bytes that will be read from the stream.

cancellable :

optional gio.Cancellable object, None to ignore. @@ -123,7 +123,7 @@ The set_buffer_size() method sets the size of the internal buffer of stream to size, or to the size of the contents of the buffer. The buffer can never be resized smaller than its current contents. -

Functions

gio.buffered_input_stream_new_sized

    def buffered_input_stream_new_sized(size)

size :

the requested buffer size. +

Functions

gio.buffered_input_stream_new_sized

    def buffered_input_stream_new_sized(size)

size :

the requested buffer size.

Returns :

A new gio.InputStream.

diff --git a/docs/html/class-giobufferedoutputstream.html b/docs/html/class-giobufferedoutputstream.html index 2e1491d..b2acf32 100644 --- a/docs/html/class-giobufferedoutputstream.html +++ b/docs/html/class-giobufferedoutputstream.html @@ -1,12 +1,12 @@ -gio.BufferedOutputStream

gio.BufferedOutputStream

gio.BufferedOutputStream — Buffered Output Stream

Synopsis

class gio.BufferedOutputStream(gio.FilterOutputStream):
+gio.BufferedOutputStream

gio.BufferedOutputStream

gio.BufferedOutputStream — Buffered Output Stream

Synopsis

class gio.BufferedOutputStream(gio.FilterOutputStream):
     gio.BufferedOutputStream(base_stream)
def get_auto_grow()
def get_buffer_size()
def set_auto_grow(auto_grow)
def set_buffer_size(size)
 Functions
  
-    def gio.buffered_output_stream_new_sized(size)

gio.BufferedOutputStream Properties

"auto-grow"Read - WriteWhether the buffer should automatically grow. Default value: False.
"buffer-size"Read - Write - ConstructThe size of the backend buffer. Allowed values: >= 1. Default value: 4096.

Description

+

gio.BufferedOutputStream Properties

"auto-grow"Read - WriteWhether the buffer should automatically grow. Default value: False.
"buffer-size"Read - Write - ConstructThe size of the backend buffer. Allowed values: >= 1. Default value: 4096.

Description

gio.BufferedOutputStream implements gio.FilterOutputStream and provides for buffered writes. @@ -32,7 +32,7 @@ for the given base_stream.

Creates a new buffered output stream for a base stream. -

Methods

gio.BufferedOutputStream.get_auto_grow

    def get_auto_grow()

Returns :

True if the stream's +

Methods

gio.BufferedOutputStream.get_auto_grow

    def get_auto_grow()

Returns :

True if the stream's buffer automatically grows, False otherwise.

The get_auto_grow() method checks if the @@ -51,7 +51,7 @@

The set_buffer_size() method sets the size of the internal buffer to size. -

Functions

gio.buffered_output_stream_new_sized

    def buffered_output_stream_new_sized(size)

size :

the requested buffer size. +

Functions

gio.buffered_output_stream_new_sized

    def buffered_output_stream_new_sized(size)

size :

the requested buffer size.

Returns :

A new gio.OutputStream with an internal buffer set to size.. diff --git a/docs/html/class-giocancellable.html b/docs/html/class-giocancellable.html index 6b99c70..2dd4e20 100644 --- a/docs/html/class-giocancellable.html +++ b/docs/html/class-giocancellable.html @@ -1,10 +1,10 @@ -gio.Cancellable

gio.Cancellable

gio.Cancellable — Thread-safe Operation Cancellation Stack.

Synopsis

class gio.Cancellable(gobject.GObject):
+gio.Cancellable

gio.Cancellable

gio.Cancellable — Thread-safe Operation Cancellation Stack.

Synopsis

class gio.Cancellable(gobject.GObject):
     gio.Cancellable()
def cancel()
def get_fd()
def is_cancelled()
def pop_current()
def push_current()
def reset()
def set_error_if_cancelled()
 Functions
  
-    def gio.cancellable_get_current()

Description

+

Description

The gio.Cancellable is a thread-safe operation cancellation stack used throughout GIO to allow for cancellation of synchronous and asynchronous operations. @@ -19,7 +19,7 @@

One gio.Cancellable can be used in multiple consecutive operations, but not in multiple concurrent operations. -

Methods

gio.Cancellable.cancel

    def cancel()

+

Methods

gio.Cancellable.cancel

    def cancel()

The cancel() method will set cancellable to cancelled, and will emit the "cancelled" signal. (However, see the warning about race conditions in the documentation for that signal if you are planning to connect to it.) @@ -55,7 +55,7 @@ False if it was not.

The set_error_if_cancelled() method, if the cancellable is cancelled, sets the error to notify that the operation was cancelled. -

Functions

gio.cancellable_get_current

    def cancellable_get_current()

Returns :

A gio.Cancellable +

Functions

gio.cancellable_get_current

    def cancellable_get_current()

Returns :

A gio.Cancellable from the top of the stack, or None if the stack is empty.

The cancellable_get_current() function gets the top cancellable from the stack.

diff --git a/docs/html/class-giodatainputstream.html b/docs/html/class-giodatainputstream.html index d230ec8..a5c99e6 100644 --- a/docs/html/class-giodatainputstream.html +++ b/docs/html/class-giodatainputstream.html @@ -1,10 +1,10 @@ -gio.DataInputStream

gio.DataInputStream

gio.DataInputStream — Data Input Stream

Synopsis

class gio.DataInputStream(gio.BufferedInputStream):
-    gio.DataInputStream(base_stream)
def get_byte_order()
def get_newline_type()
def read_byte(cancellable=None)
def read_int16(cancellable=None)
def read_int32(cancellable=None)
def read_int64(cancellable=None)
def read_line(cancellable=None)
def read_line_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def read_line_finish(result)
def read_uint16(cancellable=None)
def read_uint32(cancellable=None)
def read_uint64(cancellable=None)
def read_until(stop_chars, cancellable=None)
def read_until_async(stop_chars, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def read_until_finish(result)
def set_byte_order(order)
def set_newline_type(type)

Ancestry

+-- gobject.GObject
+gio.DataInputStream

gio.DataInputStream

gio.DataInputStream — Data Input Stream

Synopsis

class gio.DataInputStream(gio.BufferedInputStream):
+    gio.DataInputStream(base_stream)
def get_byte_order()
def get_newline_type()
def read_byte(cancellable=None)
def read_int16(cancellable=None)
def read_int32(cancellable=None)
def read_int64(cancellable=None)
def read_line(cancellable=None)
def read_line_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def read_line_finish(result)
def read_uint16(cancellable=None)
def read_uint32(cancellable=None)
def read_uint64(cancellable=None)
def read_until(stop_chars, cancellable=None)
def read_until_async(stop_chars, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def read_until_finish(result)
def set_byte_order(order)
def set_newline_type(type)

gio.DataInputStream Properties

"byte-order"Read - WriteThe byte order. Default value: gio.DATA_STREAM_BYTE_ORDER_BIG_ENDIAN.
"newline-type"Read - WriteThe accepted types of line ending. Default value: gio.DATA_STREAM_NEWLINE_TYPE_LF.

Description

+

gio.DataInputStream Properties

"byte-order"Read - WriteThe byte order. Default value: gio.DATA_STREAM_BYTE_ORDER_BIG_ENDIAN.
"newline-type"Read - WriteThe accepted types of line ending. Default value: gio.DATA_STREAM_NEWLINE_TYPE_LF.

Description

gio.DataInputStream implements gio.InputStream and includes functions for reading structured data directly from a binary input stream. @@ -15,7 +15,7 @@

Creates a new gio.DataInputStream from the given base_stream. -

Methods

gio.DataInputStream.get_byte_order

    def get_byte_order()

Returns :

the stream's current +

Methods

gio.DataInputStream.get_byte_order

    def get_byte_order()

Returns :

the stream's current Gio Data Stream Byte Order Constants.

The get_byte_order() method gets the byte diff --git a/docs/html/class-giodataoutputstream.html b/docs/html/class-giodataoutputstream.html index 14ca947..f95831d 100644 --- a/docs/html/class-giodataoutputstream.html +++ b/docs/html/class-giodataoutputstream.html @@ -1,12 +1,12 @@ -gio.DataOutputStream

gio.DataOutputStream

gio.DataOutputStream — Data Output Stream

Synopsis

class gio.DataOutputStream(gio.BufferedOutputStream):
-    gio.DataOutputStream(base_stream)
def get_byte_order()
def put_byte(cancellable=None)
def put_int16(cancellable=None)
def put_int32(cancellable=None)
def put_int64(cancellable=None)
def put_string(cancellable=None)
def put_uint16(cancellable=None)
def put_uint32(cancellable=None)
def put_uint64(cancellable=None)
def set_byte_order(order)

Ancestry

+-- gobject.GObject
+gio.DataOutputStream

gio.DataOutputStream

gio.DataOutputStream — Data Output Stream

Synopsis

class gio.DataOutputStream(gio.BufferedOutputStream):
+    gio.DataOutputStream(base_stream)
def get_byte_order()
def put_byte(cancellable=None)
def put_int16(cancellable=None)
def put_int32(cancellable=None)
def put_int64(cancellable=None)
def put_string(cancellable=None)
def put_uint16(cancellable=None)
def put_uint32(cancellable=None)
def put_uint64(cancellable=None)
def set_byte_order(order)

gio.DataOutputStream Properties

"byte-order"Read - WriteDetermines the byte ordering that is used when writing multi-byte entities (such as integers) to the stream. - Default value: gio.DATA_STREAM_BYTE_ORDER_BIG_ENDIAN.

Description

+ Default value: gio.DATA_STREAM_BYTE_ORDER_BIG_ENDIAN.

Description

gio.DataOutputStream implements gio.InputStream and includes functions for writing data directly to an output stream. @@ -17,7 +17,7 @@

Creates a new gio.DataOutputStream from the given base_stream. -

Methods

gio.DataOutputStream.get_byte_order

    def get_byte_order()

Returns :

the stream's current +

Methods

gio.DataOutputStream.get_byte_order

    def get_byte_order()

Returns :

the stream's current Gio Data Stream Byte Order Constants.

The get_byte_order() method gets the byte diff --git a/docs/html/class-giodrive.html b/docs/html/class-giodrive.html index d922c23..e1680ad 100644 --- a/docs/html/class-giodrive.html +++ b/docs/html/class-giodrive.html @@ -1,10 +1,10 @@ -gio.Drive

gio.Drive

gio.Drive — Virtual File System drive management.

Synopsis

class gio.Drive(gobject.GInterface):
-    def can_eject()
def can_poll_for_media()
def eject(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def eject_finish(result)
def enumerate_identifiers()
def get_icon()
def get_identifier()
def get_name()
def get_volumes()
def has_media()
def has_volumes()
def is_media_check_automatic()
def is_media_removable()
def poll_for_media(callback, cancellable=None, user_data=None)
def poll_for_media_finish(result)

Ancestry

+-- gobject.GInterface
+gio.Drive

gio.Drive

gio.Drive — Virtual File System drive management.

Synopsis

class gio.Drive(gobject.GInterface):
+    def can_eject()
def can_poll_for_media()
def eject(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def eject_finish(result)
def enumerate_identifiers()
def get_icon()
def get_identifier()
def get_name()
def get_volumes()
def has_media()
def has_volumes()
def is_media_check_automatic()
def is_media_removable()
def poll_for_media(callback, cancellable=None, user_data=None)
def poll_for_media_finish(result)

Ancestry

+-- gobject.GInterface
   +-- gio.Drive
-

Prerequisites

+

Prerequisites

gio.Drive requires gobject.GObject -

Description

+

Description

gio.Drive - this represent a piece of hardware connected to the machine. Its generally only created for removable hardware or hardware with removable media. @@ -24,7 +24,7 @@ For porting from GnomeVFS note that there is no equivalent of gio.Drive in that API. -

Methods

gio.Drive.can_eject

    def can_eject()

Returns :

True if the drive can be ejected, +

Methods

gio.Drive.can_eject

    def can_eject()

Returns :

True if the drive can be ejected, False otherwise.

The can_eject() method checks if a drive can be ejected. diff --git a/docs/html/class-gioemblem.html b/docs/html/class-gioemblem.html index 7f1d509..1f47604 100644 --- a/docs/html/class-gioemblem.html +++ b/docs/html/class-gioemblem.html @@ -1,14 +1,14 @@ -gio.Emblem

gio.Emblem

gio.Emblem — An object for emblems.

Synopsis

class gio.Emblem(gobject.GObject, gio.Icon):
+gio.Emblem

gio.Emblem

gio.Emblem — An object for emblems.

Synopsis

class gio.Emblem(gobject.GObject, gio.Icon):
     gio.Emblem(icon, origin=gio.EMBLEM_ORIGIN_UNKNOWN)
def get_icon()
def get_origin()
 Functions
  
-    def gio.emblem_new_with_origin(icon, origin)

Ancestry

+-- gobject.GObject
+    def gio.emblem_new_with_origin(icon, origin)

Ancestry

+-- gobject.GObject
   +-- gio.Emblem
-

Implemented Interfaces

+

Implemented Interfaces

gio.Emblem implements gio.Icon -

gio.Emblem Properties

"icon"Read - Write - Construct OnlyThe actual icon of the emblem.
"origin"Read - Write - Construct OnlyTells which origin the emblem is derived from.

Description

+

gio.Emblem Properties

"icon"Read - Write - Construct OnlyThe actual icon of the emblem.
"origin"Read - Write - Construct OnlyTells which origin the emblem is derived from.

Description

The gio.Emblem class is an implementation of gio.Icon that supports having an emblem, which is an icon with additional properties. @@ -27,14 +27,14 @@ Parameter origin is available since PyGObject 2.20.

Creates a new gio.Emblem for icon. -

Methods

gio.Emblem.get_icon

    def get_icon()

Returns :

a +

Methods

gio.Emblem.get_icon

    def get_icon()

Returns :

a gio.Icon.

The get_icon() method gives back the icon from emblem.

gio.Emblem.get_origin

    def get_origin()

Returns :

the origin of the emblem.

The get_origin() method gets the origin of the emblem. -

Functions

gio.emblem_new_with_origin

    def emblem_new_with_origin(icon, origin)

origin :

a Gio Emblem Origin Constants +

Functions

gio.emblem_new_with_origin

    def emblem_new_with_origin(icon, origin)

origin :

a Gio Emblem Origin Constants defining the emblem's origin.

Returns :

A gio.Emblem.

Note

diff --git a/docs/html/class-gioemblemedicon.html b/docs/html/class-gioemblemedicon.html index 2421c72..d4e4cfb 100644 --- a/docs/html/class-gioemblemedicon.html +++ b/docs/html/class-gioemblemedicon.html @@ -1,11 +1,11 @@ -gio.EmblemedIcon

gio.EmblemedIcon

gio.EmblemedIcon — Icon with emblems.

Synopsis

class gio.EmblemedIcon(gobject.GObject, gio.Icon):
-    gio.EmblemedIcon(icon, emblem)
def add_emblem(emblem)
def get_icon()

Ancestry

+-- gobject.GObject
+gio.EmblemedIcon

gio.EmblemedIcon

gio.EmblemedIcon — Icon with emblems.

Synopsis

class gio.EmblemedIcon(gobject.GObject, gio.Icon):
+    gio.EmblemedIcon(icon, emblem)
def add_emblem(emblem)
def get_icon()

Implemented Interfaces

+

Implemented Interfaces

gio.EmblemedIcon implements gio.Icon -

Description

+

Description

The gio.EmblemedIcon class is an implementation of gio.Icon that supports adding an emblem to an icon. Adding multiple emblems to an icon is ensured via @@ -25,7 +25,7 @@

Creates a new gio.Icon for icon with the emblem emblem. -

Methods

gio.EmblemedIcon.add_emblem

    def add_emblem(emblem)

emblem :

a +

Methods

gio.EmblemedIcon.add_emblem

    def add_emblem(emblem)

emblem :

a gio.Emblem

The add_emblem() method adds emblem to the diff --git a/docs/html/class-giofile.html b/docs/html/class-giofile.html index 15999e5..2c61524 100644 --- a/docs/html/class-giofile.html +++ b/docs/html/class-giofile.html @@ -1,12 +1,12 @@ -gio.File

gio.File

gio.File — File and Directory Handling.

Synopsis

class gio.File(gobject.GInterface):
+gio.File

gio.File

gio.File — File and Directory Handling.

Synopsis

class gio.File(gobject.GInterface):
     gio.File(commandline, path=None, uri=None)
def append_to(flags=gio.FILE_CREATE_NONE, cancellable=None)
def append_to_async(callback, flags=gio.FILE_CREATE_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def append_to_finish(result)
def copy(destination, progress_callback, flags=gio.FILE_COPY_NONE, cancellable=None, user_data=None)
def copy_async(destination, callback, progress_callback=None, flags=gio.FILE_CREATE_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None, progress_callback_data=None)
def copy_attributes(destination, flags=gio.FILE_COPY_NONE, cancellable=None)
def copy_finish(result)
def create(flags=gio.FILE_CREATE_NONE, cancellable=None)
def create_async(callback, flags=gio.FILE_CREATE_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def create_finish(result)
def delete(cancellable=None)
def dup()
def eject_mountable(callback, flags=gio.FILE_CREATE_NONE, cancellable=None, user_data=None)
def eject_mountable_finish(result)
def enumerate_children(attributes, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def enumerate_children_async(attributes, callback, flags=gio.FILE_QUERY_INFO_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def enumerate_children_finish(result)
def equal(file2)
def find_enclosing_mount(cancellable)
def find_enclosing_mount_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def find_enclosing_mount_finish(result)
def get_basename()
def get_child(name)
def get_child_for_display_name(display_name)
def get_parent()
def get_parse_name()
def get_path()
def get_relative_path(descendant)
def get_uri()
def get_uri_scheme()
def has_prefix(prefix)
def has_uri_scheme(uri_scheme)
def is_native()
def load_contents(cancellable)
def load_contents_async(callback, cancellable=None, user_data=None)
def load_contents_finish(result)
def make_directory(cancellable=None)
def make_directory_with_parents(cancellable=None)
def make_symbolic_link(symlink_value, cancellable)
def monitor(flags=gio.FILE_MONITOR_NONE, cancellable=None)
def monitor_directory(flags, cancellable=None)
def monitor_file(flags, cancellable=None)
def mount_enclosing_volume(mount_operation, callback, flags=gio.MOUNT_MOUNT_NONE, cancellable=None, user_data=None)
def mount_enclosing_volume_finish(result)
def mount_mountable(mount_operation, callback, flags=gio.MOUNT_MOUNT_NONE, cancellable=None, user_data=None)
def mount_mountable_finish(result)
def move(destination, progress_callback, flags=gio.FILE_COPY_NONE, cancellable=None, user_data=None)
def query_default_handler(cancellable)
def query_exists(cancellable)
def query_file_type(flags, cancellable)
def query_filesystem_info(attributes, cancellable)
def query_filesystem_info_async(attributes, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def query_filesystem_info_finish(result)
def query_info(attributes, flags, cancellable)
def query_info_async(attributes, callback, flags=gio.FILE_QUERY_INFO_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def query_info_finish(result)
def query_settable_attributes(cancellable=None)
def query_writable_namespace(cancellable=None)
def read(cancellable=None)
def read_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def read_finish(result=None)
def replace(etag, make_backup, flags=gio.FILE_CREATE_NONE, cancellable=None)
def replace_async(callback, etag=None, make_backup=True, flags=gio.FILE_CREATE_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def replace_contents(contents, etag=None, make_backup=True, flags=gio.FILE_CREATE_NONE, cancellable=None)
def replace_contents_async(contents, callback, etag=None, make_backup=True, flags=gio.FILE_CREATE_NONE, cancellable=None, user_data=None)
def replace_contents_finish(result=None)
def replace_finish(result=None)
def resolve_relative_path(relative_path)
def set_attribute(attribute, type, value_p, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def set_attribute_byte_string(attribute, value, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def set_attribute_int32(attribute, value, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def set_attribute_int64(attribute, value, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def set_attribute_string(attribute, value, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def set_attribute_uint32(attribute, value, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def set_attribute_uint64(attribute, value, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def set_attributes_async(info, callback, flags=gio.FILE_QUERY_INFO_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def set_attributes_finish(result)
def set_attributes_from_info(info, flags=gio.FILE_QUERY_INFO_NONE, cancellable=None)
def set_dispay_name(display_name, cancellable=None)
def set_display_name_async(display_name, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def set_display_name_finish(result)
def trash(cancellable=None)
def unmount_mountable(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def unmount_mountable_finish(cancellable=None)
 Functions
-    def gio.file_parse_name(parse_name)

Ancestry

+-- gobject.GInterface
+    def gio.file_parse_name(parse_name)

Ancestry

+-- gobject.GInterface
   +-- gio.File
-

Prerequisites

+

Prerequisites

gio.File is implemented by gobject.GObject -

Description

+

Description

gio.File is a high level abstraction for manipulating files on a virtual file system. gio.Files are lightweight, @@ -91,7 +91,7 @@

Creates a new gio.File either from a commandline, a path or an uri. -

Methods

gio.File.append_to

    def append_to(flags=gio.FILE_CREATE_NONE, cancellable=None)

flags :

a set of +

Methods

gio.File.append_to

    def append_to(flags=gio.FILE_CREATE_NONE, cancellable=None)

flags :

a set of Gio File Create Flags Constants

cancellable :

optional gio.Cancellable @@ -1425,7 +1425,7 @@ URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] The unmount_mountable_finish() method finishes an asynchronous copy operation started with gio.File.unmount_mountable(). -

Functions

gio.file_parse_name

    def file_parse_name(parse_name)

parse_name :

a file name or path to be parsed. +

Functions

gio.file_parse_name

    def file_parse_name(parse_name)

parse_name :

a file name or path to be parsed.

Returns :

a new gio.File.

The parse_name() function constructs a diff --git a/docs/html/class-giofileattributeinfo.html b/docs/html/class-giofileattributeinfo.html index bab0dde..00444a4 100644 --- a/docs/html/class-giofileattributeinfo.html +++ b/docs/html/class-giofileattributeinfo.html @@ -1,7 +1,7 @@ -gio.FileAttributeInfo

gio.FileAttributeInfo

gio.FileAttributeInfo — Information about a specific attribute.

Synopsis

class gio.FileAttributeInfo(__builtin__.object):
-

Ancestry

+-- __builtin__.object
+gio.FileAttributeInfo

gio.FileAttributeInfo

gio.FileAttributeInfo — Information about a specific attribute.

Synopsis

class gio.FileAttributeInfo(__builtin__.object):
+

Ancestry

+-- __builtin__.object
   +-- gio.FileAttributeInfo
-

Description

+

Description

The gio.FileAttributeInfo contains information about a specific attribute.

gio.FileAttributeInfo Attributes

"name"ReadThe name of the attribute.
"type"Readthe diff --git a/docs/html/class-giofileenumerator.html b/docs/html/class-giofileenumerator.html index f07e2c0..117a94c 100644 --- a/docs/html/class-giofileenumerator.html +++ b/docs/html/class-giofileenumerator.html @@ -1,7 +1,7 @@ -gio.FileEnumerator

gio.FileEnumerator

gio.FileEnumerator — Enumerated Files Routines.

Synopsis

class gio.FileEnumerator(gobject.GObject):
-    def close(cancellable=None)
def close_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def close_finish(result)
def get_container()
def has_pending()
def is_closed()
def next_file(cancellable=None)
def next_files_async(num_files, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def next_files_finish(result)
def set_pending(pending)

Ancestry

+-- gobject.GObject
+gio.FileEnumerator

gio.FileEnumerator

gio.FileEnumerator — Enumerated Files Routines.

Synopsis

class gio.FileEnumerator(gobject.GObject):
+    def close(cancellable=None)
def close_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def close_finish(result)
def get_container()
def has_pending()
def is_closed()
def next_file(cancellable=None)
def next_files_async(num_files, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def next_files_finish(result)
def set_pending(pending)

gio.FileEnumerator Properties

"container"Write - Construct onlyThe container that is being enumerated.

Description

+

gio.FileEnumerator Properties

"container"Write - Construct onlyThe container that is being enumerated.

Description

The gio.FileEnumerator allows you to operate on a set of gio.Files @@ -27,7 +27,7 @@ close_async. Once a gio.FileEnumerator is closed, no further actions may be performed on it. -

Methods

gio.FileEnumerator.close

    def close(cancellable=None)

cancellable :

Optional +

Methods

gio.FileEnumerator.close

    def close(cancellable=None)

cancellable :

Optional gio.Cancellable object, None to ignore.

Returns :

True on success or diff --git a/docs/html/class-giofileicon.html b/docs/html/class-giofileicon.html index 0cc3e2f..b10772e 100644 --- a/docs/html/class-giofileicon.html +++ b/docs/html/class-giofileicon.html @@ -1,7 +1,7 @@ -gio.FileIcon

gio.FileIcon

gio.FileIcon — Icons pointing to an image file.

Synopsis

class gio.FileIcon(gobject.GObject, gio.Icon, gio.LoadableIcon):
-    gio.FileIcon(file)
def get_file()

Ancestry

+-- gobject.GObject
+gio.FileIcon

gio.FileIcon

gio.FileIcon — Icons pointing to an image file.

Synopsis

class gio.FileIcon(gobject.GObject, gio.Icon, gio.LoadableIcon):
+    gio.FileIcon(file)
def get_file()

Ancestry

+-- gobject.GObject
   +-- gio.FileIcon
-

Description

+

Description

The gio.FileIcon specifies an icon by pointing to an image file to be used as icon.

Constructor

    gio.FileIcon(file)

file :

a @@ -11,7 +11,7 @@ for the given file, or None on error.

Creates a new icon for a file. -

Methods

gio.FileIcon.get_file

    def get_file()

Returns :

a +

Methods

gio.FileIcon.get_file

    def get_file()

Returns :

a gio.File or None.

diff --git a/docs/html/class-giofileinfo.html b/docs/html/class-giofileinfo.html index d2e47c5..bd01068 100644 --- a/docs/html/class-giofileinfo.html +++ b/docs/html/class-giofileinfo.html @@ -1,7 +1,7 @@ -gio.FileInfo

gio.FileInfo

gio.FileInfo — File Information and Attributes

Synopsis

class gio.FileInfo(gobject.GObject):
-    gio.FileInfo()
def clear_status()
def copy_into()
def dup()
def get_attribute_as_string(attribute)
def get_attribute_boolean(attribute)
def get_attribute_byte_string(attribute)
def get_attribute_data(attribute)
def get_attribute_int32(attribute)
def get_attribute_int64(attribute)
def get_attribute_object(attribute)
def get_attribute_status(attribute)
def get_attribute_string(attribute)
def get_attribute_type(attribute)
def get_attribute_uint32(attribute)
def get_attribute_uint64(attribute)
def get_content_type()
def get_display_name()
def get_edit_name()
def get_etag()
def get_file_type()
def get_icon()
def get_is_backup()
def get_is_hidden()
def get_is_symlink()
def get_modification_time()
def get_name()
def get_size()
def get_sort_order()
def get_symlink_target()
def has_attribute(attribute)
def list_attributes(name_space)
def remove_attribute(attribute)
def set_attribute(attribute, type, value_p)
def set_attribute_boolean(attribute, attr_value)
def set_attribute_byte_string(attribute, attr_value)
def set_attribute_data(attribute, attr_value)
def set_attribute_int32(attribute, attr_value)
def set_attribute_int64(attribute, attr_value)
def set_attribute_mask(mask)
def set_attribute_object(attribute, attr_value)
def set_attribute_status(attribute, attr_value)
def set_attribute_string(attribute, attr_value)
def set_attribute_uint32(attribute)
def set_attribute_uint64(attribute)
def set_content_type(content_type)
def set_display_name(display_name)
def set_edit_name(edit_name)
def set_file_type(type)
def set_icon(icon)
def set_is_hidden(is_hidden)
def set_is_symlink(is_symlink)
def set_modification_time(mtime)
def set_name(name)
def set_size(size)
def set_sort_order(sort_order)
def set_symlink_tarset(symlink_target)
def unset_attribute_mask()

Ancestry

+-- gobject.GObject
+gio.FileInfo

gio.FileInfo

gio.FileInfo — File Information and Attributes

Synopsis

class gio.FileInfo(gobject.GObject):
+    gio.FileInfo()
def clear_status()
def copy_into()
def dup()
def get_attribute_as_string(attribute)
def get_attribute_boolean(attribute)
def get_attribute_byte_string(attribute)
def get_attribute_data(attribute)
def get_attribute_int32(attribute)
def get_attribute_int64(attribute)
def get_attribute_object(attribute)
def get_attribute_status(attribute)
def get_attribute_string(attribute)
def get_attribute_type(attribute)
def get_attribute_uint32(attribute)
def get_attribute_uint64(attribute)
def get_content_type()
def get_display_name()
def get_edit_name()
def get_etag()
def get_file_type()
def get_icon()
def get_is_backup()
def get_is_hidden()
def get_is_symlink()
def get_modification_time()
def get_name()
def get_size()
def get_sort_order()
def get_symlink_target()
def has_attribute(attribute)
def list_attributes(name_space)
def remove_attribute(attribute)
def set_attribute(attribute, type, value_p)
def set_attribute_boolean(attribute, attr_value)
def set_attribute_byte_string(attribute, attr_value)
def set_attribute_data(attribute, attr_value)
def set_attribute_int32(attribute, attr_value)
def set_attribute_int64(attribute, attr_value)
def set_attribute_mask(mask)
def set_attribute_object(attribute, attr_value)
def set_attribute_status(attribute, attr_value)
def set_attribute_string(attribute, attr_value)
def set_attribute_uint32(attribute)
def set_attribute_uint64(attribute)
def set_content_type(content_type)
def set_display_name(display_name)
def set_edit_name(edit_name)
def set_file_type(type)
def set_icon(icon)
def set_is_hidden(is_hidden)
def set_is_symlink(is_symlink)
def set_modification_time(mtime)
def set_name(name)
def set_size(size)
def set_sort_order(sort_order)
def set_symlink_tarset(symlink_target)
def unset_attribute_mask()

Ancestry

+-- gobject.GObject
   +-- gio.FileInfo
-

Description

+

Description

Functionality for manipulating basic metadata for files. gio.FileInfo implements methods for getting information that all files should contain, @@ -39,4 +39,4 @@ gio.FileInfo

Creates a new gio.FileInfo -

Methods

Unfinished section, you may want to see the relevant C API docs for methods descriptions.

+

Methods

Unfinished section, you may want to see the relevant C API docs for methods descriptions.

diff --git a/docs/html/class-giofileinputstream.html b/docs/html/class-giofileinputstream.html index 939e463..cef8842 100644 --- a/docs/html/class-giofileinputstream.html +++ b/docs/html/class-giofileinputstream.html @@ -1,12 +1,12 @@ -gio.FileInputStream

gio.FileInputStream

gio.FileInputStream — Base class for implementing streaming input

Synopsis

class gio.FileInputStream(gio.InputStream):
-    def query_info(attributes, cancellable=None)
def query_info_async(attributes, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def query_info_finish(result)

Ancestry

+-- gobject.GObject
+gio.FileInputStream

gio.FileInputStream

gio.FileInputStream — Base class for implementing streaming input

Synopsis

class gio.FileInputStream(gio.InputStream):
+    def query_info(attributes, cancellable=None)
def query_info_async(attributes, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def query_info_finish(result)

Implemented Interfaces

+

Implemented Interfaces

gio.FileInputStream implements gio.Seekable -

Description

+

Description

gio.FileInputStream provides input streams that take their content from a file.

@@ -21,7 +21,7 @@ gio.Seekable.can_seek(). To position a file input stream, use gio.Seekable.seek(). -

Methods

gio.FileInputStream.query_info

    def query_info(attributes, cancellable=None)

attributes :

a file attribute query string. +

Methods

gio.FileInputStream.query_info

    def query_info(attributes, cancellable=None)

attributes :

a file attribute query string.

cancellable :

optional gio.Cancellable object, None to ignore. diff --git a/docs/html/class-giofilemonitor.html b/docs/html/class-giofilemonitor.html index 735e4cc..3fbd1f7 100644 --- a/docs/html/class-giofilemonitor.html +++ b/docs/html/class-giofilemonitor.html @@ -1,12 +1,12 @@ -gio.FileMonitor

gio.FileMonitor

gio.FileMonitor — File Monitor

Synopsis

class gio.FileMonitor(gobject.GObject):
-    def cancel()
def emit_event(child, other_file, event_type)
def is_cancelled()
def set_rate_limit(limit_msecs)

Ancestry

+-- gobject.GObject
+gio.FileMonitor

gio.FileMonitor

gio.FileMonitor — File Monitor

Synopsis

class gio.FileMonitor(gobject.GObject):
+    def cancel()
def emit_event(child, other_file, event_type)
def is_cancelled()
def set_rate_limit(limit_msecs)

gio.FileMonitor Properties

"cancelled"Read Whether the monitor has been cancelled. Default value: False.
"rate-limit"Read/Write The limit of the monitor to watch for changes, in milliseconds. Allowed values: >= 0. Default value: 800. -

gio.FileMonitor Signal Prototypes

gobject.GObject Signal Prototypes

"changed"

def callback(filemonitor, file, other_file, event_type, user_param1, ...)

Description

+

gio.FileMonitor Signal Prototypes

gobject.GObject Signal Prototypes

"changed"

def callback(filemonitor, file, other_file, event_type, user_param1, ...)

Description

The gio.FileMonitor monitors a file or directory for changes.

@@ -18,4 +18,4 @@

To get informed about changes to the file or directory you are monitoring, connect to the "changed" signal. -

Methods

Unfinished section, you may want to see the relevant C API docs for methods descriptions.

+

Methods

Unfinished section, you may want to see the relevant C API docs for methods descriptions.

diff --git a/docs/html/class-giofileoutputstream.html b/docs/html/class-giofileoutputstream.html index 6fdf47a..aaa529f 100644 --- a/docs/html/class-giofileoutputstream.html +++ b/docs/html/class-giofileoutputstream.html @@ -1,12 +1,12 @@ -gio.FileOutputStream

gio.FileOutputStream

gio.FileOutputStream — Base class for implementing streaming input

Synopsis

class gio.FileOutputStream(gio.OutputStream):
-    def get_etag()
def query_info(attributes, cancellable=None)
def query_info_async(attributes, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def query_info_finish(result)

Ancestry

+-- gobject.GObject
+gio.FileOutputStream

gio.FileOutputStream

gio.FileOutputStream — Base class for implementing streaming input

Synopsis

class gio.FileOutputStream(gio.OutputStream):
+    def get_etag()
def query_info(attributes, cancellable=None)
def query_info_async(attributes, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def query_info_finish(result)

Implemented Interfaces

+

Implemented Interfaces

gio.FileOutputStream implements gio.Seekable -

Description

+

Description

gio.FileOutputStream provides output streams that write their content to a file.

@@ -26,7 +26,7 @@ gio.FileOutputStream.can_truncate(). To truncate a file output stream, use gio.Seekable.truncate(). -

Methods

gio.FileOutputStream.get_etag

    def get_etag()

Returns :

the entity tag for the stream. +

Methods

gio.FileOutputStream.get_etag

    def get_etag()

Returns :

the entity tag for the stream.

The get_etag() method gets the entity tag for the file when it has been written. This must be called after the diff --git a/docs/html/class-giofilterinputstream.html b/docs/html/class-giofilterinputstream.html index e8b9a70..52a66d4 100644 --- a/docs/html/class-giofilterinputstream.html +++ b/docs/html/class-giofilterinputstream.html @@ -1,11 +1,11 @@ -gio.FilterInputStream

gio.FilterInputStream

gio.FilterInputStream — Filter Input Stream

Synopsis

class gio.FilterInputStream(gio.InputStream):
-    def get_base_stream()
def get_close_base_stream()
def set_close_base_stream(close_base)

Ancestry

+-- gobject.GObject
+gio.FilterInputStream

gio.FilterInputStream

gio.FilterInputStream — Filter Input Stream

Synopsis

class gio.FilterInputStream(gio.InputStream):
+    def get_base_stream()
def get_close_base_stream()
def set_close_base_stream(close_base)

gio.FilterInputStream Properties

"base-stream"Read - Write - Construct onlyThe underlying base stream on which the io ops will be done.
"close-base-stream"Read - Write - Construct onlyIf the base stream should be closed when the filter stream is closed. - Default value: True.

Description

+ Default value: True.

Description

Filter Input Stream. -

Methods

gio.FilterInputStream.get_base_stream

    def get_base_stream()

Returns :

A +

Methods

gio.FilterInputStream.get_base_stream

    def get_base_stream()

Returns :

A gio.InputStream

The get_base_stream() method gets the base diff --git a/docs/html/class-giofilteroutputstream.html b/docs/html/class-giofilteroutputstream.html index 5174045..18bed0e 100644 --- a/docs/html/class-giofilteroutputstream.html +++ b/docs/html/class-giofilteroutputstream.html @@ -1,11 +1,11 @@ -gio.FilterOutputStream

gio.FilterOutputStream

gio.FilterOutputStream — Filter Output Stream

Synopsis

class gio.FilterOutputStream(gio.OutputStream):
-    def get_base_stream()
def get_close_base_stream()
def set_close_base_stream(close_base)

Ancestry

+-- gobject.GObject
+gio.FilterOutputStream

gio.FilterOutputStream

gio.FilterOutputStream — Filter Output Stream

Synopsis

class gio.FilterOutputStream(gio.OutputStream):
+    def get_base_stream()
def get_close_base_stream()
def set_close_base_stream(close_base)

gio.FilterOutputStream Properties

"base-stream"Read - Write - Construct onlyThe underlying base stream on which the io ops will be done.
"close-base-stream"Read - Write - Construct onlyIf the base stream should be closed when the filter stream is closed. - Default value: True.

Description

+ Default value: True.

Description

Filter Output Stream. -

Methods

gio.FilterOutputStream.get_base_stream

    def get_base_stream()

Returns :

A +

Methods

gio.FilterOutputStream.get_base_stream

    def get_base_stream()

Returns :

A gio.OutputStream

The get_base_stream() method gets the base diff --git a/docs/html/class-gioicon.html b/docs/html/class-gioicon.html index d2a9d33..c10c65d 100644 --- a/docs/html/class-gioicon.html +++ b/docs/html/class-gioicon.html @@ -1,19 +1,19 @@ -gio.Icon

gio.Icon

gio.Icon — Interface for icons.

Synopsis

class gio.Icon(gobject.GInterface):
+gio.Icon

gio.Icon

gio.Icon — Interface for icons.

Synopsis

class gio.Icon(gobject.GInterface):
     def equal(icon2)
def to_string()
 Functions
  
-    def gio.icon_new_from_string()

Ancestry

+-- gobject.GInterface
   +-- gio.Icon
-

Known Derived Interfaces

+

Known Derived Interfaces

gio.Icon is required by gio.LoadableIcon. -

Known Implementation

+

Known Implementation

gio.Icon is implemented by gio.ThemedIcon, gio.FileIcon, gio.Emblem, gio.EmblemedIcon. -

Description

+

Description

gio.Icon is a very minimal interface for icons. It provides functions for checking the equality of two icons, hashing of icons and serializing an icon to and from strings. @@ -39,7 +39,7 @@ implementations you need to ensure that each GType is registered with the type system prior to calling gio.icon_new_from_string(). -

Methods

gio.Icon.equal

    def equal(icon2)

icon2 :

the second +

Methods

gio.Icon.equal

    def equal(icon2)

icon2 :

the second gio.Icon

The equal() method checks if two icons are equal. @@ -63,7 +63,7 @@

If icon is a gio.ThemedIcon with exactly one name, the encoding is simply the name (such as network-server). -

Functions

gio.icon_new_from_string

    def icon_new_from_string(str)

str :

A string obtained via +

Functions

gio.icon_new_from_string

    def icon_new_from_string(str)

str :

A string obtained via gio.Icon.to_string().

Returns :

An object implementing the gio.Icon diff --git a/docs/html/class-gioinputstream.html b/docs/html/class-gioinputstream.html index f0a0d09..fd9efa8 100644 --- a/docs/html/class-gioinputstream.html +++ b/docs/html/class-gioinputstream.html @@ -1,7 +1,7 @@ -gio.InputStream

gio.InputStream

gio.InputStream — Base class for implementing streaming input

Synopsis

class gio.InputStream(gobject.GObject):
-    def clear_pending()
def close(cancellable=None)
def close_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def close_finish(result)
def has_pending()
def is_closed()
def read(count=-1, cancellable=None)
def read_async(count, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def read_finish(result)
def read_part(count=-1, cancellable=None)
def set_pending()
def skip(count, cancellable=None)
def skip_async(count, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def skip_finish(result)

Ancestry

+-- gobject.GObject
+gio.InputStream

gio.InputStream

gio.InputStream — Base class for implementing streaming input

Synopsis

class gio.InputStream(gobject.GObject):
+    def clear_pending()
def close(cancellable=None)
def close_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def close_finish(result)
def has_pending()
def is_closed()
def read(count=-1, cancellable=None)
def read_async(count, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def read_finish(result)
def read_part(count=-1, cancellable=None)
def set_pending()
def skip(count, cancellable=None)
def skip_async(count, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def skip_finish(result)

Description

+

Description

gio.InputStream has functions to read from a stream ( gio.InputStream.read() @@ -16,7 +16,7 @@ gio.OutputStream.splice().

All of these functions have async variants too. -

Methods

gio.InputStream.clear_pending

    def clear_pending()

+

Methods

gio.InputStream.clear_pending

    def clear_pending()

The clear_pending() method clears the pending flag on stream.

gio.InputStream.close

    def close(cancellable=None)

cancellable :

optional gio.Cancellable diff --git a/docs/html/class-gioloadableicon.html b/docs/html/class-gioloadableicon.html index b2adfe3..f76c42c 100644 --- a/docs/html/class-gioloadableicon.html +++ b/docs/html/class-gioloadableicon.html @@ -1,18 +1,18 @@ -gio.LoadableIcon

gio.LoadableIcon

gio.LoadableIcon — Interface for icons.

Synopsis

class gio.LoadableIcon(gobject.GInterface):
-    def load(size=0, cancellable=None)
def load_async(callback, size=0, cancellable=None, user_data=None)
def load_finish(res)

Ancestry

+-- gobject.GInterface
+gio.LoadableIcon

gio.LoadableIcon

gio.LoadableIcon — Interface for icons.

Synopsis

class gio.LoadableIcon(gobject.GInterface):
+    def load(size=0, cancellable=None)
def load_async(callback, size=0, cancellable=None, user_data=None)
def load_finish(res)

Prerequisites

+

Prerequisites

gio.LoadableIcon requires gio.Icon. and gobject.GObject -

Known Implementation

+

Known Implementation

gio.LoadableIcon is implemented by gio.FileIcon -

Description

+

Description

gio.LoadableIcon extends the gio.Icon interface and adds the ability to load icons from streams. -

Methods

gio.LoadableIcon.load

    def load(size=0, cancellable=None)

size :

an integer +

Methods

gio.LoadableIcon.load

    def load(size=0, cancellable=None)

size :

an integer

cancellable :

optional gio.Cancellable object, None to ignore. diff --git a/docs/html/class-giomemoryinputstream.html b/docs/html/class-giomemoryinputstream.html index 120a0a2..acee406 100644 --- a/docs/html/class-giomemoryinputstream.html +++ b/docs/html/class-giomemoryinputstream.html @@ -1,15 +1,15 @@ -gio.MemoryInputStream

gio.MemoryInputStream

gio.MemoryInputStream — Base class for implementing streaming input

Synopsis

class gio.MemoryInputStream(gio.InputStream):
+gio.MemoryInputStream

gio.MemoryInputStream

gio.MemoryInputStream — Base class for implementing streaming input

Synopsis

class gio.MemoryInputStream(gio.InputStream):
     gio.MemoryInputStream()
def add_data(data)
 Functions
  
-    def gio.memory_input_stream_new_from_data(data)

Implemented Interfaces

+

Implemented Interfaces

gio.MemoryInputStream implements gio.Seekable -

Description

+

Description

gio.MemoryInputStream is a class for using arbitrary memory chunks as input for GIO streaming input operations.

Constructor

    gio.MemoryInputStream(icon)

Returns :

a new @@ -17,11 +17,11 @@

Creates an empty gio.MemoryInputStream. -

Methods

gio.MemoryInputStream.add_data

    def add_data(data)

data :

input data. +

Methods

gio.MemoryInputStream.add_data

    def add_data(data)

data :

input data.

The add_data() method appends data to data that can be read from the input stream -

Functions

gio.memory_input_stream_new_from_data

    def memory_input_stream_new_from_data(data)

data :

input data. +

Functions

gio.memory_input_stream_new_from_data

    def memory_input_stream_new_from_data(data)

data :

input data.

Returns :

A new gio.MemoryInputStream read from data diff --git a/docs/html/class-giomemoryoutputstream.html b/docs/html/class-giomemoryoutputstream.html index c901cf7..bc36c22 100644 --- a/docs/html/class-giomemoryoutputstream.html +++ b/docs/html/class-giomemoryoutputstream.html @@ -1,12 +1,12 @@ -gio.MemoryOutputStream

gio.MemoryOutputStream

gio.MemoryOutputStream — Streaming output operations on memory chunks

Synopsis

class gio.MemoryOutputStream(gio.OutputStream):
-    gio.MemoryOutputStream()
def get_contents()
def get_data_size()
def get_size()

Ancestry

+-- gobject.GObject
+gio.MemoryOutputStream

gio.MemoryOutputStream

gio.MemoryOutputStream — Streaming output operations on memory chunks

Synopsis

class gio.MemoryOutputStream(gio.OutputStream):
+    gio.MemoryOutputStream()
def get_contents()
def get_data_size()
def get_size()

Implemented Interfaces

+

Implemented Interfaces

gio.MemoryOutputStream implements gio.Seekable -

Description

+

Description

gio.MemoryOutputStream is a class for using arbitrary memory chunks as output for GIO streaming output operations.

Constructor

    gio.MemoryOutputStream()

Returns :

a new @@ -14,7 +14,7 @@

Creates a new gio.MemoryOutputStream. -

Methods

gio.MemoryOutputStream.get_contents

    def get_contents()

Returns :

the stream's data +

Methods

gio.MemoryOutputStream.get_contents

    def get_contents()

Returns :

the stream's data

The get_contents() method gets any loaded data from the ostream. diff --git a/docs/html/class-giomount.html b/docs/html/class-giomount.html index 074ad9c..04f9cd9 100644 --- a/docs/html/class-giomount.html +++ b/docs/html/class-giomount.html @@ -1,10 +1,10 @@ -gio.Mount

gio.Mount

gio.Mount — Mount management

Synopsis

class gio.Mount(gobject.GInterface):
-    def can_eject()
def can_unmount()
def eject(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def eject_finish(result)
def get_drive()
def get_icon()
def get_name()
def get_root()
def get_uuid()
def get_volume()
def guess_content_type(callback, force_rescan, cancellable=None, user_data=None)
def guess_content_type_finish(result)
def guess_content_type_sync(force_rescan, cancellable=None)
def is_shadowed()
def remount(callback, flags=gio.MOUNT_UNMOUNT_NONE, mount_operation=None, cancellable=None, user_data=None)
def remount_finish(result)
def shadow()
def unmount(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def unmount_finish(result)
def unshadow()

Ancestry

+-- gobject.GInterface
+gio.Mount

gio.Mount

gio.Mount — Mount management

Synopsis

class gio.Mount(gobject.GInterface):
+    def can_eject()
def can_unmount()
def eject(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def eject_finish(result)
def get_drive()
def get_icon()
def get_name()
def get_root()
def get_uuid()
def get_volume()
def guess_content_type(callback, force_rescan, cancellable=None, user_data=None)
def guess_content_type_finish(result)
def guess_content_type_sync(force_rescan, cancellable=None)
def is_shadowed()
def remount(callback, flags=gio.MOUNT_UNMOUNT_NONE, mount_operation=None, cancellable=None, user_data=None)
def remount_finish(result)
def shadow()
def unmount(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def unmount_finish(result)
def unshadow()

Ancestry

+-- gobject.GInterface
   +-- gio.Mount
-

Prerequisites

+

Prerequisites

gio.Mount requires gobject.GObject -

gio.Mount Signal Prototypes

gobject.GObject Signal Prototypes

"aborted"

def callback(mount, user_param1, ...)

"changed"

def callback(mount, user_param1, ...)

"unmounted"

def callback(mount, user_param1, ...)

Description

+

gio.Mount Signal Prototypes

gobject.GObject Signal Prototypes

"aborted"

def callback(mount, user_param1, ...)

"changed"

def callback(mount, user_param1, ...)

"unmounted"

def callback(mount, user_param1, ...)

Description

The gio.Mount interface represents user-visible mounts. Note, when porting from GnomeVFS, gio.Mount @@ -28,7 +28,7 @@ with the GMount and the GAsyncReady data to see if the operation was completed successfully. If an error is present when g_mount_unmount_finish() is called, then it will be filled with any error information. -

Methods

gio.Mount.can_eject

    def can_eject()

Returns :

True if the mount can be ejected, +

Methods

gio.Mount.can_eject

    def can_eject()

Returns :

True if the mount can be ejected, False otherwise.

The can_eject() method checks if a mount can be ejected. @@ -221,7 +221,7 @@ gio.Mount.is_shadowed() for more information. The caller will need to emit the "changed" signal on mount manually. -

Signals

The "aborted" gio.Mount Signal

    def callback(mount, user_param1, ...)

mount :

the mount

user_param1 :

the first user parameter (if any) specified +

Signals

The "aborted" gio.Mount Signal

    def callback(mount, user_param1, ...)

mount :

the mount

user_param1 :

the first user parameter (if any) specified with the connect() method

... :

additional user parameters (if any)

Emitted by the backend when e.g. a device becomes unavailable while a diff --git a/docs/html/class-giomountoperation.html b/docs/html/class-giomountoperation.html index afe8efa..d71b469 100644 --- a/docs/html/class-giomountoperation.html +++ b/docs/html/class-giomountoperation.html @@ -1,5 +1,5 @@ -gio.MountOperation

gio.MountOperation

gio.MountOperation — Authentication methods for mountable locations.

Synopsis

class gio.MountOperation(gobject.GObject):
-    gio.MountOperation()
def get_anonymous()
def get_choice()
def get_domain()
def get_password()
def get_password_save()
def get_username()
def replay(result)
def set_anonymous(anonymous)
def set_choice(choice)
def set_domain(domain)
def set_password(password)
def set_password_save(save)
def set_username(username)

Ancestry

+-- gobject.GObject
+gio.MountOperation

gio.MountOperation

gio.MountOperation — Authentication methods for mountable locations.

Synopsis

class gio.MountOperation(gobject.GObject):
+    gio.MountOperation()
def get_anonymous()
def get_choice()
def get_domain()
def get_password()
def get_password_save()
def get_username()
def replay(result)
def set_anonymous(anonymous)
def set_choice(choice)
def set_domain(domain)
def set_password(password)
def set_password_save(save)
def set_username(username)

gio.MountOperation Properties

"anonymous"Read/Write Whether to use an anonymous user when authenticating. @@ -19,7 +19,7 @@
"username"Read/Write The user name that is used for authentication when carrying out the mount operation. Default value: None -

gio.MountOperation Signal Prototypes

gobject.GObject Signal Prototypes

"aborted"

def callback(mountoperation, user_param1, ...)

"ask-password"

def callback(mountoperation, message, default_user, default_domain, flags, user_param1, ...)

"ask-question"

def callback(mountoperation, message, choices, user_param1, ...)

"reply"

def callback(mountoperation, result, user_param1, ...)

Description

+

gio.MountOperation Signal Prototypes

gobject.GObject Signal Prototypes

"aborted"

def callback(mountoperation, user_param1, ...)

"ask-password"

def callback(mountoperation, message, default_user, default_domain, flags, user_param1, ...)

"ask-question"

def callback(mountoperation, message, choices, user_param1, ...)

"reply"

def callback(mountoperation, result, user_param1, ...)

Description

The gio.MountOperation provides a mechanism for authenticating mountable operations, such as loop mounting files, hard drive partitions or server locations. @@ -37,7 +37,7 @@ gio.MountOperation.

Creates a new mount operation. -

Methods

gio.MountOperation.get_anonymous

    def get_anonymous()

Returns :

True if mount operation is anonymous. +

Methods

gio.MountOperation.get_anonymous

    def get_anonymous()

Returns :

True if mount operation is anonymous.

The get_anonymous() method check to see whether the mount operation is being used for an anonymous user @@ -92,7 +92,7 @@

The set_anonymous() method sets the user name within op to username. -

Signals

The "aborted" gio.MountOperation Signal

    def callback(mountoperation, user_param1, ...)

mountoperation :

the mountoperation

user_param1 :

the first user parameter (if any) specified +

Signals

The "aborted" gio.MountOperation Signal

    def callback(mountoperation, user_param1, ...)

mountoperation :

the mountoperation

user_param1 :

the first user parameter (if any) specified with the connect() method

... :

additional user parameters (if any)

Emitted by the backend when e.g. a device becomes unavailable while a mount operation is in progress. diff --git a/docs/html/class-giooutputstream.html b/docs/html/class-giooutputstream.html index c6c8e55..b1b2798 100644 --- a/docs/html/class-giooutputstream.html +++ b/docs/html/class-giooutputstream.html @@ -1,7 +1,7 @@ -gio.OutputStream

gio.OutputStream

gio.OutputStream — Base class for implementing streaming input

Synopsis

class gio.OutputStream(gobject.GObject):
-    def clear_pending()
def close(cancellable=None)
def close_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def close_finish(result)
def flush(cancellable=None)
def flush_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def flush_finish(result)
def has_pending()
def is_closed()
def set_pending()
def splice(cancellable=None, flags=gio.OUTPUT_STREAM_SPLICE_NONE)
def splice_async(source, callback, flags=gio.OUTPUT_STREAM_SPLICE_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def splice_finish(result)
def write(buffer, cancellable=None)
def write_async(buffer, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def write_finish(result)

Ancestry

+-- gobject.GObject
+gio.OutputStream

gio.OutputStream

gio.OutputStream — Base class for implementing streaming input

Synopsis

class gio.OutputStream(gobject.GObject):
+    def clear_pending()
def close(cancellable=None)
def close_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def close_finish(result)
def flush(cancellable=None)
def flush_async(callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def flush_finish(result)
def has_pending()
def is_closed()
def set_pending()
def splice(cancellable=None, flags=gio.OUTPUT_STREAM_SPLICE_NONE)
def splice_async(source, callback, flags=gio.OUTPUT_STREAM_SPLICE_NONE, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def splice_finish(result)
def write(buffer, cancellable=None)
def write_async(buffer, callback, io_priority=glib.PRIORITY_DEFAULT, cancellable=None, user_data=None)
def write_finish(result)

Description

+

Description

gio.OutputStream has functions to write from a stream ( gio.OutputStream.write() @@ -16,4 +16,4 @@ gio.OutputStream.splice().

All of these functions have async variants too. -

Methods

Unfinished section, you may want to see the relevant C API docs for methods descriptions.

+

Methods

Unfinished section, you may want to see the relevant C API docs for methods descriptions.

diff --git a/docs/html/class-gioseekable.html b/docs/html/class-gioseekable.html index c27f2ae..58c7533 100644 --- a/docs/html/class-gioseekable.html +++ b/docs/html/class-gioseekable.html @@ -1,19 +1,19 @@ -gio.Seekable

gio.Seekable

gio.Seekable — Stream seeking interface.

Synopsis

class gio.Seekable(gobject.GInterface):
-    def tell()
def can_seek()
def seek(offset, type=0, cancellable=None)
def can_truncate()
def truncate(offset, cancellable=None)

Ancestry

+-- gobject.GInterface
+gio.Seekable

gio.Seekable

gio.Seekable — Stream seeking interface.

Synopsis

class gio.Seekable(gobject.GInterface):
+    def tell()
def can_seek()
def seek(offset, type=0, cancellable=None)
def can_truncate()
def truncate(offset, cancellable=None)

Known Implementation

+

Description

+

Description

gio.Seekable is implemented by streams (implementations of gio.InputStream or gio.OutputStream) that support seeking. -

Methods

gio.Seekable.tell

    def tell()

Returns :

+

Methods

gio.Seekable.tell

    def tell()

Returns :

the offset from the beginning of the buffer

Tells the current position within the stream. diff --git a/docs/html/class-giosimpleasyncresult.html b/docs/html/class-giosimpleasyncresult.html index 6d13182..b9eadb0 100644 --- a/docs/html/class-giosimpleasyncresult.html +++ b/docs/html/class-giosimpleasyncresult.html @@ -1,10 +1,10 @@ -gio.SimpleAsyncResult

gio.SimpleAsyncResult

gio.SimpleAsyncResult — Simple asynchronous results implementation.

Synopsis

class gio.SimpleAsyncResult(gobject.GObject):
-    def complete()
def complete_in_idle()
def get_op_res_gboolean()
def get_op_res_gssize()
def propagate_error()
def set_handle_cancellation(handle_cancellation)
def set_op_res_gboolean(op_res)
def set_op_res_gssize(op_res)

Ancestry

+-- gobject.GObject
+gio.SimpleAsyncResult

gio.SimpleAsyncResult

gio.SimpleAsyncResult — Simple asynchronous results implementation.

Synopsis

class gio.SimpleAsyncResult(gobject.GObject):
+    def complete()
def complete_in_idle()
def get_op_res_gboolean()
def get_op_res_gssize()
def propagate_error()
def set_handle_cancellation(handle_cancellation)
def set_op_res_gboolean(op_res)
def set_op_res_gssize(op_res)

Implemented Interface

+

Implemented Interface

gio.SimpleAsyncResult implements gio.AsyncResult. -

Description

+

Description

Implements gio.AsyncResult for simple cases. Most of the time, this will be all an application needs, and will be used transparently Because of this, GSimpleAsyncResult is used throughout GIO for handling asynchronous functions. @@ -49,7 +49,7 @@ gio.SimpleAsyncResult.get_op_res_gboolean() and gio.SimpleAsyncResult.get_op_res_gssize() are provided, getting the operation's result as a gboolean and gssize, respectively. -

Methods

gio.SimpleAsyncResult.complete

    def complete()

+

Methods

gio.SimpleAsyncResult.complete

    def complete()

The complete() method completes an asynchronous I/O job. Must be called in the main thread, as it invokes the callback that should be called in the main thread. If you are in a different thread use diff --git a/docs/html/class-giothemedicon.html b/docs/html/class-giothemedicon.html index 9385549..3d81bd8 100644 --- a/docs/html/class-giothemedicon.html +++ b/docs/html/class-giothemedicon.html @@ -1,5 +1,5 @@ -gio.ThemedIcon

gio.ThemedIcon

gio.ThemedIcon — Icon theming support.

Synopsis

class gio.ThemedIcon(gobject.GObject):
-    gio.ThemedIcon()
def append_name()
def get_names()
def prepend_name()

Ancestry

+-- gobject.GObject
+gio.ThemedIcon

gio.ThemedIcon

gio.ThemedIcon — Icon theming support.

Synopsis

class gio.ThemedIcon(gobject.GObject):
+    gio.ThemedIcon()
def append_name()
def get_names()
def prepend_name()

gio.ThemedIcon Properties

"name"Write/Contruct Only The icon name. Default value: None @@ -9,7 +9,7 @@ Whether to use the default fallbacks found by shortening the icon name at '-' characters. If the "names" array has more than one element, ignores any past the first. -

Description

+

Description

gio.ThemedIcon is an implementation of gio.Icon that supports icon themes. GThemedIcon contains a list of all of the icons present in an icon @@ -27,7 +27,7 @@ Creates a new themed icon from icon name, if instead of an icon name you provide a list of icon names, the gio.ThemedIcon will be constructed using the items in the list. -

Methods

gio.ThemedIcon.append_name

    def append_name()

name :

name of icon to append to list of icons from within icon. +

Methods

gio.ThemedIcon.append_name

    def append_name()

name :

name of icon to append to list of icons from within icon.

The append_name() method appends a name to the list of icons from within icon. diff --git a/docs/html/class-giounixinputstream.html b/docs/html/class-giounixinputstream.html index cbb7c05..d7adeff 100644 --- a/docs/html/class-giounixinputstream.html +++ b/docs/html/class-giounixinputstream.html @@ -1,9 +1,9 @@ -gio.unix.InputStream

gio.unix.InputStream

gio.unix.InputStream — Streaming input operations for UNIX file descriptors.

Synopsis

class gio.unix.InputStream(gio.InputStream):
-    gio.unix.InputStream(fd, close_fd)
def get_close_fd()
def get_fd()
def set_close_fd(close_fd)

Ancestry

+-- gobject.GObject
+gio.unix.InputStream

gio.unix.InputStream

gio.unix.InputStream — Streaming input operations for UNIX file descriptors.

Synopsis

class gio.unix.InputStream(gio.InputStream):
+    gio.unix.InputStream(fd, close_fd)
def get_close_fd()
def get_fd()
def set_close_fd(close_fd)

gio.unix.InputStream Properties

"close-fd"Read - WriteWhether to close the file descriptor when the stream is closed. - Default value: True.
"fd"Read - Write - Construct onlyThe file descriptor that the stream reads from. Default value: -1.

Description

+ Default value: True.

"fd"Read - Write - Construct onlyThe file descriptor that the stream reads from. Default value: -1.

Description

gio.unix.InputStream implements gio.InputStream for reading from a UNIX file descriptor, including asynchronous operations. @@ -22,7 +22,7 @@ from the given fd.

If close_fd is True, the file descriptor will be closed when the stream is closed. -

Methods

gio.unix.InputStream.get_close_fd

    def get_close_fd()

Returns :

True if the file descriptor is closed when done. +

Methods

gio.unix.InputStream.get_close_fd

    def get_close_fd()

Returns :

True if the file descriptor is closed when done.

The get_close_fd() method returns whether the file descriptor of stream will be closed when the stream is closed. diff --git a/docs/html/class-giounixoutputstream.html b/docs/html/class-giounixoutputstream.html index cb14c73..f55bc49 100644 --- a/docs/html/class-giounixoutputstream.html +++ b/docs/html/class-giounixoutputstream.html @@ -1,9 +1,9 @@ -gio.unix.OutputStream

gio.unix.OutputStream

gio.unix.OutputStream — Streaming output operations for UNIX file descriptors.

Synopsis

class gio.unix.OutputStream(gio.OutputStream):
-    gio.unix.OutputStream(fd, close_fd)
def get_close_fd()
def get_fd()
def set_close_fd(close_fd)

Ancestry

+-- gobject.GObject
+gio.unix.OutputStream

gio.unix.OutputStream

gio.unix.OutputStream — Streaming output operations for UNIX file descriptors.

Synopsis

class gio.unix.OutputStream(gio.OutputStream):
+    gio.unix.OutputStream(fd, close_fd)
def get_close_fd()
def get_fd()
def set_close_fd(close_fd)

gio.unix.OutputStream Properties

"close-fd"Read - WriteWhether to close the file descriptor when the stream is closed. - Default value: True.
"fd"Read - Write - Construct onlyThe file descriptor that the stream writes to. Default value: -1.

Description

+ Default value: True.

"fd"Read - Write - Construct onlyThe file descriptor that the stream writes to. Default value: -1.

Description

gio.unix.OutputStream implements gio.OutputStream for writing to a UNIX file descriptor, including asynchronous operations. @@ -22,7 +22,7 @@ from the given fd.

If close_fd is True, the file descriptor will be closed when the stream is closed. -

Methods

gio.unix.OutputStream.get_close_fd

    def get_close_fd()

Returns :

True if the file descriptor is closed when done. +

Methods

gio.unix.OutputStream.get_close_fd

    def get_close_fd()

Returns :

True if the file descriptor is closed when done.

The get_close_fd() method returns whether the file descriptor of stream will be closed when the stream is closed. diff --git a/docs/html/class-giovolume.html b/docs/html/class-giovolume.html index 14e1f48..b23af50 100644 --- a/docs/html/class-giovolume.html +++ b/docs/html/class-giovolume.html @@ -1,10 +1,10 @@ -gio.Volume

gio.Volume

gio.Volume — Volume management.

Synopsis

class gio.Volume(gobject.GInterface):
-    def can_eject()
def can_mount()
def eject(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def eject_finish(result)
def enumerate_identifiers()
def get_activation_root()
def get_drive()
def get_icon()
def get_identifier()
def get_mount()
def get_name()
def get_uuid()
def mount(mount_operation, callback, flags=gio.MOUNT_MOUNT_NONE, cancellable=None, user_data=None)
def mount_finish(result)
def should_automount()

Ancestry

+-- gobject.GInterface
+gio.Volume

gio.Volume

gio.Volume — Volume management.

Synopsis

class gio.Volume(gobject.GInterface):
+    def can_eject()
def can_mount()
def eject(callback, flags=gio.MOUNT_UNMOUNT_NONE, cancellable=None, user_data=None)
def eject_finish(result)
def enumerate_identifiers()
def get_activation_root()
def get_drive()
def get_icon()
def get_identifier()
def get_mount()
def get_name()
def get_uuid()
def mount(mount_operation, callback, flags=gio.MOUNT_MOUNT_NONE, cancellable=None, user_data=None)
def mount_finish(result)
def should_automount()

Ancestry

+-- gobject.GInterface
   +-- gio.Volume
-

Prerequisites

+

Prerequisites

gio.Volume requires gobject.GObject -

gio.Volume Signal Prototypes

gobject.GObject Signal Prototypes

"changed"

def callback(volume, user_param1, ...)

"removed"

def callback(volume, user_param1, ...)

Description

+

gio.Volume Signal Prototypes

gobject.GObject Signal Prototypes

"changed"

def callback(volume, user_param1, ...)

"removed"

def callback(volume, user_param1, ...)

Description

The gio.Volume interface represents user-visible objects that can be mounted. Note, when porting from GnomeVFS, gio.Volume @@ -39,7 +39,7 @@ "hal-udi", "label", etc. Use gio.Volume.get_identifier() to obtain an identifier for a volume. -

Methods

gio.Volume.can_eject

    def can_eject()

Returns :

True if the volume can be ejected, +

Methods

gio.Volume.can_eject

    def can_eject()

Returns :

True if the volume can be ejected, False otherwise.

The can_eject() method checks if a volume can be ejected. @@ -162,7 +162,7 @@ volume_activation_root.has_prefix(mount_root) || volume_activation_root.equal(mo

The should_automount() method returns whether the volume should be automatically mounted. -

Signals

The "changed" gio.Volume Signal

    def callback(volume, user_param1, ...)

volume :

the volume

user_param1 :

the first user parameter (if any) specified +

Signals

The "changed" gio.Volume Signal

    def callback(volume, user_param1, ...)

volume :

the volume

user_param1 :

the first user parameter (if any) specified with the connect() method

... :

additional user parameters (if any)

Emitted when the volume has been changed. diff --git a/docs/html/class-giovolumemonitor.html b/docs/html/class-giovolumemonitor.html index 16b1752..06f9500 100644 --- a/docs/html/class-giovolumemonitor.html +++ b/docs/html/class-giovolumemonitor.html @@ -1,13 +1,13 @@ -gio.VolumeMonitor

gio.VolumeMonitor

gio.VolumeMonitor — Volume Monitor.

Synopsis

class gio.VolumeMonitor(gobject.GObject):
+gio.VolumeMonitor

gio.VolumeMonitor

gio.VolumeMonitor — Volume Monitor.

Synopsis

class gio.VolumeMonitor(gobject.GObject):
     def get_connected_drives()
def get_mount_for_uuid(uuid)
def get_mounts()
def get_volume_for_uuid(uuid)
def get_volumes()
 Functions
-    def gio.volume_monitor_adopt_orphan_mount()
def gio.volume_monitor_get()

gio.VolumeMonitor Signal Prototypes

gobject.GObject Signal Prototypes

"drive-changed"

def callback(volume_monitor, drive, user_param1, ...)

"drive-connected"

def callback(volume_monitor, drive, user_param1, ...)

"drive-disconnected"

def callback(volume_monitor, drive, user_param1, ...)

"drive-eject-button"

def callback(volume_monitor, drive, user_param1, ...)

"mount-added"

def callback(volume_monitor, mount, user_param1, ...)

"mount-changed"

def callback(volume_monitor, mount, user_param1, ...)

"mount-pre-unmount"

def callback(volume_monitor, mount, user_param1, ...)

"mount-removed"

def callback(volume_monitor, mount, user_param1, ...)

"volume-added"

def callback(volume_monitor, volume, user_param1, ...)

"volume-changed"

def callback(volume_monitor, volume, user_param1, ...)

"volume-removed"

def callback(volume_monitor, volume, user_param1, ...)

Description

+

gio.VolumeMonitor Signal Prototypes

gobject.GObject Signal Prototypes

"drive-changed"

def callback(volume_monitor, drive, user_param1, ...)

"drive-connected"

def callback(volume_monitor, drive, user_param1, ...)

"drive-disconnected"

def callback(volume_monitor, drive, user_param1, ...)

"drive-eject-button"

def callback(volume_monitor, drive, user_param1, ...)

"mount-added"

def callback(volume_monitor, mount, user_param1, ...)

"mount-changed"

def callback(volume_monitor, mount, user_param1, ...)

"mount-pre-unmount"

def callback(volume_monitor, mount, user_param1, ...)

"mount-removed"

def callback(volume_monitor, mount, user_param1, ...)

"volume-added"

def callback(volume_monitor, volume, user_param1, ...)

"volume-changed"

def callback(volume_monitor, volume, user_param1, ...)

"volume-removed"

def callback(volume_monitor, volume, user_param1, ...)

Description

The gio.VolumeMonitor is for listing the user interesting devices and volumes on the computer. In other words, what a file selector or file manager would show in a sidebar. -

Methods

gio.VolumeMonitor.get_connected_drives

    def get_connected_drives()

Returns :

a list of connected +

Methods

gio.VolumeMonitor.get_connected_drives

    def get_connected_drives()

Returns :

a list of connected gio.Drive objects.

The get_connected_drives() method gets a list @@ -40,7 +40,7 @@ objects.

The get_volumes() method gets a list of the volumes on the system. -

Functions

gio.volume_monitor_adopt_orphan_mount

    def volume_monitor_adopt_orphan_mount()

Returns :

The gio.Volume +

Functions

gio.volume_monitor_adopt_orphan_mount

    def volume_monitor_adopt_orphan_mount()

Returns :

The gio.Volume object that is the parent for mount or None if no wants to adopt the gio.Mount.

Warning

This method will be deprecated starting from GIO 2.20

@@ -88,7 +88,7 @@

The volume_monitor_get() function gets the volume monitor used by gio. -

Signals

The "drive-changed" gio.Volume Signal

    def callback(volume_monitor, drive, user_param1, ...)

volume_monitor :

the volume monitor

drive :

the drive that changed

user_param1 :

the first user parameter (if any) specified +

Signals

The "drive-changed" gio.Volume Signal

    def callback(volume_monitor, drive, user_param1, ...)

volume_monitor :

the volume monitor

drive :

the drive that changed

user_param1 :

the first user parameter (if any) specified with the connect() method

... :

additional user parameters (if any)

Emitted when a drive changes. diff --git a/docs/html/class-glibmaincontext.html b/docs/html/class-glibmaincontext.html index 069b5ab..fee4a4e 100644 --- a/docs/html/class-glibmaincontext.html +++ b/docs/html/class-glibmaincontext.html @@ -1,7 +1,7 @@ -glib.MainContext

glib.MainContext

glib.MainContext — an object representing a set of event sources to be handled -in a glib.MainLoop.

Synopsis

class glib.MainContext:
-    glib.MainContext()
def iteration(may_block)
def pending()

Ancestry

+-- glib.MainContext
-

Description

A glib.MainContext +glib.MainContext

glib.MainContext

glib.MainContext — an object representing a set of event sources to be handled +in a glib.MainLoop.

Synopsis

class glib.MainContext:
+    glib.MainContext()
def iteration(may_block)
def pending()

Ancestry

+-- glib.MainContext
+

Description

A glib.MainContext represents a set of event sources that can be run in a single thread. File descriptors (plain files, pipes or sockets) and timeouts are the standard event sources for GTK and PyGTK though @@ -13,7 +13,7 @@ events from lower priority sources. Single iterations of a iteration() method.

Constructor

    glib.MainContext()

Returns :

a new glib.MainContext object.

Creates a new glib.MainContext -object.

Methods

glib.MainContext.iteration

    def iteration()

may_block :

if True the call may block +object.

Methods

glib.MainContext.iteration

    def iteration()

may_block :

if True the call may block waiting for an event.

Returns :

True if events were dispatched.

The iteration() method runs a single iteration. This involves:

  • checking to see if any associated event sources are ready diff --git a/docs/html/class-glibmainloop.html b/docs/html/class-glibmainloop.html index 251895a..ff1ad2d 100644 --- a/docs/html/class-glibmainloop.html +++ b/docs/html/class-glibmainloop.html @@ -1,7 +1,7 @@ -glib.MainLoop

    glib.MainLoop

    glib.MainLoop — an object representing the main event loop of a PyGTK - application.

    Synopsis

    class glib.MainLoop:
    -    glib.MainLoop(context=None, is_running=0)
    def get_context()
    def is_running()
    def quit()
    def run()

    Ancestry

    +-- glib.MainLoop
    -

    Description

    glib.MainLoop +glib.MainLoop

    glib.MainLoop

    glib.MainLoop — an object representing the main event loop of a PyGTK + application.

    Synopsis

    class glib.MainLoop:
    +    glib.MainLoop(context=None, is_running=0)
    def get_context()
    def is_running()
    def quit()
    def run()

    Ancestry

    +-- glib.MainLoop
    +

    Description

    glib.MainLoop represents a main event loop. A glib.MainLoop is created with the glib.MainLoop() constructor. After adding the initial event sources, the run() @@ -24,7 +24,7 @@ functions.

Returns :

a new glib.MainLoop object.

Creates a new glib.MainLoop -object.

Methods

glib.MainLoop.get_context

    def get_context()

Returns :

the glib.MainContext +object.

Methods

glib.MainLoop.get_context

    def get_context()

Returns :

the glib.MainContext the mainloop is associated with

The get_context() method returns the glib.MainContext that the mainloop was created with.

glib.MainLoop.is_running

    def is_running()

Returns :

True if the mainloop is diff --git a/docs/html/class-gobject.html b/docs/html/class-gobject.html index dd0f6ee..b59d6ff 100644 --- a/docs/html/class-gobject.html +++ b/docs/html/class-gobject.html @@ -1,6 +1,6 @@ -gobject.GObject

gobject.GObject

gobject.GObject — the base class

Synopsis

class gobject.GObject:
-    def get_property(property_name)
def get_properties(first_property_name, ...)
def set_property(property_name, value)
def set_properties(property_name=value, ...)
def freeze_notify()
def notify(property_name)
def thaw_notify()
def get_data(key)
def set_data(key, data)
def connect(detailed_signal, handler)
def connect_after(detailed_signal, handler)
def connect_object(detailed_signal, handler)
def connect_object_after(detailed_signal, handler)
def disconnect(handler_id)
def handler_disconnect(handler_id)
def handler_is_connected(handler_id)
def handler_block(handler_id)
def handler_unblock(handler_id)
def handler_block_by_func(callable)
def handler_unblock_by_func(callable)
def emit(detailed_signal)
def stop_emission(detailed_signal)
def emit_stop_by_name(detailed_signal)
def chain()

Ancestry

+-- gobject.GObject
-

Attributes

"props"Read/Write +gobject.GObject

gobject.GObject

gobject.GObject — the base class

Synopsis

class gobject.GObject:
+    def get_property(property_name)
def get_properties(first_property_name, ...)
def set_property(property_name, value)
def set_properties(property_name=value, ...)
def freeze_notify()
def notify(property_name)
def thaw_notify()
def get_data(key)
def set_data(key, data)
def connect(detailed_signal, handler)
def connect_after(detailed_signal, handler)
def connect_object(detailed_signal, handler)
def connect_object_after(detailed_signal, handler)
def disconnect(handler_id)
def handler_disconnect(handler_id)
def handler_is_connected(handler_id)
def handler_block(handler_id)
def handler_unblock(handler_id)
def handler_block_by_func(callable)
def handler_unblock_by_func(callable)
def emit(detailed_signal)
def stop_emission(detailed_signal)
def emit_stop_by_name(detailed_signal)
def chain()

Ancestry

+-- gobject.GObject
+

Attributes

"props"Read/Write

This attribute gives full access to GObject properties as simple attributes. It can be used to iterate over all the object properties, and can be used both on class or instance objects.

@@ -17,12 +17,12 @@ button_label = button.get_property(label_pspec.name)
"__doc__"ReadThe documentation for the object type. Uses "__gdoc__" if no specific documentation set.
"__gdoc__"ReadThe generated documentation for the underlying GObject - type.
"__gtype__"ReadThe underlying GObject type.
"__grefcount__"ReadThe reference count for the underlying GObject.

gobject.GObject Signal Prototypes

"notify"

def callback(gobject, property_spec, user_param1, ...)

Description

The gobject.GObject + type.

"__gtype__"ReadThe underlying GObject type.
"__grefcount__"ReadThe reference count for the underlying GObject.

gobject.GObject Signal Prototypes

"notify"

def callback(gobject, property_spec, user_param1, ...)

Description

The gobject.GObject class is the base class providing the common attributes and methods for the PyGTK classes. The gobject.GObject class is not a user interface widget class.

The gobject.GObject class provides the signal management methods, the object property access - methods and the object data management methods.

Methods

gobject.GObject.get_property

    def get_property(property_name)

property_name :

a string containing the property name for the + methods and the object data management methods.

Methods

gobject.GObject.get_property

    def get_property(property_name)

property_name :

a string containing the property name for the GObject

Returns :

a Python object containing the value of the property

The get_property() method returns the value of the property specified by property_name or @@ -161,7 +161,7 @@ still to be run will not be invoked.

emit_stop_by_name() method stops the current emission of the signal specified by detailed_signal. Any signal handlers in the list -still to be run will not be invoked.

gobject.GObject.chain

    def chain(...)

... :

additional parameters

Returns :

a Python object

The chain() method does something.

Signals

The GObject "notify" Signal

    def callback(gobject, property_spec, user_param1, ...)

gobject :

the gobject that received the +still to be run will not be invoked.

gobject.GObject.chain

    def chain(...)

... :

additional parameters

Returns :

a Python object

The chain() method does something.

Signals

The GObject "notify" Signal

    def callback(gobject, property_spec, user_param1, ...)

gobject :

the gobject that received the signal

property_spec :

the gobject.GParamSpec of the property that was changed

user_param1 :

the first user parameter (if any) specified with the connect() diff --git a/docs/html/class-gobjectgboxed.html b/docs/html/class-gobjectgboxed.html index 9ce0143..1e29f4a 100644 --- a/docs/html/class-gobjectgboxed.html +++ b/docs/html/class-gobjectgboxed.html @@ -1,9 +1,9 @@ -gobject.GBoxed

gobject.GBoxed

gobject.GBoxed — an object containing an opaque chunk of data

Synopsis

class gobject.GBoxed:
-    def copy()

Ancestry

+-- gobject.GBoxed
-

Description

gobject.GBoxed +gobject.GBoxed

gobject.GBoxed

gobject.GBoxed — an object containing an opaque chunk of data

Synopsis

class gobject.GBoxed:
+    def copy()

Ancestry

+-- gobject.GBoxed
+

Description

gobject.GBoxed is an abstract base class that encapsulates an opaque chunk of data to provide an object-oriented interface and a type that is registered with the GLIB type system. A boxed type is registered with functions that provide for the copying and freeing of the underlying data -structure - this allows PyGTK to encapsulate these as Python objects.

Methods

gobject.GBoxed.copy

    def copy()

Returns :

a copy of the gobject.GBoxed +structure - this allows PyGTK to encapsulate these as Python objects.

Methods

gobject.GBoxed.copy

    def copy()

Returns :

a copy of the gobject.GBoxed object

The copy() method makes and returns a copy of the boxed object.

diff --git a/docs/html/class-gobjectginterface.html b/docs/html/class-gobjectginterface.html index 067be1c..9e9e66c 100644 --- a/docs/html/class-gobjectginterface.html +++ b/docs/html/class-gobjectginterface.html @@ -1,4 +1,4 @@ -gobject.GInterface

gobject.GInterface

gobject.GInterface — an object representing a GInterface

Synopsis

class gobject.GInterface:
-

Ancestry

+-- gobject.GInterface
-

Description

gobject.GInterface +gobject.GInterface

gobject.GInterface

gobject.GInterface — an object representing a GInterface

Synopsis

class gobject.GInterface:
+

Ancestry

+-- gobject.GInterface
+

Description

gobject.GInterface is an abstract base class that encapsulates a GInterface.

diff --git a/docs/html/class-gobjectgpointer.html b/docs/html/class-gobjectgpointer.html index 4ec2bbc..2c0fb75 100644 --- a/docs/html/class-gobjectgpointer.html +++ b/docs/html/class-gobjectgpointer.html @@ -1,7 +1,7 @@ -gobject.GPointer

gobject.GPointer

gobject.GPointer — an object containing a completely opaque chunk of - data

Synopsis

class gobject.GPointer:
-

Ancestry

+-- gobject.GPointer
-

Description

gobject.GPointer +gobject.GPointer

gobject.GPointer

gobject.GPointer — an object containing a completely opaque chunk of + data

Synopsis

class gobject.GPointer:
+

Ancestry

+-- gobject.GPointer
+

Description

gobject.GPointer is an abstract base class that encapsulates an opaque chunk of data and registers it with the GLIB type system. A pointer type has no methods and generic ways of copying and freeing the data. It diff --git a/docs/html/gio-class-reference.html b/docs/html/gio-class-reference.html index a7a8bb8..9b0f9b6 100644 --- a/docs/html/gio-class-reference.html +++ b/docs/html/gio-class-reference.html @@ -1 +1 @@ -PyGio Class Reference

PyGio Class Reference

Table of Contents

gio.AppInfo — Information about an installed application and methods to launch it (with file arguments).
gio.AppLaunchContext — Application launch context.
gio.AsyncResult — Asynchronous Function Results.
gio.BufferedInputStream — Buffered Input Stream
gio.BufferedOutputStream — Buffered Output Stream
gio.Cancellable — Thread-safe Operation Cancellation Stack.
gio.DataInputStream — Data Input Stream
gio.DataOutputStream — Data Output Stream
gio.Drive — Virtual File System drive management.
gio.Emblem — An object for emblems.
gio.EmblemedIcon — Icon with emblems.
gio.File — File and Directory Handling.
gio.FileAttributeInfo — Information about a specific attribute.
gio.FileEnumerator — Enumerated Files Routines.
gio.FileIcon — Icons pointing to an image file.
gio.FileInfo — File Information and Attributes
gio.FileInputStream — Base class for implementing streaming input
gio.FileMonitor — File Monitor
gio.FileOutputStream — Base class for implementing streaming input
gio.FilterInputStream — Filter Input Stream
gio.FilterOutputStream — Filter Output Stream
gio.Icon — Interface for icons.
gio.InputStream — Base class for implementing streaming input
gio.LoadableIcon — Interface for icons.
gio.MemoryInputStream — Base class for implementing streaming input
gio.MemoryOutputStream — Streaming output operations on memory chunks
gio.Mount — Mount management
gio.MountOperation — Authentication methods for mountable locations.
gio.OutputStream — Base class for implementing streaming input
gio.Seekable — Stream seeking interface.
gio.SimpleAsyncResult — Simple asynchronous results implementation.
gio.ThemedIcon — Icon theming support.
gio.Volume — Volume management.
gio.VolumeMonitor — Volume Monitor.
gio Functions
gio Constants — the built-in constants of the gio module
+PyGio Class Reference

PyGio Class Reference

Table of Contents

gio.AppInfo — Information about an installed application and methods to launch it (with file arguments).
gio.AppLaunchContext — Application launch context.
gio.AsyncResult — Asynchronous Function Results.
gio.BufferedInputStream — Buffered Input Stream
gio.BufferedOutputStream — Buffered Output Stream
gio.Cancellable — Thread-safe Operation Cancellation Stack.
gio.DataInputStream — Data Input Stream
gio.DataOutputStream — Data Output Stream
gio.Drive — Virtual File System drive management.
gio.Emblem — An object for emblems.
gio.EmblemedIcon — Icon with emblems.
gio.File — File and Directory Handling.
gio.FileAttributeInfo — Information about a specific attribute.
gio.FileEnumerator — Enumerated Files Routines.
gio.FileIcon — Icons pointing to an image file.
gio.FileInfo — File Information and Attributes
gio.FileInputStream — Base class for implementing streaming input
gio.FileMonitor — File Monitor
gio.FileOutputStream — Base class for implementing streaming input
gio.FilterInputStream — Filter Input Stream
gio.FilterOutputStream — Filter Output Stream
gio.Icon — Interface for icons.
gio.InputStream — Base class for implementing streaming input
gio.LoadableIcon — Interface for icons.
gio.MemoryInputStream — Base class for implementing streaming input
gio.MemoryOutputStream — Streaming output operations on memory chunks
gio.Mount — Mount management
gio.MountOperation — Authentication methods for mountable locations.
gio.OutputStream — Base class for implementing streaming input
gio.Seekable — Stream seeking interface.
gio.SimpleAsyncResult — Simple asynchronous results implementation.
gio.ThemedIcon — Icon theming support.
gio.Volume — Volume management.
gio.VolumeMonitor — Volume Monitor.
gio Functions
gio Constants — the built-in constants of the gio module
diff --git a/docs/html/gio-constants.html b/docs/html/gio-constants.html index 5f1e741..509b60c 100644 --- a/docs/html/gio-constants.html +++ b/docs/html/gio-constants.html @@ -1,4 +1,4 @@ -gio Constants

gio Constants

gio Constants — the built-in constants of the gio module

Synopsis

+gio Constants

gio Constants

gio Constants — the built-in constants of the gio module

Synopsis

 Gio AppInfo Create Flags Constants
 Gio Ask Password Flags Constants
 Gio Data Stream Byte Order Constants
diff --git a/docs/html/gio-functions.html b/docs/html/gio-functions.html
index 223645c..f87918f 100644
--- a/docs/html/gio-functions.html
+++ b/docs/html/gio-functions.html
@@ -1,7 +1,7 @@
-gio Functions

gio Functions

gio Functions

Description

+gio Functions

gio Functions

gio Functions

Description

These functions are part of the PyGObject gio module but are not directly associated with a specific class -

Functions

gio.content_type_can_be_executable

    def content_type_can_be_executable(type)

type :

a content type string. +

Functions

gio.content_type_can_be_executable

    def content_type_can_be_executable(type)

type :

a content type string.

Returns :

True if the file type corresponds to a type that can be executable, False otherwise.

diff --git a/docs/html/giounix-class-reference.html b/docs/html/giounix-class-reference.html index 9a1b532..e91aa73 100644 --- a/docs/html/giounix-class-reference.html +++ b/docs/html/giounix-class-reference.html @@ -1 +1 @@ -PyGio Unix Class Reference

PyGio Unix Class Reference

Table of Contents

gio.unix.InputStream — Streaming input operations for UNIX file descriptors.
gio.unix.OutputStream — Streaming output operations for UNIX file descriptors.
+PyGio Unix Class Reference

PyGio Unix Class Reference

Table of Contents

gio.unix.InputStream — Streaming input operations for UNIX file descriptors.
gio.unix.OutputStream — Streaming output operations for UNIX file descriptors.
diff --git a/docs/html/glib-class-reference.html b/docs/html/glib-class-reference.html index 13ca630..fa78a88 100644 --- a/docs/html/glib-class-reference.html +++ b/docs/html/glib-class-reference.html @@ -1,3 +1,3 @@ -PyGlibClass Reference

PyGlibClass Reference

Table of Contents

glib.MainContext — an object representing a set of event sources to be handled +PyGlibClass Reference

PyGlibClass Reference

Table of Contents

glib.MainContext — an object representing a set of event sources to be handled in a glib.MainLoop.
glib.MainLoop — an object representing the main event loop of a PyGTK application.
glib Functions — miscellaneous functions
glib Constants — the built-in constants of the glib module
diff --git a/docs/html/glib-constants.html b/docs/html/glib-constants.html index 53cdf73..ecc7f1e 100644 --- a/docs/html/glib-constants.html +++ b/docs/html/glib-constants.html @@ -1,4 +1,4 @@ -glib Constants

glib Constants

glib Constants — the built-in constants of the glib module

Synopsis

+glib Constants

glib Constants

glib Constants — the built-in constants of the glib module

Synopsis

 Glib IO Condition Constants
 Glib Priority Constants
 Glib Spawn Flag Constants
diff --git a/docs/html/glib-functions.html b/docs/html/glib-functions.html
index ef81139..0fa3bb2 100644
--- a/docs/html/glib-functions.html
+++ b/docs/html/glib-functions.html
@@ -1,6 +1,6 @@
-glib Functions

glib Functions

glib Functions — miscellaneous functions

Synopsis

-    def glib.idle_add(callback, ...)
def glib.timeout_add(interval, callback, ...)
def glib.timeout_add_seconds(interval, callback, ...)
def glib.io_add_watch(fd, condition, callback, ...)
def glib.source_remove(tag)
def glib.main_context_default()
def glib.markup_escape_text(text)
def glib.child_watch_add(pid, function, data=None, priority=glib.PRIORITY_DEFAULT)
def glib.spawn_async(argv, envp=None, working_directory=None, flags=0, child_setup=None, user_data=None, standard_input=None, standard_output=None, standard_error=None)
def glib.get_current_time()
def glib.get_user_cache_dir()
def glib.get_user_config_dir()
def glib.get_user_data_dir()
def glib.get_user_special_dir(directory)
def glib.main_depth()
def glib.threads_init()
def glib.filename_display_name(filename)
def glib.filename_display_basename(filename)
def glib.filename_from_utf8(utf8string)

Description

These functions are part of the PyGObject glib -module but are not directly associated with a specific class.

Functions

glib.idle_add

    def glib.idle_add(callback, ...)

callback :

a function to call when +glib Functions

glib Functions

glib Functions — miscellaneous functions

Synopsis

+    def glib.idle_add(callback, ...)
def glib.timeout_add(interval, callback, ...)
def glib.timeout_add_seconds(interval, callback, ...)
def glib.io_add_watch(fd, condition, callback, ...)
def glib.source_remove(tag)
def glib.main_context_default()
def glib.markup_escape_text(text)
def glib.child_watch_add(pid, function, data=None, priority=glib.PRIORITY_DEFAULT)
def glib.spawn_async(argv, envp=None, working_directory=None, flags=0, child_setup=None, user_data=None, standard_input=None, standard_output=None, standard_error=None)
def glib.get_current_time()
def glib.get_user_cache_dir()
def glib.get_user_config_dir()
def glib.get_user_data_dir()
def glib.get_user_special_dir(directory)
def glib.main_depth()
def glib.threads_init()
def glib.filename_display_name(filename)
def glib.filename_display_basename(filename)
def glib.filename_from_utf8(utf8string)

Description

These functions are part of the PyGObject glib +module but are not directly associated with a specific class.

Functions

glib.idle_add

    def glib.idle_add(callback, ...)

callback :

a function to call when PyGTK is idle

... :

optionals arguments to be passed to callback

Returns :

an integer ID

The glib.idle_add() function adds a function (specified by callback) to be called diff --git a/docs/html/gobject-class-reference.html b/docs/html/gobject-class-reference.html index bbf2133..80d2cce 100644 --- a/docs/html/gobject-class-reference.html +++ b/docs/html/gobject-class-reference.html @@ -1,2 +1,2 @@ -PyGObject Class Reference

PyGObject Class Reference

Table of Contents

gobject.GObject — the base class
gobject.GBoxed — an object containing an opaque chunk of data
gobject.GPointer — an object containing a completely opaque chunk of +PyGObject Class Reference

PyGObject Class Reference

Table of Contents

gobject.GObject — the base class
gobject.GBoxed — an object containing an opaque chunk of data
gobject.GPointer — an object containing a completely opaque chunk of data
gobject.GInterface — an object representing a GInterface
gobject Functions — miscellaneous functions
gobject Constants — the built-in constants of the gobject module
diff --git a/docs/html/gobject-constants.html b/docs/html/gobject-constants.html index 44d770c..0775707 100644 --- a/docs/html/gobject-constants.html +++ b/docs/html/gobject-constants.html @@ -1,4 +1,4 @@ -gobject Constants

gobject Constants

gobject Constants — the built-in constants of the gobject module

Synopsis

+gobject Constants

gobject Constants

gobject Constants — the built-in constants of the gobject module

Synopsis

 GObject Param Flag Constants
 GObject Signal Flag Constants
 GObject Built-in Type Constants
diff --git a/docs/html/gobject-functions.html b/docs/html/gobject-functions.html
index e10601c..5be478a 100644
--- a/docs/html/gobject-functions.html
+++ b/docs/html/gobject-functions.html
@@ -1,12 +1,12 @@
-gobject Functions

gobject Functions

gobject Functions — miscellaneous functions

Synopsis

+gobject Functions

gobject Functions

gobject Functions — miscellaneous functions

Synopsis

     def gobject.type_name(type)
def gobject.type_from_name(type_name)
def gobject.type_parent(type)
def gobject.type_is_a(type, parent_type)
def gobject.type_children(type)
def gobject.type_interfaces(type)
def gobject.type_register(class)
def gobject.signal_new(signal_name, type, flags, return_type, param_types)
def gobject.signal_list_names(type)
def gobject.signal_list_ids(type)
def gobject.signal_lookup(name, type)
def gobject.signal_name(signal_id)
def gobject.signal_query(name, type)
def gobject.signal_query(signal_id)
def gobject.list_properties(type)
def gobject.new(type, ...)
def gobject.signal_accumulator_true_handled()
def gobject.add_emission_hook(type, name, callback, ...)
def gobject.remove_emission_hook(type, name, hook_id)
def gobject._install_metaclass(metaclass) -

Description

These functions are part of the PyGTK gobject +

Description

These functions are part of the PyGTK gobject module but are not directly associated with a specific class.

Note

Many functions that previously were in this namespace got moved to glib namespace instead. They are still available in gobject for backward compatibility, but not documented here. If you miss documentation for some function, be sure to check glib first. -

Functions

gobject.type_name

    def gobject.type_name(type)

type :

a GObject type, type ID or +

Functions

gobject.type_name

    def gobject.type_name(type)

type :

a GObject type, type ID or instance

Returns :

The gobject.type_name() function returns the unique name that is assigned to the specified type. type can be a GObject diff --git a/docs/html/index.html b/docs/html/index.html index 315785c..aade9e5 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -1,4 +1,4 @@ -PyGObject Reference Manual

PyGObject Reference Manual

for PyGObject version 2.27.0

2010-11-10 +PyGObject Reference Manual

PyGObject Reference Manual

for PyGObject version 2.27.90

2011-02-11

Abstract

This reference describes the classes of the python gobject module.


Table of Contents

Introduction
Reference Page Format
PyGlibClass Reference
glib.MainContext — an object representing a set of event sources to be handled in a glib.MainLoop.
glib.MainLoop — an object representing the main event loop of a PyGTK diff --git a/docs/html/pygobject-introduction.html b/docs/html/pygobject-introduction.html index 0f15d2f..bdb81c0 100644 --- a/docs/html/pygobject-introduction.html +++ b/docs/html/pygobject-introduction.html @@ -1,4 +1,4 @@ -Introduction

Introduction

Table of Contents

Reference Page Format

This document describes many of the PyGObject +Introduction

Introduction

Table of Contents

Reference Page Format

This document describes many of the PyGObject version 2.12 classes and their methods and associated functions. Deprecated classes, functions and methods have been specifically left out of this reference though classes that have become diff --git a/dsextras.py b/dsextras.py index c5baf6f..ef848e2 100644 --- a/dsextras.py +++ b/dsextras.py @@ -10,11 +10,12 @@ import fnmatch import re import string -import distutils.dep_util +from distutils import dep_util from distutils.command.build_ext import build_ext from distutils.command.install_lib import install_lib from distutils.command.install_data import install_data from distutils.extension import Extension +from distutils.spawn import find_executable try: import codegen.createdefs @@ -76,15 +77,15 @@ def getstatusoutput(cmd): from commands import getstatusoutput return getstatusoutput(cmd) +def have_gcc(): + '''Checks for the existence of gcc''' + if find_executable('gcc'): + return True + def have_pkgconfig(): '''Checks for the existence of pkg-config''' - if (sys.platform == 'win32' and - os.system('pkg-config --version > NUL') == 0): - + if find_executable('pkg-config'): return True - else: - if getstatusoutput('pkg-config')[0] == 256: - return True def list_files(dir): '''List all files in a dir, with filename match support: @@ -154,6 +155,9 @@ class BuildExt(build_ext): self.extra_compile_args = [] if sys.platform == 'win32' and self.compiler.compiler_type == 'mingw32': + if not have_gcc(): + raise SystemExit('ERROR: Could not find gcc.') + # MSVC compatible struct packing is required. # Note gcc2 uses -fnative-struct while gcc3 # and gcc4 use -mms-bitfields. Based on the @@ -170,6 +174,9 @@ class BuildExt(build_ext): def modify_compiler(self): if sys.platform == 'win32' and self.compiler.compiler_type == 'mingw32': + if not have_gcc(): + raise SystemExit('ERROR: Could not find gcc.') + # Remove '-static' linker option to prevent MinGW ld # from trying to link with MSVC import libraries. if self.compiler.linker_so.count('-static'): @@ -425,11 +432,11 @@ class Template(object): files.append(self.override) files.append(self.defs) - return not distutils.dep_util.newer_group(files, self.output) + return not dep_util.newer_group(files, self.output) def generate_defs(self): for (target, sources) in self.built_defs: - if distutils.dep_util.newer_group(sources, target): + if dep_util.newer_group(sources, target): # createdefs is mostly called from the CLI ! args=['dummy', target] + sources codegen.createdefs.main(args) diff --git a/examples/Makefile.am b/examples/Makefile.am index 7314b61..b680b90 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,2 +1,4 @@ EXTRA_DIST = properties.py signal.py option.py cairo-demo.py + +-include $(top_srcdir)/git.mk diff --git a/examples/Makefile.in b/examples/Makefile.in index 92b177a..1f8ed47 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -117,6 +117,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -145,6 +146,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -160,6 +162,7 @@ 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@ @@ -398,6 +401,8 @@ uninstall-am: mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am +-include $(top_srcdir)/git.mk + # 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/gi/Makefile.am b/gi/Makefile.am index 2fbb4ac..a98993b 100644 --- a/gi/Makefile.am +++ b/gi/Makefile.am @@ -1,7 +1,7 @@ PLATFORM_VERSION = 2.0 pkgincludedir = $(includedir)/pygtk-$(PLATFORM_VERSION) -pkgpyexecdir = $(pyexecdir)/gtk-2.0 +pkgpyexecdir = $(pyexecdir) SUBDIRS = \ repository \ @@ -24,7 +24,9 @@ _gi_la_LDFLAGS = \ -avoid-version \ -export-symbols-regex "init_gi|PyInit__gi" _gi_la_LIBADD = \ - $(GI_LIBS) + $(GI_LIBS) \ + $(PYTHON_LIBS) \ + $(top_builddir)/glib/libpyglib-2.0-@PYTHON_BASENAME@.la _gi_la_SOURCES = \ pygi-repository.c \ pygi-repository.h \ @@ -65,7 +67,8 @@ _gi_cairo_la_LDFLAGS = \ -export-symbols-regex "init_gi_cairo|PyInit__gi_cairo" _gi_cairo_la_LIBADD = \ $(GI_LIBS) \ - $(PYCAIRO_LIBS) + $(PYCAIRO_LIBS) \ + $(PYTHON_LIBS) _gi_cairo_la_SOURCES = pygi-foreign-cairo.c @@ -87,3 +90,5 @@ check-local: $(LTLIBRARIES:.la=.so) clean-local: rm -f $(LTLIBRARIES:.la=.so) + +-include $(top_srcdir)/git.mk diff --git a/gi/Makefile.in b/gi/Makefile.in index f0dd624..173abf6 100644 --- a/gi/Makefile.in +++ b/gi/Makefile.in @@ -73,7 +73,8 @@ am__base_list = \ am__installdirs = "$(DESTDIR)$(pygidir)" "$(DESTDIR)$(pygidir)" LTLIBRARIES = $(pygi_LTLIBRARIES) am__DEPENDENCIES_1 = -_gi_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +_gi_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(top_builddir)/glib/libpyglib-2.0-@PYTHON_BASENAME@.la am__gi_la_OBJECTS = _gi_la-pygi-repository.lo _gi_la-pygi-info.lo \ _gi_la-pygi-invoke.lo _gi_la-pygi-foreign.lo \ _gi_la-pygi-foreign-gvariant.lo _gi_la-pygi-struct.lo \ @@ -89,7 +90,7 @@ _gi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_gi_la_CFLAGS) $(CFLAGS) \ $(_gi_la_LDFLAGS) $(LDFLAGS) -o $@ _gi_cairo_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__gi_cairo_la_OBJECTS = _gi_cairo_la-pygi-foreign-cairo.lo _gi_cairo_la_OBJECTS = $(am__gi_cairo_la_OBJECTS) _gi_cairo_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -228,6 +229,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -256,6 +258,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -271,6 +274,7 @@ 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@ @@ -307,7 +311,7 @@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ -pkgpyexecdir = $(pyexecdir)/gtk-2.0 +pkgpyexecdir = $(pyexecdir) pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ @@ -346,7 +350,9 @@ _gi_la_LDFLAGS = \ -export-symbols-regex "init_gi|PyInit__gi" _gi_la_LIBADD = \ - $(GI_LIBS) + $(GI_LIBS) \ + $(PYTHON_LIBS) \ + $(top_builddir)/glib/libpyglib-2.0-@PYTHON_BASENAME@.la _gi_la_SOURCES = \ pygi-repository.c \ @@ -390,7 +396,8 @@ _gi_cairo_la_LDFLAGS = \ _gi_cairo_la_LIBADD = \ $(GI_LIBS) \ - $(PYCAIRO_LIBS) + $(PYCAIRO_LIBS) \ + $(PYTHON_LIBS) _gi_cairo_la_SOURCES = pygi-foreign-cairo.c pygi_LTLIBRARIES = _gi.la $(am__append_1) @@ -995,6 +1002,8 @@ check-local: $(LTLIBRARIES:.la=.so) clean-local: rm -f $(LTLIBRARIES:.la=.so) +-include $(top_srcdir)/git.mk + # 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/gi/gimodule.c b/gi/gimodule.c index f7624ae..f70d0f2 100644 --- a/gi/gimodule.c +++ b/gi/gimodule.c @@ -131,39 +131,25 @@ _wrap_pyg_register_interface_info (PyObject *self, PyObject *args) Py_RETURN_NONE; } -static PyObject * -_wrap_pyg_hook_up_vfunc_implementation (PyObject *self, PyObject *args) +static void +find_vfunc_info (GIBaseInfo *vfunc_info, + GType implementor_gtype, + gpointer *implementor_class_ret, + gpointer *implementor_vtable_ret, + GIFieldInfo **field_info_ret) { - PyGIBaseInfo *py_info; - PyObject *py_type; - PyObject *py_function; - gpointer implementor_class = NULL; GType ancestor_g_type = 0; - GType implementor_gtype = 0; - gpointer *method_ptr = NULL; int length, i; - GIBaseInfo *vfunc_info; GIBaseInfo *ancestor_info; GIStructInfo *struct_info; + gpointer implementor_class = NULL; gboolean is_interface = FALSE; - PyGICClosure *closure = NULL; - if (!PyArg_ParseTuple (args, "O!O!O:hook_up_vfunc_implementation", - &PyGIBaseInfo_Type, &py_info, - &PyGTypeWrapper_Type, &py_type, - &py_function)) - return NULL; - - implementor_gtype = pyg_type_from_object (py_type); - g_assert (G_TYPE_IS_CLASSED (implementor_gtype)); - - vfunc_info = py_info->info; ancestor_info = g_base_info_get_container (vfunc_info); is_interface = g_base_info_get_type (ancestor_info) == GI_INFO_TYPE_INTERFACE; ancestor_g_type = g_registered_type_info_get_g_type ( (GIRegisteredTypeInfo *) ancestor_info); - implementor_class = g_type_class_ref (implementor_gtype); if (is_interface) { GTypeInstance *implementor_iface_class; @@ -175,23 +161,23 @@ _wrap_pyg_hook_up_vfunc_implementation (PyObject *self, PyObject *args) "Couldn't find GType of implementor of interface %s. " "Forgot to set __gtype_name__?", g_type_name (ancestor_g_type)); - return NULL; + return; } - g_type_class_unref (implementor_class); - implementor_class = implementor_iface_class; + *implementor_vtable_ret = implementor_iface_class; struct_info = g_interface_info_get_iface_struct ( (GIInterfaceInfo*) ancestor_info); - } else + } else { struct_info = g_object_info_get_class_struct ( (GIObjectInfo*) ancestor_info); + *implementor_vtable_ret = implementor_class; + } + + *implementor_class_ret = implementor_class; length = g_struct_info_get_n_fields (struct_info); for (i = 0; i < length; i++) { GIFieldInfo *field_info; GITypeInfo *type_info; - GIBaseInfo *interface_info; - GICallbackInfo *callback_info; - gint offset; field_info = g_struct_info_get_field (struct_info, i); @@ -202,18 +188,56 @@ _wrap_pyg_hook_up_vfunc_implementation (PyObject *self, PyObject *args) } type_info = g_field_info_get_type (field_info); - if (g_type_info_get_tag (type_info) != GI_TYPE_TAG_INTERFACE) { + if (g_type_info_get_tag (type_info) == GI_TYPE_TAG_INTERFACE) { g_base_info_unref (type_info); - g_base_info_unref (field_info); - continue; + *field_info_ret = field_info; + break; } + g_base_info_unref (type_info); + g_base_info_unref (field_info); + } + + g_base_info_unref (struct_info); +} + +static PyObject * +_wrap_pyg_hook_up_vfunc_implementation (PyObject *self, PyObject *args) +{ + PyGIBaseInfo *py_info; + PyObject *py_type; + PyObject *py_function; + GType implementor_gtype = 0; + gpointer implementor_class = NULL; + gpointer implementor_vtable = NULL; + GIFieldInfo *field_info = NULL; + gpointer *method_ptr = NULL; + PyGICClosure *closure = NULL; + + if (!PyArg_ParseTuple (args, "O!O!O:hook_up_vfunc_implementation", + &PyGIBaseInfo_Type, &py_info, + &PyGTypeWrapper_Type, &py_type, + &py_function)) + return NULL; + + implementor_gtype = pyg_type_from_object (py_type); + g_assert (G_TYPE_IS_CLASSED (implementor_gtype)); + + find_vfunc_info (py_info->info, implementor_gtype, &implementor_class, &implementor_vtable, &field_info); + if (field_info != NULL) { + GITypeInfo *type_info; + GIBaseInfo *interface_info; + GICallbackInfo *callback_info; + gint offset; + + type_info = g_field_info_get_type (field_info); + interface_info = g_type_info_get_interface (type_info); g_assert (g_base_info_get_type (interface_info) == GI_INFO_TYPE_CALLBACK); callback_info = (GICallbackInfo*) interface_info; offset = g_field_info_get_offset (field_info); - method_ptr = G_STRUCT_MEMBER_P (implementor_class, offset); + method_ptr = G_STRUCT_MEMBER_P (implementor_vtable, offset); closure = _pygi_make_native_closure ( (GICallableInfo*) callback_info, GI_SCOPE_TYPE_NOTIFIED, py_function, NULL); @@ -223,17 +247,53 @@ _wrap_pyg_hook_up_vfunc_implementation (PyObject *self, PyObject *args) g_base_info_unref (interface_info); g_base_info_unref (type_info); g_base_info_unref (field_info); - - break; } + g_type_class_unref (implementor_class); - g_base_info_unref (struct_info); + Py_RETURN_NONE; +} - if (!is_interface) - g_type_class_unref (implementor_class); +#if 0 +/* Not used, left around for future reference */ +static PyObject * +_wrap_pyg_has_vfunc_implementation (PyObject *self, PyObject *args) +{ + PyGIBaseInfo *py_info; + PyObject *py_type; + PyObject *py_ret; + gpointer implementor_class = NULL; + gpointer implementor_vtable = NULL; + GType implementor_gtype = 0; + GIFieldInfo *field_info = NULL; - Py_RETURN_NONE; + if (!PyArg_ParseTuple (args, "O!O!:has_vfunc_implementation", + &PyGIBaseInfo_Type, &py_info, + &PyGTypeWrapper_Type, &py_type)) + return NULL; + + implementor_gtype = pyg_type_from_object (py_type); + g_assert (G_TYPE_IS_CLASSED (implementor_gtype)); + + py_ret = Py_False; + find_vfunc_info (py_info->info, implementor_gtype, &implementor_class, &implementor_vtable, &field_info); + if (field_info != NULL) { + gpointer *method_ptr; + gint offset; + + offset = g_field_info_get_offset (field_info); + method_ptr = G_STRUCT_MEMBER_P (implementor_vtable, offset); + if (*method_ptr != NULL) { + py_ret = Py_True; + } + + g_base_info_unref (field_info); + } + g_type_class_unref (implementor_class); + + Py_INCREF(py_ret); + return py_ret; } +#endif static PyObject * _wrap_pyg_variant_new_tuple (PyObject *self, PyObject *args) @@ -258,7 +318,7 @@ _wrap_pyg_variant_new_tuple (PyObject *self, PyObject *args) PyObject *value = PyTuple_GET_ITEM (py_values, i); if (!PyObject_IsInstance (value, py_type)) { - PyErr_Format (PyExc_TypeError, "argument %d is not a GLib.Variant", i); + PyErr_Format (PyExc_TypeError, "argument %" G_GSSIZE_FORMAT " is not a GLib.Variant", i); return NULL; } @@ -315,11 +375,11 @@ PYGLIB_MODULE_START(_gi, "_gi") PyObject *api; if (pygobject_init (-1, -1, -1) == NULL) { - return; + return PYGLIB_MODULE_ERROR_RETURN; } if (_pygobject_import() < 0) { - return; + return PYGLIB_MODULE_ERROR_RETURN; } _pygi_repository_register_types (module); @@ -330,7 +390,7 @@ PYGLIB_MODULE_START(_gi, "_gi") api = PYGLIB_CPointer_WrapPointer ( (void *) &CAPI, "gi._API"); if (api == NULL) { - return; + return PYGLIB_MODULE_ERROR_RETURN; } PyModule_AddObject (module, "_API", api); } diff --git a/gi/module.py b/gi/module.py index c7b6557..9b935ed 100644 --- a/gi/module.py +++ b/gi/module.py @@ -82,14 +82,14 @@ class IntrospectionModule(object): def __init__(self, namespace, version=None): repository.require(namespace, version) self._namespace = namespace - self.version = version + self._version = version self.__name__ = 'gi.repository.' + namespace - repository.require(self._namespace, self.version) + repository.require(self._namespace, self._version) self.__path__ = repository.get_typelib_path(self._namespace) - if self.version is None: - self.version = repository.get_version(self._namespace) + if self._version is None: + self._version = repository.get_version(self._namespace) def __getattr__(self, name): info = repository.find_by_name(self._namespace, name) @@ -106,7 +106,7 @@ class IntrospectionModule(object): wrapper = enum_add(g_type) elif g_type.is_a(gobject.TYPE_NONE): # An enum with a GType of None is an enum without GType - wrapper = Enum + wrapper = type(info.get_name(), (Enum,), {}) else: wrapper = flags_add(g_type) @@ -114,8 +114,11 @@ class IntrospectionModule(object): wrapper.__module__ = 'gi.repository.' + info.get_namespace() for value_info in info.get_values(): - name = value_info.get_name().upper() - setattr(wrapper, name, wrapper(value_info.get_value())) + value_name = value_info.get_name().upper() + setattr(wrapper, value_name, wrapper(value_info.get_value())) + + if g_type != gobject.TYPE_NONE: + g_type.pytype = wrapper elif isinstance(info, RegisteredTypeInfo): g_type = info.get_g_type() @@ -175,8 +178,17 @@ class IntrospectionModule(object): return "" % (self._namespace, path) def __dir__ (self): - attribs_list = repository.get_infos(self._namespace) - return list(map(lambda x: x.get_name(), attribs_list)) + # Python's default dir() is just dir(self.__class__) + self.__dict__.keys() + result = set(dir(self.__class__)) + result.update(self.__dict__.keys()) + + # update *set* because some repository attributes have already been + # wrapped by __getattr__() and included in self.__dict__ + namespace_infos = repository.get_infos(self._namespace) + result.update(info.get_name() for info in namespace_infos) + + return list(result) + class DynamicGObjectModule(IntrospectionModule): """Wrapper for the GObject module @@ -211,26 +223,27 @@ class DynamicGObjectModule(IntrospectionModule): class DynamicModule(object): def __init__(self, namespace): self._namespace = namespace - self.introspection_module = None + self._introspection_module = None self._version = None self._overrides_module = None + self.__path__ = None def require_version(self, version): - if self.introspection_module is not None and \ - self.introspection_module.version != version: + if self._introspection_module is not None and \ + self._introspection_module._version != version: raise RuntimeError('Module has been already loaded ') self._version = version def _import(self): - self.introspection_module = IntrospectionModule(self._namespace, - self._version) + self._introspection_module = IntrospectionModule(self._namespace, + self._version) overrides_modules = __import__('gi.overrides', fromlist=[self._namespace]) self._overrides_module = getattr(overrides_modules, self._namespace, None) self.__path__ = repository.get_typelib_path(self._namespace) def __getattr__(self, name): - if self.introspection_module is None: + if self._introspection_module is None: self._import() if self._overrides_module is not None: @@ -247,9 +260,26 @@ class DynamicModule(object): if key in registry: return registry[key] - return getattr(self.introspection_module, name) + return getattr(self._introspection_module, name) def __dir__ (self): + if self._introspection_module is None: + self._import() + + # Python's default dir() is just dir(self.__class__) + self.__dict__.keys() + result = set(dir(self.__class__)) + result.update(self.__dict__.keys()) + + result.update(dir(self._introspection_module)) + override_exports = getattr(self._overrides_module, '__all__', ()) + result.update(override_exports) + return list(result) + + def __repr__(self): repository.require(self._namespace, self._version) - attribs_list = repository.get_infos(self._namespace) - return list(map(lambda x: x.get_name(), attribs_list)) + + path = repository.get_typelib_path(self._namespace) + return "<%s.%s %r from %r>" % (self.__class__.__module__, + self.__class__.__name__, + self._namespace, + path) diff --git a/gi/overrides/GIMarshallingTests.py b/gi/overrides/GIMarshallingTests.py index 25a882f..aac8883 100644 --- a/gi/overrides/GIMarshallingTests.py +++ b/gi/overrides/GIMarshallingTests.py @@ -21,7 +21,7 @@ from ..overrides import override from ..importer import modules -GIMarshallingTests = modules['GIMarshallingTests'].introspection_module +GIMarshallingTests = modules['GIMarshallingTests']._introspection_module __all__ = [] diff --git a/gi/overrides/GLib.py b/gi/overrides/GLib.py index 78d8c35..ac783be 100644 --- a/gi/overrides/GLib.py +++ b/gi/overrides/GLib.py @@ -21,10 +21,21 @@ from ..importer import modules from .._gi import variant_new_tuple, variant_type_from_string -GLib = modules['GLib'].introspection_module +GLib = modules['GLib']._introspection_module __all__ = [] +def _create_variant(value): + '''Create a variant containing the variant "value". + + This is usually done with the GLib.Variant.new_variant() leaf + constructor, but this is currently broken, see GNOME#639952. + ''' + builder = GLib.VariantBuilder() + builder.init(variant_type_from_string('v')) + builder.add_value(value) + return builder.end() + class _VariantCreator(object): _LEAF_CONSTRUCTORS = { @@ -41,115 +52,242 @@ class _VariantCreator(object): 's': GLib.Variant.new_string, 'o': GLib.Variant.new_object_path, 'g': GLib.Variant.new_signature, - 'v': GLib.Variant.new_variant, + #'v': GLib.Variant.new_variant, + 'v': _create_variant, } - def __init__(self, format_string, args): - self._format_string = format_string - self._args = args + def _create(self, format, args): + '''Create a GVariant object from given format and argument list. - def create(self): - if self._format_string_is_leaf(): - return self._new_variant_leaf() + This method recursively calls itself for complex structures (arrays, + dictionaries, boxed). - format_char = self._pop_format_char() - arg = self._pop_arg() + Return a tuple (variant, rest_format, rest_args) with the generated + GVariant, the remainder of the format string, and the remainder of the + arguments. - if format_char == 'm': - raise NotImplementedError() - else: - builder = GLib.VariantBuilder() - if format_char == '(': - builder.init(variant_type_from_string('r')) - elif format_char == '{': - builder.init(variant_type_from_string('{?*}')) + If args is None, then this won't actually consume any arguments, and + just parse the format string and generate empty GVariant structures. + This is required for creating empty dictionaries or arrays. + ''' + # leaves (simple types) + constructor = self._LEAF_CONSTRUCTORS.get(format[0]) + if constructor: + if args is not None: + if not args: + raise TypeError('not enough arguments for GVariant format string') + v = constructor(args[0]) + return (constructor(args[0]), format[1:], args[1:]) else: - raise NotImplementedError() - format_char = self._pop_format_char() - while format_char not in [')', '}']: - builder.add_value(Variant(format_char, arg)) - format_char = self._pop_format_char() - if self._args: - arg = self._pop_arg() - return builder.end() - - def _format_string_is_leaf(self): - format_char = self._format_string[0] - return not format_char in ['m', '(', '{'] - - def _format_string_is_nnp(self): - format_char = self._format_string[0] - return format_char in ['a', 's', 'o', 'g', '^', '@', '*', '?', 'r', - 'v', '&'] - - def _new_variant_leaf(self): - if self._format_string_is_nnp(): - return self._new_variant_nnp() - - format_char = self._pop_format_char() - arg = self._pop_arg() - - return _VariantCreator._LEAF_CONSTRUCTORS[format_char](arg) - - def _new_variant_nnp(self): - format_char = self._pop_format_char() - arg = self._pop_arg() - - if format_char == '&': - format_char = self._pop_format_char() - - if format_char == 'a': - builder = GLib.VariantBuilder() - builder.init(variant_type_from_string('a*')) + return (None, format[1:], None) - element_format_string = self._pop_leaf_format_string() + if format[0] == '(': + return self._create_tuple(format, args) - if isinstance(arg, dict): - for element in arg.items(): - value = Variant(element_format_string, *element) - builder.add_value(value) - else: - for element in arg: - value = Variant(element_format_string, element) - builder.add_value(value) - return builder.end() - elif format_char == '^': - raise NotImplementedError() - elif format_char == '@': - raise NotImplementedError() - elif format_char == '*': - raise NotImplementedError() - elif format_char == 'r': - raise NotImplementedError() - elif format_char == '?': - raise NotImplementedError() + if format.startswith('a{'): + return self._create_dict(format, args) + + if format[0] == 'a': + return self._create_array(format, args) + + raise NotImplementedError('cannot handle GVariant type ' + format) + + def _create_tuple(self, format, args): + '''Handle the case where the outermost type of format is a tuple.''' + + format = format[1:] # eat the '(' + builder = GLib.VariantBuilder() + builder.init(variant_type_from_string('r')) + if args is not None: + if not args or type(args[0]) != type(()): + raise (TypeError, 'expected tuple argument') + + for i in range(len(args[0])): + if format.startswith(')'): + raise (TypeError, 'too many arguments for tuple signature') + + (v, format, _) = self._create(format, args[0][i:]) + builder.add_value(v) + args = args[1:] + return (builder.end(), format[1:], args) + + def _create_dict(self, format, args): + '''Handle the case where the outermost type of format is a dict.''' + + builder = GLib.VariantBuilder() + if args is None or not args[0]: + # empty value: we need to call _create() to parse the subtype, + # and specify the element type precisely + rest_format = self._create(format[2:], None)[1] + rest_format = self._create(rest_format, None)[1] + if not rest_format.startswith('}'): + raise ValueError('dictionary type string not closed with }') + rest_format = rest_format[1:] # eat the } + element_type = format[:len(format) - len(rest_format)] + builder.init(variant_type_from_string(element_type)) else: - return _VariantCreator._LEAF_CONSTRUCTORS[format_char](arg) + builder.init(variant_type_from_string('a{?*}')) + for k, v in args[0].items(): + (key_v, rest_format, _) = self._create(format[2:], [k]) + (val_v, rest_format, _) = self._create(rest_format, [v]) - def _pop_format_char(self): - format_char = self._format_string[0] - self._format_string = self._format_string[1:] - return format_char + if not rest_format.startswith('}'): + raise ValueError('dictionary type string not closed with }') + rest_format = rest_format[1:] # eat the } - def _pop_leaf_format_string(self): - # FIXME: This will break when the leaf is inside a tuple or dict entry - format_string = self._format_string - self._format_string = '' - return format_string + entry = GLib.VariantBuilder() + entry.init(variant_type_from_string('{?*}')) + entry.add_value(key_v) + entry.add_value(val_v) + builder.add_value(entry.end()) - def _pop_arg(self): - arg = self._args[0] - self._args = self._args[1:] - return arg + if args is not None: + args = args[1:] + return (builder.end(), rest_format, args) + + def _create_array(self, format, args): + '''Handle the case where the outermost type of format is an array.''' + + builder = GLib.VariantBuilder() + if args is None or not args[0]: + # empty value: we need to call _create() to parse the subtype, + # and specify the element type precisely + rest_format = self._create(format[1:], None)[1] + element_type = format[:len(format) - len(rest_format)] + builder.init(variant_type_from_string(element_type)) + else: + builder.init(variant_type_from_string('a*')) + for i in range(len(args[0])): + (v, rest_format, _) = self._create(format[1:], args[0][i:]) + builder.add_value(v) + if args is not None: + args = args[1:] + return (builder.end(), rest_format, args) class Variant(GLib.Variant): - def __new__(cls, format_string, *args): - creator = _VariantCreator(format_string, args) - return creator.create() + def __new__(cls, format_string, value): + '''Create a GVariant from a native Python object. + + format_string is a standard GVariant type signature, value is a Python + object whose structure has to match the signature. + + Examples: + GLib.Variant('i', 1) + GLib.Variant('(is)', (1, 'hello')) + GLib.Variant('(asa{sv})', ([], {'foo': GLib.Variant('b', True), + 'bar': GLib.Variant('i', 2)})) + ''' + creator = _VariantCreator() + (v, rest_format, _) = creator._create(format_string, [value]) + if rest_format: + raise TypeError('invalid remaining format string: "%s"' % rest_format) + return v def __repr__(self): return '' % getattr(self, 'print')(True) + def unpack(self): + '''Decompose a GVariant into a native Python object.''' + + LEAF_ACCESSORS = { + 'b': self.get_boolean, + 'y': self.get_byte, + 'n': self.get_int16, + 'q': self.get_uint16, + 'i': self.get_int32, + 'u': self.get_uint32, + 'x': self.get_int64, + 't': self.get_uint64, + 'h': self.get_handle, + 'd': self.get_double, + 's': self.get_string, + 'o': self.get_string, # object path + 'g': self.get_string, # signature + } + + # simple values + la = LEAF_ACCESSORS.get(self.get_type_string()) + if la: + return la() + + # tuple + if self.get_type_string().startswith('('): + res = [self.get_child_value(i).unpack() + for i in range(self.n_children())] + return tuple(res) + + # dictionary + if self.get_type_string().startswith('a{'): + res = {} + for i in range(self.n_children()): + v = self.get_child_value(i) + res[v.get_child_value(0).unpack()] = v.get_child_value(1).unpack() + return res + + # array + if self.get_type_string().startswith('a'): + return [self.get_child_value(i).unpack() + for i in range(self.n_children())] + + # variant (just unbox transparently) + if self.get_type_string().startswith('v'): + return self.get_variant().unpack() + + raise NotImplementedError('unsupported GVariant type ' + self.get_type_string()) + + # + # Pythonic iterators + # + def __len__(self): + if self.get_type_string() in ['s', 'o', 'g']: + return len(self.get_string()) + if self.get_type_string().startswith('a') or self.get_type_string().startswith('('): + return self.n_children() + raise TypeError('GVariant type %s does not have a length' % self.get_type_string()) + + def __getitem__(self, key): + # dict + if self.get_type_string().startswith('a{'): + try: + val = self.lookup_value(key, variant_type_from_string('*')) + if val is None: + raise KeyError(key) + return val.unpack() + except TypeError: + # lookup_value() only works for string keys, which is certainly + # the common case; we have to do painful iteration for other + # key types + for i in range(self.n_children()): + v = self.get_child_value(i) + if v.get_child_value(0).unpack() == key: + return v.get_child_value(1).unpack() + raise KeyError(key) + + # array/tuple + if self.get_type_string().startswith('a') or self.get_type_string().startswith('('): + key = int(key) + if key < 0: + key = self.n_children() + key + if key < 0 or key >= self.n_children(): + raise IndexError('list index out of range') + return self.get_child_value(key).unpack() + + # string + if self.get_type_string() in ['s', 'o', 'g']: + return self.get_string().__getitem__(key) + + raise TypeError('GVariant type %s is not a container' % self.get_type_string()) + + def keys(self): + if not self.get_type_string().startswith('a{'): + return TypeError, 'GVariant type %s is not a dictionary' % self.get_type_string() + + res = [] + for i in range(self.n_children()): + v = self.get_child_value(i) + res.append(v.get_child_value(0).unpack()) + return res + @classmethod def new_tuple(cls, *elements): return variant_new_tuple(elements) diff --git a/gi/overrides/Gdk.py b/gi/overrides/Gdk.py index 08141d7..4ed71a6 100644 --- a/gi/overrides/Gdk.py +++ b/gi/overrides/Gdk.py @@ -22,7 +22,7 @@ from ..overrides import override from ..importer import modules -Gdk = modules['Gdk'].introspection_module +Gdk = modules['Gdk']._introspection_module __all__ = [] @@ -43,7 +43,7 @@ class Color(Gdk.Color): Color = override(Color) __all__.append('Color') -if Gdk.version == '2.0': +if Gdk._version == '2.0': class Rectangle(Gdk.Rectangle): def __init__(self, x, y, width, height): @@ -62,12 +62,29 @@ if Gdk.version == '2.0': Rectangle = override(Rectangle) __all__.append('Rectangle') -class Drawable(Gdk.Drawable): - def cairo_create(self): - return Gdk.cairo_create(self) - -Drawable = override(Drawable) -__all__.append('Drawable') +if Gdk._version == '2.0': + class Drawable(Gdk.Drawable): + def cairo_create(self): + return Gdk.cairo_create(self) + + Drawable = override(Drawable) + __all__.append('Drawable') +else: + class Window(Gdk.Window): + def __new__(cls, parent, attributes, attributes_mask): + # Gdk.Window had to be made abstract, + # this override allows using the standard constructor + return Gdk.Window.new(parent, attributes, attributes_mask) + def __init__(self, parent, attributes, attributes_mask): + pass + def cairo_create(self): + return Gdk.cairo_create(self) + + Window = override(Window) + __all__.append('Window') + +Gdk.EventType._2BUTTON_PRESS = getattr(Gdk.EventType, "2BUTTON_PRESS") +Gdk.EventType._3BUTTON_PRESS = getattr(Gdk.EventType, "3BUTTON_PRESS") class Event(Gdk.Event): _UNION_MEMBERS = { @@ -76,8 +93,8 @@ class Event(Gdk.Event): Gdk.EventType.EXPOSE: 'expose', Gdk.EventType.MOTION_NOTIFY: 'motion', Gdk.EventType.BUTTON_PRESS: 'button', - #Gdk.EventType.2BUTTON_PRESS: 'button', - #Gdk.EventType.3BUTTON_PRESS: 'button', + Gdk.EventType._2BUTTON_PRESS: 'button', + Gdk.EventType._3BUTTON_PRESS: 'button', Gdk.EventType.BUTTON_RELEASE: 'button', Gdk.EventType.KEY_PRESS: 'key', Gdk.EventType.KEY_RELEASE: 'key', @@ -101,9 +118,11 @@ class Event(Gdk.Event): Gdk.EventType.DROP_FINISHED: 'dnd', Gdk.EventType.CLIENT_EVENT: 'client', Gdk.EventType.VISIBILITY_NOTIFY: 'visibility', - Gdk.EventType.NO_EXPOSE: 'no_expose' } + if Gdk._version == '2.0': + _UNION_MEMBERS[Gdk.EventType.NO_EXPOSE] = 'no_expose' + def __new__(cls, *args, **kwargs): return Gdk.Event.__new__(cls) @@ -112,11 +131,18 @@ class Event(Gdk.Event): if real_event: return getattr(getattr(self, real_event), name) else: - return getattr(self, name) + raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name)) Event = override(Event) __all__.append('Event') +class DragContext(Gdk.DragContext): + def finish(self, success, del_, time): + Gtk = modules['Gtk']._introspection_module + Gtk.drag_finish(self, success, del_, time) + +DragContext = override(DragContext) +__all__.append('DragContext') import sys diff --git a/gi/overrides/Gio.py b/gi/overrides/Gio.py new file mode 100644 index 0000000..78affa2 --- /dev/null +++ b/gi/overrides/Gio.py @@ -0,0 +1,99 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +# vim: tabstop=4 shiftwidth=4 expandtab +# +# Copyright (C) 2010 Ignacio Casal Quinteiro +# +# 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 + +from ..overrides import override +from ..importer import modules + +from gi.repository import GLib + +Gio = modules['Gio']._introspection_module + +__all__ = [] + +class FileEnumerator(Gio.FileEnumerator): + def __iter__(self): + return self + + def __next__(self): + file_info = self.next_file(None) + + if file_info is not None: + return file_info + else: + raise StopIteration + + # python 2 compat for the iter protocol + next = __next__ + + +FileEnumerator = override(FileEnumerator) +__all__.append('FileEnumerator') + +class Settings(Gio.Settings): + '''Provide dictionary-like access to GLib.Settings.''' + + def __init__(self, schema, path=None, backend=None): + Gio.Settings.__init__(self, schema=schema, backend=backend, path=path) + + def __contains__(self, key): + return key in self.list_keys() + + def __len__(self): + return len(self.list_keys()) + + def __bool__(self): + # for "if mysettings" we don't want a dictionary-like test here, just + # if the object isn't None + return True + + # alias for Python 2.x object protocol + __nonzero__ = __bool__ + + def __getitem__(self, key): + # get_value() aborts the program on an unknown key + if not key in self: + raise KeyError('unknown key: %r' % (key,)) + + return self.get_value(key).unpack() + + def __setitem__(self, key, value): + # set_value() aborts the program on an unknown key + if not key in self: + raise KeyError('unknown key: %r' % (key,)) + + # determine type string of this key + range = self.get_range(key) + type_ = range.get_child_value(0).get_string() + v = range.get_child_value(1) + if type_ == 'type': + # v is boxed empty array, type of its elements is the allowed value type + type_str = v.get_child_value(0).get_type_string() + assert type_str.startswith('a') + type_str = type_str[1:] + else: + raise NotImplementedError('Cannot handle allowed type range class' + str(type_)) + + self.set_value(key, GLib.Variant(type_str, value)) + + def keys(self): + return self.list_keys() + +Settings = override(Settings) +__all__.append('Settings') diff --git a/gi/overrides/Gtk.py b/gi/overrides/Gtk.py index a2f38ac..6c22829 100644 --- a/gi/overrides/Gtk.py +++ b/gi/overrides/Gtk.py @@ -21,7 +21,6 @@ import sys import gobject -from gi.repository import Gdk from gi.repository import GObject from ..overrides import override from ..importer import modules @@ -33,7 +32,7 @@ else: _basestring = basestring _callable = callable -Gtk = modules['Gtk'].introspection_module +Gtk = modules['Gtk']._introspection_module __all__ = [] class Widget(Gtk.Widget): @@ -49,6 +48,21 @@ __all__.append('Widget') class Container(Gtk.Container, Widget): + def __len__(self): + return len(self.get_children()) + + def __contains__(self, child): + return child in self.get_children() + + def __iter__(self): + return iter(self.get_children()) + + def __bool__(self): + return True + + # alias for Python 2.x object protocol + __nonzero__ = __bool__ + def get_focus_chain(self): success, widgets = super(Container, self).get_focus_chain() if success: @@ -74,7 +88,24 @@ class Editable(Gtk.Editable): Editable = override(Editable) __all__.append("Editable") +class Action(Gtk.Action): + def __init__(self, name, label, tooltip, stock_id, **kwds): + Gtk.Action.__init__(self, name=name, label=label, tooltip=tooltip, stock_id=stock_id, **kwds) + +Action = override(Action) +__all__.append("Action") + +class RadioAction(Gtk.RadioAction): + def __init__(self, name, label, tooltip, stock_id, value, **kwds): + Gtk.RadioAction.__init__(self, name=name, label=label, tooltip=tooltip, stock_id=stock_id, value=value, **kwds) + +RadioAction = override(RadioAction) +__all__.append("RadioAction") + class ActionGroup(Gtk.ActionGroup): + def __init__(self, name, **kwds): + super(ActionGroup, self).__init__(name = name, **kwds) + def add_actions(self, entries, user_data=None): """ The add_actions() method is a convenience method that creates a number @@ -107,7 +138,7 @@ class ActionGroup(Gtk.ActionGroup): raise TypeError('entries must be iterable') def _process_action(name, stock_id=None, label=None, accelerator=None, tooltip=None, callback=None): - action = Gtk.Action(name=name, label=label, tooltip=tooltip, stock_id=stock_id) + action = Action(name, label, tooltip, stock_id) if callback is not None: action.connect('activate', callback, user_data) @@ -152,7 +183,7 @@ class ActionGroup(Gtk.ActionGroup): raise TypeError('entries must be iterable') def _process_action(name, stock_id=None, label=None, accelerator=None, tooltip=None, callback=None, is_active=False): - action = Gtk.ToggleAction(name=name, label=label, tooltip=tooltip, stock_id=stock_id) + action = Gtk.ToggleAction(name, label, tooltip, stock_id) action.set_active(is_active) if callback is not None: action.connect('activate', callback, user_data) @@ -200,7 +231,7 @@ class ActionGroup(Gtk.ActionGroup): first_action = None def _process_action(group_source, name, stock_id=None, label=None, accelerator=None, tooltip=None, entry_value=0): - action = Gtk.RadioAction(name=name, label=label, tooltip=tooltip, stock_id=stock_id, value=entry_value) + action = RadioAction(name, label, tooltip, stock_id, entry_value) # FIXME: join_group is a patch to Gtk+ 3.0 # otherwise we can't effectively add radio actions to a @@ -237,6 +268,9 @@ class UIManager(Gtk.UIManager): return Gtk.UIManager.add_ui_from_string(self, buffer, length) + def insert_action_group(self, buffer, length=-1): + return Gtk.UIManager.insert_action_group(self, buffer, length) + UIManager = override(UIManager) __all__.append('UIManager') @@ -278,8 +312,7 @@ class Builder(Gtk.Builder): else: gobj.connect(signal_name, handler) - self.connect_signals_full(_full_callback, - obj_or_map); + self.connect_signals_full(_full_callback, obj_or_map) def add_from_string(self, buffer): if not isinstance(buffer, _basestring): @@ -316,7 +349,7 @@ class Dialog(Gtk.Dialog, Container): # keyword to work around this if _buttons_property is not None: kwds['buttons'] = _buttons_property - + Gtk.Dialog.__init__(self, **kwds) if title: self.set_title(title) @@ -380,6 +413,14 @@ class MessageDialog(Gtk.MessageDialog, Dialog): **kwds) Dialog.__init__(self, parent=parent, flags=flags) + def format_secondary_text(self, message_format): + self.set_property('secondary-use-markup', False) + self.set_property('secondary-text', message_format) + + def format_secondary_markup(self, message_format): + self.set_property('secondary-use-markup', True) + self.set_property('secondary-text', message_format) + MessageDialog = override(MessageDialog) __all__.append('MessageDialog') @@ -409,9 +450,9 @@ class FileChooserDialog(Gtk.FileChooserDialog, Dialog): Gtk.FileChooserDialog.__init__(self, action=action, **kwds) - Dialog.__init__(self, - title=title, - parent=parent, + Dialog.__init__(self, + title=title, + parent=parent, buttons=buttons) FileChooserDialog = override(FileChooserDialog) @@ -516,6 +557,12 @@ class TextBuffer(Gtk.TextBuffer): self._get_or_create_tag_table().add(tag) return tag + def create_mark(self, mark_name, where, left_gravity=False): + return Gtk.TextBuffer.create_mark(self, mark_name, where, left_gravity) + + def set_text(self, text, length=-1): + Gtk.TextBuffer.set_text(self, text, length) + def insert(self, iter, text): if not isinstance(text , _basestring): raise TypeError('text must be a string, not %s' % type(text)) @@ -523,6 +570,32 @@ class TextBuffer(Gtk.TextBuffer): length = len(text) Gtk.TextBuffer.insert(self, iter, text, length) + def insert_with_tags(self, iter, text, *tags): + start_offset = iter.get_offset() + self.insert(iter, text) + + if not tags: + return + + start = self.get_iter_at_offset(start_offset) + + for tag in tags: + self.apply_tag(tag, start, iter) + + def insert_with_tags_by_name(self, iter, text, *tags): + if not tags: + return + + tag_objs = [] + + for tag in tags: + tag_obj = self.get_tag_table().lookup(tag) + if not tag_obj: + raise ValueError('unknown text tag: %s' % tag) + tag_objs.append(tag_obj) + + self.insert_with_tags(iter, text, *tag_objs) + def insert_at_cursor(self, text): if not isinstance(text , _basestring): raise TypeError('text must be a string, not %s' % type(text)) @@ -531,9 +604,11 @@ class TextBuffer(Gtk.TextBuffer): Gtk.TextBuffer.insert_at_cursor(self, text, length) def get_selection_bounds(self): - success, start, end = super(TextBuffer, self).get_selection_bounds(string, - flags, limit) - return (start, end) + success, start, end = super(TextBuffer, self).get_selection_bounds() + if success: + return (start, end) + else: + return () TextBuffer = override(TextBuffer) __all__.append('TextBuffer') @@ -550,6 +625,15 @@ class TextIter(Gtk.TextIter): flags, limit) return (match_start, match_end,) + def begins_tag(self, tag=None): + return super(TextIter, self).begins_tag(tag) + + def ends_tag(self, tag=None): + return super(TextIter, self).ends_tag(tag) + + def toggles_tag(self, tag=None): + return super(TextIter, self).toggles_tag(tag) + TextIter = override(TextIter) __all__.append('TextIter') @@ -586,30 +670,14 @@ class TreeModel(Gtk.TreeModel): return TreeModelRowIter(self, self.get_iter_first()) def get_iter(self, path): - if isinstance(path, Gtk.TreePath): - pass - elif isinstance(path, (int, str,)): - path = self._tree_path_from_string(str(path)) - elif isinstance(path, tuple): - path_str = ":".join(str(val) for val in path) - path = self._tree_path_from_string(path_str) - else: - raise TypeError("tree path must be one of Gtk.TreeIter, Gtk.TreePath, \ - int, str or tuple, not %s" % type(path).__name__) + if not isinstance(path, Gtk.TreePath): + path = TreePath(path) success, aiter = super(TreeModel, self).get_iter(path) if not success: raise ValueError("invalid tree path '%s'" % path) return aiter - def _tree_path_from_string(self, path): - if len(path) == 0: - raise TypeError("could not parse subscript '%s' as a tree path" % path) - try: - return TreePath.new_from_string(path) - except TypeError: - raise TypeError("could not parse subscript '%s' as a tree path" % path) - def get_iter_first(self): success, aiter = super(TreeModel, self).get_iter_first() if success: @@ -646,13 +714,64 @@ class TreeModel(Gtk.TreeModel): # TODO: Accept a dictionary for row # model.append(None,{COLUMN_ICON: icon, COLUMN_NAME: name}) - n_columns = self.get_n_columns(); + n_columns = self.get_n_columns() if len(row) != n_columns: raise ValueError('row sequence has the incorrect number of elements') for i in range(n_columns): - if row[i] is not None: - self.set_value(treeiter, i, row[i]) + value = row[i] + self.set_value(treeiter, i, value) + + def _convert_value(self, treeiter, column, value): + if value is None: + return + + # we may need to convert to a basic type + type_ = self.get_column_type(column) + if type_ == gobject.TYPE_PYOBJECT: + pass # short-circut branching + elif type_ == gobject.TYPE_STRING: + if isinstance(value, str): + value = str(value) + elif sys.version_info < (3, 0): + if isinstance(value, unicode): + value = value.encode('UTF-8') + else: + raise ValueError('Expected string or unicode for column %i but got %s%s' % (column, value, type(value))) + else: + raise ValueError('Expected a string for column %i but got %s' % (column, type(value))) + elif type_ == gobject.TYPE_FLOAT or type_ == gobject.TYPE_DOUBLE: + if isinstance(value, float): + value = float(value) + else: + raise ValueError('Expected a float for column %i but got %s' % (column, type(value))) + elif type_ == gobject.TYPE_LONG or type_ == gobject.TYPE_INT: + if isinstance(value, int): + value = int(value) + elif sys.version_info < (3, 0): + if isinstance(value, long): + value = long(value) + else: + raise ValueError('Expected an long for column %i but got %s' % (column, type(value))) + else: + raise ValueError('Expected an integer for column %i but got %s' % (column, type(value))) + + return value + + def get(self, treeiter, *columns): + n_columns = self.get_n_columns() + + values = [] + for col in columns: + if not isinstance(col, int): + raise TypeError("column numbers must be ints") + + if col < 0 or col >= n_columns: + raise ValueError("column number is out of range") + + values.append(self.get_value(treeiter, col)) + + return tuple(values) TreeModel = override(TreeModel) __all__.append('TreeModel') @@ -666,6 +785,12 @@ class TreeSortable(Gtk.TreeSortable, ): else: return (None, None,) + def set_sort_func(self, sort_column_id, sort_func, user_data=None): + super(TreeSortable, self).set_sort_func(sort_column_id, sort_func, user_data) + + def set_default_sort_func(self, sort_func, user_data=None): + super(TreeSortable, self).set_default_sort_func(sort_func, user_data) + TreeSortable = override(TreeSortable) __all__.append('TreeSortable') @@ -698,7 +823,6 @@ class ListStore(Gtk.ListStore, TreeModel, TreeSortable): return treeiter - def insert_after(self, sibling, row=None): treeiter = Gtk.ListStore.insert_after(self, sibling) @@ -707,6 +831,10 @@ class ListStore(Gtk.ListStore, TreeModel, TreeSortable): return treeiter + def set_value(self, treeiter, column, value): + value = self._convert_value(treeiter, column, value) + Gtk.ListStore.set_value(self, treeiter, column, value) + ListStore = override(ListStore) __all__.append('ListStore') @@ -802,26 +930,39 @@ __all__.append('TreeModelRowIter') class TreePath(Gtk.TreePath): + def __new__(cls, path=0): + if isinstance(path, int): + path = str(path) + elif isinstance(path, tuple): + path = ":".join(str(val) for val in path) + + if len(path) == 0: + raise TypeError("could not parse subscript '%s' as a tree path" % path) + try: + return TreePath.new_from_string(path) + except TypeError: + raise TypeError("could not parse subscript '%s' as a tree path" % path) + def __str__(self): return self.to_string() def __lt__(self, other): - return self.compare(other) < 0 + return not other is None and self.compare(other) < 0 def __le__(self, other): - return self.compare(other) <= 0 + return not other is None and self.compare(other) <= 0 def __eq__(self, other): - return self.compare(other) == 0 + return not other is None and self.compare(other) == 0 def __ne__(self, other): - return self.compare(other) != 0 + return other is None or self.compare(other) != 0 def __gt__(self, other): - return self.compare(other) > 0 + return other is None or self.compare(other) > 0 def __ge__(self, other): - return self.compare(other) >= 0 + return other is None or self.compare(other) >= 0 TreePath = override(TreePath) __all__.append('TreePath') @@ -856,7 +997,6 @@ class TreeStore(Gtk.TreeStore, TreeModel, TreeSortable): return treeiter - def insert_after(self, parent, sibling, row=None): treeiter = Gtk.TreeStore.insert_after(self, parent, sibling) @@ -865,6 +1005,10 @@ class TreeStore(Gtk.TreeStore, TreeModel, TreeSortable): return treeiter + def set_value(self, treeiter, column, value): + value = self._convert_value(treeiter, column, value) + Gtk.TreeStore.set_value(self, treeiter, column, value) + TreeStore = override(TreeStore) __all__.append('TreeStore') @@ -881,6 +1025,32 @@ class TreeView(Gtk.TreeView, Container): if success: return (path, pos,) + def _construct_target_list(self, targets): + # FIXME: this should most likely be part of Widget or a global helper + # function + target_entries = [] + for t in targets: + entry = Gtk.TargetEntry.new(*t) + target_entries.append(entry) + return target_entries + + def enable_model_drag_source(self, start_button_mask, targets, actions): + target_entries = self._construct_target_list(targets) + super(TreeView, self).enable_model_drag_source(start_button_mask, + target_entries, + actions) + + def enable_model_drag_dest(self, targets, actions): + target_entries = self._construct_target_list(targets) + super(TreeView, self).enable_model_drag_dest(target_entries, + actions) + + def scroll_to_cell(self, path, column=None, use_align=False, row_align=0.0, col_align=0.0): + if not isinstance(path, Gtk.TreePath): + path = TreePath(path) + super(TreeView, self).scroll_to_cell(path, column, use_align, row_align, col_align) + + TreeView = override(TreeView) __all__.append('TreeView') @@ -900,11 +1070,17 @@ class TreeViewColumn(Gtk.TreeViewColumn): if success: return (start_pos, width,) + TreeViewColumn = override(TreeViewColumn) __all__.append('TreeViewColumn') class TreeSelection(Gtk.TreeSelection): + def select_path(self, path): + if not isinstance(path, Gtk.TreePath): + path = TreePath(path) + super(TreeSelection, self).select_path(path) + def get_selected(self): success, model, aiter = super(TreeSelection, self).get_selected() if success: @@ -912,11 +1088,17 @@ class TreeSelection(Gtk.TreeSelection): else: return (model, None) + # for compatibility with PyGtk + def get_selected_rows(self): + rows, model = super(TreeSelection, self).get_selected_rows() + return (model, rows) + + TreeSelection = override(TreeSelection) __all__.append('TreeSelection') class Button(Gtk.Button, Container): - def __init__(self, label=None, stock=None, use_underline=False): + def __init__(self, label=None, stock=None, use_underline=False, **kwds): if stock: label = stock use_stock = True @@ -924,11 +1106,72 @@ class Button(Gtk.Button, Container): else: use_stock = False Gtk.Button.__init__(self, label=label, use_stock=use_stock, - use_underline=use_underline) + use_underline=use_underline, **kwds) Button = override(Button) __all__.append('Button') -import sys +class LinkButton(Gtk.LinkButton): + def __init__(self, uri, label=None, **kwds): + Gtk.LinkButton.__init__(self, uri=uri, label=label, **kwds) + +LinkButton = override(LinkButton) +__all__.append('LinkButton') + +class Label(Gtk.Label): + def __init__(self, label=None, **kwds): + Gtk.Label.__init__(self, label=label, **kwds) + +Label = override(Label) +__all__.append('Label') + +class Adjustment(Gtk.Adjustment): + def __init__(self, *args, **kwds): + arg_names = ('value', 'lower', 'upper', + 'step_increment', 'page_increment', 'page_size') + new_args = dict(zip(arg_names, args)) + new_args.update(kwds) + Gtk.Adjustment.__init__(self, **new_args) + + # The value property is set between lower and (upper - page_size). + # Just in case lower, upper or page_size was still 0 when value + # was set, we set it again here. + if 'value' in new_args: + self.set_value(new_args['value']) + +Adjustment = override(Adjustment) +__all__.append('Adjustment') + +class Table(Gtk.Table, Container): + def __init__(self, rows=1, columns=1, homogeneous=False, **kwds): + Gtk.Table.__init__(self, n_rows=rows, n_columns=columns, homogeneous=homogeneous, **kwds) + + def attach(self, child, left_attach, right_attach, top_attach, bottom_attach, xoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, yoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, xpadding=0, ypadding=0): + Gtk.Table.attach(self, child, left_attach, right_attach, top_attach, bottom_attach, xoptions, yoptions, xpadding, ypadding) + +Table = override(Table) +__all__.append('Table') + +class ScrolledWindow(Gtk.ScrolledWindow): + def __init__(self, hadjustment=None, vadjustment=None, **kwds): + Gtk.ScrolledWindow.__init__(self, hadjustment=hadjustment, vadjustment=vadjustment, **kwds) + +ScrolledWindow = override(ScrolledWindow) +__all__.append('ScrolledWindow') + +class Paned(Gtk.Paned): + def pack1(self, child, resize=False, shrink=True): + super(Paned, self).pack1(child, resize, shrink) + + def pack2(self, child, resize=True, shrink=True): + super(Paned, self).pack2(child, resize, shrink) + +Paned = override(Paned) +__all__.append('Paned') + +_Gtk_main_quit = Gtk.main_quit +@override(Gtk.main_quit) +def main_quit(*args): + _Gtk_main_quit() initialized, argv = Gtk.init_check(sys.argv) sys.argv = list(argv) diff --git a/gi/overrides/Makefile.am b/gi/overrides/Makefile.am index b36c7a5..7a15b46 100644 --- a/gi/overrides/Makefile.am +++ b/gi/overrides/Makefile.am @@ -1,13 +1,17 @@ PLATFORM_VERSION = 2.0 -pkgpyexecdir = $(pyexecdir)/gtk-2.0/gi +pkgpyexecdir = $(pyexecdir)/gi pygioverridesdir = $(pkgpyexecdir)/overrides pygioverrides_PYTHON = \ GLib.py \ Gtk.py \ Gdk.py \ + Gio.py \ GIMarshallingTests.py \ + Pango.py \ keysyms.py \ __init__.py + +-include $(top_srcdir)/git.mk diff --git a/gi/overrides/Makefile.in b/gi/overrides/Makefile.in index d0a78be..7ba6f5e 100644 --- a/gi/overrides/Makefile.in +++ b/gi/overrides/Makefile.in @@ -141,6 +141,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -169,6 +170,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -184,6 +186,7 @@ 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@ @@ -220,7 +223,7 @@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ -pkgpyexecdir = $(pyexecdir)/gtk-2.0/gi +pkgpyexecdir = $(pyexecdir)/gi pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ @@ -242,7 +245,9 @@ pygioverrides_PYTHON = \ GLib.py \ Gtk.py \ Gdk.py \ + Gio.py \ GIMarshallingTests.py \ + Pango.py \ keysyms.py \ __init__.py @@ -474,6 +479,8 @@ uninstall-am: uninstall-pygioverridesPYTHON uninstall-pygioverridesPYTHON +-include $(top_srcdir)/git.mk + # 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/gi/overrides/Pango.py b/gi/overrides/Pango.py new file mode 100644 index 0000000..3269806 --- /dev/null +++ b/gi/overrides/Pango.py @@ -0,0 +1,51 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +# vim: tabstop=4 shiftwidth=4 expandtab +# +# Copyright (C) 2010 Paolo Borelli +# +# 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 + +from ..overrides import override +from ..importer import modules + +Pango = modules['Pango']._introspection_module + +__all__ = [] + +class FontDescription(Pango.FontDescription): + + def __new__(cls, string=None): + if string is not None: + return Pango.font_description_from_string (string) + else: + return Pango.FontDescription.__new__(cls) + +FontDescription = override(FontDescription) +__all__.append('FontDescription') + +class Layout(Pango.Layout): + + def __new__(cls, context): + return Pango.Layout.new(context) + + def __init__(self, context, **kwds): + # simply discard 'context', since it was set by + # __new__ and it is not a PangoLayout property + super(Layout, self).__init__(**kwds) + +Layout = override(Layout) +__all__.append('Layout') + diff --git a/gi/overrides/__init__.py b/gi/overrides/__init__.py index d4cd80b..a98974f 100644 --- a/gi/overrides/__init__.py +++ b/gi/overrides/__init__.py @@ -1,3 +1,6 @@ +import sys +import types + import gobject registry = None @@ -34,10 +37,30 @@ class _Registry(dict): def register(self, override_class): self[override_class] = override_class + +class overridefunc(object): + '''decorator for overriding a function''' + def __init__(self, func): + if not hasattr(func, '__info__'): + raise TypeError("func must be an gi function") + from ..importer import modules + self.module = modules[func.__module__]._introspection_module + + def __call__(self, func): + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + wrapper.__name__ = func.__name__ + setattr(self.module, func.__name__, wrapper) + return wrapper + registry = _Registry() def override(type_): '''Decorator for registering an override''' - registry.register(type_) - return type_ + if type(type_) == types.FunctionType: + return overridefunc(type_) + else: + registry.register(type_) + return type_ + diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c index b768e9e..8dd728d 100644 --- a/gi/pygi-argument.c +++ b/gi/pygi-argument.c @@ -188,6 +188,7 @@ _pygi_g_type_interface_check_object (GIBaseInfo *info, for (i = 0; i < g_enum_info_get_n_values (info); i++) { GIValueInfo *value_info = g_enum_info_get_value (info, i); glong enum_value = g_value_info_get_value (value_info); + g_base_info_unref (value_info); if (value == enum_value) { retval = 1; break; @@ -271,8 +272,18 @@ _pygi_g_type_info_check_object (GITypeInfo *type_info, case GI_TYPE_TAG_BOOLEAN: /* No check; every Python object has a truth value. */ break; - case GI_TYPE_TAG_INT8: case GI_TYPE_TAG_UINT8: + /* UINT8 types can be characters */ + if (PYGLIB_PyBytes_Check(object)) { + if (PYGLIB_PyBytes_Size(object) != 1) { + PyErr_Format (PyExc_TypeError, "Must be a single character"); + retval = 0; + break; + } + + break; + } + case GI_TYPE_TAG_INT8: case GI_TYPE_TAG_INT16: case GI_TYPE_TAG_UINT16: case GI_TYPE_TAG_INT32: @@ -368,9 +379,36 @@ check_number_release: } break; } + case GI_TYPE_TAG_UNICHAR: + { + Py_ssize_t size; + if (PyUnicode_Check (object)) { + size = PyUnicode_GET_SIZE (object); +#if PY_VERSION_HEX < 0x03000000 + } else if (PyString_Check (object)) { + PyObject *pyuni = PyUnicode_FromEncodedObject (object, "UTF-8", "strict"); + size = PyUnicode_GET_SIZE (pyuni); + Py_DECREF(pyuni); +#endif + } else { + PyErr_Format (PyExc_TypeError, "Must be string, not %s", + object->ob_type->tp_name); + retval = 0; + break; + } + + if (size != 1) { + PyErr_Format (PyExc_TypeError, "Must be a one character string, not %ld characters", + size); + retval = 0; + break; + } + + break; + } case GI_TYPE_TAG_UTF8: case GI_TYPE_TAG_FILENAME: - if (!PYGLIB_PyUnicode_Check (object)) { + if (!PYGLIB_PyBaseString_Check (object) ) { PyErr_Format (PyExc_TypeError, "Must be string, not %s", object->ob_type->tp_name); retval = 0; @@ -407,6 +445,10 @@ check_number_release: item_type_info = g_type_info_get_param_type (type_info, 0); g_assert (item_type_info != NULL); + /* FIXME: This is insain. We really should only check the first + * object and perhaps have a debugging mode. Large arrays + * will cause apps to slow to a crawl. + */ for (i = 0; i < length; i++) { PyObject *item; @@ -640,8 +682,13 @@ _pygi_argument_from_object (PyObject *object, arg.v_boolean = PyObject_IsTrue (object); break; } - case GI_TYPE_TAG_INT8: case GI_TYPE_TAG_UINT8: + if (PYGLIB_PyBytes_Check(object)) { + arg.v_long = (long)(PYGLIB_PyBytes_AsString(object)[0]); + break; + } + + case GI_TYPE_TAG_INT8: case GI_TYPE_TAG_INT16: case GI_TYPE_TAG_UINT16: case GI_TYPE_TAG_INT32: @@ -675,8 +722,7 @@ _pygi_argument_from_object (PyObject *object, value = PyInt_AS_LONG (number); } else #endif - if (PyLong_Check (number)) - value = PyLong_AsUnsignedLongLong (number); + value = PyLong_AsUnsignedLongLong (number); arg.v_uint64 = value; @@ -697,10 +743,9 @@ _pygi_argument_from_object (PyObject *object, #if PY_VERSION_HEX < 0x03000000 if (PyInt_Check (number)) { value = PyInt_AS_LONG (number); - } else -#endif - if (PyLong_Check (number)) - value = PyLong_AsLongLong (number); + } else +#endif + value = PyLong_AsLongLong (number); arg.v_int64 = value; @@ -742,6 +787,42 @@ _pygi_argument_from_object (PyObject *object, break; } + case GI_TYPE_TAG_UNICHAR: + { + gchar *string; + + if (object == Py_None) { + arg.v_uint32 = 0; + break; + } + +#if PY_VERSION_HEX < 0x03000000 + if (PyUnicode_Check(object)) { + PyObject *pystr_obj = PyUnicode_AsUTF8String (object); + + if (!pystr_obj) + break; + + string = g_strdup(PyString_AsString (pystr_obj)); + Py_DECREF(pystr_obj); + } else { + string = g_strdup(PyString_AsString (object)); + } +#else + { + PyObject *pybytes_obj = PyUnicode_AsUTF8String (object); + if (!pybytes_obj) + break; + + string = g_strdup(PyBytes_AsString (pybytes_obj)); + Py_DECREF (pybytes_obj); + } +#endif + + arg.v_uint32 = g_utf8_get_char (string); + + break; + } case GI_TYPE_TAG_UTF8: { gchar *string; @@ -751,7 +832,17 @@ _pygi_argument_from_object (PyObject *object, break; } #if PY_VERSION_HEX < 0x03000000 - string = g_strdup(PyString_AsString (object)); + if (PyUnicode_Check(object)) { + PyObject *pystr_obj = PyUnicode_AsUTF8String (object); + + if (!pystr_obj) + break; + + string = g_strdup(PyString_AsString (pystr_obj)); + Py_DECREF(pystr_obj); + } else { + string = g_strdup(PyString_AsString (object)); + } #else { PyObject *pybytes_obj = PyUnicode_AsUTF8String (object); @@ -830,6 +921,15 @@ _pygi_argument_from_object (PyObject *object, break; } + if (g_type_info_get_tag (item_type_info) == GI_TYPE_TAG_UINT8 && + PYGLIB_PyBytes_Check(object)) { + + memcpy(array->data, PYGLIB_PyBytes_AsString(object), length); + array->len = length; + goto array_success; + } + + item_transfer = transfer == GI_TRANSFER_CONTAINER ? GI_TRANSFER_NOTHING : transfer; for (i = 0; i < length; i++) { @@ -862,6 +962,7 @@ array_item_error: break; } +array_success: arg.v_pointer = array; g_base_info_unref ( (GIBaseInfo *) item_type_info); @@ -1241,6 +1342,27 @@ _pygi_argument_to_object (GIArgument *arg, object = pyg_type_wrapper_new ( (GType) arg->v_long); break; } + case GI_TYPE_TAG_UNICHAR: + { + /* Preserve the bidirectional mapping between 0 and "" */ + if (arg->v_uint32 == 0) { + object = PYGLIB_PyUnicode_FromString (""); + } else if (g_unichar_validate (arg->v_uint32)) { + gchar utf8[6]; + gint bytes; + + bytes = g_unichar_to_utf8 (arg->v_uint32, utf8); + object = PYGLIB_PyUnicode_FromStringAndSize ((char*)utf8, bytes); + } else { + /* TODO: Convert the error to an exception. */ + PyErr_Format (PyExc_TypeError, + "Invalid unicode codepoint %" G_GUINT32_FORMAT, + arg->v_uint32); + object = Py_None; + Py_INCREF (object); + } + break; + } case GI_TYPE_TAG_UTF8: if (arg->v_string == NULL) { object = Py_None; @@ -1282,23 +1404,36 @@ _pygi_argument_to_object (GIArgument *arg, GITransfer item_transfer; gsize i, item_size; - if (arg->v_pointer == NULL) { - object = PyList_New (0); - break; - } - array = arg->v_pointer; - object = PyList_New (array->len); - if (object == NULL) { - break; - } - item_type_info = g_type_info_get_param_type (type_info, 0); g_assert (item_type_info != NULL); item_type_tag = g_type_info_get_tag (item_type_info); item_transfer = transfer == GI_TRANSFER_CONTAINER ? GI_TRANSFER_NOTHING : transfer; + + if (item_type_tag == GI_TYPE_TAG_UINT8) { + /* Return as a byte array */ + if (arg->v_pointer == NULL) { + object = PYGLIB_PyBytes_FromString (""); + break; + } + + object = PYGLIB_PyBytes_FromStringAndSize(array->data, array->len); + break; + + } else { + if (arg->v_pointer == NULL) { + object = PyList_New (0); + break; + } + + object = PyList_New (array->len); + if (object == NULL) { + break; + } + + } item_size = g_array_get_element_size (array); for (i = 0; i < array->len; i++) { @@ -1375,6 +1510,8 @@ _pygi_argument_to_object (GIArgument *arg, type = g_registered_type_info_get_g_type ( (GIRegisteredTypeInfo *) info); if (g_type_is_a (type, G_TYPE_VALUE)) { object = pyg_value_as_pyobject (arg->v_pointer, FALSE); + } else if (g_struct_info_is_foreign (info)) { + object = pygi_struct_foreign_convert_from_g_argument (type_info, arg->v_pointer); } else if (g_type_is_a (type, G_TYPE_BOXED)) { PyObject *py_type; @@ -1398,8 +1535,6 @@ _pygi_argument_to_object (GIArgument *arg, } Py_XDECREF (py_type); - } else if ( (type == G_TYPE_NONE) && (g_struct_info_is_foreign (info))) { - object = pygi_struct_foreign_convert_from_g_argument (type_info, arg->v_pointer); } else if (type == G_TYPE_NONE) { PyObject *py_type; @@ -1611,6 +1746,7 @@ _pygi_argument_release (GIArgument *arg, case GI_TYPE_TAG_FLOAT: case GI_TYPE_TAG_DOUBLE: case GI_TYPE_TAG_GTYPE: + case GI_TYPE_TAG_UNICHAR: break; case GI_TYPE_TAG_FILENAME: case GI_TYPE_TAG_UTF8: diff --git a/gi/pygi-closure.c b/gi/pygi-closure.c index 1e2ce05..33a8d81 100644 --- a/gi/pygi-closure.c +++ b/gi/pygi-closure.c @@ -27,6 +27,53 @@ */ static GSList* async_free_list; +static void +_pygi_closure_assign_pyobj_to_out_argument (gpointer out_arg, PyObject *object, + GITypeInfo *type_info, + GITransfer transfer) +{ + GIArgument arg = _pygi_argument_from_object (object, type_info, transfer); + GITypeTag type_tag = g_type_info_get_tag (type_info); + + switch (type_tag) { + case GI_TYPE_TAG_BOOLEAN: + *((gboolean *) out_arg) = arg.v_boolean; + break; + case GI_TYPE_TAG_INT8: + *((gint8 *) out_arg) = arg.v_int8; + break; + case GI_TYPE_TAG_UINT8: + *((guint8 *) out_arg) = arg.v_uint8; + break; + case GI_TYPE_TAG_INT16: + *((gint16 *) out_arg) = arg.v_int16; + break; + case GI_TYPE_TAG_UINT16: + *((guint16 *) out_arg) = arg.v_uint16; + break; + case GI_TYPE_TAG_INT32: + *((gint32 *) out_arg) = arg.v_int32; + break; + case GI_TYPE_TAG_UINT32: + *((guint32 *) out_arg) = arg.v_uint32; + break; + case GI_TYPE_TAG_INT64: + *((gint64 *) out_arg) = arg.v_int64; + break; + case GI_TYPE_TAG_UINT64: + *((glong *) out_arg) = arg.v_uint64; + break; + case GI_TYPE_TAG_FLOAT: + *((gfloat *) out_arg) = arg.v_float; + break; + case GI_TYPE_TAG_DOUBLE: + *((gdouble *) out_arg) = arg.v_double; + break; + default: + *((GIArgument *) out_arg) = arg; + break; + } +} static GIArgument * _pygi_closure_convert_ffi_arguments (GICallableInfo *callable_info, void **args) @@ -198,6 +245,7 @@ _pygi_closure_convert_arguments (GICallableInfo *callable_info, void **args, if (_PyTuple_Resize (py_args, n_in_args) == -1) goto error; + g_free (g_args); return TRUE; error: @@ -225,15 +273,14 @@ _pygi_closure_set_out_arguments (GICallableInfo *callable_info, return_type_info = g_callable_info_get_return_type (callable_info); return_type_tag = g_type_info_get_tag (return_type_info); if (return_type_tag != GI_TYPE_TAG_VOID) { - GIArgument arg; GITransfer transfer = g_callable_info_get_caller_owns (callable_info); if (PyTuple_Check (py_retval)) { PyObject *item = PyTuple_GET_ITEM (py_retval, 0); - arg = _pygi_argument_from_object (item, return_type_info, transfer); - * ( (GIArgument*) resp) = arg; + _pygi_closure_assign_pyobj_to_out_argument (resp, item, + return_type_info, transfer); } else { - arg = _pygi_argument_from_object (py_retval, return_type_info, transfer); - * ( (GIArgument*) resp) = arg; + _pygi_closure_assign_pyobj_to_out_argument (resp, py_retval, + return_type_info, transfer); } i_py_retval++; } @@ -248,14 +295,14 @@ _pygi_closure_set_out_arguments (GICallableInfo *callable_info, if (direction == GI_DIRECTION_OUT || direction == GI_DIRECTION_INOUT) { GITransfer transfer = g_arg_info_get_ownership_transfer (arg_info); - GIArgument arg; if (PyTuple_Check (py_retval)) { PyObject *item = PyTuple_GET_ITEM (py_retval, i_py_retval); - arg = _pygi_argument_from_object (item, type_info, transfer); - * ( (GIArgument*) out_args[i_out_args].v_pointer) = arg; + _pygi_closure_assign_pyobj_to_out_argument ( + out_args[i_out_args].v_pointer, item, type_info, transfer); } else if (i_py_retval == 0) { - arg = _pygi_argument_from_object (py_retval, type_info, transfer); - * ( (GIArgument*) out_args[i_out_args].v_pointer) = arg; + _pygi_closure_assign_pyobj_to_out_argument ( + out_args[i_out_args].v_pointer, py_retval, type_info, + transfer); } else g_assert_not_reached(); @@ -309,6 +356,8 @@ _pygi_closure_handle (ffi_cif *cif, _pygi_closure_set_out_arguments (closure->info, retval, out_args, result); end: + if (out_args != NULL) + g_free (out_args); g_base_info_unref ( (GIBaseInfo*) return_type); PyGILState_Release (state); diff --git a/gi/pygi-foreign-cairo.c b/gi/pygi-foreign-cairo.c index 6326397..0264b71 100644 --- a/gi/pygi-foreign-cairo.c +++ b/gi/pygi-foreign-cairo.c @@ -56,9 +56,9 @@ cairo_context_to_arg (PyObject *value, } PyObject * -cairo_context_from_arg (GITypeInfo *type_info, GIArgument *arg) +cairo_context_from_arg (GITypeInfo *type_info, gpointer data) { - cairo_t *context = (cairo_t*) arg; + cairo_t *context = (cairo_t*) data; cairo_reference (context); @@ -95,9 +95,9 @@ cairo_surface_to_arg (PyObject *value, } PyObject * -cairo_surface_from_arg (GITypeInfo *type_info, GIArgument *arg) +cairo_surface_from_arg (GITypeInfo *type_info, gpointer data) { - cairo_surface_t *surface = (cairo_surface_t*) arg; + cairo_surface_t *surface = (cairo_surface_t*) data; cairo_surface_reference (surface); @@ -112,65 +112,12 @@ cairo_surface_release (GIBaseInfo *base_info, Py_RETURN_NONE; } -#ifdef PycairoRectangleInt_FromRectangleInt -PyObject * -cairo_rectangle_int_to_arg (PyObject *value, - GITypeInfo *type_info, - GITransfer transfer, - GIArgument *arg) -{ - cairo_rectangle_int_t *rect; - - rect = ( (PycairoRectangleInt *) value)->rectangle_int; - if (!rect) { - PyErr_SetString (PyExc_ValueError, "RectangleInt instance wrapping a NULL pointer"); - return NULL; - } - - if (transfer == GI_TRANSFER_EVERYTHING) { - unsigned int size = sizeof(cairo_rectangle_int_t); - cairo_rectangle_int_t *transfer = malloc(size); - if (!transfer) { - PyErr_NoMemory(); - return NULL; - } - - memcpy(transfer, rect, size); - rect = transfer; - } - - arg->v_pointer = rect; - Py_RETURN_NONE; -} - -PyObject * -cairo_rectangle_int_from_arg (GITypeInfo *type_info, GIArgument *arg) -{ - cairo_rectangle_int_t *rect = (cairo_rectangle_int_t*) arg; - - if (rect) - return PycairoRectangleInt_FromRectangleInt (rect); - else { - cairo_rectangle_int_t temp = {}; - return PycairoRectangleInt_FromRectangleInt (&temp); - } -} - -PyObject * -cairo_rectangle_int_release (GIBaseInfo *base_info, - gpointer struct_) -{ - g_free (struct_); - Py_RETURN_NONE; -} -#endif - static PyMethodDef _gi_cairo_functions[] = {}; PYGLIB_MODULE_START(_gi_cairo, "_gi_cairo") { Pycairo_IMPORT; if (Pycairo_CAPI == NULL) - return 0; + return PYGLIB_MODULE_ERROR_RETURN; pygi_register_foreign_struct ("cairo", "Context", @@ -183,14 +130,5 @@ PYGLIB_MODULE_START(_gi_cairo, "_gi_cairo") cairo_surface_to_arg, cairo_surface_from_arg, cairo_surface_release); - -#ifdef PycairoRectangleInt_FromRectangleInt - pygi_register_foreign_struct ("cairo", - "RectangleInt", - cairo_rectangle_int_to_arg, - cairo_rectangle_int_from_arg, - cairo_rectangle_int_release); -#endif - } PYGLIB_MODULE_END; diff --git a/gi/pygi-foreign-gvariant.c b/gi/pygi-foreign-gvariant.c index ac16395..3c8ae8d 100644 --- a/gi/pygi-foreign-gvariant.c +++ b/gi/pygi-foreign-gvariant.c @@ -42,9 +42,9 @@ g_variant_to_arg (PyObject *value, PyObject * g_variant_from_arg (GITypeInfo *type_info, - GIArgument *arg) + gpointer data) { - GVariant *variant = (GVariant *) arg; + GVariant *variant = (GVariant *) data; GITypeInfo *interface_info = g_type_info_get_interface (type_info); PyObject *type = _pygi_type_import_by_gi_info (interface_info); diff --git a/gi/pygi-foreign-gvariant.h b/gi/pygi-foreign-gvariant.h index 6de8c57..b0c9781 100644 --- a/gi/pygi-foreign-gvariant.h +++ b/gi/pygi-foreign-gvariant.h @@ -32,7 +32,7 @@ PyObject *g_variant_to_arg(PyObject *value, GIArgument *arg); PyObject *g_variant_from_arg(GITypeInfo *type_info, - GIArgument *arg); + gpointer data); PyObject *g_variant_release_foreign (GIBaseInfo *base_info, gpointer struct_); diff --git a/gi/pygi-foreign.c b/gi/pygi-foreign.c index 75d5bb9..5c9a88a 100644 --- a/gi/pygi-foreign.c +++ b/gi/pygi-foreign.c @@ -165,7 +165,7 @@ pygi_register_foreign_struct_real (const char* namespace_, PyGIArgOverrideFromGIArgumentFunc from_func, PyGIArgOverrideReleaseFunc release_func) { - PyGIForeignStruct *new_struct = g_slice_new0 (PyGIForeignStruct); + PyGIForeignStruct *new_struct = g_slice_new (PyGIForeignStruct); new_struct->namespace = namespace_; new_struct->name = name; new_struct->to_func = to_func; diff --git a/gi/pygi-info.c b/gi/pygi-info.c index 33f71c1..f5dd69f 100644 --- a/gi/pygi-info.c +++ b/gi/pygi-info.c @@ -234,7 +234,45 @@ out: /* CallableInfo */ PYGLIB_DEFINE_TYPE ("gi.CallableInfo", PyGICallableInfo_Type, PyGIBaseInfo); +static PyObject * +_wrap_g_callable_info_get_arguments (PyGIBaseInfo *self) +{ + gssize n_infos; + PyObject *infos; + gssize i; + + n_infos = g_callable_info_get_n_args ( (GICallableInfo *) self->info); + + infos = PyTuple_New (n_infos); + if (infos == NULL) { + return NULL; + } + + for (i = 0; i < n_infos; i++) { + GIBaseInfo *info; + PyObject *py_info; + + info = (GIBaseInfo *) g_callable_info_get_arg ( (GICallableInfo *) self->info, i); + g_assert (info != NULL); + + py_info = _pygi_info_new (info); + + g_base_info_unref (info); + + if (py_info == NULL) { + Py_CLEAR (infos); + break; + } + + PyTuple_SET_ITEM (infos, i, py_info); + } + + return infos; +} + static PyMethodDef _PyGICallableInfo_methods[] = { + { "invoke", (PyCFunction) _wrap_g_callable_info_invoke, METH_VARARGS | METH_KEYWORDS }, + { "get_arguments", (PyCFunction) _wrap_g_callable_info_get_arguments, METH_NOARGS }, { NULL, NULL, 0 } }; @@ -349,6 +387,9 @@ _pygi_g_type_tag_size (GITypeTag type_tag) case GI_TYPE_TAG_GTYPE: size = sizeof (GType); break; + case GI_TYPE_TAG_UNICHAR: + size = sizeof (gunichar); + break; case GI_TYPE_TAG_VOID: case GI_TYPE_TAG_UTF8: case GI_TYPE_TAG_FILENAME: @@ -388,6 +429,7 @@ _pygi_g_type_info_size (GITypeInfo *type_info) case GI_TYPE_TAG_FLOAT: case GI_TYPE_TAG_DOUBLE: case GI_TYPE_TAG_GTYPE: + case GI_TYPE_TAG_UNICHAR: if (g_type_info_is_pointer (type_info)) { size = sizeof (gpointer); } else { @@ -472,7 +514,6 @@ _pygi_g_type_info_size (GITypeInfo *type_info) static PyMethodDef _PyGIFunctionInfo_methods[] = { { "is_constructor", (PyCFunction) _wrap_g_function_info_is_constructor, METH_NOARGS }, { "is_method", (PyCFunction) _wrap_g_function_info_is_method, METH_NOARGS }, - { "invoke", (PyCFunction) _wrap_g_function_info_invoke, METH_VARARGS }, { NULL, NULL, 0 } }; @@ -767,6 +808,7 @@ pygi_g_struct_info_is_simple (GIStructInfo *struct_info) case GI_TYPE_TAG_UINT64: case GI_TYPE_TAG_FLOAT: case GI_TYPE_TAG_DOUBLE: + case GI_TYPE_TAG_UNICHAR: if (g_type_info_is_pointer (field_type_info)) { is_simple = FALSE; } @@ -1539,7 +1581,7 @@ _pygi_info_register_types (PyObject *m) _PyGI_REGISTER_TYPE (m, PyGIFieldInfo_Type, FieldInfo, PyGIBaseInfo_Type); _PyGI_REGISTER_TYPE (m, PyGIVFuncInfo_Type, VFuncInfo, - PyGIBaseInfo_Type); + PyGICallableInfo_Type); _PyGI_REGISTER_TYPE (m, PyGIUnionInfo_Type, UnionInfo, PyGIRegisteredTypeInfo_Type); _PyGI_REGISTER_TYPE (m, PyGIBoxedInfo_Type, BoxedInfo, diff --git a/gi/pygi-invoke.c b/gi/pygi-invoke.c index 71d5859..c93442a 100644 --- a/gi/pygi-invoke.c +++ b/gi/pygi-invoke.c @@ -21,6 +21,7 @@ * USA */ +#include #include "pygi-invoke.h" struct invocation_state @@ -58,19 +59,40 @@ struct invocation_state GIArgument *backup_args; GIArgument return_arg; - PyObject *return_value; + PyObject *return_value; + + GType implementor_gtype; }; -static void +static gboolean _initialize_invocation_state (struct invocation_state *state, GIFunctionInfo *info, - PyObject *py_args) + PyObject *py_args, + PyObject *kwargs) { - GIFunctionInfoFlags flags; + if (g_base_info_get_type (info) == GI_INFO_TYPE_FUNCTION) { + GIFunctionInfoFlags flags = g_function_info_get_flags (info); - flags = g_function_info_get_flags (info); - state->is_method = (flags & GI_FUNCTION_IS_METHOD) != 0; - state->is_constructor = (flags & GI_FUNCTION_IS_CONSTRUCTOR) != 0; + state->is_method = (flags & GI_FUNCTION_IS_METHOD) != 0; + state->is_constructor = (flags & GI_FUNCTION_IS_CONSTRUCTOR) != 0; + state->implementor_gtype = 0; + } else { + PyObject *obj; + + state->is_method = TRUE; + state->is_constructor = FALSE; + + obj = PyDict_GetItemString (kwargs, "gtype"); + if (obj == NULL) { + PyErr_SetString (PyExc_TypeError, + "need the GType of the implementor class"); + return FALSE; + } + + state->implementor_gtype = pyg_type_from_object (obj); + if (state->implementor_gtype == 0) + return FALSE; + } /* Count arguments. */ state->n_args = g_callable_info_get_n_args ( (GICallableInfo *) info); @@ -98,6 +120,8 @@ _initialize_invocation_state (struct invocation_state *state, state->out_args = NULL; state->out_values = NULL; state->backup_args = NULL; + + return TRUE; } static gboolean @@ -552,7 +576,7 @@ _prepare_invocation_state (struct invocation_state *state, static gboolean _invoke_function (struct invocation_state *state, - GIFunctionInfo *function_info, PyObject *py_args) + GICallableInfo *callable_info, PyObject *py_args) { GError *error; gint retval; @@ -560,20 +584,28 @@ _invoke_function (struct invocation_state *state, error = NULL; pyg_begin_allow_threads; - retval = g_function_info_invoke ( (GIFunctionInfo *) function_info, - state->in_args, - state->n_in_args, - state->out_args, - state->n_out_args, - &state->return_arg, - &error); + if (g_base_info_get_type (callable_info) == GI_INFO_TYPE_FUNCTION) { + retval = g_function_info_invoke ( (GIFunctionInfo *) callable_info, + state->in_args, + state->n_in_args, + state->out_args, + state->n_out_args, + &state->return_arg, + &error); + } else { + retval = g_vfunc_info_invoke ( (GIVFuncInfo *) callable_info, + state->implementor_gtype, + state->in_args, + state->n_in_args, + state->out_args, + state->n_out_args, + &state->return_arg, + &error); + } pyg_end_allow_threads; if (!retval) { - g_assert (error != NULL); - /* TODO: raise the right error, out of the error domain. */ - PyErr_SetString (PyExc_RuntimeError, error->message); - g_error_free (error); + pyglib_error_check(&error); /* TODO: release input arguments. */ @@ -585,11 +617,7 @@ _invoke_function (struct invocation_state *state, error = state->args[state->error_arg_pos]->v_pointer; - if (*error != NULL) { - /* TODO: raise the right error, out of the error domain, if applicable. */ - PyErr_SetString (PyExc_Exception, (*error)->message); - g_error_free (*error); - + if (pyglib_error_check(error)) { /* TODO: release input arguments. */ return FALSE; @@ -672,6 +700,10 @@ _process_invocation_state (struct invocation_state *state, /* The new wrapper increased the reference count, so decrease it. */ g_object_unref (state->return_arg.v_pointer); } + if (state->is_constructor && G_IS_INITIALLY_UNOWNED (state->return_arg.v_pointer)) { + /* GInitiallyUnowned constructors always end up with one extra reference, so decrease it. */ + g_object_unref (state->return_arg.v_pointer); + } break; default: /* Other types don't have neither methods nor constructors. */ @@ -772,13 +804,16 @@ _process_invocation_state (struct invocation_state *state, if (type_tag == GI_TYPE_TAG_INTERFACE) { GIBaseInfo *info; GIInfoType info_type; + GType type; info = g_type_info_get_interface (state->arg_type_infos[i]); g_assert (info != NULL); info_type = g_base_info_get_type (info); + type = g_registered_type_info_get_g_type ( (GIRegisteredTypeInfo *) info); if ( (info_type == GI_INFO_TYPE_STRUCT) && - !g_struct_info_is_foreign((GIStructInfo *) info) ) { + !g_struct_info_is_foreign((GIStructInfo *) info) && + !g_type_is_a (type, G_TYPE_BOXED)) { if (g_arg_info_is_caller_allocates (state->arg_infos[i])) { transfer = GI_TRANSFER_EVERYTHING; } else if (transfer == GI_TRANSFER_EVERYTHING) { @@ -846,9 +881,7 @@ _free_invocation_state (struct invocation_state *state) continue; } - if (state->args != NULL - && state->args[i] != NULL - && state->arg_infos[i] != NULL + if (state->arg_infos[i] != NULL && state->arg_type_infos[i] != NULL) { GIDirection direction; GITypeTag type_tag; @@ -857,20 +890,25 @@ _free_invocation_state (struct invocation_state *state) direction = g_arg_info_get_direction (state->arg_infos[i]); transfer = g_arg_info_get_ownership_transfer (state->arg_infos[i]); - type_tag = g_type_info_get_tag (state->arg_type_infos[i]); - /* Release the argument. */ if (direction == GI_DIRECTION_INOUT) { - _pygi_argument_release (&state->backup_args[backup_args_pos], state->arg_type_infos[i], - transfer, GI_DIRECTION_IN); + if (state->args != NULL) { + _pygi_argument_release (&state->backup_args[backup_args_pos], + state->arg_type_infos[i], + transfer, GI_DIRECTION_IN); + } backup_args_pos += 1; } - _pygi_argument_release (state->args[i], state->arg_type_infos[i], transfer, direction); + if (state->args != NULL && state->args[i] != NULL) { + _pygi_argument_release (state->args[i], state->arg_type_infos[i], + transfer, direction); - if (type_tag == GI_TYPE_TAG_ARRAY + type_tag = g_type_info_get_tag (state->arg_type_infos[i]); + if (type_tag == GI_TYPE_TAG_ARRAY && (direction != GI_DIRECTION_IN && transfer == GI_TRANSFER_NOTHING)) { - /* We created a #GArray and it has not been released above, so free it. */ - state->args[i]->v_pointer = g_array_free (state->args[i]->v_pointer, FALSE); + /* We created a #GArray and it has not been released above, so free it. */ + state->args[i]->v_pointer = g_array_free (state->args[i]->v_pointer, FALSE); + } } } @@ -913,11 +951,15 @@ _free_invocation_state (struct invocation_state *state) PyObject * -_wrap_g_function_info_invoke (PyGIBaseInfo *self, PyObject *py_args) +_wrap_g_callable_info_invoke (PyGIBaseInfo *self, PyObject *py_args, + PyObject *kwargs) { struct invocation_state state = { 0, }; - _initialize_invocation_state (&state, self->info, py_args); + if (!_initialize_invocation_state (&state, self->info, py_args, kwargs)) { + _free_invocation_state (&state); + return NULL; + } if (!_prepare_invocation_state (&state, self->info, py_args)) { _free_invocation_state (&state); diff --git a/gi/pygi-invoke.h b/gi/pygi-invoke.h index 0d07b21..dc1ce18 100644 --- a/gi/pygi-invoke.h +++ b/gi/pygi-invoke.h @@ -30,7 +30,8 @@ G_BEGIN_DECLS -PyObject *_wrap_g_function_info_invoke (PyGIBaseInfo *self, PyObject *py_args); +PyObject *_wrap_g_callable_info_invoke (PyGIBaseInfo *self, PyObject *py_args, + PyObject *kwargs); G_END_DECLS diff --git a/gi/pygi-property.c b/gi/pygi-property.c index 7b6a508..2f8970d 100644 --- a/gi/pygi-property.c +++ b/gi/pygi-property.c @@ -139,7 +139,7 @@ pygi_get_property_value_real (PyGObject *instance, arg.v_double = g_value_get_double (&value); break; case GI_TYPE_TAG_GTYPE: - arg.v_size = g_value_get_uint (&value); + arg.v_size = g_value_get_gtype (&value); break; case GI_TYPE_TAG_UTF8: case GI_TYPE_TAG_FILENAME: @@ -155,6 +155,8 @@ pygi_get_property_value_real (PyGObject *instance, type = g_registered_type_info_get_g_type (info); info_type = g_base_info_get_type (info); + g_base_info_unref (info); + switch (info_type) { case GI_INFO_TYPE_ENUM: arg.v_int32 = g_value_get_enum (&value); @@ -261,6 +263,8 @@ pygi_set_property_value_real (PyGObject *instance, type = g_registered_type_info_get_g_type (info); info_type = g_base_info_get_type (info); + g_base_info_unref (info); + switch (info_type) { case GI_INFO_TYPE_ENUM: g_value_set_enum (&value, arg.v_int32); @@ -310,7 +314,7 @@ pygi_set_property_value_real (PyGObject *instance, g_value_set_double (&value, arg.v_double); break; case GI_TYPE_TAG_GTYPE: - g_value_set_uint (&value, arg.v_size); + g_value_set_gtype (&value, arg.v_size); break; case GI_TYPE_TAG_UTF8: case GI_TYPE_TAG_FILENAME: diff --git a/gi/pygi.h b/gi/pygi.h index 03f71a4..2765b40 100644 --- a/gi/pygi.h +++ b/gi/pygi.h @@ -60,7 +60,7 @@ typedef PyObject * (*PyGIArgOverrideToGIArgumentFunc) (PyObject *value, GITransfer transfer, GIArgument *arg); typedef PyObject * (*PyGIArgOverrideFromGIArgumentFunc) (GITypeInfo *type_info, - GIArgument *arg); + gpointer data); typedef PyObject * (*PyGIArgOverrideReleaseFunc) (GITypeInfo *type_info, gpointer struct_); diff --git a/gi/repository/Makefile.am b/gi/repository/Makefile.am index c9138ce..ece9c4f 100644 --- a/gi/repository/Makefile.am +++ b/gi/repository/Makefile.am @@ -1,8 +1,10 @@ PLATFORM_VERSION = 2.0 -pkgpyexecdir = $(pyexecdir)/gtk-2.0/gi +pkgpyexecdir = $(pyexecdir)/gi pygirepositorydir = $(pkgpyexecdir)/repository pygirepository_PYTHON = \ __init__.py + +-include $(top_srcdir)/git.mk diff --git a/gi/repository/Makefile.in b/gi/repository/Makefile.in index 7f0ef44..cb6de2a 100644 --- a/gi/repository/Makefile.in +++ b/gi/repository/Makefile.in @@ -141,6 +141,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -169,6 +170,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -184,6 +186,7 @@ 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@ @@ -220,7 +223,7 @@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ -pkgpyexecdir = $(pyexecdir)/gtk-2.0/gi +pkgpyexecdir = $(pyexecdir)/gi pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ @@ -469,6 +472,8 @@ uninstall-am: uninstall-pygirepositoryPYTHON uninstall-pygirepositoryPYTHON +-include $(top_srcdir)/git.mk + # 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/gi/types.py b/gi/types.py index 18b4013..37cf499 100644 --- a/gi/types.py +++ b/gi/types.py @@ -29,10 +29,14 @@ from ._gi import \ InterfaceInfo, \ ObjectInfo, \ StructInfo, \ + VFuncInfo, \ set_object_has_new_constructor, \ register_interface_info, \ hook_up_vfunc_implementation +if sys.version_info > (3, 0): + def callable(obj): + return hasattr(obj, '__call__') def Function(info): @@ -45,6 +49,16 @@ def Function(info): return function +def NativeVFunc(info, cls): + + def native_vfunc(*args): + return info.invoke(*args, gtype=cls.__gtype__) + native_vfunc.__info__ = info + native_vfunc.__name__ = info.get_name() + native_vfunc.__module__ = info.get_namespace() + + return native_vfunc + def Constructor(info): def constructor(cls, *args): @@ -93,40 +107,106 @@ class MetaClassHelper(object): setattr(cls, name, value) def _setup_vfuncs(cls): - for base in cls.__bases__: - if not hasattr(base, '__info__') or \ - not hasattr(base.__info__, 'get_vfuncs'): + for vfunc_name, py_vfunc in cls.__dict__.items(): + if not vfunc_name.startswith("do_") or not callable(py_vfunc): continue - for vfunc_info in base.__info__.get_vfuncs(): - vfunc = getattr(cls, 'do_' + vfunc_info.get_name(), None) - if vfunc is None and isinstance(base.__info__, InterfaceInfo) and \ - (not hasattr(cls, vfunc_info.get_name()) and not vfunc_info.get_invoker()): - raise TypeError('Class implementing %s.%s should implement ' - 'the method do_%s()' % (base.__info__.get_namespace(), - base.__info__.get_name(), - vfunc_info.get_name())) - elif vfunc is not None: - function = vfunc - if sys.version_info < (3, 0): - function = vfunc.im_func - - if not is_function_in_classes(function, cls.__bases__): - hook_up_vfunc_implementation(vfunc_info, cls.__gtype__, - vfunc) - -def is_function_in_classes(function, classes): - for klass in classes: - if function in klass.__dict__.values(): - return True - elif is_function_in_classes(function, klass.__bases__): - return True - return False + + # If a method name starts with "do_" assume it is a vfunc, and search + # in the base classes for a method with the same name to override. + # Recursion is not necessary here because getattr() searches all + # super class attributes as well. + vfunc_info = None + for base in cls.__bases__: + method = getattr(base, vfunc_name, None) + if method is not None and hasattr(method, '__info__') and \ + isinstance(method.__info__, VFuncInfo): + vfunc_info = method.__info__ + break + + # If we did not find a matching method name in the bases, we might + # be overriding an interface virtual method. Since interfaces do not + # provide implementations, there will be no method attribute installed + # on the object. Instead we have to search through + # InterfaceInfo.get_vfuncs(). Note that the infos returned by + # get_vfuncs() use the C vfunc name (ie. there is no "do_" prefix). + if vfunc_info is None: + vfunc_info = find_vfunc_info_in_interface(cls.__bases__, vfunc_name[len("do_"):]) + + if vfunc_info is not None: + assert vfunc_name == ('do_' + vfunc_info.get_name()) + # Check to see if there are vfuncs with the same name in the bases. + # We have no way of specifying which one we are supposed to override. + ambiguous_base = find_vfunc_conflict_in_bases(vfunc_info, cls.__bases__) + if ambiguous_base is not None: + base_info = vfunc_info.get_container() + raise TypeError('Method %s() on class %s.%s is ambiguous ' + 'with methods in base classes %s.%s and %s.%s' % + (vfunc_name, + cls.__info__.get_namespace(), + cls.__info__.get_name(), + base_info.get_namespace(), + base_info.get_name(), + ambiguous_base.__info__.get_namespace(), + ambiguous_base.__info__.get_name())) + + hook_up_vfunc_implementation(vfunc_info, cls.__gtype__, + py_vfunc) + + def _setup_native_vfuncs(cls): + # Only InterfaceInfo and ObjectInfo have the get_vfuncs() method. + # We skip InterfaceInfo because interfaces have no implementations for vfuncs. + # Also check if __info__ in __dict__, not hasattr('__info__', ...) + # because we do not want to accidentally retrieve __info__ from a base class. + class_info = cls.__dict__.get('__info__') + if class_info is None or not isinstance(class_info, ObjectInfo): + return + + for vfunc_info in class_info.get_vfuncs(): + name = 'do_%s' % vfunc_info.get_name() + value = NativeVFunc(vfunc_info, cls) + setattr(cls, name, value) + +def find_vfunc_info_in_interface(bases, vfunc_name): + for base in bases: + # All wrapped interfaces inherit from GInterface. + # This can be seen in IntrospectionModule.__getattr__() in module.py. + # We do not need to search regular classes here, only wrapped interfaces. + # We also skip GInterface, because it is not wrapped and has no __info__ attr. + if base is gobject.GInterface or\ + not issubclass(base, gobject.GInterface) or\ + not isinstance(base.__info__, InterfaceInfo): + continue + + for vfunc in base.__info__.get_vfuncs(): + if vfunc.get_name() == vfunc_name: + return vfunc + + vfunc = find_vfunc_info_in_interface(base.__bases__, vfunc_name) + if vfunc is not None: + return vfunc + + return None + +def find_vfunc_conflict_in_bases(vfunc, bases): + for klass in bases: + if not hasattr(klass, '__info__') or \ + not hasattr(klass.__info__, 'get_vfuncs'): + continue + vfuncs = klass.__info__.get_vfuncs() + vfunc_name = vfunc.get_name() + for v in vfuncs: + if v.get_name() == vfunc_name and v != vfunc: + return klass + + aklass = find_vfunc_conflict_in_bases(vfunc, klass.__bases__) + if aklass is not None: + return aklass + return None class GObjectMeta(gobject.GObjectMeta, MetaClassHelper): def __init__(cls, name, bases, dict_): super(GObjectMeta, cls).__init__(name, bases, dict_) - is_gi_defined = False if cls.__module__ == 'gi.repository.' + cls.__info__.get_namespace(): is_gi_defined = True @@ -140,6 +220,7 @@ class GObjectMeta(gobject.GObjectMeta, MetaClassHelper): elif is_gi_defined: cls._setup_methods() cls._setup_constants() + cls._setup_native_vfuncs() if isinstance(cls.__info__, ObjectInfo): cls._setup_fields() @@ -148,6 +229,7 @@ class GObjectMeta(gobject.GObjectMeta, MetaClassHelper): elif isinstance(cls.__info__, InterfaceInfo): register_interface_info(cls.__info__.get_g_type()) + class StructMeta(type, MetaClassHelper): def __init__(cls, name, bases, dict_): @@ -162,8 +244,17 @@ class StructMeta(type, MetaClassHelper): cls._setup_methods() cls._setup_constructors() + for method_info in cls.__info__.get_methods(): + if method_info.is_constructor() and \ + method_info.get_name() == 'new' and \ + not method_info.get_arguments(): + cls.__new__ = staticmethod(Constructor(method_info)) + break + class Enum(int): - __info__ = None + # Only subclasses of this type should be instantiated. + # Each subclass requires an __info__ attribute, + # which is not declared here because enums do not share the same gi type. def __init__(self, value): int.__init__(value) diff --git a/gio/Makefile.am b/gio/Makefile.am index 6b3eb57..b412043 100644 --- a/gio/Makefile.am +++ b/gio/Makefile.am @@ -85,7 +85,7 @@ EXTRA_DIST += $(GIOUNIX_DEFS) unix.override unix.c: $(GIOUNIX_DEFS) unix.override unix_la_CFLAGS = $(GIOUNIX_CFLAGS) unix_la_LDFLAGS = $(common_ldflags) -export-symbols-regex initunix -unix_la_LIBADD = $(GIOUNIX_LIBS) +unix_la_LIBADD = $(GIOUNIX_LIBS) $(PYTHON_LIBS) unix_la_SOURCES = unixmodule.c nodist_unix_la_SOURCES = unix.c if BUILD_GIOUNIX diff --git a/gio/Makefile.in b/gio/Makefile.in index c29f881..2e84fda 100644 --- a/gio/Makefile.in +++ b/gio/Makefile.in @@ -92,7 +92,7 @@ _gio_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_gio_la_CFLAGS) \ $(CFLAGS) $(_gio_la_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_GIO_TRUE@am__gio_la_rpath = -rpath $(pkgpyexecdir) -unix_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +unix_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_unix_la_OBJECTS = unix_la-unixmodule.lo nodist_unix_la_OBJECTS = unix_la-unix.lo unix_la_OBJECTS = $(am_unix_la_OBJECTS) $(nodist_unix_la_OBJECTS) @@ -195,6 +195,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -223,6 +224,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -238,6 +240,7 @@ 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@ @@ -363,7 +366,7 @@ nodist__gio_la_SOURCES = gio.c GIOUNIX_DEFS = unix.defs unix-types.defs unix.override unix_la_CFLAGS = $(GIOUNIX_CFLAGS) unix_la_LDFLAGS = $(common_ldflags) -export-symbols-regex initunix -unix_la_LIBADD = $(GIOUNIX_LIBS) +unix_la_LIBADD = $(GIOUNIX_LIBS) $(PYTHON_LIBS) unix_la_SOURCES = unixmodule.c nodist_unix_la_SOURCES = unix.c all: all-am diff --git a/gio/gfile.override b/gio/gfile.override index b50130c..1301963 100644 --- a/gio/gfile.override +++ b/gio/gfile.override @@ -840,7 +840,7 @@ _wrap_g_file_set_attribute(PyGObject *self, PyObject *args, PyObject *kwargs) static char *kwlist[] = { "attribute", "type", "value_p", "flags", "cancellable", NULL }; GFileQueryInfoFlags flags = G_FILE_QUERY_INFO_NONE; - int ret; + int ret = 0; GCancellable *cancellable = NULL; GError *error = NULL; char *attribute; @@ -883,7 +883,7 @@ _wrap_g_file_set_attribute(PyGObject *self, PyObject *args, PyObject *kwargs) &error); } break; - + case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING: { char* s; @@ -902,7 +902,6 @@ _wrap_g_file_set_attribute(PyGObject *self, PyObject *args, PyObject *kwargs) &error); } break; - case G_FILE_ATTRIBUTE_TYPE_STRINGV: { diff --git a/glib/Makefile.am b/glib/Makefile.am index f1644a1..32d0ec9 100644 --- a/glib/Makefile.am +++ b/glib/Makefile.am @@ -6,7 +6,7 @@ pkginclude_HEADERS = pyglib.h lib_LTLIBRARIES = libpyglib-2.0-@PYTHON_BASENAME@.la -pkgpyexecdir = $(pyexecdir)/gtk-2.0 +pkgpyexecdir = $(pyexecdir) pyglibdir = $(pkgpyexecdir)/glib pyglib_PYTHON = \ @@ -20,7 +20,7 @@ common_ldflags += -no-undefined endif libpyglib_2_0_@PYTHON_BASENAME@_la_CFLAGS = $(GLIB_CFLAGS) -libpyglib_2_0_@PYTHON_BASENAME@_la_LIBADD = $(GLIB_LIBS) $(FFI_LIBS) +libpyglib_2_0_@PYTHON_BASENAME@_la_LIBADD = $(GLIB_LIBS) $(FFI_LIBS) $(PYTHON_LIBS) libpyglib_2_0_@PYTHON_BASENAME@_la_SOURCES = \ pyglib.c \ pyglib.h \ @@ -57,3 +57,5 @@ clean-local: rm -f $(pyglib_LTLIBRARIES:.la=.so) .la.so: $(LN_S) .libs/$@ $@ || true + +-include $(top_srcdir)/git.mk diff --git a/glib/Makefile.in b/glib/Makefile.in index 4ea3ba2..2b72aaf 100644 --- a/glib/Makefile.in +++ b/glib/Makefile.in @@ -90,7 +90,8 @@ _glib_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_glib_la_CFLAGS) \ $(CFLAGS) $(_glib_la_LDFLAGS) $(LDFLAGS) -o $@ libpyglib_2_0_@PYTHON_BASENAME@_la_DEPENDENCIES = \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) am_libpyglib_2_0_@PYTHON_BASENAME@_la_OBJECTS = \ libpyglib_2_0_@PYTHON_BASENAME@_la-pyglib.lo libpyglib_2_0_@PYTHON_BASENAME@_la_OBJECTS = \ @@ -196,6 +197,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -224,6 +226,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -239,6 +242,7 @@ 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@ @@ -275,7 +279,7 @@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ -pkgpyexecdir = $(pyexecdir)/gtk-2.0 +pkgpyexecdir = $(pyexecdir) pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ @@ -303,7 +307,7 @@ pyglib_PYTHON = \ pyglib_LTLIBRARIES = _glib.la common_ldflags = -module -avoid-version $(am__append_1) libpyglib_2_0_@PYTHON_BASENAME@_la_CFLAGS = $(GLIB_CFLAGS) -libpyglib_2_0_@PYTHON_BASENAME@_la_LIBADD = $(GLIB_LIBS) $(FFI_LIBS) +libpyglib_2_0_@PYTHON_BASENAME@_la_LIBADD = $(GLIB_LIBS) $(FFI_LIBS) $(PYTHON_LIBS) libpyglib_2_0_@PYTHON_BASENAME@_la_SOURCES = \ pyglib.c \ pyglib.h \ @@ -823,6 +827,8 @@ clean-local: .la.so: $(LN_S) .libs/$@ $@ || true +-include $(top_srcdir)/git.mk + # 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/glib/glibmodule.c b/glib/glibmodule.c index 29a4713..963e5ea 100644 --- a/glib/glibmodule.c +++ b/glib/glibmodule.c @@ -787,7 +787,10 @@ static struct _PyGLib_Functions pyglib_api = { FALSE, /* threads_enabled */ NULL, /* gerror_exception */ NULL, /* block_threads */ - NULL /* unblock_threads */ + NULL, /* unblock_threads */ + pyg_main_context_new, + pyg_option_context_new, + pyg_option_group_new, }; static void diff --git a/glib/pyglib-private.h b/glib/pyglib-private.h index 8b033e1..183184f 100644 --- a/glib/pyglib-private.h +++ b/glib/pyglib-private.h @@ -34,6 +34,9 @@ struct _PyGLib_Functions { PyObject *gerror_exception; PyGLibThreadBlockFunc block_threads; PyGLibThreadBlockFunc unblock_threads; + PyObject* (*main_context_new)(GMainContext *context); + PyObject* (*option_context_new)(GOptionContext *context); + PyObject* (*option_group_new)(GOptionGroup *group); }; gboolean _pyglib_handler_marshal(gpointer user_data); diff --git a/glib/pyglib-python-compat.h b/glib/pyglib-python-compat.h index 5d7516e..8c1dd51 100644 --- a/glib/pyglib-python-compat.h +++ b/glib/pyglib-python-compat.h @@ -112,7 +112,12 @@ static int _pyglib_init_##modname(PyObject *module) /* Compilation on Python 2.x */ #if PY_VERSION_HEX < 0x03000000 +#define PYGLIB_MODULE_ERROR_RETURN + #define RO READONLY + +#define PYGLIB_PyBaseString_Check(ob) (PyString_Check(ob) || PyUnicode_Check(ob)) + #define PYGLIB_PyUnicode_Check PyString_Check #define PYGLIB_PyUnicode_AsString PyString_AsString #define PYGLIB_PyUnicode_AsStringAndSize PyString_AsStringAndSize @@ -173,6 +178,7 @@ PyTypeObject symbol = { \ #else +#define PYGLIB_MODULE_ERROR_RETURN 0 #define PYGLIB_MODULE_START(symbol, modname) \ static struct PyModuleDef _##symbol##module = { \ @@ -206,6 +212,8 @@ PyTypeObject symbol = { \ return; \ PyDict_SetItemString(d, name, (PyObject *)&type); +#define PYGLIB_PyBaseString_Check PyUnicode_Check + #define PYGLIB_PyUnicode_Check PyUnicode_Check #define PYGLIB_PyUnicode_AsString _PyUnicode_AsString #define PYGLIB_PyUnicode_AsStringAndSize(obj, buf, size) \ diff --git a/glib/pyglib.c b/glib/pyglib.c index c85a628..1e024c2 100644 --- a/glib/pyglib.c +++ b/glib/pyglib.c @@ -35,15 +35,6 @@ static struct _PyGLib_Functions *_PyGLib_API; static int pyglib_thread_state_tls_key; static PyObject *exception_table = NULL; -static PyTypeObject *_PyGMainContext_Type; -#define PyGMainContext_Type (*_PyGMainContext_Type) - -static PyTypeObject *_PyGOptionGroup_Type; -#define PyGOptionGroup_Type (*_PyGOptionGroup_Type) - -static PyTypeObject *_PyGOptionContext_Type; -#define PyGOptionContext_Type (*_PyGOptionContext_Type) - void pyglib_init(void) { @@ -79,10 +70,6 @@ pyglib_init(void) Py_DECREF(glib); return; } - - _PyGMainContext_Type = (PyTypeObject*)PyObject_GetAttrString(glib, "MainContext"); - _PyGOptionGroup_Type = (PyTypeObject*)PyObject_GetAttrString(glib, "OptionGroup"); - _PyGOptionContext_Type = (PyTypeObject*)PyObject_GetAttrString(glib, "OptionContext"); } void @@ -107,7 +94,11 @@ pyglib_gil_state_ensure(void) if (!_PyGLib_API->threads_enabled) return PyGILState_LOCKED; +#ifdef DISABLE_THREADING + return PyGILState_LOCKED; +#else return PyGILState_Ensure(); +#endif } void @@ -118,7 +109,9 @@ pyglib_gil_state_release(PyGILState_STATE state) if (!_PyGLib_API->threads_enabled) return; +#ifndef DISABLE_THREADING PyGILState_Release(state); +#endif } /** @@ -184,13 +177,19 @@ _pyglib_notify_on_enabling_threads(PyGLibThreadsEnabledFunc callback) int pyglib_gil_state_ensure_py23 (void) { +#ifdef DISABLE_THREADING + return 0; +#else return PyGILState_Ensure(); +#endif } void pyglib_gil_state_release_py23 (int flag) { +#ifndef DISABLE_THREADING PyGILState_Release(flag); +#endif } /** @@ -359,7 +358,7 @@ pyglib_gerror_exception_check(GError **error) } g_set_error(error, g_quark_from_string(PYGLIB_PyUnicode_AsString(py_domain)), - PYGLIB_PyLong_AsLong(py_code), PYGLIB_PyUnicode_AsString(py_message)); + PYGLIB_PyLong_AsLong(py_code), "%s", PYGLIB_PyUnicode_AsString(py_message)); Py_DECREF(py_message); Py_DECREF(py_code); @@ -414,15 +413,7 @@ pyglib_register_exception_for_domain(gchar *name, PyObject * pyglib_main_context_new(GMainContext *context) { - PyGMainContext *self; - - self = (PyGMainContext *)PyObject_NEW(PyGMainContext, - &PyGMainContext_Type); - if (self == NULL) - return NULL; - - self->context = g_main_context_ref(context); - return (PyObject *)self; + return _PyGLib_API->main_context_new(context); } /** @@ -472,18 +463,7 @@ pyglib_option_group_transfer_group(PyObject *obj) PyObject * pyglib_option_group_new (GOptionGroup *group) { - PyGOptionGroup *self; - - self = (PyGOptionGroup *)PyObject_NEW(PyGOptionGroup, - &PyGOptionGroup_Type); - if (self == NULL) - return NULL; - - self->group = group; - self->other_owner = TRUE; - self->is_in_context = FALSE; - - return (PyObject *)self; + return _PyGLib_API->option_group_new(group); } /** @@ -495,17 +475,7 @@ pyglib_option_group_new (GOptionGroup *group) PyObject * pyglib_option_context_new (GOptionContext *context) { - PyGOptionContext *self; - - self = (PyGOptionContext *)PyObject_NEW(PyGOptionContext, - &PyGOptionContext_Type); - if (self == NULL) - return NULL; - - self->context = context; - self->main_group = NULL; - - return (PyObject *)self; + return _PyGLib_API->option_context_new(context); } /** diff --git a/glib/pygmaincontext.c b/glib/pygmaincontext.c index 43ca84e..cfb7ddd 100644 --- a/glib/pygmaincontext.c +++ b/glib/pygmaincontext.c @@ -33,6 +33,28 @@ PYGLIB_DEFINE_TYPE("glib.MainContext", PyGMainContext_Type, PyGMainContext) +/** + * pyg_main_context_new: + * @context: a GMainContext. + * + * Creates a wrapper for a GMainContext. + * + * Returns: the GMainContext wrapper. + */ +PyObject * +pyg_main_context_new(GMainContext *context) +{ + PyGMainContext *self; + + self = (PyGMainContext *)PyObject_NEW(PyGMainContext, &PyGMainContext_Type); + if (self == NULL) + return NULL; + + self->context = g_main_context_ref(context); + + return (PyObject *)self; +} + static int pyg_main_context_init(PyGMainContext *self) { diff --git a/glib/pygmaincontext.h b/glib/pygmaincontext.h index 038cb37..4ffa3c9 100644 --- a/glib/pygmaincontext.h +++ b/glib/pygmaincontext.h @@ -32,7 +32,7 @@ typedef struct { extern PyTypeObject PyGMainContext_Type; -PyObject * pyglib_main_context_new(GMainContext *context); +PyObject* pyg_main_context_new(GMainContext *context); void pyglib_maincontext_register_types(PyObject *d); diff --git a/glib/pygmainloop.c b/glib/pygmainloop.c index de74971..219b6a3 100644 --- a/glib/pygmainloop.c +++ b/glib/pygmainloop.c @@ -158,8 +158,9 @@ pyg_signal_watch_check(GSource *source) PySignalWatchSource *real_source = (PySignalWatchSource *)source; GPollFD *poll_fd = &real_source->fd; unsigned char dummy; + gssize ret; if (poll_fd->revents & G_IO_IN) - read(poll_fd->fd, &dummy, 1); + ret = read(poll_fd->fd, &dummy, 1); #endif state = pyglib_gil_state_ensure(); @@ -301,7 +302,7 @@ pyg_main_loop_richcompare(PyObject *self, PyObject *other, int op) static PyObject * _wrap_g_main_loop_get_context (PyGMainLoop *loop) { - return pyglib_main_context_new(g_main_loop_get_context(loop->loop)); + return pyg_main_context_new(g_main_loop_get_context(loop->loop)); } static PyObject * diff --git a/glib/pygoptioncontext.c b/glib/pygoptioncontext.c index 93d9b24..444625c 100644 --- a/glib/pygoptioncontext.c +++ b/glib/pygoptioncontext.c @@ -30,6 +30,27 @@ PYGLIB_DEFINE_TYPE("glib.OptionContext", PyGOptionContext_Type, PyGOptionContext) +/** + * pyg_option_context_new: + * @context: a GOptionContext + * + * Returns: A new GOptionContext wrapper. + */ +PyObject * +pyg_option_context_new (GOptionContext *context) +{ + PyGOptionContext *self; + + self = (PyGOptionContext *)PyObject_NEW(PyGOptionContext, &PyGOptionContext_Type); + if (self == NULL) + return NULL; + + self->context = context; + self->main_group = NULL; + + return (PyObject *)self; +} + static int pyg_option_context_init(PyGOptionContext *self, PyObject *args, diff --git a/glib/pygoptioncontext.h b/glib/pygoptioncontext.h index 85d0a47..efe5ffa 100644 --- a/glib/pygoptioncontext.h +++ b/glib/pygoptioncontext.h @@ -32,6 +32,8 @@ typedef struct { GOptionContext *context; } PyGOptionContext; +PyObject* pyg_option_context_new(GOptionContext *context); + void pyglib_option_context_register_types(PyObject *d); #endif /* __PYG_OPTIONCONTEXT_H__ */ diff --git a/glib/pygoptiongroup.c b/glib/pygoptiongroup.c index 9345869..2a69354 100644 --- a/glib/pygoptiongroup.c +++ b/glib/pygoptiongroup.c @@ -30,6 +30,32 @@ PYGLIB_DEFINE_TYPE("glib.OptionGroup", PyGOptionGroup_Type, PyGOptionGroup) +/** + * pyg_option_group_new: + * @group: a GOptionGroup + * + * The returned GOptionGroup can't be used to set any hooks, translation domains + * or add entries. It's only intend is, to use for GOptionContext.add_group(). + * + * Returns: the GOptionGroup wrapper. + */ +PyObject * +pyg_option_group_new (GOptionGroup *group) +{ + PyGOptionGroup *self; + + self = (PyGOptionGroup *)PyObject_NEW(PyGOptionGroup, + &PyGOptionGroup_Type); + if (self == NULL) + return NULL; + + self->group = group; + self->other_owner = TRUE; + self->is_in_context = FALSE; + + return (PyObject *)self; +} + static gboolean check_if_owned(PyGOptionGroup *self) { diff --git a/glib/pygoptiongroup.h b/glib/pygoptiongroup.h index cba6a79..872b9c6 100644 --- a/glib/pygoptiongroup.h +++ b/glib/pygoptiongroup.h @@ -33,6 +33,8 @@ typedef struct { GOptionGroup.destroy() */ } PyGOptionGroup; +PyObject* pyg_option_group_new(GOptionGroup *group); + void pyglib_option_group_register_types(PyObject *d); #endif /* __PYG_OPTIONGROUP_H__ */ diff --git a/glib/pygsource.c b/glib/pygsource.c index 3587c38..684711e 100644 --- a/glib/pygsource.c +++ b/glib/pygsource.c @@ -182,7 +182,7 @@ pyg_source_get_context(PyGSource *self) context = g_source_get_context(self->source); if (context) { - return pyglib_main_context_new(context); + return pyg_main_context_new(context); } else { Py_INCREF(Py_None); return Py_None; diff --git a/gobject/Makefile.am b/gobject/Makefile.am index f2efde1..7208329 100644 --- a/gobject/Makefile.am +++ b/gobject/Makefile.am @@ -4,7 +4,7 @@ PLATFORM_VERSION = 2.0 pkgincludedir = $(includedir)/pygtk-$(PLATFORM_VERSION) pkginclude_HEADERS = pygobject.h -pkgpyexecdir = $(pyexecdir)/gtk-2.0 +pkgpyexecdir = $(pyexecdir) # gobject python scripts pygobjectdir = $(pkgpyexecdir)/gobject @@ -71,3 +71,5 @@ clean-local: rm -f $(pygobject_LTLIBRARIES:.la=.so) .la.so: $(LN_S) .libs/$@ $@ || true + +-include $(top_srcdir)/git.mk diff --git a/gobject/Makefile.in b/gobject/Makefile.in index cc44b81..4f13264 100644 --- a/gobject/Makefile.in +++ b/gobject/Makefile.in @@ -194,6 +194,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -222,6 +223,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -237,6 +239,7 @@ 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@ @@ -273,7 +276,7 @@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ -pkgpyexecdir = $(pyexecdir)/gtk-2.0 +pkgpyexecdir = $(pyexecdir) pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ @@ -784,6 +787,8 @@ clean-local: .la.so: $(LN_S) .libs/$@ $@ || true +-include $(top_srcdir)/git.mk + # 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/gobject/__init__.py b/gobject/__init__.py index 31e6bb0..1858d18 100644 --- a/gobject/__init__.py +++ b/gobject/__init__.py @@ -106,9 +106,9 @@ class GObjectMeta(type): if '__gtype__' in namespace: return - if not ('__gproperties__' in namespace or - '__gsignals__' in namespace or - '__gtype_name__' in namespace): + # Do not register a new GType for the overrides, as this would sort of + # defeat the purpose of overrides... + if cls.__module__.startswith('gi.overrides.'): return type_register(cls, namespace.get('__gtype_name__')) diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c index a33ec24..acf94ce 100644 --- a/gobject/gobjectmodule.c +++ b/gobject/gobjectmodule.c @@ -1003,18 +1003,18 @@ get_type_name_for_class(PyTypeObject *class) } -static GStaticPrivate pygobject_contruction_wrapper = G_STATIC_PRIVATE_INIT; +static GStaticPrivate pygobject_construction_wrapper = G_STATIC_PRIVATE_INIT; static inline void pygobject_init_wrapper_set(PyObject *wrapper) { - g_static_private_set(&pygobject_contruction_wrapper, wrapper, NULL); + g_static_private_set(&pygobject_construction_wrapper, wrapper, NULL); } static inline PyObject * pygobject_init_wrapper_get(void) { - return (PyObject *) g_static_private_get(&pygobject_contruction_wrapper); + return (PyObject *) g_static_private_get(&pygobject_construction_wrapper); } static void @@ -1048,6 +1048,7 @@ pygobject__g_instance_init(GTypeInstance *instance, kwargs = PyDict_New(); if (Py_TYPE(wrapper)->tp_init(wrapper, args, kwargs)) PyErr_Print(); + Py_DECREF(wrapper); Py_DECREF(args); Py_DECREF(kwargs); pyglib_gil_state_release(state); @@ -1689,7 +1690,7 @@ pyg_object_new (PyGObject *self, PyObject *args, PyObject *kwargs) GType type; GObject *obj = NULL; GObjectClass *class; - int n_params = 0, i; + guint n_params = 0, i; GParameter *params = NULL; if (!PyArg_ParseTuple (args, "O:gobject.new", &pytype)) { @@ -1711,37 +1712,8 @@ pyg_object_new (PyGObject *self, PyObject *args, PyObject *kwargs) return NULL; } - if (kwargs) { - Py_ssize_t pos = 0; - PyObject *key; - PyObject *value; - - params = g_new0(GParameter, PyDict_Size(kwargs)); - while (PyDict_Next (kwargs, &pos, &key, &value)) { - GParamSpec *pspec; - const gchar *key_str = PYGLIB_PyUnicode_AsString (key); - - pspec = g_object_class_find_property (class, key_str); - if (!pspec) { - PyErr_Format(PyExc_TypeError, - "gobject `%s' doesn't support property `%s'", - g_type_name(type), key_str); - goto cleanup; - } - g_value_init(¶ms[n_params].value, - G_PARAM_SPEC_VALUE_TYPE(pspec)); - if (pyg_param_gvalue_from_pyobject(¶ms[n_params].value, - value, pspec) < 0) { - PyErr_Format(PyExc_TypeError, - "could not convert value for property `%s' from %s to %s", - key_str, Py_TYPE(value)->tp_name, - g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec))); - goto cleanup; - } - params[n_params].name = g_strdup(key_str); - n_params++; - } - } + if (!pygobject_prepare_construct_properties (class, kwargs, &n_params, ¶ms)) + goto cleanup; obj = g_object_newv(type, n_params, params); if (!obj) diff --git a/gobject/propertyhelper.py b/gobject/propertyhelper.py index 2f77a4d..745a13c 100644 --- a/gobject/propertyhelper.py +++ b/gobject/propertyhelper.py @@ -176,30 +176,30 @@ class property(object): self._exc = None raise exc - def _type_from_python(self, type): - if type == _long: + def _type_from_python(self, type_): + if type_ == _long: return TYPE_LONG - elif type == int: + elif type_ == int: return TYPE_INT - elif type == bool: + elif type_ == bool: return TYPE_BOOLEAN - elif type == float: + elif type_ == float: return TYPE_DOUBLE - elif type == str: + elif type_ == str: return TYPE_STRING - elif type == object: + elif type_ == object: return TYPE_PYOBJECT - elif type == _gobject.GObject: - return TYPE_OBJECT - elif type in [TYPE_NONE, TYPE_INTERFACE, TYPE_CHAR, TYPE_UCHAR, + elif isinstance(type_, type) and issubclass(type_, _gobject.GObject): + return type_.__gtype__ + elif type_ in [TYPE_NONE, TYPE_INTERFACE, TYPE_CHAR, TYPE_UCHAR, TYPE_INT, TYPE_UINT, TYPE_BOOLEAN, TYPE_LONG, TYPE_ULONG, TYPE_INT64, TYPE_UINT64, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_DOUBLE, TYPE_POINTER, TYPE_BOXED, TYPE_PARAM, TYPE_OBJECT, TYPE_STRING, TYPE_PYOBJECT]: - return type + return type_ else: - raise TypeError("Unsupported type: %r" % (type,)) + raise TypeError("Unsupported type: %r" % (type_,)) def _get_default(self, default): ptype = self.type @@ -296,7 +296,7 @@ class property(object): args = (self.default,) elif ptype == TYPE_PYOBJECT: args = () - elif ptype == TYPE_OBJECT: + elif ptype.is_a(TYPE_OBJECT): args = () else: raise NotImplementedError(ptype) diff --git a/gobject/pygobject-private.h b/gobject/pygobject-private.h index ae4cfe1..99c1894 100644 --- a/gobject/pygobject-private.h +++ b/gobject/pygobject-private.h @@ -32,12 +32,18 @@ extern struct _PyGObject_Functions pygobject_api_functions; #define pyg_threads_enabled (pygobject_api_functions.threads_enabled) +#ifdef DISABLE_THREADING +#define pyg_gil_state_ensure() 0 +#define pyg_gil_state_release(state) G_STMT_START { \ + } G_STMT_END +#else #define pyg_gil_state_ensure() (pygobject_api_functions.threads_enabled? (PyGILState_Ensure()) : 0) #define pyg_gil_state_release(state) G_STMT_START { \ if (pygobject_api_functions.threads_enabled) \ PyGILState_Release(state); \ } G_STMT_END +#endif #define pyg_begin_allow_threads \ G_STMT_START { \ @@ -226,5 +232,10 @@ pyg_object_peek_inst_data(GObject *obj) g_object_get_qdata(obj, pygobject_instance_data_key)); } +gboolean pygobject_prepare_construct_properties (GObjectClass *class, + PyObject *kwargs, + guint *n_params, + GParameter **params); + #endif diff --git a/gobject/pygobject.c b/gobject/pygobject.c index eee3963..a7b4505 100644 --- a/gobject/pygobject.c +++ b/gobject/pygobject.c @@ -50,6 +50,7 @@ GQuark pygobject_class_init_key; GQuark pygobject_wrapper_key; GQuark pygobject_has_updated_constructor_key; GQuark pygobject_instance_data_key; +GQuark pygobject_ref_sunk_key; /* -------------- class <-> wrapper manipulation --------------- */ @@ -135,6 +136,12 @@ PyTypeObject *PyGObject_MetaType = NULL; void pygobject_sink(GObject *obj) { + gboolean sunk = FALSE; + + /* We use a gobject data key to avoid running the sink funcs more than once. */ + if (g_object_get_qdata (obj, pygobject_ref_sunk_key)) + return; + if (sink_funcs) { gint i; @@ -142,18 +149,17 @@ pygobject_sink(GObject *obj) if (g_type_is_a(G_OBJECT_TYPE(obj), g_array_index(sink_funcs, SinkFunc, i).type)) { g_array_index(sink_funcs, SinkFunc, i).sinkfunc(obj); - return; + + sunk = TRUE; + break; } } } - if (G_IS_INITIALLY_UNOWNED(obj) && !g_object_is_floating(obj)) { - /* GtkWindow and GtkInvisible does not return a ref to caller of - * g_object_new. - */ - g_object_ref(obj); - } else if (g_object_is_floating(obj)) { + + if (!sunk && G_IS_INITIALLY_UNOWNED (obj)) g_object_ref_sink(obj); - } + + g_object_set_qdata (obj, pygobject_ref_sunk_key, GINT_TO_POINTER (1)); } /** @@ -1137,6 +1143,45 @@ pygobject_free(PyObject *op) PyObject_GC_Del(op); } +gboolean +pygobject_prepare_construct_properties(GObjectClass *class, PyObject *kwargs, + guint *n_params, GParameter **params) +{ + *n_params = 0; + *params = NULL; + + if (kwargs) { + Py_ssize_t pos = 0; + PyObject *key; + PyObject *value; + + *params = g_new0(GParameter, PyDict_Size(kwargs)); + while (PyDict_Next(kwargs, &pos, &key, &value)) { + GParamSpec *pspec; + GParameter *param = &(*params)[*n_params]; + const gchar *key_str = PYGLIB_PyUnicode_AsString(key); + + pspec = g_object_class_find_property(class, key_str); + if (!pspec) { + PyErr_Format(PyExc_TypeError, + "gobject `%s' doesn't support property `%s'", + G_OBJECT_CLASS_NAME(class), key_str); + return FALSE; + } + g_value_init(¶m->value, G_PARAM_SPEC_VALUE_TYPE(pspec)); + if (pyg_param_gvalue_from_pyobject(¶m->value, value, pspec) < 0) { + PyErr_Format(PyExc_TypeError, + "could not convert value for property `%s' from %s to %s", + key_str, Py_TYPE(value)->tp_name, + g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec))); + return FALSE; + } + param->name = g_strdup(key_str); + ++(*n_params); + } + } + return TRUE; +} /* ---------------- PyGObject methods ----------------- */ @@ -1167,35 +1212,9 @@ pygobject_init(PyGObject *self, PyObject *args, PyObject *kwargs) return -1; } - if (kwargs) { - Py_ssize_t pos = 0; - PyObject *key; - PyObject *value; - - params = g_new0(GParameter, PyDict_Size(kwargs)); - while (PyDict_Next (kwargs, &pos, &key, &value)) { - GParamSpec *pspec; - gchar *key_str = PYGLIB_PyUnicode_AsString(key); - - pspec = g_object_class_find_property (class, key_str); - if (!pspec) { - PyErr_Format(PyExc_TypeError, - "object of type `%s' doesn't support property `%s'", - g_type_name(object_type), key_str); - goto cleanup; - } - g_value_init(¶ms[n_params].value, - G_PARAM_SPEC_VALUE_TYPE(pspec)); - if (pyg_value_from_pyobject(¶ms[n_params].value, value)) { - PyErr_Format(PyExc_TypeError, - "could not convert value for property `%s'", - key_str); - goto cleanup; - } - params[n_params].name = g_strdup(key_str); - n_params++; - } - } + if (!pygobject_prepare_construct_properties (class, kwargs, &n_params, ¶ms)) + goto cleanup; + if (pygobject_constructv(self, n_params, params)) PyErr_SetString(PyExc_RuntimeError, "could not create object"); @@ -2286,6 +2305,7 @@ pygobject_object_register_types(PyObject *d) pygobject_has_updated_constructor_key = g_quark_from_static_string("PyGObject::has-updated-constructor"); pygobject_instance_data_key = g_quark_from_static_string("PyGObject::instance-data"); + pygobject_ref_sunk_key = g_quark_from_static_string("PyGObject::ref-sunk"); /* GObject */ if (!PY_TYPE_OBJECT) diff --git a/gobject/pygtype.c b/gobject/pygtype.c index a2ba55a..827ba7f 100644 --- a/gobject/pygtype.c +++ b/gobject/pygtype.c @@ -765,13 +765,20 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) } break; case G_TYPE_CHAR: - if ((tmp = PyObject_Str(obj))) - g_value_set_char(value, PYGLIB_PyUnicode_AsString(tmp)[0]); - else { +#if PY_VERSION_HEX < 0x03000000 + if (PyString_Check(obj)) { + g_value_set_char(value, PyString_AsString(obj)[0]); + } else +#endif + if (PyUnicode_Check(obj)) { + tmp = PyUnicode_AsUTF8String(obj); + g_value_set_char(value, PYGLIB_PyBytes_AsString(tmp)[0]); + Py_DECREF(tmp); + } else { PyErr_Clear(); return -1; } - Py_DECREF(tmp); + break; case G_TYPE_UCHAR: if (PYGLIB_PyLong_Check(obj)) { @@ -781,8 +788,13 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) g_value_set_uchar(value, (guchar)PYGLIB_PyLong_AsLong (obj)); else return -1; - } else if ((tmp = PyObject_Str(obj))) { - g_value_set_uchar(value, PYGLIB_PyUnicode_AsString(tmp)[0]); +#if PY_VERSION_HEX < 0x03000000 + } else if (PyString_Check(obj)) { + g_value_set_uchar(value, PyString_AsString(obj)[0]); +#endif + } else if (PyUnicode_Check(obj)) { + tmp = PyUnicode_AsUTF8String(obj); + g_value_set_uchar(value, PYGLIB_PyBytes_AsString(tmp)[0]); Py_DECREF(tmp); } else { PyErr_Clear(); @@ -877,10 +889,15 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) g_value_set_double(value, PyFloat_AsDouble(obj)); break; case G_TYPE_STRING: - if (obj == Py_None) + if (obj == Py_None) { g_value_set_string(value, NULL); - else if ((tmp = PyObject_Str(obj))) { - g_value_set_string(value, PYGLIB_PyUnicode_AsString(tmp)); +#if PY_VERSION_HEX < 0x03000000 + } else if (PyString_Check(obj)) { + g_value_set_string(value, PyString_AsString(obj)); +#endif + } else if (PyUnicode_Check(obj)) { + tmp = PyUnicode_AsUTF8String(obj); + g_value_set_string(value, PYGLIB_PyBytes_AsString(tmp)); Py_DECREF(tmp); } else { PyErr_Clear(); diff --git a/ltmain.sh b/ltmain.sh index d8efb57..aa5624c 100755 --- a/ltmain.sh +++ b/ltmain.sh @@ -1,6 +1,5 @@ -# Generated from ltmain.m4sh. -# libtool (GNU libtool) 2.2.10 +# libtool (GNU libtool) 2.4 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, @@ -70,17 +69,19 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.10 +# $progname: (GNU libtool) 2.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.2.10 +VERSION=2.4 TIMESTAMP="" -package_revision=1.3175 +package_revision=1.3293 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then @@ -163,6 +164,27 @@ 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: @@ -177,17 +199,31 @@ basename="s,^.*/,," # 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"` -} + # 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 -# Generated shell functions inserted here. # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' @@ -370,6 +406,15 @@ 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. @@ -398,7 +443,7 @@ opt_warning=: # name if it has been set yet. func_echo () { - $ECHO "$progname${mode+: }$mode: $*" + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... @@ -424,14 +469,14 @@ func_echo_all () # Echo program name prefixed message to standard error. func_error () { - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 + $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${mode+: }$mode: warning: "${1+"$@"} 1>&2 + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : @@ -650,11 +695,30 @@ func_show_eval_locale () 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 /\./!{ @@ -676,6 +740,8 @@ func_version () # Echo short help message to standard output and exit. func_usage () { + $opt_debug + $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// @@ -692,7 +758,10 @@ func_usage () # unless 'noexit' is passed as argument. func_help () { + $opt_debug + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print s/^# // s/^# *$// s*\$progname*'$progname'* @@ -705,7 +774,11 @@ func_help () s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p - }' < "$progpath" + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" ret=$? if test -z "$1"; then exit $ret @@ -717,12 +790,39 @@ func_help () # exit_cmd. func_missing_arg () { + $opt_debug + func_error "missing argument for $1." exit_cmd=exit } -exit_cmd=: +# 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=: @@ -732,25 +832,64 @@ magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. -# $mode is unset nonopt= -execute_dlfiles= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 -opt_dry_run=false -opt_duplicate_deps=false -opt_silent=false -opt_debug=: - # 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. @@ -840,129 +979,204 @@ func_enable_tag () esac } -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. +# 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 - # 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 + 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 - # Parse non-mode specific arguments: - while test "$#" -gt 0; do + + +# 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 - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" + --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" - opt_debug='set -x' $opt_debug ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift + --dry-run|--dryrun|-n) + opt_dry_run=: ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 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 - - mode="$1" + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" shift ;; - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - opt_verbose=false + opt_preserve_dup_deps=: ;; - - --no-quiet|--no-silent) - preserve_args="$preserve_args $opt" - opt_silent=false + --features) + opt_features=: +func_features ;; - - --verbose| -v) preserve_args="$preserve_args $opt" + --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 - opt_verbose=: +func_append preserve_args " $opt" ;; - - --no-verbose) preserve_args="$preserve_args $opt" + --no-verbose) opt_verbose=false +func_append preserve_args " $opt" ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here + --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: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --help-all) opt_help=': help-all' ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break + # 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*) @@ -970,82 +1184,44 @@ func_enable_tag () opt_duplicate_compiler_generated_deps=: ;; *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} + $opt_help || { + # Sanity checks first: + func_check_version_match -# 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 + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" fi - exit $EXIT_MISMATCH - 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 -## ----------- ## -## Main. ## -## ----------- ## - -$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 - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$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=$mode' for more information." -} +## ----------- ## +## Main. ## +## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. @@ -1110,12 +1286,9 @@ func_ltwrapper_executable_p () # temporary ltwrapper_script. func_ltwrapper_scriptname () { - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi + 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 @@ -1161,6 +1334,37 @@ func_source () } +# 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. @@ -1173,8 +1377,7 @@ func_infer_tag () if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" + func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` @@ -1193,8 +1396,7 @@ func_infer_tag () CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" + func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` @@ -1226,42 +1428,522 @@ func_infer_tag () -# 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 () +# 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 () { - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi + $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 - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - $opt_dry_run || { - cat >${write_libobj}T < "$lockfile" fi $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" + func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi + 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 @@ -1515,7 +2194,7 @@ compiler." if test -z "$output_obj"; then # Place PIC objects in $objdir - command="$command -o $lobj" + func_append command " -o $lobj" fi func_show_eval_locale "$command" \ @@ -1562,11 +2241,11 @@ compiler." command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then - command="$command -o $obj" + func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" + func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' @@ -1611,13 +2290,13 @@ compiler." } $opt_help || { - test "$mode" = compile && func_mode_compile ${1+"$@"} + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. - case $mode in + case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. @@ -1793,7 +2472,7 @@ Otherwise, only FILE itself is deleted using RM." ;; *) - func_fatal_help "invalid operation mode \`$mode'" + func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac @@ -1808,13 +2487,13 @@ if $opt_help; then else { func_help noexit - for mode in compile link execute install finish uninstall clean; do + 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 mode in compile link execute install finish uninstall clean; do + for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done @@ -1843,13 +2522,16 @@ func_mode_execute () func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do + 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" @@ -1871,7 +2553,7 @@ func_mode_execute () dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" + func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" @@ -1928,8 +2610,7 @@ func_mode_execute () ;; esac # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" + func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then @@ -1961,22 +2642,59 @@ func_mode_execute () fi } -test "$mode" = execute && func_mode_execute ${1+"$@"} +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug - libdirs="$nonopt" + libs= + libdirs= admincmds= - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done + 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. @@ -1986,7 +2704,7 @@ func_mode_finish () if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done @@ -1995,53 +2713,55 @@ func_mode_finish () # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS - 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\" + 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 " - 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 "----------------------------------------------------------------------" + 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 "$mode" = finish && func_mode_finish ${1+"$@"} +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... @@ -2066,7 +2786,7 @@ func_mode_install () # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" + func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; @@ -2086,7 +2806,7 @@ func_mode_install () do arg2= if test -n "$dest"; then - files="$files $dest" + func_append files " $dest" dest=$arg continue fi @@ -2124,11 +2844,11 @@ func_mode_install () # Aesthetically quote the argument. func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" + func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi - install_shared_prog="$install_shared_prog $func_quote_for_eval_result" + func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ @@ -2140,7 +2860,7 @@ func_mode_install () if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" - install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" + func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi @@ -2198,10 +2918,13 @@ func_mode_install () case $file in *.$libext) # Do the static libraries later. - staticlibs="$staticlibs $file" + 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" @@ -2215,19 +2938,19 @@ func_mode_install () if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; + *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; + *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" - dir="$dir$objdir" + func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. @@ -2304,7 +3027,7 @@ func_mode_install () func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) @@ -2501,7 +3224,7 @@ func_mode_install () fi } -test "$mode" = install && func_mode_install ${1+"$@"} +test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p @@ -2548,6 +3271,18 @@ extern \"C\" { #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. */\ " @@ -2559,8 +3294,9 @@ extern \"C\" { # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + 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 @@ -2609,10 +3345,52 @@ extern \"C\" { func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } + 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 || { @@ -2650,26 +3428,9 @@ typedef struct { const char *name; void *address; } lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - echo >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - echo >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist +extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist +LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," @@ -2725,7 +3486,7 @@ static const void *lt_preloaded_setup() { for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; + *) func_append symtab_cflags " $arg" ;; esac done @@ -2788,7 +3549,8 @@ func_win32_libid () # 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 - win32_nmres=`eval $NM -f posix -A $1 | + 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 /{ @@ -2817,6 +3579,131 @@ func_win32_libid () $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 @@ -3195,6 +4082,18 @@ func_exec_program () 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 "\ @@ -3209,14 +4108,6 @@ func_exec_program () " fi - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. @@ -3234,166 +4125,6 @@ fi\ } -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_result=`cygpath -w "$1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result= - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# 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. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # 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_pathlist_tmp1=$func_stripname_result - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - func_to_host_pathlist_result=` - ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_append func_to_host_pathlist_result ";$func_to_host_path_result" - fi - fi - fi - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result"; then - func_error "Could not determine the host path(s) corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_append func_to_host_pathlist_result ";" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because @@ -3563,14 +4294,14 @@ void lt_dump_script (FILE *f); EOF cat </dev/null` + if test "$want_nocaseglob" = yes; then + shopt -s nocaseglob + potential_libs=`ls $i/$libnameglob[.-]* 2>/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 | @@ -6999,7 +7812,7 @@ EOF if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi @@ -7024,7 +7837,7 @@ EOF ;; *) # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. @@ -7040,7 +7853,7 @@ EOF if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" ;; esac @@ -7053,7 +7866,7 @@ EOF 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 - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi @@ -7078,7 +7891,7 @@ EOF ;; *) # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. @@ -7182,7 +7995,7 @@ EOF *) case " $deplibs " in *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; + func_append new_libs " -L$path/$objdir" ;; esac ;; esac @@ -7192,10 +8005,10 @@ EOF -L*) case " $new_libs " in *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" @@ -7212,10 +8025,12 @@ EOF hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$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 @@ -7224,18 +8039,18 @@ EOF *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" + func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; + *) func_apped perm_rpath " $libdir" ;; esac fi done @@ -7253,7 +8068,7 @@ EOF # We should set the runpath_var. rpath= for dir in $perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi @@ -7261,7 +8076,7 @@ EOF fi shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi @@ -7287,7 +8102,7 @@ EOF linknames= for link do - linknames="$linknames $link" + func_append linknames " $link" done # Use standard objects if they are pic @@ -7298,7 +8113,7 @@ EOF 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" - delfiles="$delfiles $export_symbols" + func_append delfiles " $export_symbols" fi orig_export_symbols= @@ -7329,13 +8144,45 @@ EOF $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do + for cmd1 in $cmds; do IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + # 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. @@ -7369,7 +8216,7 @@ EOF # 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 - delfiles="$delfiles $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 @@ -7379,7 +8226,7 @@ EOF case " $convenience " in *" $test_deplib "*) ;; *) - tmp_deplibs="$tmp_deplibs $test_deplib" + func_append tmp_deplibs " $test_deplib" ;; esac done @@ -7399,21 +8246,21 @@ EOF test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" + 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\" - linker_flags="$linker_flags $flag" + func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then + if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi @@ -7475,10 +8322,13 @@ EOF echo 'INPUT (' > $output for obj in $save_libobjs do - $ECHO "$obj" >> $output + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output - delfiles="$delfiles $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" @@ -7492,10 +8342,12 @@ EOF fi for obj do - $ECHO "$obj" >> $output + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" + 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..." @@ -7546,7 +8398,7 @@ EOF if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi - delfiles="$delfiles $output" + func_append delfiles " $output" else output= @@ -7580,7 +8432,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$mode" = relink; then + if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -7613,7 +8465,7 @@ EOF # 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 - delfiles="$delfiles $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 @@ -7654,10 +8506,10 @@ EOF # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" + func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi @@ -7673,7 +8525,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$mode" = relink; then + if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -7685,7 +8537,7 @@ EOF IFS="$save_ifs" # Restore the uninstalled library and exit - if test "$mode" = relink; then + 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 @@ -7769,13 +8621,16 @@ EOF reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" - generated="$generated $gentop" + 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 @@ -7849,8 +8704,8 @@ EOF if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" ;; esac fi @@ -7870,7 +8725,7 @@ EOF *) case " $compile_deplibs " in *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; + func_append new_libs " -L$path/$objdir" ;; esac ;; esac @@ -7880,17 +8735,17 @@ EOF -L*) case " $new_libs " in *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" + 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. @@ -7898,7 +8753,7 @@ EOF # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; + *) func_append finalize_rpath " $libdir" ;; esac done fi @@ -7917,18 +8772,18 @@ EOF *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" + func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; + *) func_append perm_rpath " $libdir" ;; esac fi case $host in @@ -7937,12 +8792,12 @@ EOF case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; + *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; + *) func_append dllsearchpath ":$testbindir";; esac ;; esac @@ -7968,18 +8823,18 @@ EOF *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" + func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + *) func_append finalize_perm_rpath " $libdir" ;; esac fi done @@ -8030,6 +8885,12 @@ EOF 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}"' @@ -8052,7 +8913,7 @@ EOF # We should set the runpath_var. rpath= for dir in $perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi @@ -8060,7 +8921,7 @@ EOF # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi @@ -8075,6 +8936,13 @@ EOF $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 @@ -8108,6 +8976,12 @@ EOF 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" @@ -8205,7 +9079,7 @@ EOF else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" + func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" @@ -8213,10 +9087,10 @@ EOF if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" + func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. @@ -8227,10 +9101,10 @@ EOF # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" + func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have @@ -8248,7 +9122,7 @@ EOF else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= @@ -8272,9 +9146,9 @@ EOF esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" ;; - *) oldobjs="$oldobjs $obj" ;; + *) func_append oldobjs " $obj" ;; esac done fi @@ -8284,6 +9158,16 @@ EOF 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..." @@ -8380,9 +9264,19 @@ EOF eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" + 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" ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; + *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" @@ -8396,9 +9290,9 @@ EOF eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; - *) newdlfiles="$newdlfiles $lib" ;; + *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" @@ -8415,7 +9309,7 @@ EOF eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done @@ -8427,7 +9321,7 @@ EOF [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac - newdlfiles="$newdlfiles $abs" + func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= @@ -8436,7 +9330,7 @@ EOF [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac - newdlprefiles="$newdlprefiles $abs" + func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi @@ -8521,7 +9415,7 @@ relink_command=\"$relink_command\"" exit $EXIT_SUCCESS } -{ test "$mode" = link || test "$mode" = relink; } && +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} @@ -8541,9 +9435,9 @@ func_mode_uninstall () for arg do case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; esac done @@ -8552,24 +9446,23 @@ func_mode_uninstall () rmdirs= - origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then - objdir="$origobjdir" + odir="$objdir" else - objdir="$dir/$origobjdir" + odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" + test "$opt_mode" = uninstall && odir="$dir" - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; esac fi @@ -8595,18 +9488,17 @@ func_mode_uninstall () # Delete the libtool libraries and symlinks. for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" + func_append rmfiles " $odir/$n" done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test -n "$old_library" && func_append rmfiles " $odir/$old_library" - case "$mode" in + case "$opt_mode" in clean) - case " $library_names " in - # " " in the beginning catches empty $dlname + case " $library_names " in *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then @@ -8634,19 +9526,19 @@ func_mode_uninstall () # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" + 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 - rmfiles="$rmfiles $dir/$non_pic_object" + func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) - if test "$mode" = clean ; then + if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) @@ -8656,7 +9548,7 @@ func_mode_uninstall () noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe - rmfiles="$rmfiles $file" + func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. @@ -8665,7 +9557,7 @@ func_mode_uninstall () func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename @@ -8673,12 +9565,12 @@ func_mode_uninstall () # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" + func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" + func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi @@ -8686,7 +9578,6 @@ func_mode_uninstall () esac func_show_eval "$RM $rmfiles" 'exit_status=1' done - objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do @@ -8698,16 +9589,16 @@ func_mode_uninstall () exit $exit_status } -{ test "$mode" = uninstall || test "$mode" = clean; } && +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} -test -z "$mode" && { +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 \`$mode'" + func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" diff --git a/m4/libtool.m4 b/m4/libtool.m4 index 8c99a62..88de383 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -168,10 +168,13 @@ _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 @@ -748,15 +751,12 @@ _LT_EOF # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) - _LT_PROG_XSI_SHELLFNS + _LT_PROG_REPLACE_SHELLFNS - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || + mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], @@ -1073,30 +1073,41 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES], fi ]) -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- +# _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 -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -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 "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +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 @@ -1121,7 +1132,7 @@ 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 && \ +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 @@ -1165,6 +1176,39 @@ _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], @@ -1311,14 +1355,47 @@ 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], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) +[_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: @@ -1658,10 +1735,10 @@ else /* 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)) -void fnord () __attribute__((visibility("default"))); +int fnord () __attribute__((visibility("default"))); #endif -void fnord () { int i=42; } +int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); @@ -2201,8 +2278,9 @@ cygwin* | mingw* | pw32* | cegcc*) need_version=no need_lib_prefix=no - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + 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}`~ @@ -2235,13 +2313,71 @@ m4_if([$1], [],[ 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 - dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; @@ -2949,6 +3085,11 @@ case $reload_flag in 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' @@ -3167,6 +3308,21 @@ tpf*) ;; 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 @@ -3174,7 +3330,11 @@ 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"]) + [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 @@ -3277,6 +3437,67 @@ 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 # -------- @@ -3403,8 +3624,8 @@ esac 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'" +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= @@ -3440,6 +3661,7 @@ for ac_symprfx in "" "_"; do 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 @@ -3473,6 +3695,18 @@ _LT_EOF 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 @@ -3484,7 +3718,7 @@ _LT_EOF cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ -const struct { +LT@&t@_DLSYM_CONST struct { const char *name; void *address; } @@ -3510,15 +3744,15 @@ static const void *lt_preloaded_setup() { _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" + 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_save_LIBS" - CFLAGS="$lt_save_CFLAGS" + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi @@ -3551,6 +3785,13 @@ 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], @@ -3561,6 +3802,8 @@ _LT_DECL([global_symbol_to_c_name_address], _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 @@ -3572,7 +3815,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= -AC_MSG_CHECKING([for $compiler option to produce PIC]) m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then @@ -3677,6 +3919,12 @@ m4_if([$1], [CXX], [ ;; 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++*) @@ -4051,6 +4299,12 @@ m4_if([$1], [CXX], [ _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) @@ -4170,9 +4424,11 @@ case $host_os in _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_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) + +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. @@ -4191,6 +4447,8 @@ 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. # @@ -4211,6 +4469,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], 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 @@ -4219,6 +4478,7 @@ 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. @@ -4233,15 +4493,20 @@ m4_if([$1], [CXX], [ ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; + ;; cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; + 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 + ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; + ;; esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= @@ -4409,7 +4674,8 @@ _LT_EOF _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/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + _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' @@ -4457,7 +4723,7 @@ _LT_EOF if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then - tmp_addflag= + tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler @@ -4527,8 +4793,8 @@ _LT_EOF _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - _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' + _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 ;; @@ -4546,8 +4812,8 @@ _LT_EOF _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _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' + _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 @@ -4593,8 +4859,8 @@ _LT_EOF *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _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' + _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 @@ -4724,7 +4990,7 @@ _LT_EOF _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. - _LT_SYS_MODULE_PATH_AIX + _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 @@ -4735,7 +5001,7 @@ _LT_EOF else # Determine the default libpath from the value encoded in an # empty executable. - _LT_SYS_MODULE_PATH_AIX + _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. @@ -4779,20 +5045,63 @@ _LT_EOF # Microsoft Visual C++. # 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 - # 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(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + 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*) @@ -4830,7 +5139,7 @@ _LT_EOF # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _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 @@ -4838,7 +5147,7 @@ _LT_EOF hpux9*) if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _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 @@ -4854,7 +5163,7 @@ _LT_EOF hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi @@ -4878,10 +5187,10 @@ _LT_EOF _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 -fPIC ${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}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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 @@ -4928,16 +5237,31 @@ _LT_EOF irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $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' + _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. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $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' - ) - LDFLAGS="$save_LDFLAGS" + # 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' @@ -5022,7 +5346,7 @@ _LT_EOF 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} $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(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 \*' @@ -5041,9 +5365,9 @@ _LT_EOF _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _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 ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $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"*) @@ -5315,8 +5639,6 @@ _LT_TAGDECL([], [inherit_rpath], [0], to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], @@ -5327,6 +5649,8 @@ _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 @@ -5428,6 +5752,7 @@ CC="$lt_save_CC" 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 @@ -5489,6 +5814,7 @@ if test "$_lt_caught_CXX_error" != yes; then # 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 @@ -5506,6 +5832,7 @@ if test "$_lt_caught_CXX_error" != yes; then fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) @@ -5527,8 +5854,8 @@ if test "$_lt_caught_CXX_error" != yes; then # 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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -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(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' @@ -5669,7 +5996,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. - _LT_SYS_MODULE_PATH_AIX + _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" @@ -5681,7 +6008,7 @@ if test "$_lt_caught_CXX_error" != yes; then else # Determine the default libpath from the value encoded in an # empty executable. - _LT_SYS_MODULE_PATH_AIX + _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. @@ -5723,29 +6050,75 @@ if test "$_lt_caught_CXX_error" != yes; then ;; 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 - - 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 - ;; + 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) ;; @@ -5820,7 +6193,7 @@ if test "$_lt_caught_CXX_error" != yes; then ;; *) if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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' + _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 @@ -5891,10 +6264,10 @@ if test "$_lt_caught_CXX_error" != yes; then _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 -fPIC ${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}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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 @@ -5935,9 +6308,9 @@ if test "$_lt_caught_CXX_error" != yes; then *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -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' + _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 -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' + _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 @@ -6215,7 +6588,7 @@ if test "$_lt_caught_CXX_error" != yes; then _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 -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' + _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 @@ -6302,9 +6675,9 @@ if test "$_lt_caught_CXX_error" != yes; then 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 -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _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 -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $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 @@ -6433,6 +6806,7 @@ if test "$_lt_caught_CXX_error" != yes; then fi # test -n "$compiler" CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC @@ -6447,6 +6821,29 @@ 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 @@ -6455,6 +6852,7 @@ AC_LANG_POP # 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)= @@ -6505,6 +6903,13 @@ public class foo { }; _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 @@ -6516,7 +6921,7 @@ if AC_TRY_EVAL(ac_compile); then pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do - case $p in + case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. @@ -6525,13 +6930,22 @@ if AC_TRY_EVAL(ac_compile); then test $p = "-R"; then prev=$p continue - else - prev= 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 $p in - -L* | -R*) + 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. @@ -6551,8 +6965,10 @@ if AC_TRY_EVAL(ac_compile); then _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. @@ -6588,6 +7004,7 @@ else fi $RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], @@ -6737,7 +7154,9 @@ if test "$_lt_disable_F77" != yes; then # 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]) @@ -6791,6 +7210,7 @@ if test "$_lt_disable_F77" != yes; then GCC=$lt_save_GCC CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP @@ -6867,7 +7287,9 @@ if test "$_lt_disable_FC" != yes; then # 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 @@ -6923,7 +7345,8 @@ if test "$_lt_disable_FC" != yes; then fi # test -n "$compiler" GCC=$lt_save_GCC - CC="$lt_save_CC" + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP @@ -6960,10 +7383,12 @@ _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. -lt_save_CC="$CC" +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" @@ -6994,7 +7419,8 @@ fi AC_LANG_RESTORE GCC=$lt_save_GCC -CC="$lt_save_CC" +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG @@ -7029,9 +7455,11 @@ _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]) @@ -7044,7 +7472,8 @@ fi GCC=$lt_save_GCC AC_LANG_RESTORE -CC="$lt_save_CC" +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG @@ -7103,6 +7532,15 @@ _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 # ------------ @@ -7196,8 +7634,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES], # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ + 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 @@ -7236,206 +7674,162 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# 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 () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# 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 () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# 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_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}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} +# _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_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" -# 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 () -{ - # Extract subdirectory from the argument. - 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 -} +# _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##*/}"]) -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} + _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}"}]) -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) -# 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 -} + _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"}]) -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'` -} + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} + _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"]) -_LT_EOF -esac + # 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 -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF +# _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 ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF + *-*-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 ;; - 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/ltversion.m4 b/m4/ltversion.m4 index 93fc771..9c7b5d4 100644 --- a/m4/ltversion.m4 +++ b/m4/ltversion.m4 @@ -7,17 +7,17 @@ # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. -# Generated from ltversion.in. +# @configure_input@ -# serial 3175 ltversion.m4 +# serial 3293 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.2.10]) -m4_define([LT_PACKAGE_REVISION], [1.3175]) +m4_define([LT_PACKAGE_VERSION], [2.4]) +m4_define([LT_PACKAGE_REVISION], [1.3293]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.10' -macro_revision='1.3175' +[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/python.m4 b/m4/python.m4 index 372627b..4f98ad7 100644 --- a/m4/python.m4 +++ b/m4/python.m4 @@ -38,22 +38,26 @@ 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 +dnl function also defines PYTHON_INCLUDES and PYTHON_LIBS 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 +dnl deduce PYTHON_INCLUDES and PYTHON_LIBS py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"` py_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"` -if test -x "$PYTHON-config"; then -PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null` +PYTHON_CONFIG=`which $PYTHON`-config +if test -x "$PYTHON_CONFIG"; then +PYTHON_INCLUDES=`$PYTHON_CONFIG --includes 2>/dev/null` +PYTHON_LIBS=`$PYTHON_CONFIG --libs 2>/dev/null` else PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" +PYTHON_LIBS="-lpython${PYTHON_VERSION}" if test "$py_prefix" != "$py_exec_prefix"; then PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" ->fi +fi fi AC_SUBST(PYTHON_INCLUDES) +AC_SUBST(PYTHON_LIBS) dnl check if the headers exist: save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" @@ -226,32 +230,3 @@ python2.1 python2.0]) fi ]) - -dnl a macro to check for ability to create python extensions -dnl JD_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) -dnl function also defines PYTHON_INCLUDES -AC_DEFUN([JD_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; sys.stdout.write(sys.prefix)"` -py_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"` -if test -x "$PYTHON-config"; 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" -]) diff --git a/setup.py b/setup.py index a1f980c..afdfe08 100755 --- a/setup.py +++ b/setup.py @@ -148,7 +148,7 @@ class PyGObjectInstallData(InstallData): class PyGObjectBuild(build): - enable_threading = 1 + enable_threading = True PyGObjectBuild.user_options.append(('enable-threading', None, 'enable threading support')) @@ -332,15 +332,15 @@ setup(name='pygobject', platforms=['MS Windows'], maintainer='Johan Dahlin', maintainer_email='johan@gnome.org', - description = doclines[0], - long_description = '\n'.join(doclines[2:]), - provides = 'pygobject', + description=doclines[0], + long_description='\n'.join(doclines[2:]), + provides=['codegen', 'dsextras', 'gio', 'glib', 'gobject'], py_modules=py_modules, packages=packages, ext_modules=ext_modules, libraries=clibs, data_files=data_files, - scripts = ['pygobject_postinstall.py'], + scripts=['pygobject_postinstall.py'], options=options, cmdclass={'install_lib': PyGObjectInstallLib, 'install_data': PyGObjectInstallData, diff --git a/tests/Makefile.am b/tests/Makefile.am index 77bc020..fb3d8e7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -40,14 +40,17 @@ GIMarshallingTests-1.0.gir: libgimarshallingtests.la Makefile GIMarshallingTests-1.0.typelib: GIMarshallingTests-1.0.gir Makefile $(AM_V_GEN) g-ir-compiler $< -o $@ -CLEANFILES += Regress-1.0.gir Regress-1.0.typelib GIMarshallingTests-1.0.gir GIMarshallingTests-1.0.typelib +gschemas.compiled: org.gnome.test.gschema.xml + glib-compile-schemas --targetdir=. --schema-file=$< + +CLEANFILES += Regress-1.0.gir Regress-1.0.typelib GIMarshallingTests-1.0.gir GIMarshallingTests-1.0.typelib gschemas.compiled endif noinst_LTLIBRARIES += testhelper.la testhelper_la_CFLAGS = -I$(top_srcdir)/gobject -I$(top_srcdir)/glib $(PYTHON_INCLUDES) $(GLIB_CFLAGS) testhelper_la_LDFLAGS = -module -avoid-version -testhelper_la_LIBADD = $(GLIB_LIBS) +testhelper_la_LIBADD = $(GLIB_LIBS) $(PYTHON_LIBS) testhelper_la_SOURCES = \ testhelpermodule.c \ test-floating.c \ @@ -78,7 +81,7 @@ TEST_FILES = \ test_uris.py if BUILD_GIO -TEST_FILES += \ +GIO_TEST_FILES = \ test_gio.py \ test_gresolver.py \ test_gsocket.py \ @@ -90,6 +93,7 @@ if ENABLE_INTROSPECTION TEST_FILES += \ test_everything.py \ test_gi.py \ + test_gdbus.py \ test_overrides.py endif @@ -99,19 +103,39 @@ EXTRA_DIST = \ testmodule.py \ test-floating.h \ test-thread.h \ - test-unknown.h + test-unknown.h \ + org.gnome.test.gschema.xml EXTRA_DIST += $(TEST_FILES) clean-local: rm -f $(LTLIBRARIES:.la=.so) file.txt~ +DBUS_LAUNCH=$(shell which dbus-launch) + +# need to run the gio tests separately to avoid loading gi.repository.Gio and +# gio at the same time +check-local: $(LTLIBRARIES:.la=.so) Regress-1.0.typelib GIMarshallingTests-1.0.typelib gschemas.compiled + TEST_FILES="$(TEST_FILES)" \ + PYTHONPATH=$(top_builddir):$(top_builddir)/tests:$${PYTHONPATH:+:$$PYTHONPATH} \ + LD_LIBRARY_PATH=$(builddir)/.libs:$$LD_LIBRARY_PATH \ + GI_TYPELIB_PATH=$(builddir):$$GI_TYPELIB_PATH \ + XDG_DATA_DIRS=$$XDG_DATA_DIRS:/usr/share \ + $(DBUS_LAUNCH) $(EXEC_NAME) $(PYTHON) $(srcdir)/runtests.py -check-local: $(LTLIBRARIES:.la=.so) Regress-1.0.typelib GIMarshallingTests-1.0.typelib - TEST_FILES="$(TEST_FILES)" PYTHONPATH=$(top_builddir):$(top_builddir)/tests:$${PYTHONPATH:+:$$PYTHONPATH} LD_LIBRARY_PATH=$(builddir)/.libs:$$LD_LIBRARY_PATH GI_TYPELIB_PATH=$(builddir) $(EXEC_NAME) $(PYTHON) $(srcdir)/runtests.py +if BUILD_GIO + TEST_FILES="$(GIO_TEST_FILES)" \ + PYTHONPATH=$(top_builddir):$(top_builddir)/tests:$${PYTHONPATH:+:$$PYTHONPATH} \ + LD_LIBRARY_PATH=$(builddir)/.libs:$$LD_LIBRARY_PATH \ + GI_TYPELIB_PATH=$(builddir):$$GI_TYPELIB_PATH \ + XDG_DATA_DIRS=$$XDG_DATA_DIRS:/usr/share \ + $(EXEC_NAME) $(PYTHON) $(srcdir)/runtests.py +endif check.gdb: EXEC_NAME="gdb --args" $(MAKE) check check.valgrind: - EXEC_NAME="valgrind" G_SLICE=always-malloc G_DEBUG=gc-friendly $(MAKE) check + EXEC_NAME="valgrind --suppressions=python.supp" G_SLICE=always-malloc G_DEBUG=gc-friendly $(MAKE) check + +-include $(top_srcdir)/git.mk diff --git a/tests/Makefile.in b/tests/Makefile.in index 9773183..355b0bf 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -35,17 +35,11 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_INTROSPECTION_TRUE@am__append_1 = libregress.la libgimarshallingtests.la -@ENABLE_INTROSPECTION_TRUE@am__append_2 = Regress-1.0.gir Regress-1.0.typelib GIMarshallingTests-1.0.gir GIMarshallingTests-1.0.typelib -@BUILD_GIO_TRUE@am__append_3 = \ -@BUILD_GIO_TRUE@ test_gio.py \ -@BUILD_GIO_TRUE@ test_gresolver.py \ -@BUILD_GIO_TRUE@ test_gsocket.py \ -@BUILD_GIO_TRUE@ test_gicon.py \ -@BUILD_GIO_TRUE@ test_gcancellable.py - -@ENABLE_INTROSPECTION_TRUE@am__append_4 = \ +@ENABLE_INTROSPECTION_TRUE@am__append_2 = Regress-1.0.gir Regress-1.0.typelib GIMarshallingTests-1.0.gir GIMarshallingTests-1.0.typelib gschemas.compiled +@ENABLE_INTROSPECTION_TRUE@am__append_3 = \ @ENABLE_INTROSPECTION_TRUE@ test_everything.py \ @ENABLE_INTROSPECTION_TRUE@ test_gi.py \ +@ENABLE_INTROSPECTION_TRUE@ test_gdbus.py \ @ENABLE_INTROSPECTION_TRUE@ test_overrides.py subdir = tests @@ -84,7 +78,8 @@ libregress_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(CFLAGS) $(libregress_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_INTROSPECTION_TRUE@am_libregress_la_rpath = am__DEPENDENCIES_1 = -testhelper_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +testhelper_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) am_testhelper_la_OBJECTS = testhelper_la-testhelpermodule.lo \ testhelper_la-test-floating.lo testhelper_la-test-thread.lo \ testhelper_la-test-unknown.lo @@ -185,6 +180,7 @@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -213,6 +209,7 @@ PYTHON = @PYTHON@ PYTHON_BASENAME = @PYTHON_BASENAME@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -228,6 +225,7 @@ 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@ @@ -290,7 +288,7 @@ noinst_LTLIBRARIES = $(am__append_1) testhelper.la @ENABLE_INTROSPECTION_TRUE@libgimarshallingtests_la_LDFLAGS = -module -avoid-version $(GLIB_LIBS) testhelper_la_CFLAGS = -I$(top_srcdir)/gobject -I$(top_srcdir)/glib $(PYTHON_INCLUDES) $(GLIB_CFLAGS) testhelper_la_LDFLAGS = -module -avoid-version -testhelper_la_LIBADD = $(GLIB_LIBS) +testhelper_la_LIBADD = $(GLIB_LIBS) $(PYTHON_LIBS) testhelper_la_SOURCES = \ testhelpermodule.c \ test-floating.c \ @@ -300,9 +298,18 @@ testhelper_la_SOURCES = \ TEST_FILES = test_gobject.py test_interface.py test_mainloop.py \ test_option.py test_properties.py test_signal.py \ test_source.py test_subprocess.py test_thread.py test_uris.py \ - $(am__append_3) $(am__append_4) + $(am__append_3) +@BUILD_GIO_TRUE@GIO_TEST_FILES = \ +@BUILD_GIO_TRUE@ test_gio.py \ +@BUILD_GIO_TRUE@ test_gresolver.py \ +@BUILD_GIO_TRUE@ test_gsocket.py \ +@BUILD_GIO_TRUE@ test_gicon.py \ +@BUILD_GIO_TRUE@ test_gcancellable.py + EXTRA_DIST = compathelper.py runtests.py testmodule.py test-floating.h \ - test-thread.h test-unknown.h $(TEST_FILES) + test-thread.h test-unknown.h org.gnome.test.gschema.xml \ + $(TEST_FILES) +DBUS_LAUNCH = $(shell which dbus-launch) all: all-am .SUFFIXES: @@ -673,6 +680,9 @@ uninstall-am: @ENABLE_INTROSPECTION_TRUE@GIMarshallingTests-1.0.typelib: GIMarshallingTests-1.0.gir Makefile @ENABLE_INTROSPECTION_TRUE@ $(AM_V_GEN) g-ir-compiler $< -o $@ +@ENABLE_INTROSPECTION_TRUE@gschemas.compiled: org.gnome.test.gschema.xml +@ENABLE_INTROSPECTION_TRUE@ glib-compile-schemas --targetdir=. --schema-file=$< + # This is a hack to make sure a shared library is built testhelper.la: $(testhelper_la_OBJECTS) $(testhelper_la_DEPENDENCIES) $(LINK) -rpath $(pkgpyexecdir) $(testhelper_la_LDFLAGS) $(testhelper_la_OBJECTS) $(testhelper_la_LIBADD) $(LIBS) @@ -685,14 +695,30 @@ all: $(LTLIBRARIES:.la=.so) clean-local: rm -f $(LTLIBRARIES:.la=.so) file.txt~ -check-local: $(LTLIBRARIES:.la=.so) Regress-1.0.typelib GIMarshallingTests-1.0.typelib - TEST_FILES="$(TEST_FILES)" PYTHONPATH=$(top_builddir):$(top_builddir)/tests:$${PYTHONPATH:+:$$PYTHONPATH} LD_LIBRARY_PATH=$(builddir)/.libs:$$LD_LIBRARY_PATH GI_TYPELIB_PATH=$(builddir) $(EXEC_NAME) $(PYTHON) $(srcdir)/runtests.py +# need to run the gio tests separately to avoid loading gi.repository.Gio and +# gio at the same time +check-local: $(LTLIBRARIES:.la=.so) Regress-1.0.typelib GIMarshallingTests-1.0.typelib gschemas.compiled + TEST_FILES="$(TEST_FILES)" \ + PYTHONPATH=$(top_builddir):$(top_builddir)/tests:$${PYTHONPATH:+:$$PYTHONPATH} \ + LD_LIBRARY_PATH=$(builddir)/.libs:$$LD_LIBRARY_PATH \ + GI_TYPELIB_PATH=$(builddir):$$GI_TYPELIB_PATH \ + XDG_DATA_DIRS=$$XDG_DATA_DIRS:/usr/share \ + $(DBUS_LAUNCH) $(EXEC_NAME) $(PYTHON) $(srcdir)/runtests.py + +@BUILD_GIO_TRUE@ TEST_FILES="$(GIO_TEST_FILES)" \ +@BUILD_GIO_TRUE@ PYTHONPATH=$(top_builddir):$(top_builddir)/tests:$${PYTHONPATH:+:$$PYTHONPATH} \ +@BUILD_GIO_TRUE@ LD_LIBRARY_PATH=$(builddir)/.libs:$$LD_LIBRARY_PATH \ +@BUILD_GIO_TRUE@ GI_TYPELIB_PATH=$(builddir):$$GI_TYPELIB_PATH \ +@BUILD_GIO_TRUE@ XDG_DATA_DIRS=$$XDG_DATA_DIRS:/usr/share \ +@BUILD_GIO_TRUE@ $(EXEC_NAME) $(PYTHON) $(srcdir)/runtests.py check.gdb: EXEC_NAME="gdb --args" $(MAKE) check check.valgrind: - EXEC_NAME="valgrind" G_SLICE=always-malloc G_DEBUG=gc-friendly $(MAKE) check + EXEC_NAME="valgrind --suppressions=python.supp" G_SLICE=always-malloc G_DEBUG=gc-friendly $(MAKE) check + +-include $(top_srcdir)/git.mk # 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. diff --git a/tests/compathelper.py b/tests/compathelper.py index 754285c..2465747 100644 --- a/tests/compathelper.py +++ b/tests/compathelper.py @@ -44,7 +44,26 @@ if sys.version_info >= (3, 0): ''' _bytes = lambda s: s.encode() + + ''' + for tests that need to write to intefaces that take unicode in + python 2 + + python 3 strings are unicode encoded as UTF-8 so the unicode object + doesn't exist + + python 2 differs between a string an unicode string and you must specify + an encoding. This macro will specify UTF-8 in python 2 + + any tests that need to use unicode should do this + + from compathelper import _unicode + unicode_string = _unicode('this is a unicode string') + ''' + + _unicode = lambda s: str(s) else: _long = long _basestring = basestring _bytes = str + _unicode = lambda s: unicode(s, 'UTF-8') diff --git a/tests/org.gnome.test.gschema.xml b/tests/org.gnome.test.gschema.xml new file mode 100644 index 0000000..221b87a --- /dev/null +++ b/tests/org.gnome.test.gschema.xml @@ -0,0 +1,25 @@ + + + + true + + + "Hello" + + + (1,2) + + + [1,2] + + + + + + 42 + + + + + + diff --git a/tests/runtests.py b/tests/runtests.py index d99f0cc..54c65aa 100644 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -6,6 +6,7 @@ import glob import unittest + # Load tests. if 'TEST_NAMES' in os.environ: names = os.environ['TEST_NAMES'].split() diff --git a/tests/test-floating.c b/tests/test-floating.c index 918a42d..8e8ba5d 100644 --- a/tests/test-floating.c +++ b/tests/test-floating.c @@ -93,3 +93,69 @@ test_floating_without_sink_func_init (TestFloatingWithoutSinkFunc *self) { } +/* TestOwnedByLibrary */ + +G_DEFINE_TYPE(TestOwnedByLibrary, test_owned_by_library, G_TYPE_OBJECT) + +static GSList *obl_instance_list = NULL; + +static void +test_owned_by_library_class_init (TestOwnedByLibraryClass *klass) +{ +} + +static void +test_owned_by_library_init (TestOwnedByLibrary *self) +{ + g_object_ref (self); + obl_instance_list = g_slist_prepend (obl_instance_list, self); +} + +void +test_owned_by_library_release (TestOwnedByLibrary *self) +{ + obl_instance_list = g_slist_remove (obl_instance_list, self); + g_object_unref (self); +} + +GSList * +test_owned_by_library_get_instance_list (void) +{ + return obl_instance_list; +} + +/* TestFloatingAndSunk + * This object is mimicking the GtkWindow behaviour, ie a GInitiallyUnowned subclass + * whose floating reference has already been sunk when g_object_new() returns it. + * The reference is already sunk because the instance is already owned by the instance + * list. + */ + +G_DEFINE_TYPE(TestFloatingAndSunk, test_floating_and_sunk, G_TYPE_INITIALLY_UNOWNED) + +static GSList *fas_instance_list = NULL; + +static void +test_floating_and_sunk_class_init (TestFloatingAndSunkClass *klass) +{ +} + +static void +test_floating_and_sunk_init (TestFloatingAndSunk *self) +{ + g_object_ref_sink (self); + fas_instance_list = g_slist_prepend (fas_instance_list, self); +} + +void +test_floating_and_sunk_release (TestFloatingAndSunk *self) +{ + fas_instance_list = g_slist_remove (fas_instance_list, self); + g_object_unref (self); +} + +GSList * +test_floating_and_sunk_get_instance_list (void) +{ + return fas_instance_list; +} diff --git a/tests/test-floating.h b/tests/test-floating.h index e53df32..bf4e101 100644 --- a/tests/test-floating.h +++ b/tests/test-floating.h @@ -58,3 +58,44 @@ typedef struct { GType test_floating_without_sink_func_get_type (void); +/* TestOwnedByLibrary */ + +typedef struct { + GObject parent; +} TestOwnedByLibrary; + +typedef struct { + GObjectClass parent_class; +} TestOwnedByLibraryClass; + +#define TEST_TYPE_OWNED_BY_LIBRARY (test_owned_by_library_get_type()) +#define TEST_OWNED_BY_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_OWNED_BY_LIBRARY, TestOwnedByLibrary)) +#define TEST_OWNED_BY_LIBRARY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OWNED_BY_LIBRARY, TestOwnedByLibraryClass)) +#define TEST_IS_OWNED_BY_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_OWNED_BY_LIBRARY)) +#define TEST_IS_OWNED_BY_LIBRARY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), TEST_TYPE_OWNED_BY_LIBRARY)) +#define TEST_OWNED_BY_LIBRARY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), TEST_TYPE_OWNED_BY_LIBRARY, TestOwnedByLibraryClass)) + +GType test_owned_by_library_get_type (void); +void test_owned_by_library_release (TestOwnedByLibrary *self); +GSList *test_owned_by_library_get_instance_list (void); + +/* TestFloatingAndSunk */ + +typedef struct { + GInitiallyUnowned parent; +} TestFloatingAndSunk; + +typedef struct { + GInitiallyUnownedClass parent_class; +} TestFloatingAndSunkClass; + +#define TEST_TYPE_FLOATING_AND_SUNK (test_floating_and_sunk_get_type()) +#define TEST_FLOATING_AND_SUNK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_FLOATING_AND_SUNK, TestFloatingAndSunk)) +#define TEST_FLOATING_AND_SUNK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_FLOATING_AND_SUNK, TestFloatingAndSunkClass)) +#define TEST_IS_FLOATING_AND_SUNK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_FLOATING_AND_SUNK)) +#define TEST_IS_FLOATING_AND_SUNK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), TEST_TYPE_FLOATING_AND_SUNK)) +#define TEST_FLOATING_AND_SUNK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), TEST_TYPE_FLOATING_AND_SUNK, TestFloatingAndSunkClass)) + +GType test_floating_and_sunk_get_type (void); +void test_floating_and_sunk_release (TestFloatingAndSunk *self); +GSList *test_floating_and_sunk_get_instance_list (void); diff --git a/tests/test_everything.py b/tests/test_everything.py index 6e77a3d..74d917a 100644 --- a/tests/test_everything.py +++ b/tests/test_everything.py @@ -1,4 +1,5 @@ # -*- Mode: Python; py-indent-offset: 4 -*- +# coding=utf-8 # vim: tabstop=4 shiftwidth=4 expandtab import unittest @@ -13,6 +14,13 @@ from gi.repository import GObject from gi.repository import GLib from gi.repository import Regress as Everything +if sys.version_info < (3, 0): + UNICHAR = "\xe2\x99\xa5" + PY2_UNICODE_UNICHAR = unicode(UNICHAR, 'UTF-8') +else: + UNICHAR = "♥" + + class TestEverything(unittest.TestCase): def test_cairo_context(self): @@ -48,8 +56,25 @@ class TestEverything(unittest.TestCase): self.assertEquals(surface.get_width(), 10) self.assertEquals(surface.get_height(), 10) + def test_unichar(self): + self.assertEquals("c", Everything.test_unichar("c")) + + if sys.version_info < (3, 0): + self.assertEquals(UNICHAR, Everything.test_unichar(PY2_UNICODE_UNICHAR)) + self.assertEquals(UNICHAR, Everything.test_unichar(UNICHAR)) + self.assertRaises(TypeError, Everything.test_unichar, "") + self.assertRaises(TypeError, Everything.test_unichar, "morethanonechar") + + def test_floating(self): - Everything.TestFloating() + e = Everything.TestFloating() + self.assertEquals(e.__grefcount__, 1) + + e = GObject.new(Everything.TestFloating) + self.assertEquals(e.__grefcount__, 1) + + e = Everything.TestFloating.new() + self.assertEquals(e.__grefcount__, 1) def test_caller_allocates(self): struct_a = Everything.TestStructA() @@ -113,6 +138,24 @@ class TestEverything(unittest.TestCase): gtype = Everything.test_gtype(ARegisteredClass) self.assertEquals(ARegisteredClass.__gtype__, gtype) self.assertRaises(TypeError, Everything.test_gtype, 'ARegisteredClass') + + def test_dir(self): + attr_list = dir(Everything) + + # test that typelib attributes are listed + self.assertTrue('TestStructA' in attr_list) + + # test that class attributes and methods are listed + self.assertTrue('__class__' in attr_list) + self.assertTrue('__dir__' in attr_list) + self.assertTrue('__repr__' in attr_list) + + # test that instance members are listed + self.assertTrue('_namespace' in attr_list) + self.assertTrue('_version' in attr_list) + + # test that there are no duplicates returned + self.assertEqual(len(attr_list), len(set(attr_list))) class TestNullableArgs(unittest.TestCase): def test_in_nullable_hash(self): @@ -356,3 +399,70 @@ class TestProperties(unittest.TestCase): self.assertTrue(isinstance(object_.props.boxed, Everything.TestBoxed)) self.assertEquals(object_.props.boxed.some_int8, 42) + +class TestTortureProfile(unittest.TestCase): + def test_torture_profile(self): + import time + total_time = 0 + print("") + object_ = Everything.TestObj() + sys.stdout.write("\ttorture test 1 (10000 iterations): ") + + start_time = time.clock() + for i in range(10000): + (y,z,q) = object_.torture_signature_0(5000, + "Torture Test 1", + 12345) + + end_time = time.clock() + delta_time = end_time - start_time + total_time += delta_time + print("%f secs" % delta_time) + + sys.stdout.write("\ttorture test 2 (10000 iterations): ") + + start_time = time.clock() + for i in range(10000): + (y,z,q) = Everything.TestObj().torture_signature_0(5000, + "Torture Test 2", + 12345) + + end_time = time.clock() + delta_time = end_time - start_time + total_time += delta_time + print("%f secs" % delta_time) + + + sys.stdout.write("\ttorture test 3 (10000 iterations): ") + start_time = time.clock() + for i in range(10000): + try: + (y,z,q) = object_.torture_signature_1(5000, + "Torture Test 3", + 12345) + except: + pass + end_time = time.clock() + delta_time = end_time - start_time + total_time += delta_time + print("%f secs" % delta_time) + + sys.stdout.write("\ttorture test 4 (10000 iterations): ") + def callback(userdata): + pass + + userdata = [1,2,3,4] + start_time = time.clock() + for i in range(10000): + (y,z,q) = Everything.test_torture_signature_2(5000, + callback, + userdata, + "Torture Test 4", + 12345) + end_time = time.clock() + delta_time = end_time - start_time + total_time += delta_time + print("%f secs" % delta_time) + print("\t====") + print("\tTotal: %f sec" % total_time) + diff --git a/tests/test_gcancellable.py b/tests/test_gcancellable.py deleted file mode 100644 index f911572..0000000 --- a/tests/test_gcancellable.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- Mode: Python -*- - -import unittest - -import glib -import gio - - -class TestResolver(unittest.TestCase): - def setUp(self): - self.cancellable = gio.Cancellable() - - def test_make_poll_fd(self): - poll = self.cancellable.make_pollfd() - self.failUnless(isinstance(poll, glib.PollFD)) diff --git a/tests/test_gdbus.py b/tests/test_gdbus.py new file mode 100644 index 0000000..567433c --- /dev/null +++ b/tests/test_gdbus.py @@ -0,0 +1,94 @@ +# -*- Mode: Python; py-indent-offset: 4 -*- +# vim: tabstop=4 shiftwidth=4 expandtab + +import unittest + +import sys +sys.path.insert(0, "../") + +import gobject +from gi.repository import GLib +from gi.repository import Gio + +class TestGDBusClient(unittest.TestCase): + def setUp(self): + self.bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) + + self.dbus_proxy = Gio.DBusProxy.new_sync(self.bus, + Gio.DBusProxyFlags.NONE, None, + 'org.freedesktop.DBus', + '/org/freedesktop/DBus', + 'org.freedesktop.DBus', None) + + def test_native_calls_sync(self): + result = self.dbus_proxy.call_sync('ListNames', None, + Gio.DBusCallFlags.NO_AUTO_START, 500, None) + self.assertTrue(isinstance(result, GLib.Variant)) + result = result.unpack()[0] # result is always a tuple + self.assertTrue(len(result) > 1) + self.assertTrue('org.freedesktop.DBus' in result) + + result = self.dbus_proxy.call_sync('GetNameOwner', + GLib.Variant('(s)', ('org.freedesktop.DBus',)), + Gio.DBusCallFlags.NO_AUTO_START, 500, None) + self.assertTrue(isinstance(result, GLib.Variant)) + self.assertEqual(type(result.unpack()[0]), type('')) + + def test_native_calls_sync_errors(self): + # error case: invalid argument types + try: + self.dbus_proxy.call_sync('GetConnectionUnixProcessID', None, + Gio.DBusCallFlags.NO_AUTO_START, 500, None) + self.fail('call with invalid arguments should raise an exception') + except Exception as e: + self.assertTrue('InvalidArgs' in str(e)) + + # error case: invalid argument + try: + self.dbus_proxy.call_sync('GetConnectionUnixProcessID', + GLib.Variant('(s)', (' unknown',)), + Gio.DBusCallFlags.NO_AUTO_START, 500, None) + self.fail('call with invalid arguments should raise an exception') + except Exception as e: + self.assertTrue('NameHasNoOwner' in str(e)) + + # error case: unknown method + try: + self.dbus_proxy.call_sync('UnknownMethod', None, + Gio.DBusCallFlags.NO_AUTO_START, 500, None) + self.fail('call for unknown method should raise an exception') + except Exception as e: + self.assertTrue('UnknownMethod' in str(e)) + + def test_native_calls_async(self): + def call_done(obj, result, user_data): + user_data['result'] = self.dbus_proxy.call_finish(result) + user_data['main_loop'].quit() + + main_loop = gobject.MainLoop() + data = {'main_loop': main_loop} + self.dbus_proxy.call('ListNames', None, + Gio.DBusCallFlags.NO_AUTO_START, 500, None, + call_done, data) + main_loop.run() + + self.assertTrue(isinstance(data['result'], GLib.Variant)) + result = data['result'].unpack()[0] # result is always a tuple + self.assertTrue(len(result) > 1) + self.assertTrue('org.freedesktop.DBus' in result) + + def test_native_calls_async_errors(self): + def call_done(obj, result, user_data): + try: + self.dbus_proxy.call_finish(result) + self.fail('call_finish() for unknown method should raise an exception') + except Exception as e: + self.assertTrue('UnknownMethod' in str(e)) + finally: + user_data['main_loop'].quit() + + main_loop = gobject.MainLoop() + data = {'main_loop': main_loop} + self.dbus_proxy.call('UnknownMethod', None, + Gio.DBusCallFlags.NO_AUTO_START, 500, None, call_done, data) + main_loop.run() diff --git a/tests/test_gi.py b/tests/test_gi.py index 50146a4..22ff2c4 100644 --- a/tests/test_gi.py +++ b/tests/test_gi.py @@ -3,8 +3,6 @@ # vim: tabstop=4 shiftwidth=4 expandtab import sys -import pygtk -pygtk.require("2.0") import unittest from gi.repository import GObject @@ -12,10 +10,15 @@ from gi.repository import GObject import gobject from gi.repository import GIMarshallingTests +from compathelper import _bytes + if sys.version_info < (3, 0): CONSTANT_UTF8 = "const \xe2\x99\xa5 utf8" + PY2_UNICODE_UTF8 = unicode(CONSTANT_UTF8, 'UTF-8') + CHAR_255='\xff' else: CONSTANT_UTF8 = "const ♥ utf8" + CHAR_255=bytes([255]) CONSTANT_NUMBER = 42 @@ -120,9 +123,9 @@ class TestUInt8(unittest.TestCase): number = Number(self.MAX) GIMarshallingTests.uint8_in(number) + GIMarshallingTests.uint8_in(CHAR_255) number.value += 1 - self.assertRaises(ValueError, GIMarshallingTests.uint8_in, number) self.assertRaises(ValueError, GIMarshallingTests.uint8_in, Number(-1)) @@ -402,6 +405,7 @@ class TestInt(unittest.TestCase): def test_int_inout(self): self.assertEquals(self.MIN, GIMarshallingTests.int_inout_max_min(Number(self.MAX))) self.assertEquals(self.MAX, GIMarshallingTests.int_inout_min_max(Number(self.MIN))) + self.assertRaises(TypeError, GIMarshallingTests.int_inout_min_max, Number(self.MIN), CONSTANT_NUMBER) class TestUInt(unittest.TestCase): @@ -615,6 +619,8 @@ class TestUtf8(unittest.TestCase): def test_utf8_none_in(self): GIMarshallingTests.utf8_none_in(CONSTANT_UTF8) + if sys.version_info < (3, 0): + GIMarshallingTests.utf8_none_in(PY2_UNICODE_UTF8) self.assertRaises(TypeError, GIMarshallingTests.utf8_none_in, CONSTANT_NUMBER) self.assertRaises(TypeError, GIMarshallingTests.utf8_none_in, None) @@ -667,6 +673,10 @@ class TestArray(unittest.TestCase): def test_array_in(self): GIMarshallingTests.array_in(Sequence([-1, 0, 1, 2])) + def test_array_uint8_in(self): + GIMarshallingTests.array_uint8_in(Sequence([97, 98, 99, 100])) + GIMarshallingTests.array_uint8_in(_bytes("abcd")) + def test_array_out(self): self.assertEquals([-1, 0, 1, 2], GIMarshallingTests.array_out()) @@ -963,6 +973,16 @@ class TestEnum(unittest.TestCase): self.assertTrue(isinstance(enum, GIMarshallingTests.Enum)) self.assertEquals(enum, GIMarshallingTests.Enum.VALUE1) + def test_enum_second(self): + # check for the bug where different non-gtype enums share the same class + self.assertNotEqual(GIMarshallingTests.Enum, GIMarshallingTests.SecondEnum) + + # check that values are not being shared between different enums + self.assertTrue(hasattr(GIMarshallingTests.SecondEnum, "SECONDVALUE1")) + self.assertRaises(AttributeError, getattr, GIMarshallingTests.Enum, "SECONDVALUE1") + self.assertTrue(hasattr(GIMarshallingTests.Enum, "VALUE1")) + self.assertRaises(AttributeError, getattr, GIMarshallingTests.SecondEnum, "VALUE1") + class TestGEnum(unittest.TestCase): @@ -1351,8 +1371,6 @@ class TestGObject(unittest.TestCase): class TestPythonGObject(unittest.TestCase): class Object(GIMarshallingTests.Object): - __gtype_name__ = "Object" - def __init__(self, int): GIMarshallingTests.Object.__init__(self) self.val = None @@ -1368,7 +1386,16 @@ class TestPythonGObject(unittest.TestCase): return 42 def do_method_with_default_implementation(self, int8): - self.props.int = int8 * 2 + GIMarshallingTests.Object.do_method_with_default_implementation(self, int8) + self.props.int += int8 + + class SubObject(GIMarshallingTests.SubObject): + def __init__(self, int): + GIMarshallingTests.SubObject.__init__(self) + self.val = None + + def do_method_with_default_implementation(self, int8): + self.val = int8 def test_object(self): self.assertTrue(issubclass(self.Object, GIMarshallingTests.Object)) @@ -1386,11 +1413,9 @@ class TestPythonGObject(unittest.TestCase): self.assertEqual(object_.method_int8_out(), 42) object_.method_with_default_implementation(42) - self.assertEqual(object_.val, 84) + self.assertEqual(object_.props.int, 84) class ObjectWithoutVFunc(GIMarshallingTests.Object): - __gtype_name__ = 'ObjectWithoutVFunc' - def __init__(self, int): GIMarshallingTests.Object.__init__(self) @@ -1398,6 +1423,11 @@ class TestPythonGObject(unittest.TestCase): object_.method_with_default_implementation(84) self.assertEqual(object_.props.int, 84) + def test_subobject_parent_vfunc(self): + object_ = self.SubObject(int = 81) + object_.method_with_default_implementation(87) + self.assertEquals(object_.val, 87) + def test_dynamic_module(self): from gi.module import DynamicGObjectModule self.assertTrue(isinstance(GObject, DynamicGObjectModule)) @@ -1406,6 +1436,44 @@ class TestPythonGObject(unittest.TestCase): # compare a static gobject attr with a dynamic GObject attr self.assertEquals(GObject.GObject, gobject.GObject) + def test_subobject_non_vfunc_do_method(self): + class PythonObjectWithNonVFuncDoMethod: + def do_not_a_vfunc(self): + return 5 + + class ObjectOverrideNonVFuncDoMethod(GIMarshallingTests.Object, PythonObjectWithNonVFuncDoMethod): + def do_not_a_vfunc(self): + value = super(ObjectOverrideNonVFuncDoMethod, self).do_not_a_vfunc() + return 13 + value + + object_ = ObjectOverrideNonVFuncDoMethod() + self.assertEquals(18, object_.do_not_a_vfunc()) + + def test_native_function_not_set_in_subclass_dict(self): + # Previously, GI was setting virtual functions on the class as well + # as any *native* class that subclasses it. Here we check that it is only + # set on the class that the method is originally from. + self.assertTrue('do_method_with_default_implementation' in GIMarshallingTests.Object.__dict__) + self.assertTrue('do_method_with_default_implementation' not in GIMarshallingTests.SubObject.__dict__) + + # Here we check that accessing a vfunc from the subclass returns the same wrapper object, + # meaning that multiple wrapper objects have not been created for the same vfunc. + func1 = GIMarshallingTests.Object.do_method_with_default_implementation + func2 = GIMarshallingTests.SubObject.do_method_with_default_implementation + if sys.version_info < (3,0): + func1 = func1.im_func + func2 = func2.im_func + + self.assertTrue(func1 is func2) + + def test_subobject_with_interface_and_non_vfunc_do_method(self): + # There was a bug for searching for vfuncs in interfaces. It was + # triggered by having a do_* method that wasn't overriding + # a native vfunc, as well as inheriting from an interface. + class GObjectSubclassWithInterface(GObject.GObject, GIMarshallingTests.Interface): + def do_method_not_a_vfunc(self): + pass + class TestMultiOutputArgs(unittest.TestCase): def test_int_out_out(self): @@ -1414,6 +1482,17 @@ class TestMultiOutputArgs(unittest.TestCase): def test_int_return_out(self): self.assertEquals((6, 7), GIMarshallingTests.int_return_out()) +class TestGErrorException(unittest.TestCase): + def test_gerror_exception(self): + self.assertRaises(GObject.GError, GIMarshallingTests.gerror) + try: + GIMarshallingTests.gerror() + except Exception: + etype, e = sys.exc_info()[:2] + self.assertEquals(e.domain, GIMarshallingTests.CONSTANT_GERROR_DOMAIN) + self.assertEquals(e.code, GIMarshallingTests.CONSTANT_GERROR_CODE) + self.assertEquals(e.message, GIMarshallingTests.CONSTANT_GERROR_MESSAGE) + # Interface @@ -1427,7 +1506,6 @@ class TestInterfaces(unittest.TestCase): def test_implementation(self): class TestInterfaceImpl(GObject.GObject, GIMarshallingTests.Interface): - __gtype_name__ = 'TestInterfaceImpl' def __init__(self): GObject.GObject.__init__(self) self.val = None @@ -1444,24 +1522,26 @@ class TestInterfaces(unittest.TestCase): self.assertEquals(instance.val, 42) class TestInterfaceImplA(TestInterfaceImpl): - __gtype_name__ = 'TestInterfaceImplA' + pass class TestInterfaceImplB(TestInterfaceImplA): - __gtype_name__ = 'TestInterfaceImplB' + pass instance = TestInterfaceImplA() GIMarshallingTests.test_interface_test_int8_in(instance, 42) self.assertEquals(instance.val, 42) - def define_implementor_without_gtype(): - class TestInterfaceImpl(gobject.GObject, GIMarshallingTests.Interface): - def __init__(self): - gobject.GObject.__init__(self) - self.val = None +class TestInterfaceClash(unittest.TestCase): + + def test_clash(self): + def create_clash(): + class TestClash(GObject.GObject, GIMarshallingTests.Interface, GIMarshallingTests.Interface2): def do_test_int8_in(self, int8): - self.val = int8 - self.assertRaises(RuntimeError, define_implementor_without_gtype) + pass + TestClash() + + self.assertRaises(TypeError, create_clash) class TestOverrides(unittest.TestCase): diff --git a/tests/test_gicon.py b/tests/test_gicon.py deleted file mode 100644 index b9af6ff..0000000 --- a/tests/test_gicon.py +++ /dev/null @@ -1,112 +0,0 @@ -# -*- Mode: Python -*- - -import os -import unittest - -import glib -import gio - - -class TestIcon(unittest.TestCase): - def test_eq(self): - self.assertEquals(gio.FileIcon(gio.File('foo.png')), - gio.FileIcon(gio.File('foo.png'))) - self.assertEquals(gio.ThemedIcon('foo'), - gio.ThemedIcon('foo')) - - self.assertNotEqual(gio.FileIcon(gio.File('foo.png')), - gio.FileIcon(gio.File('bar.png'))) - self.assertNotEquals(gio.ThemedIcon('foo'), - gio.ThemedIcon('bar')) - self.assertNotEquals(gio.FileIcon(gio.File('foo.png')), - gio.ThemedIcon('foo')) - - def test_hash(self): - self.assertEquals(hash(gio.FileIcon(gio.File('foo.png'))), - hash(gio.FileIcon(gio.File('foo.png')))) - self.assertEquals(hash(gio.ThemedIcon('foo')), - hash(gio.ThemedIcon('foo'))) - -class TestLoadableIcon(unittest.TestCase): - def setUp(self): - self.file = open('temp.svg', 'w') - self.svg = ('' - '' - '') - self.file.write(self.svg) - self.file.close() - self.icon = gio.FileIcon(gio.File('temp.svg')) - - def tearDown(self): - if os.path.exists('temp.svg'): - os.unlink('temp.svg') - - def test_load(self): - stream, type = self.icon.load() - try: - self.assert_(isinstance(stream, gio.InputStream)) - self.assertEquals(self.svg, stream.read()) - finally: - stream.close() - - def test_load_async(self): - def callback(icon, result): - try: - stream, type = icon.load_finish(result) - self.assert_(isinstance(stream, gio.InputStream)) - self.assertEquals(self.svg, stream.read()) - finally: - loop.quit() - stream.close() - - self.icon.load_async(callback) - - loop = glib.MainLoop() - loop.run() - -class TestFileIcon(unittest.TestCase): - def test_constructor(self): - file = gio.File('foo.png') - self.assert_(file is gio.FileIcon(file).get_file()) - -class TestThemedIcon(unittest.TestCase): - def setUp(self): - self.icon = gio.ThemedIcon("open") - - def test_constructor(self): - have_use_default_fallbacks = ('use_default_fallbacks' - in gio.ThemedIcon.props.__members__) - icon = gio.ThemedIcon('foo') - self.assertEquals(['foo'], icon.props.names) - self.assert_(not have_use_default_fallbacks - or not icon.props.use_default_fallbacks) - - icon = gio.ThemedIcon(['foo', 'bar', 'baz']) - self.assertEquals(['foo', 'bar', 'baz'], icon.props.names) - self.assert_(not have_use_default_fallbacks - or not icon.props.use_default_fallbacks) - - icon = gio.ThemedIcon('xxx-yyy-zzz', True) - self.assertEquals(['xxx-yyy-zzz', 'xxx-yyy', 'xxx'], icon.props.names) - self.assert_(not have_use_default_fallbacks - or icon.props.use_default_fallbacks) - - def test_constructor_illegals(self): - self.assertRaises(TypeError, lambda: gio.ThemedIcon(42)) - self.assertRaises(TypeError, lambda: gio.ThemedIcon(['foo', 42, 'bar'])) - - def test_get_names(self): - self.assertEquals(self.icon.get_names(), ['open']) - - def test_append_name(self): - self.assertEquals(self.icon.get_names(), ['open']) - self.icon.append_name('close') - self.assertEquals(self.icon.get_names(), ['open', 'close']) - -class TestEmblemedIcon(unittest.TestCase): - def test_emblemed_icon(self): - icon = gio.FileIcon(gio.File('foo.png')) - emblem = gio.Emblem(icon) - emblemed = gio.EmblemedIcon(icon, emblem) - self.assertEquals(emblemed.get_emblems()[0], emblem) diff --git a/tests/test_gio.py b/tests/test_gio.py deleted file mode 100644 index 7c8251e..0000000 --- a/tests/test_gio.py +++ /dev/null @@ -1,1138 +0,0 @@ -# -*- Mode: Python -*- - -import os -import unittest - -import glib -import gio - - -class TestFile(unittest.TestCase): - def setUp(self): - self._f = open("file.txt", "w+") - self.file = gio.File("file.txt") - - def tearDown(self): - self._f.close() - if os.path.exists('file.txt'): - os.unlink("file.txt") - - def testReadAsync(self): - self._f.write("testing") - self._f.seek(0) - - def callback(file, result): - try: - stream = file.read_finish(result) - self.failUnless(isinstance(stream, gio.InputStream)) - self.assertEquals(stream.read(), "testing") - finally: - loop.quit() - - self.file.read_async(callback) - - loop = glib.MainLoop() - loop.run() - - def testAppendToAsync(self): - self._f.write("append_to ") - self._f.close() - - def callback(file, result): - try: - stream = file.append_to_finish(result) - self.failUnless(isinstance(stream, gio.OutputStream)) - w = stream.write("testing") - cont, leng, etag = self.file.load_contents() - self.assertEqual(cont, "append_to testing") - finally: - loop.quit() - - self.file.append_to_async(callback, gio.FILE_CREATE_NONE, - glib.PRIORITY_HIGH) - - loop = glib.MainLoop() - loop.run() - - def testAppendToAsyncNoargs(self): - self._f.write("append_to ") - self._f.close() - - def callback(file, result): - try: - stream = file.append_to_finish(result) - self.failUnless(isinstance(stream, gio.OutputStream)) - w = stream.write("testing") - cont, leng, etag = self.file.load_contents() - self.assertEqual(cont, "append_to testing") - finally: - loop.quit() - - self.file.append_to_async(callback) - - loop = glib.MainLoop() - loop.run() - - def testCreateAsync(self): - def callback(file, result): - try: - stream = file.create_finish(result) - self.failUnless(isinstance(stream, gio.OutputStream)) - w = stream.write("testing") - cont, leng, etag = file.load_contents() - self.assertEqual(cont, "testing") - finally: - if os.path.exists('temp.txt'): - os.unlink("temp.txt") - loop.quit() - - gfile = gio.File("temp.txt") - gfile.create_async(callback, gio.FILE_CREATE_NONE, - glib.PRIORITY_HIGH) - - loop = glib.MainLoop() - loop.run() - - def testCreateReadWriteAsync(self): - def callback(file, result): - try: - iostream = file.create_readwrite_finish(result) - self.failUnless(isinstance(iostream, gio.FileIOStream)) - - ostream = iostream.get_output_stream() - self.failUnless(isinstance(ostream, gio.OutputStream)) - - w = ostream.write("testing") - cont, leng, etag = file.load_contents() - self.assertEqual(cont, "testing") - finally: - if os.path.exists('temp.txt'): - os.unlink("temp.txt") - loop.quit() - - gfile = gio.File("temp.txt") - gfile.create_readwrite_async(callback, gio.FILE_CREATE_NONE, - glib.PRIORITY_HIGH) - - loop = glib.MainLoop() - loop.run() - - def testCreateAsyncNoargs(self): - def callback(file, result): - try: - stream = file.create_finish(result) - self.failUnless(isinstance(stream, gio.OutputStream)) - w = stream.write("testing") - cont, leng, etag = file.load_contents() - self.assertEqual(cont, "testing") - finally: - if os.path.exists('temp.txt'): - os.unlink("temp.txt") - loop.quit() - - gfile = gio.File("temp.txt") - gfile.create_async(callback) - - loop = glib.MainLoop() - loop.run() - - def testReplaceAsync(self): - self._f.write("testing") - self._f.close() - - def callback(file, result): - try: - stream = file.replace_finish(result) - self.failUnless(isinstance(stream, gio.OutputStream)) - stream.write("some new string") - stream.close() - cont, leng, etag = file.load_contents() - self.assertEqual(cont, "some new string") - finally: - loop.quit() - - - self.file.replace_async(callback, None, True, gio.FILE_CREATE_NONE, - glib.PRIORITY_HIGH) - - loop = glib.MainLoop() - loop.run() - - def testReplaceAsyncNoargs(self): - self._f.write("testing") - self._f.close() - - def callback(file, result): - try: - stream = file.replace_finish(result) - self.failUnless(isinstance(stream, gio.OutputStream)) - stream.write("some new string") - stream.close() - cont, leng, etag = file.load_contents() - self.assertEqual(cont, "some new string") - finally: - loop.quit() - - - self.file.replace_async(callback) - - loop = glib.MainLoop() - loop.run() - - def testReadAsyncError(self): - self.assertRaises(TypeError, self.file.read_async) - self.assertRaises(TypeError, self.file.read_async, "foo", "bar") - self.assertRaises(TypeError, self.file.read_async, "foo", - priority="bar") - self.assertRaises(TypeError, self.file.read_async, "foo", - priority="bar") - self.assertRaises(TypeError, self.file.read_async, "foo", - priority=1, cancellable="bar") - self.assertRaises(TypeError, self.file.read_async, "foo", 1, "bar") - - def testConstructor(self): - for gfile in [gio.File("/"), - gio.File("file:///"), - gio.File(uri="file:///"), - gio.File(path="/"), - gio.File(u"/"), - gio.File(path=u"/")]: - self.failUnless(isinstance(gfile, gio.File)) - self.assertEquals(gfile.get_path(), "/") - self.assertEquals(gfile.get_uri(), "file:///") - - def testConstructorError(self): - self.assertRaises(TypeError, gio.File) - self.assertRaises(TypeError, gio.File, 1) - self.assertRaises(TypeError, gio.File, "foo", "bar") - self.assertRaises(TypeError, gio.File, foo="bar") - self.assertRaises(TypeError, gio.File, uri=1) - self.assertRaises(TypeError, gio.File, path=1) - - def testLoadContents(self): - self._f.write("testing load_contents") - self._f.seek(0) - c = gio.Cancellable() - cont, leng, etag = self.file.load_contents(cancellable=c) - self.assertEqual(cont, "testing load_contents") - self.assertEqual(leng, 21) - self.assertNotEqual(etag, '') - - def testLoadContentsAsync(self): - self._f.write("testing load_contents_async") - self._f.seek(0) - - def callback(contents, result): - try: - cont, leng, etag = contents.load_contents_finish(result) - self.assertEqual(cont, "testing load_contents_async") - self.assertEqual(leng, 27) - self.assertNotEqual(etag, '') - finally: - loop.quit() - - canc = gio.Cancellable() - self.file.load_contents_async(callback, cancellable=canc) - - loop = glib.MainLoop() - loop.run() - - def testQueryInfoAsync(self): - def callback(file, result): - try: - info = file.query_info_finish(result) - self.failUnless(isinstance(info, gio.FileInfo)) - self.failUnless(info.get_name(), "file.txt") - finally: - loop.quit() - - self.file.query_info_async("standard", callback) - - loop = glib.MainLoop() - loop.run() - - def testMountMountable(self): - gfile = gio.File('localtest:') - def unmount_done(mount, result): - try: - retval = mount.unmount_finish(result) - self.failUnless(retval) - finally: - loop.quit() - - def mount_enclosing_volume_done(gfile, result): - try: - try: - retval = gfile.mount_enclosing_volume_finish(result) - except gio.Error, e: - # If we run the tests too fast - if e.code == gio.ERROR_ALREADY_MOUNTED: - print ('WARNING: testfile is already mounted, ' - 'skipping test') - loop.quit() - return - raise - self.failUnless(retval) - finally: - try: - mount = gfile.find_enclosing_mount() - except gio.Error: - loop.quit() - return - mount.unmount(unmount_done) - - mount_operation = gio.MountOperation() - gfile.mount_enclosing_volume(mount_operation, - mount_enclosing_volume_done) - - loop = glib.MainLoop() - loop.run() - - def testCopy(self): - if os.path.exists('copy.txt'): - os.unlink("copy.txt") - - source = gio.File('file.txt') - destination = gio.File('copy.txt') - try: - retval = source.copy(destination) - self.failUnless(retval) - - self.failUnless(os.path.exists('copy.txt')) - self.assertEqual(open('file.txt').read(), - open('copy.txt').read()) - finally: - os.unlink("copy.txt") - - self.called = False - def callback(current, total): - self.called = True - source = gio.File('file.txt') - destination = gio.File('copy.txt') - try: - retval = source.copy(destination, callback) - self.failUnless(retval) - - self.failUnless(os.path.exists('copy.txt')) - self.assertEqual(open('file.txt').read(), - open('copy.txt').read()) - self.failUnless(self.called) - finally: - os.unlink("copy.txt") - - def test_copy_async(self): - if os.path.exists('copy.txt'): - os.unlink("copy.txt") - - source = gio.File('file.txt') - destination = gio.File('copy.txt') - - def copied(source_, result): - try: - self.assert_(source_ is source) - self.failUnless(source_.copy_finish(result)) - finally: - loop.quit() - - def progress(current, total): - self.assert_(isinstance(current, long)) - self.assert_(isinstance(total, long)) - self.assert_(0 <= current <= total) - - try: - loop = glib.MainLoop() - source.copy_async(destination, copied, progress_callback = progress) - loop.run() - - self.failUnless(os.path.exists('copy.txt')) - self.assertEqual(open('file.txt').read(), - open('copy.txt').read()) - finally: - os.unlink("copy.txt") - - # See bug 546591. - def test_copy_progress(self): - source = gio.File('file.txt') - destination = gio.File('copy.txt') - - def progress(current, total): - self.assert_(isinstance(current, long)) - self.assert_(isinstance(total, long)) - self.assert_(0 <= current <= total) - - try: - retval = source.copy(destination, - flags=gio.FILE_COPY_OVERWRITE, - progress_callback=progress) - self.failUnless(retval) - - self.failUnless(os.path.exists('copy.txt')) - self.assertEqual(open('file.txt').read(), - open('copy.txt').read()) - finally: - os.unlink("copy.txt") - - def testMove(self): - if os.path.exists('move.txt'): - os.unlink("move.txt") - - source = gio.File('file.txt') - destination = gio.File('move.txt') - retval = source.move(destination) - self.failUnless(retval) - - self.failIf(os.path.exists('file.txt')) - self.failUnless(os.path.exists('move.txt')) - - self.called = False - def callback(current, total): - self.called = True - source = gio.File('move.txt') - destination = gio.File('move-2.txt') - try: - retval = source.move(destination, callback) - self.failUnless(retval) - - self.failIf(os.path.exists('move.txt')) - self.failUnless(os.path.exists('move-2.txt')) - self.failUnless(self.called) - finally: - os.unlink("move-2.txt") - - def testInfoList(self): - infolist = self.file.query_settable_attributes() - for info in infolist: - if info.name == "time::modified": - self.assertEqual(info.type, gio.FILE_ATTRIBUTE_TYPE_UINT64) - self.assertEqual(info.name, "time::modified") - self.assertEqual(info.flags, - gio.FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED | - gio.FILE_ATTRIBUTE_INFO_COPY_WITH_FILE) - - def testQueryWritableNamespaces(self): - infolist = self.file.query_writable_namespaces() - for info in infolist: - if info.name == "xattr": - self.assertEqual(info.type, gio.FILE_ATTRIBUTE_TYPE_STRING) - - def testSetAttribute(self): - self._f.write("testing attributes") - self._f.seek(0) - infolist = self.file.query_settable_attributes() - - self.assertNotEqual(len(infolist), 0) - - for info in infolist: - if info.name == "time::modified-usec": - ret = self.file.set_attribute("time::modified-usec", - gio.FILE_ATTRIBUTE_TYPE_UINT32, - 10, gio.FILE_QUERY_INFO_NONE) - self.assertEqual(ret, True) - - def testSetAttributesAsync(self): - def callback(gfile, result): - try: - info = gfile.set_attributes_finish(result) - usec = info.get_attribute_uint32("time::modified-usec") - self.assertEqual(usec, 10) - finally: - loop.quit() - - info = gio.FileInfo() - info.set_attribute_uint32("time::modified-usec", 10) - - canc = gio.Cancellable() - self.file.set_attributes_async(info, callback) - - loop = glib.MainLoop() - loop.run() - - def testReplaceContents(self): - self.file.replace_contents("testing replace_contents") - cont, leng, etag = self.file.load_contents() - self.assertEqual(cont, "testing replace_contents") - - caught = False - try: - self.file.replace_contents("this won't work", etag="wrong") - except gio.Error, e: - self.assertEqual(e.code, gio.ERROR_WRONG_ETAG) - caught = True - self.failUnless(caught) - - self.file.replace_contents("testing replace_contents again", etag=etag) - cont, leng, etag = self.file.load_contents() - self.assertEqual(cont, "testing replace_contents again") - - self.file.replace_contents("testing replace_contents yet again", etag=None) - cont, leng, etag = self.file.load_contents() - self.assertEqual(cont, "testing replace_contents yet again") - - def testReplaceContentsAsync(self): - - def callback(contents, result): - try: - newetag = contents.replace_contents_finish(result) - cont, leng, etag = self.file.load_contents() - self.assertEqual(cont, "testing replace_contents_async") - self.assertEqual(leng, 30) - self.assertEqual(etag, newetag) - self.assertNotEqual(newetag, '') - finally: - loop.quit() - - canc = gio.Cancellable() - self.file.replace_contents_async("testing replace_contents_async", callback, cancellable=canc) - - loop = glib.MainLoop() - loop.run() - - def test_eq(self): - self.assertEqual(gio.File('foo'), - gio.File('foo')) - self.assertNotEqual(gio.File('foo'), - gio.File('bar')) - - def test_hash(self): - self.assertEquals(hash(gio.File('foo')), - hash(gio.File('foo'))) - - def testSetDisplayNameAsync(self): - def callback(gfile, result): - try: - new_gfile = gfile.set_display_name_finish(result) - new_name = new_gfile.get_basename() - self.assertEqual(new_name, "new.txt") - deleted = new_gfile.delete() - self.assertEqual(deleted, True) - finally: - loop.quit() - - canc = gio.Cancellable() - self.file.set_display_name_async("new.txt", callback, cancellable=canc) - - loop = glib.MainLoop() - loop.run() - -class TestGFileEnumerator(unittest.TestCase): - def setUp(self): - self.file = gio.File(".") - - def testEnumerateChildren(self): - enumerator = self.file.enumerate_children( - "standard::*", gio.FILE_QUERY_INFO_NOFOLLOW_SYMLINKS) - for file_info in enumerator: - if file_info.get_name() == 'test_gio.py': - break - else: - raise AssertionError - - def testEnumerateChildrenAsync(self): - def callback(gfile, result): - try: - for file_info in gfile.enumerate_children_finish(result): - if file_info.get_name() == 'test_gio.py': - break - else: - raise AssertionError - finally: - loop.quit() - - self.file.enumerate_children_async( - "standard::*", callback) - loop = glib.MainLoop() - loop.run() - - def testNextFilesAsync(self): - def callback(enumerator, result): - try: - for file_info in enumerator.next_files_finish(result): - if file_info.get_name() == 'test_gio.py': - break - else: - raise AssertionError - finally: - loop.quit() - - enumerator = self.file.enumerate_children( - "standard::*", gio.FILE_QUERY_INFO_NOFOLLOW_SYMLINKS) - enumerator.next_files_async(1000, callback) - loop = glib.MainLoop() - loop.run() - - def testCloseFilesAsync(self): - def callback(enumerator, result): - try: - enumerator.close_finish(result) - finally: - loop.quit() - - enumerator = self.file.enumerate_children( - "standard::*", gio.FILE_QUERY_INFO_NOFOLLOW_SYMLINKS) - - enumerator.close_async(callback) - - loop = glib.MainLoop() - loop.run() - - -class TestInputStream(unittest.TestCase): - def setUp(self): - self._f = open("inputstream.txt", "w+") - self._f.write("testing") - self._f.seek(0) - self.stream = gio.unix.InputStream(self._f.fileno(), False) - - def tearDown(self): - self._f.close() - os.unlink("inputstream.txt") - - def testRead(self): - self.assertEquals(self.stream.read(), "testing") - - self.stream = gio.MemoryInputStream() - self.assertEquals(self.stream.read(), '') - - self.stream = gio.MemoryInputStream() - some_data = open("test_gio.py", "rb").read() - self.stream.add_data(some_data) - self.assertEquals(self.stream.read(), some_data) - - stream = gio.MemoryInputStream() - stream.add_data(some_data) - self.assertEquals(self._read_in_loop(stream, - lambda: stream.read(50), - 50), - some_data) - - def testSkip(self): - self.stream.skip(2) - res = self.stream.read() - self.assertEqual(res, "sting") - - def testSkipAsync(self): - def callback(stream, result): - try: - size = stream.skip_finish(result) - self.assertEqual(size, 2) - res = stream.read() - self.assertEqual(res, "sting") - finally: - loop.quit() - - self.stream.skip_async(2, callback) - - loop = glib.MainLoop() - loop.run() - - def test_read_part(self): - self.assertEquals(self._read_in_loop(self.stream, - lambda: self.stream.read_part()), - 'testing') - - stream = gio.MemoryInputStream() - some_data = open('test_gio.py', 'rb').read() - stream.add_data(some_data) - self.assertEquals(self._read_in_loop(stream, - lambda: stream.read_part(50), - 50), - some_data) - - def _read_in_loop(self, stream, reader, size_limit=0): - read_data = '' - while True: - read_part = reader() - if read_part: - read_data += read_part - if size_limit > 0: - self.assert_(len(read_part) <= size_limit, - '%d <= %d' % (len(read_part), size_limit)) - else: - return read_data - - def testReadAsync(self): - def callback(stream, result): - self.assertEquals(result.get_op_res_gssize(), 7) - try: - data = stream.read_finish(result) - self.assertEquals(data, "testing") - stream.close() - finally: - loop.quit() - - self.stream.read_async(7, callback) - - loop = glib.MainLoop() - loop.run() - - def testReadAsyncError(self): - self.count = 0 - def callback(stream, result): - try: - self.count += 1 - if self.count == 1: - return - self.assertRaises(gio.Error, stream.read_finish, result) - finally: - loop.quit() - - self.stream.read_async(10240, callback) - self.stream.read_async(10240, callback) - - loop = glib.MainLoop() - loop.run() - - self.assertEquals(self.count, 2) - - self.assertRaises(TypeError, self.stream.read_async) - self.assertRaises(TypeError, self.stream.read_async, "foo") - self.assertRaises(TypeError, self.stream.read_async, 1024, "bar") - self.assertRaises(TypeError, self.stream.read_async, 1024, - priority="bar") - self.assertRaises(TypeError, self.stream.read_async, 1024, - priority="bar") - self.assertRaises(TypeError, self.stream.read_async, 1024, - priority=1, cancellable="bar") - self.assertRaises(TypeError, self.stream.read_async, 1024, 1, "bar") - - - # FIXME: this makes 'make check' freeze - def _testCloseAsync(self): - def callback(stream, result): - try: - self.failUnless(stream.close_finish(result)) - finally: - loop.quit() - - self.stream.close_async(callback) - - loop = glib.MainLoop() - loop.run() - - -class TestDataInputStream(unittest.TestCase): - def setUp(self): - self.base_stream = gio.MemoryInputStream() - self.data_stream = gio.DataInputStream(self.base_stream) - - def test_read_line(self): - self.base_stream.add_data('foo\nbar\n\nbaz') - self.assertEquals('foo', self.data_stream.read_line()) - self.assertEquals('bar', self.data_stream.read_line()) - self.assertEquals('', self.data_stream.read_line()) - self.assertEquals('baz', self.data_stream.read_line()) - - def test_read_line_async(self): - def do_read_line_async(): - loop = glib.MainLoop() - line = [] - - def callback(stream, result): - try: - line.append(stream.read_line_finish(result)) - finally: - loop.quit() - - self.data_stream.read_line_async(callback) - loop.run() - return line[0] - - self.base_stream.add_data('foo\nbar\n\nbaz') - self.assertEquals('foo', do_read_line_async()) - self.assertEquals('bar', do_read_line_async()) - self.assertEquals('', do_read_line_async()) - self.assertEquals('baz', do_read_line_async()) - - def test_read_until(self): - self.base_stream.add_data('sentence.end of line\nthe rest') - self.assertEquals('sentence', self.data_stream.read_until('.!?')) - self.assertEquals('end of line', self.data_stream.read_until('\n\r')) - self.assertEquals('the rest', self.data_stream.read_until('#$%^&')) - - def test_read_until_async(self): - def do_read_until_async(stop_chars): - loop = glib.MainLoop() - data = [] - - def callback(stream, result): - try: - data.append(stream.read_until_finish(result)) - finally: - loop.quit() - - self.data_stream.read_until_async(stop_chars, callback) - loop.run() - return data[0] - - # Note the weird difference between synchronous and - # asynchronous version. See bug #584284. - self.base_stream.add_data('sentence.end of line\nthe rest') - self.assertEquals('sentence', do_read_until_async('.!?')) - self.assertEquals('.end of line', do_read_until_async('\n\r')) - self.assertEquals('\nthe rest', do_read_until_async('#$%^&')) - - -class TestMemoryInputStream(unittest.TestCase): - def setUp(self): - self.stream = gio.MemoryInputStream() - - def test_add_data(self): - self.stream.add_data('foobar') - self.assertEquals('foobar', self.stream.read()) - - self.stream.add_data('ham ') - self.stream.add_data(None) - self.stream.add_data('spam') - self.assertEquals('ham spam', self.stream.read()) - - def test_new_from_data(self): - stream = gio.memory_input_stream_new_from_data('spam') - self.assertEquals('spam', stream.read()) - - -class TestOutputStream(unittest.TestCase): - def setUp(self): - self._f = open("outputstream.txt", "w") - self.stream = gio.unix.OutputStream(self._f.fileno(), False) - - def tearDown(self): - self._f.close() - os.unlink("outputstream.txt") - - def testWrite(self): - self.stream.write("testing") - self.stream.close() - self.failUnless(os.path.exists("outputstream.txt")) - self.assertEquals(open("outputstream.txt").read(), "testing") - - def test_write_part(self): - stream = gio.MemoryOutputStream() - some_data = open('test_gio.py', 'rb').read() - buffer = some_data - - # In fact this makes only one looping (memory stream is fast, - # write_part behaves just like write), but let's still be - # complete. - while buffer: - written = stream.write_part(buffer) - if written == len(buffer): - break - else: - buffer = buffer[written:] - - self.assertEquals(stream.get_contents(), some_data) - - def testWriteAsync(self): - def callback(stream, result): - self.assertEquals(result.get_op_res_gssize(), 7) - try: - self.assertEquals(stream.write_finish(result), 7) - self.failUnless(os.path.exists("outputstream.txt")) - self.assertEquals(open("outputstream.txt").read(), "testing") - finally: - loop.quit() - - self.stream.write_async("testing", callback) - - loop = glib.MainLoop() - loop.run() - - def testWriteAsyncError(self): - def callback(stream, result): - self.assertEquals(result.get_op_res_gssize(), 0) - try: - self.assertRaises(gio.Error, stream.write_finish, result) - finally: - loop.quit() - - self.stream.close() - self.stream.write_async("testing", callback) - - loop = glib.MainLoop() - loop.run() - - self.assertRaises(TypeError, self.stream.write_async) - self.assertRaises(TypeError, self.stream.write_async, 1138) - self.assertRaises(TypeError, self.stream.write_async, "foo", "bar") - self.assertRaises(TypeError, self.stream.write_async, "foo", - priority="bar") - self.assertRaises(TypeError, self.stream.write_async, "foo", - priority="bar") - self.assertRaises(TypeError, self.stream.write_async, "foo", - priority=1, cancellable="bar") - self.assertRaises(TypeError, self.stream.write_async, "foo", 1, "bar") - - # FIXME: this makes 'make check' freeze - def _testCloseAsync(self): - def callback(stream, result): - try: - self.failUnless(stream.close_finish(result)) - finally: - loop.quit() - - self.stream.close_async(callback) - - loop = glib.MainLoop() - loop.run() - - def testFlushAsync(self): - def callback(stream, result): - try: - self.failUnless(stream.flush_finish(result)) - finally: - loop.quit() - - self.stream.flush_async(callback) - - loop = glib.MainLoop() - loop.run() - - def testSpliceAsync(self): - _f = open("stream.txt", "w+") - _f.write("testing") - _f.seek(0) - instream = gio.unix.InputStream(_f.fileno(), False) - - def callback(stream, result): - try: - size = stream.splice_finish(result) - self.assertEqual(size, 7) - - finally: - os.unlink("stream.txt") - loop.quit() - - self.stream.splice_async(instream, callback) - - loop = glib.MainLoop() - loop.run() - -class TestMemoryOutputStream(unittest.TestCase): - def setUp(self): - self.stream = gio.MemoryOutputStream() - - def test_get_contents(self): - self.stream.write('foobar') - self.assertEquals('foobar', self.stream.get_contents()) - - self.stream.write('baz') - self.assertEquals('foobarbaz', self.stream.get_contents()) - - -class TestVolumeMonitor(unittest.TestCase): - def setUp(self): - self.monitor = gio.volume_monitor_get() - - def testGetConnectedDrives(self): - drives = self.monitor.get_connected_drives() - self.failUnless(isinstance(drives, list)) - - def testGetVolumes(self): - volumes = self.monitor.get_volumes() - self.failUnless(isinstance(volumes, list)) - - def testGetMounts(self): - mounts = self.monitor.get_mounts() - self.failUnless(isinstance(mounts, list)) - if not mounts: - return - - self.failUnless(isinstance(mounts[0], gio.Mount)) - # Bug 538601 - icon = mounts[0].get_icon() - if not icon: - return - self.failUnless(isinstance(icon, gio.Icon)) - - -class TestContentTypeGuess(unittest.TestCase): - def testFromName(self): - mime_type = gio.content_type_guess('diagram.svg') - self.assertEquals('image/svg+xml', mime_type) - - def testFromContents(self): - mime_type = gio.content_type_guess(data='') - self.assertEquals('text/html', mime_type) - - def testFromContentsUncertain(self): - mime_type, result_uncertain = gio.content_type_guess( - data='', want_uncertain=True) - self.assertEquals('text/html', mime_type) - self.assertEquals(bool, type(result_uncertain)) - - -class TestFileInfo(unittest.TestCase): - def setUp(self): - self.fileinfo = gio.File("test_gio.py").query_info("*") - - def testListAttributes(self): - attributes = self.fileinfo.list_attributes("standard") - self.failUnless(attributes) - self.failUnless('standard::name' in attributes) - - def testGetModificationTime(self): - mtime = self.fileinfo.get_modification_time() - self.assertEqual(type(mtime), float) - - def testSetModificationTime(self): - self.fileinfo.set_modification_time(1000) - mtime = self.fileinfo.get_modification_time() - self.assertEqual(mtime, 1000) - - -class TestAppInfo(unittest.TestCase): - def setUp(self): - self.appinfo = gio.AppInfo("does-not-exist") - - def testSimple(self): - self.assertEquals(self.appinfo.get_description(), - "Custom definition for does-not-exist") - - def test_eq(self): - info1 = gio.app_info_get_all()[0] - info2 = info1.dup() - self.assert_(info1 is not info2) - self.assertEquals(info1, info2) - - self.assertNotEqual(gio.app_info_get_all()[0], gio.app_info_get_all()[1]) - -class TestVfs(unittest.TestCase): - def setUp(self): - self.vfs = gio.vfs_get_default() - - def testGetSupportedURISchemes(self): - result = self.vfs.get_supported_uri_schemes() - self.failUnless(type(result), []) - -class TestVolume(unittest.TestCase): - def setUp(self): - self.monitor = gio.volume_monitor_get() - - def testVolumeEnumerate(self): - volumes = self.monitor.get_volumes() - self.failUnless(isinstance(volumes, list)) - for v in volumes: - if v is not None: - ids = v.enumerate_identifiers() - self.failUnless(isinstance(ids, list)) - for id in ids: - if id is not None: - self.failUnless(isinstance(id, str)) - -class TestFileInputStream(unittest.TestCase): - def setUp(self): - self._f = open("file.txt", "w+") - self._f.write("testing") - self._f.seek(0) - self.file = gio.File("file.txt") - - def tearDown(self): - self._f.close() - if os.path.exists('file.txt'): - os.unlink("file.txt") - - def testQueryInfoAsync(self): - def callback(stream, result): - try: - info = stream.query_info_finish(result) - self.failUnless(isinstance(info, gio.FileInfo)) - self.failUnless(info.get_attribute_uint64("standard::size"), 7) - finally: - loop.quit() - - inputstream = self.file.read() - inputstream.query_info_async("standard", callback) - - loop = glib.MainLoop() - loop.run() - -class TestFileOutputStream(unittest.TestCase): - def setUp(self): - self._f = open("file.txt", "w+") - self._f.write("testing") - self._f.seek(0) - self.file = gio.File("file.txt") - - def tearDown(self): - self._f.close() - if os.path.exists('file.txt'): - os.unlink("file.txt") - - def testQueryInfoAsync(self): - def callback(stream, result): - try: - info = stream.query_info_finish(result) - self.failUnless(isinstance(info, gio.FileInfo)) - self.failUnless(info.get_attribute_uint64("standard::size"), 7) - finally: - loop.quit() - - outputstream = self.file.append_to() - outputstream.query_info_async("standard", callback) - - loop = glib.MainLoop() - loop.run() - -class TestBufferedInputStream(unittest.TestCase): - def setUp(self): - self._f = open("buffer.txt", "w+") - self._f.write("testing") - self._f.seek(0) - stream = gio.unix.InputStream(self._f.fileno(), False) - self.buffered = gio.BufferedInputStream(stream) - - def tearDown(self): - self._f.close() - os.unlink("buffer.txt") - - def test_fill_async(self): - def callback(stream, result): - try: - size = stream.fill_finish(result) - self.failUnlessEqual(size, 4) - finally: - loop.quit() - - self.buffered.fill_async(4, callback) - - loop = glib.MainLoop() - loop.run() - -class TestIOStream(unittest.TestCase): - def setUp(self): - self.file = gio.File("file.txt") - self.iofile = self.file.create_readwrite(gio.FILE_CREATE_NONE) - - def tearDown(self): - if os.path.exists('file.txt'): - os.unlink("file.txt") - - def testIOStreamCloseAsync(self): - def callback(stream, result): - try: - self.failUnless(stream.close_finish(result)) - finally: - loop.quit() - - self.iofile.close_async(callback) - - loop = glib.MainLoop() - loop.run() - - - def testQueryInfoAsync(self): - def callback(stream, result): - try: - info = stream.query_info_finish(result) - self.failUnless(isinstance(info, gio.FileInfo)) - self.failUnless(info.get_attribute_uint64("standard::size"), 7) - finally: - loop.quit() - - ostream = self.iofile.get_output_stream() - ostream.write("testing") - - self.iofile.query_info_async("standard", callback) - - loop = glib.MainLoop() - loop.run() diff --git a/tests/test_gobject.py b/tests/test_gobject.py index f3cdf29..d628b0e 100644 --- a/tests/test_gobject.py +++ b/tests/test_gobject.py @@ -3,6 +3,7 @@ import unittest import gobject +import sys import testhelper @@ -11,10 +12,16 @@ class TestGObjectAPI(unittest.TestCase): obj = gobject.GObject() self.assertEquals(obj.__module__, 'gobject._gobject') + + +class TestReferenceCounting(unittest.TestCase): + def testRegularObject(self): + obj = gobject.GObject() self.assertEquals(obj.__grefcount__, 1) + obj = gobject.new(gobject.GObject) + self.assertEquals(obj.__grefcount__, 1) -class TestFloating(unittest.TestCase): def testFloatingWithSinkFunc(self): obj = testhelper.FloatingWithSinkFunc() self.assertEquals(obj.__grefcount__, 1) @@ -28,3 +35,152 @@ class TestFloating(unittest.TestCase): obj = gobject.new(testhelper.FloatingWithoutSinkFunc) self.assertEquals(obj.__grefcount__, 1) + + def testOwnedByLibrary(self): + # Upon creation, the refcount of the object should be 2: + # - someone already has a reference on the new object. + # - the python wrapper should hold its own reference. + obj = testhelper.OwnedByLibrary() + self.assertEquals(obj.__grefcount__, 2) + + # We ask the library to release its reference, so the only + # remaining ref should be our wrapper's. Once the wrapper + # will run out of scope, the object will get finalized. + obj.release() + self.assertEquals(obj.__grefcount__, 1) + + def testOwnedByLibraryOutOfScope(self): + obj = testhelper.OwnedByLibrary() + self.assertEquals(obj.__grefcount__, 2) + + # We are manually taking the object out of scope. This means + # that our wrapper has been freed, and its reference dropped. We + # cannot check it but the refcount should now be 1 (the ref held + # by the library is still there, we didn't call release() + obj = None + + # When we get the object back from the lib, the wrapper is + # re-created, so our refcount will be 2 once again. + obj = testhelper.owned_by_library_get_instance_list()[0] + self.assertEquals(obj.__grefcount__, 2) + + obj.release() + self.assertEquals(obj.__grefcount__, 1) + + def testOwnedByLibraryUsingGObjectNew(self): + # Upon creation, the refcount of the object should be 2: + # - someone already has a reference on the new object. + # - the python wrapper should hold its own reference. + obj = gobject.new(testhelper.OwnedByLibrary) + self.assertEquals(obj.__grefcount__, 2) + + # We ask the library to release its reference, so the only + # remaining ref should be our wrapper's. Once the wrapper + # will run out of scope, the object will get finalized. + obj.release() + self.assertEquals(obj.__grefcount__, 1) + + def testOwnedByLibraryOutOfScopeUsingGobjectNew(self): + obj = gobject.new(testhelper.OwnedByLibrary) + self.assertEquals(obj.__grefcount__, 2) + + # We are manually taking the object out of scope. This means + # that our wrapper has been freed, and its reference dropped. We + # cannot check it but the refcount should now be 1 (the ref held + # by the library is still there, we didn't call release() + obj = None + + # When we get the object back from the lib, the wrapper is + # re-created, so our refcount will be 2 once again. + obj = testhelper.owned_by_library_get_instance_list()[0] + self.assertEquals(obj.__grefcount__, 2) + + obj.release() + self.assertEquals(obj.__grefcount__, 1) + + def testFloatingAndSunk(self): + # Upon creation, the refcount of the object should be 2: + # - someone already has a reference on the new object. + # - the python wrapper should hold its own reference. + obj = testhelper.FloatingAndSunk() + self.assertEquals(obj.__grefcount__, 2) + + # We ask the library to release its reference, so the only + # remaining ref should be our wrapper's. Once the wrapper + # will run out of scope, the object will get finalized. + obj.release() + self.assertEquals(obj.__grefcount__, 1) + + def testFloatingAndSunkOutOfScope(self): + obj = testhelper.FloatingAndSunk() + self.assertEquals(obj.__grefcount__, 2) + + # We are manually taking the object out of scope. This means + # that our wrapper has been freed, and its reference dropped. We + # cannot check it but the refcount should now be 1 (the ref held + # by the library is still there, we didn't call release() + obj = None + + # When we get the object back from the lib, the wrapper is + # re-created, so our refcount will be 2 once again. + obj = testhelper.floating_and_sunk_get_instance_list()[0] + self.assertEquals(obj.__grefcount__, 2) + + obj.release() + self.assertEquals(obj.__grefcount__, 1) + + + def testFloatingAndSunkUsingGObjectNew(self): + # Upon creation, the refcount of the object should be 2: + # - someone already has a reference on the new object. + # - the python wrapper should hold its own reference. + obj = gobject.new(testhelper.FloatingAndSunk) + self.assertEquals(obj.__grefcount__, 2) + + # We ask the library to release its reference, so the only + # remaining ref should be our wrapper's. Once the wrapper + # will run out of scope, the object will get finalized. + obj.release() + self.assertEquals(obj.__grefcount__, 1) + + def testFloatingAndSunkOutOfScopeUsingGObjectNew(self): + obj = gobject.new(testhelper.FloatingAndSunk) + self.assertEquals(obj.__grefcount__, 2) + + # We are manually taking the object out of scope. This means + # that our wrapper has been freed, and its reference dropped. We + # cannot check it but the refcount should now be 1 (the ref held + # by the library is still there, we didn't call release() + obj = None + + # When we get the object back from the lib, the wrapper is + # re-created, so our refcount will be 2 once again. + obj = testhelper.floating_and_sunk_get_instance_list()[0] + self.assertEquals(obj.__grefcount__, 2) + + obj.release() + self.assertEquals(obj.__grefcount__, 1) + +class A(gobject.GObject): + def __init__(self): + super(A, self).__init__() + +class TestPythonReferenceCounting(unittest.TestCase): + # Newly created instances should alwayshave two references: one for + # the GC, and one for the bound variable in the local scope. + + def testNewInstanceHasTwoRefs(self): + obj = gobject.GObject() + self.assertEquals(sys.getrefcount(obj), 2) + + def testNewInstanceHasTwoRefsUsingGObjectNew(self): + obj = gobject.new(gobject.GObject) + self.assertEquals(sys.getrefcount(obj), 2) + + def testNewSubclassInstanceHasTwoRefs(self): + obj = A() + self.assertEquals(sys.getrefcount(obj), 2) + + def testNewSubclassInstanceHasTwoRefsUsingGObjectNew(self): + obj = gobject.new(A) + self.assertEquals(sys.getrefcount(obj), 2) diff --git a/tests/test_gresolver.py b/tests/test_gresolver.py deleted file mode 100644 index ef8585c..0000000 --- a/tests/test_gresolver.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- Mode: Python -*- - -import unittest - -import glib -import gio - - -class TestResolver(unittest.TestCase): - def setUp(self): - self.resolver = gio.resolver_get_default() - - def test_resolver_lookup_by_name(self): - addresses = self.resolver.lookup_by_name("pygtk.org", cancellable=None) - self.failUnless(isinstance(addresses[0], gio.InetAddress)) - - def test_resolver_lookup_by_address(self): - address = gio.inet_address_new_from_string("8.8.8.8") - dns = self.resolver.lookup_by_address(address, cancellable=None) - self.failUnlessEqual(dns, "google-public-dns-a.google.com") - - def test_resolver_lookup_by_name_async(self): - def callback(resolver, result): - try: - addresses = resolver.lookup_by_name_finish(result) - self.failUnless(isinstance(addresses[0], gio.InetAddress)) - finally: - loop.quit() - - self.resolver.lookup_by_name_async(callback, "pygtk.org") - - loop = glib.MainLoop() - loop.run() - - def test_resolver_lookup_by_address_async(self): - def callback(resolver, result): - try: - dns = resolver.lookup_by_address_finish(result) - self.failUnlessEqual(dns, "google-public-dns-b.google.com") - finally: - loop.quit() - - address = gio.inet_address_new_from_string("8.8.4.4") - self.resolver.lookup_by_address_async(callback, address) - - loop = glib.MainLoop() - loop.run() - - def test_resolver_lookup_service(self): - targets = self.resolver.lookup_service("xmpp-client", "tcp", "google.com") - self.failUnless(isinstance(targets[0], gio.SrvTarget)) - - def test_resolver_lookup_service_async(self): - def callback(resolver, result): - try: - targets = resolver.lookup_service_finish(result) - self.failUnless(isinstance(targets[0], gio.SrvTarget)) - finally: - loop.quit() - - self.resolver.lookup_service_async(callback, "xmpp-client", "tcp", "google.com") - - loop = glib.MainLoop() - loop.run() - diff --git a/tests/test_gsocket.py b/tests/test_gsocket.py deleted file mode 100644 index 627f6fd..0000000 --- a/tests/test_gsocket.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- Mode: Python -*- - -import os -import unittest - -import glib -import gobject -import gio - - -class TestSocket(unittest.TestCase): - def setUp(self): - self.sock = gio.Socket(gio.SOCKET_FAMILY_IPV4, - gio.SOCKET_TYPE_STREAM, - gio.SOCKET_PROTOCOL_TCP) - - def test_socket_condition_check(self): - check = self.sock.condition_check(glib.IO_OUT) - self.failUnless(isinstance(check, gobject.GFlags)) - self.failUnlessEqual(check, glib.IO_OUT | glib.IO_HUP) - - def test_socket_condition_wait(self): - res = self.sock.condition_wait(glib.IO_OUT) - self.failUnless(res) - - def tearDown(self): - self.sock.close() - -class TestSocketAddress(unittest.TestCase): - def test_socket_address_enumerator_next_async(self): - def callback(enumerator, result): - try: - address = enumerator.next_finish(result) - self.failUnless(isinstance(address, gio.SocketAddress)) - finally: - loop.quit() - - socket = gio.NetworkAddress("www.pygtk.org", 80) - enumerator = socket.enumerate() - enumerator.next_async(callback) - - loop = glib.MainLoop() - loop.run() - -class TestSocketListener(unittest.TestCase): - def test_socket_listener_add_address(self): - address = gio.inet_address_new_from_string("127.0.0.1") - inetsock = gio.InetSocketAddress(address, 1024) - - listener = gio.SocketListener() - effective = listener.add_address(inetsock, gio.SOCKET_TYPE_STREAM, gio.SOCKET_PROTOCOL_TCP) - self.failUnless(isinstance(effective, gio.InetSocketAddress)) - - def test_socket_listener_accept(self): - address = gio.inet_address_new_from_string("127.0.0.1") - inetsock = gio.InetSocketAddress(address, 1024) - - listener = gio.SocketListener() - listener.add_address(inetsock, gio.SOCKET_TYPE_STREAM, gio.SOCKET_PROTOCOL_TCP) - - client = gio.SocketClient() - client.connect_to_host("127.0.0.1:1024", 1024) - - connection, source = listener.accept(cancellable=None) - self.failUnless(isinstance(connection, gio.TcpConnection)) - - def test_socket_listener_accept_socket(self): - address = gio.inet_address_new_from_string("127.0.0.1") - inetsock = gio.InetSocketAddress(address, 1024) - - listener = gio.SocketListener() - listener.add_address(inetsock, gio.SOCKET_TYPE_STREAM, gio.SOCKET_PROTOCOL_TCP) - - client = gio.SocketClient() - client.connect_to_host("127.0.0.1:1024", 1024) - - socket, source = listener.accept_socket(cancellable=None) - self.failUnless(isinstance(socket, gio.Socket)) - - def test_socket_listener_accept_async(self): - def callback(listener, result): - try: - connection, source = listener.accept_finish(result) - self.failUnless(isinstance(connection, gio.TcpConnection)) - finally: - loop.quit() - - address = gio.inet_address_new_from_string("127.0.0.1") - inetsock = gio.InetSocketAddress(address, 1024) - - listener = gio.SocketListener() - listener.add_address(inetsock, - gio.SOCKET_TYPE_STREAM, - gio.SOCKET_PROTOCOL_TCP) - - client = gio.SocketClient() - client.connect_to_host("127.0.0.1:1024", 1024) - - listener.accept_async(callback) - - loop = glib.MainLoop() - loop.run() - - def test_socket_listener_accept_socket_async(self): - def callback(listener, result): - try: - socket, source = listener.accept_socket_finish(result) - self.failUnless(isinstance(socket, gio.Socket)) - finally: - loop.quit() - - address = gio.inet_address_new_from_string("127.0.0.1") - inetsock = gio.InetSocketAddress(address, 1024) - - listener = gio.SocketListener() - listener.add_address(inetsock, - gio.SOCKET_TYPE_STREAM, - gio.SOCKET_PROTOCOL_TCP) - - client = gio.SocketClient() - client.connect_to_host("127.0.0.1:1024", 1024) - - listener.accept_socket_async(callback) - - loop = glib.MainLoop() - loop.run() diff --git a/tests/test_overrides.py b/tests/test_overrides.py index 79c7093..766beaf 100644 --- a/tests/test_overrides.py +++ b/tests/test_overrides.py @@ -1,47 +1,344 @@ # -*- Mode: Python; py-indent-offset: 4 -*- # vim: tabstop=4 shiftwidth=4 expandtab -import pygtk -pygtk.require("2.0") - import unittest import sys +import os sys.path.insert(0, "../") +from compathelper import _long, _unicode + from gi.repository import GLib from gi.repository import GObject from gi.repository import Gdk from gi.repository import Gtk +from gi.repository import Gio +from gi.repository import Pango +from gi.repository import GdkPixbuf import gi.overrides as overrides import gi.types class TestGLib(unittest.TestCase): - def test_gvariant(self): + def test_gvariant_create(self): + # simple values + variant = GLib.Variant('i', 42) self.assertTrue(isinstance(variant, GLib.Variant)) self.assertEquals(variant.get_int32(), 42) - variant = GLib.Variant('(ss)', 'mec', 'mac') + variant = GLib.Variant('s', '') + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertEquals(variant.get_string(), '') + + variant = GLib.Variant('s', 'hello') + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertEquals(variant.get_string(), 'hello') + + # boxed variant + variant = GLib.Variant('v', GLib.Variant('i', 42)) + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertTrue(isinstance(variant.get_variant(), GLib.Variant)) + self.assertEqual(variant.get_type_string(), 'v') + self.assertEqual(variant.get_variant().get_type_string(), 'i') + self.assertEquals(variant.get_variant().get_int32(), 42) + + variant = GLib.Variant('v', GLib.Variant('v', GLib.Variant('i', 42))) + self.assertEqual(variant.get_type_string(), 'v') + self.assertEqual(variant.get_variant().get_type_string(), 'v') + self.assertEqual(variant.get_variant().get_variant().get_type_string(), 'i') + self.assertEquals(variant.get_variant().get_variant().get_int32(), 42) + + # tuples + + variant = GLib.Variant('()', ()) + self.assertEqual(variant.get_type_string(), '()') + self.assertEquals(variant.n_children(), 0) + + variant = GLib.Variant('(i)', (3,)) + self.assertEqual(variant.get_type_string(), '(i)') + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertEquals(variant.n_children(), 1) + self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant)) + self.assertEquals(variant.get_child_value(0).get_int32(), 3) + + variant = GLib.Variant('(ss)', ('mec', 'mac')) + self.assertEqual(variant.get_type_string(), '(ss)') self.assertTrue(isinstance(variant, GLib.Variant)) self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant)) self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant)) self.assertEquals(variant.get_child_value(0).get_string(), 'mec') self.assertEquals(variant.get_child_value(1).get_string(), 'mac') - variant = GLib.Variant('a{si}', {'key1': 1, 'key2': 2}) + # nested tuples + variant = GLib.Variant('((si)(ub))', (('hello', -1), (42, True))) + self.assertEqual(variant.get_type_string(), '((si)(ub))') + self.assertEqual(variant.unpack(), (('hello', -1), (_long(42), True))) + + # dictionaries + + variant = GLib.Variant('a{si}', {}) + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertEqual(variant.get_type_string(), 'a{si}') + self.assertEquals(variant.n_children(), 0) + + variant = GLib.Variant('a{si}', {'': 1, 'key1': 2, 'key2': 3}) + self.assertEqual(variant.get_type_string(), 'a{si}') + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant)) + self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant)) + self.assertTrue(isinstance(variant.get_child_value(2), GLib.Variant)) + self.assertEqual(variant.unpack(), {'': 1, 'key1': 2, 'key2': 3}) + + # nested dictionaries + variant = GLib.Variant('a{sa{si}}', {}) + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertEqual(variant.get_type_string(), 'a{sa{si}}') + self.assertEquals(variant.n_children(), 0) + + d = {'': {'': 1, 'keyn1': 2}, + 'key1': {'key11': 11, 'key12': 12}} + variant = GLib.Variant('a{sa{si}}', d) + self.assertEqual(variant.get_type_string(), 'a{sa{si}}') + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertEqual(variant.unpack(), d) + + # arrays + + variant = GLib.Variant('ai', []) + self.assertEqual(variant.get_type_string(), 'ai') + self.assertEquals(variant.n_children(), 0) + + variant = GLib.Variant('ai', [1, 2]) + self.assertEqual(variant.get_type_string(), 'ai') self.assertTrue(isinstance(variant, GLib.Variant)) self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant)) self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant)) - # Looks like order is not preserved - self.assertEquals(variant.get_child_value(1).get_child_value(0).get_string(), 'key1') - self.assertEquals(variant.get_child_value(1).get_child_value(1).get_int32(), 1) - self.assertEquals(variant.get_child_value(0).get_child_value(0).get_string(), 'key2') - self.assertEquals(variant.get_child_value(0).get_child_value(1).get_int32(), 2) + self.assertEquals(variant.get_child_value(0).get_int32(), 1) + self.assertEquals(variant.get_child_value(1).get_int32(), 2) + + variant = GLib.Variant('as', []) + self.assertEqual(variant.get_type_string(), 'as') + self.assertEquals(variant.n_children(), 0) + + variant = GLib.Variant('as', ['']) + self.assertEqual(variant.get_type_string(), 'as') + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant)) + self.assertEquals(variant.get_child_value(0).get_string(), '') + + variant = GLib.Variant('as', ['hello', 'world']) + self.assertEqual(variant.get_type_string(), 'as') + self.assertTrue(isinstance(variant, GLib.Variant)) + self.assertTrue(isinstance(variant.get_child_value(0), GLib.Variant)) + self.assertTrue(isinstance(variant.get_child_value(1), GLib.Variant)) + self.assertEquals(variant.get_child_value(0).get_string(), 'hello') + self.assertEquals(variant.get_child_value(1).get_string(), 'world') + + # nested arrays + variant = GLib.Variant('aai', []) + self.assertEqual(variant.get_type_string(), 'aai') + self.assertEquals(variant.n_children(), 0) + + variant = GLib.Variant('aai', [[]]) + self.assertEqual(variant.get_type_string(), 'aai') + self.assertEquals(variant.n_children(), 1) + self.assertEquals(variant.get_child_value(0).n_children(), 0) + + variant = GLib.Variant('aai', [[1, 2], [3, 4, 5]]) + self.assertEqual(variant.get_type_string(), 'aai') + self.assertEquals(variant.unpack(), [[1, 2], [3, 4, 5]]) + + # + # complex types + # + + variant = GLib.Variant('(as)', ([],)) + self.assertEqual(variant.get_type_string(), '(as)') + self.assertEquals(variant.n_children(), 1) + self.assertEquals(variant.get_child_value(0).n_children(), 0) + + variant = GLib.Variant('(as)', ([''],)) + self.assertEqual(variant.get_type_string(), '(as)') + self.assertEquals(variant.n_children(), 1) + self.assertEquals(variant.get_child_value(0).n_children(), 1) + self.assertEquals(variant.get_child_value(0).get_child_value(0).get_string(), '') + + variant = GLib.Variant('(as)', (['hello'],)) + self.assertEqual(variant.get_type_string(), '(as)') + self.assertEquals(variant.n_children(), 1) + self.assertEquals(variant.get_child_value(0).n_children(), 1) + self.assertEquals(variant.get_child_value(0).get_child_value(0).get_string(), 'hello') + + obj = {'a1': (1, True), 'a2': (2, False)} + variant = GLib.Variant('a{s(ib)}', obj) + self.assertEqual(variant.get_type_string(), 'a{s(ib)}') + self.assertEqual(variant.unpack(), obj) + + obj = {'a1': (1, GLib.Variant('b', True)), 'a2': (2, GLib.Variant('y', 255))} + variant = GLib.Variant('a{s(iv)}', obj) + self.assertEqual(variant.get_type_string(), 'a{s(iv)}') + self.assertEqual(variant.unpack(), {'a1': (1, True), 'a2': (2, 255)}) + + obj = (1, {'a': {'a1': True, 'a2': False}, + 'b': {'b1': False}, + 'c': {} + }, + 'foo') + variant = GLib.Variant('(ia{sa{sb}}s)', obj) + self.assertEqual(variant.get_type_string(), '(ia{sa{sb}}s)') + self.assertEqual(variant.unpack(), obj) + + def test_gvariant_create_errors(self): + # excess arguments + self.assertRaises(TypeError, GLib.Variant, 'i', 42, 3) + self.assertRaises(TypeError, GLib.Variant, '(i)', (42, 3)) + + # not enough arguments + self.assertRaises(TypeError, GLib.Variant, '(ii)', (42,)) + + # data type mismatch + self.assertRaises(TypeError, GLib.Variant, 'i', 'hello') + self.assertRaises(TypeError, GLib.Variant, 's', 42) + self.assertRaises(TypeError, GLib.Variant, '(ss)', 'mec', 'mac') + + # unimplemented data type + self.assertRaises(NotImplementedError, GLib.Variant, 'Q', 1) + + def test_gvariant_unpack(self): + # simple values + res = GLib.Variant.new_int32(-42).unpack() + self.assertEqual(res, -42) + + res = GLib.Variant.new_uint64(34359738368).unpack() + self.assertEqual(res, 34359738368) + + res = GLib.Variant.new_boolean(True).unpack() + self.assertEqual(res, True) + + res = GLib.Variant.new_object_path('/foo/Bar').unpack() + self.assertEqual(res, '/foo/Bar') + + # variant + res = GLib.Variant('v', GLib.Variant.new_int32(-42)).unpack() + self.assertEqual(res, -42) + + variant = GLib.Variant('v', GLib.Variant('v', GLib.Variant('i', 42))) + self.assertEqual(res, -42) + + # tuple + res = GLib.Variant.new_tuple(GLib.Variant.new_int32(-1), + GLib.Variant.new_string('hello')).unpack() + self.assertEqual(res, (-1, 'hello')) + + # array + vb = GLib.VariantBuilder() + vb.init(gi._gi.variant_type_from_string('ai')) + vb.add_value(GLib.Variant.new_int32(-1)) + vb.add_value(GLib.Variant.new_int32(3)) + res = vb.end().unpack() + self.assertEqual(res, [-1, 3]) + + # dictionary + res = GLib.Variant('a{si}', {'key1': 1, 'key2': 2}).unpack() + self.assertEqual(res, {'key1': 1, 'key2': 2}) + + def test_gvariant_iteration(self): + # array index access + vb = GLib.VariantBuilder() + vb.init(gi._gi.variant_type_from_string('ai')) + vb.add_value(GLib.Variant.new_int32(-1)) + vb.add_value(GLib.Variant.new_int32(3)) + v = vb.end() + + self.assertEqual(len(v), 2) + self.assertEqual(v[0], -1) + self.assertEqual(v[1], 3) + self.assertEqual(v[-1], 3) + self.assertEqual(v[-2], -1) + self.assertRaises(IndexError, v.__getitem__, 2) + self.assertRaises(IndexError, v.__getitem__, -3) + self.assertRaises(ValueError, v.__getitem__, 'a') + + # array iteration + self.assertEqual([x for x in v], [-1, 3]) + self.assertEqual(list(v), [-1, 3]) + + # tuple index access + v = GLib.Variant.new_tuple(GLib.Variant.new_int32(-1), + GLib.Variant.new_string('hello')) + self.assertEqual(len(v), 2) + self.assertEqual(v[0], -1) + self.assertEqual(v[1], 'hello') + self.assertEqual(v[-1], 'hello') + self.assertEqual(v[-2], -1) + self.assertRaises(IndexError, v.__getitem__, 2) + self.assertRaises(IndexError, v.__getitem__, -3) + self.assertRaises(ValueError, v.__getitem__, 'a') + + # tuple iteration + self.assertEqual([x for x in v], [-1, 'hello']) + self.assertEqual(tuple(v), (-1, 'hello')) + + # dictionary index access + vsi = GLib.Variant('a{si}', {'key1': 1, 'key2': 2}) + vis = GLib.Variant('a{is}', {1: 'val1', 5: 'val2'}) + + self.assertEqual(len(vsi), 2) + self.assertEqual(vsi['key1'], 1) + self.assertEqual(vsi['key2'], 2) + self.assertRaises(KeyError, vsi.__getitem__, 'unknown') + + self.assertEqual(len(vis), 2) + self.assertEqual(vis[1], 'val1') + self.assertEqual(vis[5], 'val2') + self.assertRaises(KeyError, vsi.__getitem__, 3) + + # dictionary iteration + self.assertEqual(set(vsi.keys()), set(['key1', 'key2'])) + self.assertEqual(set(vis.keys()), set([1, 5])) + + # string index access + v = GLib.Variant('s', 'hello') + self.assertEqual(len(v), 5) + self.assertEqual(v[0], 'h') + self.assertEqual(v[4], 'o') + self.assertEqual(v[-1], 'o') + self.assertEqual(v[-5], 'h') + self.assertRaises(IndexError, v.__getitem__, 5) + self.assertRaises(IndexError, v.__getitem__, -6) + + # string iteration + self.assertEqual([x for x in v], ['h', 'e', 'l', 'l', 'o']) + +class TestPango(unittest.TestCase): + + def test_default_font_description(self): + desc = Pango.FontDescription() + self.assertEquals(desc.get_variant(), Pango.Variant.NORMAL) + + def test_font_description(self): + desc = Pango.FontDescription('monospace') + self.assertEquals(desc.get_family(), 'monospace') + self.assertEquals(desc.get_variant(), Pango.Variant.NORMAL) + + def test_layout(self): + self.assertRaises(TypeError, Pango.Layout) + context = Pango.Context() + layout = Pango.Layout(context) + self.assertEquals(layout.get_context(), context) class TestGdk(unittest.TestCase): + def test_constructor(self): + attribute = Gdk.WindowAttr() + attribute.window_type = Gdk.WindowType.CHILD + attributes_mask = Gdk.WindowAttributesType.X | \ + Gdk.WindowAttributesType.Y + window = Gdk.Window(None, attribute, attributes_mask) + self.assertEquals(window.get_window_type(), Gdk.WindowType.CHILD) + def test_color(self): color = Gdk.Color(100, 200, 300) self.assertEquals(color.red, 100) @@ -58,22 +355,48 @@ class TestGdk(unittest.TestCase): self.assertEquals(event.x_root, 0) self.assertEquals(event.y_root, 5) + event = Gdk.Event() + event.type = Gdk.EventType.SCROLL + self.assertRaises(AttributeError, lambda: getattr(event, 'foo_bar')) + class TestGtk(unittest.TestCase): - def test_uimanager(self): - self.assertEquals(Gtk.UIManager, overrides.Gtk.UIManager) - ui = Gtk.UIManager() - ui.add_ui_from_string( -""" - - - -""" -) - menubar = ui.get_widget("/menubar1") - self.assertEquals(type(menubar), Gtk.MenuBar) + + def test_container(self): + box = Gtk.Box() + self.assertTrue(box) + label = Gtk.Label() + label2 = Gtk.Label() + box.add(label) + box.add(label2) + self.assertTrue(label in box) + self.assertTrue(label2 in box) + self.assertEqual(len(box), 2) + self.assertTrue(box) + l = [x for x in box] + self.assertEqual(l, [label, label2]) + + def test_actions(self): + self.assertEquals(Gtk.Action, overrides.Gtk.Action) + self.assertRaises(TypeError, Gtk.Action) + action = Gtk.Action("test", "Test", "Test Action", Gtk.STOCK_COPY) + self.assertEquals(action.get_name(), "test") + self.assertEquals(action.get_label(), "Test") + self.assertEquals(action.get_tooltip(), "Test Action") + self.assertEquals(action.get_stock_id(), Gtk.STOCK_COPY) + + self.assertEquals(Gtk.RadioAction, overrides.Gtk.RadioAction) + self.assertRaises(TypeError, Gtk.RadioAction) + action = Gtk.RadioAction("test", "Test", "Test Action", Gtk.STOCK_COPY, 1) + self.assertEquals(action.get_name(), "test") + self.assertEquals(action.get_label(), "Test") + self.assertEquals(action.get_tooltip(), "Test Action") + self.assertEquals(action.get_stock_id(), Gtk.STOCK_COPY) + self.assertEquals(action.get_current_value(), 1) def test_actiongroup(self): self.assertEquals(Gtk.ActionGroup, overrides.Gtk.ActionGroup) + self.assertRaises(TypeError, Gtk.ActionGroup) + action_group = Gtk.ActionGroup (name = 'TestActionGroup') callback_data = "callback data" @@ -99,18 +422,40 @@ class TestGtk(unittest.TestCase): test_radio_action_callback_data, callback_data) - expected_results = (('test-action1', Gtk.Action), + expected_results = [('test-action1', Gtk.Action), ('test-action2', Gtk.Action), ('test-toggle-action1', Gtk.ToggleAction), ('test-toggle-action2', Gtk.ToggleAction), ('test-radio-action1', Gtk.RadioAction), - ('test-radio-action2', Gtk.RadioAction)) + ('test-radio-action2', Gtk.RadioAction)] - for action, cmp in zip(action_group.list_actions(), expected_results): + for action in action_group.list_actions(): a = (action.get_name(), type(action)) - self.assertEquals(a,cmp) + self.assertTrue(a in expected_results) + expected_results.remove(a) action.activate() + def test_uimanager(self): + self.assertEquals(Gtk.UIManager, overrides.Gtk.UIManager) + ui = Gtk.UIManager() + ui.add_ui_from_string( +""" + + + +""" +) + menubar = ui.get_widget("/menubar1") + self.assertEquals(type(menubar), Gtk.MenuBar) + + ag = Gtk.ActionGroup (name="ag1") + ui.insert_action_group(ag) + ag2 = Gtk.ActionGroup (name="ag2") + ui.insert_action_group(ag2) + groups = ui.get_action_groups() + self.assertEquals(ag, groups[-2]) + self.assertEquals(ag2, groups[-1]) + def test_builder(self): self.assertEquals(Gtk.Builder, overrides.Gtk.Builder) @@ -214,6 +559,14 @@ class TestGtk(unittest.TestCase): text = dialog.get_property('text') self.assertEquals('dude!', text) + dialog.format_secondary_text('2nd text') + self.assertEqual(dialog.get_property('secondary-text'), '2nd text') + self.assertFalse(dialog.get_property('secondary-use-markup')) + + dialog.format_secondary_markup('2nd markup') + self.assertEqual(dialog.get_property('secondary-text'), '2nd markup') + self.assertTrue(dialog.get_property('secondary-use-markup')) + # Gtk.ColorSelectionDialog dialog = Gtk.ColorSelectionDialog("color selection dialog test") self.assertEquals('color selection dialog test', dialog.get_title()) @@ -332,7 +685,7 @@ class TestGtk(unittest.TestCase): test_pylist = [1,"2", "3"] list_store = Gtk.ListStore(int, str, 'GIOverrideTreeAPITest', object, object, object) - for i in range(95): + for i in range(93): label = 'this is row #%d' % i testobj = TestGtk.TestClass(self, i, label) parent = list_store.append((i, @@ -342,6 +695,26 @@ class TestGtk(unittest.TestCase): test_pydict, test_pylist)) + i = 93 + label = _unicode('this is row #93') + treeiter = list_store.append() + list_store.set_value(treeiter, 0, i) + list_store.set_value(treeiter, 1, label) + list_store.set_value(treeiter, 2, TestGtk.TestClass(self, i, label)) + list_store.set_value(treeiter, 3, test_pyobj) + list_store.set_value(treeiter, 4, test_pydict) + list_store.set_value(treeiter, 5, test_pylist) + + # test automatic unicode->str conversion + i = 94 + label = _unicode('this is row #94') + treeiter = list_store.append((i, + label, + TestGtk.TestClass(self, i, label), + test_pyobj, + test_pydict, + test_pylist)) + # add sorted items out of order to test insert* apis i = 97 label = 'this is row #97' @@ -415,6 +788,30 @@ class TestGtk(unittest.TestCase): self.assertEquals(i, 99) + def test_tree_path(self): + p1 = Gtk.TreePath() + p2 = Gtk.TreePath.new_first() + self.assertEqual(p1, p2) + self.assertEqual(str(p1), '0') + p1 = Gtk.TreePath(2) + p2 = Gtk.TreePath.new_from_string('2') + self.assertEqual(p1, p2) + self.assertEqual(str(p1), '2') + p1 = Gtk.TreePath('1:2:3') + p2 = Gtk.TreePath.new_from_string('1:2:3') + self.assertEqual(p1, p2) + self.assertEqual(str(p1), '1:2:3') + p1 = Gtk.TreePath((1,2,3)) + p2 = Gtk.TreePath.new_from_string('1:2:3') + self.assertEqual(p1, p2) + self.assertEqual(str(p1), '1:2:3') + self.assertTrue(p1 != None) + self.assertFalse(p1 == None) + self.assertTrue(p1 > None) + self.assertTrue(p1 >= None) + self.assertFalse(p1 < None) + self.assertFalse(p1 <= None) + def test_tree_model(self): tree_store = Gtk.TreeStore(int, str) @@ -445,9 +842,15 @@ class TestGtk(unittest.TestCase): for row in tree_store: self.fail("Should not be reached") + class DerivedIntType(int): + pass + + class DerivedStrType(str): + pass + for i in range(100): label = 'this is row #%d' % i - parent = tree_store.append(None, (i, label,)) + parent = tree_store.append(None, (DerivedIntType(i), DerivedStrType(label),)) self.assertNotEquals(parent, None) for j in range(20): label = 'this is child #%d of node #%d' % (j, i) @@ -563,6 +966,12 @@ class TestGtk(unittest.TestCase): for childrow in last_row.iterchildren(): self.fail("Should not be reached") + aiter = tree_store.get_iter(10) + self.assertRaises(TypeError, tree_store.get, aiter, 1, 'a') + self.assertRaises(ValueError, tree_store.get, aiter, 1, -1) + self.assertRaises(ValueError, tree_store.get, aiter, 1, 100) + self.assertEqual(tree_store.get(aiter, 0, 1), (10, 'this is row #10')) + def test_tree_view_column(self): cell = Gtk.CellRendererText() column = Gtk.TreeViewColumn(title='This is just a test', @@ -570,6 +979,35 @@ class TestGtk(unittest.TestCase): text=0, style=2) + def test_tree_selection(self): + store = Gtk.ListStore(int, str) + for i in range(10): + store.append((i, "foo")) + view = Gtk.TreeView() + view.set_model(store) + firstpath = store.get_path(store.get_iter_first()) + sel = view.get_selection() + + sel.select_path(firstpath) + (m, s) = sel.get_selected() + self.assertEqual(m, store) + self.assertEqual(store.get_path(s), firstpath) + + sel.select_path(0) + (m, s) = sel.get_selected() + self.assertEqual(m, store) + self.assertEqual(store.get_path(s), firstpath) + + sel.select_path("0:0") + (m, s) = sel.get_selected() + self.assertEqual(m, store) + self.assertEqual(store.get_path(s), firstpath) + + sel.select_path((0,0)) + (m, s) = sel.get_selected() + self.assertEqual(m, store) + self.assertEqual(store.get_path(s), firstpath) + def test_text_buffer(self): self.assertEquals(Gtk.TextBuffer, overrides.Gtk.TextBuffer) buffer = Gtk.TextBuffer() @@ -580,6 +1018,19 @@ class TestGtk(unittest.TestCase): (start, end) = buffer.get_bounds() + mark = buffer.create_mark(None, start) + self.assertFalse(mark.get_left_gravity()) + + buffer.set_text('Hello Jane Hello Bob') + (start, end) = buffer.get_bounds() + text = buffer.get_text(start, end, False) + self.assertEquals(text, 'Hello Jane Hello Bob') + + buffer.set_text('') + (start, end) = buffer.get_bounds() + text = buffer.get_text(start, end, False) + self.assertEquals(text, '') + buffer.insert(end, 'HelloHello') buffer.insert(end, ' Bob') @@ -590,9 +1041,47 @@ class TestGtk(unittest.TestCase): (start, end) = buffer.get_bounds() text = buffer.get_text(start, end, False) - self.assertEquals(text, 'Hello Jane Hello Bob') + sel = buffer.get_selection_bounds() + self.assertEquals(sel, ()) + buffer.select_range(start, end) + sel = buffer.get_selection_bounds() + self.assertTrue(sel[0].equal(start)) + self.assertTrue(sel[1].equal(end)) + + buffer.set_text('') + buffer.insert_with_tags(buffer.get_start_iter(), 'HelloHello', tag) + (start, end) = buffer.get_bounds() + self.assertTrue(start.begins_tag(tag)) + self.assertTrue(start.has_tag(tag)) + + buffer.set_text('') + buffer.insert_with_tags_by_name(buffer.get_start_iter(), 'HelloHello', 'title') + (start, end) = buffer.get_bounds() + self.assertTrue(start.begins_tag(tag)) + self.assertTrue(start.has_tag(tag)) + + self.assertRaises(ValueError, buffer.insert_with_tags_by_name, + buffer.get_start_iter(), 'HelloHello', 'unknowntag') + + def test_text_iter(self): + self.assertEquals(Gtk.TextIter, overrides.Gtk.TextIter) + buffer = Gtk.TextBuffer() + buffer.set_text('Hello Jane Hello Bob') + tag = buffer.create_tag ('title', font = 'Sans 18') + (start, end) = buffer.get_bounds() + start.forward_chars(10) + buffer.apply_tag(tag, start, end) + self.assertTrue(start.begins_tag()) + self.assertTrue(end.ends_tag()) + self.assertTrue(start.toggles_tag()) + self.assertTrue(end.toggles_tag()) + start.backward_chars(1) + self.assertFalse(start.begins_tag()) + self.assertFalse(start.ends_tag()) + self.assertFalse(start.toggles_tag()) + def test_buttons(self): self.assertEquals(Gtk.Button, overrides.Gtk.Button) @@ -603,6 +1092,12 @@ class TestGtk(unittest.TestCase): self.assertTrue(button.get_use_stock()) self.assertTrue(button.get_use_underline()) + # test Gtk.LinkButton + self.assertRaises(TypeError, Gtk.LinkButton) + button = Gtk.LinkButton('http://www.gtk.org', 'Gtk') + self.assertEquals('http://www.gtk.org', button.get_uri()) + self.assertEquals('Gtk', button.get_label()) + def test_inheritance(self): for name in overrides.Gtk.__all__: over = getattr(overrides.Gtk, name) @@ -640,3 +1135,192 @@ class TestGtk(unittest.TestCase): self.assertEquals(pos, 6) text = entry.get_chars(0, 11) self.assertEquals('Hello World', text) + + def test_label(self): + label = Gtk.Label('Hello') + self.assertEquals(label.get_text(), 'Hello') + + def adjustment_check(self, adjustment, value=0.0, lower=0.0, upper=0.0, + step_increment=0.0, page_increment=0.0, page_size=0.0): + self.assertEquals(adjustment.get_value(), value) + self.assertEquals(adjustment.get_lower(), lower) + self.assertEquals(adjustment.get_upper(), upper) + self.assertEquals(adjustment.get_step_increment(), step_increment) + self.assertEquals(adjustment.get_page_increment(), page_increment) + self.assertEquals(adjustment.get_page_size(), page_size) + + def test_adjustment(self): + adjustment = Gtk.Adjustment(1, 0, 6, 4, 5, 3) + self.adjustment_check(adjustment, 1, 0, 6, 4, 5, 3) + + adjustment = Gtk.Adjustment(1, 0, 6, 4, 5) + self.adjustment_check(adjustment, 1, 0, 6, 4, 5) + + adjustment = Gtk.Adjustment(1, 0, 6, 4) + self.adjustment_check(adjustment, 1, 0, 6, 4) + + adjustment = Gtk.Adjustment(1, 0, 6) + self.adjustment_check(adjustment, 1, 0, 6) + + adjustment = Gtk.Adjustment() + self.adjustment_check(adjustment) + + adjustment = Gtk.Adjustment(value=1, lower=0, upper=6, + step_increment=4, page_increment=5, page_size=3) + self.adjustment_check(adjustment, 1, 0, 6, 4, 5, 3) + + def test_table(self): + table = Gtk.Table() + self.assertEquals(table.get_size(), (1,1)) + self.assertEquals(table.get_homogeneous(), False) + table = Gtk.Table(2, 3) + self.assertEquals(table.get_size(), (2,3)) + self.assertEquals(table.get_homogeneous(), False) + table = Gtk.Table(2, 3, True) + self.assertEquals(table.get_size(), (2,3)) + self.assertEquals(table.get_homogeneous(), True) + + label = Gtk.Label('Hello') + table.attach(label, 0, 1, 0, 1) + self.assertEquals(label, table.get_children()[0]) + + def test_scrolledwindow(self): + sw = Gtk.ScrolledWindow() + sb = sw.get_hscrollbar() + self.assertEquals(sw.get_hadjustment(), sb.get_adjustment()) + sb = sw.get_vscrollbar() + self.assertEquals(sw.get_vadjustment(), sb.get_adjustment()) + + def test_widget_drag_methods(self): + widget = Gtk.Button() + + # here we are not checking functionality, only that the methods exist + # and except the right number of arguments + + widget.drag_check_threshold(0, 0, 0, 0) + + # drag_dest_ methods + widget.drag_dest_set(Gtk.DestDefaults.DROP, None, Gdk.DragAction.COPY) + widget.drag_dest_add_image_targets() + widget.drag_dest_add_text_targets() + widget.drag_dest_add_uri_targets() + widget.drag_dest_get_track_motion() + widget.drag_dest_set_track_motion(True) + widget.drag_dest_get_target_list() + widget.drag_dest_set_target_list(Gtk.TargetList.new([Gtk.TargetEntry()])) + widget.drag_dest_unset() + + widget.drag_highlight() + widget.drag_unhighlight() + + # drag_source_ methods + widget.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, None, Gdk.DragAction.MOVE) + widget.drag_source_add_image_targets() + widget.drag_source_add_text_targets() + widget.drag_source_add_uri_targets() + widget.drag_source_set_icon_name("") + widget.drag_source_set_icon_pixbuf(GdkPixbuf.Pixbuf()) + widget.drag_source_set_icon_stock("") + widget.drag_source_get_target_list() + widget.drag_source_set_target_list(Gtk.TargetList.new([Gtk.TargetEntry()])) + widget.drag_source_unset() + + # these methods cannot be called because they require a valid drag on + # a real GdkWindow. So we only check that they exist and are callable. + self.assertTrue(hasattr(widget.drag_dest_set_proxy, '__call__')) + self.assertTrue(hasattr(widget.drag_get_data, '__call__')) + +class TestGio(unittest.TestCase): + def setUp(self): + os.environ['GSETTINGS_BACKEND'] = 'memory' + os.environ['GSETTINGS_SCHEMA_DIR'] = os.path.dirname(__file__) + self.settings = Gio.Settings('org.gnome.test') + # we change the values in the tests, so set them to predictable start + # value + self.settings.reset('test-string') + self.settings.reset('test-array') + + def test_file_enumerator(self): + self.assertEquals(Gio.FileEnumerator, overrides.Gio.FileEnumerator) + f = Gio.file_new_for_path("./") + + iter_info = [] + for info in f.enumerate_children("standard::*", 0, None): + iter_info.append(info.get_name()) + + next_info = [] + enumerator = f.enumerate_children("standard::*", 0, None) + while True: + info = enumerator.next_file(None) + if info is None: + break + next_info.append(info.get_name()) + + self.assertEquals(iter_info, next_info) + + def test_gsettings_native(self): + self.assertTrue('test-array' in self.settings.list_keys()) + + # get various types + v = self.settings.get_value('test-boolean') + self.assertEqual(v.get_boolean(), True) + self.assertEqual(self.settings.get_boolean('test-boolean'), True) + + v = self.settings.get_value('test-string') + self.assertEqual(v.get_string(), 'Hello') + self.assertEqual(self.settings.get_string('test-string'), 'Hello') + + v = self.settings.get_value('test-array') + self.assertEqual(v.unpack(), [1, 2]) + + v = self.settings.get_value('test-tuple') + self.assertEqual(v.unpack(), (1, 2)) + + # set a value + self.settings.set_string('test-string', 'World') + self.assertEqual(self.settings.get_string('test-string'), 'World') + + self.settings.set_value('test-string', GLib.Variant('s', 'Goodbye')) + self.assertEqual(self.settings.get_string('test-string'), 'Goodbye') + + def test_gsettings_constructor(self): + # default constructor uses path from schema + self.assertEqual(self.settings.get_property('path'), '/tests/') + + # optional constructor arguments + with_path = Gio.Settings('org.gnome.nopathtest', path='/mypath/') + self.assertEqual(with_path.get_property('path'), '/mypath/') + self.assertEqual(with_path['np-int'], 42) + + def test_gsettings_override(self): + # dictionary interface + self.assertEqual(len(self.settings), 4) + self.assertTrue('test-array' in self.settings) + self.assertTrue('test-array' in self.settings.keys()) + self.failIf('nonexisting' in self.settings) + self.failIf(4 in self.settings) + self.assertEqual(bool(self.settings), True) + + # get various types + self.assertEqual(self.settings['test-boolean'], True) + self.assertEqual(self.settings['test-string'], 'Hello') + self.assertEqual(self.settings['test-array'], [1, 2]) + self.assertEqual(self.settings['test-tuple'], (1, 2)) + + self.assertRaises(KeyError, self.settings.__getitem__, 'unknown') + self.assertRaises(KeyError, self.settings.__getitem__, 2) + + # set a value + self.settings['test-string'] = 'Goodbye' + self.assertEqual(self.settings['test-string'], 'Goodbye') + self.settings['test-array'] = [3, 4, 5] + self.assertEqual(self.settings['test-array'], [3, 4, 5]) + + self.assertRaises(TypeError, self.settings.__setitem__, 'test-string', 1) + self.assertRaises(KeyError, self.settings.__setitem__, 'unknown', 'moo') + + def test_gsettings_empty(self): + empty = Gio.Settings('org.gnome.empty', path='/tests/') + self.assertEqual(len(empty), 0) + self.assertEqual(bool(empty), True) + self.assertEqual(empty.keys(), []) diff --git a/tests/test_properties.py b/tests/test_properties.py index 19e1136..90db3ac 100644 --- a/tests/test_properties.py +++ b/tests/test_properties.py @@ -1,3 +1,4 @@ +# coding=utf-8 import sys import struct @@ -13,6 +14,13 @@ from gobject.constants import \ G_MININT, G_MAXINT, G_MAXUINT, G_MINLONG, G_MAXLONG, \ G_MAXULONG +if sys.version_info < (3, 0): + TEST_UTF8 = "\xe2\x99\xa5" + UNICODE_UTF8 = unicode(TEST_UTF8, 'UTF-8') +else: + TEST_UTF8 = "♥" + UNICODE_UTF8 = TEST_UTF8 + from compathelper import _long class PropertyObject(GObject): @@ -71,6 +79,14 @@ class TestProperties(unittest.TestCase): self.assertEqual(obj.props.construct, "456") obj.props.construct = '789' self.assertEqual(obj.props.construct, "789") + + def testUTF8(self): + obj = new(PropertyObject, construct_only=UNICODE_UTF8) + self.assertEqual(obj.props.construct_only, TEST_UTF8) + obj.set_property('construct', UNICODE_UTF8) + self.assertEqual(obj.props.construct, TEST_UTF8) + obj.props.normal = UNICODE_UTF8 + self.assertEqual(obj.props.normal, TEST_UTF8) def testConstructOnly(self): obj = new(PropertyObject, construct_only="123") @@ -320,6 +336,15 @@ class TestProperty(unittest.TestCase): pobj1 = pobj2.obj self.assertEqual(hash(pobj1), obj1_hash) + def testObjectSubclassProperty(self): + class ObjectSubclass(GObject): + __gtype_name__ = 'ObjectSubclass' + + class PropertyObjectSubclass(GObject): + obj = gobject.property(type=ObjectSubclass) + + obj1 = PropertyObjectSubclass(obj=ObjectSubclass()) + def testPropertySubclass(self): # test for #470718 class A(GObject): diff --git a/tests/testhelpermodule.c b/tests/testhelpermodule.c index 5610a5d..4d1b44d 100644 --- a/tests/testhelpermodule.c +++ b/tests/testhelpermodule.c @@ -230,6 +230,37 @@ PYGLIB_DEFINE_TYPE("testhelper.FloatingWithSinkFunc", PyTestFloatingWithSinkFunc /* TestFloatingWithoutSinkFunc */ PYGLIB_DEFINE_TYPE("testhelper.FloatingWithoutSinkFunc", PyTestFloatingWithoutSinkFunc_Type, PyGObject); +/* TestOwnedByLibrary */ +PYGLIB_DEFINE_TYPE("testhelper.OwnedByLibrary", PyTestOwnedByLibrary_Type, PyGObject); + +static PyObject * +_wrap_test_owned_by_library_release (PyGObject *self) +{ + test_owned_by_library_release (TEST_OWNED_BY_LIBRARY (self->obj)); + return Py_None; +} + +static const PyMethodDef _PyTestOwnedByLibrary_methods[] = { + { "release", (PyCFunction)_wrap_test_owned_by_library_release, METH_NOARGS, NULL }, + { NULL, NULL, 0, NULL } +}; + +/* TestFloatingAndSunk */ +PYGLIB_DEFINE_TYPE("testhelper.FloatingAndSunk", PyTestFloatingAndSunk_Type, PyGObject); + +static PyObject * +_wrap_test_floating_and_sunk_release (PyGObject *self) +{ + test_floating_and_sunk_release (TEST_FLOATING_AND_SUNK (self->obj)); + return Py_None; +} + +static const PyMethodDef _PyTestFloatingAndSunk_methods[] = { + { "release", (PyCFunction)_wrap_test_floating_and_sunk_release, METH_NOARGS, NULL }, + { NULL, NULL, 0, NULL } +}; + + #include #include @@ -431,6 +462,52 @@ _wrap_test_gerror_exception(PyObject *self, PyObject *args) return Py_None; } +static PyObject * +_wrap_test_owned_by_library_get_instance_list (PyObject *self) +{ + PyObject *py_list, *py_obj; + GSList *list, *tmp; + + list = test_owned_by_library_get_instance_list (); + + if ((py_list = PyList_New (0)) == NULL) { + return NULL; + } + for (tmp = list; tmp != NULL; tmp = tmp->next) { + py_obj = pygobject_new (G_OBJECT (tmp->data)); + if (py_obj == NULL) { + Py_DECREF (py_list); + return NULL; + } + PyList_Append (py_list, py_obj); + Py_DECREF (py_obj); + } + return py_list; +} + +static PyObject * +_wrap_test_floating_and_sunk_get_instance_list (PyObject *self) +{ + PyObject *py_list, *py_obj; + GSList *list, *tmp; + + list = test_floating_and_sunk_get_instance_list (); + + if ((py_list = PyList_New (0)) == NULL) { + return NULL; + } + for (tmp = list; tmp != NULL; tmp = tmp->next) { + py_obj = pygobject_new (G_OBJECT (tmp->data)); + if (py_obj == NULL) { + Py_DECREF (py_list); + return NULL; + } + PyList_Append (py_list, py_obj); + Py_DECREF (py_obj); + } + return py_list; +} + static PyMethodDef testhelper_functions[] = { { "get_test_thread", (PyCFunction)_wrap_get_test_thread, METH_NOARGS }, { "get_unknown", (PyCFunction)_wrap_get_unknown, METH_NOARGS }, @@ -440,6 +517,8 @@ static PyMethodDef testhelper_functions[] = { { "test_value", (PyCFunction)_wrap_test_value, METH_VARARGS }, { "test_value_array", (PyCFunction)_wrap_test_value_array, METH_VARARGS }, { "test_gerror_exception", (PyCFunction)_wrap_test_gerror_exception, METH_VARARGS }, + { "owned_by_library_get_instance_list", (PyCFunction)_wrap_test_owned_by_library_get_instance_list, METH_NOARGS }, + { "floating_and_sunk_get_instance_list", (PyCFunction)_wrap_test_floating_and_sunk_get_instance_list, METH_NOARGS }, { NULL, NULL } }; @@ -448,7 +527,7 @@ PYGLIB_MODULE_START(testhelper, "testhelper") PyObject *m, *d; g_thread_init(NULL); - init_pygobject(); + pygobject_init(-1, -1, -1); d = PyModule_GetDict(module); @@ -459,12 +538,12 @@ PYGLIB_MODULE_START(testhelper, "testhelper") if (_PyGObject_Type == NULL) { PyErr_SetString(PyExc_ImportError, "cannot import name GObject from gobject"); - return ; + return PYGLIB_MODULE_ERROR_RETURN; } } else { PyErr_SetString(PyExc_ImportError, "could not import gobject"); - return ; + return PYGLIB_MODULE_ERROR_RETURN; } /* TestInterface */ @@ -507,6 +586,28 @@ PYGLIB_MODULE_START(testhelper, "testhelper") Py_BuildValue("(O)", &PyGObject_Type)); pyg_set_object_has_new_constructor(TEST_TYPE_FLOATING_WITHOUT_SINK_FUNC); + + /* TestOwnedByLibrary */ + PyTestOwnedByLibrary_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE); + PyTestOwnedByLibrary_Type.tp_methods = (struct PyMethodDef*)_PyTestOwnedByLibrary_methods; + PyTestOwnedByLibrary_Type.tp_weaklistoffset = offsetof(PyGObject, weakreflist); + PyTestOwnedByLibrary_Type.tp_dictoffset = offsetof(PyGObject, inst_dict); + pygobject_register_class(d, "OwnedByLibrary", TEST_TYPE_OWNED_BY_LIBRARY, + &PyTestOwnedByLibrary_Type, + Py_BuildValue("(O)", + &PyGObject_Type)); + pyg_set_object_has_new_constructor(TEST_TYPE_OWNED_BY_LIBRARY); + + /* TestFloatingAndSunk */ + PyTestFloatingAndSunk_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE); + PyTestFloatingAndSunk_Type.tp_methods = (struct PyMethodDef*)_PyTestFloatingAndSunk_methods; + PyTestFloatingAndSunk_Type.tp_weaklistoffset = offsetof(PyGObject, weakreflist); + PyTestFloatingAndSunk_Type.tp_dictoffset = offsetof(PyGObject, inst_dict); + pygobject_register_class(d, "FloatingAndSunk", TEST_TYPE_FLOATING_AND_SUNK, + &PyTestFloatingAndSunk_Type, + Py_BuildValue("(O)", + &PyGObject_Type)); + pyg_set_object_has_new_constructor(TEST_TYPE_FLOATING_AND_SUNK); } PYGLIB_MODULE_END -- cgit v1.2.3