[poppler] configure.ac glib/Makefile.am glib/poppler-cached-file-loader.cc glib/poppler-cached-file-loader.h glib/poppler-document.cc glib/poppler-document.h glib/poppler-input-stream.cc glib/poppler-input-stream.h glib/reference poppler-glib.pc.in poppler-glib-uninstalled.pc.in

Carlos Garcia Campos carlosgc at kemper.freedesktop.org
Sun May 13 10:25:06 PDT 2012


 configure.ac                        |   10 +-
 glib/Makefile.am                    |    4 +
 glib/poppler-cached-file-loader.cc  |  108 +++++++++++++++++++++++++++
 glib/poppler-cached-file-loader.h   |   44 +++++++++++
 glib/poppler-document.cc            |   69 +++++++++++++++++
 glib/poppler-document.h             |    6 +
 glib/poppler-input-stream.cc        |  141 ++++++++++++++++++++++++++++++++++++
 glib/poppler-input-stream.h         |   74 ++++++++++++++++++
 glib/reference/poppler-docs.sgml    |    4 +
 glib/reference/poppler-sections.txt |    1 
 poppler-glib-uninstalled.pc.in      |    2 
 poppler-glib.pc.in                  |    2 
 12 files changed, 458 insertions(+), 7 deletions(-)

New commits:
commit 1d1c8175c57ebe6518f4252ab92a20286b7d4c6f
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date:   Sun May 13 18:41:25 2012 +0200

    glib: Add poppler_document_new_from_stream
    
    A PopplerInputStream has been added to handle GMemoryInputStream and
    GLocalFileInputStream, since we don't want to cache the contents in
    those cases. A PopplerCachedFileLoader has been added to handle all
    other cases.

diff --git a/configure.ac b/configure.ac
index 1eaa809..abd6e5f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -531,12 +531,12 @@ if test x$enable_cairo_output = xyes; then
               		       enable_poppler_glib=$enableval,
 			       enable_poppler_glib="try")
   if test x$enable_poppler_glib = xyes; then
-    PKG_CHECK_MODULES(POPPLER_GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION)
+    PKG_CHECK_MODULES(POPPLER_GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED gio-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION)
   elif test x$enable_poppler_glib = xtry; then
-    PKG_CHECK_MODULES(POPPLER_GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION,
+    PKG_CHECK_MODULES(POPPLER_GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED gio-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION,
                       [enable_poppler_glib="yes"],
                       [enable_poppler_glib="no"
-                      use_glib="no (requires glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION)"])
+                      use_glib="no (requires glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED gio-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION)"])
   fi
   if test x$enable_poppler_glib = xyes; then
     # Check for introspection
@@ -644,9 +644,9 @@ AC_ARG_ENABLE(gtk-test,
               enable_gtk_test=$enableval,
               enable_gtk_test="try")
 if test x$enable_gtk_test = xyes; then
-  PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0)
+  PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0)
 elif test x$enable_gtk_test = xtry; then
-  PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0,
+  PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0,
                     [enable_gtk_test="yes"],
                     [enable_gtk_test="no"])
 fi
diff --git a/glib/Makefile.am b/glib/Makefile.am
index 83c724f..fc5844b 100644
--- a/glib/Makefile.am
+++ b/glib/Makefile.am
@@ -64,6 +64,10 @@ libpoppler_glib_la_SOURCES =			\
 	poppler-layer.cc			\
 	poppler-media.cc			\
 	poppler-movie.cc			\
+	poppler-cached-file-loader.cc		\
+	poppler-cached-file-loader.h		\
+	poppler-input-stream.cc			\
+	poppler-input-stream.h			\
 	poppler.cc				\
 	poppler-private.h
 
