[python-matplotlib] fix the build against libpng 1.5

dmalcolm dmalcolm at fedoraproject.org
Tue Dec 6 21:56:23 UTC 2011


commit 630c235008578cc387f03acb55f23d190b787fc2
Author: David Malcolm <dmalcolm at redhat.com>
Date:   Tue Dec 6 16:55:19 2011 -0500

    fix the build against libpng 1.5

 python-matplotlib.spec           |   12 +++++-
 use-png-accessor-functions.patch |   79 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 90 insertions(+), 1 deletions(-)
---
diff --git a/python-matplotlib.spec b/python-matplotlib.spec
index 45c4edb..efdf300 100644
--- a/python-matplotlib.spec
+++ b/python-matplotlib.spec
@@ -19,7 +19,7 @@
 
 Name:           python-matplotlib
 Version:        1.0.1
-Release:        16%{?dist}
+Release:        17%{?dist}
 Summary:        Python plotting library
 
 Group:          Development/Libraries
@@ -40,6 +40,12 @@ Patch1:         matplotlib-1.0.1-noagg.patch
 Patch2:		0001-Bugfix-propagate-timezone-info-in-plot_date-xaxis_da.patch
 # fix build when Tkinter doesn't return an expected value in __version__ (FTBFS)
 Patch3:         matplotlib-1.0.1-tkinter.patch
+
+# Fix building against libpng 1.5
+# Based on:
+#   https://github.com/matplotlib/matplotlib/commit/45c46672648e3b4a277bf7ff42b3baf56a98bcec
+Patch4:         use-png-accessor-functions.patch
+
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires:  python-devel, freetype-devel, libpng-devel, zlib-devel
 BuildRequires:  pygtk2-devel, gtk2-devel
@@ -107,6 +113,7 @@ BuildRequires:  python-basemap
 %patch0 -p1
 %patch2 -p1
 %patch3 -p1 -b .tkinter
+%patch4 -p1
 
 # Remove bundled libraries
 rm -r agg24 lib/matplotlib//pyparsing.py
@@ -195,6 +202,9 @@ rm -rf $RPM_BUILD_ROOT
 %endif
 
 %changelog
+* Tue Dec  6 2011 David Malcolm <dmalcolm at redhat.com> - 1.0.1-17
+- fix the build against libpng 1.5
+
 * Tue Dec  6 2011 David Malcolm <dmalcolm at redhat.com> - 1.0.1-16
 - fix egg-info conditional for RHEL
 
diff --git a/use-png-accessor-functions.patch b/use-png-accessor-functions.patch
new file mode 100644
index 0000000..60d5b0c
--- /dev/null
+++ b/use-png-accessor-functions.patch
@@ -0,0 +1,79 @@
+diff -up matplotlib-1.0.1/CHANGELOG.png15 matplotlib-1.0.1/CHANGELOG
+diff -up matplotlib-1.0.1/doc/users/installing.rst.png15 matplotlib-1.0.1/doc/users/installing.rst
+--- matplotlib-1.0.1/doc/users/installing.rst.png15	2010-07-06 21:41:46.000000000 -0400
++++ matplotlib-1.0.1/doc/users/installing.rst	2011-12-06 16:29:05.824621532 -0500
+@@ -138,7 +138,7 @@ libraries themselves.
+     array support for python (`download
+     <http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103>`__)
+ 
+-libpng 1.1 (or later)
++libpng 1.2 (or later)
+     library for loading and saving :term:`PNG` files (`download
+     <http://www.libpng.org/pub/png/libpng.html>`__). libpng requires
+     zlib. If you are a windows user, you can ignore this since we
+diff -up matplotlib-1.0.1/src/_png.cpp.png15 matplotlib-1.0.1/src/_png.cpp
+--- matplotlib-1.0.1/src/_png.cpp.png15	2010-10-12 12:14:42.000000000 -0400
++++ matplotlib-1.0.1/src/_png.cpp	2011-12-06 16:29:05.825621532 -0500
+@@ -350,10 +350,10 @@ _png_module::read_png(const Py::Tuple& a
+     png_set_sig_bytes(png_ptr, 8);
+     png_read_info(png_ptr, info_ptr);
+ 
+-    png_uint_32 width = info_ptr->width;
+-    png_uint_32 height = info_ptr->height;
++    png_uint_32 width = png_get_image_width(png_ptr, info_ptr);
++    png_uint_32 height = png_get_image_height(png_ptr, info_ptr);
+ 
+-    int bit_depth = info_ptr->bit_depth;
++    int bit_depth = png_get_bit_depth(png_ptr, info_ptr);
+ 
+     // Unpack 1, 2, and 4-bit images
+     if (bit_depth < 8)
+@@ -361,7 +361,7 @@ _png_module::read_png(const Py::Tuple& a
+ 
+     // If sig bits are set, shift data
+     png_color_8p sig_bit;
+-    if ((info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) &&
++    if ((png_get_color_type(png_ptr, info_ptr) != PNG_COLOR_TYPE_PALETTE) &&
+         png_get_sBIT(png_ptr, info_ptr, &sig_bit))
+     {
+         png_set_shift(png_ptr, sig_bit);
+@@ -374,13 +374,13 @@ _png_module::read_png(const Py::Tuple& a
+     }
+ 
+     // Convert palletes to full RGB
+-    if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
++    if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE)
+     {
+         png_set_palette_to_rgb(png_ptr);
+     }
+ 
+     // If there's an alpha channel convert gray to RGB
+-    if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
++    if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA)
+     {
+         png_set_gray_to_rgb(png_ptr);
+     }
+@@ -408,11 +408,11 @@ _png_module::read_png(const Py::Tuple& a
+     npy_intp dimensions[3];
+     dimensions[0] = height;  //numrows
+     dimensions[1] = width;   //numcols
+-    if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
++    if (png_get_color_type(png_ptr, info_ptr) & PNG_COLOR_MASK_ALPHA)
+     {
+         dimensions[2] = 4;     //RGBA images
+     }
+-    else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
++    else if (png_get_color_type(png_ptr, info_ptr) & PNG_COLOR_MASK_COLOR)
+     {
+         dimensions[2] = 3;     //RGB images
+     }
+@@ -421,7 +421,8 @@ _png_module::read_png(const Py::Tuple& a
+         dimensions[2] = 1;     //Greyscale images
+     }
+     //For gray, return an x by y array, not an x by y by 1
+-    int num_dims  = (info_ptr->color_type & PNG_COLOR_MASK_COLOR) ? 3 : 2;
++    int num_dims  = (png_get_color_type(png_ptr, info_ptr)
++                                & PNG_COLOR_MASK_COLOR) ? 3 : 2;
+ 
+     double max_value = (1 << ((bit_depth < 8) ? 8 : bit_depth)) - 1;
+     PyArrayObject *A = (PyArrayObject *) PyArray_SimpleNew(


More information about the scm-commits mailing list