Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

proj: 6.3.1 -> 7.2.1 and related updates #119168

Merged
merged 5 commits into from Apr 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
20 changes: 0 additions & 20 deletions pkgs/development/libraries/proj/5.2.nix

This file was deleted.

8 changes: 4 additions & 4 deletions 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;

Expand Down
2 changes: 2 additions & 0 deletions pkgs/development/python-modules/basemap/default.nix
@@ -1,6 +1,7 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, pythonAtLeast
, numpy
, matplotlib
, pillow
Expand Down Expand Up @@ -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";
};

}
55 changes: 29 additions & 26 deletions 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 {
Expand All @@ -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 = [
Expand All @@ -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;
};
}
82 changes: 38 additions & 44 deletions 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

@@ -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:
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"]]
)


84 changes: 59 additions & 25 deletions 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
numpy
shapely
pandas
xarray
];

checkInputs = [ pytestCheckHook mock ];
preCheck = ''
# We need to build extensions locally to run tests
${python.interpreter} setup.py build_ext --inplace
cd test
'';

# prevent importing local directory
preCheck = "cd test";
pytestFlagsArray = [
"--ignore=test_doctest_wrapper.py"
"--ignore=test_datadir.py"
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 ];
};
}
1 change: 1 addition & 0 deletions pkgs/top-level/aliases.nix
Expand Up @@ -577,6 +577,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
Expand Down
2 changes: 0 additions & 2 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -16843,8 +16843,6 @@ in

proj = callPackage ../development/libraries/proj { };

proj_5 = callPackage ../development/libraries/proj/5.2.nix { };
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should add an alias for this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!


proj-datumgrid = callPackage ../development/libraries/proj-datumgrid { };

proselint = callPackage ../tools/text/proselint {
Expand Down