diff --git a/glib/poppler-cached-file-loader.cc b/glib/poppler-cached-file-loader.cc
new file mode 100644
index 0000000..bf462b6
--- /dev/null
+++ b/glib/poppler-cached-file-loader.cc
@@ -0,0 +1,108 @@
+/* poppler-cached-file-loader.h: glib interface to poppler
+ *
+ * Copyright (C) 2012 Carlos Garcia Campos <carlosgc at gnome.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "poppler-cached-file-loader.h"
+
+PopplerCachedFileLoader::PopplerCachedFileLoader(GInputStream *inputStreamA, GCancellable *cancellableA, goffset lengthA)
+{
+  inputStream = (GInputStream *)g_object_ref(inputStreamA);
+  cancellable = cancellableA ? (GCancellable *)g_object_ref(cancellableA) : NULL;
+  length = lengthA;
+  url = NULL;
+  cachedFile = NULL;
+}
+
+PopplerCachedFileLoader::~PopplerCachedFileLoader()
+{
+  g_object_unref(inputStream);
+  if (cancellable)
+    g_object_unref(cancellable);
+}
+
+size_t PopplerCachedFileLoader::init(GooString *urlA, CachedFile *cachedFileA)
+{
+  size_t size;
+  gssize bytesRead;
+  char buf[CachedFileChunkSize];
+
+  url = urlA;
+  cachedFile = cachedFileA;
+
+  if (length != (goffset)-1)
+    return length;
+
+  if (G_IS_FILE_INPUT_STREAM(inputStream)) {
+    GFileInfo *info;
+
+    info = g_file_input_stream_query_info(G_FILE_INPUT_STREAM (inputStream), G_FILE_ATTRIBUTE_STANDARD_SIZE, cancellable, NULL);
+    if (!info) {
+      error(errInternal, -1, "Failed to get size of '{0:t}'.", urlA);
+      return (size_t)-1;
+    }
+
+    length = g_file_info_get_size(info);
+    g_object_unref(info);
+
+    return length;
+  }
+
+  // Unknown stream length, read the whole stream and return the size.
+  CachedFileWriter writer = CachedFileWriter(cachedFile, NULL);
+  size = 0;
+  do {
+    bytesRead = g_input_stream_read(inputStream, buf, CachedFileChunkSize, cancellable, NULL);
+    if (bytesRead == -1)
+      break;
+
+    writer.write(buf, bytesRead);
+    size += bytesRead;
+  } while (bytesRead > 0);
+
+  return size;
+}
+
+int PopplerCachedFileLoader::load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer)
+{
+  char buf[CachedFileChunkSize];
+  gssize bytesRead;
+  size_t rangeBytesRead, bytesToRead, size;
+
+  if (length == (goffset)-1)
+    return 0;
+
+  size = 0;
+  for (size_t i = 0; i < ranges.size(); i++) {
+    bytesToRead = MIN(CachedFileChunkSize, ranges[i].length);
+    rangeBytesRead = 0;
+    g_seekable_seek(G_SEEKABLE(inputStream), ranges[i].offset, G_SEEK_SET, cancellable, NULL);
+    do {
+      bytesRead = g_input_stream_read(inputStream, buf, bytesToRead, cancellable, NULL);
+      if (bytesRead == -1)
+        return -1;
+
+      writer->write(buf, bytesRead);
+      size += bytesRead;
+      rangeBytesRead += bytesRead;
+      bytesToRead = ranges[i].length - rangeBytesRead;
+    } while (bytesRead > 0 && bytesToRead > 0);
+  }
+
+  return 0;
+}
diff --git a/glib/poppler-cached-file-loader.h b/glib/poppler-cached-file-loader.h
new file mode 100644
index 0000000..3660435
--- /dev/null
+++ b/glib/poppler-cached-file-loader.h
@@ -0,0 +1,44 @@
+/* poppler-cached-file-loader.h: glib interface to poppler
+ *
+ * Copyright (C) 2012 Carlos Garcia Campos <carlosgc at gnome.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __POPPLER_CACHED_FILE_LOADER_H__
+#define __POPPLER_CACHED_FILE_LOADER_H__
+
+#include <gio/gio.h>
+#ifndef __GI_SCANNER__
+#include <CachedFile.h>
+
+class PopplerCachedFileLoader: public CachedFileLoader {
+public:
+  PopplerCachedFileLoader(GInputStream* inputStreamA, GCancellable *cancellableA, goffset lengthA = -1);
+  ~PopplerCachedFileLoader();
+  size_t init(GooString *url, CachedFile* cachedFile);
+  int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer);
+
+private:
+  GInputStream *inputStream;
+  GCancellable *cancellable;
+  goffset length;
+  GooString *url;
+  CachedFile *cachedFile;
+};
+
+#endif /* __GI_SCANNER__ */
+
+#endif /* __POPPLER_CACHED_FILE_LOADER_H__ */
diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc
index a78b5ec..ec56698 100644
--- a/glib/poppler-document.cc
+++ b/glib/poppler-document.cc
@@ -38,6 +38,8 @@
 #include "poppler.h"
 #include "poppler-private.h"
 #include "poppler-enums.h"
