From d42ea11c01db4583efb2cb62df3d1143aa30bb51 Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Tue, 7 Aug 2012 14:55:44 -0500
Subject: libgdiplus 2.10

---
 abs/extra/libgdiplus/PKGBUILD       |  15 +++-
 abs/extra/libgdiplus/__changelog    |   1 -
 abs/extra/libgdiplus/libpng15.patch | 164 ++++++++++++++++++++++++++++++++++++
 3 files changed, 175 insertions(+), 5 deletions(-)
 delete mode 100644 abs/extra/libgdiplus/__changelog
 create mode 100644 abs/extra/libgdiplus/libpng15.patch

diff --git a/abs/extra/libgdiplus/PKGBUILD b/abs/extra/libgdiplus/PKGBUILD
index d933fc1..84e3f45 100644
--- a/abs/extra/libgdiplus/PKGBUILD
+++ b/abs/extra/libgdiplus/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 95327 2010-10-18 17:52:42Z daniel $
+# $Id: PKGBUILD 148818 2012-02-05 11:51:42Z ibiru $
 # Maintainer: Daniel Isenmann <daniel@archlinux.org>
 
 pkgname=libgdiplus
-pkgver=2.8
+pkgver=2.10
 pkgrel=2
 pkgdesc="An Open Source Implementation of the GDI+ API"
 arch=(i686 x86_64)
@@ -11,12 +11,19 @@ url="http://www.mono-project.com"
 depends=('libtiff>=3.9.2-2' 'cairo>=1.8.10' 'giflib' 'glib2>=2.24.0' 'libexif')
 makedepends=('pkgconfig')
 options=('!libtool')
