diff -Nru evince-3.18.2/backend/tiff/tiff-document.c evince-3.18.2/backend/tiff/tiff-document.c --- evince-3.18.2/backend/tiff/tiff-document.c 2019-06-19 20:19:30.000000000 +0000 +++ evince-3.18.2/backend/tiff/tiff-document.c 2019-07-22 18:32:41.000000000 +0000 @@ -273,23 +273,19 @@ return NULL; } -#ifdef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH rowstride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width); -#else - rowstride = width * 4; -#endif if (rowstride / 4 != width) { g_warning("Overflow while rendering document."); /* overflow, or cairo was changed in an unsupported way */ return NULL; } - bytes = height * rowstride; - if (bytes / rowstride != height) { + if (height >= INT_MAX / rowstride) { g_warning("Overflow while rendering document."); /* overflow */ return NULL; } + bytes = height * rowstride; pixels = g_try_malloc (bytes); if (!pixels) { @@ -378,15 +374,15 @@ if (width <= 0 || height <= 0) return NULL; - rowstride = width * 4; - if (rowstride / 4 != width) + if (width >= INT_MAX / 4) /* overflow */ return NULL; + rowstride = width * 4; - bytes = height * rowstride; - if (bytes / rowstride != height) + if (height >= INT_MAX / rowstride) /* overflow */ return NULL; + bytes = height * rowstride; pixels = g_try_malloc (bytes); if (!pixels) diff -Nru evince-3.18.2/configure.ac evince-3.18.2/configure.ac --- evince-3.18.2/configure.ac 2019-06-19 20:19:30.000000000 +0000 +++ evince-3.18.2/configure.ac 2019-07-22 18:32:41.000000000 +0000 @@ -234,12 +234,6 @@ BACKEND_LIBTOOL_FLAGS="-module -avoid-version -no-undefined -export-symbols \$(top_srcdir)/backend/backend.symbols" AC_SUBST(BACKEND_LIBTOOL_FLAGS) -dnl ===== Check special functions -evince_save_LIBS=$LIBS -LIBS="$LIBS $BACKEND_LIBS" -AC_CHECK_FUNCS(cairo_format_stride_for_width) -LIBS=$evince_save_LIBS - # ****************** # GKT+ Unix Printing # ****************** diff -Nru evince-3.18.2/debian/changelog evince-3.18.2/debian/changelog --- evince-3.18.2/debian/changelog 2019-06-19 20:19:30.000000000 +0000 +++ evince-3.18.2/debian/changelog 2019-07-22 18:32:40.000000000 +0000 @@ -1,8 +1,18 @@ -evince (3.18.2-1ubuntu4.5+elementary3~ubuntu0.4.1.1) xenial; urgency=low +evince (3.18.2-1ubuntu4.6+elementary3~ubuntu0.4.1.1) xenial; urgency=low * Auto build. - -- Launchpad Package Builder Wed, 19 Jun 2019 20:19:30 +0000 + -- Launchpad Package Builder Mon, 22 Jul 2019 18:32:40 +0000 + +evince (3.18.2-1ubuntu4.6) xenial-security; urgency=medium + + * SECURITY UPDATE: Buffer overflow + - debian/patches/CVE-2019-1010006-*.patch: remove unused configure + check for cairo_format_stride_for_width and fix overflow checks + in backend/tiff/tiff-document.c. + - CVE-2019-1010006 + + -- Leonidas S. Barbosa Wed, 17 Jul 2019 09:48:28 -0300 evince (3.18.2-1ubuntu4.5) xenial-security; urgency=medium diff -Nru evince-3.18.2/debian/git-build-recipe.manifest evince-3.18.2/debian/git-build-recipe.manifest --- evince-3.18.2/debian/git-build-recipe.manifest 2019-06-19 20:19:30.000000000 +0000 +++ evince-3.18.2/debian/git-build-recipe.manifest 2019-07-22 18:32:40.000000000 +0000 @@ -1,3 +1,3 @@ # git-build-recipe format 0.4 deb-version {debversion}+elementary3 -lp:~elementary-os/elementaryos/+git/os-patches git-commit:c9ebbced6f9447a586ce298ac3b000e959b34523 +lp:~elementary-os/elementaryos/+git/os-patches git-commit:354dae754191a1d17838b18bd58a76aad5215b89 merge elementary-patch lp:~elementary-os/elementaryos/+git/os-patches git-commit:8f1f8b1e4106fadca8d4fffeb8a8eb53c186a71b diff -Nru evince-3.18.2/.pc/applied-patches evince-3.18.2/.pc/applied-patches --- evince-3.18.2/.pc/applied-patches 2019-06-19 20:19:30.000000000 +0000 +++ evince-3.18.2/.pc/applied-patches 2019-07-22 18:32:41.000000000 +0000 @@ -4,3 +4,5 @@ git_mimetype_typo.patch CVE-2017-1000159.patch CVE-2019-11459.patch +CVE-2019-1010006-1.patch +CVE-2019-1010006-2.patch diff -Nru evince-3.18.2/.pc/CVE-2019-1010006-1.patch/backend/tiff/tiff-document.c evince-3.18.2/.pc/CVE-2019-1010006-1.patch/backend/tiff/tiff-document.c --- evince-3.18.2/.pc/CVE-2019-1010006-1.patch/backend/tiff/tiff-document.c 1970-01-01 00:00:00.000000000 +0000 +++ evince-3.18.2/.pc/CVE-2019-1010006-1.patch/backend/tiff/tiff-document.c 2019-07-22 18:32:41.000000000 +0000 @@ -0,0 +1,522 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */ +/* + * Copyright (C) 2005, Jonathan Blandford + * + * 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. + */ + +/* FIXME: Should probably buffer calls to libtiff with TIFFSetWarningHandler + */ + +#include "config.h" + +#include +#include +#include +#include + +#include "tiffio.h" +#include "tiff2ps.h" +#include "tiff-document.h" +#include "ev-document-misc.h" +#include "ev-file-exporter.h" +#include "ev-file-helpers.h" + +struct _TiffDocumentClass +{ + EvDocumentClass parent_class; +}; + +struct _TiffDocument +{ + EvDocument parent_instance; + + TIFF *tiff; + gint n_pages; + TIFF2PSContext *ps_export_ctx; + + gchar *uri; +}; + +typedef struct _TiffDocumentClass TiffDocumentClass; + +static void tiff_document_document_file_exporter_iface_init (EvFileExporterInterface *iface); + +EV_BACKEND_REGISTER_WITH_CODE (TiffDocument, tiff_document, + { + EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER, + tiff_document_document_file_exporter_iface_init); + }); + +static TIFFErrorHandler orig_error_handler = NULL; +static TIFFErrorHandler orig_warning_handler = NULL; + +static void +push_handlers (void) +{ + orig_error_handler = TIFFSetErrorHandler (NULL); + orig_warning_handler = TIFFSetWarningHandler (NULL); +} + +static void +pop_handlers (void) +{ + TIFFSetErrorHandler (orig_error_handler); + TIFFSetWarningHandler (orig_warning_handler); +} + +static gboolean +tiff_document_load (EvDocument *document, + const char *uri, + GError **error) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + gchar *filename; + TIFF *tiff; + + filename = g_filename_from_uri (uri, NULL, error); + if (!filename) + return FALSE; + + push_handlers (); + +#ifdef G_OS_WIN32 +{ + wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, error); + if (wfilename == NULL) { + return FALSE; + } + + tiff = TIFFOpenW (wfilename, "r"); + + g_free (wfilename); +} +#else + tiff = TIFFOpen (filename, "r"); +#endif + if (tiff) { + guint32 w, h; + + /* FIXME: unused data? why bother here */ + TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &h); + } + + if (!tiff) { + pop_handlers (); + + g_set_error_literal (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("Invalid document")); + + g_free (filename); + return FALSE; + } + + tiff_document->tiff = tiff; + g_free (tiff_document->uri); + g_free (filename); + tiff_document->uri = g_strdup (uri); + + pop_handlers (); + return TRUE; +} + +static gboolean +tiff_document_save (EvDocument *document, + const char *uri, + GError **error) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + + return ev_xfer_uri_simple (tiff_document->uri, uri, error); +} + +static int +tiff_document_get_n_pages (EvDocument *document) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + + g_return_val_if_fail (TIFF_IS_DOCUMENT (document), 0); + g_return_val_if_fail (tiff_document->tiff != NULL, 0); + + if (tiff_document->n_pages == -1) { + push_handlers (); + tiff_document->n_pages = 0; + + do { + tiff_document->n_pages ++; + } + while (TIFFReadDirectory (tiff_document->tiff)); + pop_handlers (); + } + + return tiff_document->n_pages; +} + +static void +tiff_document_get_resolution (TiffDocument *tiff_document, + gfloat *x_res, + gfloat *y_res) +{ + gfloat x = 0.0; + gfloat y = 0.0; + gushort unit; + + if (TIFFGetField (tiff_document->tiff, TIFFTAG_XRESOLUTION, &x) && + TIFFGetField (tiff_document->tiff, TIFFTAG_YRESOLUTION, &y)) { + if (TIFFGetFieldDefaulted (tiff_document->tiff, TIFFTAG_RESOLUTIONUNIT, &unit)) { + if (unit == RESUNIT_CENTIMETER) { + x *= 2.54; + y *= 2.54; + } + } + } + + /* Handle 0 values: some software set TIFF resolution as `0 , 0` see bug #646414 */ + *x_res = x > 0 ? x : 72.0; + *y_res = y > 0 ? y : 72.0; +} + +static void +tiff_document_get_page_size (EvDocument *document, + EvPage *page, + double *width, + double *height) +{ + guint32 w, h; + gfloat x_res, y_res; + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + + g_return_if_fail (TIFF_IS_DOCUMENT (document)); + g_return_if_fail (tiff_document->tiff != NULL); + + push_handlers (); + if (TIFFSetDirectory (tiff_document->tiff, page->index) != 1) { + pop_handlers (); + return; + } + + TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &h); + tiff_document_get_resolution (tiff_document, &x_res, &y_res); + h = h * (x_res / y_res); + + *width = w; + *height = h; + + pop_handlers (); +} + +static cairo_surface_t * +tiff_document_render (EvDocument *document, + EvRenderContext *rc) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + int width, height; + int scaled_width, scaled_height; + float x_res, y_res; + gint rowstride, bytes; + guchar *pixels = NULL; + guchar *p; + int orientation; + cairo_surface_t *surface; + cairo_surface_t *rotated_surface; + static const cairo_user_data_key_t key; + + g_return_val_if_fail (TIFF_IS_DOCUMENT (document), NULL); + g_return_val_if_fail (tiff_document->tiff != NULL, NULL); + + push_handlers (); + if (TIFFSetDirectory (tiff_document->tiff, rc->page->index) != 1) { + pop_handlers (); + g_warning("Failed to select page %d", rc->page->index); + return NULL; + } + + if (!TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &width)) { + pop_handlers (); + g_warning("Failed to read image width"); + return NULL; + } + + if (! TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &height)) { + pop_handlers (); + g_warning("Failed to read image height"); + return NULL; + } + + if (! TIFFGetField (tiff_document->tiff, TIFFTAG_ORIENTATION, &orientation)) { + orientation = ORIENTATION_TOPLEFT; + } + + tiff_document_get_resolution (tiff_document, &x_res, &y_res); + + pop_handlers (); + + /* Sanity check the doc */ + if (width <= 0 || height <= 0) { + g_warning("Invalid width or height."); + return NULL; + } + +#ifdef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH + rowstride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width); +#else + rowstride = width * 4; +#endif + if (rowstride / 4 != width) { + g_warning("Overflow while rendering document."); + /* overflow, or cairo was changed in an unsupported way */ + return NULL; + } + + bytes = height * rowstride; + if (bytes / rowstride != height) { + g_warning("Overflow while rendering document."); + /* overflow */ + return NULL; + } + + pixels = g_try_malloc (bytes); + if (!pixels) { + g_warning("Failed to allocate memory for rendering."); + return NULL; + } + + if (!TIFFReadRGBAImageOriented (tiff_document->tiff, + width, height, + (uint32 *)pixels, + orientation, 0)) { + g_warning ("Failed to read TIFF image."); + g_free (pixels); + return NULL; + } + + surface = cairo_image_surface_create_for_data (pixels, + CAIRO_FORMAT_RGB24, + width, height, + rowstride); + cairo_surface_set_user_data (surface, &key, + pixels, (cairo_destroy_func_t)g_free); + pop_handlers (); + + /* Convert the format returned by libtiff to + * what cairo expects + */ + p = pixels; + while (p < pixels + bytes) { + guint32 *pixel = (guint32*)p; + guint8 r = TIFFGetR(*pixel); + guint8 g = TIFFGetG(*pixel); + guint8 b = TIFFGetB(*pixel); + guint8 a = TIFFGetA(*pixel); + + *pixel = (a << 24) | (r << 16) | (g << 8) | b; + + p += 4; + } + + ev_render_context_compute_scaled_size (rc, width, height * (x_res / y_res), + &scaled_width, &scaled_height); + rotated_surface = ev_document_misc_surface_rotate_and_scale (surface, + scaled_width, scaled_height, + rc->rotation); + cairo_surface_destroy (surface); + + return rotated_surface; +} + +static GdkPixbuf * +tiff_document_get_thumbnail (EvDocument *document, + EvRenderContext *rc) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + int width, height; + int scaled_width, scaled_height; + float x_res, y_res; + gint rowstride, bytes; + guchar *pixels = NULL; + GdkPixbuf *pixbuf; + GdkPixbuf *scaled_pixbuf; + GdkPixbuf *rotated_pixbuf; + + push_handlers (); + if (TIFFSetDirectory (tiff_document->tiff, rc->page->index) != 1) { + pop_handlers (); + return NULL; + } + + if (!TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &width)) { + pop_handlers (); + return NULL; + } + + if (! TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &height)) { + pop_handlers (); + return NULL; + } + + tiff_document_get_resolution (tiff_document, &x_res, &y_res); + + pop_handlers (); + + /* Sanity check the doc */ + if (width <= 0 || height <= 0) + return NULL; + + rowstride = width * 4; + if (rowstride / 4 != width) + /* overflow */ + return NULL; + + bytes = height * rowstride; + if (bytes / rowstride != height) + /* overflow */ + return NULL; + + pixels = g_try_malloc (bytes); + if (!pixels) + return NULL; + + if (!TIFFReadRGBAImageOriented (tiff_document->tiff, + width, height, + (uint32 *)pixels, + ORIENTATION_TOPLEFT, 0)) { + g_free (pixels); + return NULL; + } + + pixbuf = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, TRUE, 8, + width, height, rowstride, + (GdkPixbufDestroyNotify) g_free, NULL); + pop_handlers (); + + ev_render_context_compute_scaled_size (rc, width, height * (x_res / y_res), + &scaled_width, &scaled_height); + scaled_pixbuf = gdk_pixbuf_scale_simple (pixbuf, + scaled_width, scaled_height, + GDK_INTERP_BILINEAR); + g_object_unref (pixbuf); + + rotated_pixbuf = gdk_pixbuf_rotate_simple (scaled_pixbuf, 360 - rc->rotation); + g_object_unref (scaled_pixbuf); + + return rotated_pixbuf; +} + +static gchar * +tiff_document_get_page_label (EvDocument *document, + EvPage *page) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + static gchar *label; + + if (TIFFGetField (tiff_document->tiff, TIFFTAG_PAGENAME, &label) && + g_utf8_validate (label, -1, NULL)) { + return g_strdup (label); + } + + return NULL; +} + +static void +tiff_document_finalize (GObject *object) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (object); + + if (tiff_document->tiff) + TIFFClose (tiff_document->tiff); + if (tiff_document->uri) + g_free (tiff_document->uri); + + G_OBJECT_CLASS (tiff_document_parent_class)->finalize (object); +} + +static void +tiff_document_class_init (TiffDocumentClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + + gobject_class->finalize = tiff_document_finalize; + + ev_document_class->load = tiff_document_load; + ev_document_class->save = tiff_document_save; + ev_document_class->get_n_pages = tiff_document_get_n_pages; + ev_document_class->get_page_size = tiff_document_get_page_size; + ev_document_class->render = tiff_document_render; + ev_document_class->get_thumbnail = tiff_document_get_thumbnail; + ev_document_class->get_page_label = tiff_document_get_page_label; +} + +/* postscript exporter implementation */ +static void +tiff_document_file_exporter_begin (EvFileExporter *exporter, + EvFileExporterContext *fc) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + document->ps_export_ctx = tiff2ps_context_new(fc->filename); +} + +static void +tiff_document_file_exporter_do_page (EvFileExporter *exporter, EvRenderContext *rc) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + if (document->ps_export_ctx == NULL) + return; + if (TIFFSetDirectory (document->tiff, rc->page->index) != 1) + return; + tiff2ps_process_page (document->ps_export_ctx, document->tiff, + 0, 0, 0, 0, 0); +} + +static void +tiff_document_file_exporter_end (EvFileExporter *exporter) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + if (document->ps_export_ctx == NULL) + return; + tiff2ps_context_finalize(document->ps_export_ctx); +} + +static EvFileExporterCapabilities +tiff_document_file_exporter_get_capabilities (EvFileExporter *exporter) +{ + return EV_FILE_EXPORTER_CAN_PAGE_SET | + EV_FILE_EXPORTER_CAN_COPIES | + EV_FILE_EXPORTER_CAN_COLLATE | + EV_FILE_EXPORTER_CAN_REVERSE | + EV_FILE_EXPORTER_CAN_GENERATE_PS; +} + +static void +tiff_document_document_file_exporter_iface_init (EvFileExporterInterface *iface) +{ + iface->begin = tiff_document_file_exporter_begin; + iface->do_page = tiff_document_file_exporter_do_page; + iface->end = tiff_document_file_exporter_end; + iface->get_capabilities = tiff_document_file_exporter_get_capabilities; +} + +static void +tiff_document_init (TiffDocument *tiff_document) +{ + tiff_document->n_pages = -1; +} diff -Nru evince-3.18.2/.pc/CVE-2019-1010006-2.patch/backend/tiff/tiff-document.c evince-3.18.2/.pc/CVE-2019-1010006-2.patch/backend/tiff/tiff-document.c --- evince-3.18.2/.pc/CVE-2019-1010006-2.patch/backend/tiff/tiff-document.c 1970-01-01 00:00:00.000000000 +0000 +++ evince-3.18.2/.pc/CVE-2019-1010006-2.patch/backend/tiff/tiff-document.c 2019-07-22 18:32:41.000000000 +0000 @@ -0,0 +1,522 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */ +/* + * Copyright (C) 2005, Jonathan Blandford + * + * 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. + */ + +/* FIXME: Should probably buffer calls to libtiff with TIFFSetWarningHandler + */ + +#include "config.h" + +#include +#include +#include +#include + +#include "tiffio.h" +#include "tiff2ps.h" +#include "tiff-document.h" +#include "ev-document-misc.h" +#include "ev-file-exporter.h" +#include "ev-file-helpers.h" + +struct _TiffDocumentClass +{ + EvDocumentClass parent_class; +}; + +struct _TiffDocument +{ + EvDocument parent_instance; + + TIFF *tiff; + gint n_pages; + TIFF2PSContext *ps_export_ctx; + + gchar *uri; +}; + +typedef struct _TiffDocumentClass TiffDocumentClass; + +static void tiff_document_document_file_exporter_iface_init (EvFileExporterInterface *iface); + +EV_BACKEND_REGISTER_WITH_CODE (TiffDocument, tiff_document, + { + EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER, + tiff_document_document_file_exporter_iface_init); + }); + +static TIFFErrorHandler orig_error_handler = NULL; +static TIFFErrorHandler orig_warning_handler = NULL; + +static void +push_handlers (void) +{ + orig_error_handler = TIFFSetErrorHandler (NULL); + orig_warning_handler = TIFFSetWarningHandler (NULL); +} + +static void +pop_handlers (void) +{ + TIFFSetErrorHandler (orig_error_handler); + TIFFSetWarningHandler (orig_warning_handler); +} + +static gboolean +tiff_document_load (EvDocument *document, + const char *uri, + GError **error) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + gchar *filename; + TIFF *tiff; + + filename = g_filename_from_uri (uri, NULL, error); + if (!filename) + return FALSE; + + push_handlers (); + +#ifdef G_OS_WIN32 +{ + wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, error); + if (wfilename == NULL) { + return FALSE; + } + + tiff = TIFFOpenW (wfilename, "r"); + + g_free (wfilename); +} +#else + tiff = TIFFOpen (filename, "r"); +#endif + if (tiff) { + guint32 w, h; + + /* FIXME: unused data? why bother here */ + TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &h); + } + + if (!tiff) { + pop_handlers (); + + g_set_error_literal (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("Invalid document")); + + g_free (filename); + return FALSE; + } + + tiff_document->tiff = tiff; + g_free (tiff_document->uri); + g_free (filename); + tiff_document->uri = g_strdup (uri); + + pop_handlers (); + return TRUE; +} + +static gboolean +tiff_document_save (EvDocument *document, + const char *uri, + GError **error) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + + return ev_xfer_uri_simple (tiff_document->uri, uri, error); +} + +static int +tiff_document_get_n_pages (EvDocument *document) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + + g_return_val_if_fail (TIFF_IS_DOCUMENT (document), 0); + g_return_val_if_fail (tiff_document->tiff != NULL, 0); + + if (tiff_document->n_pages == -1) { + push_handlers (); + tiff_document->n_pages = 0; + + do { + tiff_document->n_pages ++; + } + while (TIFFReadDirectory (tiff_document->tiff)); + pop_handlers (); + } + + return tiff_document->n_pages; +} + +static void +tiff_document_get_resolution (TiffDocument *tiff_document, + gfloat *x_res, + gfloat *y_res) +{ + gfloat x = 0.0; + gfloat y = 0.0; + gushort unit; + + if (TIFFGetField (tiff_document->tiff, TIFFTAG_XRESOLUTION, &x) && + TIFFGetField (tiff_document->tiff, TIFFTAG_YRESOLUTION, &y)) { + if (TIFFGetFieldDefaulted (tiff_document->tiff, TIFFTAG_RESOLUTIONUNIT, &unit)) { + if (unit == RESUNIT_CENTIMETER) { + x *= 2.54; + y *= 2.54; + } + } + } + + /* Handle 0 values: some software set TIFF resolution as `0 , 0` see bug #646414 */ + *x_res = x > 0 ? x : 72.0; + *y_res = y > 0 ? y : 72.0; +} + +static void +tiff_document_get_page_size (EvDocument *document, + EvPage *page, + double *width, + double *height) +{ + guint32 w, h; + gfloat x_res, y_res; + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + + g_return_if_fail (TIFF_IS_DOCUMENT (document)); + g_return_if_fail (tiff_document->tiff != NULL); + + push_handlers (); + if (TIFFSetDirectory (tiff_document->tiff, page->index) != 1) { + pop_handlers (); + return; + } + + TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &h); + tiff_document_get_resolution (tiff_document, &x_res, &y_res); + h = h * (x_res / y_res); + + *width = w; + *height = h; + + pop_handlers (); +} + +static cairo_surface_t * +tiff_document_render (EvDocument *document, + EvRenderContext *rc) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + int width, height; + int scaled_width, scaled_height; + float x_res, y_res; + gint rowstride, bytes; + guchar *pixels = NULL; + guchar *p; + int orientation; + cairo_surface_t *surface; + cairo_surface_t *rotated_surface; + static const cairo_user_data_key_t key; + + g_return_val_if_fail (TIFF_IS_DOCUMENT (document), NULL); + g_return_val_if_fail (tiff_document->tiff != NULL, NULL); + + push_handlers (); + if (TIFFSetDirectory (tiff_document->tiff, rc->page->index) != 1) { + pop_handlers (); + g_warning("Failed to select page %d", rc->page->index); + return NULL; + } + + if (!TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &width)) { + pop_handlers (); + g_warning("Failed to read image width"); + return NULL; + } + + if (! TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &height)) { + pop_handlers (); + g_warning("Failed to read image height"); + return NULL; + } + + if (! TIFFGetField (tiff_document->tiff, TIFFTAG_ORIENTATION, &orientation)) { + orientation = ORIENTATION_TOPLEFT; + } + + tiff_document_get_resolution (tiff_document, &x_res, &y_res); + + pop_handlers (); + + /* Sanity check the doc */ + if (width <= 0 || height <= 0) { + g_warning("Invalid width or height."); + return NULL; + } + +#ifdef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH + rowstride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width); +#else + rowstride = width * 4; +#endif + if (rowstride / 4 != width) { + g_warning("Overflow while rendering document."); + /* overflow, or cairo was changed in an unsupported way */ + return NULL; + } + + if (height >= INT_MAX / rowstride) { + g_warning("Overflow while rendering document."); + /* overflow */ + return NULL; + } + bytes = height * rowstride; + + pixels = g_try_malloc (bytes); + if (!pixels) { + g_warning("Failed to allocate memory for rendering."); + return NULL; + } + + if (!TIFFReadRGBAImageOriented (tiff_document->tiff, + width, height, + (uint32 *)pixels, + orientation, 0)) { + g_warning ("Failed to read TIFF image."); + g_free (pixels); + return NULL; + } + + surface = cairo_image_surface_create_for_data (pixels, + CAIRO_FORMAT_RGB24, + width, height, + rowstride); + cairo_surface_set_user_data (surface, &key, + pixels, (cairo_destroy_func_t)g_free); + pop_handlers (); + + /* Convert the format returned by libtiff to + * what cairo expects + */ + p = pixels; + while (p < pixels + bytes) { + guint32 *pixel = (guint32*)p; + guint8 r = TIFFGetR(*pixel); + guint8 g = TIFFGetG(*pixel); + guint8 b = TIFFGetB(*pixel); + guint8 a = TIFFGetA(*pixel); + + *pixel = (a << 24) | (r << 16) | (g << 8) | b; + + p += 4; + } + + ev_render_context_compute_scaled_size (rc, width, height * (x_res / y_res), + &scaled_width, &scaled_height); + rotated_surface = ev_document_misc_surface_rotate_and_scale (surface, + scaled_width, scaled_height, + rc->rotation); + cairo_surface_destroy (surface); + + return rotated_surface; +} + +static GdkPixbuf * +tiff_document_get_thumbnail (EvDocument *document, + EvRenderContext *rc) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + int width, height; + int scaled_width, scaled_height; + float x_res, y_res; + gint rowstride, bytes; + guchar *pixels = NULL; + GdkPixbuf *pixbuf; + GdkPixbuf *scaled_pixbuf; + GdkPixbuf *rotated_pixbuf; + + push_handlers (); + if (TIFFSetDirectory (tiff_document->tiff, rc->page->index) != 1) { + pop_handlers (); + return NULL; + } + + if (!TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &width)) { + pop_handlers (); + return NULL; + } + + if (! TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &height)) { + pop_handlers (); + return NULL; + } + + tiff_document_get_resolution (tiff_document, &x_res, &y_res); + + pop_handlers (); + + /* Sanity check the doc */ + if (width <= 0 || height <= 0) + return NULL; + + if (width >= INT_MAX / 4) + /* overflow */ + return NULL; + rowstride = width * 4; + + if (height >= INT_MAX / rowstride) + /* overflow */ + return NULL; + bytes = height * rowstride; + + pixels = g_try_malloc (bytes); + if (!pixels) + return NULL; + + if (!TIFFReadRGBAImageOriented (tiff_document->tiff, + width, height, + (uint32 *)pixels, + ORIENTATION_TOPLEFT, 0)) { + g_free (pixels); + return NULL; + } + + pixbuf = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, TRUE, 8, + width, height, rowstride, + (GdkPixbufDestroyNotify) g_free, NULL); + pop_handlers (); + + ev_render_context_compute_scaled_size (rc, width, height * (x_res / y_res), + &scaled_width, &scaled_height); + scaled_pixbuf = gdk_pixbuf_scale_simple (pixbuf, + scaled_width, scaled_height, + GDK_INTERP_BILINEAR); + g_object_unref (pixbuf); + + rotated_pixbuf = gdk_pixbuf_rotate_simple (scaled_pixbuf, 360 - rc->rotation); + g_object_unref (scaled_pixbuf); + + return rotated_pixbuf; +} + +static gchar * +tiff_document_get_page_label (EvDocument *document, + EvPage *page) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (document); + static gchar *label; + + if (TIFFGetField (tiff_document->tiff, TIFFTAG_PAGENAME, &label) && + g_utf8_validate (label, -1, NULL)) { + return g_strdup (label); + } + + return NULL; +} + +static void +tiff_document_finalize (GObject *object) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (object); + + if (tiff_document->tiff) + TIFFClose (tiff_document->tiff); + if (tiff_document->uri) + g_free (tiff_document->uri); + + G_OBJECT_CLASS (tiff_document_parent_class)->finalize (object); +} + +static void +tiff_document_class_init (TiffDocumentClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + + gobject_class->finalize = tiff_document_finalize; + + ev_document_class->load = tiff_document_load; + ev_document_class->save = tiff_document_save; + ev_document_class->get_n_pages = tiff_document_get_n_pages; + ev_document_class->get_page_size = tiff_document_get_page_size; + ev_document_class->render = tiff_document_render; + ev_document_class->get_thumbnail = tiff_document_get_thumbnail; + ev_document_class->get_page_label = tiff_document_get_page_label; +} + +/* postscript exporter implementation */ +static void +tiff_document_file_exporter_begin (EvFileExporter *exporter, + EvFileExporterContext *fc) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + document->ps_export_ctx = tiff2ps_context_new(fc->filename); +} + +static void +tiff_document_file_exporter_do_page (EvFileExporter *exporter, EvRenderContext *rc) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + if (document->ps_export_ctx == NULL) + return; + if (TIFFSetDirectory (document->tiff, rc->page->index) != 1) + return; + tiff2ps_process_page (document->ps_export_ctx, document->tiff, + 0, 0, 0, 0, 0); +} + +static void +tiff_document_file_exporter_end (EvFileExporter *exporter) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + if (document->ps_export_ctx == NULL) + return; + tiff2ps_context_finalize(document->ps_export_ctx); +} + +static EvFileExporterCapabilities +tiff_document_file_exporter_get_capabilities (EvFileExporter *exporter) +{ + return EV_FILE_EXPORTER_CAN_PAGE_SET | + EV_FILE_EXPORTER_CAN_COPIES | + EV_FILE_EXPORTER_CAN_COLLATE | + EV_FILE_EXPORTER_CAN_REVERSE | + EV_FILE_EXPORTER_CAN_GENERATE_PS; +} + +static void +tiff_document_document_file_exporter_iface_init (EvFileExporterInterface *iface) +{ + iface->begin = tiff_document_file_exporter_begin; + iface->do_page = tiff_document_file_exporter_do_page; + iface->end = tiff_document_file_exporter_end; + iface->get_capabilities = tiff_document_file_exporter_get_capabilities; +} + +static void +tiff_document_init (TiffDocument *tiff_document) +{ + tiff_document->n_pages = -1; +} diff -Nru evince-3.18.2/.pc/CVE-2019-1010006-2.patch/configure.ac evince-3.18.2/.pc/CVE-2019-1010006-2.patch/configure.ac --- evince-3.18.2/.pc/CVE-2019-1010006-2.patch/configure.ac 1970-01-01 00:00:00.000000000 +0000 +++ evince-3.18.2/.pc/CVE-2019-1010006-2.patch/configure.ac 2019-07-22 18:32:41.000000000 +0000 @@ -0,0 +1,984 @@ +# ***************************************************************************** +# Versioning +# ***************************************************************************** + +m4_define([ev_major_version],[3]) +m4_define([ev_minor_version],[18]) +m4_define([ev_micro_version],[2]) +m4_define([ev_extra_version],[]) +m4_define([ev_version],[ev_major_version.ev_minor_version.ev_micro_version()ev_extra_version]) + +# The evince API version +m4_define([ev_api_version], [3.0]) + +# Libtool versioning. The backend and view libraries have separate versions. +# Before making a release, the libtool version should be modified. +# The string is of the form C:R:A. +# - If interfaces have been changed or added, but binary compatibility has +# been preserved, change to C+1:0:A+1 +# - If binary compatibility has been broken (eg removed or changed interfaces) +# change to C+1:0:0 +# - If the interface is the same as the previous version, change to C:R+1:A + +# Libtool version of the backend library +m4_define([ev_document_lt_current],[4]) +m4_define([ev_document_lt_revision],[0]) +m4_define([ev_document_lt_age],[0]) +m4_define([ev_document_lt_version_info],[ev_document_lt_current:ev_document_lt_revision:ev_document_lt_age]) +m4_define([ev_document_lt_current_minus_age],[m4_eval(ev_document_lt_current - ev_document_lt_age)]) + +# Libtool version of the view library +m4_define([ev_view_lt_current],[3]) +m4_define([ev_view_lt_revision],[0]) +m4_define([ev_view_lt_age],[0]) +m4_define([ev_view_lt_version_info],[ev_view_lt_current:ev_view_lt_revision:ev_view_lt_age]) +m4_define([ev_view_lt_current_minus_age],[m4_eval(ev_view_lt_current - ev_view_lt_age)]) + +# Binary version for the document backends +m4_define([ev_binary_version],[ev_document_lt_current]) + +# ***************************************************************************** + +AC_PREREQ([2.57]) +AC_INIT([Evince],[ev_version],[http://bugzilla.gnome.org/enter_bug.cgi?product=evince],[evince]) +AM_INIT_AUTOMAKE([1.10 foreign dist-xz no-dist-gzip tar-ustar]) + +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +if test -z "$enable_maintainer_mode"; then + enable_maintainer_mode=yes +fi +AM_MAINTAINER_MODE([enable]) + +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + +AC_PROG_CC +AM_PROG_CC_C_O +AC_PROG_CXX + +AC_PROG_SED + +# Initialize libtool +LT_PREREQ([2.2]) +LT_INIT +LT_LIB_M + +GNOME_CXX_WARNINGS + +IT_PROG_INTLTOOL([0.35.0]) + +GETTEXT_PACKAGE=evince +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[Gettext package]) +AM_GLIB_GNU_GETTEXT + +m4_pattern_allow([AM_V_GEN])dnl Make autoconf not complain about the rule below +EV_INTLTOOL_EVINCE_BACKEND_RULE='%.evince-backend: %.evince-backend.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(AM_V_GEN) LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' +AC_SUBST([EV_INTLTOOL_EVINCE_BACKEND_RULE]) + +GLIB_GSETTINGS + +# Check which platform to use + +AC_MSG_CHECKING([for which platform to build]) +AC_ARG_WITH([platform], + [AS_HELP_STRING([--with-platform=gnome|win32], + [Setting platform (default: gnome)])], + [case "$withval" in + gnome|win32) ;; + *) AC_MSG_ERROR([invalid argument "$withval" for --with-platform]) ;; + esac], + [case "$host" in + *-*-mingw*|*-*-cygwin*) with_platform="win32" ;; + *) with_platform=gnome ;; + esac]) + +AC_MSG_RESULT([$with_platform]) + +if test "$with_platform" = "win32"; then + AC_CHECK_TOOL([WINDRES],[windres]) + AC_MSG_CHECKING([for native Win32]) + case "$host" in + *-*-mingw*) + os_win32=yes + ;; + *) + os_win32=no + ;; + esac + AC_MSG_RESULT([$os_win32]) + + AM_CFLAGS="$AM_CFLAGS -D_WIN32_WINNT=0x0500" +fi + +AM_CONDITIONAL([PLATFORM_WIN32],[test "$with_platform" = "win32"]) + +dnl Specify required versions of dependencies +CAIRO_REQUIRED=1.10.0 +GLIB_REQUIRED=2.36.0 +LIBSECRET_REQUIRED=0.5 +GTK_REQUIRED=3.16.0 +NAUTILUS_REQUIRED=2.91.4 + +AC_SUBST([GLIB_REQUIRED]) +AC_SUBST([GTK_REQUIRED]) + +AC_DEFINE([GDK_VERSION_MIN_REQUIRED], [GDK_VERSION_3_8], [Minimum GTK/GDK version required]) + +ADWAITA_ICON_THEME_REQUIRED=2.17.1 +LIBXML_REQUIRED=2.5.0 + +dnl Check dependencies + +# LIB_CFLAGS for helpers and generic widgets. (libdocument, cut-and-paste) +# BACKEND_CFLAGS for backend implementations. +# FRONTEND_CFLAGS for frontend implementations. (properties, thumbnailer) +# FRONTEND_LIBS +# SHELL_CFLAGS for shell implementation. +# SHELL_LIBS + +have_zlib=yes +AC_CHECK_HEADERS([zlib.h], + [AC_CHECK_LIB([z], [inflate], + [AC_CHECK_LIB([z], [crc32], [have_zlib=yes], [have_zlib=no])], + [have_zlib=no])], + [have_zlib=no]) + +if test x$have_zlib = xno; then + AC_MSG_ERROR([No sufficient zlib library found on your system.]) +fi + +ZLIB_LIBS=-lz +AC_SUBST(ZLIB_LIBS) + +PKG_CHECK_MODULES(LIBDOCUMENT, gtk+-3.0 >= $GTK_REQUIRED gio-2.0 >= $GLIB_REQUIRED gmodule-no-export-2.0 >= $GLIB_REQUIRED gmodule-2.0) +PKG_CHECK_MODULES(LIBVIEW, gtk+-3.0 >= $GTK_REQUIRED gthread-2.0 gio-2.0 >= $GLIB_REQUIRED) +PKG_CHECK_MODULES(BACKEND, cairo >= $CAIRO_REQUIRED gtk+-3.0 >= $GTK_REQUIRED) +PKG_CHECK_MODULES(FRONTEND_CORE, gtk+-3.0 >= $GTK_REQUIRED gthread-2.0 gio-2.0 >= $GLIB_REQUIRED gmodule-no-export-2.0 >= $GLIB_REQUIRED) + +# Although GTK+ 3.10 includes hi-dpi functionality, it does not require a cairo with +# cairo_surface_set_device_scale(), which we also need if we're to support hi-dpi, +# so we need check for that explicity. + +evince_save_LIBS=$LIBS +LIBS="$LIBS $LIBVIEW_LIBS" +AC_CHECK_FUNCS(cairo_surface_set_device_scale) +LIBS=$evince_save_LIBS + +AC_MSG_CHECKING([for hi-dpi support]) +if test "$ac_cv_func_cairo_surface_set_device_scale" = yes ; then + AC_DEFINE([HAVE_HIDPI_SUPPORT], [1], [Define if cairo and GTK+ have necessary functions for hi-dpi]) + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + +SHELL_PLATFORM_PKGS= +case "$with_platform" in + gnome) + # Evince has a rather soft run-time dependency on hicolor-icon-theme. + # If the hicolor theme is not available, Evince fails to display some + # icons. Because we cannot check for it at run-time, we instead + # would like to require the icon theme at compile-time. But, because + # the hicolor-icon-theme does not have a pkgconfig file, on gnome we + # require the gnome icon theme instead. + SHELL_PLATFORM_PKGS="adwaita-icon-theme >= $ADWAITA_ICON_THEME_REQUIRED" + ;; + *) + # On all other platforms we issue a warning about the runtime + # dependency. + AC_MSG_WARN([Evince has a soft run-time dependency on hicolor-icon-theme. You are advised to have this theme installed when running Evince.]); + SHELL_PLATFORM_PKGS="" + ;; +esac + +PKG_CHECK_MODULES([SHELL_CORE],[libxml-2.0 >= $LIBXML_REQUIRED gtk+-3.0 >= $GTK_REQUIRED gio-2.0 >= $GLIB_REQUIRED gmodule-no-export-2.0 >= $GLIB_REQUIRED gthread-2.0 $SHELL_PLATFORM_PKGS]) + +# *************** +# Build utilities +# *************** + +AC_ARG_VAR([GLIB_GENMARSHAL],[the glib-genmarschal programme]) +AC_PATH_PROG([GLIB_GENMARSHAL],[glib-genmarshal],[]) +if test -z "$GLIB_GENMARSHAL"; then + AC_MSG_ERROR([glib-genmarshal not found]) +fi + +AC_ARG_VAR([GLIB_MKENUMS],[the glib-mkenums programme]) +AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums],[]) +if test -z "$GLIB_MKENUMS"; then + AC_MSG_ERROR([glib-mkenums not found]) +fi + +AC_ARG_VAR([GLIB_COMPILE_RESOURCES],[the glib-compile-resources programme]) +AC_PATH_PROG([GLIB_COMPILE_RESOURCES],[glib-compile-resources],[]) +if test -z "$GLIB_COMPILE_RESOURCES"; then + AC_MSG_ERROR([glib-compile-resources not found]) +fi + +AC_ARG_VAR([XMLLINT],[the xmllint programme]) +AC_PATH_PROG([XMLLINT],[xmllint],[]) +if test -z "$XMLLINT"; then + AC_MSG_ERROR([xmllint not found]) +fi + +AC_ARG_VAR([GDBUS_CODEGEN],[the gdbus-codegen programme]) +AC_PATH_PROG([GDBUS_CODEGEN],[gdbus-codegen],[]) +if test -z "$GDBUS_CODEGEN"; then + AC_MSG_ERROR([gdbus-codegen not found]) +fi + +# *** + +BACKEND_LIBTOOL_FLAGS="-module -avoid-version -no-undefined -export-symbols \$(top_srcdir)/backend/backend.symbols" +AC_SUBST(BACKEND_LIBTOOL_FLAGS) + +dnl ===== Check special functions +evince_save_LIBS=$LIBS +LIBS="$LIBS $BACKEND_LIBS" +AC_CHECK_FUNCS(cairo_format_stride_for_width) +LIBS=$evince_save_LIBS + +# ****************** +# GKT+ Unix Printing +# ****************** + +AC_MSG_CHECKING([whether gtk+-unix-print support is requested]) +AC_ARG_WITH([gtk-unix-print], + [AS_HELP_STRING([--without-gtk-unix-print], + [Disable the use of gtk-unix-print])], + [],[case "$os_win32" in + yes) with_gtk_unix_print=no ;; + *) with_gtk_unix_print=yes ;; + esac]) + +AC_MSG_RESULT([$with_gtk_unix_print]) + +if test "$with_gtk_unix_print" = "yes"; then + PKG_CHECK_MODULES(GTKUNIXPRINT, [gtk+-unix-print-3.0 >= $GTK_REQUIRED]) + AC_DEFINE([GTKUNIXPRINT_ENABLED], [1], [Define if gtk+-unix-print is enabled.]) +fi + +# ********************* +# GNOME Keyring support +# ********************* + +AC_ARG_WITH(keyring, + [AS_HELP_STRING([--without-keyring], + [Disable the use of gnome-keyring])], + [], + [case "$with_platform" in + gnome) with_keyring=yes ;; + win32) with_keyring=no ;; + esac]) + +AM_CONDITIONAL([WITH_KEYRING],[test "$with_keyring" = "yes"]) + +if test "$with_keyring" = "yes"; then + PKG_CHECK_MODULES(LIBSECRET, libsecret-1 >= $LIBSECRET_REQUIRED) + AC_DEFINE([WITH_KEYRING],[1],[Define if KEYRING support is enabled]) +fi + +# **** +# DBUS +# **** + +AC_ARG_ENABLE([dbus], + [AS_HELP_STRING([--disable-dbus], [Disable support for dbus])], + [], + [case "$with_platform" in + gnome) enable_dbus=yes ;; + esac]) + +if test "$enable_dbus" = "yes"; then + AC_DEFINE([ENABLE_DBUS],[1],[Define if DBUS support is enabled]) + + PKG_CHECK_MODULES([EV_DAEMON], [gio-2.0 >= $GLIB_REQUIRED gio-unix-2.0]) +fi + +AM_CONDITIONAL([ENABLE_DBUS], [test "$enable_dbus" = "yes"]) + +# ******************************* +# GNOME Desktop (Thumbnail cache) +# ******************************* + +AC_ARG_ENABLE([libgnome-desktop], + [AS_HELP_STRING([--disable-libgnome-desktop], [Disable GNOME Desktop (Thumbnail cache)])], + [enable_gnome_desktop=$enableval], + [enable_gnome_desktop=auto]) + +if test "$enable_gnome_desktop" != "no"; then + if test "$enable_gnome_desktop" = "auto"; then + PKG_CHECK_MODULES([LIBGNOME_DESKTOP], [gnome-desktop-3.0], has_libgnome_desktop=yes, has_libgnome_desktop=no) + else + PKG_CHECK_MODULES([LIBGNOME_DESKTOP], [gnome-desktop-3.0]) + has_libgnome_desktop=yes + fi + + if test x$has_libgnome_desktop = xyes; then + AC_DEFINE([HAVE_LIBGNOME_DESKTOP], [1], [Whether GNOME Desktop (Thumbnail cache) is available]) + enable_gnome_desktop=yes + else + enable_gnome_desktop=no + fi +fi + +# ********************** +# GStreamer (Multimedia) +# ********************** + +AC_ARG_ENABLE([multimedia], + [AS_HELP_STRING([--disable-multimedia], [Disable Multimedia support])], + [enable_multimedia=$enableval], + [enable_multimedia=auto]) + +if test "$enable_multimedia" != "no"; then + if test "$enable_multimedia" = "auto"; then + PKG_CHECK_MODULES([GSTREAMER], [gstreamer-1.0 gstreamer-base-1.0 gstreamer-video-1.0], has_gstreamer=yes, has_gstreamer=no) + else + PKG_CHECK_MODULES([GSTREAMER], [gstreamer-1.0 gstreamer-base-1.0 gstreamer-video-1.0]) + has_gstreamer=yes + fi + + if test x$has_gstreamer = xyes; then + AC_DEFINE([ENABLE_MULTIMEDIA], [1], [Whether multimedia support is enabled]) + enable_multimedia=yes + else + enable_multimedia=no + fi +fi + +AM_CONDITIONAL([ENABLE_MULTIMEDIA], [test "$enable_multimedia" = "yes"]) + +dnl ========= Check for Desktop Schemas +PKG_CHECK_MODULES([DESKTOP_SCHEMAS], [gsettings-desktop-schemas], + has_desktop_schemas=yes, has_desktop_schemas=no) +if test x$has_desktop_schemas = xyes; then + AC_DEFINE([HAVE_DESKTOP_SCHEMAS], [1], [Whether GSettings Desktop Schemas are available]) +fi + +dnl Debug mode + +AC_ARG_ENABLE([debug], + AS_HELP_STRING([--enable-debug], + [Turn on evince debug mode]), + [enable_debug=$enableval], + [enable_debug=no]) + +if test "x$enable_debug" = "xyes"; then + DEBUG_FLAGS="-DEV_ENABLE_DEBUG" +fi + +LIBDOCUMENT_CFLAGS="$LIBDOCUMENT_CFLAGS $DEBUG_FLAGS" +LIBDOCUMENT_LIBS="$LIBDOCUMENT_LIBS" +AC_SUBST(LIBDOCUMENT_CFLAGS) +AC_SUBST(LIBDOCUMENT_LIBS) + +LIBVIEW_CFLAGS="$LIBVIEW_CFLAGS $GTKUNIXPRINT_CFLAGS $GSTREAMER_CFLAGS $DEBUG_FLAGS" +LIBVIEW_LIBS="$LIBVIEW_LIBS $GTKUNIXPRINT_LIBS $GSTREAMER_LIBS -lm" +AC_SUBST(LIBVIEW_CFLAGS) +AC_SUBST(LIBVIEW_LIBS) + +BACKEND_CFLAGS="$BACKEND_CFLAGS -DGDK_MULTIHEAD_SAFE -DGTK_MULTIHEAD_SAFE $DEBUG_FLAGS" +BACKEND_LIBS="$BACKEND_LIBS -lm" +AC_SUBST(BACKEND_CFLAGS) +AC_SUBST(BACKEND_LIBS) + +SHELL_CFLAGS="$SHELL_CORE_CFLAGS $LIBSECRET_CFLAGS -DGDK_MULTIHEAD_SAFE -DGTK_MULTIHEAD_SAFE $DEBUG_FLAGS $LIBGNOME_DESKTOP_CFLAGS" +SHELL_LIBS="$SHELL_CORE_LIBS $LIBSECRET_LIBS $LIBGNOME_DESKTOP_LIBS -lz -lm" +AC_SUBST(SHELL_CFLAGS) +AC_SUBST(SHELL_LIBS) + +FRONTEND_CFLAGS="$FRONTEND_CORE_CFLAGS $DEBUG_FLAGS" +FRONTEND_LIBS="$FRONTEND_CORE_LIBS -lz" +AC_SUBST(FRONTEND_CFLAGS) +AC_SUBST(FRONTEND_LIBS) + +EV_DAEMON_CFLAGS="$EV_DAEMON_CFLAGS $DEBUG_FLAGS" +AC_SUBST([EV_DAEMON_CFLAGS]) +AC_SUBST([EV_DAEMON_LIBS]) + +# Check for Nautilus property page build +AC_ARG_ENABLE([nautilus], + [AS_HELP_STRING([--disable-nautilus], + [Disable build of nautilus extensions])], + [], + [case "$with_platform" in + gnome) enable_nautilus=yes ;; + *) enable_nautilus=no ;; + esac]) + +if test "$enable_nautilus" = "yes" ; then + PKG_CHECK_MODULES([NAUTILUS],[gtk+-x11-3.0 $MM gthread-2.0 libnautilus-extension >= $NAUTILUS_REQUIRED], + [],[AC_MSG_ERROR([libnautilus-extension not found; use --disable-nautilus to disable the nautilus extensions])]) + NAUTILUS_EXTENSION_DIR=`$PKG_CONFIG --variable=extensiondir libnautilus-extension` + NAUTILUS_EXTENSION_DIR=${NAUTILUS_EXTENSION_DIR#`$PKG_CONFIG --variable=libdir libnautilus-extension`} + NAUTILUS_EXTENSION_DIR=${NAUTILUS_EXTENSION_DIR#/} + AC_SUBST(NAUTILUS_EXTENSION_DIR) + AC_SUBST(NAUTILUS_CFLAGS) + AC_SUBST(NAUTILUS_LIBS) + + AC_DEFINE([HAVE_NAUTILUS],[1], [defined if you build the nautilus plugin]) +fi + +AM_CONDITIONAL([ENABLE_NAUTILUS],[test "$enable_nautilus" = "yes"]) + +# *************** +# Document Viewer +# *************** + +AC_ARG_ENABLE( + [viewer], + [AS_HELP_STRING([--disable-viewer], [Disable GNOME Document viewer])], + [], + [enable_viewer=yes] +) +AM_CONDITIONAL([ENABLE_VIEWER],[test "$enable_viewer" = "yes"]) + +# *************** +# Thumbnailer +# *************** + +AC_ARG_ENABLE([thumbnailer], + [AS_HELP_STRING([--disable-thumbnailer], + [Disable GNOME thumbnailer])], + [], + [enable_thumbnailer=yes]) + +AM_CONDITIONAL([ENABLE_THUMBNAILER],[test "$enable_thumbnailer" = "yes"]) + +# *************** +# Print Previewer +# *************** + +AC_ARG_ENABLE([previewer], + [AS_HELP_STRING([--disable-previewer], + [Disable the GNOME Document Previewer])], + [], + [enable_previewer=yes]) + +if test x$enable_previewer = "xyes" ; then + PKG_CHECK_MODULES([PREVIEWER],[gtk+-3.0 >= $GTK_REQUIRED gthread-2.0 gio-2.0 >= $GLIB_REQUIRED gmodule-no-export-2.0 >= $GLIB_REQUIRED]) +fi + +AM_CONDITIONAL([ENABLE_PREVIEWER],[test "$enable_previewer" = "yes"]) +PREVIEWER_CFLAGS="$PREVIEWER_CFLAGS $GTKUNIXPRINT_CFLAGS $DEBUG_FLAGS" +PREVIEWER_LIBS="$PREVIEWER_LIBS $GTKUNIXPRINT_LIBS -lz" +AC_SUBST(PREVIEWER_CFLAGS) +AC_SUBST(PREVIEWER_LIBS) + + +# ************** +# Browser Plugin +# ************** + +AC_ARG_ENABLE([browser-plugin], + [AS_HELP_STRING([--disable-browser-plugin], + [Disable the Browser Plugin])], + [], + [enable_browser_plugin=yes]) + +if test x$enable_browser_plugin = "xyes" ; then + PKG_CHECK_MODULES([BROWSER_PLUGIN],[gtk+-3.0 >= $GTK_REQUIRED gthread-2.0 gio-2.0 >= $GLIB_REQUIRED]) + + if test -z "${BROWSER_PLUGIN_DIR}"; then + BROWSER_PLUGIN_DIR="\${prefix}/lib/mozilla/plugins" + fi + AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to]) +fi + +AM_CONDITIONAL([ENABLE_BROWSER_PLUGIN],[test "$enable_browser_plugin" = "yes"]) +BROWSER_PLUGIN_CFLAGS="$BROWSER_PLUGIN_CFLAGS $DEBUG_FLAGS" +AC_SUBST(BROWSER_PLUGIN_CFLAGS) +AC_SUBST(BROWSER_PLUGIN_LIBS) + +# *** +# GIR +# *** + +# No automagic please! +if test -z "$enable_introspection"; then + enable_introspection=no +fi + +GOBJECT_INTROSPECTION_CHECK([1.0]) + +dnl ================== portability checks =========================================== + +dnl for backtrace() +AC_CHECK_HEADERS([execinfo.h]) + +AC_CHECK_DECL([_NL_MEASUREMENT_MEASUREMENT],[ + AC_DEFINE([HAVE__NL_MEASUREMENT_MEASUREMENT],[1],[Define if _NL_MEASUREMENT_MEASUREMENT is available]) + ],[],[#include ]) + +dnl ================== pdf checks =================================================== +AC_ARG_ENABLE([pdf], + [AS_HELP_STRING([--disable-pdf], + [Disable the PDF support])], + [enable_pdf=$enableval], + [enable_pdf=yes]) + +if test "x$enable_pdf" = "xyes"; then + POPPLER_REQUIRED=0.24.0 + PKG_CHECK_MODULES(POPPLER, poppler-glib >= $POPPLER_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED,enable_pdf=yes,enable_pdf=no) + + if test "x$enable_pdf" = "xyes"; then + PKG_CHECK_MODULES(CAIRO_PDF, cairo-pdf, enable_cairo_pdf=yes, enable_cairo_pdf=no) + if test x$enable_cairo_pdf = xyes; then + AC_DEFINE([HAVE_CAIRO_PDF], [1], [defined if cairo-pdf is available]) + fi + + PKG_CHECK_MODULES(CAIRO_PS, cairo-ps, enable_cairo_ps=yes, enable_cairo_ps=no) + if test x$enable_cairo_ps = xyes; then + AC_DEFINE([HAVE_CAIRO_PS], [1], [defined if cairo-ps is available]) + fi + + evince_save_LIBS=$LIBS + LIBS="$LIBS $POPPLER_LIBS" + AC_CHECK_FUNCS(poppler_annot_markup_set_popup_rectangle) + LIBS=$evince_save_LIBS + else + AC_MSG_ERROR("PDF support is disabled since poppler-glib library version $POPPLER_REQUIRED or newer not found") + fi +fi + +AM_CONDITIONAL(ENABLE_PDF, test x$enable_pdf = xyes) +dnl ================== end of pdf checks ============================================ + +dnl libspectre (used by ps and dvi backends) +SPECTRE_REQUIRED=0.2.0 +PKG_CHECK_MODULES(SPECTRE, libspectre >= $SPECTRE_REQUIRED,have_spectre=yes,have_spectre=no) +AM_CONDITIONAL(HAVE_SPECTRE, test x$have_spectre = xyes) +if test "x$have_spectre" = "xyes"; then + AC_DEFINE([HAVE_SPECTRE], [1], [Have libspectre]) +fi + +dnl ================== ps checks ==================================================== +AC_ARG_ENABLE(ps, + [AS_HELP_STRING([--disable-ps], + [Disable the PostScript backend])], + [enable_ps=$enableval], + [enable_ps=yes]) + +if test "x$enable_ps" = "xyes"; then + if test "x$have_spectre" = "xyes"; then + AC_DEFINE([ENABLE_PS], [1], [Enable support for PostScript files.]) + else + enable_ps="no" + AC_MSG_WARN([PS support is disabled since libspectre (version >= $SPECTRE_REQUIRED) is needed]) + fi +fi +AM_CONDITIONAL(ENABLE_PS, test x$enable_ps = xyes) +dnl ======================== End of ps checks =================================== + +dnl ================== tiff checks =================================================== +AC_ARG_ENABLE(tiff, + [AS_HELP_STRING([--disable-tiff], + [Disable the support of multipage tiff])], + [enable_tiff=$enableval], + [enable_tiff=yes]) + +if test "x$enable_tiff" = "xyes"; then + AC_CHECK_HEADERS([tiff.h],enable_tiff=yes,enable_tiff=no,) + if test "x$enable_tiff" = "xyes"; then + AC_CHECK_LIB([tiff],TIFFOpen,enable_tiff=yes,enable_tiff=no,"-lz") + AC_CHECK_LIB([tiff],TIFFReadRGBAImageOriented,enable_tiff=yes,enable_tiff=no,"-lz") + fi + if test "x$enable_tiff" = "xyes"; then + AC_DEFINE([ENABLE_TIFF], [1], [Enable multipage tiff support.]) + else + AC_MSG_WARN("Tiff support is disabled since tiff library version 3.6 or newer not found") + fi +fi + +AM_CONDITIONAL(ENABLE_TIFF, test x$enable_tiff = xyes) +dnl ================== end of tiff checks ============================================ + +dnl ================== djvu checks =================================================== + +AC_ARG_ENABLE(djvu, + [AS_HELP_STRING([--disable-djvu], + [Disable the support of djvu viewer])], + [enable_djvu=$enableval], + [enable_djvu=yes]) + +if test "x$enable_djvu" = "xyes"; then + DJVULIBRE_REQUIRED=3.5.17 + PKG_CHECK_MODULES(DJVU, ddjvuapi >= $DJVULIBRE_REQUIRED, enable_djvu=yes, enable_djvu=no) + + if test "x$enable_djvu" = "xyes"; then + AC_DEFINE([ENABLE_DJVU], [1], [Enable djvu viewer support.]) + else + AC_MSG_WARN([ +** Djvu support is disabled since a recent version of the djvulibre +** library was not found. You need at least djvulibre-3.5.17 which +** can be found on http://djvulibre.djvuzone.org +]) + fi +fi + +AM_CONDITIONAL(ENABLE_DJVU, test x$enable_djvu = xyes) + +dnl ================== End of djvu checks =================================================== + +dnl ================== dvi checks =================================================== + +AC_ARG_ENABLE(dvi, + [AS_HELP_STRING([--disable-dvi], + [Disable the support of dvi viewer])], + [enable_dvi=$enableval], + [enable_dvi=yes]) + +AC_ARG_ENABLE(t1lib, + [AS_HELP_STRING([--enable-t1lib], + [Compile with support of t1lib for type1 fonts in dvi])], + [enable_type1_fonts=$enableval], + [enable_type1_fonts=no]) + +if test "x$enable_dvi" = "xyes"; then + AC_C_CONST + AC_C_INLINE + AC_TYPE_SIZE_T + AC_CHECK_SIZEOF(long, 4) + AC_CHECK_SIZEOF(int, 4) + AC_CHECK_SIZEOF(short, 2) + AC_CHECK_SIZEOF(long long, 4) + AC_CHECK_SIZEOF(void *, 4) + AC_CHECK_LIB([kpathsea],[kpse_init_prog],[enable_dvi=yes],[enable_dvi=no]) + + if test "x$enable_dvi" = "xyes"; then + AC_DEFINE([ENABLE_DVI], [1], [Enable dvi viewer support.]) + else + AC_MSG_WARN("Dvi support is disabled since kpathsea library is not found. Check your TeX installation.") + fi +fi +AM_CONDITIONAL(ENABLE_DVI, test x$enable_dvi = xyes) + +if test "x$enable_dvi" = "xyes"; then + if test "x$enable_type1_fonts" = "xyes"; then + AC_CHECK_LIB([t1],T1_InitLib,enable_type1_fonts=yes,enable_type1_fonts=no,[-lm]) + fi + + if test "x$enable_type1_fonts" = xyes; then + AC_DEFINE([WITH_TYPE1_FONTS], [1], [Enable t1lib support in dvi.]) + fi +else + enable_type1_fonts=no +fi +AM_CONDITIONAL(WITH_TYPE1_FONTS, test x$enable_type1_fonts = xyes) + +dnl ================== End of dvi checks =================================================== + +dnl ================== comic book checks =================================================== + +AC_ARG_ENABLE(comics, + [AS_HELP_STRING([--enable-comics], + [Compile with support for comic book archives])], + [enable_comics=$enableval], + [enable_comics=yes]) + +if test "x$enable_comics" = "xyes"; then + AC_DEFINE([ENABLE_COMICS], [1], [Enable support for comics.]) +fi +AM_CONDITIONAL(ENABLE_COMICS, test x$enable_comics = xyes) + +dnl ================== End of comic book checks ============================================ + +dnl ================== XPS checks =================================================== + +AC_ARG_ENABLE(xps, + [AS_HELP_STRING([--enable-xps], + [Compile with support for XPS documents.])], + [enable_xps=$enableval], + [enable_xps=yes]) + +if test "x$enable_xps" = "xyes"; then + GXPS_REQUIRED=0.2.1 + PKG_CHECK_MODULES(GXPS, libgxps >= $GXPS_REQUIRED,enable_xps=yes,enable_xps=no) + + if test "x$enable_xps" = "xyes"; then + AC_DEFINE([ENABLE_XPS], [1], [Enable support for XPS documents.]) + else + enable_xps="no" + AC_MSG_WARN(["XPS support is disabled since libgxps (version >= $GXPS_REQUIRED) is needed]) + fi +fi + +AM_CONDITIONAL(ENABLE_XPS, test x$enable_xps = xyes) + +dnl ================== End of XPS checks =================================================== + +dnl =================== Compile warnings =================================================== + +GNOME_COMPILE_WARNINGS + +CC_CHECK_FLAGS_APPEND([AM_CFLAGS],[CFLAGS],[ \ +]) + +AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS" +AM_CXXFLAGS="$AM_CXXFLAGS $WARN_CXXFLAGS" + +dnl =================== End of compile warnings============================================= + +dnl =================== Mime types list ==================================================== + +if test "x$enable_pdf" = "xyes" ; then + PDF_MIME_TYPES="application/pdf;application/x-bzpdf;application/x-gzpdf;application/x-xzpdf;application/x-ext-pdf" + APPDATA_PDF_MIME_TYPES=$(echo "$PDF_MIME_TYPES" | sed -e 's/;/<\/mimetype>\n /g') + if test -z "$EVINCE_MIME_TYPES"; then + EVINCE_MIME_TYPES="${PDF_MIME_TYPES}" + else + EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES};${PDF_MIME_TYPES}" + fi +fi +AC_SUBST(PDF_MIME_TYPES) +AC_SUBST(APPDATA_PDF_MIME_TYPES) +AM_SUBST_NOTMAKE(APPDATA_PDF_MIME_TYPES) +if test "x$enable_ps" = "xyes" ; then + PS_MIME_TYPES="application/postscript;application/x-bzpostscript;application/x-gzpostscript;image/x-eps;image/x-bzeps;image/x-gzeps;application/x-ext-ps;application/x-ext-eps" + APPDATA_PS_MIME_TYPES=$(echo "$PS_MIME_TYPES" | sed -e 's/;/<\/mimetype>\n /g') + if test -z "$EVINCE_MIME_TYPES"; then + EVINCE_MIME_TYPES="${PS_MIME_TYPES}" + else + EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES};${PS_MIME_TYPES}" + fi +fi +AC_SUBST(PS_MIME_TYPES) +AC_SUBST(APPDATA_PS_MIME_TYPES) +AM_SUBST_NOTMAKE(APPDATA_PS_MIME_TYPES) +if test "x$enable_dvi" = "xyes"; then + DVI_MIME_TYPES="application/x-dvi;application/x-bzdvi;application/x-gzdvi;application/x-ext-dvi" + APPDATA_DVI_MIME_TYPES=$(echo "$DVI_MIME_TYPES" | sed -e 's/;/<\/mimetype>\n /g') + if test -z "$EVINCE_MIME_TYPES"; then + EVINCE_MIME_TYPES="${DVI_MIME_TYPES}" + else + EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES};${DVI_MIME_TYPES}" + fi +fi +AC_SUBST(DVI_MIME_TYPES) +AC_SUBST(APPDATA_DVI_MIME_TYPES) +AM_SUBST_NOTMAKE(APPDATA_DVI_MIME_TYPES) +if test "x$enable_djvu" = "xyes"; then + DJVU_MIME_TYPES="image/vnd.djvu;application/x-ext-djv;application/x-ext-djvu" + APPDATA_DJVU_MIME_TYPES=$(echo "$DJVU_MIME_TYPES" | sed -e 's/;/<\/mimetype>\n /g') + if test -z "$EVINCE_MIME_TYPES"; then + EVINCE_MIME_TYPES="${DJVU_MIME_TYPES}" + else + EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES};${DJVU_MIME_TYPES}" + fi +fi +AC_SUBST(DJVU_MIME_TYPES) +AC_SUBST(APPDATA_DJVU_MIME_TYPES) +AM_SUBST_NOTMAKE(APPDATA_DJVU_MIME_TYPES) +if test "x$enable_tiff" = "xyes"; then + TIFF_MIME_TYPES="image/tiff" + APPDATA_TIFF_MIME_TYPES=$(echo "$TIFF_MIME_TYPES" | sed -e 's/;/<\/mimetype>\n /g') + if test -z "$EVINCE_MIME_TYPES"; then + EVINCE_MIME_TYPES="${TIFF_MIME_TYPES}" + else + EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES};${TIFF_MIME_TYPES}" + fi +fi +AC_SUBST(TIFF_MIME_TYPES) +AC_SUBST(APPDATA_TIFF_MIME_TYPES) +AM_SUBST_NOTMAKE(APPDATA_TIFF_MIME_TYPES) +if test "x$enable_comics" = "xyes"; then + COMICS_MIME_TYPES="application/x-cbr;application/x-cbz;application/x-cb7;application/x-ext-cbr;application/x-ext-cbz;application/x-ext-cb7" + APPDATA_COMICS_MIME_TYPES=$(echo "$COMICS_MIME_TYPES" | sed -e 's/;/<\/mimetype>\n /g') + if test -z "$EVINCE_MIME_TYPES"; then + EVINCE_MIME_TYPES="${COMICS_MIME_TYPES}" + else + EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES};${COMICS_MIME_TYPES}" + fi +fi +AC_SUBST(COMICS_MIME_TYPES) +AC_SUBST(APPDATA_COMICS_MIME_TYPES) +AM_SUBST_NOTMAKE(APPDATA_COMICS_MIME_TYPES) +if test "x$enable_xps" = "xyes"; then + XPS_MIME_TYPES="application/oxps;application/vnd.ms-xpsdocument" + APPDATA_XPS_MIME_TYPES=$(echo "$XPS_MIME_TYPES" | sed -e 's/;/<\/mimetype>\n /g') + if test -z "$EVINCE_MIME_TYPES"; then + EVINCE_MIME_TYPES="${XPS_MIME_TYPES}" + else + EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES};${XPS_MIME_TYPES}" + fi +fi +AC_SUBST(XPS_MIME_TYPES) +AC_SUBST(APPDATA_XPS_MIME_TYPES) +AM_SUBST_NOTMAKE(APPDATA_XPS_MIME_TYPES) + +AC_SUBST(EVINCE_MIME_TYPES) + +AC_CHECK_FUNC(localtime_r, AC_DEFINE(HAVE_LOCALTIME_R, 1, [Defines if localtime_r is available on your system])) + +# ***************** +# Help files +# ***************** + +YELP_HELP_INIT + +# ***************** +# API documentation +# ***************** + +GTK_DOC_CHECK([1.13],[--flavour no-tmpl]) + +AC_SUBST([GLIB_PREFIX],[$($PKG_CONFIG --variable=prefix glib-2.0)]) +AC_SUBST([GTK_PREFIX],[$($PKG_CONFIG --variable=prefix gtk+-3.0)]) + +# ****************** +# Backends directory +# ****************** + +AC_SUBST([backenddir],"\$(libdir)/evince/ev_binary_version/backends") +AC_SUBST([backend_binary_version],"ev_binary_version") + +# ********** +# Versioning +# ********** + +AC_SUBST([EV_MAJOR_VERSION],[ev_major_version]) +AC_SUBST([EV_MINOR_VERSION],[ev_minor_version]) +AC_SUBST([EV_MICRO_VERSION],[ev_micro_version]) + +AC_SUBST([EV_API_VERSION],[ev_api_version]) +AC_SUBST([EV_API_VERSION_U],[AS_TR_SH([ev_api_version])]) +AC_SUBST([EV_BINARY_VERSION],[ev_binary_version]) + +AC_SUBST([EV_DOCUMENT_LT_VERSION_INFO],[ev_document_lt_version_info]) +AC_SUBST([EV_DOCUMENT_LT_CURRENT_MINUS_AGE],[ev_document_lt_current_minus_age]) +AC_SUBST([EV_VIEW_LT_VERSION_INFO],[ev_view_lt_version_info]) +AC_SUBST([EV_VIEW_LT_CURRENT_MINUS_AGE],[ev_view_lt_current_minus_age]) + +AC_SUBST([AM_CPPFLAGS]) +AC_SUBST([AM_CFLAGS]) +AC_SUBST([AM_CXXFLAGS]) +AC_SUBST([AM_LDFLAGS]) + +# ***************************************************************************** +# ***************************************************************************** + +AC_CONFIG_FILES([ +backend/Makefile +backend/comics/comicsdocument.evince-backend.in +backend/comics/evince-comicsdocument.metainfo.xml.in +backend/comics/Makefile +backend/djvu/djvudocument.evince-backend.in +backend/djvu/evince-djvudocument.metainfo.xml.in +backend/djvu/Makefile +backend/dvi/dvidocument.evince-backend.in +backend/dvi/evince-dvidocument.metainfo.xml.in +backend/dvi/Makefile +backend/dvi/mdvi-lib/Makefile +backend/pdf/evince-pdfdocument.metainfo.xml.in +backend/pdf/pdfdocument.evince-backend.in +backend/pdf/Makefile +backend/ps/evince-psdocument.metainfo.xml.in +backend/ps/psdocument.evince-backend.in +backend/ps/Makefile +backend/tiff/evince-tiffdocument.metainfo.xml.in +backend/tiff/tiffdocument.evince-backend.in +backend/tiff/Makefile +backend/xps/evince-xpsdocument.metainfo.xml.in +backend/xps/xpsdocument.evince-backend.in +backend/xps/Makefile +browser-plugin/Makefile +cut-n-paste/Makefile +cut-n-paste/gimpcellrenderertoggle/Makefile +cut-n-paste/synctex/Makefile +cut-n-paste/libgd/Makefile +data/evince.desktop.in +data/evince-previewer.desktop.in +data/Makefile +data/icons/Makefile +data/icons/16x16/Makefile +data/icons/16x16/apps/Makefile +data/icons/16x16/actions/Makefile +data/icons/16x16/mimetypes/Makefile +data/icons/22x22/Makefile +data/icons/22x22/apps/Makefile +data/icons/22x22/actions/Makefile +data/icons/22x22/mimetypes/Makefile +data/icons/24x24/Makefile +data/icons/24x24/apps/Makefile +data/icons/24x24/actions/Makefile +data/icons/24x24/mimetypes/Makefile +data/icons/32x32/Makefile +data/icons/32x32/actions/Makefile +data/icons/32x32/mimetypes/Makefile +data/icons/48x48/Makefile +data/icons/48x48/apps/Makefile +data/icons/48x48/actions/Makefile +data/icons/256x256/Makefile +data/icons/256x256/apps/Makefile +data/icons/scalable/Makefile +data/icons/scalable/actions/Makefile +data/icons/scalable/apps/Makefile +data/icons/scalable/mimetypes/Makefile +help/Makefile +help/reference/Makefile +help/reference/libdocument/Makefile +help/reference/libdocument/version.xml +help/reference/libview/Makefile +help/reference/libview/version.xml +help/reference/shell/Makefile +help/reference/shell/version.xml +libdocument/Makefile +libdocument/ev-version.h +libmisc/Makefile +libview/Makefile +Makefile +po/Makefile.in +previewer/Makefile +properties/Makefile +shell/Makefile +thumbnailer/Makefile +]) + +AC_CONFIG_FILES(evince-document-[]ev_api_version[].pc:evince-document.pc.in) +AC_CONFIG_FILES(evince-view-[]ev_api_version[].pc:evince-view.pc.in) + +AC_OUTPUT + +AC_MSG_NOTICE([ + +Evince configure summary +======================== + +Platform .................: $with_platform +Debug mode ...............: $enable_debug + + +FRONTENDS + +Viewer ...................: $enable_viewer +Previewer ................: $enable_previewer +Thumbnailer ..............: $enable_thumbnailer +Nautilus Extensions.......: $enable_nautilus +Browser Plugin............: $enable_browser_plugin + + +BACKENDS + +PDF ......................: $enable_pdf +PostScript ...............: $enable_ps +TIFF .....................: $enable_tiff +DJVU .....................: $enable_djvu +DVI ......................: $enable_dvi +Comics ...................: $enable_comics +XPS ......................: $enable_xps + + +FEATURES + +GTK Doc reference ........: $enable_gtk_doc +GObject Introspection ....: $enable_introspection +DBUS communication .......: $enable_dbus +Keyring integration ......: $with_keyring +GTK+ Unix Print ..........: $with_gtk_unix_print +Thumbnail cache ..........: $enable_gnome_desktop +Multimedia ...............: $enable_multimedia + +]) diff -Nru evince-3.18.2/.pc/.quilt_patches evince-3.18.2/.pc/.quilt_patches --- evince-3.18.2/.pc/.quilt_patches 2019-06-19 20:19:30.000000000 +0000 +++ evince-3.18.2/.pc/.quilt_patches 2019-07-22 18:32:40.000000000 +0000 @@ -1 +1 @@ -/home/buildd/build-RECIPEBRANCHBUILD-2354461/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches +/home/buildd/build-RECIPEBRANCHBUILD-2375739/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches diff -Nru evince-3.18.2/.pc/.quilt_series evince-3.18.2/.pc/.quilt_series --- evince-3.18.2/.pc/.quilt_series 2019-06-19 20:19:30.000000000 +0000 +++ evince-3.18.2/.pc/.quilt_series 2019-07-22 18:32:40.000000000 +0000 @@ -1 +1 @@ -/home/buildd/build-RECIPEBRANCHBUILD-2354461/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches/series +/home/buildd/build-RECIPEBRANCHBUILD-2375739/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches/series