+#include "poppler-input-stream.h"
+#include "poppler-cached-file-loader.h"
 
 /**
  * SECTION:poppler-document
@@ -246,6 +248,73 @@ poppler_document_new_from_data (char        *data,
   return _poppler_document_new_from_pdfdoc (newDoc, error);
 }
 
+static inline gboolean
+stream_is_memory_buffer_or_local_file (GInputStream *stream)
+{
+  return G_IS_MEMORY_INPUT_STREAM(stream) ||
+    (G_IS_FILE_INPUT_STREAM(stream) && strcmp(g_type_name_from_instance((GTypeInstance*)stream), "GLocalFileInputStream") == 0);
+}
+
+/**
+ * poppler_document_new_from_stream:
+ * @stream: a #GInputStream to read from
+ * @length: the stream length, or -1 if not known
+ * @password: (allow-none): password to unlock the file with, or %NULL
+ * @error: (allow-none): Return location for an error, or %NULL
+ *
+ * Creates a new #PopplerDocument reading the PDF contents from @stream.
+ * Note that the given #GInputStream must be seekable or %G_IO_ERROR_NOT_SUPPORTED
+ * will be returned.
+ * Possible errors include those in the #POPPLER_ERROR and #G_FILE_ERROR
+ * domains.
+ *
+ * Returns: (transfer full): a new #PopplerDocument, or %NULL
+ *
+ * Since: 0.22
+ */
+PopplerDocument *
+poppler_document_new_from_stream (GInputStream *stream,
+                                  goffset       length,
+                                  const char   *password,
+                                  GCancellable *cancellable,
+                                  GError      **error)
+{
+  Object obj;
+  PDFDoc *newDoc;
+  BaseStream *str;
+  GooString *password_g;
+
+  g_return_val_if_fail(G_IS_INPUT_STREAM(stream), NULL);
+  g_return_val_if_fail(length == (goffset)-1 || length > 0, NULL);
+
+  if (!globalParams) {
+    globalParams = new GlobalParams();
+  }
+
+  if (!G_IS_SEEKABLE(stream) || !g_seekable_can_seek(G_SEEKABLE(stream))) {
+    g_set_error_literal(error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                        "Stream is not seekable");
+    return NULL;
+  }
+
+  obj.initNull();
+  if (stream_is_memory_buffer_or_local_file(stream)) {
+    str = new PopplerInputStream(stream, cancellable, 0, gFalse, 0, &obj);
+  } else {
+    CachedFile *cachedFile = new CachedFile(new PopplerCachedFileLoader(stream, cancellable, length), new GooString());
+    str = new CachedFileStream(cachedFile, 0, gFalse, cachedFile->getLength(), &obj);
+  }
+
+  password_g = NULL;
+  if (password != NULL)
+    password_g = new GooString (password);
+
+  newDoc = new PDFDoc(str, password_g, password_g);
+  delete password_g;
+
+  return _poppler_document_new_from_pdfdoc (newDoc, error);
+}
+
 static gboolean
 handle_save_error (int      err_code,
 		   GError **error)
diff --git a/glib/poppler-document.h b/glib/poppler-document.h
index 7051830..7ac6672 100644
--- a/glib/poppler-document.h
+++ b/glib/poppler-document.h
@@ -20,6 +20,7 @@
 #define __POPPLER_DOCUMENT_H__
 
 #include <glib-object.h>
+#include <gio/gio.h>
 #include "poppler.h"
 
 G_BEGIN_DECLS
@@ -172,6 +173,11 @@ PopplerDocument   *poppler_document_new_from_data          (char            *dat
 							    int              length,
 							    const char      *password,
 							    GError         **error);
+PopplerDocument   *poppler_document_new_from_stream        (GInputStream    *stream,
+                                                            goffset          length,
+                                                            const char      *password,
+                                                            GCancellable    *cancellable,
+                                                            GError         **error);
 gboolean           poppler_document_save                   (PopplerDocument *document,
 							    const char      *uri,
 							    GError         **error);