-source=(http://ftp.novell.com/pub/mono/sources/${pkgname}/${pkgname}-${pkgver}.tar.bz2)
-md5sums=('4fd70e5ab7847574c20453c349bc4c97')
+source=(http://download.mono-project.com/sources/${pkgname}/${pkgname}-${pkgver}.tar.bz2 libpng15.patch)
+md5sums=('451966e8f637e3a1f02d1d30f900255d'
+         'a2d143676bbaceeb88b4c34069e93986')
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
+  patch -p0 <../libpng15.patch
   ./configure --prefix=/usr --with-cairo=system || return 1
+  
   make || return 1
+}
+
+package() {
+  cd "${srcdir}/${pkgname}-${pkgver}"
   make DESTDIR="${pkgdir}" install || return 1
 }
diff --git a/abs/extra/libgdiplus/__changelog b/abs/extra/libgdiplus/__changelog
deleted file mode 100644
index aecc073..0000000
--- a/abs/extra/libgdiplus/__changelog
+++ /dev/null
@@ -1 +0,0 @@
-update to 2.8
diff --git a/abs/extra/libgdiplus/libpng15.patch b/abs/extra/libgdiplus/libpng15.patch
new file mode 100644
index 0000000..31a1c01
--- /dev/null
+++ b/abs/extra/libgdiplus/libpng15.patch
@@ -0,0 +1,164 @@
+$NetBSD: patch-aa,v 1.8 2011/01/21 10:21:51 wiz Exp $
+
+Fix build with png-1.5.
+
+--- src/pngcodec.c.orig	2010-11-03 16:52:54.000000000 +0000
++++ src/pngcodec.c
+@@ -116,10 +116,15 @@ gdip_load_png_properties (png_structp pn
+ 	bitmap_data->dpi_horz = png_get_x_pixels_per_inch(png_ptr, info_ptr);
+ 	bitmap_data->dpi_vert = png_get_y_pixels_per_inch(png_ptr, info_ptr);
+ #elif defined(PNG_pHYs_SUPPORTED)
+-	if ((info_ptr->valid & PNG_INFO_pHYs) && (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)) {
+-		bitmap_data->image_flags |= ImageFlagsHasRealDPI;
+-		bitmap_data->dpi_horz = info_ptr->x_pixels_per_unit * 0.0254;
+-		bitmap_data->dpi_vert = info_ptr->y_pixels_per_unit * 0.0254;
++	if (png_get_valid (png_ptr, info_ptr, PNG_INFO_pHYs)) {
++		png_uint_32 res_x, res_y;
++		int unit_type;
++		png_get_pHYs (png_ptr, info_ptr, &res_x, &res_y, &unit_type);
++		if (unit_type == PNG_RESOLUTION_METER) {
++			bitmap_data->image_flags |= ImageFlagsHasRealDPI;
++			bitmap_data->dpi_horz = res_x * 0.0254;
++			bitmap_data->dpi_vert = res_y * 0.0254;
++		}
+ 	}
+ #endif
+ 	/* default to screen resolution (if nothing was provided or available) */
+@@ -130,7 +135,7 @@ gdip_load_png_properties (png_structp pn
+ #if defined(PNG_iCCP_SUPPORTED)
+ 	{
+ 		png_charp	name;
+-		png_charp	profile;
++		png_bytep	profile;
+ 		png_uint_32	proflen;
+ 		int		compression_type;
+ 
+@@ -292,6 +297,11 @@ gdip_load_png_image_from_file_or_stream 
+ 		ImageFlags	colourspace_flag;
+ 		int		i;
+ 		int		j;
++		png_colorp	png_palette;
++		int		png_num_palette;
++		png_bytep	trans_alpha;
++		int		num_trans;
++		png_color_16p	trans_color;
+ 
+ 		width = png_get_image_width (png_ptr, info_ptr);
+ 		height = png_get_image_height (png_ptr, info_ptr);
+@@ -309,6 +319,8 @@ gdip_load_png_image_from_file_or_stream 
+ 		}
+ 
+ 		/* Copy palette. */
++		png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
++
+ 		num_colours = 1 << bit_depth;
+ 
+ 		if (png_get_color_type (png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY) {
+@@ -321,8 +333,8 @@ gdip_load_png_image_from_file_or_stream 
+ 			colourspace_flag = ImageFlagsColorSpaceRGB;
+ 
+ 			palette_entries = num_colours;
+-			if (palette_entries > info_ptr->num_palette) {
+-				palette_entries = info_ptr->num_palette;
++			if (palette_entries > png_num_palette) {
++				palette_entries = png_num_palette;
+ 			}
+ 
+ 			palette = GdipAlloc (sizeof(ColorPalette) + (num_colours - 1) * sizeof(ARGB));
+@@ -331,29 +343,30 @@ gdip_load_png_image_from_file_or_stream 
+ 
+ 			for (i=0; i < palette_entries; i++) {
+ 				set_pixel_bgra (&palette->Entries[i], 0,
+-						info_ptr->palette[i].blue,
+-						info_ptr->palette[i].green,
+-						info_ptr->palette[i].red,
++						png_palette[i].blue,
++						png_palette[i].green,
++						png_palette[i].red,
+ 						0xFF); /* alpha */
+ 			}
+ 		}
+ 
++		png_get_tRNS (png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
+ 		/* Make sure transparency is respected. */
+-		if (info_ptr->num_trans > 0) {
++		if (num_trans > 0) {
+ 			palette->Flags |= PaletteFlagsHasAlpha;
+ 			colourspace_flag |= ImageFlagsHasAlpha;
+ 
+-			if (info_ptr->num_trans > info_ptr->num_palette) {
+-				info_ptr->num_trans = info_ptr->num_palette;
++			if (num_trans > png_num_palette) {
++				num_trans = png_num_palette;
+ 			}
+ 
+-			for (i=0; i < info_ptr->num_trans; i++) {
++			for (i=0; i < num_trans; i++) {
+ 				set_pixel_bgra(&palette->Entries[i], 0,
+-						info_ptr->palette[i].blue,
+-						info_ptr->palette[i].green,
+-						info_ptr->palette[i].red,
++						png_palette[i].blue,
++						png_palette[i].green,
++						png_palette[i].red,
+ #if PNG_LIBPNG_VER > 10399
+-						info_ptr->trans_alpha [i]); /* alpha */
++						trans_alpha [i]); /* alpha */
+ #else
+ 						info_ptr->trans[i]); /* alpha */
+ #endif
+@@ -398,6 +411,8 @@ gdip_load_png_image_from_file_or_stream 
+ 		BYTE		bit_depth;
+ 		int		stride;
+ 		int		interlace;
++		png_colorp	png_palette;
++		int		png_num_palette;
+ 		png_bytep *row_pointers;
+ 		BYTE *rawptr;
+ 		int i, j;
+@@ -490,32 +505,33 @@ gdip_load_png_image_from_file_or_stream 
+ 							png_byte palette = 0;
+ 							png_byte pix = *rowp++;
+ 
++							png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
+ 							palette = (pix >> 6) & 0x03;
+ 							set_pixel_bgra (rawptr, 0,
+-								info_ptr->palette[palette].blue,
+-								info_ptr->palette[palette].green,
+-								info_ptr->palette[palette].red,
++								png_palette[palette].blue,
++								png_palette[palette].green,
++								png_palette[palette].red,
+ 								0xFF); /* alpha */
+ 
+ 							palette = (pix >> 4) & 0x03;
+ 							set_pixel_bgra (rawptr, 4,
+-								info_ptr->palette[palette].blue,
+-								info_ptr->palette[palette].green,
+-								info_ptr->palette[palette].red,
++								png_palette[palette].blue,
++								png_palette[palette].green,
++								png_palette[palette].red,
+ 								0xFF); /* alpha */
+ 
+ 							palette = (pix >> 2) & 0x03;
+ 							set_pixel_bgra (rawptr, 8,
+-								info_ptr->palette[palette].blue,
+-								info_ptr->palette[palette].green,
+-								info_ptr->palette[palette].red,
++								png_palette[palette].blue,
++								png_palette[palette].green,
++								png_palette[palette].red,
+ 								0xFF); /* alpha */
+ 
+ 							palette = pix & 0x03;
+ 							set_pixel_bgra (rawptr, 12,
+-								info_ptr->palette[palette].blue,
+-								info_ptr->palette[palette].green,
+-								info_ptr->palette[palette].red,
++								png_palette[palette].blue,
++								png_palette[palette].green,
++								png_palette[palette].red,
+ 								0xFF); /* alpha */
+ 							rawptr += 16;
+ 						}
-- 
cgit v0.12

