$ git diff --patch-with-stat --summary 5b9da628f25499775c0c3f9a7005f3bbf9989c41..01674935d338dcfbf3f4aa95352d00ad245e541d
.abf.yml | 2 +-
...e-version-to-2.10.4-and-update-tolerances.patch | 164 ------------
...e-version-to-2.13.2-and-update-tolerances.patch | 202 +++++++++++++++
setup.cfg => mplsetup.cfg | 0
python-matplotlib.spec | 287 +++++++++++----------
5 files changed, 358 insertions(+), 297 deletions(-)
delete mode 100644 0002-Set-FreeType-version-to-2.10.4-and-update-tolerances.patch
create mode 100644 0003-Set-FreeType-version-to-2.13.2-and-update-tolerances.patch
rename setup.cfg => mplsetup.cfg (100%)
diff --git a/.abf.yml b/.abf.yml
index fc4ca4a..940a705 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,2 +1,2 @@
sources:
- matplotlib-3.5.1.tar.gz: ee6435a98f23661df4a289b32cedfd2c604739a2
+ matplotlib-3.8.3.tar.gz: 74be3314e957ffaa78173a171c0f095d1735fd74
diff --git a/0002-Set-FreeType-version-to-2.10.4-and-update-tolerances.patch b/0002-Set-FreeType-version-to-2.10.4-and-update-tolerances.patch
deleted file mode 100644
index f96be94..0000000
--- a/0002-Set-FreeType-version-to-2.10.4-and-update-tolerances.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-From 3e06485b38ce4059ac3019a521e6efa446a24d5d Mon Sep 17 00:00:00 2001
-From: Elliott Sales de Andrade <quantum.analyst@gmail.com>
-Date: Fri, 14 Feb 2020 06:05:42 -0500
-Subject: [PATCH 2/4] Set FreeType version to 2.11.0 and update tolerances.
-
-Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
----
- lib/matplotlib/__init__.py | 2 +-
- lib/matplotlib/tests/test_axes.py | 4 ++--
- lib/matplotlib/tests/test_constrainedlayout.py | 2 +-
- lib/matplotlib/tests/test_mathtext.py | 7 +++++--
- lib/matplotlib/tests/test_polar.py | 2 +-
- lib/matplotlib/tests/test_tightlayout.py | 10 +++++-----
- setupext.py | 9 ++++++++-
- 7 files changed, 23 insertions(+), 13 deletions(-)
-
-diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py
-index bc800e1322..10ff904c8e 100644
---- a/lib/matplotlib/__init__.py
-+++ b/lib/matplotlib/__init__.py
-@@ -1201,7 +1201,7 @@ default_test_modules = [
- def _init_tests():
- # The version of FreeType to install locally for running the
- # tests. This must match the value in `setupext.py`
-- LOCAL_FREETYPE_VERSION = '2.6.1'
-+ LOCAL_FREETYPE_VERSION = '2.11.0'
-
- from matplotlib import ft2font
- if (ft2font.__freetype_version__ != LOCAL_FREETYPE_VERSION or
-diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py
-index 39b2478637..98878513b5 100644
---- a/lib/matplotlib/tests/test_axes.py
-+++ b/lib/matplotlib/tests/test_axes.py
-@@ -6594,7 +6594,7 @@ def test_normal_axes():
- ]
- for nn, b in enumerate(bbaxis):
- targetbb = mtransforms.Bbox.from_bounds(*target[nn])
-- assert_array_almost_equal(b.bounds, targetbb.bounds, decimal=2)
-+ assert_array_almost_equal(b.bounds, targetbb.bounds, decimal=0)
-
- target = [
- [150.0, 119.999, 930.0, 11.111],
-@@ -6612,7 +6612,7 @@ def test_normal_axes():
-
- target = [85.5138, 75.88888, 1021.11, 1017.11]
- targetbb = mtransforms.Bbox.from_bounds(*target)
-- assert_array_almost_equal(bbtb.bounds, targetbb.bounds, decimal=2)
-+ assert_array_almost_equal(bbtb.bounds, targetbb.bounds, decimal=0)
-
- # test that get_position roundtrips to get_window_extent
- axbb = ax.get_position().transformed(fig.transFigure).bounds
-diff --git a/lib/matplotlib/tests/test_constrainedlayout.py b/lib/matplotlib/tests/test_constrainedlayout.py
-index a717eace83..64b9262143 100644
---- a/lib/matplotlib/tests/test_constrainedlayout.py
-+++ b/lib/matplotlib/tests/test_constrainedlayout.py
-@@ -411,7 +411,7 @@ def test_hidden_axes():
- extents1 = np.copy(axs[0, 0].get_position().extents)
-
- np.testing.assert_allclose(
-- extents1, [0.045552, 0.543288, 0.47819, 0.982638], rtol=1e-5)
-+ extents1, [0.045552, 0.543288, 0.47819, 0.982638], rtol=1e-2)
-
-
- def test_colorbar_align():
-diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py
-index 80d989922c..c7cbd969b1 100644
---- a/lib/matplotlib/tests/test_mathtext.py
-+++ b/lib/matplotlib/tests/test_mathtext.py
-@@ -1,5 +1,6 @@
- import io
- from pathlib import Path
-+import platform
- import re
- import shlex
- from xml.etree import ElementTree as ET
-@@ -191,7 +192,8 @@ def baseline_images(request, fontset, index, text):
- @pytest.mark.parametrize(
- 'fontset', ['cm', 'stix', 'stixsans', 'dejavusans', 'dejavuserif'])
- @pytest.mark.parametrize('baseline_images', ['mathtext'], indirect=True)
--@image_comparison(baseline_images=None)
-+@image_comparison(baseline_images=None,
-+ tol=0.011 if platform.machine() in ('ppc64le', 's390x') else 0)
- def test_mathtext_rendering(baseline_images, fontset, index, text):
- mpl.rcParams['mathtext.fontset'] = fontset
- fig = plt.figure(figsize=(5.25, 0.75))
-@@ -215,7 +217,8 @@ def test_mathtext_rendering_lightweight(baseline_images, fontset, index, text):
- @pytest.mark.parametrize(
- 'fontset', ['cm', 'stix', 'stixsans', 'dejavusans', 'dejavuserif'])
- @pytest.mark.parametrize('baseline_images', ['mathfont'], indirect=True)
--@image_comparison(baseline_images=None, extensions=['png'])
-+@image_comparison(baseline_images=None, extensions=['png'],
-+ tol=0.011 if platform.machine() in ('ppc64le', 's390x') else 0)
- def test_mathfont_rendering(baseline_images, fontset, index, text):
- mpl.rcParams['mathtext.fontset'] = fontset
- fig = plt.figure(figsize=(5.25, 0.75))
-diff --git a/lib/matplotlib/tests/test_polar.py b/lib/matplotlib/tests/test_polar.py
-index 85aece5fce..9fea856af4 100644
---- a/lib/matplotlib/tests/test_polar.py
-+++ b/lib/matplotlib/tests/test_polar.py
-@@ -314,7 +314,7 @@ def test_get_tightbbox_polar():
- fig.canvas.draw()
- bb = ax.get_tightbbox(fig.canvas.get_renderer())
- assert_allclose(
-- bb.extents, [107.7778, 29.2778, 539.7847, 450.7222], rtol=1e-03)
-+ bb.extents, [107.7778, 29.2778, 539.7847, 450.7222], rtol=1)
-
-
- @check_figures_equal(extensions=["png"])
-diff --git a/lib/matplotlib/tests/test_tightlayout.py b/lib/matplotlib/tests/test_tightlayout.py
-index e9b01b160d..beab853489 100644
---- a/lib/matplotlib/tests/test_tightlayout.py
-+++ b/lib/matplotlib/tests/test_tightlayout.py
-@@ -172,12 +172,12 @@ def test_outward_ticks():
- plt.tight_layout()
- # These values were obtained after visual checking that they correspond
- # to a tight layouting that did take the ticks into account.
-- ans = [[[0.091, 0.607], [0.433, 0.933]],
-- [[0.579, 0.607], [0.922, 0.933]],
-- [[0.091, 0.140], [0.433, 0.466]],
-- [[0.579, 0.140], [0.922, 0.466]]]
-+ ans = [[[0.09, 0.61], [0.43, 0.93]],
-+ [[0.58, 0.61], [0.92, 0.93]],
-+ [[0.09, 0.14], [0.43, 0.47]],
-+ [[0.58, 0.14], [0.92, 0.47]]]
- for nn, ax in enumerate(fig.axes):
-- assert_array_equal(np.round(ax.get_position().get_points(), 3),
-+ assert_array_equal(np.round(ax.get_position().get_points(), 2),
- ans[nn])
-
-
-diff --git a/setupext.py b/setupext.py
-index e41ab98fe1..ff7f45d804 100644
---- a/setupext.py
-+++ b/setupext.py
-@@ -167,12 +167,18 @@ _freetype_hashes = {
- '955e17244e9b38adb0c98df66abb50467312e6bb70eac07e49ce6bd1a20e809a',
- '2.10.1':
- '3a60d391fd579440561bf0e7f31af2222bc610ad6ce4d9d7bd2165bca8669110',
-+ '2.10.2':
-+ 'e09aa914e4f7a5d723ac381420949c55c0b90b15744adce5d1406046022186ab',
-+ '2.10.4':
-+ '5eab795ebb23ac77001cfb68b7d4d50b5d6c7469247b0b01b2c953269f658dac',
-+ '2.11.0':
-+ 'a45c6b403413abd5706f3582f04c8339d26397c4304b78fa552f2215df64101f',
- }
- # This is the version of FreeType to use when building a local version. It
- # must match the value in lib/matplotlib.__init__.py and also needs to be
- # changed below in the embedded windows build script (grep for "REMINDER" in
- # this file). Also update the cache path in `.circleci/config.yml`.
--LOCAL_FREETYPE_VERSION = '2.6.1'
-+LOCAL_FREETYPE_VERSION = '2.11.0'
- LOCAL_FREETYPE_HASH = _freetype_hashes.get(LOCAL_FREETYPE_VERSION, 'unknown')
-
- # Also update the cache path in `.circleci/config.yml`.
-@@ -581,6 +587,7 @@ class FreeType(SetupPackage):
- ext.extra_objects.insert(
- 0, str(src_path / 'objs' / '.libs' / libfreetype))
- ext.define_macros.append(('FREETYPE_BUILD_TYPE', 'local'))
-+ ext.libraries.append('brotlidec')
-
- def do_custom_build(self, env):
- # We're using a system freetype
---
-2.31.1
diff --git a/0003-Set-FreeType-version-to-2.13.2-and-update-tolerances.patch b/0003-Set-FreeType-version-to-2.13.2-and-update-tolerances.patch
new file mode 100644
index 0000000..5831f5d
--- /dev/null
+++ b/0003-Set-FreeType-version-to-2.13.2-and-update-tolerances.patch
@@ -0,0 +1,202 @@
+From a5490ca593e1515bddbc96491efd8d1ff5e372d6 Mon Sep 17 00:00:00 2001
+From: Elliott Sales de Andrade <quantum.analyst@gmail.com>
+Date: Fri, 14 Feb 2020 06:05:42 -0500
+Subject: [PATCH 3/5] Set FreeType version to 2.13.2 and update tolerances
+
+Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
+---
+ lib/matplotlib/__init__.py | 2 +-
+ lib/matplotlib/tests/test_axes.py | 4 ++--
+ lib/matplotlib/tests/test_backend_pgf.py | 2 +-
+ .../tests/test_constrainedlayout.py | 10 ++++-----
+ lib/matplotlib/tests/test_legend.py | 4 ++--
+ lib/matplotlib/tests/test_polar.py | 2 +-
+ lib/matplotlib/tests/test_tightlayout.py | 10 ++++-----
+ setupext.py | 21 +++++++++++++++++--
+ 8 files changed, 36 insertions(+), 19 deletions(-)
+
+diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py
+index 26dd9372e1..81b77d455f 100644
+--- a/lib/matplotlib/__init__.py
++++ b/lib/matplotlib/__init__.py
+@@ -1307,7 +1307,7 @@ def _val_or_rc(val, rc_name):
+ def _init_tests():
+ # The version of FreeType to install locally for running the
+ # tests. This must match the value in `setupext.py`
+- LOCAL_FREETYPE_VERSION = '2.6.1'
++ LOCAL_FREETYPE_VERSION = '2.13.2'
+
+ from matplotlib import ft2font
+ if (ft2font.__freetype_version__ != LOCAL_FREETYPE_VERSION or
+diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py
+index 6c5dd712b7..0a70c37891 100644
+--- a/lib/matplotlib/tests/test_axes.py
++++ b/lib/matplotlib/tests/test_axes.py
+@@ -7623,7 +7623,7 @@ def test_normal_axes():
+ ]
+ for nn, b in enumerate(bbaxis):
+ targetbb = mtransforms.Bbox.from_bounds(*target[nn])
+- assert_array_almost_equal(b.bounds, targetbb.bounds, decimal=2)
++ assert_array_almost_equal(b.bounds, targetbb.bounds, decimal=0)
+
+ target = [
+ [150.0, 119.999, 930.0, 11.111],
+@@ -7641,7 +7641,7 @@ def test_normal_axes():
+
+ target = [85.5138, 75.88888, 1021.11, 1017.11]
+ targetbb = mtransforms.Bbox.from_bounds(*target)
+- assert_array_almost_equal(bbtb.bounds, targetbb.bounds, decimal=2)
++ assert_array_almost_equal(bbtb.bounds, targetbb.bounds, decimal=0)
+
+ # test that get_position roundtrips to get_window_extent
+ axbb = ax.get_position().transformed(fig.transFigure).bounds
+diff --git a/lib/matplotlib/tests/test_backend_pgf.py b/lib/matplotlib/tests/test_backend_pgf.py
+index a866916c58..a746cc2ca9 100644
+--- a/lib/matplotlib/tests/test_backend_pgf.py
++++ b/lib/matplotlib/tests/test_backend_pgf.py
+@@ -165,7 +165,7 @@ def test_pathclip():
+ # test mixed mode rendering
+ @needs_pgf_xelatex
+ @pytest.mark.backend('pgf')
+-@image_comparison(['pgf_mixedmode.pdf'], style='default')
++@image_comparison(['pgf_mixedmode.pdf'], style='default', tol=0.87)
+ def test_mixedmode():
+ mpl.rcParams.update({'font.family': 'serif', 'pgf.rcfonts': False})
+ Y, X = np.ogrid[-1:1:40j, -1:1:40j]
+diff --git a/lib/matplotlib/tests/test_constrainedlayout.py b/lib/matplotlib/tests/test_constrainedlayout.py
+index 6703dfe315..ea6a8d9630 100644
+--- a/lib/matplotlib/tests/test_constrainedlayout.py
++++ b/lib/matplotlib/tests/test_constrainedlayout.py
+@@ -432,7 +432,7 @@ def test_hidden_axes():
+ extents1 = np.copy(axs[0, 0].get_position().extents)
+
+ np.testing.assert_allclose(
+- extents1, [0.045552, 0.543288, 0.47819, 0.982638], rtol=1e-5)
++ extents1, [0.045552, 0.543288, 0.47819, 0.982638], rtol=1e-2)
+
+
+ def test_colorbar_align():
+@@ -638,9 +638,9 @@ def test_compressed1():
+ fig.draw_without_rendering()
+
+ pos = axs[0, 0].get_position()
+- np.testing.assert_allclose(pos.x0, 0.2344, atol=1e-3)
++ np.testing.assert_allclose(pos.x0, 0.2344, atol=1e-2)
+ pos = axs[0, 1].get_position()
+- np.testing.assert_allclose(pos.x1, 0.7024, atol=1e-3)
++ np.testing.assert_allclose(pos.x1, 0.7024, atol=1e-2)
+
+ # wider than tall
+ fig, axs = plt.subplots(2, 3, layout='compressed',
+@@ -653,10 +653,10 @@ def test_compressed1():
+
+ pos = axs[0, 0].get_position()
+ np.testing.assert_allclose(pos.x0, 0.06195, atol=1e-3)
+- np.testing.assert_allclose(pos.y1, 0.8537, atol=1e-3)
++ np.testing.assert_allclose(pos.y1, 0.8537, atol=1e-2)
+ pos = axs[1, 2].get_position()
+ np.testing.assert_allclose(pos.x1, 0.8618, atol=1e-3)
+- np.testing.assert_allclose(pos.y0, 0.1934, atol=1e-3)
++ np.testing.assert_allclose(pos.y0, 0.1934, atol=1e-2)
+
+
+ @pytest.mark.parametrize('arg, state', [
+diff --git a/lib/matplotlib/tests/test_legend.py b/lib/matplotlib/tests/test_legend.py
+index 759ac6aada..8140d4d69f 100644
+--- a/lib/matplotlib/tests/test_legend.py
++++ b/lib/matplotlib/tests/test_legend.py
+@@ -516,9 +516,9 @@ def test_figure_legend_outside():
+ fig.draw_without_rendering()
+
+ assert_allclose(axs.get_window_extent().extents,
+- axbb[nn])
++ axbb[nn], rtol=1)
+ assert_allclose(leg.get_window_extent().extents,
+- legbb[nn])
++ legbb[nn], rtol=1)
+
+
+ @image_comparison(['legend_stackplot.png'])
+diff --git a/lib/matplotlib/tests/test_polar.py b/lib/matplotlib/tests/test_polar.py
+index 9d6e78da2c..5f6ed538d1 100644
+--- a/lib/matplotlib/tests/test_polar.py
++++ b/lib/matplotlib/tests/test_polar.py
+@@ -321,7 +321,7 @@ def test_get_tightbbox_polar():
+ fig.canvas.draw()
+ bb = ax.get_tightbbox(fig.canvas.get_renderer())
+ assert_allclose(
+- bb.extents, [107.7778, 29.2778, 539.7847, 450.7222], rtol=1e-03)
++ bb.extents, [107.7778, 29.2778, 539.7847, 450.7222], rtol=1)
+
+
+ @check_figures_equal(extensions=["png"])
+diff --git a/lib/matplotlib/tests/test_tightlayout.py b/lib/matplotlib/tests/test_tightlayout.py
+index 968f0da7b5..89caa81b98 100644
+--- a/lib/matplotlib/tests/test_tightlayout.py
++++ b/lib/matplotlib/tests/test_tightlayout.py
+@@ -173,12 +173,12 @@ def test_outward_ticks():
+ plt.tight_layout()
+ # These values were obtained after visual checking that they correspond
+ # to a tight layouting that did take the ticks into account.
+- ans = [[[0.091, 0.607], [0.433, 0.933]],
+- [[0.579, 0.607], [0.922, 0.933]],
+- [[0.091, 0.140], [0.433, 0.466]],
+- [[0.579, 0.140], [0.922, 0.466]]]
++ ans = [[[0.09, 0.61], [0.43, 0.93]],
++ [[0.58, 0.61], [0.92, 0.93]],
++ [[0.09, 0.14], [0.43, 0.47]],
++ [[0.58, 0.14], [0.92, 0.47]]]
+ for nn, ax in enumerate(fig.axes):
+- assert_array_equal(np.round(ax.get_position().get_points(), 3),
++ assert_array_equal(np.round(ax.get_position().get_points(), 2),
+ ans[nn])
+
+
+diff --git a/setupext.py b/setupext.py
+index 9f78d88c87..6dc740e8f7 100644
+--- a/setupext.py
++++ b/setupext.py
+@@ -176,14 +176,30 @@ _freetype_hashes = {
+ '955e17244e9b38adb0c98df66abb50467312e6bb70eac07e49ce6bd1a20e809a',
+ '2.10.1':
+ '3a60d391fd579440561bf0e7f31af2222bc610ad6ce4d9d7bd2165bca8669110',
++ '2.10.2':
++ 'e09aa914e4f7a5d723ac381420949c55c0b90b15744adce5d1406046022186ab',
++ '2.10.3':
++ '9dfb4e11efd6e460a87b1991a64bc69344ee7dc219d9b29e7faabc1c168ce8b0',
++ '2.10.4':
++ '5eab795ebb23ac77001cfb68b7d4d50b5d6c7469247b0b01b2c953269f658dac',
++ '2.11.0':
++ 'a45c6b403413abd5706f3582f04c8339d26397c4304b78fa552f2215df64101f',
+ '2.11.1':
+- 'f8db94d307e9c54961b39a1cc799a67d46681480696ed72ecf78d4473770f09b'
++ 'f8db94d307e9c54961b39a1cc799a67d46681480696ed72ecf78d4473770f09b',
++ '2.12.0':
++ '7940a46eeb0255baaa87c553d72778c4f8daa2b8888c8e2a05766a2a8686740c',
++ '2.12.1':
++ 'efe71fd4b8246f1b0b1b9bfca13cfff1c9ad85930340c27df469733bbb620938',
++ '2.13.0':
++ 'a7aca0e532a276ea8d85bd31149f0a74c33d19c8d287116ef8f5f8357b4f1f80',
++ '2.13.2':
++ '0b109c59914f25b4411a8de2a506fdd18fa8457eb86eca6c7b15c19110a92fa5',
+ }
+ # This is the version of FreeType to use when building a local version. It
+ # must match the value in lib/matplotlib.__init__.py, and the cache path in
+ # `.circleci/config.yml`. Also update the docs in
+ # `docs/devel/dependencies.rst`.
+-TESTING_VERSION_OF_FREETYPE = '2.6.1'
++TESTING_VERSION_OF_FREETYPE = '2.13.2'
+ if sys.platform.startswith('win') and platform.machine() == 'ARM64':
+ # older versions of freetype are not supported for win/arm64
+ # Matplotlib tests will not pass
+@@ -599,6 +615,7 @@ class FreeType(SetupPackage):
+ name = ext.name.split('.')[-1]
+ ext.extra_link_args.append(
+ f'-Wl,-exported_symbol,_PyInit_{name}')
++ ext.libraries.append('brotlidec')
+
+ def do_custom_build(self, env):
+ # We're using a system freetype
+--
+2.41.0
+
diff --git a/setup.cfg b/mplsetup.cfg
similarity index 100%
rename from setup.cfg
rename to mplsetup.cfg
diff --git a/python-matplotlib.spec b/python-matplotlib.spec
index cd1f86a..6a03723 100644
--- a/python-matplotlib.spec
+++ b/python-matplotlib.spec
@@ -14,50 +14,53 @@
Summary: Python 2D plotting library
Name: python-%{module}
-Version: 3.5.1
-Release: 2
+Version: 3.8.3
+Release: 5
Group: Development/Python
License: Python license
-Url: http://matplotlib.sourceforge.net/
+Url: https://matplotlib.sourceforge.net/
Source0: https://github.com/matplotlib/matplotlib/archive/v%{version}/%{module}-%{version}.tar.gz
-Source1: setup.cfg
+Source1: mplsetup.cfg
Patch1: 0001-matplotlibrc-path-search-fix.patch
-Patch2: 0002-Set-FreeType-version-to-2.10.4-and-update-tolerances.patch
-
-BuildRequires: python-parsing
-BuildRequires: python-setuptools
-BuildRequires: ipython
-BuildRequires: python-configobj
-BuildRequires: python-pkg-resources
-BuildRequires: python-cxx-devel
-BuildRequires: python-dateutil
-BuildRequires: python-pytz
-BuildRequires: python-qt5
-BuildRequires: python-qt5-devel
-BuildRequires: python-pip
-BuildRequires: qhull-devel
-BuildRequires: tkinter
-BuildRequires: python-numpy-devel >= 1.1.0
+Patch2: 0003-Set-FreeType-version-to-2.13.2-and-update-tolerances.patch
BuildRequires: pkgconfig(cairo)
BuildRequires: pkgconfig(freetype2)
#BuildRequires: pkgconfig(libagg)
-BuildRequires: pkgconfig(libbrotlidec)
+BuildRequires: pkgconfig(libbrotlidec)
BuildRequires: pkgconfig(libpng)
+BuildRequires: pkgconfig(python3)
BuildRequires: pkgconfig(tcl)
BuildRequires: pkgconfig(tk)
BuildRequires: pkgconfig(zlib)
-BuildRequires: pkgconfig(python3)
+BuildRequires: python%{pyver}dist(configobj)
+BuildRequires: python%{pyver}dist(ipython)
+BuildRequires: python%{pyver}dist(numpy)
+BuildRequires: python%{pyver}dist(pip)
+BuildRequires: python%{pyver}dist(pybind11)
+BuildRequires: python%{pyver}dist(pyparsing)
+BuildRequires: python%{pyver}dist(pyqt5)
+BuildRequires: python%{pyver}dist(python-dateutil)
+BuildRequires: python%{pyver}dist(pytz)
+BuildRequires: python%{pyver}dist(setuptools)
+# Without this dependency, matplotlib still builds fine, but
+# pretends its version is 0.0.0
+BuildRequires: python%{pyver}dist(setuptools-scm)
+BuildRequires: python-cxx-devel
+BuildRequires: python-pkg-resources
+BuildRequires: python-qt5
+BuildRequires: qhull-devel
+BuildRequires: tkinter
%if %{with_html}
BuildRequires: graphviz
BuildRequires: texlive
-BuildRequires: python-docutils
-BuildRequires: python-sphinx
-BuildRequires: python-numpydoc
+BuildRequires: python%{pyver}dist(docutils)
+BuildRequires: python%{pyver}dist(sphinx)
+BuildRequires: python%{pyver}dist(numpydoc)
%endif
-Requires: python-configobj
-Requires: python-dateutil
-Requires: python3-numpy >= 1.1.0
-Requires: python-pytz
+Requires: python%{pyver}dist(configobj)
+Requires: python%{pyver}dist(numpy)
+Requires: python%{pyver}dist(python-dateutil)
+Requires: python%{pyver}dist(pytz)
Requires: %{name}-data = %{version}-%{release}
%if "%{backend}" == "TkAgg"
@@ -83,43 +86,94 @@ Matplotlib tries to make easy things easy and hard things possible.
You can generate plots, histograms, power spectra, bar charts,
errorcharts, scatterplots, etc, with just a few lines of code.
+%files
+%doc README.md
+%doc LICENSE/
+%{python_sitearch}/%{module}-*.*-info
+%{python_sitearch}/%{module}/
+%{python_sitearch}/mpl_toolkits/
+%{python_sitearch}/pylab.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_cairo.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_gtk3.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_gtk3agg.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_gtk3cairo.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_qt5.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_qt5agg.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_qt5cairo.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_svg.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_tkagg.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_wx.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_wxagg.py*
+%exclude %{py_platsitedir}/%{module}/backends/backend_wxcairo.py*
+%exclude %{py_platsitedir}/%{module}/backends/_tkagg*.so
+
+#-----------------------------------------------------------------------
+
%package cairo
Summary: Cairo backend for matplotlib
Group: Development/Python
Requires: %{name} = %{version}-%{release}
-Requires: python-cairo >= 1.2.0
+Requires: python%{pyver}dist(pycairo)
%description cairo
This package contains the Cairo backend for matplotlib.
+%files cairo
+%{py_platsitedir}/%{module}/backends/backend_cairo.py*
+%{py_platsitedir}/%{module}/backends/backend_qt5cairo.py*
+
+#-----------------------------------------------------------------------
+
%package gtk
-Summary: GDK and GTK backends for matplotlib
-Group: Development/Python
-Requires: %{name} = %{version}-%{release}
+Summary: GDK and GTK backends for matplotlib
+Group: Development/Python
+Requires: %{name} = %{version}-%{release}
# absolutely broken
-#Requires: pygtk2.0 >= 2.4.0
-Requires: %{name}-cairo = %{version}-%{release}
+#Requires: pygtk2.0 >= 2.4.0
+Requires: %{name}-cairo = %{version}-%{release}
%description gtk
This package contains the GDK and GTK backends for matplotlib.
+%files gtk
+%{py_platsitedir}/%{module}/backends/backend_gtk3.py*
+%{py_platsitedir}/%{module}/backends/backend_gtk3agg.py*
+%{py_platsitedir}/%{module}/backends/backend_gtk3cairo.py*
+
+#-----------------------------------------------------------------------
+
%package wx
-Summary: WxWidgets backend for matplotlib
-Group: Development/Python
-Requires: %{name} = %{version}-%{release}
+Summary: WxWidgets backend for matplotlib
+Group: Development/Python
+Requires: %{name} = %{version}-%{release}
%description wx
This package contains the WxWidgets backend for matplotlib.
+%files wx
+%{py_platsitedir}/%{module}/backends/backend_wx.py*
+%{py_platsitedir}/%{module}/backends/backend_wxagg.py*
+%{py_platsitedir}/%{module}/backends/backend_wxcairo.py*
+
+#-----------------------------------------------------------------------
+
%package qt5
Summary: Qt backend for matplotlib
Group: Development/Python
Requires: %{name} = %{version}-%{release}
-Requires: python-qt5
+Requires: python-qt5-core
+Requires: python-qt5-gui
+Requires: python-qt5-widgets
%description qt5
This package contains the Qt5 backend for matplotlib.
+%files qt5
+%{py_platsitedir}/%{module}/backends/backend_qt5.py*
+%{py_platsitedir}/%{module}/backends/backend_qt5agg.py*
+
+#-----------------------------------------------------------------------
+
%package svg
Summary: SVG backend for matplotlib
Group: Development/Python
@@ -128,6 +182,11 @@ Requires: %{name} = %{version}-%{release}
%description svg
This package contains the SVG backend for matplotlib.
+%files svg
+%{py_platsitedir}/%{module}/backends/backend_svg.py*
+
+#-----------------------------------------------------------------------
+
%package tk
Summary: Tk backend for matplotlib
Group: Development/Python
@@ -137,6 +196,12 @@ Requires: tkinter
%description tk
This package contains the Tk backend for matplotlib.
+%files tk
+%{py_platsitedir}/%{module}/backends/backend_tkagg.py*
+%{py_platsitedir}/%{module}/backends/_tkagg*.so
+
+#-----------------------------------------------------------------------
+
%package doc
Summary: Documentation for matplotlib
Group: Development/Python
@@ -145,33 +210,53 @@ BuildArch: noarch
%description doc
This package contains documentation and sample code for matplotlib.
-%package data
-Summary: Data used by python-matplotlib
+%files doc
+%doc galleries/examples/
+%if %{with_html}
+%doc doc/build/html/*
+%endif
+
+#-----------------------------------------------------------------------
+
+%package data
+Summary: Data used by python-%{module}
%if %{with_bundled_fonts}
-Requires: %{name}-data-fonts = %{version}-%{release}
+Requires: %{name}-data-fonts = %{version}-%{release}
%endif
-BuildArch: noarch
+BuildArch: noarch
-%description data
+%description data
%{summary}
+%files data
+%{_datadir}/matplotlib/mpl-data/
+%if %{with_bundled_fonts}
+%exclude %{_datadir}/matplotlib/mpl-data/fonts/
+%endif
+
+#-----------------------------------------------------------------------
+
%if %{with_bundled_fonts}
-%package data-fonts
-Summary: Fonts used by python-matplotlib
-Requires: %{name}-data = %{version}-%{release}
-BuildArch: noarch
+%package data-fonts
+Summary: Fonts used by python-%{module}
+Requires: %{name}-data = %{version}-%{release}
+BuildArch: noarch
-%description data-fonts
+%description data-fonts
%{summary}
+
+%files data-fonts
+%{_datadir}/matplotlib/mpl-data/fonts/
%endif
+#-----------------------------------------------------------------------
+
%prep
-%setup -q -n %{module}-%{version}
-%autopatch -p1
+%autosetup -p1 -n %{module}-%{version}
-# Copy setup.cfg to the builddir
+# Copy mplsetup.cfg to the builddir
cp %{SOURCE1} .
-sed -i 's/\(backend = \).*/\1%{backend}/' setup.cfg
+sed -i 's/\(backend = \).*/\1%{backend}/' mplsetup.cfg
%if !%{with_bundled_fonts}
# Use fontconfig by default
@@ -181,38 +266,39 @@ sed -i 's/\(USE_FONTCONFIG = \)False/\1True/' lib/matplotlib/font_manager.py
# Remove bundled libraries
#rm -r extern/agg24-svn
-
chmod -x lib/matplotlib/mpl-data/images/*.svg
%build
-PYTHONDONTWRITEBYTECODE=true \
-MPLCONFIGDIR=$PWD \
-MATPLOTLIBDATA=$PWD/lib/matplotlib/mpl-data \
- python setup.py build build_ext -ldl -lfreetype
+export PYTHONDONTWRITEBYTECODE=true
+export MPLCONFIGDIR=$PWD
+export MATPLOTLIBDATA=$PWD/lib/matplotlib/mpl-data
+%py_build
+# python setup.py build build_ext -ldl -lfreetype
%if %{with_html}
# Need to make built matplotlib libs available for the sphinx extensions:
pushd doc
- MPLCONFIGDIR=$PWD/.. \
- MATPLOTLIBDATA=$PWD/../lib/matplotlib/mpl-data \
- PYTHONPATH=`realpath ../build/lib.linux*` \
- %{__python} make.py html
+ MPLCONFIGDIR=$PWD/.. \
+ MATPLOTLIBDATA=$PWD/../lib/matplotlib/mpl-data \
+ PYTHONPATH=`realpath ../build/lib.linux*` \
+ %{__python} make.py html
popd
%endif
# Ensure all example files are non-executable so that the -doc
# package doesn't drag in dependencies
-find examples -name '*.py' -exec chmod a-x '{}' \;
+find galleries/examples -name '*.py' -exec chmod a-x '{}' \;
%install
-PYTHONDONTWRITEBYTECODE=true \
-MPLCONFIGDIR=$PWD \
-MATPLOTLIBDATA=$PWD/lib/matplotlib/mpl-data/ \
- %{__python3} setup.py install --skip-build --root=%{buildroot}
+export PYTHONDONTWRITEBYTECODE=true
+export MPLCONFIGDIR=$PWD
+export MATPLOTLIBDATA=$PWD/lib/matplotlib/mpl-data/
+%py_install
+# %{__python3} setup.py install --skip-build --root=%{buildroot}
chmod +x %{buildroot}%{python_sitearch}/matplotlib/dates.py
mkdir -p %{buildroot}%{_sysconfdir} %{buildroot}%{_datadir}/matplotlib
mv %{buildroot}%{python_sitearch}/matplotlib/mpl-data \
- %{buildroot}%{_datadir}/matplotlib
+ %{buildroot}%{_datadir}/matplotlib
%if !%{with_bundled_fonts}
rm -rf %{buildroot}%{_datadir}/matplotlib/mpl-data/fonts
%endif
@@ -230,69 +316,6 @@ echo "backend : %{backend}" > matplotlibrc
MPLCONFIGDIR=$PWD \
MATPLOTLIBDATA=$RPM_BUILD_ROOT%{_datadir}/matplotlib/mpl-data \
PYTHONPATH=$RPM_BUILD_ROOT%{python_sitearch} \
- %{__python} -c "import matplotlib; matplotlib.test()"
+%{__python} -c "import matplotlib; matplotlib.test()"
%endif # run_tests
-%files
-%doc README.rst
-%doc LICENSE/
-%{python_sitearch}/*egg-info
-%{python_sitearch}/matplotlib-*-nspkg.pth
-%{python_sitearch}/%{module}/
-%{python_sitearch}/mpl_toolkits/
-%{python_sitearch}/pylab.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_cairo.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_gtk3.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_gtk3agg.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_gtk3cairo.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_qt5.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_qt5agg.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_qt5cairo.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_svg.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_tkagg.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_wx.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_wxagg.py*
-%exclude %{py_platsitedir}/%{module}/backends/backend_wxcairo.py*
-%exclude %{py_platsitedir}/%{module}/backends/_tkagg*.so
-
-%files cairo
-%{py_platsitedir}/%{module}/backends/backend_cairo.py*
-%{py_platsitedir}/%{module}/backends/backend_qt5cairo.py*
-
-%files gtk
-%{py_platsitedir}/%{module}/backends/backend_gtk3.py*
-%{py_platsitedir}/%{module}/backends/backend_gtk3agg.py*
-%{py_platsitedir}/%{module}/backends/backend_gtk3cairo.py*
-
-%files wx
-%{py_platsitedir}/%{module}/backends/backend_wx.py*
-%{py_platsitedir}/%{module}/backends/backend_wxagg.py*
-%{py_platsitedir}/%{module}/backends/backend_wxcairo.py*
-
-%files qt5
-%{py_platsitedir}/%{module}/backends/backend_qt5.py*
-%{py_platsitedir}/%{module}/backends/backend_qt5agg.py*
-
-%files svg
-%{py_platsitedir}/%{module}/backends/backend_svg.py*
-
-%files tk
-%{py_platsitedir}/%{module}/backends/backend_tkagg.py*
-%{py_platsitedir}/%{module}/backends/_tkagg*.so
-
-%files doc
-%doc examples/
-%if %{with_html}
-%doc doc/build/html/*
-%endif
-
-%files data
-%{_datadir}/matplotlib/mpl-data/
-%if %{with_bundled_fonts}
-%exclude %{_datadir}/matplotlib/mpl-data/fonts/
-%endif
-
-%if %{with_bundled_fonts}
-%files data-fonts
-%{_datadir}/matplotlib/mpl-data/fonts/
-%endif