diff --git a/glib/poppler-input-stream.cc b/glib/poppler-input-stream.cc
new file mode 100644
index 0000000..99fcb6f
--- /dev/null
+++ b/glib/poppler-input-stream.cc
@@ -0,0 +1,141 @@
+/* poppler-input-stream.cc: glib interface to poppler
+ *
+ * Copyright (C) 2012 Carlos Garcia Campos <carlosgc at gnome.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "poppler-input-stream.h"
+
+PopplerInputStream::PopplerInputStream(GInputStream *inputStreamA, GCancellable *cancellableA,
+                                       Guint startA, GBool limitedA, Guint lengthA, Object *dictA)
+  : BaseStream(dictA, lengthA)
+{
+  inputStream = (GInputStream *)g_object_ref(inputStreamA);
+  cancellable = cancellableA ? (GCancellable *)g_object_ref(cancellableA) : NULL;
+  start = startA;
+  limited = limitedA;
+  length = lengthA;
+  bufPtr = bufEnd = buf;
+  bufPos = start;
+}
+
+PopplerInputStream::~PopplerInputStream()
+{
+  close();
+  g_object_unref(inputStream);
+  if (cancellable)
+    g_object_unref(cancellable);
+}
+
+Stream *PopplerInputStream::makeSubStream(Guint startA, GBool limitedA,
+                                          Guint lengthA, Object *dictA)
+{
+  return new PopplerInputStream(inputStream, cancellable, startA, limitedA, lengthA, dictA);
+}
+
+void PopplerInputStream::reset()
+{
+  GSeekable *seekable = G_SEEKABLE(inputStream);
+
+  savePos = (Guint)g_seekable_tell(seekable);
+  g_seekable_seek(seekable, start, G_SEEK_SET, cancellable, NULL);
+  saved = gTrue;
+  bufPtr = bufEnd = buf;
+  bufPos = start;
+}
+
+void PopplerInputStream::close()
+{
+  if (!saved)
+    return;
+  g_seekable_seek(G_SEEKABLE(inputStream), savePos, G_SEEK_SET, cancellable, NULL);
+  saved = gFalse;
+}
+
+void PopplerInputStream::setPos(Guint pos, int dir)
+{
+  Guint size;
+  GSeekable *seekable = G_SEEKABLE(inputStream);
+
+  if (dir >= 0) {
+    g_seekable_seek(seekable, pos, G_SEEK_SET, cancellable, NULL);
+  } else {
+    g_seekable_seek(seekable, 0, G_SEEK_END, cancellable, NULL);
+    size = (Guint)g_seekable_tell(seekable);
+
+    if (pos > size)
+      pos = size;
+
+    g_seekable_seek(seekable, -(goffset)pos, G_SEEK_END, cancellable, NULL);
+    bufPos = (Guint)g_seekable_tell(seekable);
+  }
+  bufPtr = bufEnd = buf;
+}
+
+void PopplerInputStream::moveStart(int delta)
+{
+  start += delta;
+  bufPtr = bufEnd = buf;
+  bufPos = start;
+}
+
+GBool PopplerInputStream::fillBuf()
+{
+  int n;
+
+  bufPos += bufEnd - buf;
+  bufPtr = bufEnd = buf;
+  if (limited && bufPos >= start + length) {
+    return gFalse;
+  }
+
+  if (limited && bufPos + inputStreamBufSize > start + length) {
+    n = start + length - bufPos;
+  } else {
+    n = inputStreamBufSize;
+  }
+
+  n = g_input_stream_read(inputStream, buf, n, cancellable, NULL);
+  bufEnd = buf + n;
+  if (bufPtr >= bufEnd) {
+    return gFalse;
+  }
+
+  return gTrue;
+}
+
+int PopplerInputStream::getChars(int nChars, Guchar *buffer)
+{
+  int n, m;
+
+  n = 0;
+  while (n < nChars) {
+    if (bufPtr >= bufEnd) {
+      if (!fillBuf()) {
+        break;
+      }
+    }
+    m = (int)(bufEnd - bufPtr);
+    if (m > nChars - n) {
+      m = nChars - n;
+    }
+    memcpy(buffer + n, bufPtr, m);
+    bufPtr += m;
+    n += m;
+  }
+  return n;
+}
diff --git a/glib/poppler-input-stream.h b/glib/poppler-input-stream.h
new file mode 100644
index 0000000..0d795f4
--- /dev/null
+++ b/glib/poppler-input-stream.h
@@ -0,0 +1,74 @@
+/* poppler-input-stream.h: glib interface to poppler
+ *
+ * Copyright (C) 2012 Carlos Garcia Campos <carlosgc at gnome.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __POPPLER_INPUT_STREAM_H__
+#define __POPPLER_INPUT_STREAM_H__
+
+#include <gio/gio.h>
+#ifndef __GI_SCANNER__
+#include <Object.h>
+#include <Stream.h>
+
+#define inputStreamBufSize 1024
+
+class PopplerInputStream: public BaseStream {
+public:
+
+  PopplerInputStream(GInputStream *inputStream, GCancellable *cancellableA,
+                     Guint startA, GBool limitedA, Guint lengthA, Object *dictA);
+  virtual ~PopplerInputStream();
+  virtual Stream *makeSubStream(Guint start, GBool limited,
+                                Guint lengthA, Object *dictA);
+  virtual StreamKind getKind() { return strWeird; }
+  virtual void reset();
+  virtual void close();
+  virtual int getChar()
+    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }
+  virtual int lookChar()
+    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }
+  virtual int getPos() { return bufPos + (bufPtr - buf); }
+  virtual void setPos(Guint pos, int dir = 0);
+  virtual Guint getStart() { return start; }
+  virtual void moveStart(int delta);
+
+  virtual int getUnfilteredChar() { return getChar(); }
+  virtual void unfilteredReset() { reset(); }
+
+private:
+
+  GBool fillBuf();
+
+  virtual GBool hasGetChars() { return true; }
+  virtual int getChars(int nChars, Guchar *buffer);
+
+  GInputStream *inputStream;
+  GCancellable *cancellable;
+  Guint start;
+  GBool limited;
+  char buf[inputStreamBufSize];
+  char *bufPtr;
+  char *bufEnd;
+  Guint bufPos;
+  int savePos;
+  GBool saved;
+};
+
+#endif /* __GI_SCANNER__ */
+
+#endif /* __POPPLER_INPUT_STREAM_H__ */
diff --git a/glib/reference/poppler-docs.sgml b/glib/reference/poppler-docs.sgml
index d15bd18..a9d5158 100644
--- a/glib/reference/poppler-docs.sgml
+++ b/glib/reference/poppler-docs.sgml
@@ -54,6 +54,10 @@
     <title>Index of new symbols in 0.20</title>
     <xi:include href="xml/api-index-0.20.xml"><xi:fallback /></xi:include>
   </index>
