cac60ce501831d6dc9eae9fd2beb0d42718ad34a
diff --git a/ChangeLog b/ChangeLog
index f6a1829..05cdf41 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2009-02-08  Christian Persch  <chpe@gnome.org>
 
+	* configure.ac:
+	* libdocument/Makefile.am:
+	* libview/Makefile.am: Add experimental introspection support.
+	Disabled by default; use --enable-introspection to enable it.
+	Bug #569083.
+
+2009-02-08  Christian Persch  <chpe@gnome.org>
+
 	* libview/Makefile.am: Link libevdocument.la to libevview.la.
 
 2009-02-05  Christian Persch  <chpe@gnome.org>
diff --git a/configure.ac b/configure.ac
index e66b125..435e0c0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -267,6 +267,41 @@ if test "x$GCONFTOOL" = "xno"; then
 	AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
 fi
 
+# ***
+# GIR
+# ***
+
+AC_MSG_CHECKING([whether GObject introspection is requested])
+AC_ARG_ENABLE([introspection],
+        AS_HELP_STRING([--enable-introspection],[Enable GObject introspection]),
+        [],[enable_introspection=no])
+AC_MSG_RESULT([$enable_introspection])
+
+G_IR_SCANNER=
+G_IR_COMPILER=
+G_IR_GENERATE=
+GIRDIR=
+GIRTYPELIBDIR=
+
+if test "$enable_introspection" = "yes"; then
+  GOBJECT_INTROSPECTION_REQUIRED=0.6
+  PKG_CHECK_MODULES([GOBJECT_INTROSPECTION],[gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_REQUIRED])
+
+  G_IR_SCANNER="$($PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0)"
+  G_IR_COMPILER="$($PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0)"
+  G_IR_GENERATE="$($PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0)"
+  GIRDIR="$($PKG_CONFIG --variable=girdir gobject-introspection-1.0)"
+  GIRTYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+fi
+
+AC_SUBST([G_IR_SCANNER])
+AC_SUBST([G_IR_COMPILER])
+AC_SUBST([G_IR_GENERATE])
+AC_SUBST([GIRDIR])
+AC_SUBST([GIRTYPELIBDIR])
+
+AM_CONDITIONAL([ENABLE_INTROSPECTION],[test "$enable_introspection" = "yes"])
+
 dnl ================== portability checks ===========================================
 
 dnl for backtrace()
@@ -574,6 +609,7 @@ Configure summary:
 	Thumbnailer........:  $ENABLE_THUMBNAILER
 	Gtk-Doc Support....:  $enable_gtk_doc
 	Debug mode.........:  $enable_debug
+	GObj. Introspection:  $enable_introspection
 
 	PDF Backend........:  $enable_pdf
 	PostScript Backend.:  $enable_ps
diff --git a/libdocument/Makefile.am b/libdocument/Makefile.am
index 6eab585..819ea52 100644
--- a/libdocument/Makefile.am
+++ b/libdocument/Makefile.am
@@ -119,3 +119,47 @@ ev-document-type-builtins.c: ev-document-type-builtins.c.template $(INST_H_FILES
 EXTRA_DIST = \
 	ev-document-type-builtins.c.template \
 	ev-document-type-builtins.h.template
+
+# GObject Introspection
+
+if ENABLE_INTROSPECTION
+
+EvDocument-$(EV_API_VERSION).gir: libevdocument.la $(libevdocument_la_SOURCES)
+	PKG_CONFIG_PATH=$(top_builddir):$$PKG_CONFIG_PATH \
+	$(G_IR_SCANNER) -v --namespace EvDocument \
+	--add-include-path=$(srcdir) \
+	--add-include-path=. \
+	--strip-prefix=Ev \
+	--nsversion=$(EV_API_VERSION) \
+	--include=Gio-2.0 \
+	--include=Gtk-2.0 \
+	--library=evdocument \
+	--libtool="$(LIBTOOL)" \
+	--output $@ \
+	--pkg gobject-2.0 \
+	--pkg gio-2.0 \
+	--pkg gtk+-2.0 \
+	--pkg evince-document-$(EV_API_VERSION) \
+	-I$(top_srcdir) \
+	-I$(top_builddir) \
+	-DEVINCE_COMPILATION \
+	$(LIBDOCUMENT_CFLAGS) \
+	$(INST_H_FILES)
+
+girdir = $(GIRDIR)
+gir_DATA = EvDocument-$(EV_API_VERSION).gir
+
+typelibsdir = $(GIRTYPELIBDIR)
+typelibs_DATA = EvDocument-$(EV_API_VERSION).typelib
+
+EXTRA_DIST += $(gir_DATA)
+CLEANFILES += $(gir_DATA) $(typelibs_DATA)
+
+%.typelib: %.gir $(G_IR_COMPILER)
+	LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) \
+	--includedir=$(srcdir) \
+	--includedir=. \
+	$(G_IR_COMPILER_OPTS) \
+	$< -o $(top_builddir)/libdocument/$(@F)
+
+endif # ENABLE_INTROSPECTION
diff --git a/libview/Makefile.am b/libview/Makefile.am
index d11818f..2819e63 100644
--- a/libview/Makefile.am
+++ b/libview/Makefile.am
@@ -89,3 +89,51 @@ EXTRA_DIST = \
 	ev-view-type-builtins.c.template  \
 	ev-view-type-builtins.h.template  \
 	ev-view-marshal.list
+
+# GObject Introspection
+
+if ENABLE_INTROSPECTION
+
+EvView-$(EV_API_VERSION).gir: libevview.la $(libevview_la_SOURCES)
+	PKG_CONFIG_PATH=$(top_builddir):$$PKG_CONFIG_PATH \
+	$(G_IR_SCANNER) -v --namespace EvView \
+	--add-include-path=$(srcdir) \
+	--add-include-path=. \
+	--add-include-path=$(top_srcdir) \
+	--add-include-path=$(top_builddir) \
+	--add-include-path=$(top_builddir)/libdocument \
+	--strip-prefix=Ev \
+	--nsversion=$(EV_API_VERSION) \
+	--include=Gio-2.0 \
+	--include=Gtk-2.0 \
+	--include=EvDocument-$(EV_API_VERSION) \
+	--library=evview \
+	--libtool="$(LIBTOOL)" \
+	--output $@ \
+	--pkg gobject-2.0 \
+	--pkg gio-2.0 \
+	--pkg gtk+-2.0 \
+	--pkg evince-view-$(EV_API_VERSION) \
+	-I$(top_srcdir) \
+	-I$(top_builddir) \
+	-DEVINCE_COMPILATION \
+	$(LIBVIEW_CFLAGS) \
+	$(INST_H_FILES)
+
+girdir = $(GIRDIR)
+gir_DATA = EvView-$(EV_API_VERSION).gir
+
+typelibsdir = $(GIRTYPELIBDIR)
+typelibs_DATA = EvView-$(EV_API_VERSION).typelib
+
+EXTRA_DIST += $(gir_DATA)
+CLEANFILES += $(gir_DATA) $(typelibs_DATA)
+
+%.typelib: %.gir $(G_IR_COMPILER)
+	LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) \
+	--includedir=$(srcdir) \
+	--includedir=$(top_builddir)/libdocument \
+	$(G_IR_COMPILER_OPTS) \
+	$< -o $(top_builddir)/libview/$(@F)
+
+endif # ENABLE_INTROSPECTION
