diff --git a/pkgs/development/python-modules/matplotlib/default.nix b/pkgs/development/python-modules/matplotlib/default.nix index a033e8a11bab..b029b4cd2654 100644 --- a/pkgs/development/python-modules/matplotlib/default.nix +++ b/pkgs/development/python-modules/matplotlib/default.nix @@ -1,15 +1,74 @@ -{ lib, stdenv, fetchPypi, writeText, buildPythonPackage, isPy3k, pycairo -, which, cycler, python-dateutil, numpy, pyparsing, sphinx, tornado, kiwisolver -, freetype, qhull, libpng, pkg-config, mock, pytz, pygobject3, gobject-introspection -, certifi, contourpy, pillow, fonttools, setuptools-scm, setuptools-scm-git-archive, packaging -, enableGhostscript ? true, ghostscript, gtk3 -, enableGtk3 ? false, cairo -# darwin has its own "MacOSX" backend -, enableTk ? !stdenv.isDarwin, tcl, tk, tkinter -, enableQt ? false, pyqt5 -# required for headless detection -, libX11, wayland +{ lib +, stdenv +, fetchPypi +, writeText +, buildPythonPackage +, pythonOlder + +# https://github.com/matplotlib/matplotlib/blob/main/doc/devel/dependencies.rst +# build-system +, pkg-config +, pybind11 +, setuptools +, setuptools-scm + +# native libraries +, ffmpeg-headless +, fontconfig +, freetype +, imagemagick +, qhull + +# propagates +, contourpy +, cycler +, fonttools +, kiwisolver +, numpy +, packaging +, pillow +, pyparsing +, python-dateutil + +# optional +, importlib-resources + +# GTK3 +, enableGtk3 ? false +, cairo +, gobject-introspection +, gtk3 +, pycairo +, pygobject3 + +# Tk +, enableTk ? !stdenv.isDarwin # darwin has its own "MacOSX" backend +, tcl +, tk +, tkinter + +# Ghostscript +, enableGhostscript ? true +, ghostscript + +# Qt +, enableQt ? false +, pyqt5 + +# Webagg +, enableWebagg ? false +, tornado + +# nbagg +, enableNbagg ? false +, ipykernel + +# darwin , Cocoa + +# required for headless detection +, libX11 +, wayland }: let @@ -17,83 +76,18 @@ let in buildPythonPackage rec { - version = "3.6.2"; + version = "3.7.0"; pname = "matplotlib"; - format = "setuptools"; + format = "pyproject"; - disabled = !isPy3k; + disabled = pythonOlder "3.9"; src = fetchPypi { inherit pname version; - sha256 = "sha256-sD/RChcJ0BAcBUiDtVD3xMXpdPdR4mgDGHWa8AWWSZA="; + hash = "sha256-j279MTQw1+9wo4oydigcsuhkazois7IesifaIOFeaBM="; }; - XDG_RUNTIME_DIR = "/tmp"; - - nativeBuildInputs = [ - pkg-config - setuptools-scm - setuptools-scm-git-archive - ]; - - buildInputs = [ - which - sphinx - ] ++ lib.optionals enableGhostscript [ - ghostscript - ] ++ lib.optionals stdenv.isDarwin [ - Cocoa - ]; - - # clang-11: error: argument unused during compilation: '-fno-strict-overflow' [-Werror,-Wunused-command-line-argument] - hardeningDisable = lib.optionals stdenv.isDarwin [ - "strictoverflow" - ]; - - propagatedBuildInputs = [ - certifi - contourpy - cycler - fonttools - freetype - kiwisolver - libpng - mock - numpy - packaging - pillow - pyparsing - python-dateutil - pytz - qhull - tornado - ] ++ lib.optionals enableGtk3 [ - cairo - gobject-introspection - gtk3 - pycairo - pygobject3 - ] ++ lib.optionals enableTk [ - libX11 - tcl - tk - tkinter - ] ++ lib.optionals enableQt [ - pyqt5 - ]; - - passthru.config = { - directories = { basedirlist = "."; }; - libs = { - system_freetype = true; - system_qhull = true; - } // lib.optionalAttrs stdenv.isDarwin { - # LTO not working in darwin stdenv, see #19312 - enable_lto = false; - }; - }; - - MPLSETUPCFG = writeText "mplsetup.cfg" (lib.generators.toINI {} passthru.config); + env.XDG_RUNTIME_DIR = "/tmp"; # Matplotlib tries to find Tcl/Tk by opening a Tk window and asking the # corresponding interpreter object for its library paths. This fails if @@ -113,24 +107,90 @@ buildPythonPackage rec { --replace libX11.so.6 ${libX11}/lib/libX11.so.6 \ --replace libwayland-client.so.0 ${wayland}/lib/libwayland-client.so.0 '' + - # avoid matplotlib trying to download dependencies + # bring our own system libraries + # https://github.com/matplotlib/matplotlib/blob/main/doc/devel/dependencies.rst#c-libraries '' echo "[libs] system_freetype=true system_qhull=true" > mplsetup.cfg - - substituteInPlace setup.py \ - --replace "setuptools_scm>=4,<7" "setuptools_scm>=4" ''; + nativeBuildInputs = [ + pkg-config + pybind11 + setuptools-scm + ]; + + buildInputs = [ + ffmpeg-headless + freetype + qhull + ] ++ lib.optionals enableGhostscript [ + ghostscript + ] ++ lib.optionals enableGtk3 [ + cairo + gobject-introspection + gtk3 + ] ++ lib.optionals enableTk [ + libX11 + tcl + tk + tkinter + ] ++ lib.optionals stdenv.isDarwin [ + Cocoa + ]; + + # clang-11: error: argument unused during compilation: '-fno-strict-overflow' [-Werror,-Wunused-command-line-argument] + hardeningDisable = lib.optionals stdenv.isDarwin [ + "strictoverflow" + ]; + + propagatedBuildInputs = [ + # explicit + contourpy + cycler + fonttools + kiwisolver + numpy + packaging + pillow + pyparsing + python-dateutil + ] ++ lib.optionals (pythonOlder "3.10") [ + importlib-resources + ] ++ lib.optionals enableGtk3 [ + pycairo + pygobject3 + ] ++ lib.optionals enableQt [ + pyqt5 + ] ++ lib.optionals enableWebagg [ + tornado + ] ++ lib.optionals enableNbagg [ + ipykernel + ]; + + passthru.config = { + directories = { basedirlist = "."; }; + libs = { + system_freetype = true; + system_qhull = true; + } // lib.optionalAttrs stdenv.isDarwin { + # LTO not working in darwin stdenv, see #19312 + enable_lto = false; + }; + }; + + env.MPLSETUPCFG = writeText "mplsetup.cfg" (lib.generators.toINI {} passthru.config); + # Matplotlib needs to be built against a specific version of freetype in # order for all of the tests to pass. doCheck = false; meta = with lib; { description = "Python plotting library, making publication quality plots"; - homepage = "https://matplotlib.org/"; - license = with licenses; [ psfl bsd0 ]; + homepage = "https://matplotlib.org/"; + changelog = "https://github.com/matplotlib/matplotlib/releases/tag/v${version}"; + license = with licenses; [ psfl bsd0 ]; maintainers = with maintainers; [ lovek323 veprbl ]; }; }