+  <index id="api-index-0-22">
+    <title>Index of new symbols in 0.22</title>
+    <xi:include href="xml/api-index-0.22.xml"><xi:fallback /></xi:include>
+  </index>
 
   <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
 </book>
diff --git a/glib/reference/poppler-sections.txt b/glib/reference/poppler-sections.txt
index 5a6708b..8573051 100644
--- a/glib/reference/poppler-sections.txt
+++ b/glib/reference/poppler-sections.txt
@@ -115,6 +115,7 @@ PopplerViewerPreferences
 PopplerPermissions
 poppler_document_new_from_file
 poppler_document_new_from_data
+poppler_document_new_from_stream
 poppler_document_save
 poppler_document_save_a_copy
 poppler_document_get_id
diff --git a/poppler-glib-uninstalled.pc.in b/poppler-glib-uninstalled.pc.in
index 5fcb6f2..5506c4e 100644
--- a/poppler-glib-uninstalled.pc.in
+++ b/poppler-glib-uninstalled.pc.in
@@ -1,7 +1,7 @@
 Name: poppler-glib
 Description: GLib wrapper for poppler - uninstalled
 Version: @VERSION@
-Requires: glib-2.0 >= @GLIB_REQUIRED@ gobject-2.0 >= @GLIB_REQUIRED@ cairo >= @CAIRO_VERSION@
+Requires: glib-2.0 >= @GLIB_REQUIRED@ gobject-2.0 >= @GLIB_REQUIRED@ gio-2.0 >= @GLIB_REQUIRED@ cairo >= @CAIRO_VERSION@
 
 Libs: ${pc_top_builddir}/${pcfiledir}/glib/libpoppler-glib.la
 Cflags: -I${pc_top_builddir}/${pcfiledir}/glib
diff --git a/poppler-glib.pc.in b/poppler-glib.pc.in
index 9ba8978..cd30feb 100644
--- a/poppler-glib.pc.in
+++ b/poppler-glib.pc.in
@@ -6,7 +6,7 @@ includedir=@includedir@
 Name: poppler-glib
 Description: GLib wrapper for poppler
 Version: @VERSION@
-Requires: glib-2.0 >= @GLIB_REQUIRED@ gobject-2.0 >= @GLIB_REQUIRED@ cairo >= @CAIRO_VERSION@
+Requires: glib-2.0 >= @GLIB_REQUIRED@ gobject-2.0 >= @GLIB_REQUIRED@ gio-2.0 >= @GLIB_REQUIRED@ cairo >= @CAIRO_VERSION@
 @PC_REQUIRES_PRIVATE@
 
 Libs: -L${libdir} -lpoppler-glib


More information about the poppler mailing list