[oe] [meta-oe 3/3] gimp: initial add 2.6.11

Andreas Müller schnitzeltony at gmx.de
Mon Jan 23 07:24:29 UTC 2012


* based on oe-classic [1]-[2]
* build tested incremental & from scratch in angstrom environment
* run tested on overo

[1] http://cgit.openembedded.org/openembedded/tree/recipes/gimp/gimp.inc
[2] http://cgit.openembedded.org/openembedded/tree/recipes/gimp/gimp_2.6.8.bb

Signed-off-by: Andreas Müller <schnitzeltony at gmx.de>
---
 .../gimp/gimp/gimp-2.6.11-poppler18.patch          |  150 ++++++++++++++++++++
 meta-oe/recipes-graphics/gimp/gimp_2.6.11.bb       |   23 +++
 2 files changed, 173 insertions(+), 0 deletions(-)
 create mode 100644 meta-oe/recipes-graphics/gimp/gimp/gimp-2.6.11-poppler18.patch
 create mode 100644 meta-oe/recipes-graphics/gimp/gimp_2.6.11.bb

diff --git a/meta-oe/recipes-graphics/gimp/gimp/gimp-2.6.11-poppler18.patch b/meta-oe/recipes-graphics/gimp/gimp/gimp-2.6.11-poppler18.patch
new file mode 100644
index 0000000..0ebfd89
--- /dev/null
+++ b/meta-oe/recipes-graphics/gimp/gimp/gimp-2.6.11-poppler18.patch
@@ -0,0 +1,150 @@
+From 9b3e1c91fd2eac69da6947ec9c7fbf10096ba237 Mon Sep 17 00:00:00 2001
+From: Mukund Sivaraman <muks at banu.com>
+Date: Wed, 20 Apr 2011 13:25:44 +0000
+Subject: file-pdf-load: Don't use deprecated API (bug #646947)
+
+Upstream-Status: Applied
+
+---
+diff --git a/plug-ins/common/file-pdf-load.c b/plug-ins/common/file-pdf-load.c
+index c2d5512..6183403 100644
+--- a/plug-ins/common/file-pdf.c
++++ b/plug-ins/common/file-pdf.c
+@@ -4,6 +4,9 @@
+  *
+  * Copyright (C) 2005 Nathan Summers
+  *
++ * Some code borrowed from poppler.git/glib/poppler-page.cc
++ * Copyright (C) 2005, Red Hat, Inc.
++ *
+  * This program is free software; you can redistribute it and/or modify
+  * it under the terms of the GNU General Public License as published by
+  * the Free Software Foundation; either version 2 of the License, or
+@@ -582,6 +585,84 @@ layer_from_pixbuf (gint32        image,
+   return layer;
+ }
+ 
++static void
++copy_cairo_surface_to_pixbuf (cairo_surface_t *surface,
++                              GdkPixbuf       *pixbuf)
++{
++  int cairo_width, cairo_height, cairo_rowstride;
++  unsigned char *pixbuf_data, *dst, *cairo_data;
++  int pixbuf_rowstride, pixbuf_n_channels;
++  unsigned int *src;
++  int x, y;
++
++  cairo_width = cairo_image_surface_get_width (surface);
++  cairo_height = cairo_image_surface_get_height (surface);
++  cairo_rowstride = cairo_image_surface_get_stride (surface);
++  cairo_data = cairo_image_surface_get_data (surface);
++
++  pixbuf_data = gdk_pixbuf_get_pixels (pixbuf);
++  pixbuf_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
++  pixbuf_n_channels = gdk_pixbuf_get_n_channels (pixbuf);
++
++  if (cairo_width > gdk_pixbuf_get_width (pixbuf))
++    cairo_width = gdk_pixbuf_get_width (pixbuf);
++  if (cairo_height > gdk_pixbuf_get_height (pixbuf))
++    cairo_height = gdk_pixbuf_get_height (pixbuf);
++
++  for (y = 0; y < cairo_height; y++)
++    {
++      src = (unsigned int *) (cairo_data + y * cairo_rowstride);
++      dst = pixbuf_data + y * pixbuf_rowstride;
++
++      for (x = 0; x < cairo_width; x++)
++        {
++          dst[0] = (*src >> 16) & 0xff;
++          dst[1] = (*src >> 8) & 0xff;
++          dst[2] = (*src >> 0) & 0xff;
++
++          if (pixbuf_n_channels == 4)
++            dst[3] = (*src >> 24) & 0xff;
++
++          dst += pixbuf_n_channels;
++          src++;
++        }
++    }
++}
++
++static GdkPixbuf *
++render_page_to_pixbuf (PopplerPage *page,
++                       int          width,
++                       int          height,
++                       double       scale)
++{
++  GdkPixbuf *pixbuf;
++  cairo_surface_t *surface;
++  cairo_t *cr;
++
++  pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
++  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
++  cr = cairo_create (surface);
++
++  cairo_save (cr);
++  cairo_translate (cr, 0.0, 0.0);
++
++  if (scale != 1.0)
++    cairo_scale (cr, scale, scale);
++
++  poppler_page_render (page, cr);
++  cairo_restore (cr);
++
++  cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
++  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
++  cairo_paint (cr);
++
++  cairo_destroy (cr);
++  copy_cairo_surface_to_pixbuf (surface, pixbuf);
++  cairo_surface_destroy (surface);
++
++  return pixbuf;
++}
++
+ static gint32
+ load_image (PopplerDocument        *doc,
+             const gchar            *filename,
+@@ -613,7 +694,7 @@ load_image (PopplerDocument        *doc,
+       gdouble      page_width;
+       gdouble      page_height;
+ 
+-      GdkPixbuf   *buf;
++      GdkPixbuf   *pixbuf;
+       gint         width;
+       gint         height;
+ 
+@@ -643,15 +724,13 @@ load_image (PopplerDocument        *doc,
+           gimp_image_set_resolution (image_ID, resolution, resolution);
+         }
+ 
+-      buf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
+-
+-      poppler_page_render_to_pixbuf (page, 0, 0, width, height, scale, 0, buf);
++      pixbuf = render_page_to_pixbuf (page, width, height, scale);
+ 
+-      layer_from_pixbuf (image_ID, page_label, i, buf,
++      layer_from_pixbuf (image_ID, page_label, i, pixbuf,
+                          doc_progress, 1.0 / pages->n_pages);
+ 
+       g_free (page_label);
+-      g_object_unref (buf);
++      g_object_unref (pixbuf);
+ 
+       doc_progress = (double) (i + 1) / pages->n_pages;
+       gimp_progress_update (doc_progress);
+@@ -729,11 +808,7 @@ get_thumbnail (PopplerDocument *doc,
+       width  *= scale;
+       height *= scale;
+ 
+-      pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
+-                               width, height);
+-
+-      poppler_page_render_to_pixbuf (page,
+-                                     0, 0, width, height, scale, 0, pixbuf);
++      pixbuf = render_page_to_pixbuf (page, width, height, scale);
+     }
+ 
+   g_object_unref (page);
+--
+cgit v0.9.0.2
diff --git a/meta-oe/recipes-graphics/gimp/gimp_2.6.11.bb b/meta-oe/recipes-graphics/gimp/gimp_2.6.11.bb
new file mode 100644
index 0000000..263d5c8
--- /dev/null
+++ b/meta-oe/recipes-graphics/gimp/gimp_2.6.11.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "The GIMP is the GNU Image Manipulation Program."
+HOMEPAGE = "http://www.gimp.org"
+SECTION = "x11/graphics"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=878e3965c7b52d85827c75f5a2f3b314"
+
+DEPENDS = "babl gdk-pixbuf-native libart-lgpl gtk+ jpeg libpng libexif tiff webkit-gtk lcms gegl poppler"
+
+inherit gnome
+
+SRC_URI = "ftp://ftp.gimp.org/pub/gimp/v2.6/gimp-${PV}.tar.bz2 \
+           file://gimp-2.6.11-poppler18.patch"
+SRC_URI[md5sum] = "bb2939fe13e54fc7255cef5d097bb5dd"
+SRC_URI[sha256sum] = "9b6d08d0803b3912ea596d1b77b9c21ee13778c23388a225c004b8c1587cb0a1"
+
+EXTRA_OECONF = "--disable-python"
+
+do_configure_append() {
+	find ${S} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
+	find ${S} -name Makefile | xargs sed -i s:'-I/usr/include':'-I${STAGING_INCDIR}':g
+}
+
+FILES_${PN}-dbg += "${libdir}/gimp/2.0/*/.debug"
-- 
1.7.4.4





More information about the Openembedded-devel mailing list