diff --git a/pkgs/development/libraries/proj/5.2.nix b/pkgs/development/libraries/proj/5.2.nix deleted file mode 100644 index ee76c668716c..000000000000 --- a/pkgs/development/libraries/proj/5.2.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ lib, stdenv, fetchurl }: - -stdenv.mkDerivation { - name = "proj-5.2.0"; - - src = fetchurl { - url = "https://download.osgeo.org/proj/proj-5.2.0.tar.gz"; - sha256 = "0q3ydh2j8qhwlxmnac72pg69rw2znbi5b6k5wama8qmwzycr94gg"; - }; - - doCheck = stdenv.is64bit; - - meta = with lib; { - description = "Cartographic Projections Library"; - homepage = "https://proj4.org"; - license = licenses.mit; - platforms = platforms.linux ++ platforms.darwin; - maintainers = with maintainers; [ vbgl ]; - }; -} diff --git a/pkgs/development/libraries/proj/default.nix b/pkgs/development/libraries/proj/default.nix index 22d6206fd851..92119a8788d7 100644 --- a/pkgs/development/libraries/proj/default.nix +++ b/pkgs/development/libraries/proj/default.nix @@ -1,21 +1,21 @@ -{ lib, stdenv, fetchFromGitHub, pkg-config, sqlite, autoreconfHook }: +{ lib, stdenv, fetchFromGitHub, pkg-config, sqlite, autoreconfHook, libtiff, curl }: stdenv.mkDerivation rec { pname = "proj"; - version = "6.3.1"; + version = "7.2.1"; src = fetchFromGitHub { owner = "OSGeo"; repo = "PROJ"; rev = version; - sha256 = "1ildcp57qsa01kvv2qxd05nqw5mg0wfkksiv9l138dbhp0s7rkxp"; + sha256 = "0mymvfvs8xggl4axvlj7kc1ksd9g94kaz6w1vdv0x2y5mqk93gx9"; }; outputs = [ "out" "dev"]; nativeBuildInputs = [ pkg-config autoreconfHook ]; - buildInputs = [ sqlite ]; + buildInputs = [ sqlite libtiff curl ]; doCheck = stdenv.is64bit; diff --git a/pkgs/development/python-modules/basemap/default.nix b/pkgs/development/python-modules/basemap/default.nix index 2fadda388ba0..c3d29d932442 100644 --- a/pkgs/development/python-modules/basemap/default.nix +++ b/pkgs/development/python-modules/basemap/default.nix @@ -1,6 +1,7 @@ { lib , buildPythonPackage , fetchFromGitHub +, pythonAtLeast , numpy , matplotlib , pillow @@ -43,6 +44,7 @@ buildPythonPackage rec { http://matplotlib.github.com/basemap/users/examples.html for examples of what it can do. ''; license = with licenses; [ mit gpl2 ]; + broken = pythonAtLeast "3.9"; }; } diff --git a/pkgs/development/python-modules/cartopy/default.nix b/pkgs/development/python-modules/cartopy/default.nix index 7e3e32067577..87eafc265501 100644 --- a/pkgs/development/python-modules/cartopy/default.nix +++ b/pkgs/development/python-modules/cartopy/default.nix @@ -1,10 +1,9 @@ -{ buildPythonPackage, lib, fetchPypi -, pytest_4, filelock, mock, pep8 -, cython, isPy27 +{ buildPythonPackage, lib, fetchPypi, fetchpatch +, pytestCheckHook, filelock, mock, pep8 +, cython , six, pyshp, shapely, geos, numpy , gdal, pillow, matplotlib, pyepsg, pykdtree, scipy, owslib, fiona -, xvfb_run -, proj_5 # see https://github.com/SciTools/cartopy/pull/1252 for status on proj 6 support +, proj }: buildPythonPackage rec { @@ -17,28 +16,16 @@ buildPythonPackage rec { sha256 = "0d24fk0cbp29gmkysrwq05vry13swmwi3vx3cpcy04c0ixz33ykz"; }; - checkInputs = [ filelock mock pytest_4 pep8 ]; - - # several tests require network connectivity: we disable them. - # also py2.7's tk is over-eager in trying to open an x display, - # so give it xvfb - checkPhase = let - maybeXvfbRun = lib.optionalString isPy27 "${xvfb_run}/bin/xvfb-run"; - in '' - export HOME=$(mktemp -d) - ${maybeXvfbRun} pytest --pyargs cartopy \ - -m "not network and not natural_earth" \ - -k "not test_nightshade_image and not background_img" - ''; - - nativeBuildInputs = [ - cython - geos # for geos-config - proj_5 + patches = [ + # Fix numpy-1.20 compatibility. Will be part of 0.19. + (fetchpatch { + url = "https://github.com/SciTools/cartopy/commit/e663bbbef07989a5f8484a8f36ea9c07e61d14ce.patch"; + sha256 = "061kbjgzkc3apaz6sxy00pkgy3n9dxcgps5wzj4rglb5iy86n2kq"; + }) ]; buildInputs = [ - geos proj_5 + geos proj ]; propagatedBuildInputs = [ @@ -49,12 +36,28 @@ buildPythonPackage rec { gdal pillow matplotlib pyepsg pykdtree scipy fiona owslib ]; + checkInputs = [ pytestCheckHook filelock mock pep8 ]; + + pytestFlagsArray = [ + "--pyargs" "cartopy" + "-m" "'not network and not natural_earth'" + ]; + + disabledTests = [ + "test_nightshade_image" + "background_img" + ]; + + nativeBuildInputs = [ + cython + geos # for geos-config + proj + ]; + meta = with lib; { description = "Process geospatial data to create maps and perform analyses"; license = licenses.lgpl3; homepage = "https://scitools.org.uk/cartopy/docs/latest/"; maintainers = with maintainers; [ mredaelli ]; - # following tests fail: test_eccentric_globe and test_ellipse_globe - broken = true; }; } diff --git a/pkgs/development/python-modules/pyproj/001.proj.patch b/pkgs/development/python-modules/pyproj/001.proj.patch index 52e0a80f739d..7b1680e980eb 100644 --- a/pkgs/development/python-modules/pyproj/001.proj.patch +++ b/pkgs/development/python-modules/pyproj/001.proj.patch @@ -1,62 +1,56 @@ diff -Nur a/pyproj/datadir.py b/pyproj/datadir.py ---- a/pyproj/datadir.py 2020-03-24 12:53:39.417440608 +0100 -+++ b/pyproj/datadir.py 2020-03-24 12:56:19.870089479 +0100 -@@ -66,9 +66,7 @@ +--- a/pyproj/datadir.py 2021-04-10 18:26:52.829018483 +0100 ++++ b/pyproj/datadir.py 2021-04-10 18:44:59.155190614 +0100 +@@ -70,7 +70,7 @@ if _VALIDATED_PROJ_DATA is not None: return _VALIDATED_PROJ_DATA global _USER_PROJ_DATA -- internal_datadir = os.path.join( -- os.path.dirname(os.path.abspath(__file__)), "proj_dir", "share", "proj" -- ) -+ internal_datadir = "@proj@/share/proj" +- internal_datadir = Path(__file__).absolute().parent / "proj_dir" / "share" / "proj" ++ internal_datadir = Path("@proj@/share/proj") proj_lib_dirs = os.environ.get("PROJ_LIB", "") - prefix_datadir = os.path.join(sys.prefix, "share", "proj") + prefix_datadir = Path(sys.prefix, "share", "proj") diff -Nur a/setup.py b/setup.py ---- a/setup.py 2020-03-24 12:53:39.415440624 +0100 -+++ b/setup.py 2020-03-24 12:52:05.311232522 +0100 +--- a/setup.py 2021-04-10 18:26:52.817018512 +0100 ++++ b/setup.py 2021-04-10 18:46:01.652324424 +0100 @@ -11,7 +11,7 @@ - PROJ_MIN_VERSION = parse_version("6.2.0") - CURRENT_FILE_PATH = os.path.dirname(os.path.abspath(__file__)) - BASE_INTERNAL_PROJ_DIR = "proj_dir" --INTERNAL_PROJ_DIR = os.path.join(CURRENT_FILE_PATH, "pyproj", BASE_INTERNAL_PROJ_DIR) -+INTERNAL_PROJ_DIR = "@proj@" + PROJ_MIN_VERSION = parse_version("7.2.0") + CURRENT_FILE_PATH = Path(__file__).absolute().parent + BASE_INTERNAL_PROJ_DIR = Path("proj_dir") +-INTERNAL_PROJ_DIR = CURRENT_FILE_PATH / "pyproj" / BASE_INTERNAL_PROJ_DIR ++INTERNAL_PROJ_DIR = Path("@proj@") - def check_proj_version(proj_dir): -@@ -146,7 +146,7 @@ + def get_proj_version(proj_dir: Path) -> str: +@@ -150,7 +150,7 @@ # By default we'll try to get options PROJ_DIR or the local version of proj proj_dir = get_proj_dir() library_dirs = get_proj_libdirs(proj_dir) - include_dirs = get_proj_incdirs(proj_dir) -+ include_dirs = get_proj_incdirs("@projdev@") ++ include_dirs = get_proj_incdirs(Path("@projdev@")) - # setup extension options - ext_options = { + proj_version = get_proj_version(proj_dir) + check_proj_version(proj_version) diff -Nur a/test/conftest.py b/test/conftest.py ---- a/test/conftest.py 2020-03-24 12:53:39.417440608 +0100 -+++ b/test/conftest.py 2020-03-24 23:16:47.373972786 +0100 -@@ -1,6 +1,7 @@ - import os - import shutil - import tempfile +--- a/test/conftest.py 2021-04-10 18:26:52.831018478 +0100 ++++ b/test/conftest.py 2021-04-10 18:37:01.605682432 +0100 +@@ -2,6 +2,7 @@ + from contextlib import contextmanager + from distutils.version import LooseVersion + from pathlib import Path +import stat - import pytest + import pyproj + from pyproj.datadir import get_data_dir, get_user_data_dir, set_data_dir +diff -Nur a/test/test_cli.py b/test/test_cli.py +--- a/test/test_cli.py 2021-04-10 18:26:52.831018478 +0100 ++++ b/test/test_cli.py 2021-04-10 22:17:04.665088162 +0100 +@@ -14,7 +14,7 @@ + from test.conftest import grids_available, proj_env, tmp_chdir + + PYPROJ_CLI_ENDPONTS = pytest.mark.parametrize( +- "input_command", [["pyproj"], [sys.executable, "-m", "pyproj"]] ++ "input_command", [[sys.executable, "-m", "pyproj"]] + ) + -@@ -17,6 +18,15 @@ - with tempfile.TemporaryDirectory() as tmpdir: - tmp_data_dir = os.path.join(tmpdir, "proj") - shutil.copytree(data_dir, tmp_data_dir) -+ -+ # Data copied from the nix store is readonly (causes cleanup problem). -+ # Make it writable. -+ for r, d, files in os.walk(tmp_data_dir): -+ os.chmod(r, os.stat(r).st_mode | stat.S_IWUSR) -+ for f in files: -+ fpath = os.path.join(r, f) -+ os.chmod(fpath, os.stat(fpath).st_mode | stat.S_IWUSR) -+ - try: - os.remove(os.path.join(str(tmp_data_dir), "ntv2_0.gsb")) - except OSError: diff --git a/pkgs/development/python-modules/pyproj/default.nix b/pkgs/development/python-modules/pyproj/default.nix index c000283e6de8..2f4f26f03b43 100644 --- a/pkgs/development/python-modules/pyproj/default.nix +++ b/pkgs/development/python-modules/pyproj/default.nix @@ -1,60 +1,94 @@ -{ lib, buildPythonPackage, fetchFromGitHub, python, pkgs, pythonOlder, isPy27, substituteAll -, aenum +{ lib +, buildPythonPackage +, fetchFromGitHub +, python +, proj +, pythonOlder +, substituteAll , cython , pytestCheckHook , mock +, certifi , numpy , shapely +, pandas +, xarray }: buildPythonPackage rec { pname = "pyproj"; - version = "2.6.0"; - disabled = isPy27; + version = "3.0.1"; + disabled = pythonOlder "3.7"; src = fetchFromGitHub { owner = "pyproj4"; repo = "pyproj"; - rev = "v${version}rel"; - sha256 = "0fyggkbr3kp8mlq4c0r8sl5ah58bdg2mj4kzql9p3qyrkcdlgixh"; + rev = version; + sha256 = "1q1i1235cp3k32dpb11r7krx5rpqwszb89mrx85rflc1z5acaj58"; }; - # force pyproj to use ${pkgs.proj} + # force pyproj to use ${proj} patches = [ (substituteAll { src = ./001.proj.patch; - proj = pkgs.proj; - projdev = pkgs.proj.dev; + proj = proj; + projdev = proj.dev; }) ]; - buildInputs = [ cython pkgs.proj ]; + nativeBuildInputs = [ cython ]; + buildInputs = [ proj ]; propagatedBuildInputs = [ - numpy shapely - ] ++ lib.optional (pythonOlder "3.6") aenum; + certifi + ]; - checkInputs = [ pytestCheckHook mock ]; + checkInputs = [ + pytestCheckHook + mock + numpy + shapely + pandas + xarray + ]; - # prevent importing local directory - preCheck = "cd test"; - pytestFlagsArray = [ - "--ignore=test_doctest_wrapper.py" - "--ignore=test_datadir.py" + preCheck = '' + # We need to build extensions locally to run tests + ${python.interpreter} setup.py build_ext --inplace + cd test + ''; + + disabledTestPaths = [ + "test_doctest_wrapper.py" + "test_datadir.py" ]; disabledTests = [ - "alternative_grid_name" - "transform_wgs84_to_alaska" - "transformer_group__unavailable" - "transform_group__missing_best" - "datum" - "repr" + # The following tests try to access network and end up with a URLError + "test__load_grid_geojson_old_file" + "test_get_transform_grid_list" + "test_get_transform_grid_list__area_of_use" + "test_get_transform_grid_list__bbox__antimeridian" + "test_get_transform_grid_list__bbox__out_of_bounds" + "test_get_transform_grid_list__contains" + "test_get_transform_grid_list__file" + "test_get_transform_grid_list__source_id" + "test_sync__area_of_use__list" + "test_sync__bbox__list" + "test_sync__bbox__list__exclude_world_coverage" + "test_sync__download_grids" + "test_sync__file__list" + "test_sync__source_id__list" + "test_sync_download" + "test_sync_download__directory" + "test_sync_download__system_directory" + "test_transformer_group__download_grids" ]; meta = { description = "Python interface to PROJ.4 library"; - homepage = "https://github.com/jswhit/pyproj"; + homepage = "https://github.com/pyproj4/pyproj"; license = with lib.licenses; [ isc ]; + maintainers = with lib.maintainers; [ lsix ]; }; } diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index f9e470aaac0a..e7071cc78e6e 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -578,6 +578,7 @@ mapAliases ({ ppl-address-book = throw "ppl-address-book deprecated on 2019-05-02: abandoned by upstream."; processing3 = processing; # added 2019-08-16 procps-ng = procps; # added 2018-06-08 + proj_5 = throw "Proj-5 has been removed from nixpkgs, use proj instead."; # added 2021-04-12 prometheus-cups-exporter = throw "outdated and broken by design; removed by developer."; # added 2021-03-16 pygmentex = texlive.bin.pygmentex; # added 2019-12-15 pyload = throw "pyload has been removed from nixpkgs, as it was unmaintained."; # added 2021-03-21 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d0b7d5ea2eca..d5cd8c65d846 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -16861,8 +16861,6 @@ in proj = callPackage ../development/libraries/proj { }; - proj_5 = callPackage ../development/libraries/proj/5.2.nix { }; - proj-datumgrid = callPackage ../development/libraries/proj-datumgrid { }; proselint = callPackage ../tools/text/proselint {