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 - 1.0.1-17 +- fix the build against libpng 1.5 + * Tue Dec 6 2011 David Malcolm - 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 + `__) + +-libpng 1.1 (or later) ++libpng 1.2 (or later) + library for loading and saving :term:`PNG` files (`download + `__). 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(